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;
13 import com.google.common.base.Optional;
14 import com.google.common.util.concurrent.Futures;
15 import java.math.BigInteger;
16 import java.util.List;
17 import org.junit.Assert;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.junit.runner.RunWith;
21 import org.mockito.Mockito;
22 import org.mockito.MockitoAnnotations;
23 import org.mockito.runners.MockitoJUnitRunner;
24 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
25 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
26 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
27 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
28 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
29 import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdatedBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdatedBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValuesV10;
42 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
47 @RunWith(MockitoJUnitRunner.class)
48 public class InventoryDataServiceUtilTest {
51 private static final long PORT_NO = (long) PortNumberValuesV10.CONTROLLER.getIntValue();
52 private static final BigInteger PATH_ID = BigInteger.TEN;
54 @MockitoAnnotations.Mock
55 DataBroker dataBroker;
56 @MockitoAnnotations.Mock
57 ReadOnlyTransaction readOnlyTransaction;
58 @MockitoAnnotations.Mock
59 ReadWriteTransaction readWriteTransaction;
60 @MockitoAnnotations.Mock
62 @MockitoAnnotations.Mock
67 public void setupEnvironment() {
68 when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
69 when(readOnlyTransaction.read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class))).thenReturn(Futures.immediateCheckedFuture(Optional.of(nodes)));
71 OpenflowPortsUtil.init();
72 OFSessionUtil.getSessionManager().setDataBroker(dataBroker);
78 * 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)} ()}.
80 public void testPutNodeConnector(){
81 when(dataBroker.newReadWriteTransaction()).thenReturn(readWriteTransaction);
83 NodeId nodeId = new NodeId("1");
84 NodeConnectorBuilder nodeConnectorBuilder = new NodeConnectorBuilder();
85 NodeConnectorId nodeConnectorId = new NodeConnectorId("1");
86 nodeConnectorBuilder.setId(nodeConnectorId );
87 nodeConnectorBuilder.setKey(new NodeConnectorKey(nodeConnectorId ));
88 InventoryDataServiceUtil.putNodeConnector(nodeId, nodeConnectorBuilder.build());
92 * Primitive test method for {@link InventoryDataServiceUtil#readNode(org.opendaylight.yangtools.yang.binding.InstanceIdentifier)} ()}.
95 public void testReadNode(){
96 when(readOnlyTransaction.read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class))).thenReturn(Futures.immediateCheckedFuture(Optional.of(node)));
97 InstanceIdentifier<Node> instanceId = InstanceIdentifier.create(Node.class);
98 Node node = InventoryDataServiceUtil.readNode(instanceId);
102 * Test method for {@link InventoryDataServiceUtil#checkForNodes()}.
105 public void testCheckForNodes() {
106 Nodes nodes = InventoryDataServiceUtil.checkForNodes();
107 assertNotNull(nodes);
111 * Test method for {@link InventoryDataServiceUtil#readAllNodes()}.
114 public void testReadAllNodes() {
115 List<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> nodes = InventoryDataServiceUtil.readAllNodes();
116 assertNotNull(nodes);
120 * Test method for {@link InventoryDataServiceUtil#nodeUpdatedBuilderFromDataPathId(BigInteger datapathId)}.
123 public void testNodeUpdatedBuilderFromDataPathId() {
124 NodeUpdatedBuilder nodeUpdatedBuilder = InventoryDataServiceUtil.nodeUpdatedBuilderFromDataPathId(PATH_ID);
125 assertNotNull(nodeUpdatedBuilder);
129 * Test method for {@link InventoryDataServiceUtil#nodeConnectorBuilderFromDatapathIdPortNo(BigInteger datapathId,
130 * Long portNo, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion ofVersion)}.
133 public void testNodeConnectorBuilderFromDatapathIdPortNo() {
134 NodeConnectorBuilder nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
135 PORT_NO, OpenflowVersion.OF10);
136 assertNotNull(nodeConnectorBuilder);
138 nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
139 PORT_NO, OpenflowVersion.OF13);
140 assertNotNull(nodeConnectorBuilder);
142 nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
143 PORT_NO, OpenflowVersion.UNSUPPORTED);
144 assertNotNull(nodeConnectorBuilder);
148 * Test method for {@link InventoryDataServiceUtil#nodeConnectorUpdatedBuilderFromDatapathIdPortNo(BigInteger datapathId,
149 * Long portNo, OpenflowVersion ofVersion)}
152 public void testNodeConnectorUpdatedBuilderFromDatapathIdPortNo() {
153 NodeConnectorUpdatedBuilder nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
154 PORT_NO, OpenflowVersion.OF10);
155 assertNotNull(nodeConnectorUpdatedBuilder);
157 nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
158 PORT_NO, OpenflowVersion.OF13);
159 assertNotNull(nodeConnectorUpdatedBuilder);
161 nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
162 PORT_NO, OpenflowVersion.UNSUPPORTED);
163 assertNotNull(nodeConnectorUpdatedBuilder);
167 * Test method for {@link InventoryDataServiceUtil#nodeConnectorInstanceIdentifierFromDatapathIdPortno(BigInteger datapathId, Long portNo, OpenflowVersion ofVersion)}
170 public void testNodeConnectorInstanceIdentifierFromDatapathIdPortno() {
171 InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier = InventoryDataServiceUtil.nodeConnectorInstanceIdentifierFromDatapathIdPortno(BigInteger.ONE,
172 PORT_NO, OpenflowVersion.OF10);
173 assertNotNull(nodeConnectorInstanceIdentifier);
177 * Test method for {@link InventoryDataServiceUtil#nodeConnectorRefFromDatapathIdPortno(BigInteger datapathId, Long portNo, OpenflowVersion ofVersion)}
180 public void testNodeConnectorRefFromDatapathIdPortno() {
181 NodeConnectorRef nodeConnectorRef = InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(PATH_ID,
183 OpenflowVersion.OF10);
184 assertNotNull(nodeConnectorRef);
186 nodeConnectorRef = InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(PATH_ID,
188 OpenflowVersion.OF13);
189 assertNotNull(nodeConnectorRef);
193 * Test method for {@link InventoryDataServiceUtil#dataPathIdFromNodeId(NodeId)}.
196 public void testDataPathIdFromNodeId() {
197 String string = "openflow:";
198 NodeId[] nodeIds = new NodeId[]{
199 // 0x00000000 000004d2
200 new NodeId(string + "1234"),
201 // 0x8db2089e 01391a86
202 new NodeId(string + "10210232779920710278"),
203 // 0xffffffff ffffffff
204 new NodeId(string + "18446744073709551615"),
207 long[] expectedDPIDs = new long[]{
209 -8236511293788841338L,
213 for (int i = 0; i < nodeIds.length; i++) {
214 BigInteger datapathId = InventoryDataServiceUtil.dataPathIdFromNodeId(nodeIds[i]);
215 Assert.assertEquals(expectedDPIDs[i], datapathId.longValue());
220 * Test method for {@link InventoryDataServiceUtil#bigIntegerToPaddedHex(BigInteger)}.
223 public void testLongToPaddedHex() {
224 BigInteger[] dpids = new BigInteger[]{
225 // 0x00000000 000004d2
226 new BigInteger("1234"),
227 // 0x8db2089e 01391a86
228 new BigInteger("10210232779920710278"),
229 // 0xffffffff ffffffff
230 new BigInteger("18446744073709551615"),
233 String[] expectedPaddedHexes = new String[]{
239 for (int i = 0; i < dpids.length; i++) {
240 String datapathIdHex = InventoryDataServiceUtil.bigIntegerToPaddedHex(dpids[i]);
241 Assert.assertEquals(expectedPaddedHexes[i], datapathIdHex);