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 java.util.List;
17 import com.google.common.collect.ImmutableList;
18 import org.junit.Before;
19 import org.junit.Rule;
20 import org.junit.Test;
21 import org.junit.rules.ExpectedException;
22 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
23 import org.opendaylight.groupbasedpolicy.neutron.mapper.EndpointRegistrator;
24 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperAssert;
25 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
26 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.PortUtils;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIpsBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.PortsBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.SubnetsBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.SubnetBuilder;
44 public class NeutronPortAwareDataStoreTest extends NeutronMapperDataBrokerTest {
46 private final Uuid tenantUuid = new Uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
47 private final Uuid portUuid = new Uuid("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb");
48 private final Uuid subnetUuid = new Uuid("cccccccc-cccc-cccc-cccc-cccccccccccc");
49 private final Uuid networkUuid = new Uuid("dddddddd-dddd-dddd-dddd-dddddddddddd");
50 private final Uuid uuidReserved3 = new Uuid("dddddddd-dddd-dddd-dddd-ddddddddddd3");
52 private DataBroker dataBroker;
53 private NeutronPortAware portAware;
54 private EndpointRegistrator epRegistrator;
55 private Neutron neutron;
59 dataBroker = getDataBroker();
60 neutron = mock(Neutron.class);
61 epRegistrator = mock(EndpointRegistrator.class);
62 when(epRegistrator.registerEndpoint(any(RegisterEndpointInput.class))).thenReturn(true);
63 when(epRegistrator.registerEndpoint(
64 any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput.class)))
66 when(epRegistrator.unregisterEndpoint(any(UnregisterEndpointInput.class))).thenReturn(true);
67 when(epRegistrator.unregisterEndpoint(
68 any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput.class)))
71 portAware = new NeutronPortAware(dataBroker, epRegistrator);
75 public ExpectedException thrown = ExpectedException.none();
78 public void testConstructor_invalidArgument() throws NullPointerException {
79 thrown.expect(NullPointerException.class);
80 new NeutronPortAware(null, null);
84 public void test_createAndDeleteDhcpPort() {
85 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
86 Subnets subnets = createSubnets();
87 when(neutron.getSubnets()).thenReturn(subnets);
89 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
90 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
91 .setFixedIps(ImmutableList.of(portIpWithSubnet))
93 portAware.onCreated(port, neutron);
94 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
96 portAware.onDeleted(port, neutron, neutron);
97 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
101 public void test_createDhcpPort_noFixedIps() {
102 Subnets subnets = createSubnets();
103 when(neutron.getSubnets()).thenReturn(subnets);
105 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP).build();
106 portAware.onCreated(port, neutron);
107 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
111 public void test_createAndDeleteNormalPort() throws Exception {
112 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
113 Subnets subnets = createSubnets();
114 when(neutron.getSubnets()).thenReturn(subnets);
116 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
117 Port port = newBasePort().setDeviceOwner("owner for normal port")
118 .setFixedIps(ImmutableList.of(portIpWithSubnet))
120 portAware.onCreated(port, neutron);
121 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
123 portAware.onDeleted(port, neutron, neutron);
124 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
128 public void test_createAndUpdateNormalPort() {
129 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
130 Subnets subnets = createSubnets();
131 when(neutron.getSubnets()).thenReturn(subnets);
133 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
134 Port port = newBasePort().setDeviceOwner("owner for normal port")
135 .setFixedIps(ImmutableList.of(portIpWithSubnet))
137 portAware.onCreated(port, neutron);
138 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
140 Port newPort = new PortBuilder(port).setName("updatedName").build();
141 portAware.onUpdated(port, newPort, neutron, neutron);
142 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
146 public void test_createNormalPort_noFixedIps() {
147 Subnets subnets = createSubnets();
148 when(neutron.getSubnets()).thenReturn(subnets);
150 Port port = newBasePort().setDeviceOwner("owner for normal port").build();
151 portAware.onCreated(port, neutron);
152 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
156 public void test_createAndDeleteRouterInterfacePort() {
157 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
158 Subnets subnets = createSubnets();
159 when(neutron.getSubnets()).thenReturn(subnets);
161 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
162 Port neutronPort1 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
163 .setFixedIps(ImmutableList.of(portIpWithSubnet))
164 .setName("portName1")
166 .setDeviceId("deviceId")
167 .setFixedIps(ImmutableList.of(portIpWithSubnet))
168 .setNetworkId(networkUuid)
169 .setMacAddress("00:00:00:00:35:02")
171 Port neutronPort2 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
172 .setFixedIps(ImmutableList.of(portIpWithSubnet))
173 .setName("portName2")
175 .setDeviceId("deviceId")
176 .setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
177 .setFixedIps(ImmutableList.of(portIpWithSubnet))
178 .setNetworkId(networkUuid)
179 .setMacAddress("00:00:00:00:35:02")
181 Ports neutronPorts = new PortsBuilder().setPort(ImmutableList.of(neutronPort1, neutronPort2)).build();
182 when(neutron.getPorts()).thenReturn(neutronPorts);
184 Subnet subnet = subnets.getSubnet().get(0);
185 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE)
186 .setFixedIps(ImmutableList.of(portIpWithSubnet))
188 portAware.onCreated(port, neutron);
189 NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, ipAddress);
191 portAware.onDeleted(port, neutron, neutron);
192 NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, ipAddress);
193 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
197 public void test_createRouterInterfacePort_noFixedIps() {
198 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
199 Subnets subnets = createSubnets();
200 when(neutron.getSubnets()).thenReturn(subnets);
202 Subnet subnet = subnets.getSubnet().get(0);
203 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE).build();
204 portAware.onCreated(port, neutron);
205 NeutronMapperAssert.assertNetworkDomainNotExists(dataBroker, port, subnet, ipAddress);
209 public void test_createAndDeleteRouterGatewayPort() {
210 Port port = new PortBuilder().setUuid(portUuid).setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_GATEWAY).build();
211 portAware.onCreated(port, neutron);
212 portAware.onDeleted(port, neutron, neutron);
217 public void test_createAndDeleteFloatingIpPort() {
218 Port port = new PortBuilder().setUuid(portUuid).setDeviceOwner(PortUtils.DEVICE_OWNER_FLOATING_IP).build();
219 portAware.onCreated(port, neutron);
220 portAware.onDeleted(port, neutron, neutron);
224 private PortBuilder newBasePort() {
225 List<Uuid> secGroups = ImmutableList.of(uuidReserved3);
226 return new PortBuilder().setTenantId(new Uuid(tenantUuid))
227 .setSecurityGroups(secGroups)
230 .setDeviceId("deviceId")
231 .setNetworkId(networkUuid)
232 .setMacAddress("00:00:00:00:35:02");
235 private Subnets createSubnets() {
236 Subnet subnet = new SubnetBuilder().setTenantId(tenantUuid)
238 .setName("subnetName")
239 .setNetworkId(networkUuid)
240 .setCidr("10.0.0.0/24")
242 return new SubnetsBuilder().setSubnet(ImmutableList.of(subnet)).build();
245 private FixedIps createFixedIps(IpAddress ipAddress) {
246 return new FixedIpsBuilder().setSubnetId(subnetUuid).setIpAddress(ipAddress).build();