.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());
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)) {
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());
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) {
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");
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;
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");
--- /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.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();
+ }
+
+}
-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);
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);
}
}
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;
* datastore
*/
-public class NeutronSecurityRuleAwareDataStoreTest extends GbpDataBrokerTest {
+public class NeutronSecurityRuleAwareDataStoreTest extends NeutronMapperDataBrokerTest {
@Test
public final void testAddNeutronSecurityRule_rulesWithRemoteIpPrefix() throws Exception {
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;
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";
+/*
+ * 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);
--- /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.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;
+ }
+
+}
--- /dev/null
+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);
+ }
+
+}