001: /*
002: * Copyright (c) 2002-2003 by OpenSymphony
003: * All rights reserved.
004: */
005: package com.opensymphony.oscache.plugins.clustersupport;
006:
007: import com.opensymphony.oscache.base.*;
008:
009: import junit.framework.TestCase;
010:
011: import java.util.Date;
012:
013: /**
014: * A base class that provides the framework for testing a cluster listener
015: * implementation.
016: *
017: * @author <a href="mailto:chris@swebtec.com">Chris Miller</a>
018: */
019: public abstract class BaseTestBroadcastingListener extends TestCase {
020: /**
021: * The persistance listener used for the tests
022: */
023: protected static AbstractBroadcastingListener listener = null;
024:
025: /**
026: * A cache instance to use for the tests
027: */
028: protected static Cache cache = null;
029:
030: /**
031: * The number of tests in this class. This is used to keep
032: * track of how many tests remain; once we reach zero we shut
033: * down the broadcasting listener.
034: */
035: int testsRemaining = 0;
036:
037: /**
038: * Cache group
039: */
040: private final String GROUP = "test group";
041:
042: /**
043: * Object key
044: */
045: private final String KEY = "Test clustersupport persistence listener key";
046:
047: public BaseTestBroadcastingListener(String str) {
048: super (str);
049: }
050:
051: /**
052: * Tests the listener by causing the cache to fire off all its
053: * events
054: */
055: public void testListener() {
056: CacheEntry entry = new CacheEntry(KEY, null);
057:
058: cache.putInCache(KEY, entry);
059: cache.putInCache(KEY, entry, new String[] { GROUP });
060: cache.flushEntry(KEY);
061: cache.flushGroup(GROUP);
062: cache.flushAll(new Date());
063:
064: // Note that the remove event is not called since it's not exposed.
065: }
066:
067: /**
068: * This method is invoked before each testXXXX methods of the
069: * class. It set up the broadcasting listener required for each test.
070: */
071: public void setUp() {
072: // At first invocation, create a listener
073: if (listener == null) {
074: testsRemaining = countTestCases(); // This seems to always return 1 even if there are multiple tests?
075:
076: listener = getListener();
077: assertNotNull(listener);
078:
079: cache = new Cache(true, false, false);
080: assertNotNull(cache);
081:
082: try {
083: listener.initialize(cache, getConfig());
084: } catch (InitializationException e) {
085: fail(e.getMessage());
086: }
087:
088: cache.addCacheEventListener(listener);
089: }
090: }
091:
092: /**
093: * Once all the tests are complete this will shut down the broadcasting listener.
094: */
095: protected void tearDown() throws Exception {
096: if (--testsRemaining == 0) {
097: try {
098: listener.finialize();
099: listener = null;
100: } catch (FinalizationException e) {
101: fail(e.getMessage());
102: }
103: }
104: }
105:
106: /**
107: * Child classes implement this to return the broadcasting listener instance
108: * that will be tested.
109: */
110: abstract AbstractBroadcastingListener getListener();
111:
112: /**
113: * Child classes implement this to return the configuration for their listener
114: * @return
115: */
116: abstract Config getConfig();
117: }
|