public void testLocalDeadlock() throws Exception { final DldGlobalTransaction ddgt = (DldGlobalTransaction) gtf.newGlobalTransaction(); InvocationContext localTxContext = buildLocalTxIc(ddgt); ddgt.setCoinToss(0); lockOwner.setCoinToss(1); assert ddgt.wouldLose(lockOwner); // this makes sure that we cannot acquire lock from the first try expect(lc.acquireLock("k", SPIN_DURATION, TimeUnit.MILLISECONDS)).andReturn(null); Lock mockLock = createNiceMock(Lock.class); expect(lc.acquireLock("k", SPIN_DURATION, TimeUnit.MILLISECONDS)).andReturn(mockLock); lockOwner.setRemote(false); lockOwner.setLockIntention("k"); lockManager.setOwner(lockOwner); lockManager.setOwnsLock(true); replay(lc); try { lockManager.lockAndRecord("k", localTxContext); assert false; } catch (DeadlockDetectedException e) { // expected } assertEquals(1l, lockManager.getDetectedLocalDeadlocks()); }