package org.wamblee.concurrency;
-import org.wamblee.test.EventTracker;
import org.wamblee.test.TimingUtils;
-import junit.framework.TestCase;
-
/**
* Tests for the JVMLock.
*/
-public class JvmLockTest extends TestCase {
-
- private static final int SLEEP_TIME = 1000;
-
- private static final String STARTED = "started";
-
- private static final String ACQUIRED = "acquired";
-
- private static final String RELEASED = "released";
+public class JvmLockTest extends AbstractLockTestCase {
private JvmLock _lock;
-
- private EventTracker<String> _tracker;
-
+
/*
* (non-Javadoc)
*
*/
@Override
protected void setUp() throws Exception {
+ super.setUp();
_lock = new JvmLock();
- _tracker = new EventTracker<String>();
}
- private Thread runThread() {
+ protected Thread runThread() {
Thread t = new Thread(new Runnable() {
public void run() {
- _tracker.eventOccurred(STARTED);
+ getTracker().eventOccurred(STARTED);
_lock.acquire();
- _tracker.eventOccurred(ACQUIRED);
+ getTracker().eventOccurred(ACQUIRED);
TimingUtils.sleep(SLEEP_TIME);
_lock.release();
- _tracker.eventOccurred(RELEASED);
+ getTracker().eventOccurred(RELEASED);
};
});
t.start();
return t;
}
-
- /**
- * Tests the operation of the lock.
- */
- public void testLock() throws InterruptedException {
- Thread t1 = runThread();
- Thread t2 = runThread();
- TimingUtils.sleep(SLEEP_TIME / 10); // give threads a chance to start
- // up.
- assertEquals(2, _tracker.getEventCount(STARTED)); // both threads
- // should have
- // started.
- assertEquals(1, _tracker.getEventCount(ACQUIRED)); // one thread has
- // acquired the
- // lock.
- TimingUtils.sleep(SLEEP_TIME);
- assertEquals(2, _tracker.getEventCount(ACQUIRED)); // now the other
- // thread could also
- // acquire the lock
- assertEquals(1, _tracker.getEventCount(RELEASED)); // and the first
- // thread has
- // released it.
- TimingUtils.sleep(SLEEP_TIME);
- assertEquals(2, _tracker.getEventCount(RELEASED)); // both threads
- // should be
- // finished.
- t1.join();
- t2.join();
- }
}