/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved. * */ /* * Generally useful functions :) */ package com.sleepycat.db.test; import static org.junit.Assert.fail; import com.sleepycat.db.*; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Properties; public class TestUtils { public static boolean config_loaded = false; public static boolean verbose_flag = false; public static int debug_level = 2; // should be initialized by calling loadEnvVars. Shared between all tests. public static String BASETEST_DBDIR = ""; public static File BASETEST_DBFILE = null; // new File(TestUtils.BASETEST_DBDIR); public static String BASETEST_BACKUPDIR = ""; public static File BASETEST_BACKUPFILE = null; // new File(TestUtils.BASETEST_BACKUPDIR); public static void ERR(String a) { System.err.println("FAIL: " + a); fail(a); } public static void DEBUGOUT(String s) { DEBUGOUT(1, s); } public static void DEBUGOUT(int importance, String s) { if(importance > debug_level) System.out.println("DEBUG: " +s); } public static void VERBOSEOUT(String s) { if (verbose_flag) System.out.println(s); } public static void sysexit(int code) { System.exit(code); } public static void check_file_removed(String name, boolean fatal, boolean force_remove_first) { File f = new File(name); if (force_remove_first) { f.delete(); } if (f.exists()) { if (fatal) System.out.print("FAIL: "); DEBUGOUT(1, "File \"" + name + "\" still exists after check_file_removed\n"); if (fatal) fail("File \"" + name + "\" still exists after check_file_removed"); } } // remove any existing environment or database public static void removeall(boolean use_db, boolean remove_env, String envpath, String dbname) { { try { if (remove_env) Environment.remove(new File(envpath), true, EnvironmentConfig.DEFAULT); if (use_db) Database.remove(dbname, null, DatabaseConfig.DEFAULT); } catch (DatabaseException dbe) { DEBUGOUT(1, "TestUtil::removeall exception caught: " + dbe); } catch (FileNotFoundException dbe) { DEBUGOUT(1, "TestUtil::removeall exception caught: " + dbe); } } check_file_removed(dbname, false, !use_db); if (remove_env) { for (int i=0; i<8; i++) { String fname = envpath + "/" + "__db." + i; check_file_removed(fname, true, !use_db); } // ensure the user knows if there is junk remaining. // clean out spurious log.00X files File dir = new File(envpath); if(dir.isDirectory()) { String[] remainingfiles = dir.list(); for(int i = 0; i < remainingfiles.length; i++) { if(remainingfiles[i].startsWith("log") || remainingfiles[i].endsWith("db2") || remainingfiles[i].endsWith("log") || remainingfiles[i].startsWith("__db")) { DEBUGOUT(1, "TestUtils::removeall removing: " +remainingfiles[i]); check_file_removed(envpath + "/" + remainingfiles[i], false, true); } else { if(remainingfiles[i].indexOf("del") == -1) DEBUGOUT(3, "TestUtils::removeall warning, file: " + remainingfiles[i] + " remains in directory after cleanup."); } } } } } public static boolean removeDir(String dirname) { try { File deldir = new File(dirname); if (!deldir.exists()) { return true; } else if(!deldir.isDirectory()) { return false; } else { File[] contents = deldir.listFiles(); for (int i = 0; i < contents.length; i++) { if (contents[i].isDirectory()) removeDir(contents[i].toString()); else contents[i].delete(); } deldir.delete(); } } catch (Exception e) { TestUtils.DEBUGOUT(4, "Warning: error encountered removing directory.\n" + e); } return true; } static public String shownull(Object o) { if (o == null) return "null"; else return "not null"; } /* * The config file is not currently required. * The only variable that can be set via the * config file is the base directory for the * tests to be run in. The default is "data" * and will be created for the tests. */ public static void loadConfig(String envfilename) { if(config_loaded) return; String configname = envfilename; if(envfilename == null) { String OSStr = java.lang.System.getProperty("os.name"); if((OSStr.toLowerCase()).indexOf("windows") != -1) { configname = "config_win32"; } else { // assume a nix variant. configname = "config_nix"; } } config_loaded = true; try { InputStream in = new FileInputStream(configname); DEBUGOUT(2, "Opened " + configname + " to read configuration."); Properties props = new Properties(); props.load(in); String var = props.getProperty("BASETEST_DBDIR"); if(var != null) { // Property seems to encase things in ""; var = var.substring(1); var = var.substring(0, var.length() -2); BASETEST_DBDIR = var; } DEBUGOUT(2, "BASETEST_DBDIR is: " + BASETEST_DBDIR); } catch (Exception e) { // expected - the config file is optional. DEBUGOUT(0, "loadEnvVars -- loading of default variables failed. error: " + e); } if (BASETEST_DBDIR == "") BASETEST_DBDIR = "data"; BASETEST_DBFILE = new File(BASETEST_DBDIR); if (!BASETEST_DBFILE.exists()) BASETEST_DBFILE.mkdirs(); BASETEST_BACKUPDIR = BASETEST_DBDIR + "_bak"; BASETEST_BACKUPFILE = new File(BASETEST_BACKUPDIR); if (!BASETEST_BACKUPFILE.exists()) BASETEST_BACKUPFILE.mkdirs(); } public static String getDBFileName(String dbname) { DEBUGOUT(1, "getDBFileName returning: " + BASETEST_DBDIR + "/" + dbname); return BASETEST_DBDIR + "/" + dbname; } public static String getBackupFileName(String dbname) { DEBUGOUT(1, "getBackupFileName returning: " + BASETEST_BACKUPDIR + "/" + dbname); return BASETEST_BACKUPDIR + "/" + dbname; } public static OutputStream getErrorStream() { OutputStream retval = System.err; try { File outfile = new File(BASETEST_DBDIR + "/" + "errstream.log"); if(outfile.exists()) { outfile.delete(); outfile.createNewFile(); } else { outfile.createNewFile(); } retval = new FileOutputStream(outfile); } catch (FileNotFoundException fnfe) { DEBUGOUT(3, "Unable to open error log file. " + fnfe); } catch (IOException ioe) { DEBUGOUT(3, "Unable to create error log file. " + ioe); } return retval; } }