2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping;
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.when;
15 import com.google.common.collect.ImmutableList;
17 import java.util.Collections;
18 import java.util.List;
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;
50 public class NeutronPortAwareDataStoreTest extends NeutronMapperDataBrokerTest {
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");
58 private DataBroker dataBroker;
59 private NeutronPortAware portAware;
60 private EndpointRegistrator epRegistrator;
61 private Neutron neutron;
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.
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)))
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)))
79 portAware = new NeutronPortAware(dataBroker, epRegistrator, new IpPrefix(new Ipv4Prefix("192.168.192.168/32")));
83 public ExpectedException thrown = ExpectedException.none();
86 public void testConstructor_invalidArgument() throws NullPointerException {
87 thrown.expect(NullPointerException.class);
88 new NeutronPortAware(null, null, null);
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);
97 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
98 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
99 .setFixedIps(ImmutableList.of(portIpWithSubnet))
101 when(neutron.getPorts()).thenReturn(new PortsBuilder().setPort(Collections.singletonList(port)).build());
103 portAware.onCreated(port, neutron);
104 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
106 portAware.onDeleted(port, neutron, neutron);
107 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
111 public void test_createDhcpPort_noFixedIps() {
112 Subnets subnets = createSubnets();
113 when(neutron.getSubnets()).thenReturn(subnets);
115 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP).build();
116 portAware.onCreated(port, neutron);
117 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
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);
126 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
127 Port port = newBasePort().setDeviceOwner("owner for normal port")
128 .setFixedIps(ImmutableList.of(portIpWithSubnet))
130 when(neutron.getPorts()).thenReturn(new PortsBuilder().setPort(Collections.singletonList(port)).build());
132 portAware.onCreated(port, neutron);
133 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
135 portAware.onDeleted(port, neutron, neutron);
136 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
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);
145 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
146 Port port = newBasePort().setDeviceOwner("owner for normal port")
147 .setFixedIps(ImmutableList.of(portIpWithSubnet))
149 portAware.onCreated(port, neutron);
150 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
152 Port newPort = new PortBuilder(port).setName("updatedName").build();
153 portAware.onUpdated(port, newPort, neutron, neutron);
154 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
158 public void test_createNormalPort_noFixedIps() {
159 Subnets subnets = createSubnets();
160 when(neutron.getSubnets()).thenReturn(subnets);
162 Port port = newBasePort().setDeviceOwner("owner for normal port").build();
163 portAware.onCreated(port, neutron);
164 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
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);
173 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
174 Port neutronPort1 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
175 .setFixedIps(ImmutableList.of(portIpWithSubnet))
176 .setName("portName1")
178 .setDeviceId("deviceId")
179 .setFixedIps(ImmutableList.of(portIpWithSubnet))
180 .setNetworkId(networkUuid)
181 .setMacAddress(new MacAddress("00:00:00:00:35:02"))
183 Port neutronPort2 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
184 .setFixedIps(ImmutableList.of(portIpWithSubnet))
185 .setName("portName2")
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"))
193 Ports neutronPorts = new PortsBuilder().setPort(ImmutableList.of(neutronPort1, neutronPort2)).build();
194 when(neutron.getPorts()).thenReturn(neutronPorts);
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")
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);
205 portAware.onDeleted(port, neutron, neutron);
206 NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, neutron, ipAddress);
207 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
211 public void test_createRouterInterfacePort_noFixedIps() {
212 Subnets subnets = createSubnets();
213 when(neutron.getSubnets()).thenReturn(subnets);
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);
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);
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);
237 private PortBuilder newBasePort() {
238 List<Uuid> secGroups = ImmutableList.of(uuidReserved3);
239 return new PortBuilder().setTenantId(new Uuid(tenantUuid))
240 .setSecurityGroups(secGroups)
243 .setDeviceId("deviceId")
244 .setNetworkId(networkUuid)
245 .setMacAddress(new MacAddress("00:00:00:00:35:02"));
248 private Subnets createSubnets() {
249 Subnet subnet = new SubnetBuilder().setTenantId(tenantUuid)
251 .setName("subnetName")
252 .setNetworkId(networkUuid)
253 .setCidr(Utils.createIpPrefix("10.0.0.0/24"))
255 return new SubnetsBuilder().setSubnet(ImmutableList.of(subnet)).build();
258 private FixedIps createFixedIps(IpAddress ipAddress) {
259 return new FixedIpsBuilder().setSubnetId(subnetUuid).setIpAddress(ipAddress).build();