summaryrefslogtreecommitdiff
path: root/java/test/Freeze/dbmap/Client.java
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2002-09-27 23:01:07 +0000
committerBenoit Foucher <benoit@zeroc.com>2002-09-27 23:01:07 +0000
commit8689b80b0017315b353c5eaaa4c0ee97d86e720f (patch)
tree1f820e3f76928796d43454f5a4e4979367b173a6 /java/test/Freeze/dbmap/Client.java
parentAdded small stress test (diff)
downloadice-8689b80b0017315b353c5eaaa4c0ee97d86e720f.tar.bz2
ice-8689b80b0017315b353c5eaaa4c0ee97d86e720f.tar.xz
ice-8689b80b0017315b353c5eaaa4c0ee97d86e720f.zip
Removed slice task tagdir attribute from build.xml
Fixed Freeze.Map bugs. Fixed Slice2JavaTask and Slice2FreezeJ task bugs.
Diffstat (limited to 'java/test/Freeze/dbmap/Client.java')
-rw-r--r--java/test/Freeze/dbmap/Client.java270
1 files changed, 192 insertions, 78 deletions
diff --git a/java/test/Freeze/dbmap/Client.java b/java/test/Freeze/dbmap/Client.java
index 07e8485c077..4da95b5b3ba 100644
--- a/java/test/Freeze/dbmap/Client.java
+++ b/java/test/Freeze/dbmap/Client.java
@@ -12,6 +12,39 @@ import Freeze.*;
public class Client
{
+ static class StressThread extends Thread
+ {
+ public void
+ run()
+ {
+ try
+ {
+ for(int i = 0; i < 50; ++i)
+ {
+ java.util.Set entrySet = _map.entrySet();
+ java.util.Iterator p = entrySet.iterator();
+ if(p.hasNext())
+ {
+ Object o = p.next();
+ test(entrySet.contains(o));
+ }
+ }
+ }
+ catch(Exception ex)
+ {
+ ex.printStackTrace();
+ System.err.println(ex);
+ }
+ }
+
+ StressThread(java.util.Map m)
+ {
+ _map = m;
+ }
+
+ private java.util.Map _map;
+ }
+
static String alphabet = "abcdefghijklmnopqrstuvwxyz";
private static void
@@ -34,7 +67,7 @@ public class Client
}
private static int
- run(String[] args, java.util.Map m)
+ run(String[] args, java.util.Map m, DB db)
throws DBException
{
//
@@ -86,105 +119,186 @@ public class Client
//
populateDB(m);
- System.out.print(" testing keySet... ");
- System.out.flush();
- java.util.Set keys = m.keySet();
- test(keys.size() == alphabet.length());
- test(!keys.isEmpty());
- java.util.Iterator p = keys.iterator();
- while(p.hasNext())
{
- Object o = p.next();
- test(keys.contains(o));
+ System.out.print(" testing keySet... ");
+ System.out.flush();
+ java.util.Set keys = m.keySet();
+ test(keys.size() == alphabet.length());
+ test(!keys.isEmpty());
+ java.util.Iterator p = keys.iterator();
+ while(p.hasNext())
+ {
+ Object o = p.next();
+ test(keys.contains(o));
- Byte b = (Byte)o;
- test(m.containsKey(b));
+ Byte b = (Byte)o;
+ test(m.containsKey(b));
+ }
+ System.out.println("ok");
}
- System.out.println("ok");
- System.out.print(" testing values... ");
- System.out.flush();
- java.util.Collection values = m.values();
- test(values.size() == alphabet.length());
- test(!values.isEmpty());
- p = values.iterator();
- while(p.hasNext())
{
- Object o = p.next();
- test(values.contains(o));
+ System.out.print(" testing values... ");
+ System.out.flush();
+ java.util.Collection values = m.values();
+ test(values.size() == alphabet.length());
+ test(!values.isEmpty());
+ java.util.Iterator p = values.iterator();
+ while(p.hasNext())
+ {
+ Object o = p.next();
+ test(values.contains(o));
- Integer i = (Integer)o;
- test(m.containsValue(i));
+ Integer i = (Integer)o;
+ test(m.containsValue(i));
+ }
+ System.out.println("ok");
}
- System.out.println("ok");
- System.out.print(" testing entrySet... ");
- System.out.flush();
- java.util.Set entrySet = m.entrySet();
- test(entrySet.size() == alphabet.length());
- test(!entrySet.isEmpty());
- p = entrySet.iterator();
- while(p.hasNext())
{
- Object o = p.next();
- test(entrySet.contains(o));
+ System.out.print(" testing entrySet... ");
+ System.out.flush();
+ java.util.Set entrySet = m.entrySet();
+ test(entrySet.size() == alphabet.length());
+ test(!entrySet.isEmpty());
+ java.util.Iterator p = entrySet.iterator();
+ while(p.hasNext())
+ {
+ Object o = p.next();
+ test(entrySet.contains(o));
- java.util.Map.Entry e = (java.util.Map.Entry)o;
- test(m.containsKey(e.getKey()));
- test(m.containsValue(e.getValue()));
+ java.util.Map.Entry e = (java.util.Map.Entry)o;
+ test(m.containsKey(e.getKey()));
+ test(m.containsValue(e.getValue()));
+ }
+ System.out.println("ok");
}
- System.out.println("ok");
- System.out.print(" testing iterator.remove... ");
- System.out.flush();
+ {
+ System.out.print(" testing iterator.remove... ");
+ System.out.flush();
- test(m.size() == 26);
- test(m.get(new Byte((byte)'b')) != null);
- test(m.get(new Byte((byte)'n')) != null);
- test(m.get(new Byte((byte)'z')) != null);
+ test(m.size() == 26);
+ test(m.get(new Byte((byte)'b')) != null);
+ test(m.get(new Byte((byte)'n')) != null);
+ test(m.get(new Byte((byte)'z')) != null);
- p = entrySet.iterator();
- while(p.hasNext())
- {
- Object o = p.next();
- java.util.Map.Entry e = (java.util.Map.Entry)o;
- Byte b = (Byte)e.getKey();
- byte v = b.byteValue();
- if(v == (byte)'b' || v == (byte)'n' || v == (byte)'z')
+ java.util.Set entrySet = m.entrySet();
+ java.util.Iterator p = entrySet.iterator();
+ while(p.hasNext())
{
- p.remove();
+ Object o = p.next();
+ java.util.Map.Entry e = (java.util.Map.Entry)o;
+ Byte b = (Byte)e.getKey();
+ byte v = b.byteValue();
+ if(v == (byte)'b' || v == (byte)'n' || v == (byte)'z')
+ {
+ p.remove();
+ }
}
- }
- test(m.size() == 23);
- test(m.get(new Byte((byte)'b')) == null);
- test(m.get(new Byte((byte)'n')) == null);
- test(m.get(new Byte((byte)'z')) == null);
+ ((Freeze.Map.EntryIterator)p).close();
+
+ test(m.size() == 23);
+ test(m.get(new Byte((byte)'b')) == null);
+ test(m.get(new Byte((byte)'n')) == null);
+ test(m.get(new Byte((byte)'z')) == null);
- //
- // Re-populate.
- //
- populateDB(m);
+ //
+ // Re-populate.
+ //
+ populateDB(m);
+
+ test(m.size() == 26);
- test(m.size() == 26);
+ entrySet = m.entrySet();
+ p = entrySet.iterator();
+ while(p.hasNext())
+ {
+ Object o = p.next();
+ java.util.Map.Entry e = (java.util.Map.Entry)o;
+ byte v = ((Byte)e.getKey()).byteValue();
+ if(v == (byte)'a' || v == (byte)'b' || v == (byte)'c')
+ {
+ p.remove();
+ }
+ }
- p = entrySet.iterator();
- while(p.hasNext())
+ test(m.size() == 23);
+ test(m.get(new Byte((byte)'a')) == null);
+ test(m.get(new Byte((byte)'b')) == null);
+ test(m.get(new Byte((byte)'c')) == null);
+ System.out.println("ok");
+ }
+
+ /**
+ *
+ * TODO: BENOIT: Re-enable this test. The stress test is disabled for now. It exposes
+ * many self dead locks. I believe this is caused by how we setup the database environment,
+ * i.e.: with all the flags to enable Berkeley DB Transactional support. However since we
+ * don't use transactions in the code this leads to deadlocks. If we specify DB_INIT_TXN we
+ * should use transactions (http://www.sleepycat.com/docs/ref/transapp/env_open.html).
+ *
+ * There's also some details at http://www.sleepycat.com/docs/ref/lock/notxn.html.
+ *
+ * Two solutions:
+ *
+ * - use transactions.
+ * - use BerkeleyDB Concurrent Data Store product instead.
+ *
{
- Object o = p.next();
- java.util.Map.Entry e = (java.util.Map.Entry)o;
- byte v = ((Byte)e.getKey()).byteValue();
- if(v == (byte)'a' || v == (byte)'b' || v == (byte)'c')
+ System.out.print(" testing concurrent access... ");
+ System.out.flush();
+
+ java.util.List l = new java.util.ArrayList();
+
+ //
+ // Create each thread.
+ //
+ for(int i = 0; i < 10; ++i)
{
- p.remove();
+ if(m instanceof ByteIntMapXML)
+ {
+ l.add(new StressThread(new ByteIntMapXML(db)));
+ }
+ else
+ {
+ l.add(new StressThread(new ByteIntMapBinary(db)));
+ }
}
- }
- test(m.size() == 23);
- test(m.get(new Byte((byte)'a')) == null);
- test(m.get(new Byte((byte)'b')) == null);
- test(m.get(new Byte((byte)'c')) == null);
- System.out.println("ok");
+ //
+ // Start each thread.
+ //
+ java.util.Iterator p = l.iterator();
+ while(p.hasNext())
+ {
+ Thread thr = (Thread)p.next();
+ thr.start();
+ }
+
+ //
+ // Wait for each thread to terminate.
+ //
+ p = l.iterator();
+ while(p.hasNext())
+ {
+ Thread thr = (Thread)p.next();
+ while(thr.isAlive())
+ {
+ try
+ {
+ thr.join();
+ }
+ catch(InterruptedException e)
+ {
+ }
+ }
+ }
+
+ System.out.println("ok");
+ }
+ */
return 0;
}
@@ -214,13 +328,13 @@ public class Client
xmlDB = dbEnv.openDB("xml", true);
ByteIntMapXML xml = new ByteIntMapXML(xmlDB);
System.out.println("testing XML encoding...");
- status = run(args, xml);
+ status = run(args, xml, xmlDB);
if(status == 0)
{
binaryDB = dbEnv.openDB("binary", true);
ByteIntMapBinary binary = new ByteIntMapBinary(binaryDB);
System.out.println("testing binary encoding...");
- status = run(args, binary);
+ status = run(args, binary, binaryDB);
}
}
catch(Exception ex)