new serialization factories and tests
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / SetAsyncInputMessageFactoryTest.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 import io.netty.buffer.UnpooledByteBufAllocator;\r
6 \r
7 import java.util.ArrayList;\r
8 import java.util.List;\r
9 \r
10 import org.junit.Assert;\r
11 import org.junit.Test;\r
12 import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
13 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInputBuilder;\r
19 \r
20 /**\r
21  * @author timotej.kubas\r
22  * @author michal.polkorab\r
23  */\r
24 public class SetAsyncInputMessageFactoryTest {\r
25 \r
26     /**\r
27      * @throws Exception \r
28      * Testing of {@link SetAsyncInputMessageFactory} for correct translation from POJO\r
29      */\r
30     @Test\r
31     public void testSetAsyncInputMessage() throws Exception {\r
32         SetAsyncInputBuilder builder = new SetAsyncInputBuilder();\r
33         BufferHelper.setupHeader(builder);\r
34         builder.setPacketInMask(createPacketInMask());\r
35         builder.setPortStatusMask(createPortStatusMask());\r
36         builder.setFlowRemovedMask(createFlowRemowedMask());\r
37         SetAsyncInput message = builder.build();\r
38         \r
39         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
40         SetAsyncInputMessageFactory factory = SetAsyncInputMessageFactory.getInstance();\r
41         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
42         \r
43         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
44         Assert.assertEquals("Wrong packetInMask", message.getPacketInMask(), readPacketInMask(out));\r
45         Assert.assertEquals("Wrong packetInMask", message.getPortStatusMask(), readPortStatusMask(out));\r
46         Assert.assertEquals("Wrong packetInMask", message.getFlowRemovedMask(), readFlowRemovedReasonMask(out));\r
47         \r
48     }\r
49     \r
50     private static List<PacketInReason> createPacketInMask() {\r
51         List<PacketInReason> packetInReasonList = new ArrayList<PacketInReason>();\r
52         packetInReasonList.add(PacketInReason.forValue(1));\r
53         packetInReasonList.add(PacketInReason.forValue(2));\r
54         return packetInReasonList;\r
55     }\r
56     \r
57     private static List<PortReason> createPortStatusMask() {\r
58         List<PortReason> portReasonList = new ArrayList<PortReason>();\r
59         portReasonList.add(PortReason.forValue(1));\r
60         portReasonList.add(PortReason.forValue(2));\r
61         return portReasonList;\r
62     }\r
63     \r
64     private static List<FlowRemovedReason> createFlowRemowedMask() {\r
65         List<FlowRemovedReason> flowRemovedReasonList = new ArrayList<FlowRemovedReason>();\r
66         flowRemovedReasonList.add(FlowRemovedReason.forValue(2));\r
67         flowRemovedReasonList.add(FlowRemovedReason.forValue(3));\r
68         return flowRemovedReasonList;\r
69     }\r
70     \r
71     private static List<PacketInReason> readPacketInMask(ByteBuf outputBuf) {\r
72         List<PacketInReason> readPIRList = new ArrayList<PacketInReason>();\r
73         readPIRList.add(readPacketInReason((int) outputBuf.readUnsignedInt()));\r
74         readPIRList.add(readPacketInReason((int) outputBuf.readUnsignedInt()));\r
75         return readPIRList;\r
76     }\r
77     \r
78     private static List<PortReason> readPortStatusMask(ByteBuf outputBuf) {\r
79         List<PortReason> readPortReasonList = new ArrayList<PortReason>();\r
80         readPortReasonList.add(readPortReason((int) outputBuf.readUnsignedInt()));\r
81         readPortReasonList.add(readPortReason((int) outputBuf.readUnsignedInt()));\r
82         return readPortReasonList;\r
83     }\r
84     \r
85     private static List<FlowRemovedReason> readFlowRemovedReasonMask(ByteBuf outputBuf) {\r
86         List<FlowRemovedReason> readFlowRemovedReasonList = new ArrayList<FlowRemovedReason>();\r
87         readFlowRemovedReasonList.add(readFlowRemovedReason((int) outputBuf.readUnsignedInt()));\r
88         readFlowRemovedReasonList.add(readFlowRemovedReason((int) outputBuf.readUnsignedInt()));\r
89         return readFlowRemovedReasonList;\r
90     }\r
91     \r
92     private static PacketInReason readPacketInReason(int input) {\r
93         PacketInReason reason = null;\r
94         boolean OFPRNOMATCH = (input & (1 << 0)) > 0;\r
95         boolean OFPRACTION = (input & (1 << 1)) > 0;\r
96         boolean OFPRINVALIDTTL = (input & (1 << 2)) > 0;\r
97         \r
98         if (OFPRNOMATCH) {\r
99             return PacketInReason.forValue(0);\r
100             }\r
101         if (OFPRACTION) {\r
102             return PacketInReason.forValue(1);\r
103             }\r
104         if (OFPRINVALIDTTL) {\r
105             return PacketInReason.forValue(2);\r
106             }\r
107         \r
108         return reason;\r
109     }\r
110     \r
111     private static PortReason readPortReason(int input) {\r
112         PortReason reason = null;\r
113         boolean OFPPRADD = (input & (1 << 0)) > 0;\r
114         boolean OFPPRDELETE = (input & (1 << 1)) > 0;\r
115         boolean OFPPRMODIFY = (input & (1 << 2)) > 0;\r
116         \r
117         if (OFPPRADD) {\r
118             return PortReason.forValue(0);\r
119             }\r
120         if (OFPPRDELETE) {\r
121             return PortReason.forValue(1);\r
122             }\r
123         if (OFPPRMODIFY) {\r
124             return PortReason.forValue(2);\r
125             }\r
126         \r
127         return reason;\r
128     }\r
129     \r
130     private static FlowRemovedReason readFlowRemovedReason(int input) {\r
131         FlowRemovedReason reason = null;\r
132         boolean OFPRRIDLETIMEOUT = (input & (1 << 0)) > 0;\r
133         boolean OFPRRHARDTIMEOUT = (input & (1 << 1)) > 0;\r
134         boolean OFPRRDELETE = (input & (1 << 2)) > 0;\r
135         boolean OFPRRGROUPDELETE = (input & (1 << 3)) > 0;\r
136         \r
137         if (OFPRRIDLETIMEOUT) {\r
138             return FlowRemovedReason.forValue(0);\r
139             }\r
140         if (OFPRRHARDTIMEOUT) {\r
141             return FlowRemovedReason.forValue(1);\r
142             }\r
143         if (OFPRRDELETE) {\r
144             return FlowRemovedReason.forValue(2);\r
145             }\r
146         if (OFPRRGROUPDELETE) {\r
147             return FlowRemovedReason.forValue(3);\r
148             }\r
149         \r
150         return reason;\r
151     }\r
152 }\r