Cleaned up Tests
[unimgr.git] / impl / src / test / java / org / opendaylight / unimgr / impl / UnimgrUtilsTest.java
1 package org.opendaylight.unimgr.impl;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.Matchers.any;
5 import static org.mockito.Mockito.doNothing;
6 import static org.mockito.Mockito.mock;
7 import static org.mockito.Mockito.verify;
8 import static org.mockito.Mockito.when;
9 import static org.mockito.Mockito.times;
10
11 import org.mockito.Mock;
12 import org.mockito.Mockito;
13
14 import org.powermock.core.classloader.annotations.PrepareForTest;
15 import org.powermock.modules.junit4.PowerMockRunner;
16
17 import com.google.common.collect.ImmutableBiMap;
18 import com.google.common.util.concurrent.CheckedFuture;
19
20 import org.powermock.api.mockito.PowerMockito;
21 import org.powermock.api.support.membermodification.MemberMatcher;
22 import org.powermock.api.support.membermodification.MemberModifier;
23
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.UUID;
27
28 import org.junit.Before;
29 import org.junit.Rule;
30 import org.junit.Test;
31 import org.junit.rules.ExpectedException;
32 import org.junit.runner.RunWith;
33 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
34 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
35 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
36 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes.VlanMode;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.EvcAugmentation;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder;
63 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
64 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
65 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
66 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
67 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
68
69
70 @RunWith(PowerMockRunner.class)
71 @PrepareForTest({InstanceIdentifier.class, LogicalDatastoreType.class, UnimgrMapper.class, UnimgrUtils.class, UUID.class})
72 public class UnimgrUtilsTest {
73
74     @Rule
75     public final ExpectedException exception = ExpectedException.none();
76     @Mock private DataBroker dataBroker;
77     @Mock private Node bridgeNode;
78     @Mock private String bridgeName;
79     @Mock private String portName;
80     @Mock private String type;
81     @Mock private WriteTransaction transaction;
82     @Mock private IpAddress mockIp;
83     @SuppressWarnings({ "rawtypes" })
84     @Mock private CheckedFuture checkedFuture;
85     @SuppressWarnings("unchecked")
86     private static final InstanceIdentifier<TerminationPoint> tpIid = PowerMockito.mock(InstanceIdentifier.class);
87     private static final IpAddress IP = new IpAddress(new Ipv4Address("192.168.1.2"));
88     private static final NodeId OVSDB_NODE_ID = new NodeId("ovsdb://7011db35-f44b-4aab-90f6-d89088caf9d8");
89     @SuppressWarnings("unchecked")
90     private static final InstanceIdentifier<Node> MOCK_NODE_IID = PowerMockito.mock(InstanceIdentifier.class);
91
92     @Before
93     public void setUp() throws Exception {
94         PowerMockito.mockStatic(UnimgrUtils.class, Mockito.CALLS_REAL_METHODS);
95         PowerMockito.mockStatic(UnimgrMapper.class, Mockito.CALLS_REAL_METHODS);
96         PowerMockito.mockStatic(InstanceIdentifier.class);
97         PowerMockito.mockStatic(LogicalDatastoreType.class);
98         PowerMockito.mockStatic(UUID.class);
99     }
100
101     /*
102      *  This test for 2 functions with the
103      *  same name that take different parameters.
104      */
105     @Test
106     public void testCreateBridgeNode() throws Exception {
107         //TODO
108     }
109
110     @Test
111     public void testCreateControllerEntries() {
112         String targetString = new String("controllerEntry");
113         List<ControllerEntry> controllerEntries = new ArrayList<ControllerEntry>();
114         ControllerEntryBuilder controllerEntryBuilder = new ControllerEntryBuilder();
115         controllerEntryBuilder.setTarget(new Uri(targetString));
116         controllerEntries.add(controllerEntryBuilder.build());
117         assertEquals(controllerEntries, UnimgrUtils.createControllerEntries(targetString));
118     }
119
120     @SuppressWarnings("unchecked")
121     @Test
122     public void testCreateGreTunnel() throws Exception {
123
124         UniAugmentation sourceUniAug = new UniAugmentationBuilder()
125                 .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.1")))
126                 .build();
127         UniAugmentation destUniAug = new UniAugmentationBuilder()
128                 .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2")))
129                 .build();
130
131         when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
132         doNothing().when(transaction).put(any(LogicalDatastoreType.class),
133                                           any(InstanceIdentifier.class),
134                                           any(TerminationPoint.class));
135         when(transaction.submit()).thenReturn(checkedFuture);
136
137         MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getTerminationPointIid", Node.class, String.class));
138         MemberModifier.suppress(MemberMatcher.method(UnimgrUtils.class, "createMdsalProtocols"));
139
140         UnimgrUtils.createGreTunnel(dataBroker,
141                                     sourceUniAug,
142                                     destUniAug,
143                                     bridgeNode,
144                                     bridgeName,
145                                     portName);
146         verify(transaction).put(any(LogicalDatastoreType.class),
147                                 any(InstanceIdentifier.class),
148                                 any(TerminationPoint.class));
149         verify(transaction).submit();
150     }
151
152     @Test
153     public void testCreateMdsalProtocols() {
154         List<ProtocolEntry> protocolList = new ArrayList<ProtocolEntry>();
155         ImmutableBiMap<String, Class<? extends OvsdbBridgeProtocolBase>> mapper =
156                 SouthboundConstants.OVSDB_PROTOCOL_MAP.inverse();
157         ProtocolEntry protoEntry = new ProtocolEntryBuilder().setProtocol((Class<? extends OvsdbBridgeProtocolBase>) mapper.get("OpenFlow13")).build();
158         protocolList.add(protoEntry);
159         assertEquals(protocolList, UnimgrUtils.createMdsalProtocols());
160     }
161
162     @Test
163     public void testCreateOvsdbBridgeAugmentation() throws Exception {
164         OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(PowerMockito.mock(InstanceIdentifier.class));
165         UniAugmentation uni = new UniAugmentationBuilder().setOvsdbNodeRef(ovsdbNodeRef).build();
166         UUID bridgeUuid = PowerMockito.mock(UUID.class);
167         PowerMockito.when(UUID.randomUUID()).thenReturn(bridgeUuid);
168         OvsdbBridgeAugmentation ovsdbNode = new OvsdbBridgeAugmentationBuilder()
169                                                     .setBridgeName(new OvsdbBridgeName(UnimgrConstants.DEFAULT_BRIDGE_NAME))
170                                                     .setManagedBy(ovsdbNodeRef)
171                                                     .setBridgeUuid(new Uuid(bridgeUuid.toString()))
172                                                     .build();
173         assertEquals(ovsdbNode, UnimgrUtils.createOvsdbBridgeAugmentation(uni));
174         // Force an exception
175         Uni ovsdbNodeRefNull = new UniAugmentationBuilder().setOvsdbNodeRef(null).build();
176         exception.expect(Exception.class);
177         UnimgrUtils.createOvsdbBridgeAugmentation(ovsdbNodeRefNull);
178     }
179
180     /*
181      *  This test for 2 functions with the
182      *  same name that take different parameters.
183      */
184     @SuppressWarnings("unchecked")
185     @Test
186     public void testCreateOvsdbNode() {
187         MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getOvsdbNodeIid", IpAddress.class));
188         PowerMockito.when(UnimgrMapper.getOvsdbNodeIid(mockIp)).thenReturn(MOCK_NODE_IID);
189         when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
190         //when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
191         Uni uni = new UniAugmentationBuilder().setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2"))).build();
192         // createOvsdbNode with NodeId and Uni
193         UnimgrUtils.createOvsdbNode(dataBroker, OVSDB_NODE_ID, uni);
194         doNothing().when(transaction).put(any(LogicalDatastoreType.class),
195                                           any(InstanceIdentifier.class),
196                                           any(Node.class));
197         when(transaction.submit()).thenReturn(checkedFuture);
198         verify(transaction).put(any(LogicalDatastoreType.class),
199                                 any(InstanceIdentifier.class),
200                                 any(Node.class));
201         verify(transaction).submit();
202         // Test with a null uni
203         exception.expect(Exception.class);
204         UnimgrUtils.createOvsdbNode(dataBroker, OVSDB_NODE_ID, null);
205         // createOvsdbNode with Uni
206         UniAugmentation uniAug = new UniAugmentationBuilder(uni).build();
207         UnimgrUtils.createOvsdbNode(dataBroker, uniAug);
208         MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getOvsdbNodeIid", NodeId.class));
209         PowerMockito.when(UnimgrMapper.getOvsdbNodeIid(OVSDB_NODE_ID)).thenReturn(MOCK_NODE_IID);
210         doNothing().when(transaction).put(any(LogicalDatastoreType.class),
211                                           any(InstanceIdentifier.class),
212                                           any(Node.class));
213         when(transaction.submit()).thenReturn(checkedFuture);
214         verify(transaction).put(any(LogicalDatastoreType.class),
215                                 any(InstanceIdentifier.class),
216                                 any(Node.class));
217         verify(transaction).submit();
218         // try with a null uni
219         exception.expect(Exception.class);
220         UnimgrUtils.createOvsdbNode(dataBroker, null);
221     }
222
223     @Test
224     public void testCreateOvsdbNodeAugmentation() {
225         Uni uni = new UniAugmentationBuilder().setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2"))).build();
226         ConnectionInfo connectionInfos = new ConnectionInfoBuilder()
227                 .setRemoteIp(uni.getIpAddress())
228                 .setRemotePort(new PortNumber(UnimgrConstants.OVSDB_PORT))
229                 .build();
230         OvsdbNodeAugmentation ovsdbNode = new OvsdbNodeAugmentationBuilder()
231                 .setConnectionInfo(connectionInfos).build();
232         assertEquals(ovsdbNode, UnimgrUtils.createOvsdbNodeAugmentation(uni));
233     }
234
235     @Test
236     public void testCreateOvsdbNodeId() {
237         String nodeId = UnimgrConstants.OVSDB_PREFIX
238                 + IP.getIpv4Address().getValue().toString()
239                 + ":"
240                 + UnimgrConstants.OVSDB_PORT;
241         assertEquals(new NodeId(nodeId), UnimgrUtils.createOvsdbNodeId(IP));
242     }
243
244     @Test
245     public void testCreateOvsdbTerminationPointAugmentation() {
246         Uni uni = new UniAugmentationBuilder().build();
247         VlanId vlanID = new VlanId(1);
248         OvsdbTerminationPointAugmentation terminationPoint = new OvsdbTerminationPointAugmentationBuilder()
249                                                                      .setName(UnimgrConstants.DEFAULT_INTERNAL_IFACE)
250                                                                      .setVlanTag(vlanID)
251                                                                      .setVlanMode(VlanMode.Access)
252                                                                      .build();
253         assertEquals(terminationPoint, UnimgrUtils.createOvsdbTerminationPointAugmentation(uni));
254     }
255
256     @Test
257     public void testCreateEvc() {
258         EvcAugmentation evc = mock(EvcAugmentation.class);
259         assertEquals(false, UnimgrUtils.createEvc(dataBroker, evc));
260     }
261
262     @SuppressWarnings("unchecked")
263     @Test
264     public void testCreateUniNode() {
265         UniAugmentation uniAug = new UniAugmentationBuilder()
266                                         .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2")))
267                                         .build();
268         // false case
269         assertEquals(false, UnimgrUtils.createUniNode(dataBroker, uniAug));
270         MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getUniNodeIid", NodeId.class));
271         PowerMockito.when(UnimgrMapper.getUniNodeIid(any(NodeId.class))).thenReturn(MOCK_NODE_IID);
272
273         when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
274         UnimgrUtils.createUniNode(dataBroker, uniAug);
275         verify(transaction).put(any(LogicalDatastoreType.class),
276                                 any(InstanceIdentifier.class),
277                                 any(Node.class));
278         verify(transaction).submit();
279     }
280
281     @Test
282     public void testCreateUniNodeId() {
283         NodeId nodeId = new NodeId(UnimgrConstants.UNI_PREFIX + IP.getIpv4Address().getValue().toString());
284         assertEquals(nodeId, UnimgrUtils.createUniNodeId(IP));
285     }
286
287     /*
288      *  This test for 2 functions with the
289      *  same name that take different parameters.
290      */
291     @SuppressWarnings("unchecked")
292     @Test
293     public void testCreateTerminationPointNode() {
294         Uni uni = new UniAugmentationBuilder().build();
295         Node bridgeNode = new NodeBuilder().build();
296
297         MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class,
298                                                      "getTerminationPointIid",
299                                                      Node.class,
300                                                      String.class));
301         PowerMockito.when(UnimgrMapper.getTerminationPointIid(any(Node.class),
302                                                               any(String.class))).thenReturn(tpIid);
303         when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
304         // Function 1
305         UnimgrUtils.createTerminationPointNode(dataBroker, uni, bridgeNode, bridgeName, portName, type);
306
307         //Function 2
308         doNothing().when(transaction).put(any(LogicalDatastoreType.class),
309                                           any(InstanceIdentifier.class),
310                                           any(TerminationPoint.class));
311         when(transaction.submit()).thenReturn(checkedFuture);
312         UnimgrUtils.createTerminationPointNode(dataBroker, uni, bridgeNode, bridgeName, portName);
313         verify(transaction, times(2)).put(any(LogicalDatastoreType.class),
314                                           any(InstanceIdentifier.class),
315                                           any(TerminationPoint.class));
316         verify(transaction,times(2)).submit();
317     }
318
319     @Test
320     public void testDelete() {
321         // FIXME this function will be moved into an MdsalUtils class.
322         // see bug: https://bugs.opendaylight.org/show_bug.cgi?id=5035
323     }
324
325     @Test
326     public void testDeleteTerminationPoint() {
327       //TODO
328     }
329
330     @Test
331     public void testDeleteNode() {
332       //TODO
333     }
334
335     @Test
336     public void testExtract() {
337         // FIXME this function will be moved into an MdsalUtils class.
338         // see bug: https://bugs.opendaylight.org/show_bug.cgi?id=5035
339     }
340
341     @Test
342     public void testExtractOriginal() {
343       //TODO
344     }
345
346     @Test
347     public void testExtractRemoved() {
348       //TODO
349     }
350
351     @Test
352     public void testFindOvsdbNode() {
353       //TODO
354     }
355
356     @Test
357     public void testFindUniNode() {
358       //TODO
359     }
360
361     @Test
362     public void testGetConnectionInfo() {
363       //TODO
364     }
365
366     @Test
367     public void testGetEvcLinks() {
368       //TODO
369     }
370
371     @Test
372     public void testGetLocalIp() {
373       //TODO
374     }
375
376     @Test
377     public void testGetOvsdbNodes() {
378       //TODO
379     }
380
381     /*
382      *  This test for 2 functions with the
383      *  same name that take different parameters.
384      */
385     @Test
386     public void testGetUniNodes() {
387       //TODO
388     }
389
390     @Test
391     public void testGetUnis() {
392       //TODO
393     }
394
395     @Test
396     public void testGetUni() {
397       //TODO
398     }
399
400     @Test
401     public void testRead() {
402       //TODO
403     }
404
405     @Test
406     public void testReadLink() {
407       //TODO
408     }
409
410     @Test
411     public void testReadNode() {
412       //TODO
413     }
414
415     /*
416      *  This test for 2 functions with the
417      *  same name that take different parameters.
418      */
419     @Test
420     public void testUpdateUniNode() {
421       //TODO
422     }
423
424     @Test
425     public void testUpdateEvcNode() {
426       //TODO
427     }
428
429 }