private AsyncResult<LockToken> lock(UUID requestId, String... locks) { return service.lock(requestId, descriptors(locks), TIMEOUT); }
private AsyncResult<Void> waitForLocks(UUID requestId, String... locks) { return service.waitForLocks(requestId, descriptors(locks), TIMEOUT); }
@Test public void waitForLocksRequestsAreIdempotent() { LockToken token = lockSynchronously(REQUEST_1, LOCK_A); AsyncResult<Void> request = service.waitForLocks(REQUEST_2, descriptors(LOCK_A), SHORT_TIMEOUT); AsyncResult<Void> duplicate = service.waitForLocks(REQUEST_2, descriptors(LOCK_A), SHORT_TIMEOUT); assertThat(request).isEqualTo(duplicate); service.unlock(token); assertThat(request.isCompletedSuccessfully()).isTrue(); assertThat(duplicate.isCompletedSuccessfully()).isTrue(); }
@Test @ShouldRetry public void requestsAreIdempotentWithRespectToTimeout() { lockSynchronously(REQUEST_1, LOCK_A); service.lock(REQUEST_2, descriptors(LOCK_A), SHORT_TIMEOUT); AsyncResult<LockToken> duplicate = service.lock(REQUEST_2, descriptors(LOCK_A), LONG_TIMEOUT); waitForTimeout(SHORT_TIMEOUT); assertThat(duplicate.isTimedOut()).isTrue(); }
@Test @ShouldRetry public void lockRequestTimesOutWhenTimeoutPasses() { lockSynchronously(REQUEST_1, LOCK_A); AsyncResult<LockToken> result = service.lock(REQUEST_2, descriptors(LOCK_A), SHORT_TIMEOUT); assertThat(result.isTimedOut()).isFalse(); waitForTimeout(SHORT_TIMEOUT); assertThat(result.isTimedOut()).isTrue(); }
@Test @ShouldRetry public void waitForLocksRequestTimesOutWhenTimeoutPasses() { lockSynchronously(REQUEST_1, LOCK_A); AsyncResult<Void> result = service.waitForLocks(REQUEST_2, descriptors(LOCK_A), SHORT_TIMEOUT); assertThat(result.isTimedOut()).isFalse(); waitForTimeout(SHORT_TIMEOUT); assertThat(result.isTimedOut()).isTrue(); }
@Test @ShouldRetry public void timedOutRequestDoesNotHoldLocks() { LockToken lockBToken = lockSynchronously(REQUEST_1, LOCK_B); service.lock(REQUEST_2, descriptors(LOCK_A, LOCK_B), SHORT_TIMEOUT); waitForTimeout(SHORT_TIMEOUT); assertNotLocked(LOCK_A); service.unlock(lockBToken); assertNotLocked(LOCK_B); }