@Test public void resultIsTimedOutWhenTimeOutIsCalled() { lockSynchronously(REQUEST_1); AsyncResult<Void> request2 = lockAsync(REQUEST_2); lock.timeout(REQUEST_2); assertThat(request2.isTimedOut()).isTrue(); }
@Test public void waitRequestIsTimedOutAfterDeadline() { lockSynchronously(REQUEST_1); AsyncResult<Void> request2 = waitUntilAvailableAsync(REQUEST_1); lock.timeout(REQUEST_1); assertThat(request2.isTimedOut()).isTrue(); }
@Test public void timeoutDoesNothingIfLockIsAlreadyAcquired() { lockSynchronously(REQUEST_1); lock.timeout(REQUEST_1); // lock should still be locked, and able to be unlocked AsyncResult<Void> request2 = lockAsync(REQUEST_2); assertThat(request2.isComplete()).isFalse(); unlock(REQUEST_1); assertThat(request2.isCompletedSuccessfully()).isTrue(); }
@Test public void doesNotTimeOutBeforeSpecifiedTime() { acquire(lockB); AsyncResult<?> result = acquire(lockA, lockB, lockC); executor.tick(TIMEOUT.getTimeMillis() - 1L, TimeUnit.MILLISECONDS); verify(lockB, never()).timeout(REQUEST_ID); assertThat(result.isTimedOut()).isFalse(); }
@Test public void timeoutDoesNothingIfLockWasAlreadyAvailable() { waitUntilAvailableSynchronously(REQUEST_1); lock.timeout(REQUEST_1); waitUntilAvailableSynchronously(REQUEST_2); }
@Test public void timesOutRequestAfterSpecifiedTime() { acquire(lockB); AsyncResult<?> result = acquire(lockA, lockB, lockC); executor.tick(TIMEOUT.getTimeMillis() + 1L, TimeUnit.MILLISECONDS); verify(lockB).timeout(REQUEST_ID); assertThat(result.isTimedOut()).isTrue(); }
@Test public void timedOutLockRequestDoesNotGetTheLock() { lockSynchronously(REQUEST_1); AsyncResult<Void> request2 = lockAsync(REQUEST_2); lock.timeout(REQUEST_2); unlock(REQUEST_1); assertThat(lock.getCurrentHolder()).isNull(); lockSynchronously(REQUEST_1); }