/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved. * */ /* * Alexg 23-4-06 * Based on scr016 TestCallback test application. * * Simple tests for DbErrorHandler, DbFeedbackHandler, DbPanicHandler */ package com.sleepycat.db.test; import org.junit.Before; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.io.File; import java.io.FileNotFoundException; import com.sleepycat.db.*; import com.sleepycat.db.DatabaseException; import com.sleepycat.db.test.TestUtils; public class CallbackTest implements FeedbackHandler, PanicHandler, ErrorHandler { public static final String CALLBACKTEST_DBNAME = "callbacktest.db"; int callback_count = 0; boolean callback_throws = false; @BeforeClass public static void ClassInit() { TestUtils.loadConfig(null); TestUtils.check_file_removed(TestUtils.getDBFileName(CALLBACKTEST_DBNAME), true, true); } @AfterClass public static void ClassShutdown() { TestUtils.check_file_removed(TestUtils.getDBFileName(CALLBACKTEST_DBNAME), true, true); } @Before public void PerTestInit() throws Exception { TestUtils.removeall(true, true, TestUtils.BASETEST_DBDIR, TestUtils.getDBFileName(CALLBACKTEST_DBNAME)); } @After public void PerTestShutdown() throws Exception { TestUtils.removeall(true, true, TestUtils.BASETEST_DBDIR, TestUtils.getDBFileName(CALLBACKTEST_DBNAME)); } /* * Test creating a new database. */ @Test public void test1() throws DatabaseException, FileNotFoundException { TestUtils.debug_level = 2; EnvironmentConfig envc = new EnvironmentConfig(); envc.setAllowCreate(true); envc.setInitializeCache(true); envc.setTransactional(true); envc.setInitializeLocking(true); envc.setCacheSize(64 * 1024); envc.setFeedbackHandler(this); envc.setPanicHandler(this); envc.setErrorHandler(this); Environment dbEnv = new Environment(TestUtils.BASETEST_DBFILE, envc); // set up a transaction DB. DatabaseConfig dbConfig = new DatabaseConfig(); dbConfig.setType(DatabaseType.BTREE); dbConfig.setAllowCreate(true); Database db = dbEnv.openDatabase(null, CALLBACKTEST_DBNAME, null, dbConfig); DatabaseEntry key1 = new DatabaseEntry("key".getBytes()); DatabaseEntry data1 = new DatabaseEntry("data".getBytes()); // populate was doing some more than this (validating that not retrieving things that were not added) db.putNoOverwrite(null, key1, data1); // TestUtil.populate(db); CheckpointConfig cpcfg = new CheckpointConfig(); cpcfg.setForce(true); dbEnv.checkpoint(cpcfg); try { dbConfig.setBtreeComparator(null); } catch (IllegalArgumentException dbe) { TestUtils.DEBUGOUT(1, "got expected exception: " + dbe); // ignore } /* // Pretend we crashed, and reopen the environment db = null; dbenv = null; dbenv = new DbEnv(0); dbenv.setFeedbackHandler(this); dbenv.open(".", Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL | Db.DB_INIT_LOG | Db.DB_INIT_TXN | Db.DB_RECOVER, 0); */ dbEnv.panic(true); try { DatabaseEntry key = new DatabaseEntry("foo".getBytes()); DatabaseEntry data = new DatabaseEntry(); db.get(null, key, data, null); } catch (DatabaseException dbe2) { TestUtils.DEBUGOUT(2, "got expected exception: " + dbe2); // ignore } } /* * FeedbackHandler interface implementation. */ public void recoveryFeedback(Environment dbenv, int percent) { TestUtils.DEBUGOUT(2, "recoveryFeedback callback invoked. percent: " + percent); } public void upgradeFeedback(Database db, int percent) { TestUtils.DEBUGOUT(2, "upgradeFeedback callback invoked. percent: " + percent); } public void verifyFeedback(Database db, int percent) { TestUtils.DEBUGOUT(2, "verifyFeedback callback invoked. percent: " + percent); } /* * Panic handler interface implementation. */ public void panic(Environment dbenv, DatabaseException e) { TestUtils.DEBUGOUT(2, "panic callback invoked. exception: " + e); } /* * Error handler interface implementation. */ public void error(Environment dbenv, String errpfx, String msg) { TestUtils.DEBUGOUT(2, "error callback invoked, errpfx: \"" + errpfx + "\", msg: \"" + msg + "\""); } }