2 * Copyright (c) 2013 Cisco Systems, Inc. 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
8 package org.opendaylight.openflowplugin.openflow.md.util;
10 import static org.junit.Assert.assertNotNull;
11 import static org.mockito.Mockito.when;
12 import com.google.common.base.Optional;
13 import com.google.common.util.concurrent.Futures;
14 import java.math.BigInteger;
15 import java.util.List;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.Mock;
21 import org.mockito.Mockito;
22 import org.mockito.runners.MockitoJUnitRunner;
23 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
24 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
25 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
26 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
27 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
28 import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdatedBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdatedBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValuesV10;
40 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
45 @RunWith(MockitoJUnitRunner.class)
46 public class InventoryDataServiceUtilTest {
49 private static final long PORT_NO = PortNumberValuesV10.CONTROLLER.getIntValue();
50 private static final BigInteger PATH_ID = BigInteger.TEN;
53 DataBroker dataBroker;
55 ReadOnlyTransaction readOnlyTransaction;
57 WriteTransaction writeTransaction;
65 public void setupEnvironment() {
66 when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
67 when(readOnlyTransaction.read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class))).thenReturn(Futures.immediateCheckedFuture(Optional.of(nodes)));
69 OpenflowPortsUtil.init();
70 OFSessionUtil.getSessionManager().setDataBroker(dataBroker);
76 * Primitive test method for {@link InventoryDataServiceUtil#putNodeConnector(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId, org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector)} ()}.
78 public void testPutNodeConnector(){
79 when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
81 NodeId nodeId = new NodeId("1");
82 NodeConnectorBuilder nodeConnectorBuilder = new NodeConnectorBuilder();
83 NodeConnectorId nodeConnectorId = new NodeConnectorId("1");
84 nodeConnectorBuilder.setId(nodeConnectorId );
85 nodeConnectorBuilder.setKey(new NodeConnectorKey(nodeConnectorId ));
86 InventoryDataServiceUtil.putNodeConnector(nodeId, nodeConnectorBuilder.build());
90 * Primitive test method for {@link InventoryDataServiceUtil#readNode(org.opendaylight.yangtools.yang.binding.InstanceIdentifier)} ()}.
93 public void testReadNode(){
94 when(readOnlyTransaction.read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class))).thenReturn(Futures.immediateCheckedFuture(Optional.of(node)));
95 InstanceIdentifier<Node> instanceId = InstanceIdentifier.create(Node.class);
96 Node node = InventoryDataServiceUtil.readNode(instanceId);
100 * Test method for {@link InventoryDataServiceUtil#checkForNodes()}.
103 public void testCheckForNodes() {
104 Nodes nodes = InventoryDataServiceUtil.checkForNodes();
105 assertNotNull(nodes);
109 * Test method for {@link InventoryDataServiceUtil#readAllNodes()}.
112 public void testReadAllNodes() {
113 List<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> nodes = InventoryDataServiceUtil.readAllNodes();
114 assertNotNull(nodes);
118 * Test method for {@link InventoryDataServiceUtil#nodeUpdatedBuilderFromDataPathId(BigInteger datapathId)}.
121 public void testNodeUpdatedBuilderFromDataPathId() {
122 NodeUpdatedBuilder nodeUpdatedBuilder = InventoryDataServiceUtil.nodeUpdatedBuilderFromDataPathId(PATH_ID);
123 assertNotNull(nodeUpdatedBuilder);
127 * Test method for {@link InventoryDataServiceUtil#nodeConnectorBuilderFromDatapathIdPortNo(BigInteger datapathId,
128 * Long portNo, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion ofVersion)}.
131 public void testNodeConnectorBuilderFromDatapathIdPortNo() {
132 NodeConnectorBuilder nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
133 PORT_NO, OpenflowVersion.OF10);
134 assertNotNull(nodeConnectorBuilder);
136 nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
137 PORT_NO, OpenflowVersion.OF13);
138 assertNotNull(nodeConnectorBuilder);
140 nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
141 PORT_NO, OpenflowVersion.UNSUPPORTED);
142 assertNotNull(nodeConnectorBuilder);
146 * Test method for {@link InventoryDataServiceUtil#nodeConnectorUpdatedBuilderFromDatapathIdPortNo(BigInteger datapathId,
147 * Long portNo, OpenflowVersion ofVersion)}
150 public void testNodeConnectorUpdatedBuilderFromDatapathIdPortNo() {
151 NodeConnectorUpdatedBuilder nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
152 PORT_NO, OpenflowVersion.OF10);
153 assertNotNull(nodeConnectorUpdatedBuilder);
155 nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
156 PORT_NO, OpenflowVersion.OF13);
157 assertNotNull(nodeConnectorUpdatedBuilder);
159 nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
160 PORT_NO, OpenflowVersion.UNSUPPORTED);
161 assertNotNull(nodeConnectorUpdatedBuilder);
165 * Test method for {@link InventoryDataServiceUtil#nodeConnectorInstanceIdentifierFromDatapathIdPortno(BigInteger datapathId, Long portNo, OpenflowVersion ofVersion)}
168 public void testNodeConnectorInstanceIdentifierFromDatapathIdPortno() {
169 InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier = InventoryDataServiceUtil.nodeConnectorInstanceIdentifierFromDatapathIdPortno(BigInteger.ONE,
170 PORT_NO, OpenflowVersion.OF10);
171 assertNotNull(nodeConnectorInstanceIdentifier);
175 * Test method for {@link InventoryDataServiceUtil#nodeConnectorRefFromDatapathIdPortno(BigInteger datapathId, Long portNo, OpenflowVersion ofVersion)}
178 public void testNodeConnectorRefFromDatapathIdPortno() {
179 NodeConnectorRef nodeConnectorRef = InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(PATH_ID,
181 OpenflowVersion.OF10);
182 assertNotNull(nodeConnectorRef);
184 nodeConnectorRef = InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(PATH_ID,
186 OpenflowVersion.OF13);
187 assertNotNull(nodeConnectorRef);
191 * Test method for {@link InventoryDataServiceUtil#dataPathIdFromNodeId(NodeId)}.
194 public void testDataPathIdFromNodeId() {
195 String string = "openflow:";
196 NodeId[] nodeIds = new NodeId[]{
197 // 0x00000000 000004d2
198 new NodeId(string + "1234"),
199 // 0x8db2089e 01391a86
200 new NodeId(string + "10210232779920710278"),
201 // 0xffffffff ffffffff
202 new NodeId(string + "18446744073709551615"),
205 long[] expectedDPIDs = new long[]{
207 -8236511293788841338L,
211 for (int i = 0; i < nodeIds.length; i++) {
212 BigInteger datapathId = InventoryDataServiceUtil.dataPathIdFromNodeId(nodeIds[i]);
213 Assert.assertEquals(expectedDPIDs[i], datapathId.longValue());
218 * Test method for {@link InventoryDataServiceUtil#bigIntegerToPaddedHex(BigInteger)}.
221 public void testLongToPaddedHex() {
222 BigInteger[] dpids = new BigInteger[]{
223 // 0x00000000 000004d2
224 new BigInteger("1234"),
225 // 0x8db2089e 01391a86
226 new BigInteger("10210232779920710278"),
227 // 0xffffffff ffffffff
228 new BigInteger("18446744073709551615"),
231 String[] expectedPaddedHexes = new String[]{
237 for (int i = 0; i < dpids.length; i++) {
238 String datapathIdHex = InventoryDataServiceUtil.bigIntegerToPaddedHex(dpids[i]);
239 Assert.assertEquals(expectedPaddedHexes[i], datapathIdHex);
244 * Test method for {@link InventoryDataServiceUtil#portNoStringfromNodeConnectorID(String)}.
247 public void testNodeConnectorIDToPortNoString() {
248 String[] nodeConnectorIDs = new String[]{
252 "openflow:628192264910264962"
255 String[] expectedPortNoStrings = new String[]{
262 for (int i = 0; i < nodeConnectorIDs.length; i++) {
263 String portNoString = InventoryDataServiceUtil.portNoStringfromNodeConnectorID(nodeConnectorIDs[i]);
264 Assert.assertEquals(expectedPortNoStrings[i], portNoString);