8d375b4b18bca161308b29a96561814c2a70d4ea
[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.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;
44
45 import com.google.common.collect.ImmutableList;
46
47 public class NeutronPortAwareDataStoreTest extends NeutronMapperDataBrokerTest {
48
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");
54
55     private DataBroker dataBroker;
56     private NeutronPortAware portAware;
57     private EndpointRegistrator epRegistrator;
58     private Neutron neutron;
59
60     @Before
61     public void init() {
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)))
68                     .thenReturn(true);
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)))
72                     .thenReturn(true);
73
74         portAware = new NeutronPortAware(dataBroker, epRegistrator);
75     }
76
77     @Rule
78     public ExpectedException thrown = ExpectedException.none();
79
80     @Test
81     public void testConstructor_invalidArgument() throws NullPointerException {
82         thrown.expect(NullPointerException.class);
83         new NeutronPortAware(null, null);
84     }
85
86     @Test
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);
91
92         FixedIps portIpWithSubnet = createFixedIps(ipAddress);
93         Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
94             .setFixedIps(ImmutableList.of(portIpWithSubnet))
95             .build();
96         portAware.onCreated(port, neutron);
97         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
98
99         portAware.onDeleted(port, neutron, neutron);
100         NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
101     }
102
103     @Test
104     public void test_createDhcpPort_noFixedIps() {
105         Subnets subnets = createSubnets();
106         when(neutron.getSubnets()).thenReturn(subnets);
107
108         Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP).build();
109         portAware.onCreated(port, neutron);
110         NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
111     }
112
113     @Test
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);
118
119         FixedIps portIpWithSubnet = createFixedIps(ipAddress);
120         Port port = newBasePort().setDeviceOwner("owner for normal port")
121             .setFixedIps(ImmutableList.of(portIpWithSubnet))
122             .build();
123         portAware.onCreated(port, neutron);
124         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
125
126         portAware.onDeleted(port, neutron, neutron);
127         NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
128     }
129
130     @Test
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);
135
136         FixedIps portIpWithSubnet = createFixedIps(ipAddress);
137         Port port = newBasePort().setDeviceOwner("owner for normal port")
138             .setFixedIps(ImmutableList.of(portIpWithSubnet))
139             .build();
140         portAware.onCreated(port, neutron);
141         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
142
143         Port newPort = new PortBuilder(port).setName("updatedName").build();
144         portAware.onUpdated(port, newPort, neutron, neutron);
145         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
146     }
147
148     @Test
149     public void test_createNormalPort_noFixedIps() {
150         Subnets subnets = createSubnets();
151         when(neutron.getSubnets()).thenReturn(subnets);
152
153         Port port = newBasePort().setDeviceOwner("owner for normal port").build();
154         portAware.onCreated(port, neutron);
155         NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
156     }
157
158     @Test
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);
163
164         FixedIps portIpWithSubnet = createFixedIps(ipAddress);
165         Port neutronPort1 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
166             .setFixedIps(ImmutableList.of(portIpWithSubnet))
167             .setName("portName1")
168             .setUuid(portUuid)
169             .setDeviceId("deviceId")
170             .setFixedIps(ImmutableList.of(portIpWithSubnet))
171             .setNetworkId(networkUuid)
172             .setMacAddress(new MacAddress("00:00:00:00:35:02"))
173             .build();
174         Port neutronPort2 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
175             .setFixedIps(ImmutableList.of(portIpWithSubnet))
176             .setName("portName2")
177             .setUuid(portUuid)
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"))
183             .build();
184         Ports neutronPorts = new PortsBuilder().setPort(ImmutableList.of(neutronPort1, neutronPort2)).build();
185         when(neutron.getPorts()).thenReturn(neutronPorts);
186
187         Subnet subnet = subnets.getSubnet().get(0);
188         Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE)
189             .setFixedIps(ImmutableList.of(portIpWithSubnet))
190             .build();
191         portAware.onCreated(port, neutron);
192         NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, neutron, ipAddress);
193
194         portAware.onDeleted(port, neutron, neutron);
195         NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, neutron, ipAddress);
196         NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
197     }
198
199     @Test
200     public void test_createRouterInterfacePort_noFixedIps() {
201         Subnets subnets = createSubnets();
202         when(neutron.getSubnets()).thenReturn(subnets);
203
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);
208     }
209
210     @Test
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);
215         // no op
216     }
217
218     @Test
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);
223         // no op
224     }
225
226     private PortBuilder newBasePort() {
227         List<Uuid> secGroups = ImmutableList.of(uuidReserved3);
228         return new PortBuilder().setTenantId(new Uuid(tenantUuid))
229             .setSecurityGroups(secGroups)
230             .setName("portName")
231             .setUuid(portUuid)
232             .setDeviceId("deviceId")
233             .setNetworkId(networkUuid)
234             .setMacAddress(new MacAddress("00:00:00:00:35:02"));
235     }
236
237     private Subnets createSubnets() {
238         Subnet subnet = new SubnetBuilder().setTenantId(tenantUuid)
239             .setUuid(subnetUuid)
240             .setName("subnetName")
241             .setNetworkId(networkUuid)
242             .setCidr(Utils.createIpPrefix("10.0.0.0/24"))
243             .build();
244         return new SubnetsBuilder().setSubnet(ImmutableList.of(subnet)).build();
245     }
246
247     private FixedIps createFixedIps(IpAddress ipAddress) {
248         return new FixedIpsBuilder().setSubnetId(subnetUuid).setIpAddress(ipAddress).build();
249     }
250
251 }