--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+import com.google.common.collect.ImmutableList;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.EndpointRegistrator;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperAssert;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.Networks;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.NetworksBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.SubnetBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+public class NeutronSubnetAwareDataStoreTest extends NeutronMapperDataBrokerTest {
+
+ private static final Uuid tenantUuid = new Uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
+ private static final Uuid networkUuid = new Uuid("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb");
+ private static final Uuid subnetUuid = new Uuid("cccccccc-cccc-cccc-cccc-cccccccccccc");
+ private static final Uuid subnetUuid2 = new Uuid("cccccccc-cccc-cccc-cccc-ccccccccccc2");
+ private static final IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
+ private static final IpAddress ipAddress2 = new IpAddress(new Ipv4Address("10.0.2.2"));
+ private static final IpPrefix ipPrefix = new IpPrefix(new Ipv4Prefix("10.0.0.0/24"));
+
+ private DataBroker dataBroker;
+ private Neutron neutron;
+ private EndpointRegistrator epRegistrator;
+ private EndpointService epService;
+ private BaseEndpointService baseEpService;
+ private Future<RpcResult<Void>> futureRpcResult;
+ private RpcResult<Void> rpcResult;
+ private RpcResult<Void> rpcFail;
+ private NeutronSubnetAware subnetAware;
+ private static final Subnet subnet = new SubnetBuilder().setTenantId(tenantUuid)
+ .setUuid(subnetUuid)
+ .setName("subnetName")
+ .setNetworkId(networkUuid)
+ .setGatewayIp(ipAddress)
+ .setCidr(ipPrefix)
+ .build();
+ private static final Subnet subnet2 = new SubnetBuilder().setTenantId(tenantUuid)
+ .setUuid(subnetUuid2)
+ .setName("subnetName2")
+ .setNetworkId(networkUuid)
+ .setGatewayIp(ipAddress2)
+ .setCidr(ipPrefix)
+ .build();
+
+ @Before
+ public void init() throws ExecutionException, InterruptedException {
+ futureRpcResult = mock(Future.class);
+ rpcResult = mock(RpcResult.class);
+ rpcFail = mock(RpcResult.class);
+ when(rpcResult.isSuccessful()).thenReturn(true);
+ when(rpcFail.isSuccessful()).thenReturn(false);
+
+ dataBroker = getDataBroker();
+ neutron = mock(Neutron.class);
+
+ epService = mock(EndpointService.class);
+ baseEpService = mock(BaseEndpointService.class);
+
+ when(futureRpcResult.get()).thenReturn(rpcResult);
+ when(epService.registerL3PrefixEndpoint(
+ any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput.class)))
+ .thenReturn(futureRpcResult);
+
+ epRegistrator = new EndpointRegistrator(epService, baseEpService);
+
+ subnetAware = new NeutronSubnetAware(dataBroker, epRegistrator);
+ }
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ @Test
+ public void testConstructor_invalidArgument() throws NullPointerException {
+ thrown.expect(NullPointerException.class);
+ new NeutronSubnetAware(null, null);
+ }
+
+ @Test
+ public void testOnCreated() {
+
+ NetworkProviderExtension networkProviderExtension =
+ new NetworkProviderExtensionBuilder().setPhysicalNetwork("physicalNetwork").build();
+ Network network = new NetworkBuilder().setUuid(networkUuid)
+ .addAugmentation(NetworkProviderExtension.class, networkProviderExtension)
+ .build();
+ Networks networks = new NetworksBuilder().setNetwork(ImmutableList.of(network)).build();
+ when(neutron.getNetworks()).thenReturn(networks);
+
+ subnetAware.onCreated(subnet, neutron);
+
+ NeutronMapperAssert.assertNetworkDomainExists(dataBroker, tenantUuid, subnet, ipAddress);
+ }
+
+ @Test
+ public void testOnCreated_noNetwork() {
+
+ Networks networks = new NetworksBuilder().setNetwork(ImmutableList.of()).build();
+ when(neutron.getNetworks()).thenReturn(networks);
+
+ subnetAware.onCreated(subnet, neutron);
+
+ NeutronMapperAssert.assertNetworkDomainNotExists(dataBroker, tenantUuid, subnet, ipAddress);
+ }
+
+ @Test
+ public void testOnUpdated() {
+
+ Network network = new NetworkBuilder().setUuid(networkUuid).build();
+ Networks networks = new NetworksBuilder().setNetwork(ImmutableList.of(network)).build();
+ when(neutron.getNetworks()).thenReturn(networks);
+
+ subnetAware.onCreated(subnet, neutron);
+
+ NeutronMapperAssert.assertNetworkDomainExists(dataBroker, tenantUuid, subnet, ipAddress);
+ NeutronMapperAssert.assertNetworkDomainNotExists(dataBroker, tenantUuid, subnet2, ipAddress);
+
+ subnetAware.onUpdated(subnet, subnet2, neutron, neutron);
+
+ NeutronMapperAssert.assertNetworkDomainExists(dataBroker, tenantUuid, subnet2, ipAddress);
+ }
+
+ @Test
+ public void testOnDeleted() {
+
+ Network network = new NetworkBuilder().setUuid(networkUuid).build();
+ Networks networks = new NetworksBuilder().setNetwork(ImmutableList.of(network)).build();
+ when(neutron.getNetworks()).thenReturn(networks);
+
+ subnetAware.onCreated(subnet, neutron);
+
+ NeutronMapperAssert.assertNetworkDomainExists(dataBroker, tenantUuid, subnet, ipAddress);
+
+ subnetAware.onDeleted(subnet, neutron, neutron);
+
+ NeutronMapperAssert.assertNetworkDomainNotExists(dataBroker, tenantUuid, subnet, ipAddress);
+ }
+
+ @Test
+ public void testOnDeleted_wrongSubnet() {
+
+ Network network = new NetworkBuilder().setUuid(networkUuid).build();
+ Networks networks = new NetworksBuilder().setNetwork(ImmutableList.of(network)).build();
+ when(neutron.getNetworks()).thenReturn(networks);
+
+ subnetAware.onCreated(subnet, neutron);
+
+ NeutronMapperAssert.assertNetworkDomainExists(dataBroker, tenantUuid, subnet, ipAddress);
+
+ subnetAware.onDeleted(subnet2, neutron, neutron);
+
+ NeutronMapperAssert.assertNetworkDomainExists(dataBroker, tenantUuid, subnet, ipAddress);
+ }
+
+}