@Override
  public void startIt() {
    if (semaphore.tryAcquire()) {
      try {
        executorService.execute(this::doDatabaseMigration);
      } catch (RuntimeException e) {
        semaphore.release();
        throw e;
      }
    } else {
      LOGGER.trace("{}: lock is already taken or process is already running", Thread.currentThread().getName());
    }
  }
@Test
  public void startit_calls_MigrationEngine_execute() {
    underTest.startIt();

    inOrder.verify(migrationEngine).execute(any());
    inOrder.verify(platform).doStart();
    inOrder.verifyNoMoreInteractions();
  }