1 package org.opendaylight.unimgr.impl;
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;
12 import org.mockito.Mockito;
14 import org.powermock.core.classloader.annotations.PrepareForTest;
15 import org.powermock.modules.junit4.PowerMockRunner;
17 import com.google.common.collect.ImmutableBiMap;
18 import com.google.common.util.concurrent.CheckedFuture;
20 import org.powermock.api.mockito.PowerMockito;
21 import org.powermock.api.support.membermodification.MemberMatcher;
22 import org.powermock.api.support.membermodification.MemberModifier;
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.UUID;
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;
71 @RunWith(PowerMockRunner.class)
72 @PrepareForTest({InstanceIdentifier.class, LogicalDatastoreType.class, UnimgrMapper.class, UnimgrUtils.class, UUID.class})
73 public class UnimgrUtilsTest {
76 public final ExpectedException exception = ExpectedException.none();
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);
88 * This test for 2 functions with the
89 * same name that take different parameters.
92 public void testCreateBridgeNode() throws Exception {
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));
106 @SuppressWarnings("unchecked")
108 public void testCreateGreTunnel() throws Exception {
109 DataBroker dataBroker = PowerMockito.mock(DataBroker.class);
111 UniAugmentation sourceUniAug = new UniAugmentationBuilder()
112 .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.1")))
114 UniAugmentation destUniAug = new UniAugmentationBuilder()
115 .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2")))
118 Node bridgeNode = PowerMockito.mock(Node.class);
119 String bridgeName = PowerMockito.mock(String.class);
120 String portName = PowerMockito.mock(String.class);
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));
129 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getTerminationPointIid", Node.class, String.class));
130 MemberModifier.suppress(MemberMatcher.method(UnimgrUtils.class, "createMdsalProtocols"));
132 UnimgrUtils.createGreTunnel(dataBroker,
138 verify(transaction).put(any(LogicalDatastoreType.class),
139 any(InstanceIdentifier.class),
140 any(TerminationPoint.class));
141 verify(transaction).submit();
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());
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()))
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);
173 * This test for 2 functions with the
174 * same name that take different parameters.
176 @SuppressWarnings("unchecked")
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),
193 verify(transaction).put(any(LogicalDatastoreType.class),
194 any(InstanceIdentifier.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),
208 verify(transaction).put(any(LogicalDatastoreType.class),
209 any(InstanceIdentifier.class),
211 verify(transaction).submit();
212 // try with a null uni
213 exception.expect(Exception.class);
214 UnimgrUtils.createOvsdbNode(dataBroker, null);
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))
224 OvsdbNodeAugmentation ovsdbNode = new OvsdbNodeAugmentationBuilder()
225 .setConnectionInfo(connectionInfos).build();
226 assertEquals(ovsdbNode, UnimgrUtils.createOvsdbNodeAugmentation(uni));
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()
235 + UnimgrConstants.OVSDB_PORT;
236 assertEquals(new NodeId(nodeId), UnimgrUtils.createOvsdbNodeId(ipAddress));
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)
246 .setVlanMode(VlanMode.Access)
248 assertEquals(terminationPoint, UnimgrUtils.createOvsdbTerminationPointAugmentation(uni));
252 public void testCreateEvc() {
253 DataBroker dataBroker = mock(DataBroker.class);
254 EvcAugmentation evc = mock(EvcAugmentation.class);
255 assertEquals(false, UnimgrUtils.createEvc(dataBroker, evc));
258 @SuppressWarnings("unchecked")
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")))
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),
276 verify(transaction).submit();
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));
287 * This test for 2 functions with the
288 * same name that take different parameters.
290 @SuppressWarnings("unchecked")
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";
300 WriteTransaction transaction = mock(WriteTransaction.class);
301 MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class,
302 "getTerminationPointIid",
305 PowerMockito.when(UnimgrMapper.getTerminationPointIid(any(Node.class),
306 any(String.class))).thenReturn(tpIid);
307 when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
309 UnimgrUtils.createTerminationPointNode(dataBroker, uni, bridgeNode, bridgeName, portName, type);
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();
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
329 public void testDeleteTerminationPoint() {
334 public void testDeleteNode() {
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
345 public void testExtractOriginal() {
350 public void testExtractRemoved() {
355 public void testFindOvsdbNode() {
360 public void testFindUniNode() {
365 public void testGetConnectionInfo() {
370 public void testGetEvcLinks() {
375 public void testGetLocalIp() {
380 public void testGetOvsdbNodes() {
385 * This test for 2 functions with the
386 * same name that take different parameters.
389 public void testGetUniNodes() {
394 public void testGetUnis() {
399 public void testGetUni() {
404 public void testRead() {
409 public void testReadLink() {
414 public void testReadNode() {
419 * This test for 2 functions with the
420 * same name that take different parameters.
423 public void testUpdateUniNode() {
428 public void testUpdateEvcNode() {