/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved. * */ package com.sleepycat.util.test; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import com.sleepycat.compat.DbCompat; import com.sleepycat.db.DatabaseException; import com.sleepycat.db.Environment; import com.sleepycat.db.EnvironmentConfig; /** * @author Mark Hayes */ public class TestEnv { public static final TestEnv BDB; public static final TestEnv CDB; public static final TestEnv TXN; static { EnvironmentConfig config; config = newEnvConfig(); BDB = new TestEnv("bdb", config); if (DbCompat.CDB) { config = newEnvConfig(); DbCompat.setInitializeCDB(config, true); CDB = new TestEnv("cdb", config); } else { CDB = null; } config = newEnvConfig(); config.setTransactional(true); DbCompat.setInitializeLocking(config, true); TXN = new TestEnv("txn", config); } private static EnvironmentConfig newEnvConfig() { EnvironmentConfig config = new EnvironmentConfig(); config.setTxnNoSync(Boolean.getBoolean(SharedTestUtils.NO_SYNC)); if (DbCompat.MEMORY_SUBSYSTEM) { DbCompat.setInitializeCache(config, true); } return config; } public static final TestEnv[] ALL; static { if (DbCompat.CDB) { ALL = new TestEnv[] { BDB, CDB, TXN }; } else { ALL = new TestEnv[] { BDB, TXN }; } } private final String name; private final EnvironmentConfig config; protected TestEnv(String name, EnvironmentConfig config) { this.name = name; this.config = config; } public String getName() { return name; } public EnvironmentConfig getConfig() { return config; } void copyConfig(EnvironmentConfig copyToConfig) { DbCompat.setInitializeCache (copyToConfig, DbCompat.getInitializeCache(config)); DbCompat.setInitializeLocking (copyToConfig, DbCompat.getInitializeLocking(config)); DbCompat.setInitializeCDB (copyToConfig, DbCompat.getInitializeCDB(config)); copyToConfig.setTransactional(config.getTransactional()); } public boolean isTxnMode() { return config.getTransactional(); } public boolean isCdbMode() { return DbCompat.getInitializeCDB(config); } public Environment open(String testName) throws IOException, DatabaseException { return open(testName, true); } public Environment open(String testName, boolean create) throws IOException, DatabaseException { config.setAllowCreate(create); /* OLDEST deadlock detection on DB matches the use of timeouts on JE.*/ DbCompat.setLockDetectModeOldest(config); File dir = getDirectory(testName, create); return newEnvironment(dir, config); } /** * Is overridden in XACollectionTest. * @throws FileNotFoundException from DB core. */ protected Environment newEnvironment(File dir, EnvironmentConfig config) throws DatabaseException, FileNotFoundException { return new Environment(dir, config); } public File getDirectory(String testName) { return getDirectory(testName, true); } public File getDirectory(String testName, boolean create) { if (create) { return SharedTestUtils.getNewDir(testName); } else { return SharedTestUtils.getExistingDir(testName); } } }