package com.limegroup.gnutella.util; import junit.framework.Test; public class ThreadFactoryTest extends BaseTestCase { public ThreadFactoryTest(String name) { super(name); } public static Test suite() { return buildTestSuite(ThreadFactoryTest.class); } public void testThreadStarts() throws Exception { Runner r1 = new Runner(); ThreadFactory.startThread(r1, "Name"); Thread.sleep(100); assertTrue(r1.isRan()); assertEquals("Name", r1.getName()); } public void testReuseThreads() throws Exception { Runner r1 = new Runner(); Runner r2 = new Runner(); ThreadFactory.startThread(r1, "Name1"); Thread.sleep(100); assertTrue(r1.isRan()); assertEquals("Name1", r1.getName()); assertEquals("IdleThread", r1.getThread().getName()); ThreadFactory.startThread(r2, "Name2"); Thread.sleep(100); assertTrue(r2.isRan()); assertSame(r1.getThread(), r2.getThread()); assertEquals("Name2", r2.getName()); } public void testThreadLingers() throws Exception { Runner r1 = new Runner(); ThreadFactory.startThread(r1, "Name"); Thread.sleep(100); assertTrue(r1.isRan()); Thread thread = r1.getThread(); assertEquals("IdleThread", r1.getThread().getName()); assertTrue(thread.isAlive()); Thread.sleep(3500); assertTrue(thread.isAlive()); Thread.sleep(2000); assertFalse(thread.isAlive()); assertEquals("IdleThread", r1.getThread().getName()); } public void testManyThreadsAtOnce() throws Exception { Runner r1 = new Runner(5000); Runner r2 = new Runner(5000); ThreadFactory.startThread(r1, "Name1"); ThreadFactory.startThread(r2, "Name2"); Thread.sleep(100); assertTrue(r1.isRan()); assertTrue(r2.isRan()); assertNotSame(r1.getThread(), r2.getThread()); assertEquals("Name1", r1.getName()); assertEquals("Name2", r2.getName()); } public void testDaemonThread() throws Exception { Runner r1 = new Runner(); ThreadFactory.startThread(r1, "Name"); Thread.sleep(100); assertTrue(r1.isRan()); assertTrue(r1.getThread().isDaemon()); } private static class Runner implements Runnable { private boolean ran; private Thread thread; private String name; private long waitLength = -1; public Runner() { } public Runner(long waitLength) { this.waitLength = waitLength; } public void run() { ran = true; thread = Thread.currentThread(); name = thread.getName(); if(waitLength != -1) { try { Thread.sleep(waitLength); } catch(InterruptedException ix) {} } } public boolean isRan() { return ran; } public Thread getThread() { return thread; } public String getName() { return name; } } }