package com.limegroup.gnutella.util; import java.util.ArrayList; import java.util.Collection; import junit.framework.Test; /** * Unit tests for FixedsizeForgetfulHashMap */ public class FixedSizeExpiringSetTest extends com.limegroup.gnutella.util.BaseTestCase { Collection empty1,empty2,nullColl; FixedSizeExpiringSet set, fastSet; Object nullObj; final int MAX_SIZE = 8; final long EXPIRE_TIME = 10 * 1000; // 10 seconds public FixedSizeExpiringSetTest(String name) { super(name); } public static Test suite() { return buildTestSuite(FixedSizeExpiringSetTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } protected void setUp() { // test all constructors empty1 = new FixedSizeExpiringSet(); empty2 = new FixedSizeExpiringSet(MAX_SIZE); set = new FixedSizeExpiringSet(MAX_SIZE, EXPIRE_TIME); fastSet = new FixedSizeExpiringSet(MAX_SIZE, 50); } public void testSet() throws Exception { empty1.add(nullObj); assertTrue(empty1.isEmpty()); try{ empty1.addAll(nullColl); fail("expected NullPointerException"); } catch(NullPointerException e){} //add another empty set empty1.addAll(empty2); assertTrue(empty1.isEmpty()); //test a fast-expiring set fastSet.add(empty1); Thread.sleep(60); assertFalse(fastSet.contains(empty1)); // initialize a couple of objects String[] obj = new String[10]; for (int i = 0; i < 10; i++) { obj[i] = "obj" + i; } // remember the times I added the objects long[] timeExpiring = new long[10]; // test add, contains, remove for (int i = 0; i < 10; i++) { timeExpiring[i] = System.currentTimeMillis() + EXPIRE_TIME; set.add(obj[i]); Thread.sleep(150L); } // test fixed size //set contains 2-9 assertEquals(set.size(), MAX_SIZE); assertFalse(set.contains(obj[0])); assertFalse(set.contains(obj[1])); assertTrue(set.contains(obj[2])); set.remove(obj[2]); assertFalse(set.contains(obj[1])); set.add(obj[0]); //set contains 3-9, 0 assertTrue(set.contains(obj[8])); assertTrue(set.contains(obj[3])); set.remove(obj[3]); //set contains 4-9, 0 (7 elements) assertFalse(set.contains(obj[3])); set.add(obj[1]); //set contains and 4-9, 0-1 assertTrue(set.contains(obj[1])); // test expiring! while (set.size() > 0) { for (int i = 4; i < 10; i++) { if (set.contains(obj[i])) { assertGreaterThanOrEquals(System.currentTimeMillis(), timeExpiring[i]); } else { assertGreaterThan(timeExpiring[i], System.currentTimeMillis()); } } Thread.sleep(100L); } // test addAll() Collection col = new ArrayList(); for (int i = 0; i < 10; i++) col.add(obj[i]); set.addAll(col); assertEquals(set.size(), MAX_SIZE); assertFalse(set.contains(obj[8])); assertFalse(set.contains(obj[9])); assertTrue(set.contains(obj[0])); assertTrue(set.contains(obj[1])); //set contains 0-7 col.clear(); // test removeAll() for (int i = 6; i < 10; i++) col.add(obj[i]); set.removeAll(col); for (int i = 0; i < 6; i++) assertTrue(set.contains(obj[i])); for (int i = 6; i < 10; i++) assertFalse(set.contains(obj[i])); set.clear(); assertEquals(set.size(), 0); // test retainAll for (int i = 0; i < 10; i++) { set.add(obj[i]); Thread.sleep(20); //<--read the note in the implementation } for(int i = 2;i<10;i++) assertTrue(set.contains(obj[i])); //set contains 2-9 col contains 6-9 set.retainAll(col); for (int i = 0; i < 6; i++) assertFalse(set.contains(obj[i])); for (int i = 6; i < 9; i++) assertTrue(set.contains(obj[i])); assertEquals(set.size(),col.size()); //as well as containsAll assertTrue(set.containsAll(col)); //removeall set.removeAll(empty1); assertEquals(set.size(),col.size()); set.removeAll(col); assertTrue(set.isEmpty()); //test toArray methods Object[] array1 = set.toArray(); assertEquals(array1.length,set.size()); Object[] array2 = set.toArray(array1); assertEquals(array1.length,array2.length); } }