diff options
author | Vitaly Takmazov | 2017-10-04 15:31:44 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2017-10-09 14:34:51 +0300 |
commit | 51bfc341be1975b7a11e0b3a59cfbb4710e78446 (patch) | |
tree | 548bef919082406c510a7b653c2a2ac4e2aa4b2e /juick-xmpp-wip/src/test | |
parent | 2996fb8279645b1329b38c5c7b6d81ba3c10612e (diff) |
juick-xmpp-wip: router component
Diffstat (limited to 'juick-xmpp-wip/src/test')
-rw-r--r-- | juick-xmpp-wip/src/test/java/com/juick/xmpp/XMPPTests.java | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/juick-xmpp-wip/src/test/java/com/juick/xmpp/XMPPTests.java b/juick-xmpp-wip/src/test/java/com/juick/xmpp/XMPPTests.java new file mode 100644 index 00000000..d154128c --- /dev/null +++ b/juick-xmpp-wip/src/test/java/com/juick/xmpp/XMPPTests.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2008-2017, Juick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package com.juick.xmpp; + +import com.gargoylesoftware.htmlunit.Page; +import com.gargoylesoftware.htmlunit.WebClient; +import com.juick.components.XMPPConnection; +import com.juick.components.configuration.XmppAppConfiguration; +import com.juick.components.XMPPRouter; +import com.juick.configuration.MockDataConfiguration; +import com.juick.server.configuration.BaseWebConfiguration; +import com.juick.service.ShowQueriesService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder; +import org.springframework.web.context.WebApplicationContext; +import rocks.xmpp.addr.Jid; +import rocks.xmpp.core.XmppException; +import rocks.xmpp.core.session.ConnectionEvent; +import rocks.xmpp.core.session.Extension; +import rocks.xmpp.core.session.XmppSessionConfiguration; +import rocks.xmpp.core.session.debug.LogbackDebugger; +import rocks.xmpp.core.stanza.model.Message; +import rocks.xmpp.extensions.component.accept.ExternalComponent; + +import javax.inject.Inject; +import java.io.IOException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration +public class XMPPTests { + @Configuration + @Import(value = { + BaseWebConfiguration.class, XmppAppConfiguration.class, MockDataConfiguration.class + }) + static class Config { + @Bean + public ShowQueriesService showQueriesService() { + return Mockito.mock(ShowQueriesService.class); + } + } + + @Inject + private WebApplicationContext wac; + + private WebClient webClient; + + @Before + public void setup() { + webClient = MockMvcWebClientBuilder.webAppContextSetup(this.wac).build(); + webClient.getOptions().setJavaScriptEnabled(false); + } + @Test + public void statusPageIsUp() throws IOException { + Page statusPage = webClient.getPage("http://localhost:8080/status"); + assertThat(statusPage.getWebResponse().getStatusCode(), equalTo(200)); + } + @Inject + XMPPRouter router; + @Inject + XMPPConnection component; + @Inject + ExecutorService service; + @Test + public void routerHandshake() throws XmppException, InterruptedException { + XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() + .extensions(Extension.of(com.juick.Message.class)) + .debugger(LogbackDebugger.class) + .build(); + ExternalComponent routerClient = ExternalComponent.create("test.localhost", + "secret", configuration, "localhost", 5347); + CountDownLatch lock = new CountDownLatch(1); + routerClient.addConnectionListener(connectionEvent -> { + if (connectionEvent.equals(ConnectionEvent.Type.RECONNECTION_SUCCEEDED)) { + lock.countDown(); + } + }); + service.submit(() -> { + try { + Thread.sleep(3000); + routerClient.connect(); + } catch (XmppException | InterruptedException e) { + e.printStackTrace(); + } + lock.countDown(); + }); + lock.await(); + CountDownLatch lock2 = new CountDownLatch(2); + component.sendStanza(new Message(Jid.of("yoyo@test.localhost"), Message.Type.CHAT, "test" )); + component.sendStanza(new Message(Jid.of("yoyo@test.localhost"), Message.Type.CHAT, "test" )); + routerClient.addInboundMessageListener(messageEvent -> { + assertThat(messageEvent.getMessage().getBody(), equalTo("test")); + lock2.countDown(); + }); + lock2.await(); + } +} |