public URL getRepositoryContrib(FeaturesRunner runner) {
    String msg;
    if (isVCS()) {
      msg = "Deploying a VCS repository";
    } else if (isDBS()) {
      msg = "Deploying a DBS repository using " + coreType;
    } else {
      throw new NuxeoException("Unkown test configuration (not vcs/dbs)");
    }
    // System.out used on purpose, don't remove
    System.out.println(getClass().getSimpleName() + ": " + msg);
    log.info(msg);

    String contribPath;
    String bundleName;
    if (isVCS()) {
      bundleName = "org.nuxeo.ecm.core.storage.sql.test";
      contribPath = databaseHelper.getDeploymentContrib();
    } else {
      bundleName = "org.nuxeo.ecm.core.test";
      if (isDBSMem()) {
        contribPath = "OSGI-INF/test-storage-repo-mem-contrib.xml";
      } else if (isDBSMongoDB()) {
        contribPath = "OSGI-INF/test-storage-repo-mongodb-contrib.xml";
      } else {
        throw new NuxeoException("Unkown DBS test configuration (not mem/mongodb)");
      }
    }
    RuntimeHarness harness = runner.getFeature(RuntimeFeature.class).getHarness();
    Bundle bundle = harness.getOSGiAdapter().getRegistry().getBundle(bundleName);
    URL contribURL = bundle.getEntry(contribPath);
    assertNotNull("deployment contrib " + contribPath + " not found", contribURL);
    return contribURL;
  }
 /** Checks if the database supports multiple fulltext indexes. */
 public boolean supportsMultipleFulltextIndexes() {
   if (isVCS()) {
     return databaseHelper.supportsMultipleFulltextIndexes();
   } else {
     return false; // DBS
   }
 }
 /** Checks if the database has sub-second resolution. */
 public boolean hasSubSecondResolution() {
   if (isVCS()) {
     return databaseHelper.hasSubSecondResolution();
   } else {
     return true; // DBS
   }
 }
 /** For databases that do asynchronous fulltext indexing, sleep a bit. */
 public void sleepForFulltext() {
   if (isVCS()) {
     databaseHelper.sleepForFulltext();
   } else {
     // DBS
   }
 }
  protected void initJDBC() {
    databaseHelper = DatabaseHelper.DATABASE;

    String msg = "Deploying JDBC using " + databaseHelper.getClass().getSimpleName();
    // System.out used on purpose, don't remove
    System.out.println(getClass().getSimpleName() + ": " + msg);
    log.info(msg);

    // setup system properties for generic XML extension points
    // this is used both for VCS (org.nuxeo.ecm.core.storage.sql.RepositoryService)
    // and DataSources (org.nuxeo.runtime.datasource) extension points
    try {
      databaseHelper.setUp();
    } catch (SQLException e) {
      throw new NuxeoException(e);
    }
  }
 /** For databases that don't have sub-second resolution, sleep a bit to get to the next second. */
 public void maybeSleepToNextSecond() {
   if (isVCS()) {
     databaseHelper.maybeSleepToNextSecond();
   } else {
     // DBS
   }
   // sleep 1 ms nevertheless to have different timestamps
   try {
     Thread.sleep(1);
   } catch (InterruptedException e) {
     Thread.currentThread().interrupt(); // restore interrupted status
     throw new RuntimeException(e);
   }
 }