Add command to subscribe to USK updates
[jFCPlib.git] / src / test / java / net / pterodactylus / fcp / quelaton / DefaultFcpClientTest.java
index 78aa52a..4fad0ea 100644 (file)
@@ -1993,20 +1993,20 @@ public class DefaultFcpClientTest {
                assertThat(newConfigData.get().getCurrent("foo.bar"), is("baz"));
        }
 
-       public class PluginCommands {
+       private List<String> lines;
+       private String identifier;
 
-               private static final String CLASS_NAME = "foo.plugin.Plugin";
+       private void connectAndAssert(Supplier<Matcher<List<String>>> requestMatcher)
+       throws InterruptedException, ExecutionException, IOException {
+               connectNode();
+               lines = fcpServer.collectUntil(is("EndMessage"));
+               identifier = extractIdentifier(lines);
+               assertThat(lines, requestMatcher.get());
+       }
 
-               private List<String> lines;
-               private String identifier;
+       public class PluginCommands {
 
-               private void connectAndAssert(Supplier<Matcher<List<String>>> requestMatcher)
-               throws InterruptedException, ExecutionException, IOException {
-                       connectNode();
-                       lines = fcpServer.collectUntil(is("EndMessage"));
-                       identifier = extractIdentifier(lines);
-                       assertThat(lines, requestMatcher.get());
-               }
+               private static final String CLASS_NAME = "foo.plugin.Plugin";
 
                private void replyWithPluginInfo() throws IOException {
                        fcpServer.writeLine(
@@ -2126,14 +2126,8 @@ public class DefaultFcpClientTest {
                                public void failedLoad() throws ExecutionException, InterruptedException, IOException {
                                        Future<Optional<PluginInfo>> pluginInfo =
                                                fcpClient.loadPlugin().officialFromFreenet("superPlugin").execute();
-                                       connectNode();
-                                       List<String> lines = fcpServer.collectUntil(is("EndMessage"));
-                                       String identifier = extractIdentifier(lines);
-                                       fcpServer.writeLine(
-                                               "ProtocolError",
-                                               "Identifier=" + identifier,
-                                               "EndMessage"
-                                       );
+                                       connectAndAssert(() -> matchesFcpMessage("LoadPlugin", "EndMessage"));
+                                       replyWithProtocolError();
                                        assertThat(pluginInfo.get().isPresent(), is(false));
                                }
 
@@ -2141,6 +2135,14 @@ public class DefaultFcpClientTest {
 
                }
 
+               private void replyWithProtocolError() throws IOException {
+                       fcpServer.writeLine(
+                               "ProtocolError",
+                               "Identifier=" + identifier,
+                               "EndMessage"
+                       );
+               }
+
                public class ReloadPlugin {
 
                        @Test
@@ -2260,6 +2262,16 @@ public class DefaultFcpClientTest {
                                verifyPluginInfo(pluginInfo);
                        }
 
+                       @Test
+                       public void protocolErrorIsRecognizedAsFailure()
+                       throws InterruptedException, ExecutionException, IOException {
+                               Future<Optional<PluginInfo>> pluginInfo =
+                                       fcpClient.getPluginInfo().detailed().plugin(CLASS_NAME).execute();
+                               connectAndAssert(() -> allOf(matchGetPluginInfoMessage(), hasItem("Detailed=true")));
+                               replyWithProtocolError();
+                               assertThat(pluginInfo.get(), is(Optional.empty()));
+                       }
+
                        private Matcher<List<String>> matchGetPluginInfoMessage() {
                                return matchesFcpMessage(
                                        "GetPluginInfo",
@@ -2273,4 +2285,24 @@ public class DefaultFcpClientTest {
 
        }
 
+       public class UskSubscriptionCommands {
+
+               private static final String URI = "SSK@some,uri/file.txt";
+
+               @Test
+               public void subscriptionWorks() throws InterruptedException, ExecutionException, IOException {
+                       Future<Optional<UskSubscription>> uskSubscription = fcpClient.subscribeUsk().uri(URI).execute();
+                       connectAndAssert(() -> matchesFcpMessage("SubscribeUSK", "URI=" + URI, "EndMessage"));
+                       fcpServer.writeLine(
+                               "SubscribedUSK",
+                               "Identifier=" + identifier,
+                               "URI=" + URI,
+                               "DontPoll=false",
+                               "EndMessage"
+                       );
+                       assertThat(uskSubscription.get().get().getUri(), is(URI));
+               }
+
+       }
+
 }