Initial implementation for dynamic SNAT
[groupbasedpolicy.git] / neutron-mapper / src / test / java / org / opendaylight / groupbasedpolicy / neutron / mapper / test / PolicyAssert.java
index 49e6f3523f214eb3006cf676033f24af227c77de..98dcc7fc1f081d9459ce272944340544fe6a3fa0 100644 (file)
@@ -1,3 +1,10 @@
+/*
+ * 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 org.junit.Assert.assertEquals;
@@ -14,30 +21,29 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.SecRuleEntityDecoder;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.SecRuleNameDecoder;
 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.util.Utils;
-import org.opendaylight.neutron.spi.NeutronSecurityRule;
-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.rev130715.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Description;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup.IntraGroupPolicy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Clause;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstance;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
 
 public final class PolicyAssert {
 
@@ -73,27 +79,31 @@ public final class PolicyAssert {
     public static void assertContractCount(DataBroker dataBroker, String tenantId, int expectedCount) throws Exception {
         Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
         assertTrue(tenant.isPresent());
-        List<Contract> contracts = tenant.get().getContract();
-        if (contracts != null) {
-            assertEquals(expectedCount, tenant.get().getContract().size());
-        } else {
+        Policy policy = tenant.get().getPolicy();
+        if (policy == null) {
             assertEquals(expectedCount, 0);
+        } else {
+            List<Contract> contracts = policy.getContract();
+            if (contracts != null) {
+                assertEquals(expectedCount, policy.getContract().size());
+            } else {
+                assertEquals(expectedCount, 0);
+            }
         }
     }
 
-    public static void assertContractWithEic(Contract contract, NeutronSecurityRule secRule) {
-        assertEquals(new ContractId(secRule.getSecurityRuleUUID()), contract.getId());
+    public static void assertContractWithEic(Contract contract, SecurityRule secRule) {
+        assertEquals(new ContractId(secRule.getUuid().getValue()), contract.getId());
         assertNull(contract.getQuality());
         assertNull(contract.getTarget());
         assertOneClauseWithEicWithOneSubject(contract, secRule);
         PolicyAssert.assertOneSubjectWithOneRule(contract, secRule);
     }
 
-    private static void assertOneClauseWithEicWithOneSubject(Contract contract, NeutronSecurityRule secRule) {
+    private static void assertOneClauseWithEicWithOneSubject(Contract contract, SecurityRule secRule) {
         Clause clause = assertOneItem(contract.getClause());
         assertNull(clause.getAnyMatchers());
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(secRule.getSecurityRuleRemoteIpPrefix()));
-        IpPrefix expectedIpPrefix = Utils.createIpPrefix(secRule.getSecurityRuleRemoteIpPrefix());
+        IpPrefix expectedIpPrefix = secRule.getRemoteIpPrefix();
         assertNotNull(clause.getConsumerMatchers());
         IpPrefix ipPrefix = clause.getConsumerMatchers()
             .getEndpointIdentificationConstraints()
@@ -106,31 +116,24 @@ public final class PolicyAssert {
         assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subjectRef);
     }
 
-    public static void assertContract(Contract contract, NeutronSecurityRule secRule) {
-        assertEquals(new ContractId(secRule.getSecurityRuleUUID()), contract.getId());
+    public static void assertContract(Contract contract, SecurityRule secRule) {
+        assertEquals(new ContractId(secRule.getUuid().getValue()), contract.getId());
         assertNull(contract.getQuality());
         assertNull(contract.getTarget());
         assertOneClauseWithOneSubject(contract, secRule);
         assertOneSubjectWithOneRule(contract, secRule);
     }
 
-    private static void assertOneClauseWithOneSubject(Contract contract, NeutronSecurityRule secRule) {
+    private static void assertOneClauseWithOneSubject(Contract contract, SecurityRule secRule) {
         Clause clause = assertOneItem(contract.getClause());
         assertClauseWithOneSubject(clause, secRule);
     }
 
-    private static void assertOneSubjectWithOneRule(Contract contract, NeutronSecurityRule secRule) {
+    private static void assertOneSubjectWithOneRule(Contract contract, SecurityRule secRule) {
         Subject subject = assertOneItem(contract.getSubject());
         assertSubjectWithOneRule(subject, secRule);
     }
 
-    public static void assertContract(Contract contract, NeutronSecurityRule secRule, Description contractDescription) {
-        assertContract(contract, secRule);
-        assertEquals(contractDescription, contract.getDescription());
-    }
-
-    // asserts for endpoint group
-
     public static void assertEndpointGroupExists(DataBroker dataBroker, String tenantId, String endpointGroupId)
             throws Exception {
         Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, endpointGroupId);
@@ -147,11 +150,16 @@ public final class PolicyAssert {
             throws Exception {
         Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
         assertTrue(tenant.isPresent());
-        List<EndpointGroup> endpointGroups = tenant.get().getEndpointGroup();
-        if (endpointGroups != null) {
-            assertEquals(expectedCount, endpointGroups.size());
-        } else {
+        Policy policy = tenant.get().getPolicy();
+        if (policy == null) {
             assertEquals(expectedCount, 0);
+        } else {
+            List<EndpointGroup> endpointGroups = policy.getEndpointGroup();
+            if (endpointGroups != null) {
+                assertEquals(expectedCount, endpointGroups.size());
+            } else {
+                assertEquals(expectedCount, 0);
+            }
         }
     }
 
@@ -162,7 +170,7 @@ public final class PolicyAssert {
         assertEquals(intraGroupPolicy, epg.get().getIntraGroupPolicy());
     }
 
-    // asserts for enpoint group selectors
+    // asserts for endpoint group selectors
 
     public static void assertNoProviderNamedSelectors(DataBroker dataBroker, String tenantId, String secGroupId)
             throws Exception {
@@ -210,19 +218,26 @@ public final class PolicyAssert {
 
     // asserts for classifier
 
-    public static void assertClassifierInstanceExists(DataBroker dataBroker, NeutronSecurityRule secRule)
+    public static void assertClassifierInstanceExists(DataBroker dataBroker, SecurityRule secRule)
             throws Exception {
         ClassifierInstance clsfInstance = SecRuleEntityDecoder.getClassifierInstance(secRule);
         Optional<ClassifierInstance> readClsfInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
-                secRule.getSecurityRuleTenantID(), clsfInstance.getName());
+                secRule.getTenantId().getValue(), clsfInstance.getName());
         assertTrue(readClsfInstance.isPresent());
     }
 
-    public static void assertClassifierInstanceNotExists(DataBroker dataBroker, NeutronSecurityRule secRule)
+    public static void assertClassifierInstanceExists(DataBroker dataBroker, String tenantId, String classifierName)
+            throws Exception {
+        Optional<ClassifierInstance> classifierInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
+                tenantId, new ClassifierName(classifierName));
+        assertTrue(classifierInstance.isPresent());
+    }
+
+    public static void assertClassifierInstanceNotExists(DataBroker dataBroker, SecurityRule secRule)
             throws Exception {
         ClassifierInstance clsfInstance = SecRuleEntityDecoder.getClassifierInstance(secRule);
         Optional<ClassifierInstance> readClsfInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
-                secRule.getSecurityRuleTenantID(), clsfInstance.getName());
+                secRule.getTenantId().getValue(), clsfInstance.getName());
         assertFalse(readClsfInstance.isPresent());
     }
 
@@ -244,7 +259,7 @@ public final class PolicyAssert {
 
     // asserts for clause
 
-    public static void assertClauseWithOneSubject(Clause clause, NeutronSecurityRule secRule) {
+    public static void assertClauseWithOneSubject(Clause clause, SecurityRule secRule) {
         assertNull(clause.getAnyMatchers());
         assertNull(clause.getConsumerMatchers());
         assertNull(clause.getProviderMatchers());
@@ -252,9 +267,14 @@ public final class PolicyAssert {
         assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subjectRef);
     }
 
+    public static void assertClauseExists(DataBroker dataBroker, String tenantId, String contractId, String clauseName) {
+        Optional<Clause> clause = ConfigDataStoreReader.readClause(dataBroker, tenantId, contractId, clauseName);
+        assertTrue(clause.isPresent());
+    }
+
     // asserts for subject
 
-    public static void assertSubjectWithOneRule(Subject subject, NeutronSecurityRule secRule) {
+    public static void assertSubjectWithOneRule(Subject subject, SecurityRule secRule) {
         assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subject.getName());
         Rule rule = assertOneItem(subject.getRule());
         assertRule(rule, secRule);
@@ -262,7 +282,7 @@ public final class PolicyAssert {
 
     // asserts for rule
 
-    public static void assertRule(Rule rule, NeutronSecurityRule secRule) {
+    public static void assertRule(Rule rule, SecurityRule secRule) {
         assertEquals(SecRuleNameDecoder.getRuleName(secRule), rule.getName());
         ActionRef actionRef = assertOneItem(rule.getActionRef());
         assertEquals(MappingUtils.ACTION_ALLOW.getName(), actionRef.getName());
@@ -272,14 +292,24 @@ public final class PolicyAssert {
         assertEquals(SecRuleEntityDecoder.getDirection(secRule), classifierRef.getDirection());
     }
 
-    public static void assertRule(Rule rule, NeutronSecurityRule secRule, int order) {
+    public static void assertRule(Rule rule, SecurityRule secRule, int order) {
         assertRule(rule, secRule);
         assertEquals(order, rule.getOrder().intValue());
     }
 
-    private static final <T> T assertOneItem(Collection<T> c) {
+    private static <T> T assertOneItem(Collection<T> c) {
         assertNotNull(c);
         assertTrue(c.size() == 1);
         return c.iterator().next();
     }
+
+    // asserts for selector
+
+    public static void assertConsumerNamedSelectorExists(DataBroker dataBroker, String tenantId, String egId,
+                                                         String selectorName) {
+        Optional<ConsumerNamedSelector> potentialCns = ConfigDataStoreReader.readConsumerNamedSelector(dataBroker,
+                tenantId, egId, selectorName);
+        assertTrue(potentialCns.isPresent());
+    }
+
 }