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