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