/* * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.UUID; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; 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.groupbasedpolicy.vpp_renderer.rev160425.FlatNetwork; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.VlanNetwork; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.GbpBridgeDomain; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.bridge.domain.base.attributes.PhysicalLocationRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeFlat; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVlan; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder; 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.TopologyId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder; 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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; public class NetworkAwareTest extends AbstractDataBrokerTest { private DataBroker dataBroker; private NetworkAware networkAware; private NetworkProviderExtensionBuilder netExtBuilder; @Before public void init() { dataBroker = Mockito.spy(getDataBroker()); networkAware = new NetworkAware(dataBroker); netExtBuilder = new NetworkProviderExtensionBuilder(); netExtBuilder.setPhysicalNetwork("physicalNet"); } @Test public void testProcessCreatedNeutronDto_flat() { netExtBuilder.setNetworkType(NetworkTypeFlat.class); Network network = createTestNetwork("net", netExtBuilder.build()); networkAware.processCreatedNeutronDto(network); ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); Optional<GbpBridgeDomain> optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, networkAware.getGbpBridgeDomainIid(network.getUuid().getValue()), rTx); assertTrue(optBrDomain.isPresent()); } @Test public void testProcessUpdatedNeutronDto() { netExtBuilder.setNetworkType(NetworkTypeFlat.class); Network network1 = createTestNetwork("net1", netExtBuilder.build()); Network network2 = new NetworkBuilder(network1).setName("net2") .addAugmentation(NetworkProviderExtension.class, netExtBuilder.build()) .build(); networkAware.processUpdatedNeutronDto(network1, network2); ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); Optional<GbpBridgeDomain> optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, networkAware.getGbpBridgeDomainIid(network2.getUuid().getValue()), rTx); assertTrue(optBrDomain.isPresent()); assertEquals(optBrDomain.get().getDescription(), "net2"); } @Test public void testProcessDeletedNeutronDto() { netExtBuilder.setNetworkType(NetworkTypeFlat.class); Network network = createTestNetwork("net1", netExtBuilder.build()); networkAware.processDeletedNeutronDto(network); ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); Optional<GbpBridgeDomain> optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, networkAware.getGbpBridgeDomainIid(network.getUuid().getValue()), rTx); assertFalse(optBrDomain.isPresent()); } @Test public void testCreateBridgeDomain_vlanNetwork() { netExtBuilder.setNetworkType(NetworkTypeVlan.class); netExtBuilder.setSegmentationId("2016"); Network vlanNetwork = createTestNetwork("VlanNet", netExtBuilder.build()); GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(vlanNetwork); assertEquals(bridgeDomain.getId(), vlanNetwork.getUuid().getValue()); assertEquals(bridgeDomain.getDescription(), vlanNetwork.getName()); assertEquals(bridgeDomain.getType(), VlanNetwork.class); assertEquals(bridgeDomain.getVlan(), new VlanId(Integer.valueOf(2016))); } @Test public void testCreateBridgeDomain_flatNetwork() { netExtBuilder.setNetworkType(NetworkTypeFlat.class); Network flatNetwork = createTestNetwork("FlatNet", netExtBuilder.build()); GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(flatNetwork); assertEquals(bridgeDomain.getId(), flatNetwork.getUuid().getValue()); assertEquals(bridgeDomain.getDescription(), flatNetwork.getName()); assertEquals(bridgeDomain.getType(), FlatNetwork.class); } @Test public void testCreateBridgeDomain_noPhysicalNetwork() { netExtBuilder.setNetworkType(NetworkTypeFlat.class); netExtBuilder.setPhysicalNetwork(null); Network flatNetwork = createTestNetwork("FlatNet", netExtBuilder.build()); GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(flatNetwork); assertNull(bridgeDomain.getPhysicalLocationRef()); } @Test public void testCreateBridgeDomain_noNetworkType() { Network vlanNetwork = createTestNetwork("noTypeNet", new NetworkProviderExtensionBuilder().build()); GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(vlanNetwork); assertNull(bridgeDomain); } @Test public void testResolveDomainLocations() { NodeId nodeId = new NodeId("node1"); TpId tpId = new TpId("tp1"); TopologyId topologyId = new TopologyId("physicalNet"); writeBasicTopology(topologyId, nodeId, tpId); NetworkProviderExtension netExt = new NetworkProviderExtensionBuilder().setPhysicalNetwork("physicalNet") .build(); List<PhysicalLocationRef> resolvedLocations = networkAware.resolveDomainLocations(netExt); PhysicalLocationRef physLocationRef = resolvedLocations.get(0); assertEquals(nodeId, physLocationRef.getNodeId()); assertEquals(tpId.getValue(), physLocationRef.getInterface().get(0)); } private Network createTestNetwork(String name, NetworkProviderExtension ext) { return new NetworkBuilder().setUuid(new Uuid(UUID.randomUUID().toString())) .setName(name) .addAugmentation(NetworkProviderExtension.class, ext) .build(); } private void writeBasicTopology(TopologyId topologyId, NodeId nodeId, TpId tpId) { TerminationPoint tp = new TerminationPointBuilder().setTpId(tpId).build(); Node node = new NodeBuilder().setNodeId(new NodeId(nodeId)) .setTerminationPoint(ImmutableList.<TerminationPoint>of(tp)) .build(); Topology topology = new TopologyBuilder().setTopologyId(topologyId) .setNode(ImmutableList.<Node>of(node)) .build(); WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); wTx.put(LogicalDatastoreType.CONFIGURATION, networkAware.getTopologyIid(new TopologyId("physicalNet")), topology, true); DataStoreHelper.submitToDs(wTx); } }