Java tutorial
/* * Copyright 2018-present Open Networking Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.xmpp.core.ctl.handlers; import com.google.common.collect.Lists; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import org.apache.commons.io.Charsets; import org.junit.Test; import org.onosproject.xmpp.core.ctl.ChannelAdapter; import org.onosproject.xmpp.core.ctl.ChannelHandlerContextAdapter; import javax.xml.namespace.QName; import javax.xml.stream.events.EndElement; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import java.util.List; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; /** * Test class for XmlStreamDecoder. */ public class XmlStreamDecoderTest { private String streamOpenMsg = String.format("<stream:stream to='%s' %s %s %s %s %s>", "xmpp.onosproject.org", "from='test@xmpp.org'", "xmlns:stream='http://etherx.jabber.org/streams'", "xmlns='jabber:client'", "xml:lang='en'", "version='1.0'"); private String streamCloseMsg = "</stream:stream>"; private String subscribeMsg = "<iq type='set'" + " from='test@xmpp.org'" + " to='xmpp.onosproject.org'" + " id='sub1'>" + " <pubsub xmlns='http://jabber.org/protocol/pubsub'>" + " <subscribe node='test'/>" + " </pubsub>" + "</iq>"; public class ActiveChannelHandlerContextAdapter extends ChannelHandlerContextAdapter { @Override public Channel channel() { return new ChannelAdapter() { @Override public boolean isActive() { return true; } }; } } @Test public void testDecodeNoChannel() throws Exception { XmlStreamDecoder decoder = new XmlStreamDecoder(); List<Object> list = Lists.newArrayList(); decoder.decode(new ActiveChannelHandlerContextAdapter(), Unpooled.buffer(), list); assertThat(list.size(), is(0)); } @Test public void testDecodeStreamOpen() throws Exception { XmlStreamDecoder decoder = new XmlStreamDecoder(); ByteBuf buffer = Unpooled.buffer(); buffer.writeBytes(streamOpenMsg.getBytes(Charsets.UTF_8)); List<Object> list = Lists.newArrayList(); decoder.decode(new ChannelHandlerContextAdapter(), buffer, list); list.forEach(object -> { assertThat(object, is(instanceOf(XMLEvent.class))); }); assertThat(list.size(), is(2)); assertThat(((XMLEvent) list.get(0)).isStartDocument(), is(true)); ((XMLEvent) list.get(0)).isStartElement(); } @Test public void testDecodeStreamClose() throws Exception { XmlStreamDecoder decoder = new XmlStreamDecoder(); // open stream ByteBuf buffer1 = Unpooled.buffer(); buffer1.writeBytes(streamOpenMsg.getBytes(Charsets.UTF_8)); List<Object> list1 = Lists.newArrayList(); decoder.decode(new ChannelHandlerContextAdapter(), buffer1, list1); // close stream ByteBuf buffer2 = Unpooled.buffer(); buffer2.writeBytes(streamCloseMsg.getBytes(Charsets.UTF_8)); List<Object> list2 = Lists.newArrayList(); decoder.decode(new ChannelHandlerContextAdapter(), buffer2, list2); list2.forEach(object -> { assertThat(object, is(instanceOf(XMLEvent.class))); }); assertThat(list2.size(), is(1)); assertThat(((XMLEvent) list2.get(0)).isEndElement(), is(true)); } @Test public void testDecodeXmppStanza() throws Exception { XmlStreamDecoder decoder = new XmlStreamDecoder(); ByteBuf buffer = Unpooled.buffer(); buffer.writeBytes(subscribeMsg.getBytes(Charsets.UTF_8)); List<Object> list = Lists.newArrayList(); decoder.decode(new ChannelHandlerContextAdapter(), buffer, list); assertThat(list.size(), is(10)); list.forEach(object -> { assertThat(object, is(instanceOf(XMLEvent.class))); }); assertThat(((XMLEvent) list.get(0)).isStartDocument(), is(true)); XMLEvent secondEvent = (XMLEvent) list.get(1); assertThat(secondEvent.isStartElement(), is(true)); StartElement secondEventAsStartElement = (StartElement) secondEvent; assertThat(secondEventAsStartElement.getName().getLocalPart(), is("iq")); assertThat(Lists.newArrayList(secondEventAsStartElement.getAttributes()).size(), is(4)); assertThat(secondEventAsStartElement.getAttributeByName(QName.valueOf("type")).getValue(), is("set")); assertThat(secondEventAsStartElement.getAttributeByName(QName.valueOf("from")).getValue(), is("test@xmpp.org")); assertThat(secondEventAsStartElement.getAttributeByName(QName.valueOf("to")).getValue(), is("xmpp.onosproject.org")); assertThat(secondEventAsStartElement.getAttributeByName(QName.valueOf("id")).getValue(), is("sub1")); XMLEvent fourthEvent = (XMLEvent) list.get(3); assertThat(fourthEvent.isStartElement(), is(true)); StartElement fourthEventAsStartElement = (StartElement) fourthEvent; assertThat(fourthEventAsStartElement.getName().getLocalPart(), is("pubsub")); assertThat(fourthEventAsStartElement.getNamespaceURI(""), is("http://jabber.org/protocol/pubsub")); XMLEvent fifthEvent = (XMLEvent) list.get(5); assertThat(fifthEvent.isStartElement(), is(true)); StartElement fifthEventAsStartElement = (StartElement) fifthEvent; assertThat(fifthEventAsStartElement.getName().getLocalPart(), is("subscribe")); assertThat(fifthEventAsStartElement.getAttributeByName(QName.valueOf("node")).getValue(), is("test")); XMLEvent sixthEvent = (XMLEvent) list.get(6); assertThat(sixthEvent.isEndElement(), is(true)); EndElement sixthEventAsEndElement = (EndElement) sixthEvent; assertThat(sixthEventAsEndElement.getName().getLocalPart(), is("subscribe")); XMLEvent seventhEvent = (XMLEvent) list.get(8); assertThat(seventhEvent.isEndElement(), is(true)); EndElement seventhEventAsEndElement = (EndElement) seventhEvent; assertThat(seventhEventAsEndElement.getName().getLocalPart(), is("pubsub")); XMLEvent eighthEvent = (XMLEvent) list.get(9); assertThat(eighthEvent.isEndElement(), is(true)); EndElement eighthEventAsEndElement = (EndElement) eighthEvent; assertThat(eighthEventAsEndElement.getName().getLocalPart(), is("iq")); } }