Unit tests for neutron mapper (parent commit) 47/39947/2
authorKonstantin Blagov <kblagov@cisco.com>
Tue, 7 Jun 2016 13:08:26 +0000 (15:08 +0200)
committerMartin Sunal <msunal@cisco.com>
Wed, 8 Jun 2016 18:32:50 +0000 (18:32 +0000)
- base setup for DataStore testing
- tests for SecurityGroupAware, PortAware

Change-Id: I99ba280c96d60cd1b3e3d1e4923823a8344b5721
Signed-off-by: Konstantin Blagov <kblagov@cisco.com>
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAware.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/util/PortUtils.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/infrastructure/NetworkClientTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/infrastructure/NetworkServiceTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAwareDataStoreTest.java [new file with mode: 0644]
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronSecurityGroupAwareDataStoreTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/NeutronSecurityRuleAwareDataStoreTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/NeutronSecurityRuleAwareTest.java
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/CustomDataBrokerTest.java [moved from neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/GbpDataBrokerTest.java with 60% similarity]
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/NeutronMapperAssert.java [new file with mode: 0644]
neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/NeutronMapperDataBrokerTest.java [new file with mode: 0644]

index 03e06b2b8b4bc37a90d3d4706f36e147737b75a8..7bd5b1c188da01723a24ddf35ff5e13e61c28459 100644 (file)
@@ -129,7 +129,7 @@ public class NeutronPortAware implements NeutronAware<Port> {
                 .setContextType(MappingUtils.L2_BRDIGE_DOMAIN)
                 .setParent(MappingUtils.createParent(routerL3Context, MappingUtils.L3_CONTEXT))
                 .build();
-            rwTx.merge(LogicalDatastoreType.CONFIGURATION, L2L3IidFactory.l2BridgeDomainIid(tenantId, l2BdId), l2Bd);
+            rwTx.merge(LogicalDatastoreType.CONFIGURATION, L2L3IidFactory.l2BridgeDomainIid(tenantId, l2BdId), l2Bd, true);
             // set virtual router IP for subnet
             NetworkDomain subnetDomain = NeutronSubnetAware.createSubnet(
                     routerPortSubnet, portIpWithSubnet.getIpAddress());
@@ -165,7 +165,7 @@ public class NeutronPortAware implements NeutronAware<Port> {
 
             ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction();
             registerBaseEndpointAndStoreMapping(
-                    ImmutableList.<AddressEndpointReg>of(l2BaseEp.build(), l3BaseEp.build()), port, rwTx);
+                    ImmutableList.of(l2BaseEp.build(), l3BaseEp.build()), port, rwTx);
             registerEndpointAndStoreMapping(epInBuilder.build(), port, rwTx);
             DataStoreHelper.submitToDs(rwTx);
         } else if (PortUtils.isNormalPort(port)) {
@@ -222,7 +222,7 @@ public class NeutronPortAware implements NeutronAware<Port> {
             TenantId tenantId, ReadWriteTransaction rwTx) {
         L2BridgeDomainId l2BdId = new L2BridgeDomainId(routerPortSubnet.getNetworkId().getValue());
         L2BridgeDomain l2Bd = new L2BridgeDomainBuilder().setId(l2BdId).setParent(new L3ContextId(routerL3Context)).build();
-        rwTx.merge(LogicalDatastoreType.CONFIGURATION, IidFactory.l2BridgeDomainIid(tenantId, l2BdId), l2Bd);
+        rwTx.merge(LogicalDatastoreType.CONFIGURATION, IidFactory.l2BridgeDomainIid(tenantId, l2BdId), l2Bd, true);
         // set virtual router IP for subnet
         org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet subnet = NeutronSubnetAware.createTenantSubnet(
                 routerPortSubnet, portIpWithSubnet.getIpAddress());
index 3ef29b5c15570312f33c5113fb774f755975f2e1..debe75422e14f2062beced50167483f88c5c1296 100644 (file)
@@ -24,10 +24,10 @@ import com.google.common.base.Optional;
 
 public class PortUtils {
 
-    private static final String DEVICE_OWNER_DHCP = "network:dhcp";
-    private static final String DEVICE_OWNER_ROUTER_IFACE = "network:router_interface";
-    private static final String DEVICE_OWNER_ROUTER_GATEWAY = "network:router_gateway";
-    private static final String DEVICE_OWNER_FLOATING_IP = "network:floatingip";
+    public static final String DEVICE_OWNER_DHCP = "network:dhcp";
+    public static final String DEVICE_OWNER_ROUTER_IFACE = "network:router_interface";
+    public static final String DEVICE_OWNER_ROUTER_GATEWAY = "network:router_gateway";
+    public static final String DEVICE_OWNER_FLOATING_IP = "network:floatingip";
 
     public static Optional<Port> findPort(Uuid uuid, @Nullable Ports ports) {
         if (ports == null || ports.getPort() == null) {
index 819c083d8e5f9b867ba33215d0806c459eb2009a..b94caec29ad839f83e98a2a9d1edc14a5d7a188e 100644 (file)
@@ -7,14 +7,14 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorKey;
 
-public class NetworkClientTest extends GbpDataBrokerTest {
+public class NetworkClientTest extends NeutronMapperDataBrokerTest {
 
     private final String tenantID = "00000000-0000-0000-0000-000000000001";
     private final SelectorName selector = new SelectorName("dummy-selector");
index 625c1f81c9a8a18cff103d770e39c9feb4459341..7d2e18a404b10e27b8a648aaae23cde3a06c9442 100644 (file)
@@ -9,7 +9,7 @@ import java.util.Set;
 import org.junit.Test;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
@@ -19,7 +19,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
 
-public class NetworkServiceTest extends GbpDataBrokerTest {
+public class NetworkServiceTest extends NeutronMapperDataBrokerTest {
 
     // dhcp
     private static final SubjectName DHCP_SUBJECT_NAME = new SubjectName("ALLOW_DHCP");
diff --git a/neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAwareDataStoreTest.java b/neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAwareDataStoreTest.java
new file mode 100644 (file)
index 0000000..a5d1f4d
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+ * 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.List;
+
+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.groupbasedpolicy.neutron.mapper.util.PortUtils;
+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.Ipv4Address;
+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.RegisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIpsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.PortsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder;
+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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.SubnetsBuilder;
+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;
+
+public class NeutronPortAwareDataStoreTest extends NeutronMapperDataBrokerTest {
+
+    private final Uuid tenantUuid = new Uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
+    private final Uuid portUuid = new Uuid("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb");
+    private final Uuid subnetUuid = new Uuid("cccccccc-cccc-cccc-cccc-cccccccccccc");
+    private final Uuid networkUuid = new Uuid("dddddddd-dddd-dddd-dddd-dddddddddddd");
+    private final Uuid uuidReserved3 = new Uuid("dddddddd-dddd-dddd-dddd-ddddddddddd3");
+
+    private DataBroker dataBroker;
+    private NeutronPortAware portAware;
+    private EndpointRegistrator epRegistrator;
+    private Neutron neutron;
+
+    @Before
+    public void init() {
+        dataBroker = getDataBroker();
+        neutron = mock(Neutron.class);
+        epRegistrator = mock(EndpointRegistrator.class);
+        when(epRegistrator.registerEndpoint(any(RegisterEndpointInput.class))).thenReturn(true);
+        when(epRegistrator.registerEndpoint(
+                any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput.class)))
+                    .thenReturn(true);
+        when(epRegistrator.unregisterEndpoint(any(UnregisterEndpointInput.class))).thenReturn(true);
+        when(epRegistrator.unregisterEndpoint(
+                any(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput.class)))
+                    .thenReturn(true);
+
+        portAware = new NeutronPortAware(dataBroker, epRegistrator);
+    }
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+    @Test
+    public void testConstructor_invalidArgument() throws NullPointerException {
+        thrown.expect(NullPointerException.class);
+        new NeutronPortAware(null, null);
+    }
+
+    @Test
+    public void test_createAndDeleteDhcpPort() {
+        IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
+        Subnets subnets = createSubnets();
+        when(neutron.getSubnets()).thenReturn(subnets);
+
+        FixedIps portIpWithSubnet = createFixedIps(ipAddress);
+        Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
+            .setFixedIps(ImmutableList.of(portIpWithSubnet))
+            .build();
+        portAware.onCreated(port, neutron);
+        NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
+
+        portAware.onDeleted(port, neutron, neutron);
+        NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
+    }
+
+    @Test
+    public void test_createDhcpPort_noFixedIps() {
+        Subnets subnets = createSubnets();
+        when(neutron.getSubnets()).thenReturn(subnets);
+
+        Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP).build();
+        portAware.onCreated(port, neutron);
+        NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
+    }
+
+    @Test
+    public void test_createAndDeleteNormalPort() throws Exception {
+        IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
+        Subnets subnets = createSubnets();
+        when(neutron.getSubnets()).thenReturn(subnets);
+
+        FixedIps portIpWithSubnet = createFixedIps(ipAddress);
+        Port port = newBasePort().setDeviceOwner("owner for normal port")
+            .setFixedIps(ImmutableList.of(portIpWithSubnet))
+            .build();
+        portAware.onCreated(port, neutron);
+        NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
+
+        portAware.onDeleted(port, neutron, neutron);
+        NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
+    }
+
+    @Test
+    public void test_createAndUpdateNormalPort() {
+        IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
+        Subnets subnets = createSubnets();
+        when(neutron.getSubnets()).thenReturn(subnets);
+
+        FixedIps portIpWithSubnet = createFixedIps(ipAddress);
+        Port port = newBasePort().setDeviceOwner("owner for normal port")
+            .setFixedIps(ImmutableList.of(portIpWithSubnet))
+            .build();
+        portAware.onCreated(port, neutron);
+        NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
+
+        Port newPort = new PortBuilder(port).setName("updatedName").build();
+        portAware.onUpdated(port, newPort, neutron, neutron);
+        NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
+    }
+
+    @Test
+    public void test_createNormalPort_noFixedIps() {
+        Subnets subnets = createSubnets();
+        when(neutron.getSubnets()).thenReturn(subnets);
+
+        Port port = newBasePort().setDeviceOwner("owner for normal port").build();
+        portAware.onCreated(port, neutron);
+        NeutronMapperAssert.assertPortExists(dataBroker, port.getUuid());
+    }
+
+    @Test
+    public void test_createAndDeleteRouterInterfacePort() {
+        IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
+        Subnets subnets = createSubnets();
+        when(neutron.getSubnets()).thenReturn(subnets);
+
+        FixedIps portIpWithSubnet = createFixedIps(ipAddress);
+        Port neutronPort1 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
+            .setFixedIps(ImmutableList.of(portIpWithSubnet))
+            .setName("portName1")
+            .setUuid(portUuid)
+            .setDeviceId("deviceId")
+            .setFixedIps(ImmutableList.of(portIpWithSubnet))
+            .setNetworkId(networkUuid)
+            .setMacAddress("00:00:00:00:35:02")
+            .build();
+        Port neutronPort2 = new PortBuilder().setTenantId(new Uuid(tenantUuid))
+            .setFixedIps(ImmutableList.of(portIpWithSubnet))
+            .setName("portName2")
+            .setUuid(portUuid)
+            .setDeviceId("deviceId")
+            .setDeviceOwner(PortUtils.DEVICE_OWNER_DHCP)
+            .setFixedIps(ImmutableList.of(portIpWithSubnet))
+            .setNetworkId(networkUuid)
+            .setMacAddress("00:00:00:00:35:02")
+            .build();
+        Ports neutronPorts = new PortsBuilder().setPort(ImmutableList.of(neutronPort1, neutronPort2)).build();
+        when(neutron.getPorts()).thenReturn(neutronPorts);
+
+        Subnet subnet = subnets.getSubnet().get(0);
+        Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE)
+            .setFixedIps(ImmutableList.of(portIpWithSubnet))
+            .build();
+        portAware.onCreated(port, neutron);
+        NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, ipAddress);
+
+        portAware.onDeleted(port, neutron, neutron);
+        NeutronMapperAssert.assertNetworkDomainExists(dataBroker, port, subnet, ipAddress);
+        NeutronMapperAssert.assertPortNotExists(dataBroker, port.getUuid());
+    }
+
+    @Test
+    public void test_createRouterInterfacePort_noFixedIps() {
+        IpAddress ipAddress = new IpAddress(new Ipv4Address("10.0.0.2"));
+        Subnets subnets = createSubnets();
+        when(neutron.getSubnets()).thenReturn(subnets);
+
+        Subnet subnet = subnets.getSubnet().get(0);
+        Port port = newBasePort().setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_IFACE).build();
+        portAware.onCreated(port, neutron);
+        NeutronMapperAssert.assertNetworkDomainNotExists(dataBroker, port, subnet, ipAddress);
+    }
+
+    @Test
+    public void test_createAndDeleteRouterGatewayPort() {
+        Port port = new PortBuilder().setUuid(portUuid).setDeviceOwner(PortUtils.DEVICE_OWNER_ROUTER_GATEWAY).build();
+        portAware.onCreated(port, neutron);
+        portAware.onDeleted(port, neutron, neutron);
+        // no op
+    }
+
+    @Test
+    public void test_createAndDeleteFloatingIpPort() {
+        Port port = new PortBuilder().setUuid(portUuid).setDeviceOwner(PortUtils.DEVICE_OWNER_FLOATING_IP).build();
+        portAware.onCreated(port, neutron);
+        portAware.onDeleted(port, neutron, neutron);
+        // no op
+    }
+
+    private PortBuilder newBasePort() {
+        List<Uuid> secGroups = ImmutableList.of(uuidReserved3);
+        return new PortBuilder().setTenantId(new Uuid(tenantUuid))
+            .setSecurityGroups(secGroups)
+            .setName("portName")
+            .setUuid(portUuid)
+            .setDeviceId("deviceId")
+            .setNetworkId(networkUuid)
+            .setMacAddress("00:00:00:00:35:02");
+    }
+
+    private Subnets createSubnets() {
+        Subnet subnet = new SubnetBuilder().setTenantId(tenantUuid)
+            .setUuid(subnetUuid)
+            .setName("subnetName")
+            .setNetworkId(networkUuid)
+            .setCidr("10.0.0.0/24")
+            .build();
+        return new SubnetsBuilder().setSubnet(ImmutableList.of(subnet)).build();
+    }
+
+    private FixedIps createFixedIps(IpAddress ipAddress) {
+        return new FixedIpsBuilder().setSubnetId(subnetUuid).setIpAddress(ipAddress).build();
+    }
+
+}
index 64f083958037018ae01d50089355c576a87ca59b..90fc4ad67c3301dd81dfb21ab6a082ca0dfc3e12 100644 (file)
@@ -1,30 +1,50 @@
-package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping;
+/*
+ * 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
+ */
 
-import static org.junit.Assert.fail;
+package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping;
 
+import org.apache.commons.lang3.StringUtils;
+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.mapping.NeutronSecurityGroupAware;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
+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.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.groups.attributes.security.groups.SecurityGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.groups.attributes.security.groups.SecurityGroupBuilder;
 
-public class NeutronSecurityGroupAwareDataStoreTest extends GbpDataBrokerTest {
+public class NeutronSecurityGroupAwareDataStoreTest extends NeutronMapperDataBrokerTest {
 
-    @Test
-    public void testAddAndDeleteNeutronSecurityGroup_noSecurityRules() throws Exception {
-        DataBroker dataBroker = getDataBroker();
-        NeutronSecurityGroupAware groupAware = new NeutronSecurityGroupAware(dataBroker);
+    private final String tenantId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa";
+    private final String secGroupId1 = "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb";
+    private final String secGroupId2 = "cccccccc-cccc-cccc-cccc-cccccccccccc";
+
+    private DataBroker dataBroker;
+    private NeutronSecurityGroupAware groupAware;
+    private SecurityGroup secGroup1;
+    private SecurityGroup secGroup2;
 
-        final String tenantId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa";
-        final String secGroupId1 = "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb";
-        final String secGroupId2 = "cccccccc-cccc-cccc-cccc-cccccccccccc";
+    @Before
+    public void init() {
+        dataBroker = getDataBroker();
+        groupAware = new NeutronSecurityGroupAware(dataBroker);
 
-        SecurityGroup secGroup1 = NeutronEntityFactory.securityGroup(secGroupId1, tenantId);
-        SecurityGroup secGroup2 = NeutronEntityFactory.securityGroup(secGroupId2, tenantId);
+        secGroup1 = NeutronEntityFactory.securityGroup(secGroupId1, tenantId);
+        secGroup2 = NeutronEntityFactory.securityGroup(secGroupId2, tenantId);
+    }
 
+    @Test
+    public void testAddAndDeleteNeutronSecurityGroup_noSecurityRules() throws Exception {
         groupAware.onCreated(secGroup1, null);
 
         PolicyAssert.assertTenantExists(dataBroker, tenantId);
@@ -72,14 +92,49 @@ public class NeutronSecurityGroupAwareDataStoreTest extends GbpDataBrokerTest {
         PolicyAssert.assertEndpointGroupCount(dataBroker, tenantId, 0);
     }
 
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
     @Test
-    public void testConstructor_invalidArgument() throws Exception {
-        try {
-            new NeutronSecurityGroupAware(null);
-            fail(NullPointerException.class.getName() + " expected");
-        } catch (NullPointerException e) {
-            // do nothing
-        }
+    public void testConstructor_invalidArgument() throws NullPointerException {
+        thrown.expect(NullPointerException.class);
+        new NeutronSecurityGroupAware(null);
+    }
+
+    @Test
+    public void testAddNeutronSecurityGroup_ExternalImplicitGroup() throws Exception {
+        String uuid = MappingUtils.EIG_UUID.getValue();
+        SecurityGroup secGroupA = new SecurityGroupBuilder().setUuid(new Uuid(uuid))
+            .setTenantId(new Uuid(tenantId))
+            .setName("correctName")
+            .setDescription("correct description")
+            .build();
+        groupAware.onCreated(secGroupA, null);
+
+        PolicyAssert.assertEndpointGroupExists(dataBroker, tenantId, uuid);
+    }
+
+    @Test
+    public void testAddNeutronSecurityGroup_incorrectNameDescription() throws Exception {
+        String uuid = "dddddddd-dddd-dddd-dddd-dddddddddddd";
+        String longDescription = StringUtils.repeat("a", 4100);
+        SecurityGroup secGroupA = new SecurityGroupBuilder().setUuid(new Uuid(uuid))
+            .setTenantId(new Uuid(tenantId))
+            .setName("123")
+            .setDescription(longDescription)
+            .build();
+        groupAware.onCreated(secGroupA, null);
+
+        PolicyAssert.assertEndpointGroupExists(dataBroker, tenantId, uuid);
+    }
+
+    @Test
+    public void testOnDelete_NonExistingSecGroup() throws Exception {
+        PolicyAssert.assertEndpointGroupNotExists(dataBroker, tenantId, secGroupId2);
+
+        groupAware.onDeleted(secGroup2, null, null);
+
+        PolicyAssert.assertEndpointGroupNotExists(dataBroker, tenantId, secGroupId2);
     }
 
 }
index d3a4ad13e5788b966765d3ddb3aa8952ff6386a8..9d3c199983760401578353d2a6f9e83dee45ea4d 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.ConfigDataStoreReader;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
@@ -46,7 +46,7 @@ import com.google.common.collect.ImmutableSet;
  * datastore
  */
 
-public class NeutronSecurityRuleAwareDataStoreTest extends GbpDataBrokerTest {
+public class NeutronSecurityRuleAwareDataStoreTest extends NeutronMapperDataBrokerTest {
 
     @Test
     public final void testAddNeutronSecurityRule_rulesWithRemoteIpPrefix() throws Exception {
index e77e2937ff3e9378f164b943b54a054b2e0a3002..d824e8a5e050338f4fa5fb6ff558fdf184cc17fe 100644 (file)
@@ -11,7 +11,7 @@ import java.util.List;
 import org.junit.Test;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.ConfigDataStoreReader;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.test.GbpDataBrokerTest;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
@@ -29,7 +29,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRuleBuilder;
 
-public class NeutronSecurityRuleAwareTest extends GbpDataBrokerTest {
+public class NeutronSecurityRuleAwareTest extends NeutronMapperDataBrokerTest {
 
     private static final String RULE_ID = "00000000-0000-0000-0000-000000000001";
     private static final String RULE_TENANT_ID = "00000000-0000-0000-0000-000000000002";
similarity index 60%
rename from neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/GbpDataBrokerTest.java
rename to neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/CustomDataBrokerTest.java
index 0a446aea882fb73406745944af228853c2d8d998..f13748b29662c49915a838aa196c723935be129c 100644 (file)
@@ -1,31 +1,49 @@
+/*
+ * Copyright (c) 2015 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.test;
 
 import static com.google.common.base.Preconditions.checkState;
 
+import javax.annotation.Nonnull;
 import java.io.IOException;
+import java.util.Collection;
 
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSet.Builder;
 import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSet.Builder;
-
 /**
  * Loads only modules of GBP and it's dependencies for data broker.
- * <br>Therefore this implementation is faster than {@link AbstractDataBrokerTest}
+ * <br>
+ * Therefore this implementation is faster than {@link AbstractDataBrokerTest}
  */
-public class GbpDataBrokerTest extends AbstractDataBrokerTest {
+public abstract class CustomDataBrokerTest extends AbstractDataBrokerTest {
 
     @Override
     protected Iterable<YangModuleInfo> getModuleInfos() throws Exception {
         Builder<YangModuleInfo> moduleInfoSet = ImmutableSet.<YangModuleInfo>builder();
-        loadModuleInfos(Tenant.class, moduleInfoSet);
+        for (Class<?> clazz : getClassesFromModules()) {
+            loadModuleInfos(clazz, moduleInfoSet);
+        }
         return moduleInfoSet.build();
     }
 
-    public static void loadModuleInfos(Class<?> clazzFromModule, Builder<YangModuleInfo> moduleInfoSet) throws Exception {
+    /**
+     * @return a class from every yang module which needs to be loaded. Cannot return {@code null}
+     *         or empty collection.
+     */
+    public abstract @Nonnull Collection<Class<?>> getClassesFromModules();
+
+    public static void loadModuleInfos(Class<?> clazzFromModule, Builder<YangModuleInfo> moduleInfoSet)
+            throws Exception {
         YangModuleInfo moduleInfo = BindingReflections.getModuleInfo(clazzFromModule);
         checkState(moduleInfo != null, "Module Info for %s is not available.", clazzFromModule);
         collectYangModuleInfo(moduleInfo, moduleInfoSet);
diff --git a/neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/NeutronMapperAssert.java b/neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/NeutronMapperAssert.java
new file mode 100644 (file)
index 0000000..5a2bd0c
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * 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.test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import com.google.common.base.Optional;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.groupbasedpolicy.domain_extension.l2_l3.util.L2L3IidFactory;
+import org.opendaylight.groupbasedpolicy.neutron.gbp.util.NeutronGbpIidFactory;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.NeutronSubnetAware;
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
+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.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.UniqueId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.NetworkDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.endpoints.by.ports.EndpointByPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
+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.binding.InstanceIdentifier;
+
+public class NeutronMapperAssert {
+
+    // asserts for port
+
+    public static void assertPortExists(DataBroker dataBroker, Uuid portUuid) {
+        Optional<EndpointByPort> portOptional = getEndpointByPortOptional(dataBroker, portUuid);
+        assertTrue(portOptional.isPresent());
+    }
+
+    public static void assertPortNotExists(DataBroker dataBroker, Uuid portUuid) {
+        Optional<EndpointByPort> portOptional = getEndpointByPortOptional(dataBroker, portUuid);
+        assertFalse(portOptional.isPresent());
+    }
+
+    private static Optional<EndpointByPort> getEndpointByPortOptional(DataBroker dataBroker, Uuid portUuid) {
+        UniqueId portId = new UniqueId(portUuid.getValue());
+        InstanceIdentifier<EndpointByPort> iid = NeutronGbpIidFactory.endpointByPortIid(portId);
+        Optional<EndpointByPort> portOptional;
+        try (ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction()) {
+            portOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, iid, rTx);
+        }
+        return portOptional;
+    }
+
+    public static void assertNetworkDomainExists(DataBroker dataBroker, Port port, Subnet subnet, IpAddress ipAddress) {
+        Optional<NetworkDomain> portOptional =
+                getNetworkDomainOptional(dataBroker, port.getTenantId(), ipAddress, subnet);
+        assertTrue(portOptional.isPresent());
+    }
+
+    public static void assertNetworkDomainNotExists(DataBroker dataBroker, Port port, Subnet subnet,
+            IpAddress ipAddress) {
+        Optional<NetworkDomain> portOptional =
+                getNetworkDomainOptional(dataBroker, port.getTenantId(), ipAddress, subnet);
+        assertFalse(portOptional.isPresent());
+    }
+
+    private static Optional<NetworkDomain> getNetworkDomainOptional(DataBroker dataBroker, Uuid tenantUuid,
+            IpAddress ipAddress, Subnet subnet) {
+        InstanceIdentifier<NetworkDomain> iid;
+        NetworkDomain subnetDomain = NeutronSubnetAware.createSubnet(subnet, ipAddress);
+        TenantId tenantId = new TenantId(tenantUuid.getValue());
+        iid = L2L3IidFactory.subnetIid(tenantId, subnetDomain.getNetworkDomainId());
+        Optional<NetworkDomain> optional;
+        try (ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction()) {
+            optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, iid, rTx);
+        }
+        return optional;
+    }
+
+}
diff --git a/neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/NeutronMapperDataBrokerTest.java b/neutron-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/mapper/test/NeutronMapperDataBrokerTest.java
new file mode 100644 (file)
index 0000000..c0ea1a2
--- /dev/null
@@ -0,0 +1,25 @@
+package org.opendaylight.groupbasedpolicy.neutron.mapper.test;
+
+import java.util.Collection;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.SubnetAugmentForwarding;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.Forwarding;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Tenants;
+
+/**
+ * Loads only modules of GBP and it's dependencies for data broker.
+ * <br>
+ * Therefore this implementation is faster than {@link AbstractDataBrokerTest}
+ */
+public class NeutronMapperDataBrokerTest extends CustomDataBrokerTest {
+
+    @Override
+    public Collection<Class<?>> getClassesFromModules() {
+        return ImmutableList.<Class<?>>of(Tenants.class, Forwarding.class, SubnetAugmentForwarding.class,
+                Mappings.class);
+    }
+
+}