Merge "Bug 8535: Fix IPv6 OXMHeader Mask issue"
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / translator / PortUpdateTranslatorTest.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. 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.translator;
10
11 import org.junit.Assert;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.junit.runner.RunWith;
15 import org.mockito.Mock;
16 import org.mockito.Mockito;
17 import org.mockito.runners.MockitoJUnitRunner;
18 import org.opendaylight.openflowplugin.api.OFConstants;
19 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
20 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
21 import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
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.inventory.rev130819.FlowCapableNodeConnector;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.StateBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfigV10;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeaturesV10;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortStateV10;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessageBuilder;
33
34 /**
35  * Test of {@link PortUpdateTranslator}
36  */
37 @RunWith(MockitoJUnitRunner.class)
38 public class PortUpdateTranslatorTest {
39
40     private PortUpdateTranslator portUpdateTranslator;
41     @Mock
42     private DeviceContext deviceContext;
43     @Mock
44     private DeviceState deviceState;
45     @Mock
46     private DeviceInfo deviceInfo;
47
48     private org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig portConfig;
49     private StateBuilder portStateBld;
50     private PortStatusMessageBuilder portBld;
51
52     @Before
53     public void setUp() throws Exception {
54         Mockito.when(deviceContext.getDeviceInfo()).thenReturn(deviceInfo);
55         portUpdateTranslator = new PortUpdateTranslator();
56
57         portStateBld = new StateBuilder().setLive(true);
58         portConfig = org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig
59                 .getDefaultInstance("nOFWD");
60         portBld = assemblePortStatusMessage(21L, 84L);
61
62     }
63
64     @Test
65     public void testTranslate_13() throws Exception {
66         Mockito.when(deviceInfo.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_3);
67         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures portFeatures =
68                 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures
69                         .getDefaultInstance("hundredGbFd");
70
71
72         final FlowCapableNodeConnector nodeConnector = portUpdateTranslator.translate(portBld.build(), deviceInfo, null);
73
74         commonCheck(nodeConnector);
75
76         Assert.assertEquals(portConfig, nodeConnector.getConfiguration());
77         Assert.assertEquals(portFeatures, nodeConnector.getCurrentFeature());
78         Assert.assertEquals(portFeatures, nodeConnector.getAdvertisedFeatures());
79         Assert.assertEquals(portFeatures, nodeConnector.getPeerFeatures());
80         Assert.assertEquals(portFeatures, nodeConnector.getSupported());
81         Assert.assertEquals(portStateBld.build(), nodeConnector.getState());
82         Assert.assertTrue(nodeConnector.getQueue().isEmpty());
83     }
84
85     private void commonCheck(FlowCapableNodeConnector nodeConnector) {
86         Assert.assertEquals(84L, nodeConnector.getCurrentSpeed().longValue());
87         Assert.assertEquals(84L * 2, nodeConnector.getMaximumSpeed().longValue());
88         Assert.assertEquals("utPortName:21", nodeConnector.getName());
89         Assert.assertEquals("01:02:03:04:05:06", nodeConnector.getHardwareAddress().getValue());
90         Assert.assertEquals(21L, nodeConnector.getPortNumber().getUint32().longValue());
91     }
92
93     @Test
94     public void testTranslate_10() throws Exception {
95         Mockito.when(deviceInfo.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_0);
96         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures portFeatures =
97                 new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
98                         null, null, null, false, false, true, null, null,
99                         null, false, false, null, null, null, null, null
100                 );
101
102         final FlowCapableNodeConnector nodeConnector = portUpdateTranslator.translate(portBld.build(), deviceInfo, null);
103
104         commonCheck(nodeConnector);
105
106         Assert.assertEquals(portConfig, nodeConnector.getConfiguration());
107         Assert.assertEquals(portFeatures, nodeConnector.getCurrentFeature());
108         Assert.assertEquals(portFeatures, nodeConnector.getAdvertisedFeatures());
109         Assert.assertEquals(portFeatures, nodeConnector.getPeerFeatures());
110         Assert.assertEquals(portFeatures, nodeConnector.getSupported());
111         Assert.assertEquals(portStateBld.build(), nodeConnector.getState());
112         Assert.assertNull(nodeConnector.getQueue());
113     }
114
115     private PortStatusMessageBuilder assemblePortStatusMessage(long portNoValue, long speed) {
116         final PortFeatures portFeatures13 = PortFeatures.getDefaultInstance("_100gbFd");
117         final PortFeaturesV10 portFeatures10 = PortFeaturesV10.getDefaultInstance("_100mbFd");
118         final PortConfig portConfig13 = PortConfig.getDefaultInstance("noFwd");
119         final PortConfigV10 portConfig10 = PortConfigV10.getDefaultInstance("noFwd");
120         final PortState portState13 = PortState.getDefaultInstance("live");
121         final PortStateV10 portState10 = PortStateV10.getDefaultInstance("live");
122
123         return new PortStatusMessageBuilder()
124                 .setPortNo(portNoValue)
125                 .setReason(PortReason.OFPPRADD)
126                 .setAdvertisedFeatures(portFeatures13)
127                 .setAdvertisedFeaturesV10(portFeatures10)
128                 .setConfig(portConfig13)
129                 .setConfigV10(portConfig10)
130                 .setCurrentFeatures(portFeatures13)
131                 .setCurrentFeaturesV10(portFeatures10)
132                 .setPeerFeatures(portFeatures13)
133                 .setPeerFeaturesV10(portFeatures10)
134                 .setState(portState13)
135                 .setStateV10(portState10)
136                 .setSupportedFeatures(portFeatures13)
137                 .setSupportedFeaturesV10(portFeatures10)
138                 .setCurrSpeed(speed)
139                 .setHwAddr(new MacAddress("01:02:03:04:05:06"))
140                 .setMaxSpeed(2 * speed)
141                 .setName("utPortName:" + portNoValue);
142     }
143 }