Move verifiers to different package.
[Sone.git] / src / test / java / net / pterodactylus / sone / fcp / FcpInterfaceTest.java
index 6648d12..78b2591 100644 (file)
@@ -20,6 +20,8 @@ package net.pterodactylus.sone.fcp;
 import static freenet.pluginmanager.FredPluginFCP.ACCESS_DIRECT;
 import static freenet.pluginmanager.FredPluginFCP.ACCESS_FCP_FULL;
 import static freenet.pluginmanager.FredPluginFCP.ACCESS_FCP_RESTRICTED;
+import static net.pterodactylus.sone.Matchers.delivers;
+import static net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired.ALWAYS;
 import static net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired.NO;
 import static net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired.WRITING;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -29,7 +31,6 @@ import static org.hamcrest.Matchers.notNullValue;
 import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.List;
 
 import net.pterodactylus.sone.core.Core;
@@ -43,9 +44,6 @@ import freenet.support.api.Bucket;
 import freenet.support.io.ArrayBucket;
 
 import com.google.common.collect.Lists;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
 import org.junit.Test;
 
 /**
@@ -59,8 +57,14 @@ public class FcpInterfaceTest {
        private final FcpInterface fcpInterface = new FcpInterface(core);
        private final CapturingPluginReplySender pluginReplySender = new CapturingPluginReplySender();
 
+       public FcpInterfaceTest() {
+               fcpInterface.setActive(true);
+               fcpInterface.setFullAccessRequired(ALWAYS);
+       }
+
        @Test
        public void testThatAnInactiveFcpInterfaceReturnsAnErrorForDirectAccess() throws PluginNotFoundException {
+               fcpInterface.setActive(false);
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_DIRECT);
                verifyErrorWithCode("400");
@@ -68,6 +72,7 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnInactiveFcpInterfaceReturnsAnErrorForRestrictedFcpAccess() throws PluginNotFoundException {
+               fcpInterface.setActive(false);
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_RESTRICTED);
                verifyErrorWithCode("400");
@@ -75,6 +80,7 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnInactiveFcpInterfaceReturnsAnErrorForFullFcpAccess() throws PluginNotFoundException {
+               fcpInterface.setActive(false);
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_FULL);
                verifyErrorWithCode("400");
@@ -82,7 +88,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceReturnsAnErrorForAnUnknownMessage() {
-               fcpInterface.setActive(true);
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "Foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_DIRECT);
                verifyError();
@@ -90,7 +95,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceReturnsAnErrorForAMessageWithoutIdentifier() {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_DIRECT);
@@ -99,7 +103,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessAllowsDirectFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_DIRECT);
@@ -108,7 +111,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessForWritesAllowsDirectFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(WRITING);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
@@ -118,7 +120,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceNotRequiringFullAccessAllowsDirectFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(NO);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
@@ -128,7 +129,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessAllowsDirectFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_DIRECT);
@@ -137,7 +137,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessForWritesAllowsDirectFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(WRITING);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
@@ -147,7 +146,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceNotRequiringFullAccessAllowsDirectFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(NO);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
@@ -157,7 +155,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessAllowsFullFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_FULL);
@@ -166,7 +163,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessForWritesAllowsFullFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(WRITING);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
@@ -176,7 +172,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceNotRequiringFullAccessAllowsFullFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(NO);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
@@ -192,7 +187,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessAllowsFullFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_FULL);
@@ -201,7 +195,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessForWritesAllowsFullFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(WRITING);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
@@ -211,7 +204,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceNotRequiringFullAccessAllowsFullFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(NO);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
@@ -221,7 +213,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessDoesNotAllowRestrictedFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_RESTRICTED);
@@ -230,7 +221,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessForWritesAllowsRestrictedFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(WRITING);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
@@ -240,7 +230,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceNotRequiringFullAccessAllowsRestrictedFcpAccessForReadOnlyCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(NO);
                fcpInterface.addCommand("ReadOnlyPing", new ReadOnlyPing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadOnlyPing").put("Identifier", "foo").get();
@@ -250,7 +239,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessDoesNotAllowRestrictedFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_RESTRICTED);
@@ -259,7 +247,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceRequiringFullAccessForWritesDoesNotAllowRestrictedFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(WRITING);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
@@ -269,7 +256,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAnActiveFcpInterfaceNotRequiringFullAccessAllowsRestrictedFcpAccessForReadWriteCommand() {
-               fcpInterface.setActive(true);
                fcpInterface.setFullAccessRequired(NO);
                fcpInterface.addCommand("ReadWritePing", new ReadWritePing());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "ReadWritePing").put("Identifier", "foo").get();
@@ -279,7 +265,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAFaultyCommandResultsInAnError() {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("Faulty", new FaultyCommand());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "Faulty").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_FULL);
@@ -288,14 +273,12 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatAFaultyPluginReplySenderIsHandled() {
-               fcpInterface.setActive(true);
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "Faulty").put("Identifier", "foo").get();
                fcpInterface.handle(new FaultyPluginReplySender(), fieldSet, null, ACCESS_FCP_FULL);
        }
 
        @Test
        public void testThatACommandWithDataIsHandledCorrectly() throws IOException {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("CommandWithData", new CommandWithData());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "CommandWithData").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_FULL);
@@ -307,7 +290,6 @@ public class FcpInterfaceTest {
 
        @Test
        public void testThatACommandWithABucketIsHandledCorrectly() throws IOException {
-               fcpInterface.setActive(true);
                fcpInterface.addCommand("CommandWithBucket", new CommandWithBucket());
                SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Message", "CommandWithBucket").put("Identifier", "foo").get();
                fcpInterface.handle(pluginReplySender, fieldSet, null, ACCESS_FCP_FULL);
@@ -317,41 +299,6 @@ public class FcpInterfaceTest {
                assertThat(pluginReplySender.results.get(0).bucket.getInputStream(), delivers(new byte[] { 4, 5, 6 }));
        }
 
-       private Matcher<InputStream> delivers(final byte[] data) {
-               return new TypeSafeMatcher<InputStream>() {
-                       byte[] readData = new byte[data.length];
-
-                       @Override
-                       protected boolean matchesSafely(InputStream inputStream) {
-                               int offset = 0;
-                               try {
-                                       while (true) {
-                                               int r = inputStream.read();
-                                               if (r == -1) {
-                                                       return offset == data.length;
-                                               }
-                                               readData[offset] = (byte) r;
-                                               if (data[offset++] != r) {
-                                                       return false;
-                                               }
-                                       }
-                               } catch (IOException ioe1) {
-                                       return false;
-                               }
-                       }
-
-                       @Override
-                       public void describeTo(Description description) {
-                               description.appendValue(data);
-                       }
-
-                       @Override
-                       protected void describeMismatchSafely(InputStream item, Description mismatchDescription) {
-                               mismatchDescription.appendValue(readData);
-                       }
-               };
-       }
-
        private void verifyError() {
                assertThat(pluginReplySender.results, hasSize(1));
                assertThat(pluginReplySender.results.get(0).fieldSet, notNullValue());