2 * Copyright (c) 2016 CableLabs 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
9 package org.opendaylight.unimgr.utils;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Matchers.any;
15 import static org.mockito.Matchers.argThat;
16 import static org.mockito.Matchers.eq;
17 import static org.mockito.Mockito.doNothing;
18 import static org.mockito.Mockito.mock;
19 import static org.mockito.Mockito.times;
20 import static org.mockito.Mockito.verify;
21 import static org.mockito.Mockito.when;
23 import java.net.InetAddress;
24 import java.net.UnknownHostException;
25 import java.util.ArrayList;
26 import java.util.HashMap;
27 import java.util.HashSet;
28 import java.util.List;
30 import java.util.UUID;
32 import org.junit.Before;
33 import org.junit.Rule;
34 import org.junit.Test;
35 import org.junit.rules.ExpectedException;
36 import org.junit.runner.RunWith;
37 import org.mockito.ArgumentMatcher;
38 import org.mockito.Mock;
39 import org.mockito.Mockito;
40 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
41 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
42 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
43 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
44 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
45 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
46 import org.opendaylight.unimgr.impl.UnimgrConstants;
47 import org.opendaylight.unimgr.impl.UnimgrMapper;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes.VlanMode;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder;
73 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
74 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
75 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
76 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
77 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
78 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
79 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
80 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
81 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
82 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
83 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
84 import org.opendaylight.yangtools.yang.binding.DataObject;
85 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
86 import org.powermock.api.mockito.PowerMockito;
87 import org.powermock.api.support.membermodification.MemberMatcher;
88 import org.powermock.api.support.membermodification.MemberModifier;
89 import org.powermock.core.classloader.annotations.PrepareForTest;
90 import org.powermock.modules.junit4.PowerMockRunner;
91 import org.slf4j.Logger;
92 import org.slf4j.LoggerFactory;
94 import com.google.common.base.Optional;
95 import com.google.common.collect.ImmutableBiMap;
96 import com.google.common.util.concurrent.CheckedFuture;
98 import ch.qos.logback.classic.spi.LoggingEvent;
99 import ch.qos.logback.core.Appender;
101 @RunWith(PowerMockRunner.class)
102 @PrepareForTest({LogicalDatastoreType.class, UnimgrMapper.class, OvsdbUtils.class, MdsalUtils.class, UUID.class})
103 public class OvsdbUtilsTest {
106 public final ExpectedException exception = ExpectedException.none();
107 @Mock private DataBroker dataBroker;
108 @Mock private Node bridgeNode;
109 @Mock private String bridgeName;
110 @Mock private String portName;
111 @Mock private String type;
112 @Mock private WriteTransaction transaction;
113 @Mock private IpAddress mockIp;
114 @SuppressWarnings("rawtypes")
115 @Mock private Appender mockAppender;
116 @SuppressWarnings({ "rawtypes" })
117 @Mock private CheckedFuture checkedFuture;
118 @SuppressWarnings("unchecked")
119 private static final InstanceIdentifier<TerminationPoint> tpIid = PowerMockito.mock(InstanceIdentifier.class);
120 private static final IpAddress IP = new IpAddress(new Ipv4Address("192.168.1.2"));
121 private static final NodeId OVSDB_NODE_ID = new NodeId("ovsdb://7011db35-f44b-4aab-90f6-d89088caf9d8");
122 @SuppressWarnings("unchecked")
123 private static final InstanceIdentifier<Node> MOCK_NODE_IID = PowerMockito.mock(InstanceIdentifier.class);
124 private ch.qos.logback.classic.Logger root;
126 @SuppressWarnings("unchecked")
128 public void setUp() throws Exception {
129 PowerMockito.mockStatic(OvsdbUtils.class, Mockito.CALLS_REAL_METHODS);
130 PowerMockito.mockStatic(MdsalUtils.class, Mockito.CALLS_REAL_METHODS);
131 PowerMockito.mockStatic(UnimgrMapper.class, Mockito.CALLS_REAL_METHODS);
132 PowerMockito.mockStatic(LogicalDatastoreType.class);
133 PowerMockito.mockStatic(UUID.class);
134 root = (ch.qos.logback.classic.Logger)
135 LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
136 // Check logger messages
137 when(mockAppender.getName()).thenReturn("MOCK");
138 root.addAppender(mockAppender);
142 * This test for 2 functions with the
143 * same name that take different parameters.
145 @SuppressWarnings({"unchecked", "rawtypes"})
147 public void testCreateBridgeNode() throws Exception {
149 Node ovsdbNode = new NodeBuilder().setNodeId(OVSDB_NODE_ID).build();
150 InstanceIdentifier<Node> nodeIid = InstanceIdentifier
151 .create(NetworkTopology.class)
152 .child(Topology.class,
153 new TopologyKey(UnimgrConstants.OVSDB_TOPOLOGY_ID))
155 new NodeKey(OVSDB_NODE_ID));
156 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(nodeIid);
157 UniAugmentation uni = new UniAugmentationBuilder()
158 .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.1")))
159 .setOvsdbNodeRef(ovsdbNodeRef)
162 when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
163 doNothing().when(transaction).put(any(LogicalDatastoreType.class),
164 any(InstanceIdentifier.class),
166 when(transaction.submit()).thenReturn(checkedFuture);
167 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "createOvsdbBridgeNodeIid", Node.class, String.class));
168 when(UnimgrMapper.createOvsdbBridgeNodeIid(any(Node.class),
169 any(String.class))).thenReturn(MOCK_NODE_IID);
170 OvsdbUtils.createBridgeNode(dataBroker, ovsdbNode, uni, "br0");
171 verify(transaction).put(any(LogicalDatastoreType.class),
172 any(InstanceIdentifier.class),
174 verify(transaction).submit();
177 MemberModifier.suppress(MemberMatcher.method(MdsalUtils.class,
180 LogicalDatastoreType.class,
181 InstanceIdentifier.class));
182 Optional<Node> mockOptional = mock(Optional.class);
183 when(MdsalUtils.readNode(any(DataBroker.class),
184 any(LogicalDatastoreType.class),
185 any(InstanceIdentifier.class))).thenReturn(mockOptional);
186 OvsdbUtils.createBridgeNode(dataBroker, nodeIid, uni, "br0");
187 verify(transaction).put(any(LogicalDatastoreType.class),
188 any(InstanceIdentifier.class),
190 verify(transaction).submit();
192 // Ensure correct logging
193 verify(mockAppender, times(2)).doAppend(argThat(new ArgumentMatcher() {
195 public boolean matches(final Object argument) {
196 return ((LoggingEvent)argument).getFormattedMessage().contains("Creating a bridge on node");
202 public void testCreateControllerEntries() {
203 String targetString = new String("controllerEntry");
204 List<ControllerEntry> controllerEntries = new ArrayList<ControllerEntry>();
205 ControllerEntryBuilder controllerEntryBuilder = new ControllerEntryBuilder();
206 controllerEntryBuilder.setTarget(new Uri(targetString));
207 controllerEntries.add(controllerEntryBuilder.build());
208 assertEquals(controllerEntries, OvsdbUtils.createControllerEntries(targetString));
211 @SuppressWarnings("unchecked")
213 public void testCreateGreTunnel() throws Exception {
215 UniAugmentation sourceUniAug = new UniAugmentationBuilder()
216 .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.1")))
218 UniAugmentation destUniAug = new UniAugmentationBuilder()
219 .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2")))
222 when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
223 doNothing().when(transaction).put(any(LogicalDatastoreType.class),
224 any(InstanceIdentifier.class),
225 any(TerminationPoint.class));
226 when(transaction.submit()).thenReturn(checkedFuture);
228 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getTerminationPointIid", Node.class, String.class));
229 MemberModifier.suppress(MemberMatcher.method(OvsdbUtils.class, "createMdsalProtocols"));
231 Node bNode = new NodeBuilder().setKey(new NodeKey(OVSDB_NODE_ID)).build();
232 InstanceIdentifier<TerminationPoint> tpIid = InstanceIdentifier
233 .create(NetworkTopology.class)
234 .child(Topology.class,
235 new TopologyKey(UnimgrConstants.OVSDB_TOPOLOGY_ID))
236 .child(Node.class, bNode.getKey())
237 .child(TerminationPoint.class,
238 new TerminationPointKey(new TpId(portName)));
239 when(UnimgrMapper.getTerminationPointIid(any(Node.class), any(String.class))).thenReturn(tpIid);
240 OvsdbUtils.createGreTunnel(dataBroker,
246 verify(transaction).put(any(LogicalDatastoreType.class),
247 any(InstanceIdentifier.class),
248 any(TerminationPoint.class));
249 verify(transaction).submit();
253 public void testCreateMdsalProtocols() {
254 List<ProtocolEntry> protocolList = new ArrayList<ProtocolEntry>();
255 ImmutableBiMap<String, Class<? extends OvsdbBridgeProtocolBase>> mapper =
256 SouthboundConstants.OVSDB_PROTOCOL_MAP.inverse();
257 ProtocolEntry protoEntry = new ProtocolEntryBuilder().setProtocol((Class<? extends OvsdbBridgeProtocolBase>) mapper.get("OpenFlow13")).build();
258 protocolList.add(protoEntry);
259 assertEquals(protocolList, OvsdbUtils.createMdsalProtocols());
263 public void testCreateOvsdbBridgeAugmentation() throws Exception {
264 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(PowerMockito.mock(InstanceIdentifier.class));
265 UniAugmentation uni = new UniAugmentationBuilder().setOvsdbNodeRef(ovsdbNodeRef).build();
266 UUID bridgeUuid = PowerMockito.mock(UUID.class);
267 PowerMockito.when(UUID.randomUUID()).thenReturn(bridgeUuid);
268 OvsdbBridgeAugmentation ovsdbNode = new OvsdbBridgeAugmentationBuilder()
269 .setBridgeName(new OvsdbBridgeName(UnimgrConstants.DEFAULT_BRIDGE_NAME))
270 .setManagedBy(ovsdbNodeRef)
271 .setBridgeUuid(new Uuid(bridgeUuid.toString()))
273 assertEquals(ovsdbNode, OvsdbUtils.createOvsdbBridgeAugmentation(uni));
274 // Force an exception
275 Uni ovsdbNodeRefNull = new UniAugmentationBuilder().setOvsdbNodeRef(null).build();
276 exception.expect(Exception.class);
277 OvsdbUtils.createOvsdbBridgeAugmentation(ovsdbNodeRefNull);
281 * This test for 2 functions with the
282 * same name that take different parameters.
284 @SuppressWarnings({ "unchecked", "rawtypes" })
286 public void testCreateOvsdbNode() {
287 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getOvsdbNodeIid", IpAddress.class));
288 PowerMockito.when(UnimgrMapper.getOvsdbNodeIid(mockIp)).thenReturn(MOCK_NODE_IID);
289 when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
290 //when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
291 Uni uni = new UniAugmentationBuilder().setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2"))).build();
292 // createOvsdbNode with NodeId and Uni
293 OvsdbUtils.createOvsdbNode(dataBroker, OVSDB_NODE_ID, uni);
294 // Ensure correct logging
295 verify(mockAppender).doAppend(argThat(new ArgumentMatcher() {
297 public boolean matches(final Object argument) {
298 return ((LoggingEvent)argument).getFormattedMessage().contains("Created and submitted a new OVSDB node");
301 doNothing().when(transaction).put(any(LogicalDatastoreType.class),
302 any(InstanceIdentifier.class),
304 when(transaction.submit()).thenReturn(checkedFuture);
305 verify(transaction).put(any(LogicalDatastoreType.class),
306 any(InstanceIdentifier.class),
308 verify(transaction).submit();
309 // Test with a null uni
310 exception.expect(Exception.class);
311 OvsdbUtils.createOvsdbNode(dataBroker, OVSDB_NODE_ID, null);
312 // Ensure correct logging
313 verify(mockAppender).doAppend(argThat(new ArgumentMatcher() {
315 public boolean matches(final Object argument) {
316 return ((LoggingEvent)argument).getFormattedMessage().contains("Created and submitted a new OVSDB node");
319 // createOvsdbNode with Uni
320 UniAugmentation uniAug = new UniAugmentationBuilder(uni).build();
321 OvsdbUtils.createOvsdbNode(dataBroker, uniAug);
322 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getOvsdbNodeIid", NodeId.class));
323 PowerMockito.when(UnimgrMapper.getOvsdbNodeIid(any(NodeId.class))).thenReturn(MOCK_NODE_IID);
324 doNothing().when(transaction).put(any(LogicalDatastoreType.class),
325 any(InstanceIdentifier.class),
327 when(transaction.submit()).thenReturn(checkedFuture);
328 verify(transaction).put(any(LogicalDatastoreType.class),
329 any(InstanceIdentifier.class),
331 verify(transaction).submit();
332 // try with a null uni
333 PowerMockito.when(UnimgrMapper.getOvsdbNodeIid(any(NodeId.class))).thenReturn(null);
334 OvsdbUtils.createOvsdbNode(dataBroker, null);
335 exception.expect(Exception.class);
336 OvsdbUtils.createOvsdbNode(dataBroker, null);
340 public void testCreateOvsdbNodeAugmentation() {
341 Uni uni = new UniAugmentationBuilder().setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2"))).build();
342 ConnectionInfo connectionInfos = new ConnectionInfoBuilder()
343 .setRemoteIp(uni.getIpAddress())
344 .setRemotePort(new PortNumber(UnimgrConstants.OVSDB_PORT))
346 OvsdbNodeAugmentation ovsdbNode = new OvsdbNodeAugmentationBuilder()
347 .setConnectionInfo(connectionInfos).build();
348 assertEquals(ovsdbNode, OvsdbUtils.createOvsdbNodeAugmentation(uni));
352 public void testCreateOvsdbNodeId() {
353 String nodeId = UnimgrConstants.OVSDB_PREFIX
354 + IP.getIpv4Address().getValue().toString()
356 + UnimgrConstants.OVSDB_PORT;
357 assertEquals(new NodeId(nodeId), OvsdbUtils.createOvsdbNodeId(IP));
361 public void testCreateOvsdbTerminationPointAugmentation() {
362 Uni uni = new UniAugmentationBuilder().build();
363 VlanId vlanID = new VlanId(1);
364 OvsdbTerminationPointAugmentation terminationPoint = new OvsdbTerminationPointAugmentationBuilder()
365 .setName(UnimgrConstants.DEFAULT_INTERNAL_IFACE)
367 .setVlanMode(VlanMode.Access)
369 assertEquals(terminationPoint, OvsdbUtils.createOvsdbTerminationPointAugmentation(uni));
373 * This test for 2 functions with the
374 * same name that take different parameters.
376 @SuppressWarnings("unchecked")
378 public void testCreateTerminationPointNode() {
379 Uni uni = new UniAugmentationBuilder().build();
380 Node bridgeNode = new NodeBuilder().build();
382 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class,
383 "getTerminationPointIid",
386 PowerMockito.when(UnimgrMapper.getTerminationPointIid(any(Node.class),
387 any(String.class))).thenReturn(tpIid);
388 when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
389 Node bNode = new NodeBuilder().setKey(new NodeKey(OVSDB_NODE_ID)).build();
390 InstanceIdentifier<TerminationPoint> tpIid = InstanceIdentifier
391 .create(NetworkTopology.class)
392 .child(Topology.class,
393 new TopologyKey(UnimgrConstants.OVSDB_TOPOLOGY_ID))
394 .child(Node.class, bNode.getKey())
395 .child(TerminationPoint.class,
396 new TerminationPointKey(new TpId(portName)));
397 when(UnimgrMapper.getTerminationPointIid(any(Node.class), any(String.class))).thenReturn(tpIid);
399 OvsdbUtils.createTerminationPointNode(dataBroker, uni, bNode, bridgeName, portName, type);
402 doNothing().when(transaction).put(any(LogicalDatastoreType.class),
403 any(InstanceIdentifier.class),
404 any(TerminationPoint.class));
405 when(transaction.submit()).thenReturn(checkedFuture);
406 OvsdbUtils.createTerminationPointNode(dataBroker, uni, bridgeNode, bridgeName, portName);
407 verify(transaction, times(2)).put(any(LogicalDatastoreType.class),
408 any(InstanceIdentifier.class),
409 any(TerminationPoint.class));
410 verify(transaction,times(2)).submit();
413 @SuppressWarnings("unchecked")
415 public void testDeleteTerminationPoint() {
416 TerminationPointKey tpKey = new TerminationPointKey(new TpId("abcde"));
417 TerminationPoint terminationPoint = new TerminationPointBuilder().setKey(tpKey).build();
418 Node ovsdbNode = new NodeBuilder().setKey(new NodeKey(OVSDB_NODE_ID)).build();
419 when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
420 doNothing().when(transaction).delete(any(LogicalDatastoreType.class),
421 any(InstanceIdentifier.class));
423 OvsdbUtils.deleteTerminationPoint(dataBroker, terminationPoint, ovsdbNode);
424 verify(transaction,times(2)).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
425 verify(transaction,times(1)).submit();
426 CheckedFuture<Void, TransactionCommitFailedException> mockCheckedFuture = mock(CheckedFuture.class);
427 when(transaction.submit()).thenReturn(mockCheckedFuture);
428 assertEquals(mockCheckedFuture, OvsdbUtils.deleteTerminationPoint(dataBroker, terminationPoint, ovsdbNode));
432 public void testExtract() {
433 Map<InstanceIdentifier<?>, DataObject> changes = new HashMap<>();
434 Class<DataObject> klazz = DataObject.class;
435 assertEquals(HashMap.class, OvsdbUtils.extract(changes, klazz).getClass());
438 @SuppressWarnings("unchecked")
440 public void testExtractOriginal() {
441 AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes = mock(AsyncDataChangeEvent.class);
442 Class<DataObject> klazz = DataObject.class;
443 Map<InstanceIdentifier<?>, DataObject> map = new HashMap<>();
444 when(changes.getOriginalData()).thenReturn(map);
445 Map<InstanceIdentifier<DataObject>, DataObject> map1 = new HashMap<>();
446 when(OvsdbUtils.extract(any(Map.class),eq(DataObject.class))).thenReturn(map1);
447 assertEquals(map1, OvsdbUtils.extractOriginal(changes, klazz));
450 @SuppressWarnings("unchecked")
452 public void testExtractRemoved() {
453 AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes = mock(AsyncDataChangeEvent.class);
454 Class<DataObject> klazz = DataObject.class;
455 assertEquals(HashSet.class, OvsdbUtils.extractRemoved(changes, klazz).getClass());
459 public void testFindOvsdbNode() {
460 List<Node> ovsdbNodes = new ArrayList<Node>();
461 UniAugmentation uni = new UniAugmentationBuilder()
464 ConnectionInfo connInfo = new ConnectionInfoBuilder().setRemoteIp(IP).build();
465 OvsdbNodeAugmentation augmentation = new OvsdbNodeAugmentationBuilder()
466 .setConnectionInfo(connInfo)
468 Node node = new NodeBuilder().addAugmentation(OvsdbNodeAugmentation.class, augmentation).build();
469 ovsdbNodes.add(node);
470 MemberModifier.suppress(MemberMatcher.method(OvsdbUtils.class,
473 when(OvsdbUtils.getOvsdbNodes(any(DataBroker.class))).thenReturn(ovsdbNodes);
474 Optional<Node> optNode = Optional.of(node);
475 assertEquals(optNode, OvsdbUtils.findOvsdbNode(dataBroker, uni));
478 @SuppressWarnings("unchecked")
480 public void testGetConnectionInfo() {
481 DataBroker dataBroker = mock(DataBroker.class);
482 InstanceIdentifier<Node> nodeIid = PowerMockito.mock(InstanceIdentifier.class);
483 NodeId ovsdbNodeId = mock(NodeId.class);
484 Optional<Node> optNode = mock(Optional.class);
485 Node node = mock(Node.class);
486 OvsdbNodeAugmentation ovsdbNodeAugmentation = mock(OvsdbNodeAugmentation.class);
487 ConnectionInfo connectionInfo = mock(ConnectionInfo.class);
488 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getOvsdbNodeIid", NodeId.class));
489 when(UnimgrMapper.getOvsdbNodeIid(any(NodeId.class))).thenReturn(nodeIid);
490 MemberModifier.suppress(MemberMatcher.method(MdsalUtils.class, "readNode", DataBroker.class, LogicalDatastoreType.class, InstanceIdentifier.class));
491 when(MdsalUtils.readNode(any(DataBroker.class), any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(optNode);
492 when(optNode.isPresent()).thenReturn(true);
493 when(optNode.get()).thenReturn(node);
494 when(node.getAugmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNodeAugmentation);
495 when(ovsdbNodeAugmentation.getConnectionInfo()).thenReturn(connectionInfo);
496 ConnectionInfo expectedConnInfo = OvsdbUtils.getConnectionInfo(dataBroker, ovsdbNodeId);
497 assertNotNull(expectedConnInfo);
498 assertEquals(expectedConnInfo, connectionInfo);
502 public void testGetLocalIp() {
505 ip = InetAddress.getLocalHost().getHostAddress();
506 } catch (UnknownHostException e) {
509 IpAddress ipAddress = OvsdbUtils.getLocalIp();
510 assertNotNull(ipAddress);
511 String expectedIp = new String(ipAddress.getValue());
512 assertTrue(expectedIp.equals(ip));
515 @SuppressWarnings("unchecked")
517 public void testGetOvsdbNodes() {
518 Node node = mock(Node.class);
519 List<Node> ndList = new ArrayList<Node>();
521 Topology topology = mock (Topology.class);
522 DataBroker dataBroker = mock(DataBroker.class);
523 OvsdbNodeAugmentation ovsNdAugmentation = mock(OvsdbNodeAugmentation.class, Mockito.RETURNS_MOCKS);
524 InstanceIdentifier<Topology> topologyInstanceIdentifier = mock(InstanceIdentifier.class);
525 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getOvsdbTopologyIid"));
526 when(UnimgrMapper.getOvsdbTopologyIid()).thenReturn(topologyInstanceIdentifier);
527 MemberModifier.suppress(MemberMatcher.method(MdsalUtils.class, "read", DataBroker.class, LogicalDatastoreType.class, InstanceIdentifier.class));
528 when(MdsalUtils.read(any(DataBroker.class), any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(topology);
529 when(topology.getNode()).thenReturn(ndList);
530 when(node.getAugmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsNdAugmentation);
531 List<Node> expectedListNnList = OvsdbUtils.getOvsdbNodes(dataBroker);
532 assertNotNull(expectedListNnList);
533 assertEquals(expectedListNnList.get(0), node);