apply checkstyle check during build for neutron-ovsdb
[groupbasedpolicy.git] / neutron-ovsdb / src / test / java / org / opendaylight / groupbasedpolicy / neutron / ovsdb / util / InventoryHelperTest.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.groupbasedpolicy.neutron.ovsdb.util;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15 import static org.mockito.Matchers.any;
16 import static org.mockito.Mockito.mock;
17 import static org.mockito.Mockito.never;
18 import static org.mockito.Mockito.verify;
19 import static org.mockito.Mockito.when;
20
21 import com.google.common.base.Optional;
22 import com.google.common.util.concurrent.CheckedFuture;
23
24 import java.util.Collections;
25
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
29 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
30 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
31 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
32 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
33 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
34 import org.opendaylight.groupbasedpolicy.neutron.ovsdb.AbstractTunnelType;
35 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfig;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.Tunnel;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelKey;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeBase;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathId;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
47 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
48 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
51 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
52 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
53
54 public class InventoryHelperTest {
55
56     private DataBroker dataBroker;
57     private ReadOnlyTransaction readTransaction;
58     private ReadWriteTransaction writeTransaction;
59
60     private CheckedFuture<Optional<OvsdbTerminationPointAugmentation>, ReadFailedException> terminationPointFuture;
61     private CheckedFuture<Optional<OvsdbBridgeAugmentation>, ReadFailedException> bridgeFuture;
62     private CheckedFuture<Optional<OfOverlayNodeConfig>, ReadFailedException> nodeConfigFuture;
63
64     private Optional<OvsdbTerminationPointAugmentation> terminationPointOptional;
65     private Optional<OvsdbBridgeAugmentation> bridgeOptional;
66     private Optional<OfOverlayNodeConfig> nodeConfigOptional;
67
68     private InstanceIdentifier<OvsdbTerminationPointAugmentation> ovsdbTpIid;
69     private String nodeIdString = "nodeIdString";
70
71     @SuppressWarnings("unchecked")
72     @Before
73     public void init() throws Exception {
74         dataBroker = mock(DataBroker.class);
75
76         terminationPointFuture = mock(CheckedFuture.class);
77         terminationPointOptional = mock(Optional.class);
78         when(terminationPointFuture.checkedGet()).thenReturn(terminationPointOptional);
79         bridgeFuture = mock(CheckedFuture.class);
80         bridgeOptional = mock(Optional.class);
81         when(bridgeFuture.checkedGet()).thenReturn(bridgeOptional);
82         nodeConfigFuture = mock(CheckedFuture.class);
83         nodeConfigOptional = mock(Optional.class);
84         when(nodeConfigFuture.checkedGet()).thenReturn(nodeConfigOptional);
85
86         readTransaction = mock(ReadOnlyTransaction.class);
87         writeTransaction = mock(ReadWriteTransaction.class);
88         when(dataBroker.newReadOnlyTransaction()).thenReturn(readTransaction);
89         when(dataBroker.newReadWriteTransaction()).thenReturn(writeTransaction);
90         ovsdbTpIid = InstanceIdentifier.create(NetworkTopology.class)
91             .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
92             .child(Node.class)
93             .child(TerminationPoint.class)
94             .augmentation(OvsdbTerminationPointAugmentation.class);
95     }
96
97     @Test
98     public void testGetLongFromDpid() {
99         String dpid = "FF:FF:FF:FF:FF:FF:FF:FF";
100         Long result = InventoryHelper.getLongFromDpid(dpid);
101         assertEquals(Long.valueOf(281474976710655L), result);
102     }
103
104     @Test
105     public void testGetInventoryNodeIdString() throws Exception {
106         OvsdbBridgeAugmentation ovsdbBridge = mock(OvsdbBridgeAugmentation.class);
107
108         DatapathId datapathId = mock(DatapathId.class);
109         when(ovsdbBridge.getDatapathId()).thenReturn(datapathId);
110         when(datapathId.getValue()).thenReturn("FF:FF:FF:FF:FF:FF:FF:FF");
111
112         String result = InventoryHelper.getInventoryNodeIdString(ovsdbBridge, ovsdbTpIid, dataBroker);
113         assertEquals("openflow:281474976710655", result);
114     }
115
116     @SuppressWarnings("unchecked")
117     @Test
118     public void testGetInventoryNodeIdString_DpidNull() throws Exception {
119         OvsdbBridgeAugmentation ovsdbBridge = mock(OvsdbBridgeAugmentation.class);
120
121         when(readTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
122             .thenReturn(bridgeFuture);
123         when(bridgeOptional.isPresent()).thenReturn(true);
124         OvsdbBridgeAugmentation bridge = mock(OvsdbBridgeAugmentation.class);
125         when(bridgeOptional.get()).thenReturn(bridge);
126         when(bridge.getDatapathId()).thenReturn(null);
127
128         String result = InventoryHelper.getInventoryNodeIdString(ovsdbBridge, ovsdbTpIid, dataBroker);
129         assertNull(result);
130     }
131
132     @Test
133     public void testGetInventoryNodeConnectorIdString() {
134         String inventoryNodeId = "openflow:inventoryNodeId";
135         OvsdbTerminationPointAugmentation ovsdbTp = mock(OvsdbTerminationPointAugmentation.class);
136         when(ovsdbTp.getOfport()).thenReturn(65534L);
137
138         String result =
139                 InventoryHelper.getInventoryNodeConnectorIdString(inventoryNodeId, ovsdbTp, ovsdbTpIid, dataBroker);
140         assertEquals("openflow:inventoryNodeId:65534", result);
141     }
142
143     @Test
144     public void testGetInventoryNodeConnectorIdString_IncorrectFormat() {
145         String inventoryNodeId = "inventoryNodeId";
146         OvsdbTerminationPointAugmentation ovsdbTp = mock(OvsdbTerminationPointAugmentation.class);
147         when(ovsdbTp.getOfport()).thenReturn(65534L);
148
149         String result =
150                 InventoryHelper.getInventoryNodeConnectorIdString(inventoryNodeId, ovsdbTp, ovsdbTpIid, dataBroker);
151         assertNull(result);
152     }
153
154     @Test
155     public void testGetInventoryNodeConnectorIdString_OfportNull() throws Exception {
156         String inventoryNodeId = "openflow:inventoryNodeId";
157         OvsdbTerminationPointAugmentation ovsdbTp = mock(OvsdbTerminationPointAugmentation.class);
158         when(ovsdbTp.getOfport()).thenReturn(65535L);
159
160         String result =
161                 InventoryHelper.getInventoryNodeConnectorIdString(inventoryNodeId, ovsdbTp, ovsdbTpIid, dataBroker);
162         assertNull(result);
163     }
164
165     @SuppressWarnings("unchecked")
166     @Test
167     public void testGetInventoryNodeConnectorIdString_OfportOver() throws Exception {
168         String inventoryNodeId = "openflow:inventoryNodeId";
169         OvsdbTerminationPointAugmentation ovsdbTp = mock(OvsdbTerminationPointAugmentation.class);
170         when(ovsdbTp.getOfport()).thenReturn(null);
171
172         when(readTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
173             .thenReturn(terminationPointFuture);
174         when(terminationPointOptional.isPresent()).thenReturn(true);
175         OvsdbTerminationPointAugmentation readOvsdbTp = mock(OvsdbTerminationPointAugmentation.class);
176         when(terminationPointOptional.get()).thenReturn(readOvsdbTp);
177
178         when(readOvsdbTp.getOfport()).thenReturn(65534L);
179
180         String result =
181                 InventoryHelper.getInventoryNodeConnectorIdString(inventoryNodeId, ovsdbTp, ovsdbTpIid, dataBroker);
182         assertEquals("openflow:inventoryNodeId:65534", result);
183     }
184
185     @SuppressWarnings("unchecked")
186     @Test
187     public void testGetInventoryNodeConnectorIdString_OfportNull_AugmentationOfportNull() throws Exception {
188         String inventoryNodeId = "openflow:inventoryNodeId";
189         OvsdbTerminationPointAugmentation ovsdbTp = mock(OvsdbTerminationPointAugmentation.class);
190         when(ovsdbTp.getOfport()).thenReturn(null);
191
192         when(readTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
193             .thenReturn(terminationPointFuture);
194         when(terminationPointOptional.isPresent()).thenReturn(true);
195         OvsdbTerminationPointAugmentation readOvsdbTp = mock(OvsdbTerminationPointAugmentation.class);
196         when(terminationPointOptional.get()).thenReturn(readOvsdbTp);
197         when(readOvsdbTp.getOfport()).thenReturn(null);
198
199         String result =
200                 InventoryHelper.getInventoryNodeConnectorIdString(inventoryNodeId, ovsdbTp, ovsdbTpIid, dataBroker);
201         assertNull(result);
202     }
203
204     @SuppressWarnings("unchecked")
205     @Test
206     public void testGetInventoryNodeConnectorIdString_OfportNull_AugmentationOfportOver() throws Exception {
207         String inventoryNodeId = "openflow:inventoryNodeId";
208         OvsdbTerminationPointAugmentation ovsdbTp = mock(OvsdbTerminationPointAugmentation.class);
209         when(ovsdbTp.getOfport()).thenReturn(null);
210
211         when(readTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
212             .thenReturn(terminationPointFuture);
213         OvsdbTerminationPointAugmentation readOvsdbTp = mock(OvsdbTerminationPointAugmentation.class);
214         when(terminationPointOptional.get()).thenReturn(readOvsdbTp);
215         when(readOvsdbTp.getOfport()).thenReturn(65535L);
216
217         String result =
218                 InventoryHelper.getInventoryNodeConnectorIdString(inventoryNodeId, ovsdbTp, ovsdbTpIid, dataBroker);
219         assertNull(result);
220     }
221
222     @SuppressWarnings({"unchecked", "rawtypes"})
223     @Test
224     public void testCheckOfOverlayConfig() throws Exception {
225         AbstractTunnelType abstractTunnelType = mock(AbstractTunnelType.class);
226
227         when(writeTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
228             .thenReturn(nodeConfigFuture);
229         when(nodeConfigOptional.isPresent()).thenReturn(true);
230         OfOverlayNodeConfig overlayConfig = mock(OfOverlayNodeConfig.class);
231         when(nodeConfigOptional.get()).thenReturn(overlayConfig);
232
233         Tunnel tunnel = mock(Tunnel.class);
234         when(overlayConfig.getTunnel()).thenReturn(Collections.singletonList(tunnel));
235
236         when(abstractTunnelType.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class);
237         when(tunnel.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class);
238
239         boolean result = InventoryHelper.checkOfOverlayConfig(nodeIdString,
240                 Collections.singletonList(abstractTunnelType), dataBroker);
241         assertTrue(result);
242     }
243
244     @SuppressWarnings({"unchecked", "rawtypes"})
245     @Test
246     public void testCheckOfOverlayConfig_TunnelTypeEqualsFalse() throws Exception {
247         AbstractTunnelType abstractTunnelType = mock(AbstractTunnelType.class);
248
249         when(writeTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
250             .thenReturn(nodeConfigFuture);
251         when(nodeConfigOptional.isPresent()).thenReturn(true);
252         OfOverlayNodeConfig overlayConfig = mock(OfOverlayNodeConfig.class);
253         when(nodeConfigOptional.get()).thenReturn(overlayConfig);
254
255         Tunnel tunnel = mock(Tunnel.class);
256         when(overlayConfig.getTunnel()).thenReturn(Collections.singletonList(tunnel));
257
258         when(abstractTunnelType.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class);
259         when(tunnel.getTunnelType()).thenReturn((Class) TunnelTypeBase.class);
260
261         boolean result = InventoryHelper.checkOfOverlayConfig(nodeIdString,
262                 Collections.singletonList(abstractTunnelType), dataBroker);
263         assertFalse(result);
264     }
265
266     @SuppressWarnings({"unchecked", "unused"})
267     @Test
268     public void testCheckOfOverlayConfig_ConfigNull() throws Exception {
269         AbstractTunnelType abstractTunnelType = mock(AbstractTunnelType.class);
270
271         when(writeTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
272             .thenReturn(nodeConfigFuture);
273         when(nodeConfigOptional.isPresent()).thenReturn(true);
274         OfOverlayNodeConfig overlayConfig = mock(OfOverlayNodeConfig.class);
275         when(nodeConfigOptional.get()).thenReturn(null);
276
277         boolean result = InventoryHelper.checkOfOverlayConfig(nodeIdString,
278                 Collections.singletonList(abstractTunnelType), dataBroker);
279         assertFalse(result);
280     }
281
282     @SuppressWarnings("unchecked")
283     @Test
284     public void testCheckOfOverlayConfig_TunnelNull() throws Exception {
285         AbstractTunnelType abstractTunnelType = mock(AbstractTunnelType.class);
286
287         when(writeTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
288             .thenReturn(nodeConfigFuture);
289         when(nodeConfigOptional.isPresent()).thenReturn(true);
290         OfOverlayNodeConfig overlayConfig = mock(OfOverlayNodeConfig.class);
291         when(nodeConfigOptional.get()).thenReturn(overlayConfig);
292
293         when(overlayConfig.getTunnel()).thenReturn(null);
294
295         boolean result = InventoryHelper.checkOfOverlayConfig(nodeIdString,
296                 Collections.singletonList(abstractTunnelType), dataBroker);
297         assertFalse(result);
298     }
299
300     @SuppressWarnings("unchecked")
301     @Test
302     public void testAddOfOverlayExternalPort() throws Exception {
303         NodeId nodeId = mock(NodeId.class);
304         NodeConnectorId ncId = mock(NodeConnectorId.class);
305         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
306         when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
307         CheckedFuture<Void, TransactionCommitFailedException> submitFuture = mock(CheckedFuture.class);
308         when(transaction.submit()).thenReturn(submitFuture);
309
310         InventoryHelper.addOfOverlayExternalPort(nodeId, ncId, dataBroker);
311         verify(submitFuture).checkedGet();
312     }
313
314     @SuppressWarnings("unchecked")
315     @Test
316     public void testGetOfOverlayConfig() throws Exception {
317         when(writeTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
318             .thenReturn(nodeConfigFuture);
319         when(nodeConfigOptional.isPresent()).thenReturn(true);
320         OfOverlayNodeConfig overlayConfig = mock(OfOverlayNodeConfig.class);
321         when(nodeConfigOptional.get()).thenReturn(overlayConfig);
322
323         assertEquals(overlayConfig, InventoryHelper.getOfOverlayConfig(nodeIdString, dataBroker));
324     }
325
326     @SuppressWarnings({"unchecked", "rawtypes"})
327     @Test
328     public void testUpdateOfOverlayConfig() throws Exception {
329         AbstractTunnelType tunnelType = mock(AbstractTunnelType.class);
330
331         when(writeTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
332             .thenReturn(nodeConfigFuture);
333         when(nodeConfigOptional.isPresent()).thenReturn(true);
334         OfOverlayNodeConfig overlayConfig = mock(OfOverlayNodeConfig.class);
335         when(nodeConfigOptional.get()).thenReturn(overlayConfig);
336
337         Tunnel tunnel = mock(Tunnel.class);
338         when(overlayConfig.getTunnel()).thenReturn(Collections.singletonList(tunnel));
339         when(tunnelType.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class);
340         when(tunnel.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class);
341         when(tunnel.getKey()).thenReturn(mock(TunnelKey.class));
342
343         CheckedFuture<Void, TransactionCommitFailedException> submitFuture = mock(CheckedFuture.class);
344         when(writeTransaction.submit()).thenReturn(submitFuture);
345
346         IpAddress ip = mock(IpAddress.class);
347         String nodeConnectorIdString = "nodeConnectorIdString";
348         InventoryHelper.updateOfOverlayConfig(ip, nodeIdString, nodeConnectorIdString, tunnelType, dataBroker);
349         verify(writeTransaction).submit();
350     }
351
352     @Test
353     public void testUpdateOfOverlayConfig_NullParameters() throws Exception {
354         IpAddress ip = mock(IpAddress.class);
355         String nodeConnectorIdString = "nodeConnectorIdString";
356         AbstractTunnelType tunnelType = mock(AbstractTunnelType.class);
357
358         InventoryHelper.updateOfOverlayConfig(null, nodeIdString, nodeConnectorIdString, tunnelType, dataBroker);
359         InventoryHelper.updateOfOverlayConfig(ip, null, nodeConnectorIdString, tunnelType, dataBroker);
360         InventoryHelper.updateOfOverlayConfig(ip, nodeIdString, null, tunnelType, dataBroker);
361         verify(writeTransaction, never()).submit();
362     }
363
364     @SuppressWarnings("unchecked")
365     @Test
366     public void testUpdateOfOverlayConfig_OfConfigNull() throws Exception {
367         when(writeTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
368             .thenReturn(nodeConfigFuture);
369         when(nodeConfigOptional.isPresent()).thenReturn(false);
370
371         CheckedFuture<Void, TransactionCommitFailedException> submitFuture = mock(CheckedFuture.class);
372         when(writeTransaction.submit()).thenReturn(submitFuture);
373
374         IpAddress ip = mock(IpAddress.class);
375         String nodeConnectorIdString = "nodeConnectorIdString";
376         AbstractTunnelType tunnelType = mock(AbstractTunnelType.class);
377         InventoryHelper.updateOfOverlayConfig(ip, nodeIdString, nodeConnectorIdString, tunnelType, dataBroker);
378         verify(writeTransaction).submit();
379     }
380
381     @SuppressWarnings({"unchecked", "rawtypes"})
382     @Test
383     public void testRemoveTunnelsOfOverlayConfig_TunnelTypeEqualsFalse() throws Exception {
384         AbstractTunnelType tunnelType = mock(AbstractTunnelType.class);
385
386         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
387         when(dataBroker.newReadWriteTransaction()).thenReturn(transaction);
388         CheckedFuture<Optional<OfOverlayNodeConfig>, ReadFailedException> checkedFuture = mock(CheckedFuture.class);
389         when(transaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
390             .thenReturn(checkedFuture);
391         Optional<OfOverlayNodeConfig> optionalOverlayConfig = mock(Optional.class);
392         when(checkedFuture.checkedGet()).thenReturn(optionalOverlayConfig);
393         when(optionalOverlayConfig.isPresent()).thenReturn(true);
394         OfOverlayNodeConfig overlayConfig = mock(OfOverlayNodeConfig.class);
395         when(optionalOverlayConfig.get()).thenReturn(overlayConfig);
396
397         Tunnel overlayTunnel = mock(Tunnel.class);
398         when(overlayConfig.getTunnel()).thenReturn(Collections.singletonList(overlayTunnel));
399         when(tunnelType.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class);
400         when(overlayTunnel.getTunnelType()).thenReturn(null);
401
402         InventoryHelper.removeTunnelsOfOverlayConfig(nodeIdString, Collections.singletonList(tunnelType), dataBroker);
403         verify(writeTransaction, never()).submit();
404     }
405 }