2 * Sone - PluginConnectorTest.java - Copyright © 2013 David Roden
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 package net.pterodactylus.sone.freenet.plugin;
20 import static org.mockito.Matchers.argThat;
21 import static org.mockito.Matchers.eq;
22 import static org.mockito.Mockito.mock;
23 import static org.mockito.Mockito.verify;
24 import static org.mockito.Mockito.when;
26 import net.pterodactylus.sone.Matchers;
27 import net.pterodactylus.sone.freenet.SimpleFieldSetBuilder;
28 import net.pterodactylus.sone.freenet.StringBucket;
29 import net.pterodactylus.sone.freenet.plugin.event.ReceivedReplyEvent;
31 import freenet.pluginmanager.PluginNotFoundException;
32 import freenet.pluginmanager.PluginRespirator;
33 import freenet.pluginmanager.PluginTalker;
34 import freenet.support.SimpleFieldSet;
35 import freenet.support.api.Bucket;
37 import com.google.common.eventbus.EventBus;
38 import org.hamcrest.Description;
39 import org.hamcrest.Matcher;
40 import org.hamcrest.TypeSafeMatcher;
41 import org.junit.Test;
44 * Unit test for {@link PluginConnector}.
46 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
48 public class PluginConnectorTest {
50 private static final String PLUGIN_NAME = "org.example.plugin";
51 private static final String IDENTIFIER = "Some-Identifier-17";
53 private final EventBus eventBus = mock(EventBus.class);
54 private final PluginRespirator pluginRespirator = mock(PluginRespirator.class);
55 private final PluginConnector pluginConnector = new PluginConnector(eventBus, pluginRespirator);
58 public void canSendRequest() throws PluginException, PluginNotFoundException {
59 SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Length", "35").get();
60 Bucket data = new StringBucket("Test");
61 PluginTalker pluginTalker = mock(PluginTalker.class);
62 when(pluginRespirator.getPluginTalker(pluginConnector, PLUGIN_NAME, IDENTIFIER)).thenReturn(pluginTalker);
63 pluginConnector.sendRequest(PLUGIN_NAME, IDENTIFIER, fieldSet, data);
64 verify(pluginTalker).send(argThat(Matchers.matches(fieldSet)), eq(data));
67 @Test(expected = PluginException.class)
68 public void unknownPluginNameCausesAnError() throws PluginNotFoundException, PluginException {
69 when(pluginRespirator.getPluginTalker(pluginConnector, PLUGIN_NAME, IDENTIFIER)).thenThrow(PluginNotFoundException.class);
70 pluginConnector.sendRequest(PLUGIN_NAME, IDENTIFIER, null, null);
74 public void replyIsPostedToEventBus() {
75 SimpleFieldSet fieldSet = new SimpleFieldSetBuilder().put("Length", "35").get();
76 Bucket data = new StringBucket("Test");
77 pluginConnector.onReply(PLUGIN_NAME, IDENTIFIER, fieldSet, data);
78 verify(eventBus).post(argThat(matches(pluginConnector, PLUGIN_NAME, IDENTIFIER, fieldSet, data)));
81 private static Matcher<ReceivedReplyEvent> matches(final PluginConnector pluginConnector, final String pluginName, final String identitier, final SimpleFieldSet fieldSet, final Bucket data) {
82 return new TypeSafeMatcher<ReceivedReplyEvent>() {
84 protected boolean matchesSafely(ReceivedReplyEvent receivedReplyEvent) {
85 if (receivedReplyEvent.pluginConnector() != pluginConnector) {
88 if (!receivedReplyEvent.pluginName().equals(pluginName)) {
91 if (!receivedReplyEvent.identifier().equals(identitier)) {
94 if (!Matchers.matches(fieldSet).matches(receivedReplyEvent.fieldSet())) {
97 if (data != receivedReplyEvent.data()) {
104 public void describeTo(Description description) {