2 * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
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
9 package org.opendaylight.openflowplugin.impl.protocol.deserialization.multipart;
11 import static org.junit.Assert.assertEquals;
13 import io.netty.buffer.ByteBuf;
14 import io.netty.buffer.UnpooledByteBufAllocator;
15 import java.util.HashMap;
17 import org.junit.Test;
18 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
19 import org.opendaylight.openflowjava.util.ByteBufUtils;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.multipart.reply.multipart.reply.body.MultipartReplyPortDesc;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
25 public class MultipartReplyPortDescDeserializerTest extends AbstractMultipartDeserializerTest {
26 private static final byte PADDING_IN_PORT_DESC_HEADER_01 = 4;
27 private static final byte PADDING_IN_PORT_DESC_HEADER_02 = 2;
29 private static final int PORT_NUMBER = 1;
30 private static final byte[] MAC_ADDRESS = new byte[] {1,2,3,4,5,6};
32 private static final boolean PC_PORT_DOWN = true;
33 private static final boolean PC_N0_RECV = true;
34 private static final boolean PC_N0_FWD = false;
35 private static final boolean PC_N0_PACKET_IN = true;
36 private static final PortConfig PORT_CONFIG = new PortConfig(PC_N0_FWD, PC_N0_PACKET_IN, PC_N0_RECV, PC_PORT_DOWN);
38 private static final boolean PS_LINK_DOWN = true;
39 private static final boolean PS_BLOCKED = true;
40 private static final boolean PS_LIVE = false;
42 private static final boolean PF10MBHD = true;
43 private static final boolean PF10MBFD = true;
44 private static final boolean PF100MBHD = true;
45 private static final boolean PF100MBFD = true;
46 private static final boolean PF1GBHD = true;
47 private static final boolean PF1GBFD = true;
48 private static final boolean PF10GBFD = true;
49 private static final boolean PF40GBFD = true;
50 private static final boolean PF100GBFD = true;
51 private static final boolean PF1TBFD = false;
52 private static final boolean PFOTHER = false;
53 private static final boolean PFCOPPER = false;
54 private static final boolean PFFIBER = false;
55 private static final boolean PFAUTONEG = false;
56 private static final boolean PFPAUSE = false;
57 private static final boolean PFPAUSEASYM = false;
58 private static final PortFeatures CURRENT_FEATURE = new PortFeatures(PFAUTONEG, PFCOPPER, PFFIBER, PF40GBFD,
59 PF100GBFD, PF100MBFD, PF100MBHD, PF1GBFD, PF1GBHD, PF1TBFD,
60 PFOTHER, PFPAUSE, PFPAUSEASYM, PF10GBFD, PF10MBFD, PF10MBHD);
61 private static final int ADVERTISED_FEATURE = 6;
62 private static final int SUPPORTED_FEATURE = 7;
63 private static final int PEER_FEATURES = 8;
64 private static final int CURRENT_SPEED = 9;
65 private static final int MAXIMUM_SPEED = 10;
68 public void deserialize() throws Exception {
69 ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.buffer();
70 buffer.writeInt(PORT_NUMBER);
71 buffer.writeZero(PADDING_IN_PORT_DESC_HEADER_01);
72 buffer.writeBytes(MAC_ADDRESS);
73 buffer.writeZero(PADDING_IN_PORT_DESC_HEADER_02);
74 buffer.writeZero(EncodeConstants.MAX_PORT_NAME_LENGTH);
76 Map<Integer, Boolean> portMap = new HashMap<>();
77 portMap.put(0, PORT_CONFIG.isPORTDOWN());
78 portMap.put(2, PORT_CONFIG.isNORECV());
79 portMap.put(5, PORT_CONFIG.isNOFWD());
80 portMap.put(6, PORT_CONFIG.isNOPACKETIN());
82 buffer.writeInt(ByteBufUtils.fillBitMaskFromMap(portMap));
83 buffer.writeInt(ByteBufUtils.fillBitMask(0, PS_BLOCKED, PS_LINK_DOWN, PS_LIVE));
84 buffer.writeInt(ByteBufUtils.fillBitMask(0,
85 CURRENT_FEATURE.isTenMbHd(),
86 CURRENT_FEATURE.isTenMbFd(),
87 CURRENT_FEATURE.isHundredMbHd(),
88 CURRENT_FEATURE.isHundredMbFd(),
89 CURRENT_FEATURE.isOneGbHd(),
90 CURRENT_FEATURE.isOneGbFd(),
91 CURRENT_FEATURE.isTenGbFd(),
92 CURRENT_FEATURE.isFortyGbFd(),
93 CURRENT_FEATURE.isHundredGbFd(),
94 CURRENT_FEATURE.isOneTbFd(),
95 CURRENT_FEATURE.isOther(),
96 CURRENT_FEATURE.isFiber(),
97 CURRENT_FEATURE.isAutoeng(),
98 CURRENT_FEATURE.isCopper(),
99 CURRENT_FEATURE.isPause(),
100 CURRENT_FEATURE.isPauseAsym()));
101 buffer.writeInt(ADVERTISED_FEATURE);
102 buffer.writeInt(SUPPORTED_FEATURE);
103 buffer.writeInt(PEER_FEATURES);
104 buffer.writeInt(CURRENT_SPEED);
105 buffer.writeInt(MAXIMUM_SPEED);
107 final MultipartReplyPortDesc reply = (MultipartReplyPortDesc) deserializeMultipart(buffer);
108 assertEquals(PORT_NUMBER, reply.getPorts().get(0).getPortNumber().getUint32().intValue());
109 assertEquals("01:02:03:04:05:06", reply.getPorts().get(0).getHardwareAddress().getValue());
110 assertEquals(PORT_CONFIG, reply.getPorts().get(0).getConfiguration());
111 assertEquals(PS_BLOCKED, reply.getPorts().get(0).getState().isBlocked());
112 assertEquals(PS_LINK_DOWN, reply.getPorts().get(0).getState().isLinkDown());
113 assertEquals(PS_LIVE, reply.getPorts().get(0).getState().isLive());
114 assertEquals(CURRENT_FEATURE, reply.getPorts().get(0).getCurrentFeature());
115 assertEquals(CURRENT_SPEED, reply.getPorts().get(0).getCurrentSpeed().intValue());
116 assertEquals(MAXIMUM_SPEED, reply.getPorts().get(0).getMaximumSpeed().intValue());
120 protected int getType() {
121 return MultipartType.OFPMPPORTDESC.getIntValue();