+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+import io.netty.buffer.UnpooledByteBufAllocator;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import junit.framework.Assert;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.group.mod.Buckets;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.group.mod.BucketsBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ *\r
+ */\r
+public class GroupModInputMessageFactoryTest {\r
+ private static final byte PADDING_IN_GROUP_MOD_MESSAGE = 1;\r
+ \r
+ /**\r
+ * @throws Exception\r
+ * Testing of {@link GroupModInputMessageFactory} for correct translation from POJO\r
+ */\r
+ @Test\r
+ public void testGroupModInputMessage() throws Exception {\r
+ GroupModInputBuilder builder = new GroupModInputBuilder();\r
+ BufferHelper.setupHeader(builder);\r
+ builder.setCommand(GroupModCommand.forValue(2));\r
+ builder.setType(GroupType.forValue(3));\r
+ builder.setGroupId(256L);\r
+ builder.setBuckets(createBucketsList());\r
+ GroupModInput message = builder.build();\r
+ \r
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+ GroupModInputMessageFactory factory = GroupModInputMessageFactory.getInstance();\r
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+ \r
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
+ Assert.assertEquals("Wrong command", message.getCommand().getIntValue(), out.readShort());\r
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readByte());\r
+ out.skipBytes(PADDING_IN_GROUP_MOD_MESSAGE);\r
+ Assert.assertEquals("Wrong groupId", message.getGroupId().intValue(), out.readUnsignedInt());\r
+ Assert.assertEquals("Wrong bucketList", true, compareBucketsLists(createBucketsList(), createBucketsListFromBufer(out)));\r
+ }\r
+ \r
+ private static List<Buckets> createBucketsList(){\r
+ List<Buckets> bucketsList = new ArrayList<Buckets>();\r
+ BucketsBuilder bucketsBuilder = new BucketsBuilder();\r
+ Buckets bucket;\r
+ bucketsBuilder.setWeight(10);\r
+ bucketsBuilder.setWatchPort(new PortNumber(65L));\r
+ bucketsBuilder.setWatchGroup(22L);\r
+ bucket = bucketsBuilder.build();\r
+ bucketsList.add(bucket);\r
+ return bucketsList;\r
+ }\r
+ \r
+ private static List<Buckets> createBucketsListFromBufer(ByteBuf out){\r
+ List<Buckets> bucketsList = new ArrayList<Buckets>();\r
+ BucketsBuilder bucketsBuilder = new BucketsBuilder();\r
+ Buckets bucket;\r
+ bucketsBuilder.setWeight((int) out.readShort());\r
+ bucketsBuilder.setWatchPort(new PortNumber(out.readUnsignedInt()));\r
+ bucketsBuilder.setWatchGroup(out.readUnsignedInt());\r
+ out.skipBytes(4);\r
+ bucket = bucketsBuilder.build();\r
+ bucketsList.add(bucket);\r
+ return bucketsList;\r
+ }\r
+ \r
+ private static boolean compareBucketsLists(List<Buckets> bucketsFromMessage, List<Buckets> bucketsFromBuffer) {\r
+ boolean result = false;\r
+ int bucketsFromMessageLength = bucketsFromMessage.size();\r
+ for (int i = 0; i < bucketsFromMessageLength; i++) {\r
+ if (bucketsFromMessage.get(i).getWeight().equals(bucketsFromBuffer.get(i).getWeight())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ if (bucketsFromMessage.get(i).getWatchPort()\r
+ .equals(bucketsFromBuffer.get(i).getWatchPort())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ if (bucketsFromMessage.get(i).getWatchGroup()\r
+ .equals(bucketsFromBuffer.get(i).getWatchGroup())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ }\r
+ // TODO get method for field length missing\r
+ // TODO actions structure missing\r
+ return result;\r
+ }\r
+}\r