Implementing DHCP proxy command for VPP
[groupbasedpolicy.git] / renderers / vpp / src / test / java / org / opendaylight / groupbasedpolicy / renderer / vpp / policy / BridgeDomainManagerImplTest.java
index b1344ecaf4cd446eab34c69c0d4c0986bc0e27f7..867584f40b2e31179c8bc9e961d699e622384f69 100644 (file)
@@ -10,24 +10,40 @@ package org.opendaylight.groupbasedpolicy.renderer.vpp.policy;
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.concurrent.ExecutionException;
+
+import javax.annotation.Nonnull;
 
 import org.junit.Assert;
 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.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.dhcp.DhcpRelayHandler;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.iface.InterfaceManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.LispStateManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.loopback.LoopbackManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.flat.overlay.FlatOverlayManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.nat.NatManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.acl.AclManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.routing.RoutingManager;
 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
 import org.opendaylight.groupbasedpolicy.test.CustomDataBrokerTest;
 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VxlanVni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VxlanVni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.NodeVbridgeAugment;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.NodeVbridgeAugmentBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyTypesVbridgeAugment;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyTypesVbridgeAugmentBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyVbridgeAugment;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyVbridgeAugmentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.node.BridgeMemberBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.topology.types.VbridgeTopologyBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.tunnel.vxlan.rev160429.TunnelTypeVxlan;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.tunnel.vxlan.rev160429.network.topology.topology.tunnel.parameters.VxlanTunnelParametersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.tunnel.vxlan.rev170327.TunnelTypeVxlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.tunnel.vxlan.rev170327.network.topology.topology.tunnel.parameters.VxlanTunnelParametersBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 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;
@@ -55,11 +71,12 @@ public class BridgeDomainManagerImplTest extends CustomDataBrokerTest {
     private final static boolean BRIDGE_DOMAIN_ARP = false;
     private final static NodeId VPP_NODE_ID = new NodeId("vppNode");
     private final static Topology BASE_TOPOLOGY = new TopologyBuilder().setTopologyId(BASE_TOPOLOGY_ID)
-        .setNode(Arrays.asList(new NodeBuilder().setNodeId(VPP_NODE_ID)
-            .setSupportingNode(Arrays.asList(new SupportingNodeBuilder().setTopologyRef(SUPPORTING_TOPOLOGY_NETCONF)
-                .setNodeRef(VPP_NODE_ID)
+        .setNode(Collections.singletonList(new NodeBuilder().setNodeId(VPP_NODE_ID)
+                .setSupportingNode(Collections.singletonList(new SupportingNodeBuilder()
+                        .setTopologyRef(SUPPORTING_TOPOLOGY_NETCONF)
+                        .setNodeRef(VPP_NODE_ID)
+                        .build()))
                 .build()))
-            .build()))
         .setTopologyTypes(new TopologyTypesBuilder()
             .addAugmentation(TopologyTypesVbridgeAugment.class, new TopologyTypesVbridgeAugmentBuilder()
                 .setVbridgeTopology(new VbridgeTopologyBuilder().build()).build())
@@ -79,6 +96,7 @@ public class BridgeDomainManagerImplTest extends CustomDataBrokerTest {
     private BridgeDomainManagerImpl bridgeDomainManager;
 
     @Override
+    @Nonnull
     public Collection<Class<?>> getClassesFromModules() {
         return Arrays.asList(NetworkTopology.class, Topology.class, TopologyVbridgeAugment.class,
                 TunnelTypeVxlan.class);
@@ -88,18 +106,48 @@ public class BridgeDomainManagerImplTest extends CustomDataBrokerTest {
     public void init() {
         dataBroker = getDataBroker();
         bridgeDomainManager = new BridgeDomainManagerImpl(dataBroker);
+        final InterfaceManager interfaceManager = Mockito.mock(InterfaceManager.class);
+        final AclManager aclManager = Mockito.mock(AclManager.class);
+        final NatManager natManager = Mockito.mock(NatManager.class);
+        final RoutingManager routingManager = Mockito.mock(RoutingManager.class);
+        final LispStateManager lispStateManager = Mockito.mock(LispStateManager.class);
+        final FlatOverlayManager flatOverlayManager = Mockito.mock(FlatOverlayManager.class);
+        final LoopbackManager loopbackManager = Mockito.mock(LoopbackManager.class);
+        final DhcpRelayHandler dhcpRelayHandler = Mockito.mock(DhcpRelayHandler.class);
+        final ForwardingManager fwManager =
+            new ForwardingManager(interfaceManager, aclManager, natManager, routingManager, bridgeDomainManager,
+                lispStateManager, loopbackManager, flatOverlayManager, dhcpRelayHandler, dataBroker);
+        fwManager.setTimer((byte) 1);
     }
 
     @Test
     public void testCreateVxlanBridgeDomainOnVppNode() throws Exception {
         bridgeDomainManager.createVxlanBridgeDomainOnVppNode(BRIDGE_DOMAIN_ID, BRIDGE_DOMAIN_VNI, VPP_NODE_ID);
+        // simulates VBD - when BD is created a node is stored to OPER DS
+        Thread vbdThread = new Thread(() -> {
+            WriteTransaction wTx = dataBroker.newWriteOnlyTransaction();
+            wTx.put(LogicalDatastoreType.OPERATIONAL, VppIidFactory
+                .getNodeIid(BASE_TOPOLOGY.getKey(), new NodeKey(VPP_NODE_ID)),
+                    new NodeBuilder().setNodeId(VPP_NODE_ID)
+                        .addAugmentation(NodeVbridgeAugment.class, new NodeVbridgeAugmentBuilder()
+                            .setBridgeMember(new BridgeMemberBuilder().build()).build())
+                        .build(),
+                    true);
+            try {
+                wTx.submit().get();
+            } catch (InterruptedException | ExecutionException e) {
+                Assert.fail();
+            }
+        });
+        vbdThread.join();
 
         Optional<Topology> topologyOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
                 VppIidFactory.getTopologyIid(BASE_TOPOLOGY.getKey()), dataBroker.newReadOnlyTransaction());
         Assert.assertTrue(topologyOptional.isPresent());
 
         Topology topology = topologyOptional.get();
-        Assert.assertEquals(BASE_TOPOLOGY, topology);
+        Assert.assertEquals(BASE_TOPOLOGY.getAugmentation(TopologyVbridgeAugment.class),
+                topology.getAugmentation(TopologyVbridgeAugment.class));
     }
 
     @Test