@Override public void waveletCommitted(WaveletName waveletName, HashedVersion version) { OpenListener listener = openListeners.get(waveletName.waveId); if (listener != null) { listener.onUpdate(waveletName, null, DeltaSequence.empty(), version, null, null); } }
public void testEmptyDeltaNotReceived() { OpenListener listener = mock(OpenListener.class); m.subscribe(W1, IdFilters.ALL_IDS, "ch", listener); m.onUpdate(W1A, DeltaSequence.empty()); verifyZeroInteractions(listener); }
public void testEmptyDeltaNotReceived() { OpenListener listener = mock(OpenListener.class); m.subscribe(W1, IdFilters.ALL_IDS, "ch", listener); m.onUpdate(W1A, DeltaSequence.empty()); verifyZeroInteractions(listener); }
/** * Verifies that the listener received a channel id. * * @return the channel id received */ private static String verifyChannelId(OpenListener listener) { ArgumentCaptor<String> channelIdCaptor = ArgumentCaptor.forClass(String.class); verify(listener).onUpdate(any(WaveletName.class), isNullSnapshot(), eq(DeltaSequence.empty()), isNullVersion(), isNullMarker(), channelIdCaptor.capture()); return channelIdCaptor.getValue(); }
/** * Verifies that the listener received a channel id. * * @return the channel id received */ private static String verifyChannelId(OpenListener listener) { ArgumentCaptor<String> channelIdCaptor = ArgumentCaptor.forClass(String.class); verify(listener).onUpdate(any(WaveletName.class), isNullSnapshot(), eq(DeltaSequence.empty()), isNullVersion(), isNullMarker(), channelIdCaptor.capture()); return channelIdCaptor.getValue(); }
public void testOpenWaveRecievesSnapshotsThenMarker() throws Exception { CommittedWaveletSnapshot snapshot1 = provideWavelet(WN1); CommittedWaveletSnapshot snapshot2 = provideWavelet(WN2); when(waveletProvider.getWaveletIds(WAVE_ID)).thenReturn(ImmutableSet.of(W1, W2)); when(waveletProvider.checkAccessPermission(WN1, USER)).thenReturn(true); when(waveletProvider.checkAccessPermission(WN2, USER)).thenReturn(true); OpenListener listener = openWave(IdFilters.ALL_IDS); verify(listener).onUpdate(eq(WN1), eq(snapshot1), eq(DeltaSequence.empty()), eq(V1), isNullMarker(), any(String.class)); verify(listener).onUpdate(eq(WN2), eq(snapshot2), eq(DeltaSequence.empty()), eq(V1), isNullMarker(), any(String.class)); verifyMarker(listener, WAVE_ID); }
public void testOpenWaveRecievesSnapshotsThenMarker() throws Exception { CommittedWaveletSnapshot snapshot1 = provideWavelet(WN1); CommittedWaveletSnapshot snapshot2 = provideWavelet(WN2); when(waveletProvider.getWaveletIds(WAVE_ID)).thenReturn(ImmutableSet.of(W1, W2)); when(waveletProvider.checkAccessPermission(WN1, USER)).thenReturn(true); when(waveletProvider.checkAccessPermission(WN2, USER)).thenReturn(true); OpenListener listener = openWave(IdFilters.ALL_IDS); verify(listener).onUpdate(eq(WN1), eq(snapshot1), eq(DeltaSequence.empty()), eq(V0), isNullMarker(), any(String.class)); verify(listener).onUpdate(eq(WN2), eq(snapshot2), eq(DeltaSequence.empty()), eq(V0), isNullMarker(), any(String.class)); verifyMarker(listener, WAVE_ID); }
/** * Verifies that the listener received a marker. */ private static void verifyMarker(OpenListener listener, WaveId waveId) { ArgumentCaptor<WaveletName> waveletNameCaptor = ArgumentCaptor.forClass(WaveletName.class); verify(listener).onUpdate(waveletNameCaptor.capture(), isNullSnapshot(), eq(DeltaSequence.empty()), isNullVersion(), eq(true), (String) Mockito.isNull()); assertEquals(waveId, waveletNameCaptor.getValue().waveId); }
/** * Verifies that the listener received a marker. */ private static void verifyMarker(OpenListener listener, WaveId waveId) { ArgumentCaptor<WaveletName> waveletNameCaptor = ArgumentCaptor.forClass(WaveletName.class); verify(listener).onUpdate(waveletNameCaptor.capture(), isNullSnapshot(), eq(DeltaSequence.empty()), isNullVersion(), eq(true), (String) Mockito.isNull()); assertEquals(waveId, waveletNameCaptor.getValue().waveId); }
/** * Enqueues an empty wavelet into the {@link Robot}. */ private void enqueueEmptyWavelet() throws Exception { HashedVersion hashedVersionZero = HASH_FACTORY.createVersionZero(WAVELET_NAME); WaveletData waveletData = WaveletDataUtil.createEmptyWavelet(WAVELET_NAME, ALEX, hashedVersionZero, 0L); robot.waveletUpdate(waveletData, DeltaSequence.empty()); } }
/** * Enqueues an empty wavelet into the {@link Robot}. */ private void enqueueEmptyWavelet() throws Exception { HashedVersion hashedVersionZero = HASH_FACTORY.createVersionZero(WAVELET_NAME); WaveletData waveletData = WaveletDataUtil.createEmptyWavelet(WAVELET_NAME, ALEX, hashedVersionZero, 0L); robot.waveletUpdate(waveletData, DeltaSequence.empty()); } }
/** * Tests that we get deltas. */ public void testReceivedDeltasSentToClient() throws Exception { CommittedWaveletSnapshot snapshot = provideWavelet(WN1); when(waveletProvider.getWaveletIds(WAVE_ID)).thenReturn(ImmutableSet.of(W1)); when(waveletProvider.checkAccessPermission(WN1, USER)).thenReturn(true); OpenListener listener = openWave(IdFilters.ALL_IDS); verify(listener).onUpdate(eq(WN1), eq(snapshot), eq(DeltaSequence.empty()), eq(V1), isNullMarker(), any(String.class)); verifyMarker(listener, WAVE_ID); TransformedWaveletDelta delta = TransformedWaveletDelta.cloneOperations(USER, V2, 1234567890L, Arrays.asList(UTIL.noOp())); DeltaSequence deltas = DeltaSequence.of(delta); clientFrontend.waveletUpdate(snapshot.snapshot, deltas); verify(listener).onUpdate(eq(WN1), isNullSnapshot(), eq(deltas), isNullVersion(), isNullMarker(), anyString()); }
/** * Tests that we get deltas. */ public void testReceivedDeltasSentToClient() throws Exception { CommittedWaveletSnapshot snapshot = provideWavelet(WN1); when(waveletProvider.getWaveletIds(WAVE_ID)).thenReturn(ImmutableSet.of(W1)); when(waveletProvider.checkAccessPermission(WN1, USER)).thenReturn(true); OpenListener listener = openWave(IdFilters.ALL_IDS); verify(listener).onUpdate(eq(WN1), eq(snapshot), eq(DeltaSequence.empty()), eq(V0), isNullMarker(), any(String.class)); verifyMarker(listener, WAVE_ID); TransformedWaveletDelta delta = TransformedWaveletDelta.cloneOperations(USER, V2, 1234567890L, Arrays.asList(UTIL.noOp())); DeltaSequence deltas = DeltaSequence.of(delta); clientFrontend.waveletUpdate(snapshot.snapshot, deltas); verify(listener).onUpdate(eq(WN1), isNullSnapshot(), eq(deltas), isNullVersion(), isNullMarker(), anyString()); }
public void testImplicitParticipantsReceiveDeltaUpdates() throws WaveServerException, OperationException { CommittedWaveletSnapshot snapshot = provideWavelet(WN1); when(waveletProvider.getWaveletIds(WAVE_ID)).thenReturn(ImmutableSet.of(W1)); when(waveletProvider.checkAccessPermission(WN1, USER)).thenReturn(true); when(waveletProvider.checkAccessPermission(WN1, IMPLICIT_USER)).thenReturn(true); OpenListener listenerUser = openWave(USER, WAVE_ID, IdFilters.ALL_IDS); OpenListener listenerImplicitUser = openWave(IMPLICIT_USER, WAVE_ID, IdFilters.ALL_IDS); // Verify that explicit and implicit participants can open the the wavelet verify(listenerUser).onUpdate(eq(WN1), eq(snapshot), eq(DeltaSequence.empty()), eq(V1), isNullMarker(), any(String.class)); verifyMarker(listenerUser, WAVE_ID); verify(listenerImplicitUser).onUpdate(eq(WN1), eq(snapshot), eq(DeltaSequence.empty()), eq(V1), isNullMarker(), any(String.class)); verifyMarker(listenerImplicitUser, WAVE_ID); TransformedWaveletDelta delta = TransformedWaveletDelta.cloneOperations(USER, V2, 1234567890L, Arrays.asList(UTIL.noOp())); DeltaSequence deltas = DeltaSequence.of(delta); clientFrontend.waveletUpdate(snapshot.snapshot, deltas); // Verify that explicit and implicit participants gets the updates verify(listenerUser).onUpdate(eq(WN1), isNullSnapshot(), eq(deltas), isNullVersion(), isNullMarker(), anyString()); verify(listenerImplicitUser).onUpdate(eq(WN1), isNullSnapshot(), eq(deltas), isNullVersion(), isNullMarker(), anyString()); }
public void testEmptySequence() { DeltaSequence empty = DeltaSequence.empty(); assertEquals(ImmutableList.<ProtocolWaveletDelta>of(), empty); assertTrue(empty.isEmpty()); assertEquals(0, empty.size()); try { empty.getStartVersion(); fail("Expected illegal state exception"); } catch (IllegalStateException expected) { } try { empty.getEndVersion(); fail("Expected illegal state exception"); } catch (IllegalStateException expected) { } }
public void testEmptySequence() { DeltaSequence empty = DeltaSequence.empty(); assertEquals(ImmutableList.<ProtocolWaveletDelta>of(), empty); assertTrue(empty.isEmpty()); assertEquals(0, empty.size()); try { empty.getStartVersion(); fail("Expected illegal state exception"); } catch (IllegalStateException expected) { } try { empty.getEndVersion(); fail("Expected illegal state exception"); } catch (IllegalStateException expected) { } }
/** * Tests DeltaSequence.subList() on both empty and nonempty delta sequences. */ public void testSubList() { DeltaSequence empty = DeltaSequence.empty(); assertEquals(empty, empty.subList(0, 0)); DeltaSequence deltaseq = DeltaSequence.of(twoDeltas); assertEquals(twoDeltas, deltaseq.subList(0, twoDeltas.size())); assertEquals(empty, deltaseq.subList(0, 0)); // Construct a sublist with just the first delta. DeltaSequence subDeltas = deltaseq.subList(0, 1); assertEquals(START_VERSION + 5, subDeltas.getEndVersion().getVersion()); assertEquals(deltaseq.getStartVersion(), subDeltas.getStartVersion()); assertEquals(ImmutableList.of(delta1), subDeltas); }
/** * Tests DeltaSequence.subList() on both empty and nonempty delta sequences. */ public void testSubList() { DeltaSequence empty = DeltaSequence.empty(); assertEquals(empty, empty.subList(0, 0)); DeltaSequence deltaseq = DeltaSequence.of(twoDeltas); assertEquals(twoDeltas, deltaseq.subList(0, twoDeltas.size())); assertEquals(empty, deltaseq.subList(0, 0)); // Construct a sublist with just the first delta. DeltaSequence subDeltas = deltaseq.subList(0, 1); assertEquals(START_VERSION + 5, subDeltas.getEndVersion().getVersion()); assertEquals(deltaseq.getStartVersion(), subDeltas.getStartVersion()); assertEquals(ImmutableList.of(delta1), subDeltas); }
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 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()); }