217177cc471c54b25d4f57dcc2f62913decad1ea
[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.openflowjava.protocol.impl.util.ByteBufUtils;\r
15 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInputBuilder;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.FlowRemovedMask;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.FlowRemovedMaskBuilder;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PacketInMask;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PacketInMaskBuilder;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PortStatusMask;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PortStatusMaskBuilder;\r
27 import org.slf4j.Logger;\r
28 import org.slf4j.LoggerFactory;\r
29 \r
30 /**\r
31  * @author timotej.kubas\r
32  * @author michal.polkorab\r
33  */\r
34 public class SetAsyncInputMessageFactoryTest {\r
35     private static final Logger LOGGER = LoggerFactory\r
36             .getLogger(SetAsyncInputMessageFactoryTest.class);\r
37     /**\r
38      * @throws Exception \r
39      * Testing of {@link SetAsyncInputMessageFactory} for correct translation from POJO\r
40      */\r
41     @Test\r
42     public void testSetAsyncInputMessage() throws Exception {\r
43         SetAsyncInputBuilder builder = new SetAsyncInputBuilder();\r
44         BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
45         builder.setPacketInMask(createPacketInMask());\r
46         builder.setPortStatusMask(createPortStatusMask());\r
47         builder.setFlowRemovedMask(createFlowRemowedMask());\r
48         SetAsyncInput message = builder.build();\r
49         \r
50         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
51         SetAsyncInputMessageFactory factory = SetAsyncInputMessageFactory.getInstance();\r
52         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
53         LOGGER.debug("<< " + ByteBufUtils.byteBufToHexString(out));\r
54         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
55         Assert.assertEquals("Wrong packetInMask", 5, out.readUnsignedInt());\r
56         Assert.assertEquals("Wrong packetInMask", 7, out.readUnsignedInt());\r
57         Assert.assertEquals("Wrong portStatusMask", 6, out.readUnsignedInt());\r
58         Assert.assertEquals("Wrong portStatusMask", 0, out.readUnsignedInt());\r
59         Assert.assertEquals("Wrong flowRemovedMask", 10, out.readUnsignedInt());\r
60         Assert.assertEquals("Wrong flowRemovedMask", 5, out.readUnsignedInt());\r
61         \r
62     }\r
63     \r
64     private static List<PacketInMask> createPacketInMask() {\r
65         List<PacketInMask> masks = new ArrayList<>();\r
66         PacketInMaskBuilder builder;\r
67         // OFPCR_ROLE_EQUAL or OFPCR_ROLE_MASTER\r
68         builder = new PacketInMaskBuilder();\r
69         List<PacketInReason> packetInReasonList = new ArrayList<>();\r
70         packetInReasonList.add(PacketInReason.OFPRNOMATCH);\r
71         packetInReasonList.add(PacketInReason.OFPRINVALIDTTL);\r
72         builder.setMask(packetInReasonList);\r
73         masks.add(builder.build());\r
74         // OFPCR_ROLE_SLAVE\r
75         builder = new PacketInMaskBuilder();\r
76         packetInReasonList = new ArrayList<>();\r
77         packetInReasonList.add(PacketInReason.OFPRNOMATCH);\r
78         packetInReasonList.add(PacketInReason.OFPRACTION);\r
79         packetInReasonList.add(PacketInReason.OFPRINVALIDTTL);\r
80         builder.setMask(packetInReasonList);\r
81         masks.add(builder.build());\r
82         System.out.println(masks.size());\r
83         return masks;\r
84     }\r
85     \r
86     private static List<PortStatusMask> createPortStatusMask() {\r
87         List<PortStatusMask> masks = new ArrayList<>();\r
88         PortStatusMaskBuilder builder;\r
89         builder = new PortStatusMaskBuilder();\r
90         // OFPCR_ROLE_EQUAL or OFPCR_ROLE_MASTER\r
91         List<PortReason> portReasonList = new ArrayList<>();\r
92         portReasonList.add(PortReason.OFPPRDELETE);\r
93         portReasonList.add(PortReason.OFPPRMODIFY);\r
94         builder.setMask(portReasonList);\r
95         masks.add(builder.build());\r
96         // OFPCR_ROLE_SLAVE\r
97         builder = new PortStatusMaskBuilder();\r
98         portReasonList = new ArrayList<>();\r
99         builder.setMask(portReasonList);\r
100         masks.add(builder.build());\r
101         return masks;\r
102     }\r
103     \r
104     private static List<FlowRemovedMask> createFlowRemowedMask() {\r
105         List<FlowRemovedMask> masks = new ArrayList<>();\r
106         FlowRemovedMaskBuilder builder;\r
107         // OFPCR_ROLE_EQUAL or OFPCR_ROLE_MASTER\r
108         builder = new FlowRemovedMaskBuilder();\r
109         List<FlowRemovedReason> flowRemovedReasonList = new ArrayList<>();\r
110         flowRemovedReasonList.add(FlowRemovedReason.OFPRRHARDTIMEOUT);\r
111         flowRemovedReasonList.add(FlowRemovedReason.OFPRRGROUPDELETE);\r
112         builder.setMask(flowRemovedReasonList);\r
113         masks.add(builder.build());\r
114         // OFPCR_ROLE_SLAVE\r
115         builder = new FlowRemovedMaskBuilder();\r
116         flowRemovedReasonList = new ArrayList<>();\r
117         flowRemovedReasonList.add(FlowRemovedReason.OFPRRIDLETIMEOUT);\r
118         flowRemovedReasonList.add(FlowRemovedReason.OFPRRDELETE);\r
119         builder.setMask(flowRemovedReasonList);\r
120         masks.add(builder.build());\r
121         return masks;\r
122     }\r
123 }\r