Fix port update
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / protocol / serialization / messages / PortMessageSerializerTest.java
1 /*
2  * Copyright (c) 2016 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.openflowplugin.impl.protocol.serialization.messages;
10
11 import static org.junit.Assert.assertEquals;
12
13 import com.google.common.collect.ImmutableMap;
14 import io.netty.buffer.ByteBuf;
15 import io.netty.buffer.UnpooledByteBufAllocator;
16 import org.junit.Test;
17 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
18 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
19 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
20 import org.opendaylight.openflowjava.util.ByteBufUtils;
21 import org.opendaylight.openflowplugin.impl.protocol.serialization.AbstractSerializerTest;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortMessage;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortMessageBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortNumberUni;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValues;
30
31 public class PortMessageSerializerTest extends AbstractSerializerTest {
32
33     private static final byte PADDING_IN_PORT_MOD_MESSAGE_01 = 4;
34     private static final byte PADDING_IN_PORT_MOD_MESSAGE_02 = 2;
35     private static final byte PADDING_IN_PORT_MOD_MESSAGE_03 = 4;
36     private static final short LENGTH = 40;
37     private static final Long XID = 42L;
38     private static final short VERSION = EncodeConstants.OF13_VERSION_ID;
39     private static final String PORT_NUMBER = OutputPortValues.ALL.toString();
40     private static final Long PORT_NUMBER_VAL = BinContent.intToUnsignedLong(PortNumberValues.ALL.getIntValue());
41     private static final String MAC_ADDRESS = "E9:2A:55:BA:FA:4D";
42
43     // Port config
44     private static final Boolean IS_NOFWD = false;
45     private static final Boolean IS_NOPACKETIN = false;
46     private static final Boolean IS_NORECV = true;
47     private static final Boolean IS_PORTDOWN = false;
48
49     // Port features
50     private static final Boolean IS_AUTOENG = true;
51     private static final Boolean IS_COPPER = false;
52     private static final Boolean IS_FIBER = true;
53     private static final Boolean IS_40GBFD = true;
54     private static final Boolean IS_100GBFD = false;
55     private static final Boolean IS_100MBFD = false;
56     private static final Boolean IS_100MBHD = false;
57     private static final Boolean IS_1GBFD = false;
58     private static final Boolean IS_1GBHD = false;
59     private static final Boolean IS_1TBFD = false;
60     private static final Boolean IS_OTHER = false;
61     private static final Boolean IS_PAUSE = false;
62     private static final Boolean IS_PAUSE_ASYM = false;
63     private static final Boolean IS_10GBFD = false;
64     private static final Boolean IS_10MBFD = false;
65     private static final Boolean IS_10MBHD = false;
66
67     private static final PortMessage MESSAGE = new PortMessageBuilder()
68             .setXid(XID)
69             .setVersion(VERSION)
70             .setPortNumber(new PortNumberUni(PORT_NUMBER))
71             .setConfiguration(new PortConfig(IS_NOFWD, IS_NOPACKETIN, IS_NORECV, IS_PORTDOWN))
72             .setMask(new PortConfig(true, true, true, true))
73             .setAdvertisedFeatures(new PortFeatures(
74                     IS_AUTOENG,
75                     IS_COPPER,
76                     IS_FIBER,
77                     IS_40GBFD,
78                     IS_100GBFD,
79                     IS_100MBFD,
80                     IS_100MBHD,
81                     IS_1GBFD,
82                     IS_1GBHD,
83                     IS_1TBFD,
84                     IS_OTHER,
85                     IS_PAUSE,
86                     IS_PAUSE_ASYM,
87                     IS_10GBFD,
88                     IS_10MBFD,
89                     IS_10MBHD))
90             .setHardwareAddress(new MacAddress(MAC_ADDRESS))
91             .build();
92
93     private PortMessageSerializer serializer;
94
95     @Override
96     protected void init() {
97         serializer = getRegistry().getSerializer(new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, PortMessage.class));
98     }
99
100     @Test
101     public void testSerialize() throws Exception {
102         final ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
103         serializer.serialize(MESSAGE, out);
104
105         // Header
106         assertEquals(out.readByte(), VERSION);
107         assertEquals(out.readByte(), serializer.getMessageType());
108         assertEquals(out.readShort(), LENGTH);
109         assertEquals(out.readInt(), XID.intValue());
110
111         // Body
112         assertEquals(out.readInt(), PORT_NUMBER_VAL.intValue());
113         out.skipBytes(PADDING_IN_PORT_MOD_MESSAGE_01);
114         byte[] address = new byte[6];
115         out.readBytes(address);
116         assertEquals(
117                 new MacAddress(ByteBufUtils.macAddressToString(address)).getValue(),
118                 new MacAddress(MAC_ADDRESS).getValue());
119         out.skipBytes(PADDING_IN_PORT_MOD_MESSAGE_02);
120
121         // Port config
122         final int config = ByteBufUtils.fillBitMaskFromMap(ImmutableMap
123                 .<Integer, Boolean>builder()
124                 .put(0, IS_PORTDOWN)
125                 .put(2, IS_NORECV)
126                 .put(5, IS_NOFWD)
127                 .put(6, IS_NOPACKETIN)
128                 .build());
129
130         final int mask = ByteBufUtils.fillBitMaskFromMap(ImmutableMap
131                 .<Integer, Boolean>builder()
132                 .put(0, true)
133                 .put(2, true)
134                 .put(5, true)
135                 .put(6, true)
136                 .build());
137
138         assertEquals(out.readInt(), config);
139         assertEquals(out.readInt(), mask);
140
141         // Port features
142         assertEquals(out.readInt(), ByteBufUtils.fillBitMask(0,
143                 IS_10MBHD,
144                 IS_10MBFD,
145                 IS_100MBHD,
146                 IS_100MBFD,
147                 IS_1GBHD,
148                 IS_1GBFD,
149                 IS_10GBFD,
150                 IS_40GBFD,
151                 IS_100GBFD,
152                 IS_1TBFD,
153                 IS_OTHER,
154                 IS_COPPER,
155                 IS_FIBER,
156                 IS_AUTOENG,
157                 IS_PAUSE,
158                 IS_PAUSE_ASYM));
159
160         out.skipBytes(PADDING_IN_PORT_MOD_MESSAGE_03);
161
162         assertEquals(out.readableBytes(), 0);
163
164     }
165
166 }