01: /*-
02: * See the file LICENSE for redistribution information.
03: *
04: * Copyright (c) 2002,2008 Oracle. All rights reserved.
05: *
06: * $Id: ExceptionListenerTest.java,v 1.5.2.3 2008/01/07 15:14:35 cwl Exp $
07: */
08:
09: package com.sleepycat.je.utilint;
10:
11: import java.io.File;
12: import java.io.IOException;
13:
14: import junit.framework.TestCase;
15:
16: import com.sleepycat.je.DatabaseException;
17: import com.sleepycat.je.DbInternal;
18: import com.sleepycat.je.Environment;
19: import com.sleepycat.je.EnvironmentConfig;
20: import com.sleepycat.je.ExceptionEvent;
21: import com.sleepycat.je.ExceptionListener;
22: import com.sleepycat.je.dbi.EnvironmentImpl;
23: import com.sleepycat.je.util.TestUtils;
24:
25: public class ExceptionListenerTest extends TestCase {
26:
27: private File envHome;
28:
29: private volatile boolean exceptionSeenCalled = false;
30:
31: private DaemonThread dt = null;
32:
33: public ExceptionListenerTest() {
34: envHome = new File(System.getProperty(TestUtils.DEST_DIR));
35: }
36:
37: public void setUp() throws IOException {
38:
39: TestUtils.removeLogFiles("Setup", envHome, false);
40: }
41:
42: public void tearDown() throws Exception {
43:
44: TestUtils.removeLogFiles("TearDown", envHome, false);
45: }
46:
47: public void testExceptionListener() throws Exception {
48:
49: EnvironmentConfig envConfig = new EnvironmentConfig();
50: envConfig.setExceptionListener(new MyExceptionListener());
51: envConfig.setAllowCreate(true);
52: Environment env = new Environment(envHome, envConfig);
53: EnvironmentImpl envImpl = DbInternal.envGetEnvironmentImpl(env);
54: dt = new MyDaemonThread(0, Environment.CLEANER_NAME, envImpl);
55: dt.stifleExceptionChatter = true;
56: dt.addToQueue(new Object());
57: dt.runOrPause(true);
58: while (!dt.isShutdownRequested()) {
59: Thread.yield();
60: }
61: assertTrue("ExceptionListener apparently not called",
62: exceptionSeenCalled);
63: }
64:
65: private class MyDaemonThread extends DaemonThread {
66: MyDaemonThread(long waitTime, String name, EnvironmentImpl env) {
67: super (waitTime, name, env);
68: }
69:
70: protected void onWakeup() throws DatabaseException {
71:
72: throw new RuntimeException("test exception listener");
73: }
74: }
75:
76: private class MyExceptionListener implements ExceptionListener {
77: public void exceptionThrown(ExceptionEvent event) {
78: assertEquals("daemonName should be CLEANER_NAME",
79: Environment.CLEANER_NAME, event.getThreadName());
80: dt.requestShutdown();
81: exceptionSeenCalled = true;
82: }
83: }
84: }
|