summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarun Gupta <tarun1995gupta@gmail.com>2015-07-17 02:22:32 (GMT)
committerNick Hudson <nick.hudson@isode.com>2015-07-28 13:14:20 (GMT)
commit673655830b0325d964e67fa835ea83f485e9beeb (patch)
tree27e4f8bd20dd9011207641a83212ced393fbada2 /test/com/isode/stroke/streamstack/StreamStackTest.java
parent6f84f6a65b8b80e2f599dff76da0cd13fbead611 (diff)
downloadstroke-673655830b0325d964e67fa835ea83f485e9beeb.zip
stroke-673655830b0325d964e67fa835ea83f485e9beeb.tar.bz2
Complete StreamStack and add tests.
TLSLayer could not be updated because it requires TLS to be ported first. Updates other classes, only for having compatibility with SafeByteArray because of updates in Stream Stack. License: This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details. Test-Information: Tests added for StreamStack and XMPPLayer, which passes. Change-Id: I8707fc1f16d622d2a90f6f39f671b7e7c46aa170
Diffstat (limited to 'test/com/isode/stroke/streamstack/StreamStackTest.java')
-rw-r--r--test/com/isode/stroke/streamstack/StreamStackTest.java219
1 files changed, 219 insertions, 0 deletions
diff --git a/test/com/isode/stroke/streamstack/StreamStackTest.java b/test/com/isode/stroke/streamstack/StreamStackTest.java
new file mode 100644
index 0000000..b868a59
--- /dev/null
+++ b/test/com/isode/stroke/streamstack/StreamStackTest.java
@@ -0,0 +1,219 @@
+/*
+ * 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.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.elements.Element;
+import com.isode.stroke.elements.StreamType;
+import com.isode.stroke.signals.Slot1;
+import java.util.Vector;
+
+public class StreamStackTest {
+
+ private class MyStreamLayer extends StreamLayer {
+
+ public MyStreamLayer(final String prepend) {
+ this.prepend_ = prepend;
+ }
+
+ public void writeData(final SafeByteArray data) {
+ writeDataToChildLayer(new SafeByteArray(prepend_).append(data));
+ }
+
+ public void handleDataRead(final SafeByteArray data) {
+ writeDataToParentLayer(new SafeByteArray(prepend_).append(data));
+ }
+
+ private String prepend_ = "";
+ };
+
+ /* 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 TestLowLayer implements LowLayer {
+
+ public Vector<SafeByteArray> data_ = new Vector<SafeByteArray>();
+
+ public TestLowLayer() {
+
+ }
+
+ public void writeData(final SafeByteArray data) {
+ data_.add(data);
+ }
+
+ public void onDataRead(SafeByteArray data) {
+ writeDataToParentLayer(data);
+ }
+
+ 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 TestLowLayer physicalStream_;
+ private XMPPLayer xmppStream_;
+ private int elementsReceived_;
+ private int dataWriteReceived_;
+
+ @Before
+ public void setUp() {
+ physicalStream_ = new TestLowLayer();
+ xmppStream_ = new XMPPLayer(parserFactories_, serializers_, StreamType.ClientStreamType);
+ elementsReceived_ = 0;
+ dataWriteReceived_ = 0;
+ }
+
+ public void handleElement(Element element) {
+ ++elementsReceived_;
+ }
+
+ public void handleWriteData(final SafeByteArray SafeByteArray) {
+ ++dataWriteReceived_;
+ }
+
+ @Test
+ public void testWriteData_NoIntermediateStreamStack() {
+ StreamStack testling = new StreamStack(xmppStream_, physicalStream_);
+
+ xmppStream_.writeData("foo");
+
+ assertEquals(1, physicalStream_.data_.size());
+ assertEquals(new SafeByteArray("foo"), physicalStream_.data_.get(0));
+ }
+
+ @Test
+ public void testWriteData_OneIntermediateStream() {
+ StreamStack testling = new StreamStack(xmppStream_, physicalStream_);
+ MyStreamLayer xStream = new MyStreamLayer("X");
+ testling.addLayer(xStream);
+
+ xmppStream_.writeData("foo");
+
+ assertEquals(1, physicalStream_.data_.size());
+ assertEquals(new SafeByteArray("Xfoo"), physicalStream_.data_.get(0));
+ }
+
+ @Test
+ public void testWriteData_TwoIntermediateStreamStack() {
+ StreamStack testling = new StreamStack(xmppStream_, physicalStream_);
+ MyStreamLayer xStream = new MyStreamLayer("X");
+ MyStreamLayer yStream = new MyStreamLayer("Y");
+ testling.addLayer(xStream);
+ testling.addLayer(yStream);
+
+ xmppStream_.writeData("foo");
+
+ assertEquals(1, physicalStream_.data_.size());
+ assertEquals(new SafeByteArray("XYfoo"), physicalStream_.data_.get(0));
+ }
+
+ @Test
+ public void testReadData_NoIntermediateStreamStack() {
+ StreamStack testling = new StreamStack(xmppStream_, physicalStream_);
+ xmppStream_.onElement.connect(new Slot1<Element>() {
+ @Override
+ public void call(Element e1) {
+ handleElement(e1);
+ }
+ });
+ physicalStream_.onDataRead(new SafeByteArray("<stream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>"));
+
+ assertEquals(1, elementsReceived_);
+ }
+
+ @Test
+ public void testReadData_OneIntermediateStream() {
+ StreamStack testling = new StreamStack(xmppStream_, physicalStream_);
+ xmppStream_.onElement.connect(new Slot1<Element>() {
+ @Override
+ public void call(Element e1) {
+ handleElement(e1);
+ }
+ });
+ MyStreamLayer xStream = new MyStreamLayer("<");
+ testling.addLayer(xStream);
+
+ physicalStream_.onDataRead(new SafeByteArray("stream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>"));
+
+ assertEquals(1, elementsReceived_);
+ }
+
+ @Test
+ public void testReadData_TwoIntermediateStreamStack() {
+ StreamStack testling = new StreamStack(xmppStream_, physicalStream_);
+ xmppStream_.onElement.connect(new Slot1<Element>() {
+ @Override
+ public void call(Element e1) {
+ handleElement(e1);
+ }
+ });
+ MyStreamLayer xStream = new MyStreamLayer("s");
+ MyStreamLayer yStream = new MyStreamLayer("<");
+ testling.addLayer(xStream);
+ testling.addLayer(yStream);
+
+ physicalStream_.onDataRead(new SafeByteArray("tream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>"));
+
+ assertEquals(1, elementsReceived_);
+ }
+
+ @Test
+ public void testAddLayer_ExistingOnWriteDataSlot() {
+ StreamStack testling = new StreamStack(xmppStream_, physicalStream_);
+ xmppStream_.onWriteData.connect(new Slot1<SafeByteArray>() {
+ @Override
+ public void call(SafeByteArray b1) {
+ handleWriteData(b1);
+ }
+ });
+ MyStreamLayer xStream = new MyStreamLayer("X");
+ testling.addLayer(xStream);
+
+ xmppStream_.writeData("foo");
+
+ assertEquals(1, dataWriteReceived_);
+ }
+} \ No newline at end of file