@Test
  public void should_return_embedded_data_directory() throws Exception {

    Settings settings = testSettings(0);
    EmbeddedDatabase database = new EmbeddedDatabase(settings);

    File dataDirectory = database.getDataDirectory(settings);
    assertThat(dataDirectory).isNotNull();
    assertThat(dataDirectory.getPath()).endsWith("testDB");
  }
  @Test
  public void should_return_sonar_home_directory() throws Exception {
    Settings settings = testSettings(0);
    settings.setProperty(CoreProperties.SONAR_HOME, ".");
    settings.setProperty(DatabaseProperties.PROP_EMBEDDED_DATA_DIR, "");

    EmbeddedDatabase database = new EmbeddedDatabase(settings);

    File dataDirectory = database.getDataDirectory(settings);
    assertThat(dataDirectory).isNotNull();
    assertThat(dataDirectory.getPath()).endsWith("data");
  }
  @Test
  public void should_fail_on_invalid_sonar_home_directory() throws Exception {
    throwable.expect(IllegalStateException.class);

    String testPath = getClass().getResource(".").getPath();

    Settings settings = testSettings(0);
    settings.setProperty(CoreProperties.SONAR_HOME, testPath + "/unmatched_directory");
    settings.setProperty(DatabaseProperties.PROP_EMBEDDED_DATA_DIR, "");

    EmbeddedDatabase database = new EmbeddedDatabase(settings);
    database.getDataDirectory(settings);
  }
  @Test
  public void should_fail_on_invalid_data_directory() throws Exception {
    throwable.expect(SonarException.class);

    String testPath = getClass().getResource(".").getPath();

    Settings settings = testSettings(0);
    settings.setProperty(
        DatabaseProperties.PROP_EMBEDDED_DATA_DIR, testPath + "/invalid_db_data_file");

    EmbeddedDatabase database = new EmbeddedDatabase(settings);
    database.start();
  }
  @Test(timeout = 10000)
  public void should_start_and_stop() throws IOException {
    int port = freeServerPort();

    EmbeddedDatabase database = new EmbeddedDatabase(testSettings(port));
    database.start();

    try {
      String driverUrl =
          String.format("jdbc:h2:tcp://localhost:%d/sonar;USER=login;PASSWORD=pwd", port);
      DriverManager.registerDriver(new Driver());
      DriverManager.getConnection(driverUrl).close();
    } catch (Exception ex) {
      fail("Unable to connect after start");
    }

    database.stop();
  }
  @Test(timeout = 10000)
  public void should_support_memory_database() throws IOException {
    int port = freeServerPort();

    EmbeddedDatabase database =
        new EmbeddedDatabase(
            testSettings(port)
                .setProperty(
                    DatabaseProperties.PROP_URL,
                    "jdbc:h2:tcp://localhost:" + port + "/mem:sonarIT;USER=sonar;PASSWORD=sonar"));
    database.start();

    try {
      String driverUrl =
          String.format("jdbc:h2:tcp://localhost:%d/mem:sonarIT;USER=sonar;PASSWORD=sonar", port);
      DriverManager.registerDriver(new Driver());
      DriverManager.getConnection(driverUrl).close();
    } catch (Exception ex) {
      fail("Unable to connect after start");
    }

    database.stop();
  }