@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 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 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(); }
/** * Tests that if we open the index wave, we don't get updates from the * original wave if they contain no interesting operations (add/remove * participant or text). */ public void testUninterestingDeltasDontUpdateIndex() throws WaveServerException { provideWaves(Collections.<WaveId> emptySet()); OpenListener listener = openWave(INDEX_WAVE_ID, IdFilters.ALL_IDS); verifyChannelId(listener); verifyMarker(listener, INDEX_WAVE_ID); HashedVersion v1 = HashedVersion.unsigned(1L); TransformedWaveletDelta delta = makeDelta(USER, v1, 0L, UTIL.noOp()); DeltaSequence deltas = DeltaSequence.of(delta); WaveletData wavelet = WaveletDataUtil.createEmptyWavelet(WN1, USER, V0, 1234567890L); clientFrontend.waveletUpdate(wavelet, deltas); WaveletName dummyWaveletName = ClientFrontendImpl.createDummyWaveletName(INDEX_WAVE_ID); verify(listener, Mockito.never()).onUpdate(eq(dummyWaveletName), any(CommittedWaveletSnapshot.class), isDeltasStartingAt(0), any(HashedVersion.class), 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(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()); }
/** * Tests that multiple deltas are received. */ public void testUpdateSeveralDeltas() { TransformedWaveletDelta delta2 = UTIL.noOpDelta(V2.getVersion()); OpenListener listener = mock(OpenListener.class); m.subscribe(W1, IdFilters.ALL_IDS, "ch1", listener); DeltaSequence bothDeltas = DeltaSequence.of(DELTA, delta2); m.onUpdate(W1A, bothDeltas); verify(listener).onUpdate(W1A, null, bothDeltas, null, null, "ch1"); // Also succeeds when sending the two deltas via separate onUpdates() DeltaSequence delta2Sequence = DeltaSequence.of(delta2); m.subscribe(W2, IdFilters.ALL_IDS, "ch2", listener); m.onUpdate(W2A, DELTAS); m.onUpdate(W2A, DeltaSequence.of(delta2)); verify(listener).onUpdate(W2A, null, DELTAS, null, null, "ch2"); verify(listener).onUpdate(W2A, null, delta2Sequence, null, null, "ch2"); }
/** * Tests that multiple deltas are received. */ public void testUpdateSeveralDeltas() { TransformedWaveletDelta delta2 = UTIL.noOpDelta(V2.getVersion()); OpenListener listener = mock(OpenListener.class); m.subscribe(W1, IdFilters.ALL_IDS, "ch1", listener); DeltaSequence bothDeltas = DeltaSequence.of(DELTA, delta2); m.onUpdate(W1A, bothDeltas); verify(listener).onUpdate(W1A, null, bothDeltas, null, null, "ch1"); // Also succeeds when sending the two deltas via separate onUpdates() DeltaSequence delta2Sequence = DeltaSequence.of(delta2); m.subscribe(W2, IdFilters.ALL_IDS, "ch2", listener); m.onUpdate(W2A, DELTAS); m.onUpdate(W2A, DeltaSequence.of(delta2)); verify(listener).onUpdate(W2A, null, DELTAS, null, null, "ch2"); verify(listener).onUpdate(W2A, null, delta2Sequence, null, null, "ch2"); }
/** * Tests that a snapshot not matching the subscription filter is not received. * @throws WaveServerException */ @SuppressWarnings("unchecked") // Mock container public void testUnsubscribedSnapshotNotRecieved() throws Exception { OpenListener listener = openWave(IdFilter.ofPrefixes("non-existing")); verifyChannelId(listener); verifyMarker(listener, WAVE_ID); ReadableWaveletData wavelet = provideWavelet(WN1).snapshot; clientFrontend.waveletUpdate(wavelet, DELTAS); verify(listener, Mockito.never()).onUpdate(eq(WN1), any(CommittedWaveletSnapshot.class), Matchers.anyList(), any(HashedVersion.class), isNullMarker(), anyString()); }
/** * Tests that a snapshot not matching the subscription filter is not received. * @throws WaveServerException */ @SuppressWarnings("unchecked") // Mock container public void testUnsubscribedSnapshotNotRecieved() throws Exception { OpenListener listener = openWave(IdFilter.ofPrefixes("non-existing")); verifyChannelId(listener); verifyMarker(listener, WAVE_ID); ReadableWaveletData wavelet = provideWavelet(WN1).snapshot; clientFrontend.waveletUpdate(wavelet, DELTAS); verify(listener, Mockito.never()).onUpdate(eq(WN1), any(CommittedWaveletSnapshot.class), Matchers.anyList(), any(HashedVersion.class), isNullMarker(), anyString()); }
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); }
/** * Sends an update to the client. */ private void sendUpdate(WaveletName waveletName, List<TransformedWaveletDelta> deltas, HashedVersion committedVersion) { // Channel id needs to be sent with every message until views can be // closed, see bug 128. openListener.onUpdate(waveletName, null, deltas, committedVersion, null, channelId); }
/** * 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(); }
@Override public void waveletUpdate(ReadableWaveletData wavelet, DeltaSequence newDeltas) { OpenListener listener = openListeners.get(wavelet.getWaveId()); if (listener != null) { WaveletName waveletName = WaveletName.of(wavelet.getWaveId(), wavelet.getWaveletId()); listener.onUpdate(waveletName, null, newDeltas, null, null, null); } } }
/** * Tests that delta updates are held back while a submit is in flight. */ public void testDeltaHeldBackWhileOutstandingSubmit() { OpenListener listener = mock(OpenListener.class); m.subscribe(W1, IdFilters.ALL_IDS, "ch", listener); m.submitRequest("ch", W1A); m.onUpdate(W1A, DELTAS); verifyZeroInteractions(listener); m.submitResponse("ch", W1A, V3); // V3 not the same as update delta. verify(listener).onUpdate(W1A, null, DELTAS, null, null, "ch"); }
/** * Tests that delta updates are held back while a submit is in flight. */ public void testDeltaHeldBackWhileOutstandingSubmit() { OpenListener listener = mock(OpenListener.class); m.subscribe(W1, IdFilters.ALL_IDS, "ch", listener); m.submitRequest("ch", W1A); m.onUpdate(W1A, DELTAS); verifyZeroInteractions(listener); m.submitResponse("ch", W1A, V3); // V3 not the same as update delta. verify(listener).onUpdate(W1A, null, DELTAS, null, null, "ch"); }
/** * 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); }
/** * Tests that a single delta update is received by the listener. */ public void testSingleDeltaReceived() { OpenListener listener = mock(OpenListener.class); m.subscribe(W1, IdFilters.ALL_IDS, "ch", listener); m.onUpdate(W1A, DELTAS); verify(listener).onUpdate(W1A, null, DELTAS, null, null, "ch"); }
/** * 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); }
/** * Tests that a single delta update is received by the listener. */ public void testSingleDeltaReceived() { OpenListener listener = mock(OpenListener.class); m.subscribe(W1, IdFilters.ALL_IDS, "ch", listener); m.onUpdate(W1A, DELTAS); verify(listener).onUpdate(W1A, null, DELTAS, null, null, "ch"); }