Program: 50022
Project: 50022
Buggy source:
/** 
 * Test for issue 157
 */
@Test(timeout=16000) public void testProxySerialization() throws Exception {
  HazelcastInstance h1=Hazelcast.newHazelcastInstance(null);
  HazelcastInstance h2=Hazelcast.newHazelcastInstance(null);
  Map map=h1.getMap("String_Node_Str");
  map.put("String_Node_Str","String_Node_Str");
  IQueue q=h1.getQueue("String_Node_Str");
  q.offer("String_Node_Str");
  MultiMap mm=h1.getMultiMap("String_Node_Str");
  mm.put("String_Node_Str","String_Node_Str");
  ILock lock=h1.getLock("String_Node_Str");
  lock.lock();
  ITopic topic=h1.getTopic("String_Node_Str");
  IdGenerator ig=h1.getIdGenerator("String_Node_Str");
  assertEquals(1,ig.newId());
  ISet set=h1.getSet("String_Node_Str");
  set.add("String_Node_Str");
  h2.getMap("String_Node_Str").put("String_Node_Str",map);
  h2.getMap("String_Node_Str").put("String_Node_Str",q);
  h2.getMap("String_Node_Str").put("String_Node_Str",mm);
  h2.getMap("String_Node_Str").put("String_Node_Str",lock);
  h2.getMap("String_Node_Str").put("String_Node_Str",topic);
  h2.getMap("String_Node_Str").put("String_Node_Str",ig);
  h2.getMap("String_Node_Str").put("String_Node_Str",set);
  Map m1=(Map)h1.getMap("String_Node_Str").get("String_Node_Str");
  Map m2=(Map)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals("String_Node_Str",m1.get("String_Node_Str"));
  assertEquals("String_Node_Str",m2.get("String_Node_Str"));
  IQueue q1=(IQueue)h1.getMap("String_Node_Str").get("String_Node_Str");
  IQueue q2=(IQueue)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals(1,q1.size());
  assertEquals(1,q2.size());
  assertEquals("String_Node_Str",q2.poll());
  MultiMap mm1=(MultiMap)h1.getMap("String_Node_Str").get("String_Node_Str");
  MultiMap mm2=(MultiMap)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertTrue(mm1.get("String_Node_Str").contains("String_Node_Str"));
  assertTrue(mm2.get("String_Node_Str").contains("String_Node_Str"));
  ILock lock1=(ILock)h1.getMap("String_Node_Str").get("String_Node_Str");
  ILock lock2=(ILock)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals("String_Node_Str",lock1.getLockObject());
  assertEquals("String_Node_Str",lock2.getLockObject());
  assertFalse(lock2.tryLock());
  ITopic topic1=(ITopic)h1.getMap("String_Node_Str").get("String_Node_Str");
  ITopic topic2=(ITopic)h2.getMap("String_Node_Str").get("String_Node_Str");
  final CountDownLatch latch=new CountDownLatch(2);
  topic1.addMessageListener(new MessageListener(){
    public void onMessage(    Object msg){
      assertEquals("String_Node_Str",msg);
      latch.countDown();
    }
  }
);
  topic2.addMessageListener(new MessageListener(){
    public void onMessage(    Object msg){
      assertEquals("String_Node_Str",msg);
      latch.countDown();
    }
  }
);
  topic.publish("String_Node_Str");
  assertTrue(latch.await(5,TimeUnit.SECONDS));
  IdGenerator ig1=(IdGenerator)h1.getMap("String_Node_Str").get("String_Node_Str");
  IdGenerator ig2=(IdGenerator)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals(2,ig1.newId());
  assertEquals(1000001,ig2.newId());
  ISet set1=(ISet)h1.getMap("String_Node_Str").get("String_Node_Str");
  ISet set2=(ISet)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertTrue(set1.contains("String_Node_Str"));
  assertTrue(set2.contains("String_Node_Str"));
}

Fixed version (ground truth):
/** 
 * Test for issue 157
 */
@Test(timeout=16000) public void testProxySerialization() throws Exception {
  HazelcastInstance h1=Hazelcast.newHazelcastInstance(null);
  HazelcastInstance h2=Hazelcast.newHazelcastInstance(null);
  Map map=h1.getMap("String_Node_Str");
  map.put("String_Node_Str","String_Node_Str");
  IQueue q=h1.getQueue("String_Node_Str");
  q.offer("String_Node_Str");
  MultiMap mm=h1.getMultiMap("String_Node_Str");
  mm.put("String_Node_Str","String_Node_Str");
  ILock lock=h1.getLock("String_Node_Str");
  lock.lock();
  ITopic topic=h1.getTopic("String_Node_Str");
  IdGenerator ig=h1.getIdGenerator("String_Node_Str");
  AtomicNumber atomicNumber=h1.getAtomicNumber("String_Node_Str");
  atomicNumber.incrementAndGet();
  atomicNumber.incrementAndGet();
  assertEquals(2,atomicNumber.get());
  assertEquals(1,ig.newId());
  ISet set=h1.getSet("String_Node_Str");
  set.add("String_Node_Str");
  h2.getMap("String_Node_Str").put("String_Node_Str",map);
  h2.getMap("String_Node_Str").put("String_Node_Str",q);
  h2.getMap("String_Node_Str").put("String_Node_Str",mm);
  h2.getMap("String_Node_Str").put("String_Node_Str",lock);
  h2.getMap("String_Node_Str").put("String_Node_Str",topic);
  h2.getMap("String_Node_Str").put("String_Node_Str",ig);
  h2.getMap("String_Node_Str").put("String_Node_Str",set);
  h2.getMap("String_Node_Str").put("String_Node_Str",atomicNumber);
  Map m1=(Map)h1.getMap("String_Node_Str").get("String_Node_Str");
  Map m2=(Map)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals("String_Node_Str",m1.get("String_Node_Str"));
  assertEquals("String_Node_Str",m2.get("String_Node_Str"));
  IQueue q1=(IQueue)h1.getMap("String_Node_Str").get("String_Node_Str");
  IQueue q2=(IQueue)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals(1,q1.size());
  assertEquals(1,q2.size());
  assertEquals("String_Node_Str",q2.poll());
  MultiMap mm1=(MultiMap)h1.getMap("String_Node_Str").get("String_Node_Str");
  MultiMap mm2=(MultiMap)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertTrue(mm1.get("String_Node_Str").contains("String_Node_Str"));
  assertTrue(mm2.get("String_Node_Str").contains("String_Node_Str"));
  ILock lock1=(ILock)h1.getMap("String_Node_Str").get("String_Node_Str");
  ILock lock2=(ILock)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals("String_Node_Str",lock1.getLockObject());
  assertEquals("String_Node_Str",lock2.getLockObject());
  assertFalse(lock2.tryLock());
  ITopic topic1=(ITopic)h1.getMap("String_Node_Str").get("String_Node_Str");
  ITopic topic2=(ITopic)h2.getMap("String_Node_Str").get("String_Node_Str");
  final CountDownLatch latch=new CountDownLatch(2);
  topic1.addMessageListener(new MessageListener(){
    public void onMessage(    Object msg){
      assertEquals("String_Node_Str",msg);
      latch.countDown();
    }
  }
);
  topic2.addMessageListener(new MessageListener(){
    public void onMessage(    Object msg){
      assertEquals("String_Node_Str",msg);
      latch.countDown();
    }
  }
);
  topic.publish("String_Node_Str");
  assertTrue(latch.await(5,TimeUnit.SECONDS));
  IdGenerator ig1=(IdGenerator)h1.getMap("String_Node_Str").get("String_Node_Str");
  IdGenerator ig2=(IdGenerator)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals(2,ig1.newId());
  assertEquals(1000001,ig2.newId());
  ISet set1=(ISet)h1.getMap("String_Node_Str").get("String_Node_Str");
  ISet set2=(ISet)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertTrue(set1.contains("String_Node_Str"));
  assertTrue(set2.contains("String_Node_Str"));
  AtomicNumber a1=(AtomicNumber)h1.getMap("String_Node_Str").get("String_Node_Str");
  AtomicNumber a2=(AtomicNumber)h2.getMap("String_Node_Str").get("String_Node_Str");
  assertEquals(2,a1.get());
  assertEquals(2,a2.get());
}