Merge "OPNFLWPLUG-1062 Include additional LLDP fields in liblldp"
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / protocol / deserialization / messages / PortMessageDeserializerTest.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.deserialization.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.util.EncodeConstants;
18 import org.opendaylight.openflowjava.util.ByteBufUtils;
19 import org.opendaylight.openflowplugin.impl.protocol.deserialization.AbstractDeserializerTest;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.IetfYangUtil;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortMessage;
23
24 public class PortMessageDeserializerTest extends AbstractDeserializerTest {
25     private static final byte PADDING_IN_PORT_MOD_MESSAGE_1 = 4;
26     private static final byte PADDING_IN_PORT_MOD_MESSAGE_2 = 2;
27     private static final byte PADDING_IN_PORT_MOD_MESSAGE_3 = 4;
28
29     // Port features
30     private static final Boolean IS_AUTOENG = true;
31     private static final Boolean IS_COPPER = false;
32     private static final Boolean IS_FIBER = true;
33     private static final Boolean IS_40GBFD = true;
34     private static final Boolean IS_100GBFD = false;
35     private static final Boolean IS_100MBFD = false;
36     private static final Boolean IS_100MBHD = true;
37     private static final Boolean IS_1GBFD = false;
38     private static final Boolean IS_1GBHD = false;
39     private static final Boolean IS_1TBFD = true;
40     private static final Boolean IS_OTHER = true;
41     private static final Boolean IS_PAUSE = false;
42     private static final Boolean IS_PAUSE_ASYM = false;
43     private static final Boolean IS_10GBFD = false;
44     private static final Boolean IS_10MBFD = true;
45     private static final Boolean IS_10MBHD = true;
46     private static final Boolean IS_NOPACKETIN = false;
47     private static final Boolean IS_NOFWD = true;
48     private static final Boolean IS_NORECV = true;
49     private static final Boolean IS_PORTDOWN = true;
50     private static final int PORT = 22;
51     private static final int XID = 42;
52     private static final int TYPE = 16;
53     private static final MacAddress ADDRESS = new MacAddress("00:01:02:03:04:05");
54
55     private ByteBuf buffer;
56
57     @Override
58     protected void init() {
59         buffer = UnpooledByteBufAllocator.DEFAULT.buffer();
60     }
61
62     @Test
63     public void deserialize() {
64         buffer.writeByte(TYPE);
65         buffer.writeShort(EncodeConstants.EMPTY_LENGTH);
66         buffer.writeInt(XID);
67         buffer.writeInt(PORT);
68         buffer.writeZero(PADDING_IN_PORT_MOD_MESSAGE_1);
69         buffer.writeBytes(IetfYangUtil.INSTANCE.bytesFor(ADDRESS));
70
71         final int config = ByteBufUtils.fillBitMaskFromMap(ImmutableMap
72                 .<Integer, Boolean>builder()
73                 .put(0, IS_PORTDOWN)
74                 .put(2, IS_NORECV)
75                 .put(5, IS_NOFWD)
76                 .put(6, IS_NOPACKETIN)
77                 .build());
78
79         buffer.writeZero(PADDING_IN_PORT_MOD_MESSAGE_2);
80         buffer.writeInt(config); // config
81         buffer.writeInt(config); // config mask
82
83         buffer.writeInt(ByteBufUtils.fillBitMask(0,
84                 IS_10MBHD,
85                 IS_10MBFD,
86                 IS_100MBHD,
87                 IS_100MBFD,
88                 IS_1GBHD,
89                 IS_1GBFD,
90                 IS_10GBFD,
91                 IS_40GBFD,
92                 IS_100GBFD,
93                 IS_1TBFD,
94                 IS_OTHER,
95                 IS_COPPER,
96                 IS_FIBER,
97                 IS_AUTOENG,
98                 IS_PAUSE,
99                 IS_PAUSE_ASYM));
100
101         buffer.writeZero(PADDING_IN_PORT_MOD_MESSAGE_3);
102
103         final PortMessage message = (PortMessage) getFactory().deserialize(buffer, EncodeConstants.OF13_VERSION_ID);
104
105         assertEquals(XID, message.getXid().intValue());
106         assertEquals(PORT, message.getPortNumber().getUint32().intValue());
107         assertEquals(ADDRESS.getValue(), message.getHardwareAddress().getValue());
108
109         // Config
110         assertEquals(IS_PORTDOWN, message.getConfiguration().isPORTDOWN());
111         assertEquals(IS_NORECV, message.getConfiguration().isNORECV());
112         assertEquals(IS_NOFWD, message.getConfiguration().isNOFWD());
113         assertEquals(IS_NOPACKETIN, message.getConfiguration().isNOPACKETIN());
114
115         // Features
116         assertEquals(IS_10MBHD, message.getAdvertisedFeatures().isTenMbHd());
117         assertEquals(IS_10MBFD, message.getAdvertisedFeatures().isTenMbHd());
118         assertEquals(IS_100MBHD, message.getAdvertisedFeatures().isHundredMbHd());
119         assertEquals(IS_100MBFD, message.getAdvertisedFeatures().isHundredMbFd());
120         assertEquals(IS_1GBHD, message.getAdvertisedFeatures().isOneGbHd());
121         assertEquals(IS_1GBFD, message.getAdvertisedFeatures().isOneGbFd());
122         assertEquals(IS_10GBFD, message.getAdvertisedFeatures().isTenGbFd());
123         assertEquals(IS_40GBFD, message.getAdvertisedFeatures().isFortyGbFd());
124         assertEquals(IS_100GBFD, message.getAdvertisedFeatures().isHundredGbFd());
125         assertEquals(IS_1TBFD, message.getAdvertisedFeatures().isOneTbFd());
126         assertEquals(IS_OTHER, message.getAdvertisedFeatures().isOther());
127         assertEquals(IS_COPPER, message.getAdvertisedFeatures().isCopper());
128         assertEquals(IS_FIBER, message.getAdvertisedFeatures().isFiber());
129         assertEquals(IS_AUTOENG, message.getAdvertisedFeatures().isAutoeng());
130         assertEquals(IS_PAUSE, message.getAdvertisedFeatures().isPause());
131         assertEquals(IS_PAUSE_ASYM, message.getAdvertisedFeatures().isPauseAsym());
132
133         assertEquals(buffer.readableBytes(), 0);
134     }
135
136 }