X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fserialization%2Ffactories%2FHelloInputMessageFactoryTest.java;h=c383532467b166604323a8b20a5d5da3c99d04da;hb=e149a02d7ccbdc4ea67863bbfc92fc141e89d2dd;hp=aa2712b67cc753fb06a82e7ff2ede02c724ee105;hpb=d716cd3ab5bf247ef9648603321cead25b240b1e;p=openflowjava.git diff --git a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/HelloInputMessageFactoryTest.java b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/HelloInputMessageFactoryTest.java index aa2712b6..c3835324 100644 --- a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/HelloInputMessageFactoryTest.java +++ b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/HelloInputMessageFactoryTest.java @@ -1,165 +1,186 @@ -/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */ -package org.opendaylight.openflowjava.protocol.impl.serialization.factories; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.UnpooledByteBufAllocator; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Assert; -import org.junit.Test; -import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest; -import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper; -import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils; -import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloElementType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.ElementsBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author michal.polkorab - * - */ -public class HelloInputMessageFactoryTest { - - private static final Logger LOGGER = LoggerFactory.getLogger(HelloInputMessageFactoryTest.class); - - /** - * Testing of {@link HelloInputMessageFactory} for correct translation from POJO - * @throws Exception - */ - @Test - public void testWithoutElementsSet() throws Exception { - HelloInputBuilder hib = new HelloInputBuilder(); - BufferHelper.setupHeader(hib, EncodeConstants.OF13_VERSION_ID); - HelloInput hi = hib.build(); - - ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); - HelloInputMessageFactory himf = HelloInputMessageFactory.getInstance(); - himf.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, hi); - - BufferHelper.checkHeaderV13(out, himf.getMessageType(), himf.computeLength(hi)); - } - - /** - * Testing of {@link HelloInputMessageFactory} for correct translation from POJO - * @throws Exception - */ - @Test - public void testWith4BitVersionBitmap() throws Exception { - int lengthOfBitmap = 4; - HelloInputBuilder builder = new HelloInputBuilder(); - BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID); - List expectedElement = createElement(lengthOfBitmap); - builder.setElements(expectedElement); - HelloInput message = builder.build(); - - ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); - HelloInputMessageFactory factory = HelloInputMessageFactory.getInstance(); - factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message); - LOGGER.debug("bytebuf: " + ByteBufUtils.byteBufToHexString(out)); - - BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message)); - Elements element = readElement(out).get(0); - Assert.assertEquals("Wrong element type", expectedElement.get(0).getType(), element.getType()); - Elements comparation = createComparationElement(lengthOfBitmap).get(0); - Assert.assertArrayEquals("Wrong element bitmap", comparation.getVersionBitmap().toArray(), element.getVersionBitmap().toArray()); - } - - /** - * Testing of {@link HelloInputMessageFactory} for correct translation from POJO - * @throws Exception - */ - @Test - public void testWith64BitVersionBitmap() throws Exception { - int lengthOfBitmap = 64; - HelloInputBuilder builder = new HelloInputBuilder(); - BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID); - List expectedElement = createElement(lengthOfBitmap); - builder.setElements(expectedElement); - HelloInput message = builder.build(); - - ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); - HelloInputMessageFactory factory = HelloInputMessageFactory.getInstance(); - factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message); - LOGGER.debug("bytebuf: " + ByteBufUtils.byteBufToHexString(out)); - - BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message)); - Elements element = readElement(out).get(0); - Assert.assertEquals("Wrong element type", expectedElement.get(0).getType(), element.getType()); - Elements comparation = createComparationElement(lengthOfBitmap).get(0); - Assert.assertArrayEquals("Wrong element bitmap", comparation.getVersionBitmap().toArray(), element.getVersionBitmap().toArray()); - } - - private static List createElement(int lengthOfBitmap) { - ElementsBuilder elementsBuilder = new ElementsBuilder(); - List elementsList = new ArrayList<>(); - List booleanList = new ArrayList<>(); - for (int i = 0; i < lengthOfBitmap; i++) { - booleanList.add(true); - } - elementsBuilder.setType(HelloElementType.forValue(1)); - elementsBuilder.setVersionBitmap(booleanList); - elementsList.add(elementsBuilder.build()); - return elementsList; - } - - private static List createComparationElement(int lengthOfBitmap) { - ElementsBuilder elementsBuilder = new ElementsBuilder(); - List elementsList = new ArrayList<>(); - List booleanList = new ArrayList<>(); - for (int i = 0; i < lengthOfBitmap; i++) { - booleanList.add(true); - } - if ((lengthOfBitmap % Integer.SIZE) != 0) { - for (int i = 0; i < (Integer.SIZE - (lengthOfBitmap % Integer.SIZE)); i++) { - booleanList.add(false); - } - } - LOGGER.debug("boolsize " + booleanList.size()); - elementsBuilder.setType(HelloElementType.forValue(1)); - elementsBuilder.setVersionBitmap(booleanList); - elementsList.add(elementsBuilder.build()); - return elementsList; - } - - private static List readElement(ByteBuf input) { - List elementsList = new ArrayList<>(); - while (input.readableBytes() > 0) { - ElementsBuilder elementsBuilder = new ElementsBuilder(); - int type = input.readUnsignedShort(); - int elementLength = input.readUnsignedShort(); - if (type == HelloElementType.VERSIONBITMAP.getIntValue()) { - elementsBuilder.setType(HelloElementType.forValue(type)); - int[] versionBitmap = new int[(elementLength - HelloInputMessageFactory.HELLO_ELEMENT_HEADER_SIZE) / 4]; - for (int i = 0; i < versionBitmap.length; i++) { - versionBitmap[i] = (int) input.readUnsignedInt(); - } - elementsBuilder.setVersionBitmap(readVersionBitmap(versionBitmap)); - int paddingRemainder = elementLength % EncodeConstants.PADDING; - if (paddingRemainder != 0) { - input.readBytes(EncodeConstants.PADDING - paddingRemainder); - } - } - elementsList.add(elementsBuilder.build()); - } - return elementsList; - } - - private static List readVersionBitmap(int[] input){ - List versionBitmapList = new ArrayList<>(); - for (int i = 0; i < input.length; i++) { - int mask = input[i]; - for (int j = 0; j < Integer.SIZE; j++) { - versionBitmapList.add((mask & (1< helloFactory; + + /** + * Initializes serializer registry and stores correct factory in field + */ + @Before + public void startUp() { + registry = new SerializerRegistryImpl(); + registry.init(); + helloFactory = registry.getSerializer( + new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, HelloInput.class)); + } + + /** + * Testing of {@link HelloInputMessageFactory} for correct translation from POJO + * @throws Exception + */ + @Test + public void testWithoutElementsSet() throws Exception { + HelloInputBuilder hib = new HelloInputBuilder(); + BufferHelper.setupHeader(hib, EncodeConstants.OF13_VERSION_ID); + HelloInput hi = hib.build(); + + ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); + helloFactory.serialize(hi, out); + + BufferHelper.checkHeaderV13(out,(byte) 0, EncodeConstants.OFHEADER_SIZE); + } + + /** + * Testing of {@link HelloInputMessageFactory} for correct translation from POJO + * @throws Exception + */ + @Test + public void testWith4BitVersionBitmap() throws Exception { + int lengthOfBitmap = 4; + HelloInputBuilder builder = new HelloInputBuilder(); + BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID); + List expectedElement = createElement(lengthOfBitmap); + builder.setElements(expectedElement); + HelloInput message = builder.build(); + + ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); + helloFactory.serialize(message, out); + LOGGER.debug("bytebuf: " + ByteBufUtils.byteBufToHexString(out)); + + BufferHelper.checkHeaderV13(out, (byte) 0, 16); + Elements element = readElement(out).get(0); + Assert.assertEquals("Wrong element type", expectedElement.get(0).getType(), element.getType()); + Elements comparation = createComparationElement(lengthOfBitmap).get(0); + Assert.assertArrayEquals("Wrong element bitmap", comparation.getVersionBitmap().toArray(), element.getVersionBitmap().toArray()); + } + + /** + * Testing of {@link HelloInputMessageFactory} for correct translation from POJO + * @throws Exception + */ + @Test + public void testWith64BitVersionBitmap() throws Exception { + int lengthOfBitmap = 64; + HelloInputBuilder builder = new HelloInputBuilder(); + BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID); + List expectedElement = createElement(lengthOfBitmap); + builder.setElements(expectedElement); + HelloInput message = builder.build(); + + ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); + helloFactory.serialize(message, out); + LOGGER.debug("bytebuf: " + ByteBufUtils.byteBufToHexString(out)); + + BufferHelper.checkHeaderV13(out, (byte) 0, 24); + Elements element = readElement(out).get(0); + Assert.assertEquals("Wrong element type", expectedElement.get(0).getType(), element.getType()); + Elements comparation = createComparationElement(lengthOfBitmap).get(0); + Assert.assertArrayEquals("Wrong element bitmap", comparation.getVersionBitmap().toArray(), element.getVersionBitmap().toArray()); + } + + private static List createElement(int lengthOfBitmap) { + ElementsBuilder elementsBuilder = new ElementsBuilder(); + List elementsList = new ArrayList<>(); + List booleanList = new ArrayList<>(); + for (int i = 0; i < lengthOfBitmap; i++) { + booleanList.add(true); + } + elementsBuilder.setType(HelloElementType.forValue(1)); + elementsBuilder.setVersionBitmap(booleanList); + elementsList.add(elementsBuilder.build()); + return elementsList; + } + + private static List createComparationElement(int lengthOfBitmap) { + ElementsBuilder elementsBuilder = new ElementsBuilder(); + List elementsList = new ArrayList<>(); + List booleanList = new ArrayList<>(); + for (int i = 0; i < lengthOfBitmap; i++) { + booleanList.add(true); + } + if ((lengthOfBitmap % Integer.SIZE) != 0) { + for (int i = 0; i < (Integer.SIZE - (lengthOfBitmap % Integer.SIZE)); i++) { + booleanList.add(false); + } + } + LOGGER.debug("boolsize " + booleanList.size()); + elementsBuilder.setType(HelloElementType.forValue(1)); + elementsBuilder.setVersionBitmap(booleanList); + elementsList.add(elementsBuilder.build()); + return elementsList; + } + + private static List readElement(ByteBuf input) { + List elementsList = new ArrayList<>(); + while (input.readableBytes() > 0) { + ElementsBuilder elementsBuilder = new ElementsBuilder(); + int type = input.readUnsignedShort(); + int elementLength = input.readUnsignedShort(); + if (type == HelloElementType.VERSIONBITMAP.getIntValue()) { + elementsBuilder.setType(HelloElementType.forValue(type)); + int[] versionBitmap = new int[(elementLength - 4) / 4]; + for (int i = 0; i < versionBitmap.length; i++) { + versionBitmap[i] = (int) input.readUnsignedInt(); + } + elementsBuilder.setVersionBitmap(readVersionBitmap(versionBitmap)); + int paddingRemainder = elementLength % EncodeConstants.PADDING; + if (paddingRemainder != 0) { + input.readBytes(EncodeConstants.PADDING - paddingRemainder); + } + } + elementsList.add(elementsBuilder.build()); + } + return elementsList; + } + + private static List readVersionBitmap(int[] input){ + List versionBitmapList = new ArrayList<>(); + for (int i = 0; i < input.length; i++) { + int mask = input[i]; + for (int j = 0; j < Integer.SIZE; j++) { + versionBitmapList.add((mask & (1<