+ replySequence.connectionClosed(fcpConnection, throwable);
+ assertThat(result.get(), is(true));
+ assertThat(replySequence.receivedThrowable.get(), is(throwable));
+ }
+
+ @FunctionalInterface
+ private interface MessageReceiver<M> {
+
+ void receiveMessage(FcpConnection fcpConnection, M message);
+
+ }
+
+ private static class TestFcpReplySequence extends FcpReplySequence<Boolean> {
+
+ private final AtomicReference<String> gotMessage = new AtomicReference<>();
+ private final AtomicReference<String> expectedMessage = new AtomicReference<>();
+ private final AtomicReference<Throwable> receivedThrowable = new AtomicReference<>();
+
+ public TestFcpReplySequence(ExecutorService executorService, FcpConnection fcpConnection) {
+ super(executorService, fcpConnection);
+ }
+
+ public void setExpectedMessage(String expectedMessage) {
+ this.expectedMessage.set(expectedMessage);
+ }
+
+ @Override
+ protected boolean isFinished() {
+ return getResult();
+ }
+
+ @Override
+ protected Boolean getResult() {
+ return expectedMessage.get().equals(gotMessage.get());
+ }
+
+ @Override
+ protected void consumeNodeHello(NodeHello nodeHello) {
+ gotMessage.set(nodeHello.getName());
+ }
+
+ @Override
+ protected void consumeCloseConnectionDuplicateClientName(
+ CloseConnectionDuplicateClientName closeConnectionDuplicateClientName) {
+ gotMessage.set(closeConnectionDuplicateClientName.getName());
+ }
+
+ @Override
+ protected void consumeSSKKeypair(SSKKeypair sskKeypair) {
+ gotMessage.set(sskKeypair.getName());
+ }
+
+ @Override
+ protected void consumePeer(Peer peer) {
+ gotMessage.set(peer.getName());
+ }
+
+ @Override
+ protected void consumeEndListPeers(EndListPeers endListPeers) {
+ gotMessage.set(endListPeers.getName());
+ }
+
+ @Override
+ protected void consumePeerNote(PeerNote peerNote) {
+ gotMessage.set(peerNote.getName());
+ }
+
+ @Override
+ protected void consumeEndListPeerNotes(EndListPeerNotes endListPeerNotes) {
+ gotMessage.set(endListPeerNotes.getName());
+ }
+
+ @Override
+ protected void consumePeerRemoved(PeerRemoved peerRemoved) {
+ gotMessage.set(peerRemoved.getName());
+ }
+
+ @Override
+ protected void consumeNodeData(NodeData nodeData) {
+ gotMessage.set(nodeData.getName());
+ }
+
+ @Override
+ protected void consumeTestDDAReply(TestDDAReply testDDAReply) {
+ gotMessage.set(testDDAReply.getName());
+ }
+
+ @Override
+ protected void consumeTestDDAComplete(TestDDAComplete testDDAComplete) {
+ gotMessage.set(testDDAComplete.getName());
+ }
+
+ @Override
+ protected void consumePersistentGet(PersistentGet persistentGet) {
+ gotMessage.set(persistentGet.getName());
+ }
+
+ @Override
+ protected void consumePersistentPut(PersistentPut persistentPut) {
+ gotMessage.set(persistentPut.getName());
+ }
+
+ @Override
+ protected void consumeEndListPersistentRequests(EndListPersistentRequests endListPersistentRequests) {
+ gotMessage.set(endListPersistentRequests.getName());
+ }
+
+ @Override
+ protected void consumeURIGenerated(URIGenerated uriGenerated) {
+ gotMessage.set(uriGenerated.getName());
+ }
+
+ @Override
+ protected void consumeDataFound(DataFound dataFound) {
+ gotMessage.set(dataFound.getName());
+ }
+
+ @Override
+ protected void consumeAllData(AllData allData) {
+ gotMessage.set(allData.getName());
+ }
+
+ @Override
+ protected void consumeSimpleProgress(SimpleProgress simpleProgress) {
+ gotMessage.set(simpleProgress.getName());
+ }
+
+ @Override
+ protected void consumeStartedCompression(StartedCompression startedCompression) {
+ gotMessage.set(startedCompression.getName());
+ }
+
+ @Override
+ protected void consumeFinishedCompression(FinishedCompression finishedCompression) {
+ gotMessage.set(finishedCompression.getName());
+ }
+
+ @Override
+ protected void consumeUnknownPeerNoteType(UnknownPeerNoteType unknownPeerNoteType) {
+ gotMessage.set(unknownPeerNoteType.getName());
+ }
+
+ @Override
+ protected void consumeUnknownNodeIdentifier(UnknownNodeIdentifier unknownNodeIdentifier) {
+ gotMessage.set(unknownNodeIdentifier.getName());
+ }
+
+ @Override
+ protected void consumeConfigData(ConfigData configData) {
+ gotMessage.set(configData.getName());
+ }
+
+ @Override
+ protected void consumeGetFailed(GetFailed getFailed) {
+ gotMessage.set(getFailed.getName());
+ }
+
+ @Override
+ protected void consumePutFailed(PutFailed putFailed) {
+ gotMessage.set(putFailed.getName());
+ }
+
+ @Override
+ protected void consumeIdentifierCollision(IdentifierCollision identifierCollision) {
+ gotMessage.set(identifierCollision.getName());
+ }
+
+ @Override
+ protected void consumePersistentPutDir(PersistentPutDir persistentPutDir) {
+ gotMessage.set(persistentPutDir.getName());
+ }
+
+ @Override
+ protected void consumePersistentRequestRemoved(PersistentRequestRemoved persistentRequestRemoved) {
+ gotMessage.set(persistentRequestRemoved.getName());
+ }
+
+ @Override
+ protected void consumeSubscribedUSKUpdate(SubscribedUSKUpdate subscribedUSKUpdate) {
+ gotMessage.set(subscribedUSKUpdate.getName());
+ }
+
+ @Override
+ protected void consumePluginInfo(PluginInfo pluginInfo) {
+ gotMessage.set(pluginInfo.getName());
+ }
+
+ @Override
+ protected void consumeFCPPluginReply(FCPPluginReply fcpPluginReply) {
+ gotMessage.set(fcpPluginReply.getName());
+ }
+
+ @Override
+ protected void consumePersistentRequestModified(PersistentRequestModified persistentRequestModified) {
+ gotMessage.set(persistentRequestModified.getName());
+ }
+
+ @Override
+ protected void consumePutSuccessful(PutSuccessful putSuccessful) {
+ gotMessage.set(putSuccessful.getName());
+ }
+
+ @Override
+ protected void consumePutFetchable(PutFetchable putFetchable) {
+ gotMessage.set(putFetchable.getName());
+ }
+
+ @Override
+ protected void consumeSentFeed(SentFeed sentFeed) {
+ gotMessage.set(sentFeed.getName());
+ }
+
+ @Override
+ protected void consumeReceivedBookmarkFeed(ReceivedBookmarkFeed receivedBookmarkFeed) {
+ gotMessage.set(receivedBookmarkFeed.getName());
+ }
+
+ @Override
+ protected void consumeProtocolError(ProtocolError protocolError) {
+ gotMessage.set(protocolError.getName());
+ }
+
+ @Override
+ protected void consumeUnknownMessage(FcpMessage fcpMessage) {
+ gotMessage.set(fcpMessage.getName());
+ }
+
+ @Override
+ protected void consumeConnectionClosed(Throwable throwable) {
+ receivedThrowable.set(throwable);
+ gotMessage.set("ConnectionClosed");
+ }
+