summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'test/com/isode/stroke/streamstack/XMPPLayerTest.java')
-rw-r--r--test/com/isode/stroke/streamstack/XMPPLayerTest.java194
1 files changed, 194 insertions, 0 deletions
diff --git a/test/com/isode/stroke/streamstack/XMPPLayerTest.java b/test/com/isode/stroke/streamstack/XMPPLayerTest.java
new file mode 100644
index 0000000..1043291
--- /dev/null
+++ b/test/com/isode/stroke/streamstack/XMPPLayerTest.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (c) 2010-2014 Isode Limited.
+ * All rights reserved.
+ * See the COPYING file for more information.
+ */
+/*
+ * Copyright (c) 2015 Tarun Gupta.
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+package com.isode.stroke.streamstack;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+import org.junit.Before;
+import com.isode.stroke.base.SafeByteArray;
+import com.isode.stroke.streamstack.XMPPLayer;
+import com.isode.stroke.streamstack.StreamStack;
+import com.isode.stroke.streamstack.LowLayer;
+import com.isode.stroke.streamstack.XMPPLayer;
+import com.isode.stroke.streamstack.StreamLayer;
+import com.isode.stroke.parser.PlatformXMLParserFactory;
+import com.isode.stroke.parser.payloadparsers.FullPayloadParserFactoryCollection;
+import com.isode.stroke.serializer.payloadserializers.FullPayloadSerializerCollection;
+import com.isode.stroke.parser.PayloadParserFactoryCollection;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.elements.ProtocolHeader;
+import com.isode.stroke.elements.Element;
+import com.isode.stroke.elements.StreamType;
+import com.isode.stroke.elements.Presence;
+import com.isode.stroke.signals.Slot1;
+import com.isode.stroke.signals.Slot;
+import java.util.Vector;
+
+public class XMPPLayerTest {
+
+ private class XMPPLayerExposed extends XMPPLayer {
+
+ public XMPPLayerExposed(PayloadParserFactoryCollection payloadParserFactories, PayloadSerializerCollection payloadSerializers, StreamType streamType) {
+ super(payloadParserFactories, payloadSerializers, streamType);
+ }
+
+ //using XMPPLayer::handleDataRead;
+ //using HighLayer::setChildLayer;
+ };
+
+ /* Multiple-inheritance workarounds */
+
+ private StreamLayer fakeStreamLayer_ = new StreamLayer() {
+ public void writeData(SafeByteArray data) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void handleDataRead(SafeByteArray data) {
+ writeDataToParentLayer(data);
+ }
+ };
+
+ private class DummyLowLayer implements LowLayer {
+
+ public String writtenData = "";
+
+ public DummyLowLayer() {
+
+ }
+
+ public void writeData(final SafeByteArray data) {
+ writtenData += data.toString();
+ }
+
+ public HighLayer getParentLayer() {
+ return fakeStreamLayer_.getParentLayer();
+ }
+
+ public void setParentLayer(HighLayer highLayer) {
+ fakeStreamLayer_.setParentLayer(highLayer);
+ }
+
+ public void writeDataToParentLayer(SafeByteArray data) {
+ fakeStreamLayer_.writeDataToParentLayer(data);
+ }
+ };
+
+ private FullPayloadParserFactoryCollection parserFactories_ = new FullPayloadParserFactoryCollection();
+ private FullPayloadSerializerCollection serializers_ = new FullPayloadSerializerCollection();
+ private DummyLowLayer lowLayer_;
+ private XMPPLayerExposed testling_;
+ private PlatformXMLParserFactory xmlParserFactory_;
+ private int elementsReceived_;
+ private int errorReceived_;
+
+ @Before
+ public void setUp() {
+ lowLayer_ = new DummyLowLayer();
+ testling_ = new XMPPLayerExposed(parserFactories_, serializers_, StreamType.ClientStreamType);
+ testling_.setChildLayer(lowLayer_);
+ elementsReceived_ = 0;
+ errorReceived_ = 0;
+ }
+
+ public void handleElement(Element element) {
+ ++elementsReceived_;
+ }
+
+ public void handleElementAndReset(Element element) {
+ ++elementsReceived_;
+ testling_.resetParser();
+ }
+
+ public void handleError() {
+ ++errorReceived_;
+ }
+
+ @Test
+ public void testParseData_Error() {
+ testling_.onError.connect(new Slot() {
+ @Override
+ public void call() {
+ handleError();
+ }
+ });
+
+ testling_.handleDataRead(new SafeByteArray("<iq>"));
+
+ assertEquals(1, errorReceived_);
+ }
+
+ @Test
+ public void testResetParser() {
+ testling_.onElement.connect(new Slot1<Element>() {
+ @Override
+ public void call(Element e1) {
+ handleElement(e1);
+ }
+ });
+ testling_.onError.connect(new Slot() {
+ @Override
+ public void call() {
+ handleError();
+ }
+ });
+
+ testling_.handleDataRead(new SafeByteArray("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" >"));
+ testling_.resetParser();
+ testling_.handleDataRead(new SafeByteArray("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" >"));
+ testling_.handleDataRead(new SafeByteArray("<presence/>"));
+
+ assertEquals(1, elementsReceived_);
+ assertEquals(0, errorReceived_);
+ }
+
+ @Test
+ public void testResetParser_FromSlot() {
+ testling_.onElement.connect(new Slot1<Element>() {
+ @Override
+ public void call(Element e1) {
+ handleElementAndReset(e1);
+ }
+ });
+ testling_.handleDataRead(new SafeByteArray("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" ><presence/>"));
+ testling_.handleDataRead(new SafeByteArray("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" ><presence/>"));
+
+ assertEquals(2, elementsReceived_);
+ assertEquals(0, errorReceived_);
+ }
+
+ @Test
+ public void testWriteHeader() {
+ ProtocolHeader header = new ProtocolHeader();
+ header.setTo("example.com");
+ testling_.writeHeader(header);
+
+ assertEquals("<?xml version=\"1.0\"?><stream:stream xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" to=\"example.com\" version=\"1.0\">", lowLayer_.writtenData);
+ }
+
+ @Test
+ public void testWriteElement() {
+ testling_.writeElement(new Presence());
+
+ assertEquals("<presence/>", lowLayer_.writtenData);
+ }
+
+ @Test
+ public void testWriteFooter() {
+ testling_.writeFooter();
+
+ assertEquals("</stream:stream>", lowLayer_.writtenData);
+ }
+} \ No newline at end of file