Bug 8228 - metadata service fix made cleaner
[groupbasedpolicy.git] / neutron-mapper / src / test / java / org / opendaylight / groupbasedpolicy / neutron / mapper / mapping / NeutronPortAwareDataStoreTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping;
10
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.when;
14
15 import java.util.List;
16
17 import org.junit.Before;
18 import org.junit.Rule;
19 import org.junit.Test;
20 import org.junit.rules.ExpectedException;
21 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
22 import org.opendaylight.groupbasedpolicy.neutron.mapper.EndpointRegistrator;
23 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperAssert;
24 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
25 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.PortUtils;
26 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.Utils;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIpsBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.PortsBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.SubnetsBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.SubnetBuilder;
46
47 import com.google.common.collect.ImmutableList;
48
49 public class NeutronPortAwareDataStoreTest extends NeutronMapperDataBrokerTest {
50
51     private final Uuid tenantUuid = new Uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
52     private final Uuid portUuid = new Uuid("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb");
53     private final Uuid subnetUuid = new Uuid("cccccccc-cccc-cccc-cccc-cccccccccccc");
54     private final Uuid networkUuid = new Uuid("dddddddd-dddd-dddd-dddd-dddddddddddd");
55     private final Uuid uuidReserved3 = new Uuid("dddddddd-dddd-dddd-dddd-ddddddddddd3");
56
57     private DataBroker dataBroker;
58     private NeutronPortAware portAware;
59     private EndpointRegistrator epRegistrator;
60     private Neutron neutron;
61
62     @Before
63     public void init() {
64         dataBroker = getDataBroker();
65         neutron = mock(Neutron.class);
66         epRegistrator = mock(EndpointRegistrator.class);
67         when(epRegistrator.registerEndpoint(any(RegisterEndpointInput.class))).thenReturn(true);
68         when(epRegistrator.registerEndpoint(
69                 any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput.class)))
70                     .thenReturn(true);
71         when(epRegistrator.unregisterEndpoint(any(UnregisterEndpointInput.class))).thenReturn(true);
72         when(epRegistrator.unregisterEndpoint(
73                 any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput.class)))
74                     .thenReturn(true);
75
76         portAware = new NeutronPortAware(dataBroker, epRegistrator, new IpPrefix(new Ipv4Prefix("192.168.192.168/32")));
77     }
78
79     @Rule
80     public ExpectedException thrown = ExpectedException.none();
81
82     @Test
83     public void testConstructor_invalidArgument() throws NullPointerException {
84         thrown.expect(NullPointerException.class);
85         new NeutronPortAware(null, null, null);
86     }
87
88     @Test
89     public void test_createAndDeleteDhcpPort() {
90         IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
91         Subnets subnets = createSubnets();
92         when(neutron.getSubnets()).thenReturn(subnets);
93
94         FixedIps portIpWithSubnet = createFixedIps(ipAddress);
95         Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
96             .setFixedIps(ImmutableList.of(portIpWithSubnet))
97             .build();
98         portAware.onCreated(port, neutron);
99         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
100
101         portAware.onDeleted(port, neutron, neutron);
102         NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
103     }
104
105     @Test
106     public void test_createDhcpPort_noFixedIps() {
107         Subnets subnets = createSubnets();
108         when(neutron.getSubnets()).thenReturn(subnets);
109
110         Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP).build();
111         portAware.onCreated(port, neutron);
112         NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
113     }
114
115     @Test
116     public void test_createAndDeleteNormalPort() throws Exception {
117         IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
118         Subnets subnets = createSubnets();
119         when(neutron.getSubnets()).thenReturn(subnets);
120
121         FixedIps portIpWithSubnet = createFixedIps(ipAddress);
122         Port port = newBasePort().setDeviceOwner("owner for normal port")
123             .setFixedIps(ImmutableList.of(portIpWithSubnet))
124             .build();
125         portAware.onCreated(port, neutron);
126         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
127
128         portAware.onDeleted(port, neutron, neutron);
129         NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
130     }
131
132     @Test
133     public void test_createAndUpdateNormalPort() {
134         IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
135         Subnets subnets = createSubnets();
136         when(neutron.getSubnets()).thenReturn(subnets);
137
138         FixedIps portIpWithSubnet = createFixedIps(ipAddress);
139         Port port = newBasePort().setDeviceOwner("owner for normal port")
140             .setFixedIps(ImmutableList.of(portIpWithSubnet))
141             .build();
142         portAware.onCreated(port, neutron);
143         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
144
145         Port newPort = new PortBuilder(port).setName("updatedName").build();
146         portAware.onUpdated(port, newPort, neutron, neutron);
147         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
148     }
149
150     @Test
151     public void test_createNormalPort_noFixedIps() {
152         Subnets subnets = createSubnets();
153         when(neutron.getSubnets()).thenReturn(subnets);
154
155         Port port = newBasePort().setDeviceOwner("owner for normal port").build();
156         portAware.onCreated(port, neutron);
157         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
158     }
159
160     @Test
161     public void test_createAndDeleteRouterInterfacePort() {
162         IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
163         Subnets subnets = createSubnets();
164         when(neutron.getSubnets()).thenReturn(subnets);
165
166         FixedIps portIpWithSubnet = createFixedIps(ipAddress);
167         Port neutronPort1 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
168             .setFixedIps(ImmutableList.of(portIpWithSubnet))
169             .setName("portName1")
170             .setUuid(portUuid)
171             .setDeviceId("deviceId")
172             .setFixedIps(ImmutableList.of(portIpWithSubnet))
173             .setNetworkId(networkUuid)
174             .setMacAddress(new MacAddress("00:00:00:00:35:02"))
175             .build();
176         Port neutronPort2 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
177             .setFixedIps(ImmutableList.of(portIpWithSubnet))
178             .setName("portName2")
179             .setUuid(portUuid)
180             .setDeviceId("deviceId")
181             .setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
182             .setFixedIps(ImmutableList.of(portIpWithSubnet))
183             .setNetworkId(networkUuid)
184             .setMacAddress(new MacAddress("00:00:00:00:35:02"))
185             .build();
186         Ports neutronPorts = new PortsBuilder().setPort(ImmutableList.of(neutronPort1, neutronPort2)).build();
187         when(neutron.getPorts()).thenReturn(neutronPorts);
188
189         Subnet subnet = subnets.getSubnet().get(0);
190         Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE)
191             .setFixedIps(ImmutableList.of(portIpWithSubnet))
192             .build();
193         portAware.onCreated(port, neutron);
194         NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, neutron, ipAddress);
195
196         portAware.onDeleted(port, neutron, neutron);
197         NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, neutron, ipAddress);
198         NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
199     }
200
201     @Test
202     public void test_createRouterInterfacePort_noFixedIps() {
203         Subnets subnets = createSubnets();
204         when(neutron.getSubnets()).thenReturn(subnets);
205
206         Subnet subnet = subnets.getSubnet().get(0);
207         Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE).build();
208         portAware.onCreated(port, neutron);
209         NeutronMapperAssert.assertNetworkDomainNotExists(dataBroker, port, subnet, neutron, null);
210     }
211
212     @Test
213     public void test_createAndDeleteRouterGatewayPort() {
214         Port port = new PortBuilder().setUuid(portUuid).setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_GATEWAY).build();
215         portAware.onCreated(port, neutron);
216         portAware.onDeleted(port, neutron, neutron);
217         // no op
218     }
219
220     @Test
221     public void test_createAndDeleteFloatingIpPort() {
222         Port port = new PortBuilder().setUuid(portUuid).setDeviceOwner(PortUtils.DEVICE_OWNER_FLOATING_IP).build();
223         portAware.onCreated(port, neutron);
224         portAware.onDeleted(port, neutron, neutron);
225         // no op
226     }
227
228     private PortBuilder newBasePort() {
229         List<Uuid> secGroups = ImmutableList.of(uuidReserved3);
230         return new PortBuilder().setTenantId(new Uuid(tenantUuid))
231             .setSecurityGroups(secGroups)
232             .setName("portName")
233             .setUuid(portUuid)
234             .setDeviceId("deviceId")
235             .setNetworkId(networkUuid)
236             .setMacAddress(new MacAddress("00:00:00:00:35:02"));
237     }
238
239     private Subnets createSubnets() {
240         Subnet subnet = new SubnetBuilder().setTenantId(tenantUuid)
241             .setUuid(subnetUuid)
242             .setName("subnetName")
243             .setNetworkId(networkUuid)
244             .setCidr(Utils.createIpPrefix("10.0.0.0/24"))
245             .build();
246         return new SubnetsBuilder().setSubnet(ImmutableList.of(subnet)).build();
247     }
248
249     private FixedIps createFixedIps(IpAddress ipAddress) {
250         return new FixedIpsBuilder().setSubnetId(subnetUuid).setIpAddress(ipAddress).build();
251     }
252
253 }