/** * Opens a new mux with a known wavelet and returns the created view mock. */ private MockViewChannel openMuxWithKnownWavelet(ObservableWaveletData knownSnapshot) { long version = knownSnapshot.getVersion(); byte[] signature = knownSnapshot.getHashedVersion().getHistoryHash(); MockViewChannel view = viewFactory.expectCreate(); Map<WaveletId, List<HashedVersion>> expectedSigs = createKnownVersions(WAVELET_ID_1, version, signature); view.expectOpen(IdFilters.ALL_IDS, expectedSigs); mux.open(muxListener, IdFilters.ALL_IDS, Collections.singletonList(createKnownWavelet( knownSnapshot, version, signature, Accessibility.READ_WRITE))); return view; }
/** * Opens a new mux with a known wavelet and returns the created view mock. */ private MockViewChannel openMuxWithKnownWavelet(ObservableWaveletData knownSnapshot) { long version = knownSnapshot.getVersion(); byte[] signature = knownSnapshot.getHashedVersion().getHistoryHash(); MockViewChannel view = viewFactory.expectCreate(); Map<WaveletId, List<HashedVersion>> expectedSigs = createKnownVersions(WAVELET_ID_1, version, signature); view.expectOpen(IdFilters.ALL_IDS, expectedSigs); mux.open(muxListener, IdFilters.ALL_IDS, Collections.singletonList(createKnownWavelet( knownSnapshot, version, signature, Accessibility.READ_WRITE))); return view; }
/** * Tests that the mux ignores known wavelets that don't match the * wavelet filter, hence will never receive updates from the server. */ public void testOpenWithKnownWaveletsIgnoresFilteredWavelets() { long knownVersion = 40; byte[] knownSig = SIG1; IdFilter onlyWavelet1 = IdFilter.ofPrefixes("w+1"); ObservableWaveletData knownSnapshot1 = createSnapshot(WAVELET_ID_1, knownVersion, knownSig); ObservableWaveletData knownSnapshot2 = createSnapshot(WAVELET_ID_2, 0, NOSIG); MockViewChannel view = viewFactory.expectCreate(); Map<WaveletId, List<HashedVersion>> expectedSigs = createKnownVersions(WAVELET_ID_1, knownVersion, knownSig); view.expectOpen(onlyWavelet1, expectedSigs); mux.open(muxListener, onlyWavelet1, Arrays.asList( createKnownWavelet(knownSnapshot1, knownVersion, knownSig, Accessibility.READ_WRITE), createKnownWavelet(knownSnapshot2, 0, NOSIG, Accessibility.READ_WRITE))); view.checkExpectationsSatisified(); }
/** * Tests that the mux ignores known wavelets that don't match the * wavelet filter, hence will never receive updates from the server. */ public void testOpenWithKnownWaveletsIgnoresFilteredWavelets() { long knownVersion = 40; byte[] knownSig = SIG1; IdFilter onlyWavelet1 = IdFilter.ofPrefixes("w+1"); ObservableWaveletData knownSnapshot1 = createSnapshot(WAVELET_ID_1, knownVersion, knownSig); ObservableWaveletData knownSnapshot2 = createSnapshot(WAVELET_ID_2, 0, NOSIG); MockViewChannel view = viewFactory.expectCreate(); Map<WaveletId, List<HashedVersion>> expectedSigs = createKnownVersions(WAVELET_ID_1, knownVersion, knownSig); view.expectOpen(onlyWavelet1, expectedSigs); mux.open(muxListener, onlyWavelet1, Arrays.asList( createKnownWavelet(knownSnapshot1, knownVersion, knownSig, Accessibility.READ_WRITE), createKnownWavelet(knownSnapshot2, 0, NOSIG, Accessibility.READ_WRITE))); view.checkExpectationsSatisified(); }
public void testMuxReconnectsAgainAfterReconnectFailure() throws ChannelException { final ConnectionInfo chInfo = new ConnectionInfo(WAVELET_ID_1, 1, SIG1); MockViewChannel view = openMux(); muxListener.verifyNoMoreInteractions(); ViewChannel.Listener viewListener = view.takeListener(); viewListener.onConnected(); // Receive initial snapshots. ConnectedChannel ch = connectChannelSnapshot(viewListener, chInfo); triggerAndCheckOpenFinished(viewListener); // Disconnect, expect reconnection. view.expectClose(); MockViewChannel view2 = viewFactory.expectCreate(); view2.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1)); viewListener.onClosed(); ViewChannel.Listener viewListener2 = view2.takeListener(); // Disconnect, expect reconnection again. view2.expectClose(); MockViewChannel view3 = viewFactory.expectCreate(); view3.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1)); viewListener2.onClosed(); view2.checkExpectationsSatisified(); view3.checkExpectationsSatisified(); muxListener.verifyNoMoreInteractions(); }
public void testMuxReconnectsAgainAfterReconnectFailure() throws ChannelException { final ConnectionInfo chInfo = new ConnectionInfo(WAVELET_ID_1, 1, SIG1); MockViewChannel view = openMux(); muxListener.verifyNoMoreInteractions(); ViewChannel.Listener viewListener = view.takeListener(); viewListener.onConnected(); // Receive initial snapshots. ConnectedChannel ch = connectChannelSnapshot(viewListener, chInfo); triggerAndCheckOpenFinished(viewListener); // Disconnect, expect reconnection. view.expectClose(); MockViewChannel view2 = viewFactory.expectCreate(); view2.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1)); viewListener.onClosed(); ViewChannel.Listener viewListener2 = view2.takeListener(); // Disconnect, expect reconnection again. view2.expectClose(); MockViewChannel view3 = viewFactory.expectCreate(); view3.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1)); viewListener2.onClosed(); view2.checkExpectationsSatisified(); view3.checkExpectationsSatisified(); muxListener.verifyNoMoreInteractions(); }
/** * Helps test that a mux reconnects with known wavelets if the view channel * fails during reconnection. */ private void doTestMuxReconnectsKnownWavelet(KnownWaveletDisconnectWhen when) throws ChannelException { ConnectionInfo chInfo = new ConnectionInfo(WAVELET_ID_1, 1, SIG1); MockViewChannel view = openMuxWithKnownWavelet(chInfo.snapshot); ConnectedChannel ch = expectConnectedChannel(chInfo.snapshot, Accessibility.READ_WRITE); checkOpenFinished(); ViewChannel.Listener viewListener = view.takeListener(); if (when.compareTo(KnownWaveletDisconnectWhen.AFTER_VIEW_CONNECTED) >= 0) { viewListener.onConnected(); } if (when.compareTo(KnownWaveletDisconnectWhen.AFTER_RESYNC) >= 0) { // Receive reconnection delta and open finished. reconnectChannel(viewListener, WAVELET_ID_1, chInfo.initialVersion, chInfo.initialSignature); viewListener.onOpenFinished(); view.checkExpectationsSatisified(); } // Fail view, expect reconnection. MockViewChannel view2 = failViewAndExpectReconnection(viewListener, view, "View failed after resync message", createKnownVersions(WAVELET_ID_1, 1, SIG1)); reconnectViewAndCheckEverythingStillWorks(view2, chInfo, ch); muxListener.verifyNoMoreInteractions(); }
final ConnectionInfo chInfo2 = new ConnectionInfo(WAVELET_ID_2, 20, SIG2); Map<WaveletId, List<HashedVersion>> expectedSigs = createKnownVersions(WAVELET_ID_1, chInfo1.initialVersion, chInfo1.initialSignature, WAVELET_ID_2, chInfo2.initialVersion, chInfo2.initialSignature);
final ConnectionInfo chInfo2 = new ConnectionInfo(WAVELET_ID_2, 20, SIG2); Map<WaveletId, List<HashedVersion>> expectedSigs = createKnownVersions(WAVELET_ID_1, chInfo1.initialVersion, chInfo1.initialSignature, WAVELET_ID_2, chInfo2.initialVersion, chInfo2.initialSignature);
/** * Helps test that a mux reconnects with known wavelets if the view channel * fails during reconnection. */ private void doTestMuxReconnectsKnownWavelet(KnownWaveletDisconnectWhen when) throws ChannelException { ConnectionInfo chInfo = new ConnectionInfo(WAVELET_ID_1, 1, SIG1); MockViewChannel view = openMuxWithKnownWavelet(chInfo.snapshot); ConnectedChannel ch = expectConnectedChannel(chInfo.snapshot, Accessibility.READ_WRITE); checkOpenFinished(); ViewChannel.Listener viewListener = view.takeListener(); if (when.compareTo(KnownWaveletDisconnectWhen.AFTER_VIEW_CONNECTED) >= 0) { viewListener.onConnected(); } if (when.compareTo(KnownWaveletDisconnectWhen.AFTER_RESYNC) >= 0) { // Receive reconnection delta and open finished. reconnectChannel(viewListener, WAVELET_ID_1, chInfo.initialVersion, chInfo.initialSignature); viewListener.onOpenFinished(); view.checkExpectationsSatisified(); } // Fail view, expect reconnection. MockViewChannel view2 = failViewAndExpectReconnection(viewListener, view, "View failed after resync message", createKnownVersions(WAVELET_ID_1, 1, SIG1)); reconnectViewAndCheckEverythingStillWorks(view2, chInfo, ch); muxListener.verifyNoMoreInteractions(); }
public void testMuxReconnectsAfterDisconnectWithOutstandingSubmit() throws ChannelException { final ConnectionInfo chInfo1 = new ConnectionInfo(WAVELET_ID_1, 1, SIG1); MockViewChannel view = openMux(); muxListener.verifyNoMoreInteractions(); ViewChannel.Listener viewListener = view.takeListener(); viewListener.onConnected(); // Receive initial snapshots. ConnectedChannel ch = connectChannelSnapshot(viewListener, chInfo1); triggerAndCheckOpenFinished(viewListener); // Send but don't ack delta. WaveletDelta delta = checkSendDelta(view, ch.channel, chInfo1.initialHashedVersion, WAVELET_ID_1); // Reconnect channel. MockViewChannel view2 = failViewAndExpectReconnection(viewListener, view, "View failed with outstanding submit", createKnownVersions(WAVELET_ID_1, 1, SIG1)); // Expect retransmit of the sent delta after reconnect. view2.expectSubmitDelta(WAVELET_ID_1, delta); ViewChannel.Listener viewListener2 = reconnectView(view2, chInfo1); muxListener.verifyNoMoreInteractions(); // No callback on reconnection. checkAckDelta(view2, ch.channel, ch.listener, 1, chInfo1.initialVersion + 1, SIG1); checkReceiveAndSend(viewListener2, view2, ch, WAVELET_ID_1, chInfo1.initialVersion + 1); // If the submit is then acked, it should be ignored. view.ackSubmit(1, chInfo1.initialVersion + 1, SIG5); view.checkExpectationsSatisified(); view2.checkExpectationsSatisified(); ch.listener.checkOpsReceived(0); muxListener.verifyNoMoreInteractions(); }
public void testMuxReconnectsAfterDisconnectWithOutstandingSubmit() throws ChannelException { final ConnectionInfo chInfo1 = new ConnectionInfo(WAVELET_ID_1, 1, SIG1); MockViewChannel view = openMux(); muxListener.verifyNoMoreInteractions(); ViewChannel.Listener viewListener = view.takeListener(); viewListener.onConnected(); // Receive initial snapshots. ConnectedChannel ch = connectChannelSnapshot(viewListener, chInfo1); triggerAndCheckOpenFinished(viewListener); // Send but don't ack delta. WaveletDelta delta = checkSendDelta(view, ch.channel, chInfo1.initialHashedVersion, WAVELET_ID_1); // Reconnect channel. MockViewChannel view2 = failViewAndExpectReconnection(viewListener, view, "View failed with outstanding submit", createKnownVersions(WAVELET_ID_1, 1, SIG1)); // Expect retransmit of the sent delta after reconnect. view2.expectSubmitDelta(WAVELET_ID_1, delta); ViewChannel.Listener viewListener2 = reconnectView(view2, chInfo1); muxListener.verifyNoMoreInteractions(); // No callback on reconnection. checkAckDelta(view2, ch.channel, ch.listener, 1, chInfo1.initialVersion + 1, SIG1); checkReceiveAndSend(viewListener2, view2, ch, WAVELET_ID_1, chInfo1.initialVersion + 1); // If the submit is then acked, it should be ignored. view.ackSubmit(1, chInfo1.initialVersion + 1, SIG5); view.checkExpectationsSatisified(); view2.checkExpectationsSatisified(); ch.listener.checkOpsReceived(0); muxListener.verifyNoMoreInteractions(); }
public void testMuxReconnectsAfterSubmitFailure() throws ChannelException { final ConnectionInfo chInfo1 = new ConnectionInfo(WAVELET_ID_1, 1, SIG1); MockViewChannel view = openMux(); muxListener.verifyNoMoreInteractions(); ViewChannel.Listener viewListener = view.takeListener(); viewListener.onConnected(); // Receive initial snapshots. ConnectedChannel ch = connectChannelSnapshot(viewListener, chInfo1); triggerAndCheckOpenFinished(viewListener); // Send but don't ack delta. WaveletDelta delta = checkSendDelta(view, ch.channel, chInfo1.initialHashedVersion, WAVELET_ID_1); // Fail the submission, expecting reconnection. MockViewChannel view2 = failViewAndExpectReconnection(viewListener, view, "View failed with outstanding submit", createKnownVersions(WAVELET_ID_1, 1, SIG1)); // Expect retransmit of the sent delta after reconnect. view2.expectSubmitDelta(WAVELET_ID_1, delta); ViewChannel.Listener viewListener2 = reconnectView(view2, chInfo1); muxListener.verifyNoMoreInteractions(); // No callback on reconnection. checkAckDelta(view2, ch.channel, ch.listener, 1, chInfo1.initialVersion + 1, SIG2); // If the first view later disconnects, it should be ignored viewListener.onException(new ChannelException("failed for testing", Recoverable.RECOVERABLE)); checkReceiveAndSend(viewListener2, view2, ch, WAVELET_ID_1, chInfo1.initialVersion + 1); view.checkExpectationsSatisified(); view2.checkExpectationsSatisified(); ch.listener.checkOpsReceived(0); muxListener.verifyNoMoreInteractions(); }
public void testMuxReconnectsAfterSubmitFailure() throws ChannelException { final ConnectionInfo chInfo1 = new ConnectionInfo(WAVELET_ID_1, 1, SIG1); MockViewChannel view = openMux(); muxListener.verifyNoMoreInteractions(); ViewChannel.Listener viewListener = view.takeListener(); viewListener.onConnected(); // Receive initial snapshots. ConnectedChannel ch = connectChannelSnapshot(viewListener, chInfo1); triggerAndCheckOpenFinished(viewListener); // Send but don't ack delta. WaveletDelta delta = checkSendDelta(view, ch.channel, chInfo1.initialHashedVersion, WAVELET_ID_1); // Fail the submission, expecting reconnection. MockViewChannel view2 = failViewAndExpectReconnection(viewListener, view, "View failed with outstanding submit", createKnownVersions(WAVELET_ID_1, 1, SIG1)); // Expect retransmit of the sent delta after reconnect. view2.expectSubmitDelta(WAVELET_ID_1, delta); ViewChannel.Listener viewListener2 = reconnectView(view2, chInfo1); muxListener.verifyNoMoreInteractions(); // No callback on reconnection. checkAckDelta(view2, ch.channel, ch.listener, 1, chInfo1.initialVersion + 1, SIG2); // If the first view later disconnects, it should be ignored viewListener.onException(new ChannelException("failed for testing", Recoverable.RECOVERABLE)); checkReceiveAndSend(viewListener2, view2, ch, WAVELET_ID_1, chInfo1.initialVersion + 1); view.checkExpectationsSatisified(); view2.checkExpectationsSatisified(); ch.listener.checkOpsReceived(0); muxListener.verifyNoMoreInteractions(); }
view.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1)); assertNotNull(scheduler.command); scheduler.command.execute();
view.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1)); assertNotNull(scheduler.command); scheduler.command.execute();
view2.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1)); scheduler.command.execute();
view2.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1)); scheduler.command.execute();
view2.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1, WAVELET_ID_2, 20, SIG2)); viewListener.onException(new ChannelException("failed for testing", Recoverable.RECOVERABLE));
view2.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1, WAVELET_ID_2, 20, SIG2)); viewListener.onException(new ChannelException("failed for testing", Recoverable.RECOVERABLE));