Introducing RPCs for remote calls to VPP
[groupbasedpolicy.git] / neutron-vpp-mapper / src / test / java / org / opendaylight / groupbasedpolicy / neutron / vpp / mapper / processors / NetworkAwareTest.java
1 /*\r
2  * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors;\r
10 \r
11 import static org.junit.Assert.assertEquals;\r
12 import static org.junit.Assert.assertNull;\r
13 import static org.junit.Assert.assertFalse;\r
14 import static org.junit.Assert.assertTrue;\r
15 \r
16 import java.util.List;\r
17 import java.util.UUID;\r
18 \r
19 import org.junit.Before;\r
20 import org.junit.Test;\r
21 import org.mockito.Mockito;\r
22 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
23 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
24 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
25 import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;\r
26 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
27 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;\r
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.FlatNetwork;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.VlanNetwork;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.GbpBridgeDomain;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.bridge.domain.base.attributes.PhysicalLocationRef;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeFlat;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVlan;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder;\r
40 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;\r
41 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;\r
42 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;\r
43 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;\r
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;\r
46 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;\r
48 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;\r
49 \r
50 import com.google.common.base.Optional;\r
51 import com.google.common.collect.ImmutableList;\r
52 \r
53 public class NetworkAwareTest extends AbstractDataBrokerTest {\r
54 \r
55     private DataBroker dataBroker;\r
56     private NetworkAware networkAware;\r
57     private NetworkProviderExtensionBuilder netExtBuilder;\r
58 \r
59     @Before\r
60     public void init() {\r
61         dataBroker = Mockito.spy(getDataBroker());\r
62         networkAware = new NetworkAware(dataBroker);\r
63         netExtBuilder = new NetworkProviderExtensionBuilder();\r
64         netExtBuilder.setPhysicalNetwork("physicalNet");\r
65     }\r
66 \r
67     @Test\r
68     public void testProcessCreatedNeutronDto_flat() {\r
69         netExtBuilder.setNetworkType(NetworkTypeFlat.class);\r
70         Network network = createTestNetwork("net", netExtBuilder.build());\r
71         networkAware.processCreatedNeutronDto(network);\r
72         ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
73         Optional<GbpBridgeDomain> optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
74                 networkAware.getGbpBridgeDomainIid(network.getUuid().getValue()), rTx);\r
75         assertTrue(optBrDomain.isPresent());\r
76     }\r
77 \r
78     @Test\r
79     public void testProcessUpdatedNeutronDto() {\r
80         netExtBuilder.setNetworkType(NetworkTypeFlat.class);\r
81         Network network1 = createTestNetwork("net1", netExtBuilder.build());\r
82         Network network2 = new NetworkBuilder(network1).setName("net2")\r
83             .addAugmentation(NetworkProviderExtension.class, netExtBuilder.build())\r
84             .build();\r
85         networkAware.processUpdatedNeutronDto(network1, network2);\r
86         ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
87         Optional<GbpBridgeDomain> optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
88                 networkAware.getGbpBridgeDomainIid(network2.getUuid().getValue()), rTx);\r
89         assertTrue(optBrDomain.isPresent());\r
90         assertEquals(optBrDomain.get().getDescription(), "net2");\r
91     }\r
92 \r
93     @Test\r
94     public void testProcessDeletedNeutronDto() {\r
95         netExtBuilder.setNetworkType(NetworkTypeFlat.class);\r
96         Network network = createTestNetwork("net1", netExtBuilder.build());\r
97         networkAware.processDeletedNeutronDto(network);\r
98         ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
99         Optional<GbpBridgeDomain> optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
100                 networkAware.getGbpBridgeDomainIid(network.getUuid().getValue()), rTx);\r
101         assertFalse(optBrDomain.isPresent());\r
102     }\r
103 \r
104     @Test\r
105     public void testCreateBridgeDomain_vlanNetwork() {\r
106         netExtBuilder.setNetworkType(NetworkTypeVlan.class);\r
107         netExtBuilder.setSegmentationId("2016");\r
108         Network vlanNetwork = createTestNetwork("VlanNet", netExtBuilder.build());\r
109         GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(vlanNetwork);\r
110         assertEquals(bridgeDomain.getId(), vlanNetwork.getUuid().getValue());\r
111         assertEquals(bridgeDomain.getDescription(), vlanNetwork.getName());\r
112         assertEquals(bridgeDomain.getType(), VlanNetwork.class);\r
113         assertEquals(bridgeDomain.getVlan(), new VlanId(Integer.valueOf(2016)));\r
114     }\r
115 \r
116     @Test\r
117     public void testCreateBridgeDomain_flatNetwork() {\r
118         netExtBuilder.setNetworkType(NetworkTypeFlat.class);\r
119         Network flatNetwork = createTestNetwork("FlatNet", netExtBuilder.build());\r
120         GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(flatNetwork);\r
121         assertEquals(bridgeDomain.getId(), flatNetwork.getUuid().getValue());\r
122         assertEquals(bridgeDomain.getDescription(), flatNetwork.getName());\r
123         assertEquals(bridgeDomain.getType(), FlatNetwork.class);\r
124     }\r
125 \r
126     @Test\r
127     public void testCreateBridgeDomain_noPhysicalNetwork() {\r
128         netExtBuilder.setNetworkType(NetworkTypeFlat.class);\r
129         netExtBuilder.setPhysicalNetwork(null);\r
130         Network flatNetwork = createTestNetwork("FlatNet", netExtBuilder.build());\r
131         GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(flatNetwork);\r
132         assertNull(bridgeDomain.getPhysicalLocationRef());\r
133     }\r
134 \r
135     @Test\r
136     public void testCreateBridgeDomain_noNetworkType() {\r
137         Network vlanNetwork = createTestNetwork("noTypeNet", new NetworkProviderExtensionBuilder().build());\r
138         GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(vlanNetwork);\r
139         assertNull(bridgeDomain);\r
140     }\r
141 \r
142     @Test\r
143     public void testResolveDomainLocations() {\r
144         NodeId nodeId = new NodeId("node1");\r
145         TpId tpId = new TpId("tp1");\r
146         TopologyId topologyId = new TopologyId("physicalNet");\r
147         writeBasicTopology(topologyId, nodeId, tpId);\r
148         NetworkProviderExtension netExt = new NetworkProviderExtensionBuilder().setPhysicalNetwork("physicalNet")\r
149             .build();\r
150         List<PhysicalLocationRef> resolvedLocations = networkAware.resolveDomainLocations(netExt);\r
151         PhysicalLocationRef physLocationRef = resolvedLocations.get(0);\r
152         assertEquals(nodeId, physLocationRef.getNodeId());\r
153         assertEquals(tpId.getValue(), physLocationRef.getInterface().get(0));\r
154     }\r
155 \r
156     private Network createTestNetwork(String name, NetworkProviderExtension ext) {\r
157         return new NetworkBuilder().setUuid(new Uuid(UUID.randomUUID().toString()))\r
158             .setName(name)\r
159             .addAugmentation(NetworkProviderExtension.class, ext)\r
160             .build();\r
161     }\r
162 \r
163     private void writeBasicTopology(TopologyId topologyId, NodeId nodeId, TpId tpId) {\r
164         TerminationPoint tp = new TerminationPointBuilder().setTpId(tpId).build();\r
165         Node node = new NodeBuilder().setNodeId(new NodeId(nodeId))\r
166             .setTerminationPoint(ImmutableList.<TerminationPoint>of(tp))\r
167             .build();\r
168         Topology topology = new TopologyBuilder().setTopologyId(topologyId)\r
169             .setNode(ImmutableList.<Node>of(node))\r
170             .build();\r
171         WriteTransaction wTx = dataBroker.newWriteOnlyTransaction();\r
172         wTx.put(LogicalDatastoreType.CONFIGURATION, networkAware.getTopologyIid(new TopologyId("physicalNet")),\r
173                 topology, true);\r
174         DataStoreHelper.submitToDs(wTx);\r
175     }\r
176 }\r