001/*
002 * $Id: DistHashTableTest.java 4093 2012-08-12 10:51:06Z kredel $
003 */
004
005package edu.jas.util;
006
007import java.util.Iterator;
008
009import junit.framework.Test;
010import junit.framework.TestCase;
011import junit.framework.TestSuite;
012
013import org.apache.log4j.BasicConfigurator;
014
015
016/**
017 * DistHashTable test with JUnit.
018 * @author Heinz Kredel
019 */
020public class DistHashTableTest extends TestCase {
021
022    /**
023     * main.
024     */
025    public static void main (String[] args) {
026        BasicConfigurator.configure();
027        junit.textui.TestRunner.run( suite() );
028    }
029
030
031    /**
032     * Constructs a <CODE>DistHashTableTest</CODE> object.
033     * @param name String.
034     */
035    public DistHashTableTest(String name) {
036        super(name);
037    }
038
039
040    /**
041     * suite.
042     * @return a test suite.
043     */
044    public static Test suite() {
045        TestSuite suite= new TestSuite(DistHashTableTest.class);
046        return suite;
047    }
048
049    private static final String host = "localhost";
050
051    private DistHashTable<Integer,Integer> l1;
052    private DistHashTable<Integer,Integer> l2;
053    private DistHashTable<Integer,Integer> l3;
054
055    private DistHashTableServer<Integer> dls;
056
057    int rl = 7; 
058    int kl = 10;
059    int ll = 10;
060    int el = 5;
061    float q = 0.5f;
062
063    protected void setUp() {
064        dls = new DistHashTableServer<Integer>();
065        dls.init();
066    }
067
068    protected void tearDown() {
069        dls.terminate();
070        dls = null;
071        if ( l1 != null ) l1.terminate();
072        if ( l2 != null ) l2.terminate();
073        if ( l3 != null ) l3.terminate();
074        l1 = l2 = l3 = null;
075    }
076
077
078    /**
079     * Tests create and terminate DistHashTableServer.
080     */
081    public void testDistHashTable0() {
082    }
083
084
085    /**
086     * Tests create and terminate DistHashTable.
087     */
088    public void testDistHashTable1() {
089        l1 = new DistHashTable<Integer,Integer>(host);
090        l1.init();
091        assertTrue("l1==empty",l1.isEmpty());
092    }
093
094
095    /**
096     * Tests if the created DistHashTable has #n objects as content.
097     */
098    public void testDistHashTable2() {
099        l1 = new DistHashTable<Integer,Integer>(host);
100        l1.init();
101        assertTrue("l1==empty",l1.isEmpty());
102
103        l1.putWait( Integer.valueOf(1), Integer.valueOf(1) );
104        assertFalse("l1!=empty",l1.isEmpty());
105        assertTrue("#l1==1", l1.size() == 1 );
106        l1.putWait( Integer.valueOf(2), Integer.valueOf(2) );
107        assertTrue("#l1==2", l1.size() == 2 );
108        l1.putWait( Integer.valueOf(3), Integer.valueOf(3) );
109        assertTrue("#l1==3", l1.size() == 3 );
110
111        Iterator it = null;
112        it = l1.iterator();
113        int i = 0;
114        while ( it.hasNext() ) {
115            Object k = it.next();
116            Object o = l1.get(k);
117            Integer x = Integer.valueOf( ++i );
118            assertEquals("l1(i)==v(i)", x, o );
119            assertEquals("l1(i)==k(i)", x, k );
120        }
121
122        l1.clear();
123        assertTrue("#l1==0", l1.size() == 0 );
124    }
125
126
127    /**
128     * Tests if the two created DistHashTables have #n objects as content.
129     */
130    public void testDistHashTable3() {
131        l2 = new DistHashTable<Integer,Integer>(host);
132        l2.init();
133        assertTrue("l2==empty",l2.isEmpty());
134        l1 = new DistHashTable<Integer,Integer>(host);
135        l1.init();
136        assertTrue("l1==empty",l1.isEmpty());
137
138        int i = 0, loops = 10;
139        while ( i < loops ) {
140            Integer x = Integer.valueOf( ++i );
141            l1.putWait( x, x );
142            assertTrue("#l1==i", l1.size() == i );
143        }
144        assertTrue("#l1=="+loops, l1.size() == loops );
145
146        while ( l2.size() < loops ) {
147            try {
148                //System.out.print("*2");
149                Thread.sleep(100);
150            } catch (InterruptedException e) {
151            }
152        }
153        assertTrue("#l2=="+loops, l2.size() == loops );
154        Iterator it = null;
155        it = l2.iterator();
156        i = 0;
157        while ( it.hasNext() ) {
158            Object k = it.next();
159            Object o = l2.get(k);
160            Integer x = Integer.valueOf( ++i );
161            //System.out.println("o = " + o + " x = "+ x);
162            assertEquals("l2(i)==k(i)", x, k );
163            assertEquals("l2(i)==v(i)", x, o );
164        }
165    }
166
167
168    /**
169     * Tests if the three created DistHashTables have #n objects as content.
170     */
171    public void testDistHashTable4() {
172        l1 = new DistHashTable<Integer,Integer>(host);
173        l1.init();
174        assertTrue("l1==empty",l1.isEmpty());
175        l2 = new DistHashTable<Integer,Integer>(host);
176        l2.init();
177        assertTrue("l2==empty",l2.isEmpty());
178        l3 = new DistHashTable<Integer,Integer>(host);
179        l3.init();
180        assertTrue("l3==empty",l3.isEmpty());
181
182        int i = 0, loops = 10;
183        while ( i < loops ) {
184            Integer x = Integer.valueOf( ++i );
185            l3.putWait( x, x );
186            assertTrue("#l3==i", l3.size() == i );
187        }
188        assertTrue("#l3=="+loops, l3.size() == loops );
189
190        while ( l2.size() < loops || l1.size() < loops-1 ) {
191            try {
192                //System.out.print("*3");
193                Thread.sleep(100);
194            } catch (InterruptedException e) {
195            }
196        }
197        assertTrue("#l2=="+loops, l2.size() == loops );
198        assertTrue("#l1=="+loops, l1.size() == loops );
199        Iterator it = null;
200        it = l2.iterator();
201        Iterator it3 = null;
202        it3 = l1.iterator();
203        i = 0;
204        while ( it.hasNext() && it3.hasNext() ) {
205            Object k1 = it.next();
206            Object k2 = it3.next();
207            Object v1 = l2.get(k1);
208            Object v2 = l1.get(k2);
209            Integer x = Integer.valueOf( ++i );
210            //System.out.println("o = " + o + " x = "+ x);
211            assertEquals("l2(i)==k(i)", x, k1 );
212            assertEquals("l1(i)==k(i)", x, k2 );
213            assertEquals("l2(i)==v(i)", x, v1 );
214            assertEquals("l1(i)==v(i)", x, v2 );
215        }
216    }
217
218
219    /**
220     * Tests if the two created DistHashTables have #n objects as content 
221     * when one is created later.
222     */
223    public void testDistHashTable5() {
224        l1 = new DistHashTable<Integer,Integer>(host);
225        l1.init();
226        assertTrue("l1==empty",l1.isEmpty());
227
228        int i = 0, loops = 10;
229        while ( i < loops ) {
230            Integer x = Integer.valueOf( ++i );
231            l1.putWait( x, x );
232            assertTrue("#l1==i", l1.size() == i );
233        }
234        assertTrue("#l1=="+loops, l1.size() == loops );
235
236        l2 = new DistHashTable<Integer,Integer>(host);
237        l2.init();
238        // assertTrue("l2==empty",l2.isEmpty());
239        while ( l2.size() < loops ) {
240            try {
241                //System.out.print("*2");
242                Thread.sleep(100);
243            } catch (InterruptedException e) {
244            }
245        }
246        Iterator it = null;
247        it = l2.iterator();
248        i = 0;
249        while ( it.hasNext() ) {
250            Object k = it.next();
251            Object v = l2.get(k);
252            Integer x = Integer.valueOf( ++i );
253            //System.out.println("o = " + o + " x = "+ x);
254            assertEquals("l2(i)==k(i)", x, k );
255            assertEquals("l2(i)==v(i)", x, v );
256        }
257        assertTrue("#l2=="+loops, l2.size() == loops );
258    }
259
260
261    /**
262     * Tests if the two created DistHashTables have #n objects as content 
263     * using getWait() when one is created later.
264     */
265    public void testDistHashTable6() {
266        l1 = new DistHashTable<Integer,Integer>(host);
267        l1.init();
268        assertTrue("l1==empty",l1.isEmpty());
269
270        int i = 0, loops = 10;
271        while ( i < loops ) {
272            Integer x = Integer.valueOf( ++i );
273            l1.putWait( x, x );
274            assertTrue("#l1==i", l1.size() == i );
275        }
276        assertTrue("#l1=="+loops, l1.size() == loops );
277
278        l2 = new DistHashTable<Integer,Integer>(host);
279        l2.init();
280
281        Iterator<Integer> it = null;
282        it = l1.iterator();
283        i = 0;
284        while ( it.hasNext() ) {
285            Integer k = it.next();
286            Integer v = l2.getWait(k);
287            Integer x = Integer.valueOf( ++i );
288            //System.out.println("o = " + o + " x = "+ x);
289            assertEquals("l1(i)==k(i)", x, k );
290            assertEquals("l2(i)==v(i)", x, v );
291        }
292        assertTrue("#l2=="+loops, l2.size() == loops );
293    }
294
295}