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 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.Ipv4Address;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIpsBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.PortsBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.SubnetsBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.SubnetBuilder;
45 import com.google.common.collect.ImmutableList;
47 public class NeutronPortAwareDataStoreTest extends NeutronMapperDataBrokerTest {
49 private final Uuid tenantUuid = new Uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
50 private final Uuid portUuid = new Uuid("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb");
51 private final Uuid subnetUuid = new Uuid("cccccccc-cccc-cccc-cccc-cccccccccccc");
52 private final Uuid networkUuid = new Uuid("dddddddd-dddd-dddd-dddd-dddddddddddd");
53 private final Uuid uuidReserved3 = new Uuid("dddddddd-dddd-dddd-dddd-ddddddddddd3");
55 private DataBroker dataBroker;
56 private NeutronPortAware portAware;
57 private EndpointRegistrator epRegistrator;
58 private Neutron neutron;
62 dataBroker = getDataBroker();
63 neutron = mock(Neutron.class);
64 epRegistrator = mock(EndpointRegistrator.class);
65 when(epRegistrator.registerEndpoint(any(RegisterEndpointInput.class))).thenReturn(true);
66 when(epRegistrator.registerEndpoint(
67 any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput.class)))
69 when(epRegistrator.unregisterEndpoint(any(UnregisterEndpointInput.class))).thenReturn(true);
70 when(epRegistrator.unregisterEndpoint(
71 any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput.class)))
74 portAware = new NeutronPortAware(dataBroker, epRegistrator);
78 public ExpectedException thrown = ExpectedException.none();
81 public void testConstructor_invalidArgument() throws NullPointerException {
82 thrown.expect(NullPointerException.class);
83 new NeutronPortAware(null, null);
87 public void test_createAndDeleteDhcpPort() {
88 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
89 Subnets subnets = createSubnets();
90 when(neutron.getSubnets()).thenReturn(subnets);
92 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
93 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
94 .setFixedIps(ImmutableList.of(portIpWithSubnet))
96 portAware.onCreated(port, neutron);
97 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
99 portAware.onDeleted(port, neutron, neutron);
100 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
104 public void test_createDhcpPort_noFixedIps() {
105 Subnets subnets = createSubnets();
106 when(neutron.getSubnets()).thenReturn(subnets);
108 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP).build();
109 portAware.onCreated(port, neutron);
110 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
114 public void test_createAndDeleteNormalPort() throws Exception {
115 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
116 Subnets subnets = createSubnets();
117 when(neutron.getSubnets()).thenReturn(subnets);
119 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
120 Port port = newBasePort().setDeviceOwner("owner for normal port")
121 .setFixedIps(ImmutableList.of(portIpWithSubnet))
123 portAware.onCreated(port, neutron);
124 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
126 portAware.onDeleted(port, neutron, neutron);
127 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
131 public void test_createAndUpdateNormalPort() {
132 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
133 Subnets subnets = createSubnets();
134 when(neutron.getSubnets()).thenReturn(subnets);
136 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
137 Port port = newBasePort().setDeviceOwner("owner for normal port")
138 .setFixedIps(ImmutableList.of(portIpWithSubnet))
140 portAware.onCreated(port, neutron);
141 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
143 Port newPort = new PortBuilder(port).setName("updatedName").build();
144 portAware.onUpdated(port, newPort, neutron, neutron);
145 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
149 public void test_createNormalPort_noFixedIps() {
150 Subnets subnets = createSubnets();
151 when(neutron.getSubnets()).thenReturn(subnets);
153 Port port = newBasePort().setDeviceOwner("owner for normal port").build();
154 portAware.onCreated(port, neutron);
155 NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
159 public void test_createAndDeleteRouterInterfacePort() {
160 IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
161 Subnets subnets = createSubnets();
162 when(neutron.getSubnets()).thenReturn(subnets);
164 FixedIps portIpWithSubnet = createFixedIps(ipAddress);
165 Port neutronPort1 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
166 .setFixedIps(ImmutableList.of(portIpWithSubnet))
167 .setName("portName1")
169 .setDeviceId("deviceId")
170 .setFixedIps(ImmutableList.of(portIpWithSubnet))
171 .setNetworkId(networkUuid)
172 .setMacAddress(new MacAddress("00:00:00:00:35:02"))
174 Port neutronPort2 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
175 .setFixedIps(ImmutableList.of(portIpWithSubnet))
176 .setName("portName2")
178 .setDeviceId("deviceId")
179 .setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
180 .setFixedIps(ImmutableList.of(portIpWithSubnet))
181 .setNetworkId(networkUuid)
182 .setMacAddress(new MacAddress("00:00:00:00:35:02"))
184 Ports neutronPorts = new PortsBuilder().setPort(ImmutableList.of(neutronPort1, neutronPort2)).build();
185 when(neutron.getPorts()).thenReturn(neutronPorts);
187 Subnet subnet = subnets.getSubnet().get(0);
188 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE)
189 .setFixedIps(ImmutableList.of(portIpWithSubnet))
191 portAware.onCreated(port, neutron);
192 NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, neutron, ipAddress);
194 portAware.onDeleted(port, neutron, neutron);
195 NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, neutron, ipAddress);
196 NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
200 public void test_createRouterInterfacePort_noFixedIps() {
201 Subnets subnets = createSubnets();
202 when(neutron.getSubnets()).thenReturn(subnets);
204 Subnet subnet = subnets.getSubnet().get(0);
205 Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE).build();
206 portAware.onCreated(port, neutron);
207 NeutronMapperAssert.assertNetworkDomainNotExists(dataBroker, port, subnet, neutron, null);
211 public void test_createAndDeleteRouterGatewayPort() {
212 Port port = new PortBuilder().setUuid(portUuid).setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_GATEWAY).build();
213 portAware.onCreated(port, neutron);
214 portAware.onDeleted(port, neutron, neutron);
219 public void test_createAndDeleteFloatingIpPort() {
220 Port port = new PortBuilder().setUuid(portUuid).setDeviceOwner(PortUtils.DEVICE_OWNER_FLOATING_IP).build();
221 portAware.onCreated(port, neutron);
222 portAware.onDeleted(port, neutron, neutron);
226 private PortBuilder newBasePort() {
227 List<Uuid> secGroups = ImmutableList.of(uuidReserved3);
228 return new PortBuilder().setTenantId(new Uuid(tenantUuid))
229 .setSecurityGroups(secGroups)
232 .setDeviceId("deviceId")
233 .setNetworkId(networkUuid)
234 .setMacAddress(new MacAddress("00:00:00:00:35:02"));
237 private Subnets createSubnets() {
238 Subnet subnet = new SubnetBuilder().setTenantId(tenantUuid)
240 .setName("subnetName")
241 .setNetworkId(networkUuid)
242 .setCidr(Utils.createIpPrefix("10.0.0.0/24"))
244 return new SubnetsBuilder().setSubnet(ImmutableList.of(subnet)).build();
247 private FixedIps createFixedIps(IpAddress ipAddress) {
248 return new FixedIpsBuilder().setSubnetId(subnetUuid).setIpAddress(ipAddress).build();