[jbosscache-commits] JBoss Cache SVN: r6782 - in core/branches/1.4.X: tests/functional/org/jboss/cache/marshall and 1 other directory.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Tue Sep 23 10:58:35 EDT 2008


Author: manik.surtani at jboss.com
Date: 2008-09-23 10:58:35 -0400 (Tue, 23 Sep 2008)
New Revision: 6782

Modified:
   core/branches/1.4.X/src/org/jboss/cache/marshall/TreeCacheMarshaller140.java
   core/branches/1.4.X/tests/functional/org/jboss/cache/marshall/TreeCacheMarshaller140Test.java
Log:
JBCACHE-1412:  Marshaller uses equals() to test object equality instead of identity when performing reference counting

Modified: core/branches/1.4.X/src/org/jboss/cache/marshall/TreeCacheMarshaller140.java
===================================================================
--- core/branches/1.4.X/src/org/jboss/cache/marshall/TreeCacheMarshaller140.java	2008-09-23 14:52:26 UTC (rev 6781)
+++ core/branches/1.4.X/src/org/jboss/cache/marshall/TreeCacheMarshaller140.java	2008-09-23 14:58:35 UTC (rev 6782)
@@ -30,6 +30,7 @@
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.IdentityHashMap;
 
 /**
  * An enhanced marshaller for RPC calls between TreeCache instances.
@@ -74,7 +75,7 @@
     public void objectToStream(Object o, ObjectOutputStream out) throws Exception
     {
         if (log.isTraceEnabled()) log.trace("Marshalling object " + o);
-        Map refMap = new HashMap();
+        Map refMap = new IdentityHashMap();
 
         if (useRegionBasedMarshalling)
         {
@@ -108,7 +109,7 @@
     public Object objectFromStream(ObjectInputStream in) throws Exception
     {
         Object retValue;
-        Map refMap = new HashMap();
+        Map refMap = new IdentityHashMap();
 
         if (useRegionBasedMarshalling)
         {

Modified: core/branches/1.4.X/tests/functional/org/jboss/cache/marshall/TreeCacheMarshaller140Test.java
===================================================================
--- core/branches/1.4.X/tests/functional/org/jboss/cache/marshall/TreeCacheMarshaller140Test.java	2008-09-23 14:52:26 UTC (rev 6781)
+++ core/branches/1.4.X/tests/functional/org/jboss/cache/marshall/TreeCacheMarshaller140Test.java	2008-09-23 14:58:35 UTC (rev 6782)
@@ -11,6 +11,10 @@
 import org.jgroups.stack.IpAddress;
 
 import java.io.ObjectInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -18,6 +22,7 @@
 import java.util.LinkedList;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.List;
 
 /**
  * @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
@@ -31,6 +36,39 @@
       expectedMarshallerClass = TreeCacheMarshaller140.class;
    }
 
+   public void testBadEquals() throws Exception
+    {
+       // object1 and Object2 should NOT be equal, even though their equals() methods are broken.
+       Broken o1 = new Broken();
+       Broken o2 = new Broken();
+
+       o1.name = "o1";
+       o2.name = "o2";
+
+       assertNotSame(o1, o2);
+       assertEquals(o1, o2);
+
+       List l = new ArrayList(2); // lists will allow "duplicate" entries.
+       l.add(o1);
+       l.add(o2);
+
+       TreeCacheMarshaller140 marsh = new TreeCacheMarshaller140(null, false, false);
+       ByteArrayOutputStream bout = new ByteArrayOutputStream();
+       ObjectOutputStream out = new ObjectOutputStream(bout);
+       marsh.objectToStream(l, out);
+       out.close();
+       ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray()));
+       List l2 = (List) marsh.objectFromStream(in);
+
+       assertEquals(l2.size(), 2);
+       assertEquals("o1", ((Broken) l2.get(0)).name);
+       assertEquals("o2", ((Broken) l2.get(1)).name);
+
+       assertNotSame(l2.get(0), l2.get(1));
+       assertEquals(l2.get(0), l2.get(1));
+    }
+
+
    public void testKnownCollectionMagicNumbers() throws Exception
    {
       doMagicNumberTest(new ArrayList(), TreeCacheMarshaller140.MAGICNUMBER_ARRAY_LIST);
@@ -73,3 +111,18 @@
       assertEquals("Magic number mismatch", magicNumber, magicNumberFound);
    }
 }
+
+class Broken implements Serializable
+{
+   String name;
+
+   public boolean equals(Object o)
+   {
+      return true;
+   }
+
+   public int hashCode()
+   {
+      return 10;
+   }
+}




More information about the jbosscache-commits mailing list