@Test public void doesNotWaitForDuplicateRequests() { Set<LockDescriptor> descriptors = descriptors(LOCK_A); lockService.waitForLocks(REQUEST_ID, descriptors, DEADLINE); lockService.waitForLocks(REQUEST_ID, descriptors, DEADLINE); verify(acquirer, times(1)).waitForLocks(any(), any(), any()); verifyNoMoreInteractions(acquirer); }
private AsyncResult<Void> waitForLocks(UUID requestId, String... locks) { return service.waitForLocks(requestId, descriptors(locks), TIMEOUT); }
@Override public AsyncResult<Void> waitForLocks(WaitForLocksRequest request) { return lockService.waitForLocks( request.getRequestId(), request.getLockDescriptors(), TimeLimit.of(request.getAcquireTimeoutMs())); }
@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 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 public void passesOrderedLocksToAcquirerWhenWaitingForLocks() { OrderedLocks expected = orderedLocks(newLock(), newLock()); Set<LockDescriptor> descriptors = descriptors(LOCK_A, LOCK_B); when(locks.getAll(descriptors)).thenReturn(expected); lockService.waitForLocks(REQUEST_ID, descriptors, DEADLINE); verify(acquirer).waitForLocks(REQUEST_ID, expected, DEADLINE); }
@Override public AsyncResult<Void> waitForLocks(WaitForLocksRequest request) { return lockService.waitForLocks( request.getRequestId(), request.getLockDescriptors(), TimeLimit.of(request.getAcquireTimeoutMs())); }