vgritsenko 2003/12/15 06:43:52
Modified: java/tests/src/org/apache/xindice/core/filer FilerTestCase.java Log: Add new multithreaded filer test (failing) Revision Changes Path 1.10 +52 -2 xml-xindice/java/tests/src/org/apache/xindice/core/filer/FilerTestCase.java Index: FilerTestCase.java =================================================================== RCS file: /home/cvs/xml-xindice/java/tests/src/org/apache/xindice/core/filer/FilerTestCase.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- FilerTestCase.java 14 Dec 2003 19:50:43 -0000 1.9 +++ FilerTestCase.java 15 Dec 2003 14:43:52 -0000 1.10 @@ -281,4 +281,54 @@ assertTrue(filer.getRecordCount() == 0); } + + public void testConcurrentInsert() throws Exception { + // Start anew + assertTrue(filer.getRecordCount() == 0); + + final int THREADS = 10; + final int ITERATIONS = 30; + + Thread[] threads = new Thread[THREADS]; + for (int i = 0; i < THREADS; i++) { + final int threadID = i; + threads[i] = new Thread() { + public void run() { + for (int ii = 0; ii < ITERATIONS; ii++) { + Key key = new Key("T" + threadID + "I" + ii); + Value value = new Value("<test thread=\"" + threadID + "\" iteration=\"" + ii + "\"/>"); + try { + filer.writeRecord(key, value); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + }; + threads[i].setName("Thread " + i); + } + + for (int i = 0; i < THREADS; i++) { + threads[i].start(); + } + + Thread.sleep(1000); + + for (int i = 0; i < THREADS; i++) { + threads[i].join(); + } + + // Check results + assertEquals(filer.getRecordCount(), THREADS * ITERATIONS); + for (int i = 0; i < THREADS; i++) { + for (int ii = 0; ii < ITERATIONS; ii++) { + Key key = new Key("T" + i + "I" + ii); + Value value = new Value("<test thread=\"" + i + "\" iteration=\"" + ii + "\"/>"); + Record record = filer.readRecord(key); + assertEquals(key, record.getKey()); + assertEquals(value, record.getValue()); + } + } + System.out.println("Done"); + } }