1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
\r
4 import io.netty.buffer.ByteBuf;
\r
5 import io.netty.buffer.UnpooledByteBufAllocator;
\r
7 import java.util.ArrayList;
\r
8 import java.util.List;
\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
21 * @author timotej.kubas
\r
22 * @author michal.polkorab
\r
24 public class SetAsyncInputMessageFactoryTest {
\r
27 * @throws Exception
\r
28 * Testing of {@link SetAsyncInputMessageFactory} for correct translation from POJO
\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
39 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
40 SetAsyncInputMessageFactory factory = SetAsyncInputMessageFactory.getInstance();
\r
41 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\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
50 private static List<PacketInReason> createPacketInMask() {
\r
51 List<PacketInReason> packetInReasonList = new ArrayList<>();
\r
52 packetInReasonList.add(PacketInReason.forValue(1));
\r
53 packetInReasonList.add(PacketInReason.forValue(2));
\r
54 return packetInReasonList;
\r
57 private static List<PortReason> createPortStatusMask() {
\r
58 List<PortReason> portReasonList = new ArrayList<>();
\r
59 portReasonList.add(PortReason.forValue(1));
\r
60 portReasonList.add(PortReason.forValue(2));
\r
61 return portReasonList;
\r
64 private static List<FlowRemovedReason> createFlowRemowedMask() {
\r
65 List<FlowRemovedReason> flowRemovedReasonList = new ArrayList<>();
\r
66 flowRemovedReasonList.add(FlowRemovedReason.forValue(2));
\r
67 flowRemovedReasonList.add(FlowRemovedReason.forValue(3));
\r
68 return flowRemovedReasonList;
\r
71 private static List<PacketInReason> readPacketInMask(ByteBuf outputBuf) {
\r
72 List<PacketInReason> readPIRList = new ArrayList<>();
\r
73 readPIRList.add(readPacketInReason((int) outputBuf.readUnsignedInt()));
\r
74 readPIRList.add(readPacketInReason((int) outputBuf.readUnsignedInt()));
\r
78 private static List<PortReason> readPortStatusMask(ByteBuf outputBuf) {
\r
79 List<PortReason> readPortReasonList = new ArrayList<>();
\r
80 readPortReasonList.add(readPortReason((int) outputBuf.readUnsignedInt()));
\r
81 readPortReasonList.add(readPortReason((int) outputBuf.readUnsignedInt()));
\r
82 return readPortReasonList;
\r
85 private static List<FlowRemovedReason> readFlowRemovedReasonMask(ByteBuf outputBuf) {
\r
86 List<FlowRemovedReason> readFlowRemovedReasonList = new ArrayList<>();
\r
87 readFlowRemovedReasonList.add(readFlowRemovedReason((int) outputBuf.readUnsignedInt()));
\r
88 readFlowRemovedReasonList.add(readFlowRemovedReason((int) outputBuf.readUnsignedInt()));
\r
89 return readFlowRemovedReasonList;
\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
99 return PacketInReason.forValue(0);
\r
102 return PacketInReason.forValue(1);
\r
104 if (OFPRINVALIDTTL) {
\r
105 return PacketInReason.forValue(2);
\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
118 return PortReason.forValue(0);
\r
121 return PortReason.forValue(1);
\r
124 return PortReason.forValue(2);
\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
137 if (OFPRRIDLETIMEOUT) {
\r
138 return FlowRemovedReason.forValue(0);
\r
140 if (OFPRRHARDTIMEOUT) {
\r
141 return FlowRemovedReason.forValue(1);
\r
144 return FlowRemovedReason.forValue(2);
\r
146 if (OFPRRGROUPDELETE) {
\r
147 return FlowRemovedReason.forValue(3);
\r