Do not mock InetAddress
[ovsdb.git] / southbound / southbound-impl / src / test / java / org / opendaylight / ovsdb / southbound / transactions / md / OvsdbBridgeUpdateCommandTest.java
1 /*
2  * Copyright © 2015, 2017 Inocybe Technologies 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.ovsdb.southbound.transactions.md;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Matchers.anyString;
14 import static org.mockito.Matchers.eq;
15 import static org.mockito.Mockito.doNothing;
16 import static org.mockito.Mockito.mock;
17 import static org.mockito.Mockito.times;
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.net.InetAddresses;
23 import java.net.InetAddress;
24 import java.net.NetworkInterface;
25 import java.util.ArrayList;
26 import java.util.Enumeration;
27 import java.util.HashMap;
28 import java.util.HashSet;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.Set;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.mockito.Mockito;
36 import org.mockito.stubbing.Answer;
37 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
38 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
39 import org.opendaylight.ovsdb.lib.message.TableUpdates;
40 import org.opendaylight.ovsdb.lib.notation.Column;
41 import org.opendaylight.ovsdb.lib.notation.UUID;
42 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
43 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
44 import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
45 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
46 import org.opendaylight.ovsdb.schema.openvswitch.Controller;
47 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
48 import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance;
49 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
50 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathId;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeBase;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeSystem;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbFailModeStandalone;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeExternalIds;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeExternalIdsBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigs;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigsBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntryBuilder;
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.network.topology.topology.Node;
76 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
77 import org.opendaylight.yangtools.yang.binding.DataObject;
78 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
79 import org.powermock.api.mockito.PowerMockito;
80 import org.powermock.api.support.membermodification.MemberMatcher;
81 import org.powermock.api.support.membermodification.MemberModifier;
82 import org.powermock.core.classloader.annotations.PrepareForTest;
83 import org.powermock.modules.junit4.PowerMockRunner;
84 import org.powermock.reflect.Whitebox;
85
86 @RunWith(PowerMockRunner.class)
87 @PrepareForTest({ TyperUtils.class, OvsdbBridgeUpdateCommand.class, SouthboundUtil.class, InstanceIdentifier.class,
88         SouthboundMapper.class, NetworkInterface.class })
89 public class OvsdbBridgeUpdateCommandTest {
90     private Map<UUID,Bridge> updatedBridgeRows = new HashMap<>();
91     private Map<UUID, Bridge> oldBridgeRows = new HashMap<>();
92     private OvsdbBridgeUpdateCommand ovsdbBridgeUpdateCommand;
93
94     @Before
95     public void setUp() throws Exception {
96         ovsdbBridgeUpdateCommand = PowerMockito.mock(OvsdbBridgeUpdateCommand.class, Mockito.CALLS_REAL_METHODS);
97         MemberModifier.field(OvsdbBridgeUpdateCommand.class, "updatedBridges")
98                 .set(ovsdbBridgeUpdateCommand, new ArrayList<>());
99         MemberModifier.field(OvsdbBridgeUpdateCommand.class, "updatedBridgeRows").set(ovsdbBridgeUpdateCommand,
100                 updatedBridgeRows);
101     }
102
103     @Test
104     public void testOvsdbBridgeUpdateCommand() {
105         OvsdbConnectionInstance key = mock(OvsdbConnectionInstance.class);
106         TableUpdates updates = mock(TableUpdates.class);
107         DatabaseSchema dbSchema = mock(DatabaseSchema.class);
108         OvsdbBridgeUpdateCommand ovsdbBridgeUpdateCommand1 =
109                 new OvsdbBridgeUpdateCommand(mock(InstanceIdentifierCodec.class), key, updates, dbSchema);
110         assertEquals(key, Whitebox.getInternalState(ovsdbBridgeUpdateCommand1, "key"));
111         assertEquals(updates, Whitebox.getInternalState(ovsdbBridgeUpdateCommand1, "updates"));
112         assertEquals(dbSchema, Whitebox.getInternalState(ovsdbBridgeUpdateCommand1, "dbSchema"));
113     }
114
115     @Test
116     public void testExecute() throws Exception {
117         updatedBridgeRows.put(mock(UUID.class), mock(Bridge.class));
118
119         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
120         when(ovsdbBridgeUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
121         InstanceIdentifier<Node> connectionIId = mock(InstanceIdentifier.class);
122         when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(connectionIId);
123         Optional<Node> connection = Optional.of(mock(Node.class));
124         PowerMockito.mockStatic(SouthboundUtil.class);
125         when(SouthboundUtil.readNode(any(ReadWriteTransaction.class), any(InstanceIdentifier.class)))
126                 .thenReturn(connection);
127         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
128         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "updateBridge",
129                 ReadWriteTransaction.class, Bridge.class, InstanceIdentifier.class));
130         ovsdbBridgeUpdateCommand.execute(transaction);
131         PowerMockito.verifyPrivate(ovsdbBridgeUpdateCommand).invoke("updateBridge", any(ReadWriteTransaction.class),
132                 any(Bridge.class), any(InstanceIdentifier.class));
133     }
134
135     @SuppressWarnings("unchecked")
136     @Test
137     public void testUpdateBridge() throws Exception {
138         MemberModifier
139                 .suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "buildConnectionNode", Bridge.class));
140         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
141         doNothing().when(transaction).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
142                 any(Node.class));
143
144         // suppress calls to private methods
145         MemberModifier
146                 .suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "getInstanceIdentifier", Bridge.class));
147         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "buildBridgeNode", Bridge.class));
148         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "deleteEntries",
149                 ReadWriteTransaction.class, List.class));
150         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "protocolEntriesToRemove",
151                 InstanceIdentifier.class, Bridge.class));
152         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "externalIdsToRemove",
153                 InstanceIdentifier.class, Bridge.class));
154         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "bridgeOtherConfigsToRemove",
155                 InstanceIdentifier.class, Bridge.class));
156
157         Bridge bridge = mock(Bridge.class);
158         InstanceIdentifier<Node> connectionIId = mock(InstanceIdentifier.class);
159         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "updateBridge", transaction, bridge, connectionIId);
160         PowerMockito.verifyPrivate(ovsdbBridgeUpdateCommand, times(3)).invoke("deleteEntries",
161                 any(ReadWriteTransaction.class), any(Bridge.class));
162     }
163
164     @SuppressWarnings("unchecked")
165     @Test
166     public void testDeleteEntries() throws Exception {
167         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
168         List<InstanceIdentifier<DataObject>> entryIids = new ArrayList<>();
169         InstanceIdentifier<DataObject> iid = mock(InstanceIdentifier.class);
170         entryIids.add(iid);
171         doNothing().when(transaction).delete(any(LogicalDatastoreType.class), (InstanceIdentifier<?>) any(List.class));
172         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "deleteEntries", transaction, entryIids);
173         verify(transaction).delete(any(LogicalDatastoreType.class), (InstanceIdentifier<?>) any(List.class));
174     }
175
176     @SuppressWarnings("unchecked")
177     @Test
178     public void testToRemoveMethods() throws Exception {
179         Bridge bridge = mock(Bridge.class);
180         UUID uuid = mock(UUID.class);
181         Bridge oldBridge = mock(Bridge.class);
182         oldBridgeRows.put(uuid, oldBridge);
183         when(bridge.getUuid()).thenReturn(uuid);
184         MemberModifier.field(OvsdbBridgeUpdateCommand.class, "oldBridgeRows").set(ovsdbBridgeUpdateCommand,
185                 oldBridgeRows);
186         Column<GenericTableSchema, Map<String, String>> column = mock(Column.class);
187         Map<String, String> map = new HashMap<>();
188         map.put("key", "value");
189         when(column.getData()).thenReturn(map);
190
191         //test bridgeOtherConfigsToRemove()
192         when(oldBridge.getOtherConfigColumn()).thenReturn(column);
193         when(bridge.getOtherConfigColumn()).thenReturn(column);
194         InstanceIdentifier<Node> bridgeIid = PowerMockito.mock(InstanceIdentifier.class);
195         List<InstanceIdentifier<BridgeOtherConfigs>> resultBridgeOtherConfigs = Whitebox
196                 .invokeMethod(ovsdbBridgeUpdateCommand, "bridgeOtherConfigsToRemove", bridgeIid, bridge);
197         assertEquals(ArrayList.class, resultBridgeOtherConfigs.getClass());
198         verify(oldBridge, times(2)).getOtherConfigColumn();
199
200         //test externalIdsToRemove()
201         when(oldBridge.getExternalIdsColumn()).thenReturn(column);
202         when(column.getData()).thenReturn(map);
203         when(bridge.getExternalIdsColumn()).thenReturn(column);
204         List<InstanceIdentifier<BridgeExternalIds>> resultBridgeExternalIds = Whitebox
205                 .invokeMethod(ovsdbBridgeUpdateCommand, "externalIdsToRemove", bridgeIid, bridge);
206         assertEquals(ArrayList.class, resultBridgeExternalIds.getClass());
207         verify(oldBridge, times(2)).getExternalIdsColumn();
208
209         //test protocolEntriesToRemove()
210         Column<GenericTableSchema, Set<String>> column1 = mock(Column.class);
211         Set<String> set = new HashSet<>();
212         set.add("element");
213         when(column1.getData()).thenReturn(set);
214         when(oldBridge.getProtocolsColumn()).thenReturn(column1);
215         when(column.getData()).thenReturn(map);
216         when(bridge.getProtocolsColumn()).thenReturn(column1);
217         List<InstanceIdentifier<ProtocolEntry>> resultProtocolEntry = Whitebox.invokeMethod(ovsdbBridgeUpdateCommand,
218                 "protocolEntriesToRemove", bridgeIid, bridge);
219         assertEquals(ArrayList.class, resultProtocolEntry.getClass());
220         verify(oldBridge, times(2)).getProtocolsColumn();
221     }
222
223     @SuppressWarnings("unchecked")
224     @Test
225     public void testBuildConnectionNode() throws Exception {
226         NodeBuilder connectionNode = mock(NodeBuilder.class);
227         PowerMockito.whenNew(NodeBuilder.class).withNoArguments().thenReturn(connectionNode);
228         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
229         when(ovsdbBridgeUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
230         when(ovsdbConnectionInstance.getNodeId()).thenReturn(mock(NodeId.class));
231         when(connectionNode.setNodeId(any(NodeId.class))).thenReturn(connectionNode);
232
233         OvsdbNodeAugmentationBuilder ovsdbConnectionAugmentationBuilder = mock(OvsdbNodeAugmentationBuilder.class);
234         PowerMockito.whenNew(OvsdbNodeAugmentationBuilder.class).withNoArguments()
235                 .thenReturn(ovsdbConnectionAugmentationBuilder);
236         PowerMockito.mockStatic(SouthboundMapper.class);
237         InstanceIdentifier<Node> bridgeIid = mock(InstanceIdentifier.class);
238         when(SouthboundMapper.createInstanceIdentifier(any(InstanceIdentifierCodec.class),
239                 any(OvsdbConnectionInstance.class), any(Bridge.class)))
240                 .thenReturn(bridgeIid);
241         ManagedNodeEntry managedBridge = mock(ManagedNodeEntry.class);
242         ManagedNodeEntryBuilder managedNodeEntryBuilder = mock(ManagedNodeEntryBuilder.class);
243         PowerMockito.whenNew(ManagedNodeEntryBuilder.class).withNoArguments().thenReturn(managedNodeEntryBuilder);
244         PowerMockito.whenNew(OvsdbBridgeRef.class).withAnyArguments().thenReturn(mock(OvsdbBridgeRef.class));
245         when(managedNodeEntryBuilder.setBridgeRef(any(OvsdbBridgeRef.class))).thenReturn(managedNodeEntryBuilder);
246         when(managedNodeEntryBuilder.build()).thenReturn(managedBridge);
247         when(ovsdbConnectionAugmentationBuilder.setManagedNodeEntry(any(List.class)))
248                 .thenReturn(ovsdbConnectionAugmentationBuilder);
249
250         when(ovsdbConnectionAugmentationBuilder.build()).thenReturn(mock(OvsdbNodeAugmentation.class));
251         when(connectionNode.addAugmentation(eq(OvsdbNodeAugmentation.class), any(OvsdbNodeAugmentation.class)))
252                 .thenReturn(connectionNode);
253
254         //for logger
255         List<ManagedNodeEntry> value = new ArrayList<>();
256         value.add(managedBridge);
257         when(ovsdbConnectionAugmentationBuilder.getManagedNodeEntry()).thenReturn(value);
258
259         Node node = mock(Node.class);
260         when(connectionNode.build()).thenReturn(node);
261         Bridge bridge = mock(Bridge.class);
262         assertEquals(node, Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "buildConnectionNode", bridge));
263     }
264
265     @Test
266     public void testBuildBridgeNode() throws Exception {
267         NodeBuilder bridgeNodeBuilder = mock(NodeBuilder.class);
268         PowerMockito.whenNew(NodeBuilder.class).withNoArguments().thenReturn(bridgeNodeBuilder);
269         //suppress call to getNodeId()
270         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "getNodeId", Bridge.class));
271         when(bridgeNodeBuilder.setNodeId(any(NodeId.class))).thenReturn(bridgeNodeBuilder);
272         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
273         PowerMockito.whenNew(OvsdbBridgeAugmentationBuilder.class).withNoArguments()
274                 .thenReturn(ovsdbBridgeAugmentationBuilder);
275         Bridge bridge = mock(Bridge.class);
276         when(bridge.getName()).thenReturn("bridge name");
277         PowerMockito.whenNew(OvsdbBridgeName.class).withAnyArguments().thenReturn(mock(OvsdbBridgeName.class));
278         when(ovsdbBridgeAugmentationBuilder.setBridgeName(any(OvsdbBridgeName.class)))
279                 .thenReturn(ovsdbBridgeAugmentationBuilder);
280         when(bridge.getUuid()).thenReturn(mock(UUID.class));
281         PowerMockito.whenNew(Uuid.class).withAnyArguments().thenReturn(mock(Uuid.class));
282         when(ovsdbBridgeAugmentationBuilder.setBridgeUuid(any(Uuid.class))).thenReturn(ovsdbBridgeAugmentationBuilder);
283
284         //suppress calls to the set methods
285         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "setDataPath",
286                 OvsdbBridgeAugmentationBuilder.class, Bridge.class));
287         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "setDataPathType",
288                 OvsdbBridgeAugmentationBuilder.class, Bridge.class));
289         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "setProtocol",
290                 OvsdbBridgeAugmentationBuilder.class, Bridge.class));
291         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "setExternalIds",
292                 OvsdbBridgeAugmentationBuilder.class, Bridge.class));
293         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "setOtherConfig",
294                 OvsdbBridgeAugmentationBuilder.class, Bridge.class));
295         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "setFailMode",
296                 OvsdbBridgeAugmentationBuilder.class, Bridge.class));
297         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "setOpenFlowNodeRef",
298                 OvsdbBridgeAugmentationBuilder.class, Bridge.class));
299         MemberModifier.suppress(MemberMatcher.method(OvsdbBridgeUpdateCommand.class, "setManagedBy",
300                 OvsdbBridgeAugmentationBuilder.class));
301
302         when(ovsdbBridgeAugmentationBuilder.build()).thenReturn(mock(OvsdbBridgeAugmentation.class));
303         when(bridgeNodeBuilder.addAugmentation(eq(OvsdbBridgeAugmentation.class), any(OvsdbBridgeAugmentation.class)))
304                 .thenReturn(bridgeNodeBuilder);
305         Node node = mock(Node.class);
306         when(bridgeNodeBuilder.build()).thenReturn(node);
307         assertEquals(node, Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "buildBridgeNode", bridge));
308     }
309
310     @SuppressWarnings("unchecked")
311     @Test
312     public void testSetManagedByAndSetDataPathType() throws Exception {
313         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
314
315         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
316         when(ovsdbBridgeUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
317         when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
318         PowerMockito.whenNew(OvsdbNodeRef.class).withAnyArguments().thenReturn(mock(OvsdbNodeRef.class));
319         when(ovsdbBridgeAugmentationBuilder.setManagedBy(any(OvsdbNodeRef.class)))
320                 .thenReturn(ovsdbBridgeAugmentationBuilder);
321         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "setManagedBy", ovsdbBridgeAugmentationBuilder);
322         verify(ovsdbBridgeAugmentationBuilder).setManagedBy(any(OvsdbNodeRef.class));
323         verify(ovsdbConnectionInstance).getInstanceIdentifier();
324     }
325
326     @SuppressWarnings("unchecked")
327     @Test
328     public void testSetDataPathType() throws Exception {
329         Bridge bridge = mock(Bridge.class);
330         Column<GenericTableSchema, String> column = mock(Column.class);
331         when(bridge.getDatapathTypeColumn()).thenReturn(column);
332         when(column.getData()).thenReturn("system");
333         PowerMockito.mockStatic(SouthboundMapper.class);
334         when(SouthboundMapper.createDatapathType(anyString()))
335                 .thenAnswer((Answer<Class<? extends DatapathTypeBase>>) invocation -> DatapathTypeSystem.class);
336         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
337         when(ovsdbBridgeAugmentationBuilder.setDatapathType(any(Class.class)))
338                 .thenReturn(ovsdbBridgeAugmentationBuilder);
339         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "setDataPathType", ovsdbBridgeAugmentationBuilder, bridge);
340         verify(bridge).getDatapathTypeColumn();
341         verify(column).getData();
342         verify(ovsdbBridgeAugmentationBuilder).setDatapathType(any(Class.class));
343     }
344
345     @SuppressWarnings("unchecked")
346     @Test
347     public void testSetFailMode() throws Exception {
348         Bridge bridge = mock(Bridge.class);
349         Column<GenericTableSchema, Set<String>> column = mock(Column.class);
350         when(bridge.getFailModeColumn()).thenReturn(column);
351         Set<String> set = new HashSet<>();
352         set.add("standalone");
353         when(column.getData()).thenReturn(set);
354         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
355         when(ovsdbBridgeAugmentationBuilder.setFailMode(OvsdbFailModeStandalone.class))
356                 .thenReturn(ovsdbBridgeAugmentationBuilder);
357         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "setFailMode", ovsdbBridgeAugmentationBuilder, bridge);
358         verify(bridge, times(5)).getFailModeColumn();
359         verify(ovsdbBridgeAugmentationBuilder).setFailMode(OvsdbFailModeStandalone.class);
360     }
361
362     @SuppressWarnings("unchecked")
363     @Test
364     public void testSetOtherConfig() throws Exception {
365         Bridge bridge = mock(Bridge.class);
366         Column<GenericTableSchema, Map<String, String>> column = mock(Column.class);
367         when(bridge.getOtherConfigColumn()).thenReturn(column);
368         Map<String, String> map = new HashMap<>();
369         map.put("key", "value");
370         when(column.getData()).thenReturn(map);
371
372         BridgeOtherConfigsBuilder bridgeOtherConfigsBuilder = mock(BridgeOtherConfigsBuilder.class);
373         PowerMockito.whenNew(BridgeOtherConfigsBuilder.class).withNoArguments().thenReturn(bridgeOtherConfigsBuilder);
374         when(bridgeOtherConfigsBuilder.setBridgeOtherConfigKey(anyString())).thenReturn(bridgeOtherConfigsBuilder);
375         when(bridgeOtherConfigsBuilder.setBridgeOtherConfigValue(anyString())).thenReturn(bridgeOtherConfigsBuilder);
376         when(bridgeOtherConfigsBuilder.build()).thenReturn(mock(BridgeOtherConfigs.class));
377
378         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
379         when(ovsdbBridgeAugmentationBuilder.setBridgeOtherConfigs(any(List.class)))
380                 .thenReturn(ovsdbBridgeAugmentationBuilder);
381         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "setOtherConfig", ovsdbBridgeAugmentationBuilder, bridge);
382         verify(bridge).getOtherConfigColumn();
383         verify(bridgeOtherConfigsBuilder).setBridgeOtherConfigKey(anyString());
384         verify(bridgeOtherConfigsBuilder).setBridgeOtherConfigValue(anyString());
385     }
386
387     @SuppressWarnings("unchecked")
388     @Test
389     public void testSetExternalIds() throws Exception {
390         Bridge bridge = mock(Bridge.class);
391         Column<GenericTableSchema, Map<String, String>> column = mock(Column.class);
392         when(bridge.getExternalIdsColumn()).thenReturn(column);
393         Map<String, String> map = new HashMap<>();
394         map.put("key", "value");
395         when(column.getData()).thenReturn(map);
396
397         BridgeExternalIdsBuilder bridgeExternalIdsBuilder = mock(BridgeExternalIdsBuilder.class);
398         PowerMockito.whenNew(BridgeExternalIdsBuilder.class).withNoArguments().thenReturn(bridgeExternalIdsBuilder);
399         when(bridgeExternalIdsBuilder.setBridgeExternalIdKey(anyString())).thenReturn(bridgeExternalIdsBuilder);
400         when(bridgeExternalIdsBuilder.setBridgeExternalIdValue(anyString())).thenReturn(bridgeExternalIdsBuilder);
401         when(bridgeExternalIdsBuilder.build()).thenReturn(mock(BridgeExternalIds.class));
402
403         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
404         when(ovsdbBridgeAugmentationBuilder.setBridgeOtherConfigs(any(List.class)))
405                 .thenReturn(ovsdbBridgeAugmentationBuilder);
406         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "setExternalIds", ovsdbBridgeAugmentationBuilder, bridge);
407         verify(bridge).getExternalIdsColumn();
408         verify(bridgeExternalIdsBuilder).setBridgeExternalIdKey(anyString());
409         verify(bridgeExternalIdsBuilder).setBridgeExternalIdValue(anyString());
410     }
411
412     @SuppressWarnings("unchecked")
413     @Test
414     public void testSetProtocolAndSetDataPath() throws Exception {
415         PowerMockito.mockStatic(SouthboundMapper.class);
416
417         //Test setProtocol()
418         List<ProtocolEntry> listProtocolEntry = new ArrayList<>();
419         listProtocolEntry.add(mock(ProtocolEntry.class));
420         when(SouthboundMapper.createMdsalProtocols(any(Bridge.class))).thenReturn(listProtocolEntry);
421         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
422         Bridge bridge = mock(Bridge.class);
423         when(ovsdbBridgeAugmentationBuilder.setProtocolEntry(any(List.class)))
424                 .thenReturn(ovsdbBridgeAugmentationBuilder);
425         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "setProtocol", ovsdbBridgeAugmentationBuilder, bridge);
426         verify(ovsdbBridgeAugmentationBuilder).setProtocolEntry(any(List.class));
427
428
429         //Test setDataPath()
430         DatapathId dpid = mock(DatapathId.class);
431         when(SouthboundMapper.createDatapathId(any(Bridge.class))).thenReturn(dpid);
432         when(ovsdbBridgeAugmentationBuilder.setDatapathId(any(DatapathId.class)))
433                 .thenReturn(ovsdbBridgeAugmentationBuilder);
434         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "setDataPath", ovsdbBridgeAugmentationBuilder, bridge);
435         verify(ovsdbBridgeAugmentationBuilder).setDatapathId(any(DatapathId.class));
436     }
437
438     @SuppressWarnings("unchecked")
439     @Test
440     public void testSetOpenFlowNodeRef() throws Exception {
441         PowerMockito.mockStatic(SouthboundMapper.class);
442
443         when(ovsdbBridgeUpdateCommand.getUpdates()).thenReturn(mock(TableUpdates.class));
444         when(ovsdbBridgeUpdateCommand.getDbSchema()).thenReturn(mock(DatabaseSchema.class));
445         PowerMockito.mockStatic(TyperUtils.class);
446         Map<UUID, Controller> updatedControllerRows = new HashMap<>();
447         when(TyperUtils.extractRowsUpdated(eq(Controller.class), any(TableUpdates.class), any(DatabaseSchema.class)))
448                 .thenReturn(updatedControllerRows);
449
450         List<ControllerEntry> controllerEntryList = new ArrayList<>();
451         ControllerEntry controllerEntry = mock(ControllerEntry.class);
452         controllerEntryList.add(controllerEntry);
453         when(SouthboundMapper.createControllerEntries(any(Bridge.class), any(Map.class)))
454                 .thenReturn(controllerEntryList);
455         when(controllerEntry.isIsConnected()).thenReturn(true);
456         Uri uri = mock(Uri.class);
457         when(controllerEntry.getTarget()).thenReturn(uri);
458         when(uri.getValue()).thenReturn("tcp:192.168.12.56:6633");
459
460         IpAddress bridgeControllerIpAddress = mock(IpAddress.class);
461         PowerMockito.whenNew(IpAddress.class).withAnyArguments().thenReturn(bridgeControllerIpAddress);
462
463         PowerMockito.mockStatic(NetworkInterface.class);
464         Enumeration<NetworkInterface> networkInterfaces = mock(Enumeration.class);
465         when(NetworkInterface.getNetworkInterfaces()).thenReturn(networkInterfaces);
466
467         when(networkInterfaces.hasMoreElements()).thenReturn(true, false);
468         NetworkInterface networkInterface = PowerMockito.mock(NetworkInterface.class);
469         when(networkInterfaces.nextElement()).thenReturn(networkInterface);
470
471         Enumeration<InetAddress> networkInterfaceAddresses = mock(Enumeration.class);
472         when(networkInterface.getInetAddresses()).thenReturn(networkInterfaceAddresses);
473         when(networkInterfaceAddresses.hasMoreElements()).thenReturn(true, false);
474
475         InetAddress networkInterfaceAddress = InetAddresses.forString("127.0.0.1");
476         when(networkInterfaceAddresses.nextElement()).thenReturn(networkInterfaceAddress);
477
478         Ipv4Address ipv4Address = mock(Ipv4Address.class);
479         when(bridgeControllerIpAddress.getIpv4Address()).thenReturn(ipv4Address);
480         when(ipv4Address.getValue()).thenReturn("127.0.0.1");
481         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
482         when(ovsdbBridgeUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
483         when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
484         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
485         Bridge bridge = mock(Bridge.class);
486         when(ovsdbBridgeAugmentationBuilder.setBridgeOpenflowNodeRef(any(InstanceIdentifier.class)))
487                 .thenReturn(ovsdbBridgeAugmentationBuilder);
488
489         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "setOpenFlowNodeRef", ovsdbBridgeAugmentationBuilder, bridge);
490         verify(controllerEntry, times(2)).isIsConnected();
491         verify(ovsdbBridgeAugmentationBuilder).setBridgeOpenflowNodeRef(any(InstanceIdentifier.class));
492     }
493
494     @SuppressWarnings("unchecked")
495     @Test
496     public void testGetInstanceIdentifier() throws Exception {
497         PowerMockito.mockStatic(SouthboundMapper.class);
498         when(ovsdbBridgeUpdateCommand.getOvsdbConnectionInstance()).thenReturn(mock(OvsdbConnectionInstance.class));
499         InstanceIdentifier<Node> iid = mock(InstanceIdentifier.class);
500         when(SouthboundMapper.createInstanceIdentifier(any(InstanceIdentifierCodec.class),
501                 any(OvsdbConnectionInstance.class), any(Bridge.class)))
502                 .thenReturn(iid);
503
504         assertEquals(iid, Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "getInstanceIdentifier", mock(Bridge.class)));
505     }
506 }