Bug 2369: Fixed NPE in update-flow RPC.
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / util / InventoryDataServiceUtilTest.java
1 /**
2  * Copyright (c) 2013 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 package org.opendaylight.openflowplugin.openflow.md.util;
9
10 import static org.junit.Assert.assertNotNull;
11 import static org.mockito.Mockito.when;
12
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;
43
44 /**
45  *
46  */
47 @RunWith(MockitoJUnitRunner.class)
48 public class InventoryDataServiceUtilTest {
49
50
51     private static final long PORT_NO = (long) PortNumberValuesV10.CONTROLLER.getIntValue();
52     private static final BigInteger PATH_ID = BigInteger.TEN;
53
54     @MockitoAnnotations.Mock
55     DataBroker dataBroker;
56     @MockitoAnnotations.Mock
57     ReadOnlyTransaction readOnlyTransaction;
58     @MockitoAnnotations.Mock
59     ReadWriteTransaction readWriteTransaction;
60     @MockitoAnnotations.Mock
61     Nodes nodes;
62     @MockitoAnnotations.Mock
63     Node node;
64
65
66     @Before
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)));
70
71         OpenflowPortsUtil.init();
72         OFSessionUtil.getSessionManager().setDataBroker(dataBroker);
73
74     }
75
76     @Test
77     /**
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)} ()}.
79      */
80     public void testPutNodeConnector(){
81         when(dataBroker.newReadWriteTransaction()).thenReturn(readWriteTransaction);
82
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());
89     }
90
91     /**
92      * Primitive test method for {@link InventoryDataServiceUtil#readNode(org.opendaylight.yangtools.yang.binding.InstanceIdentifier)} ()}.
93      */
94     @Test
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);
99         assertNotNull(node);
100     }
101     /**
102      * Test method for {@link InventoryDataServiceUtil#checkForNodes()}.
103      */
104     @Test
105     public void testCheckForNodes() {
106         Nodes nodes = InventoryDataServiceUtil.checkForNodes();
107         assertNotNull(nodes);
108     }
109
110     /**
111      * Test method for {@link InventoryDataServiceUtil#readAllNodes()}.
112      */
113     @Test
114     public void testReadAllNodes() {
115         List<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> nodes = InventoryDataServiceUtil.readAllNodes();
116         assertNotNull(nodes);
117     }
118
119     /**
120      * Test method for {@link InventoryDataServiceUtil#nodeUpdatedBuilderFromDataPathId(BigInteger datapathId)}.
121      */
122     @Test
123     public void testNodeUpdatedBuilderFromDataPathId() {
124         NodeUpdatedBuilder nodeUpdatedBuilder = InventoryDataServiceUtil.nodeUpdatedBuilderFromDataPathId(PATH_ID);
125         assertNotNull(nodeUpdatedBuilder);
126     }
127
128     /**
129      * Test method for {@link InventoryDataServiceUtil#nodeConnectorBuilderFromDatapathIdPortNo(BigInteger datapathId,
130      * Long portNo, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion ofVersion)}.
131      */
132     @Test
133     public void testNodeConnectorBuilderFromDatapathIdPortNo() {
134         NodeConnectorBuilder nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
135                 PORT_NO, OpenflowVersion.OF10);
136         assertNotNull(nodeConnectorBuilder);
137
138         nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
139                 PORT_NO, OpenflowVersion.OF13);
140         assertNotNull(nodeConnectorBuilder);
141
142         nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
143                 PORT_NO, OpenflowVersion.UNSUPPORTED);
144         assertNotNull(nodeConnectorBuilder);
145     }
146
147     /**
148      * Test method for {@link InventoryDataServiceUtil#nodeConnectorUpdatedBuilderFromDatapathIdPortNo(BigInteger datapathId,
149      * Long portNo, OpenflowVersion ofVersion)}
150      */
151     @Test
152     public void testNodeConnectorUpdatedBuilderFromDatapathIdPortNo() {
153         NodeConnectorUpdatedBuilder nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
154                 PORT_NO, OpenflowVersion.OF10);
155         assertNotNull(nodeConnectorUpdatedBuilder);
156
157         nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
158                 PORT_NO, OpenflowVersion.OF13);
159         assertNotNull(nodeConnectorUpdatedBuilder);
160
161         nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
162                 PORT_NO, OpenflowVersion.UNSUPPORTED);
163         assertNotNull(nodeConnectorUpdatedBuilder);
164     }
165
166     /**
167      * Test method for {@link InventoryDataServiceUtil#nodeConnectorInstanceIdentifierFromDatapathIdPortno(BigInteger datapathId, Long portNo, OpenflowVersion ofVersion)}
168      */
169     @Test
170     public void testNodeConnectorInstanceIdentifierFromDatapathIdPortno() {
171         InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier = InventoryDataServiceUtil.nodeConnectorInstanceIdentifierFromDatapathIdPortno(BigInteger.ONE,
172                 PORT_NO, OpenflowVersion.OF10);
173         assertNotNull(nodeConnectorInstanceIdentifier);
174     }
175
176     /**
177      * Test method for {@link InventoryDataServiceUtil#nodeConnectorRefFromDatapathIdPortno(BigInteger datapathId, Long portNo, OpenflowVersion ofVersion)}
178      */
179     @Test
180     public void testNodeConnectorRefFromDatapathIdPortno() {
181         NodeConnectorRef nodeConnectorRef = InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(PATH_ID,
182                 PORT_NO,
183                 OpenflowVersion.OF10);
184         assertNotNull(nodeConnectorRef);
185
186         nodeConnectorRef = InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(PATH_ID,
187                 PORT_NO,
188                 OpenflowVersion.OF13);
189         assertNotNull(nodeConnectorRef);
190     }
191
192     /**
193      * Test method for {@link InventoryDataServiceUtil#dataPathIdFromNodeId(NodeId)}.
194      */
195     @Test
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"),
205         };
206
207         long[] expectedDPIDs = new long[]{
208                 1234L,
209                 -8236511293788841338L,
210                 -1L
211         };
212
213         for (int i = 0; i < nodeIds.length; i++) {
214             BigInteger datapathId = InventoryDataServiceUtil.dataPathIdFromNodeId(nodeIds[i]);
215             Assert.assertEquals(expectedDPIDs[i], datapathId.longValue());
216         }
217     }
218
219     /**
220      * Test method for {@link InventoryDataServiceUtil#bigIntegerToPaddedHex(BigInteger)}.
221      */
222     @Test
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"),
231         };
232
233         String[] expectedPaddedHexes = new String[]{
234                 "00000000000004d2",
235                 "8db2089e01391a86",
236                 "ffffffffffffffff"
237         };
238
239         for (int i = 0; i < dpids.length; i++) {
240             String datapathIdHex = InventoryDataServiceUtil.bigIntegerToPaddedHex(dpids[i]);
241             Assert.assertEquals(expectedPaddedHexes[i], datapathIdHex);
242         }
243     }
244
245
246 }