package io.pcp.parfait.timing; import java.util.Hashtable; import java.util.Map; import java.util.concurrent.CountDownLatch; import org.apache.log4j.MDC; import junit.framework.TestCase; public class ThreadContextTest extends TestCase { private ThreadContext context; public void setUp() { context = new ThreadContext(); Hashtable hashtable = MDC.getContext(); if (hashtable != null) { hashtable.clear(); } } public void testGetOfUnusedKeyReturnsNull() { final String testKey = "handy"; assertNull("get() of unused key should return null", context.get(testKey)); } public void testGetRetrievesPutValue() { final String testKey = "brainy"; final Object testValue = new Object(); context.put(testKey, testValue); assertEquals(testValue, context.get(testKey)); } public void testGetAfterRemoveReturnsNull() { final String testKey = "hefty"; final Object testValue = new Object(); context.put(testKey, testValue); context.remove(testKey); assertNull("remove() should result in null value for get()", context.get(testKey)); } public void testCanAccessOtherThreadsContext() throws InterruptedException { final String testKey = "vanity"; final Object testValue = new Object(); final CountDownLatch finished = new CountDownLatch(1); final Thread otherThread = new Thread(new Runnable() { public void run() { context.put(testKey, testValue); finished.countDown(); } }); otherThread.start(); finished.await(); Map<String, Object> forThread = context.forThread(otherThread); assertEquals(1, forThread.size()); assertEquals(testValue, forThread.get(testKey)); } public void testGetsEmptyContextForUnknownThread() { assertEquals(0, context.forThread(new Thread()).size()); } public void testClearRemovesValue() { final String testKey = "painter"; context.put(testKey, 7); context.clear(); assertNull("get() after clear should return null", context.get(testKey)); } public void testClearRemovesMDCValue() { ThreadContext log4jThreadContext = ThreadContext.newMDCEnabledContext(); Hashtable mdcContext = MDC.getContext(); assertTrue(mdcContext == null || mdcContext.isEmpty()); final String testKey = "painter"; log4jThreadContext.put(testKey, 7); mdcContext = MDC.getContext(); assertEquals(1, mdcContext.size()); mdcContext.clear(); assertEquals(0, mdcContext.size()); log4jThreadContext.clear(); assertNull("get() after clear should return null", log4jThreadContext.get(testKey)); } }