Program: 50975
Project: 50975
Buggy source:
/** 
 * Unit test for   {@link mondrian.util.LockBox}.
 */
public void testLockBox(){
  final LockBox box=new LockBox();
  final String abc="String_Node_Str";
  final String xy="String_Node_Str";
  final LockBox.Entry abcEntry0=box.register(abc);
  assertNotNull(abcEntry0);
  assertSame(abc,abcEntry0.getValue());
  checkMonikerValid(abcEntry0.getMoniker());
  final LockBox.Entry xyEntry=box.register(xy);
  checkMonikerValid(xyEntry.getMoniker());
  assertNotSame(abcEntry0.getMoniker(),xyEntry.getMoniker());
  final LockBox.Entry abcEntry1=box.register(abc);
  checkMonikerValid(abcEntry1.getMoniker());
  assertFalse(abcEntry1.getMoniker().equals(abcEntry0.getMoniker()));
  assertSame(abcEntry1.getValue(),abc);
  final LockBox.Entry abcEntry0b=box.get(abcEntry0.getMoniker());
  assertNotNull(abcEntry0b);
  assertEquals(abcEntry0b.getMoniker(),abcEntry0.getMoniker());
  assertNotSame(abcEntry0b,abcEntry1);
  assertTrue(!abcEntry0b.getMoniker().equals(abcEntry1.getMoniker()));
  assertNull(box.get("String_Node_Str"));
  assertTrue(abcEntry0b.isRegistered());
  final boolean b=box.deregister(abcEntry0b);
  assertTrue(b);
  assertFalse(abcEntry0b.isRegistered());
  assertNull(box.get(abcEntry0.getMoniker()));
  assertFalse(abcEntry0.isRegistered());
  assertTrue(abcEntry1.isRegistered());
  final boolean b2=box.deregister(abcEntry0b);
  assertFalse(b2);
  assertFalse(abcEntry0b.isRegistered());
  assertFalse(abcEntry0.isRegistered());
  assertNull(box.get(abcEntry0.getMoniker()));
  try {
    Object value=abcEntry0.getValue();
    fail("String_Node_Str" + value);
  }
 catch (  RuntimeException e) {
    assertTrue(e.getMessage().startsWith("String_Node_Str"));
  }
  assertNotNull(abcEntry0.getMoniker());
  final LockBox.Entry abcEntry1b=box.get(abcEntry1.getMoniker());
  assertNotNull(abcEntry1b);
  assertSame(abcEntry1b.getValue(),abc);
  assertSame(abcEntry1.getValue(),abc);
  final LockBox.Entry xyEntry2=box.get(xyEntry.getMoniker());
  assertNotNull(xyEntry2);
  assertSame(xyEntry2.getValue(),xy);
  assertSame(xyEntry.getValue(),xy);
  final LockBox.Entry abcEntry3=box.register(abc);
  checkMonikerValid(abcEntry3.getMoniker());
  assertFalse(abcEntry3.getMoniker().equals(abcEntry0.getMoniker()));
  assertFalse(abcEntry3.getMoniker().equals(abcEntry1.getMoniker()));
  assertFalse(abcEntry3.getMoniker().equals(abcEntry0b.getMoniker()));
  assertTrue(abcEntry1.isRegistered());
  assertFalse(abcEntry0.isRegistered());
}

Fixed version (ground truth):
/** 
 * Unit test for   {@link mondrian.util.LockBox}.
 */
public void testLockBox(){
  final LockBox box=new LockBox();
  final String abc="String_Node_Str";
  final String xy="String_Node_Str";
  final LockBox.Entry abcEntry0=box.register(abc);
  assertNotNull(abcEntry0);
  assertSame(abc,abcEntry0.getValue());
  checkMonikerValid(abcEntry0.getMoniker());
  final LockBox.Entry xyEntry=box.register(xy);
  checkMonikerValid(xyEntry.getMoniker());
  assertNotSame(abcEntry0.getMoniker(),xyEntry.getMoniker());
  final LockBox.Entry abcEntry1=box.register(abc);
  checkMonikerValid(abcEntry1.getMoniker());
  assertFalse(abcEntry1.getMoniker().equals(abcEntry0.getMoniker()));
  assertSame(abcEntry1.getValue(),abc);
  final LockBox.Entry abcEntry0b=box.get(abcEntry0.getMoniker());
  assertNotNull(abcEntry0b);
  assertEquals(abcEntry0b.getMoniker(),abcEntry0.getMoniker());
  assertSame(abcEntry0,abcEntry0b);
  assertNotSame(abcEntry0b,abcEntry1);
  assertTrue(!abcEntry0b.getMoniker().equals(abcEntry1.getMoniker()));
  assertNull(box.get("String_Node_Str"));
  assertTrue(abcEntry0b.isRegistered());
  final boolean b=box.deregister(abcEntry0b);
  assertTrue(b);
  assertFalse(abcEntry0b.isRegistered());
  assertNull(box.get(abcEntry0.getMoniker()));
  assertFalse(abcEntry0.isRegistered());
  assertTrue(abcEntry1.isRegistered());
  final boolean b2=box.deregister(abcEntry0b);
  assertFalse(b2);
  assertFalse(abcEntry0b.isRegistered());
  assertFalse(abcEntry0.isRegistered());
  assertNull(box.get(abcEntry0.getMoniker()));
  try {
    Object value=abcEntry0.getValue();
    fail("String_Node_Str" + value);
  }
 catch (  RuntimeException e) {
    assertTrue(e.getMessage().startsWith("String_Node_Str"));
  }
  assertNotNull(abcEntry0.getMoniker());
  final LockBox.Entry abcEntry1b=box.get(abcEntry1.getMoniker());
  assertNotNull(abcEntry1b);
  assertSame(abcEntry1b,abcEntry1);
  assertSame(abcEntry1b.getValue(),abc);
  assertSame(abcEntry1.getValue(),abc);
  final LockBox.Entry xyEntry2=box.get(xyEntry.getMoniker());
  assertNotNull(xyEntry2);
  assertSame(xyEntry2,xyEntry);
  assertSame(xyEntry2.getValue(),xy);
  assertSame(xyEntry.getValue(),xy);
  final LockBox.Entry abcEntry3=box.register(abc);
  checkMonikerValid(abcEntry3.getMoniker());
  assertFalse(abcEntry3.getMoniker().equals(abcEntry0.getMoniker()));
  assertFalse(abcEntry3.getMoniker().equals(abcEntry1.getMoniker()));
  assertFalse(abcEntry3.getMoniker().equals(abcEntry0b.getMoniker()));
  assertTrue(abcEntry1.isRegistered());
  assertFalse(abcEntry0.isRegistered());
}