public void testProcessUpdatesAccountIfNoCapabilities() throws Exception { // Enqueue a wavelet so that the robot actually runs. enqueueEmptyWavelet(); robot.run(); assertEquals("The robot should be initialized", INITIALIZED_ACCOUNT, robot.getAccount()); }
public void testDequeueWavelet() throws Exception { assertNull("No wavelet to dequeue should return null", robot.dequeueWavelet()); enqueueEmptyWavelet(); assertNotNull("Wavelet should have been enqueued", robot.dequeueWavelet()); }
public void testUpdateWaveletWithGap() throws Exception { HashedVersion hashedVersionZero = HASH_FACTORY.createVersionZero(WAVELET_NAME); WaveletData waveletData = WaveletDataUtil.createEmptyWavelet(WAVELET_NAME, ALEX, hashedVersionZero, 0L); robot.waveletUpdate(waveletData, DeltaSequence.empty()); // We are making an delta which applies to version 1, however the robot only // knows about version 0. ParticipantId bob = ParticipantId.of("bob@exmaple.com"); HashedVersion v2 = HashedVersion.unsigned(2); WaveletOperation addBob = new AddParticipant(new WaveletOperationContext(ALEX, 0L, 1, v2), bob); addBob.apply(waveletData); waveletData.setHashedVersion(v2); waveletData.setVersion(2); TransformedWaveletDelta delta = new TransformedWaveletDelta(ALEX, v2, 0L, Collections.singletonList(addBob)); // Send the delta for version 1 to the robot, it should now enqueue a new // wavelet since it is missing deltas. robot.waveletUpdate(waveletData, DeltaSequence.of(delta)); WaveletAndDeltas firstWavelet = robot.dequeueWavelet(); assertNotNull("Expected a wavelet to be dequeued", firstWavelet); assertEquals("The wavelet with version zero should be first", hashedVersionZero, firstWavelet.getVersionAfterDeltas()); WaveletAndDeltas secondWavelet = robot.dequeueWavelet(); assertNotNull("Expected a wavelet to be dequeued", secondWavelet); assertEquals("The wavelet with version two should be second", v2, secondWavelet.getVersionAfterDeltas()); assertNull("Only expected two wavelets to be dequeued", robot.dequeueWavelet()); }
public void testProcessSendsNoBundleWhenNoEvents() throws Exception { enqueueEmptyWavelet(); robot.run(); // Verify that the robot was not called or any operations where processed verify(connector, never()).sendMessageBundle( any(EventMessageBundle.class), eq(robot), any(ProtocolVersion.class)); verify(operationApplicator, never()).applyOperations(anyListOf(OperationRequest.class), any(ReadableWaveletData.class), any(HashedVersion.class), eq(ACCOUNT)); }
public void testDequeueWaveletReturnsNullIfEmpty() throws Exception { assertNull("On empty queue should return null", robot.dequeueWavelet()); }
public void testUpdateWaveletWithGap() throws Exception { HashedVersion hashedVersionZero = HASH_FACTORY.createVersionZero(WAVELET_NAME); WaveletData waveletData = WaveletDataUtil.createEmptyWavelet(WAVELET_NAME, ALEX, hashedVersionZero, 0L); robot.waveletUpdate(waveletData, DeltaSequence.empty()); // We are making an delta which applies to version 1, however the robot only // knows about version 0. ParticipantId bob = ParticipantId.of("bob@exmaple.com"); HashedVersion v2 = HashedVersion.unsigned(2); WaveletOperation addBob = new AddParticipant(new WaveletOperationContext(ALEX, 0L, 1, v2), bob); addBob.apply(waveletData); waveletData.setHashedVersion(v2); waveletData.setVersion(2); TransformedWaveletDelta delta = new TransformedWaveletDelta(ALEX, v2, 0L, Collections.singletonList(addBob)); // Send the delta for version 1 to the robot, it should now enqueue a new // wavelet since it is missing deltas. robot.waveletUpdate(waveletData, DeltaSequence.of(delta)); WaveletAndDeltas firstWavelet = robot.dequeueWavelet(); assertNotNull("Expected a wavelet to be dequeued", firstWavelet); assertEquals("The wavelet with version zero should be first", hashedVersionZero, firstWavelet.getVersionAfterDeltas()); WaveletAndDeltas secondWavelet = robot.dequeueWavelet(); assertNotNull("Expected a wavelet to be dequeued", secondWavelet); assertEquals("The wavelet with version two should be second", v2, secondWavelet.getVersionAfterDeltas()); assertNull("Only expected two wavelets to be dequeued", robot.dequeueWavelet()); }
public void testProcessSendsNoBundleWhenNoEvents() throws Exception { enqueueEmptyWavelet(); robot.run(); // Verify that the robot was not called or any operations where processed verify(connector, never()).sendMessageBundle( any(EventMessageBundle.class), eq(robot), any(ProtocolVersion.class)); verify(operationApplicator, never()).applyOperations(anyListOf(OperationRequest.class), any(ReadableWaveletData.class), any(HashedVersion.class), eq(ACCOUNT)); }
public void testDequeueWaveletReturnsNullIfEmpty() throws Exception { assertNull("On empty queue should return null", robot.dequeueWavelet()); }
public void testDequeueWavelet() throws Exception { assertNull("No wavelet to dequeue should return null", robot.dequeueWavelet()); enqueueEmptyWavelet(); assertNotNull("Wavelet should have been enqueued", robot.dequeueWavelet()); }
public void testProcessUpdatesAccountIfNoCapabilities() throws Exception { // Enqueue a wavelet so that the robot actually runs. enqueueEmptyWavelet(); robot.run(); assertEquals("The robot should be initialized", INITIALIZED_ACCOUNT, robot.getAccount()); }
public void testRunRequeuesRobotIfDoneWork() throws Exception { enqueueEmptyWavelet(); robot.run(); verify(gateway).doneRunning(robot); verify(gateway).ensureScheduled(robot); }
public void testRunRequeuesRobotIfDoneWork() throws Exception { enqueueEmptyWavelet(); robot.run(); verify(gateway).doneRunning(robot); verify(gateway).ensureScheduled(robot); }
@SuppressWarnings("unchecked") public void testProcessSendsBundleAndCallsOperationsApplicator() throws Exception { EventMessageBundle messages = new EventMessageBundle(ROBOT_NAME.toEmailAddress(), ""); messages.addEvent(new DocumentChangedEvent(null, null, ALEX.getAddress(), 0L, "b+1234")); when(eventGenerator.generateEvents( any(), anyMap(), any())).thenReturn(messages); OperationRequest op = new OperationRequest("wavelet.fetch", "op1"); List<OperationRequest> ops = Collections.singletonList(op); when(connector.sendMessageBundle( any(EventMessageBundle.class), eq(robot), any(ProtocolVersion.class))).thenReturn(ops); enqueueEmptyWavelet(); robot.run(); verify(connector).sendMessageBundle( any(EventMessageBundle.class), eq(robot), any(ProtocolVersion.class)); verify(operationApplicator).applyOperations( eq(ops), any(ReadableWaveletData.class), any(HashedVersion.class), eq(INITIALIZED_ACCOUNT)); }
@SuppressWarnings("unchecked") public void testProcessSendsBundleAndCallsOperationsApplicator() throws Exception { EventMessageBundle messages = new EventMessageBundle(ROBOT_NAME.toEmailAddress(), ""); messages.addEvent(new DocumentChangedEvent(null, null, ALEX.getAddress(), 0L, "b+1234")); when(eventGenerator.generateEvents( any(WaveletAndDeltas.class), anyMap(), any(EventDataConverter.class))).thenReturn(messages); OperationRequest op = new OperationRequest("wavelet.fetch", "op1"); List<OperationRequest> ops = Collections.singletonList(op); when(connector.sendMessageBundle( any(EventMessageBundle.class), eq(robot), any(ProtocolVersion.class))).thenReturn(ops); enqueueEmptyWavelet(); robot.run(); verify(connector).sendMessageBundle( any(EventMessageBundle.class), eq(robot), any(ProtocolVersion.class)); verify(operationApplicator).applyOperations( eq(ops), any(ReadableWaveletData.class), any(HashedVersion.class), eq(INITIALIZED_ACCOUNT)); }