From 5e7189fd465631f17ab47bcdcfe941512673d6fb Mon Sep 17 00:00:00 2001 From: grmontpetit Date: Sat, 16 Jan 2016 17:59:32 -0500 Subject: [PATCH] Added scaffolding for tests and example functions Change-Id: I80272c402e82cfcce942502c4759a56b12bb07e9 Signed-off-by: grmontpetit (cherry picked from commit 038f4a949d1d587744c68f78b805a07272755a88) --- .../opendaylight/unimgr/impl/UnimgrUtils.java | 8 +- .../unimgr/impl/UnimgrMapperTest.java | 83 ++++ .../unimgr/impl/UnimgrUtilsTest.java | 432 ++++++++++++++++++ 3 files changed, 519 insertions(+), 4 deletions(-) create mode 100644 impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrMapperTest.java create mode 100644 impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrUtilsTest.java diff --git a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java index 99c9ed2c..3e8734d9 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java @@ -381,10 +381,10 @@ public class UnimgrUtils { InstanceIdentifier uniNodeIid = UnimgrMapper.getUniNodeIid(uniNodeId); NodeKey uniNodeKey = new NodeKey(uniNodeId); Node nodeData = new NodeBuilder() - .setNodeId(uniNodeId) - .setKey(uniNodeKey) - .addAugmentation(UniAugmentation.class, uni) - .build(); + .setNodeId(uniNodeId) + .setKey(uniNodeKey) + .addAugmentation(UniAugmentation.class, uni) + .build(); WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); transaction.put(LogicalDatastoreType.CONFIGURATION, uniNodeIid, nodeData); CheckedFuture future = transaction.submit(); diff --git a/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrMapperTest.java b/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrMapperTest.java new file mode 100644 index 00000000..6411ca47 --- /dev/null +++ b/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrMapperTest.java @@ -0,0 +1,83 @@ +package org.opendaylight.unimgr.impl; + +import org.junit.Before; +import org.junit.Test; + +public class UnimgrMapperTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void testCreateOvsdbBridgeNodeIid() { + //TODO + } + + @Test + public void testGetEvcLinkIid() { + //TODO + } + + @Test + public void testGetEvcTopologyIid() { + //TODO + } + + @Test + public void testGetEvcTopologyNodeIid() { + //TODO + } + + @Test + public void testGetOvsdbBridgeNodeIid() { + //TODO + } + + /* + * This test for 2 functions with the + * same name that take different parameters. + */ + @Test + public void testGetOvsdbNodeIid() { + //TODO + } + + @Test + public void testGetOvsdbTopologyIid() { + //TODO + } + + /* + * This test for 2 functions with the + * same name that take different parameters. + */ + @Test + public void testGetTerminationPointIid() { + //TODO + } + + /* + * This test for 2 functions with the + * same name that take different parameters. + */ + @Test + public void testGetUniIid() { + //TODO + } + + @Test + public void testGetUniTopologyIid() { + //TODO + } + + @Test + public void testGetUniTopologyNodeIid() { + //TODO + } + + @Test + public void testGetUniNodeIid() { + //TODO + } +} diff --git a/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrUtilsTest.java b/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrUtilsTest.java new file mode 100644 index 00000000..0038e81d --- /dev/null +++ b/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrUtilsTest.java @@ -0,0 +1,432 @@ +package org.opendaylight.unimgr.impl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.times; + +import org.mockito.Mockito; + +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import com.google.common.collect.ImmutableBiMap; +import com.google.common.util.concurrent.CheckedFuture; + +import org.powermock.api.mockito.PowerMockito; +import org.powermock.api.support.membermodification.MemberMatcher; +import org.powermock.api.support.membermodification.MemberModifier; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; +import org.opendaylight.ovsdb.southbound.SouthboundConstants; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes.VlanMode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.EvcAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + + +@RunWith(PowerMockRunner.class) +@PrepareForTest({InstanceIdentifier.class, LogicalDatastoreType.class, UnimgrMapper.class, UnimgrUtils.class, UUID.class}) +public class UnimgrUtilsTest { + + @Rule + public final ExpectedException exception = ExpectedException.none(); + + @Before + public void setUp() throws Exception { + PowerMockito.mockStatic(UnimgrUtils.class, Mockito.CALLS_REAL_METHODS); + PowerMockito.mockStatic(UnimgrMapper.class, Mockito.CALLS_REAL_METHODS); + PowerMockito.mockStatic(InstanceIdentifier.class); + PowerMockito.mockStatic(LogicalDatastoreType.class); + PowerMockito.mockStatic(UUID.class); + } + + /* + * This test for 2 functions with the + * same name that take different parameters. + */ + @Test + public void testCreateBridgeNode() throws Exception { + // TODO + } + + @Test + public void testCreateControllerEntries() { + String targetString = new String("controllerEntry"); + List controllerEntries = new ArrayList(); + ControllerEntryBuilder controllerEntryBuilder = new ControllerEntryBuilder(); + controllerEntryBuilder.setTarget(new Uri(targetString)); + controllerEntries.add(controllerEntryBuilder.build()); + assertEquals(controllerEntries, UnimgrUtils.createControllerEntries(targetString)); + } + + @SuppressWarnings("unchecked") + @Test + public void testCreateGreTunnel() throws Exception { + DataBroker dataBroker = PowerMockito.mock(DataBroker.class); + + UniAugmentation sourceUniAug = new UniAugmentationBuilder() + .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.1"))) + .build(); + UniAugmentation destUniAug = new UniAugmentationBuilder() + .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2"))) + .build(); + + Node bridgeNode = PowerMockito.mock(Node.class); + String bridgeName = PowerMockito.mock(String.class); + String portName = PowerMockito.mock(String.class); + + WriteTransaction transaction = mock(WriteTransaction.class); + when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction); + doNothing().when(transaction).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(TerminationPoint.class)); + when(transaction.submit()).thenReturn(mock(CheckedFuture.class)); + + MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getTerminationPointIid", Node.class, String.class)); + MemberModifier.suppress(MemberMatcher.method(UnimgrUtils.class, "createMdsalProtocols")); + + UnimgrUtils.createGreTunnel(dataBroker, + sourceUniAug, + destUniAug, + bridgeNode, + bridgeName, + portName); + verify(transaction).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(TerminationPoint.class)); + verify(transaction).submit(); + } + + @Test + public void testCreateMdsalProtocols() { + List protocolList = new ArrayList(); + ImmutableBiMap> mapper = + SouthboundConstants.OVSDB_PROTOCOL_MAP.inverse(); + ProtocolEntry protoEntry = new ProtocolEntryBuilder().setProtocol((Class) mapper.get("OpenFlow13")).build(); + protocolList.add(protoEntry); + assertEquals(protocolList, UnimgrUtils.createMdsalProtocols()); + } + + @Test + public void testCreateOvsdbBridgeAugmentation() throws Exception { + OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(PowerMockito.mock(InstanceIdentifier.class)); + UniAugmentation uni = new UniAugmentationBuilder().setOvsdbNodeRef(ovsdbNodeRef).build(); + UUID bridgeUuid = PowerMockito.mock(UUID.class); + PowerMockito.when(UUID.randomUUID()).thenReturn(bridgeUuid); + OvsdbBridgeAugmentation ovsdbNode = new OvsdbBridgeAugmentationBuilder() + .setBridgeName(new OvsdbBridgeName(UnimgrConstants.DEFAULT_BRIDGE_NAME)) + .setManagedBy(ovsdbNodeRef) + .setBridgeUuid(new Uuid(bridgeUuid.toString())) + .build(); + assertEquals(ovsdbNode, UnimgrUtils.createOvsdbBridgeAugmentation(uni)); + // Force an exception + Uni ovsdbNodeRefNull = new UniAugmentationBuilder().setOvsdbNodeRef(null).build(); + exception.expect(Exception.class); + UnimgrUtils.createOvsdbBridgeAugmentation(ovsdbNodeRefNull); + } + + /* + * This test for 2 functions with the + * same name that take different parameters. + */ + @SuppressWarnings("unchecked") + @Test + public void testCreateOvsdbNode() { + DataBroker dataBroker = PowerMockito.mock(DataBroker.class); + MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getOvsdbNodeIid", IpAddress.class)); + IpAddress mockIp = mock(IpAddress.class); + InstanceIdentifier ovsdbNodeIid = PowerMockito.mock(InstanceIdentifier.class); + PowerMockito.when(UnimgrMapper.getOvsdbNodeIid(mockIp)).thenReturn(ovsdbNodeIid); + WriteTransaction transaction = mock(WriteTransaction.class); + when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction); + NodeId ovsdbNodeId = new NodeId("abcde"); + Uni uni = new UniAugmentationBuilder().setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2"))).build(); + // createOvsdbNode with NodeId and Uni + UnimgrUtils.createOvsdbNode(dataBroker, ovsdbNodeId, uni); + doNothing().when(transaction).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(Node.class)); + verify(transaction).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(Node.class)); + verify(transaction).submit(); + // Test with a null uni + exception.expect(Exception.class); + UnimgrUtils.createOvsdbNode(dataBroker, ovsdbNodeId, null); + // createOvsdbNode with Uni + UniAugmentation uniAug = new UniAugmentationBuilder(uni).build(); + UnimgrUtils.createOvsdbNode(dataBroker, uniAug); + MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getOvsdbNodeIid", NodeId.class)); + PowerMockito.when(UnimgrMapper.getOvsdbNodeIid(ovsdbNodeId)).thenReturn(ovsdbNodeIid); + doNothing().when(transaction).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(Node.class)); + verify(transaction).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(Node.class)); + verify(transaction).submit(); + // try with a null uni + exception.expect(Exception.class); + UnimgrUtils.createOvsdbNode(dataBroker, null); + } + + @Test + public void testCreateOvsdbNodeAugmentation() { + Uni uni = new UniAugmentationBuilder().setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2"))).build(); + ConnectionInfo connectionInfos = new ConnectionInfoBuilder() + .setRemoteIp(uni.getIpAddress()) + .setRemotePort(new PortNumber(UnimgrConstants.OVSDB_PORT)) + .build(); + OvsdbNodeAugmentation ovsdbNode = new OvsdbNodeAugmentationBuilder() + .setConnectionInfo(connectionInfos).build(); + assertEquals(ovsdbNode, UnimgrUtils.createOvsdbNodeAugmentation(uni)); + } + + @Test + public void testCreateOvsdbNodeId() { + IpAddress ipAddress = new IpAddress(new Ipv4Address("192.168.1.2")); + String nodeId = UnimgrConstants.OVSDB_PREFIX + + ipAddress.getIpv4Address().getValue().toString() + + ":" + + UnimgrConstants.OVSDB_PORT; + assertEquals(new NodeId(nodeId), UnimgrUtils.createOvsdbNodeId(ipAddress)); + } + + @Test + public void testCreateOvsdbTerminationPointAugmentation() { + Uni uni = new UniAugmentationBuilder().build(); + VlanId vlanID = new VlanId(1); + OvsdbTerminationPointAugmentation terminationPoint = new OvsdbTerminationPointAugmentationBuilder() + .setName(UnimgrConstants.DEFAULT_INTERNAL_IFACE) + .setVlanTag(vlanID) + .setVlanMode(VlanMode.Access) + .build(); + assertEquals(terminationPoint, UnimgrUtils.createOvsdbTerminationPointAugmentation(uni)); + } + + @Test + public void testCreateEvc() { + DataBroker dataBroker = mock(DataBroker.class); + EvcAugmentation evc = mock(EvcAugmentation.class); + assertEquals(false, UnimgrUtils.createEvc(dataBroker, evc)); + } + + @SuppressWarnings("unchecked") + @Test + public void testCreateUniNode() { + DataBroker dataBroker = PowerMockito.mock(DataBroker.class); + UniAugmentation uniAug = new UniAugmentationBuilder() + .setIpAddress(new IpAddress(new Ipv4Address("192.168.1.2"))) + .build(); + // false case + assertEquals(false, UnimgrUtils.createUniNode(dataBroker, uniAug)); + MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, "getUniNodeIid", NodeId.class)); + InstanceIdentifier uniNodeIid = PowerMockito.mock(InstanceIdentifier.class); + PowerMockito.when(UnimgrMapper.getUniNodeIid(any(NodeId.class))).thenReturn(uniNodeIid); + WriteTransaction transaction = mock(WriteTransaction.class); + when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction); + UnimgrUtils.createUniNode(dataBroker, uniAug); + verify(transaction).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(Node.class)); + verify(transaction).submit(); + } + + @Test + public void testCreateUniNodeId() { + IpAddress ipAddress = new IpAddress(new Ipv4Address("192.168.1.2")); + NodeId nodeId = new NodeId(UnimgrConstants.UNI_PREFIX + ipAddress.getIpv4Address().getValue().toString()); + assertEquals(nodeId, UnimgrUtils.createUniNodeId(ipAddress)); + } + + /* + * This test for 2 functions with the + * same name that take different parameters. + */ + @SuppressWarnings("unchecked") + @Test + public void testCreateTerminationPointNode() { + DataBroker dataBroker = mock(DataBroker.class); + Uni uni = new UniAugmentationBuilder().build(); + InstanceIdentifier tpIid = PowerMockito.mock(InstanceIdentifier.class); + Node bridgeNode = new NodeBuilder().build(); + String bridgeName = "br0"; + String portName = "tp1"; + String type = "gre"; + WriteTransaction transaction = mock(WriteTransaction.class); + MemberModifier.suppress(MemberMatcher.method(UnimgrMapper.class, + "getTerminationPointIid", + Node.class, + String.class)); + PowerMockito.when(UnimgrMapper.getTerminationPointIid(any(Node.class), + any(String.class))).thenReturn(tpIid); + when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction); + // Function 1 + UnimgrUtils.createTerminationPointNode(dataBroker, uni, bridgeNode, bridgeName, portName, type); + + //Function 2 + doNothing().when(transaction).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(TerminationPoint.class)); + UnimgrUtils.createTerminationPointNode(dataBroker, uni, bridgeNode, bridgeName, portName); + verify(transaction, times(2)).put(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(TerminationPoint.class)); + verify(transaction,times(2)).submit(); + } + + @Test + public void testDelete() { + // FIXME this function will be moved into an MdsalUtils class. + // see bug: https://bugs.opendaylight.org/show_bug.cgi?id=5035 + } + + @Test + public void testDeleteTerminationPoint() { + //TODO + } + + @Test + public void testDeleteNode() { + //TODO + } + + @Test + public void testExtract() { + // FIXME this function will be moved into an MdsalUtils class. + // see bug: https://bugs.opendaylight.org/show_bug.cgi?id=5035 + } + + @Test + public void testExtractOriginal() { + //TODO + } + + @Test + public void testExtractRemoved() { + //TODO + } + + @Test + public void testFindOvsdbNode() { + //TODO + } + + @Test + public void testFindUniNode() { + //TODO + } + + @Test + public void testGetConnectionInfo() { + //TODO + } + + @Test + public void testGetEvcLinks() { + //TODO + } + + @Test + public void testGetLocalIp() { + //TODO + } + + @Test + public void testGetOvsdbNodes() { + //TODO + } + + /* + * This test for 2 functions with the + * same name that take different parameters. + */ + @Test + public void testGetUniNodes() { + //TODO + } + + @Test + public void testGetUnis() { + //TODO + } + + @Test + public void testGetUni() { + //TODO + } + + @Test + public void testRead() { + //TODO + } + + @Test + public void testReadLink() { + //TODO + } + + @Test + public void testReadNode() { + //TODO + } + + /* + * This test for 2 functions with the + * same name that take different parameters. + */ + @Test + public void testUpdateUniNode() { + //TODO + } + + @Test + public void testUpdateEvcNode() { + //TODO + } + +} -- 2.36.6