@Test public void universalSuccessCheckerShouldSucceedOnNoEvents() { Checker universalChecker = Mockito.mock(Checker.class); Mockito.when(universalChecker.check(Matchers.anyList())).thenReturn(validResult); assertNoError(() -> universalChecker, ImmutableList.<Event>of()); }
/** * This method generates a mocked Checker that returns the entire list of Events if and only if all Events in the * list are related to the specified lock name, and there is at least one InvokeEvent. * @param lockName The lock name to filter for * @return mocked Checker */ private Checker filterChecker(String lockName) { Checker mockChecker = Mockito.mock(Checker.class); Mockito.when(mockChecker.check(Matchers.anyListOf(Event.class))).then( args -> { List<Event> events = (List) args.getArguments()[0]; return checkLockName(lockName, events); }); return mockChecker; }
@Test public void partitionsRetainRelativeOrdering() { CheckerResult checkerResult = runPartitionChecker(() -> filterChecker(LOCK_2), eventList); assertThat(checkerResult.valid()).isFalse(); assertThat(checkerResult.errors()).containsExactlyElementsOf(onlyLock2EventList); }
@Test public void infoEventsAreNotLost() { InfoEvent infoEvent = TestEventUtils.createInfoEvent(0, PROCESS_1, RequestType.LOCK); CheckerResult checkerResult = runPartitionChecker(() -> identityChecker, ImmutableList.<Event>of(infoEvent)); assertThat(checkerResult.valid()).isFalse(); assertThat(checkerResult.errors()).containsExactly(infoEvent); }
@Test public void partitioningOnlyReordersEvents() { CheckerResult checkerResult = runPartitionChecker(() -> identityChecker, eventList); assertThat(checkerResult.valid()).isFalse(); assertThat(checkerResult.errors().size()).isEqualTo(eventList.size()); assertThat(checkerResult.errors()).containsOnlyElementsOf(eventList); }
@Test public void infoEventsAreLockIndependent() { InvokeEvent invokeEvent = TestEventUtils.invokeLock(0, PROCESS_1, LOCK_1); OkEvent okEvent = TestEventUtils.lockSuccess(1, PROCESS_1); List<Event> infoEventList = ImmutableList.<Event>builder() .add(TestEventUtils.createInfoEvent(0, PROCESS_1, RequestType.LOCK)) .add(invokeEvent) .add(okEvent) .add(TestEventUtils.createInfoEvent(2, PROCESS_1, RequestType.LOCK)) .build(); CheckerResult checkerResult = runPartitionChecker(() -> filterChecker(LOCK_1), infoEventList); assertThat(checkerResult.valid()).isFalse(); assertThat(checkerResult.errors()).containsExactlyElementsOf(ImmutableList.of(invokeEvent, okEvent)); }
@Test public void universalFailureCheckerShouldFail() { InvokeEvent invokeEvent = TestEventUtils.invokeLock(0, PROCESS_1, LOCK_1); OkEvent okEvent = TestEventUtils.lockSuccess(1, PROCESS_1); CheckerResult checkerResult = runPartitionChecker(() -> identityChecker, ImmutableList.of(invokeEvent, okEvent)); assertThat(checkerResult.valid()).isFalse(); assertThat(checkerResult.errors()).containsExactly(invokeEvent, okEvent); }
@Test public void universalSuccessCheckerShouldSucceed() { Checker universalChecker = Mockito.mock(Checker.class); Mockito.when(universalChecker.check(Matchers.anyList())).thenReturn(validResult); assertNoError(() -> universalChecker, eventList); }