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