2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.groupbasedpolicy.neutron.mapper.test;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
16 import com.google.common.base.Optional;
17 import com.google.common.base.Preconditions;
19 import java.util.Collection;
20 import java.util.List;
23 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
24 import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.SecRuleEntityDecoder;
25 import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.SecRuleNameDecoder;
26 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule;
48 public final class PolicyAssert {
50 private PolicyAssert() {
51 throw new UnsupportedOperationException("Cannot create an instance");
56 public static void assertTenantExists(DataBroker dataBroker, String tenantId) throws Exception {
57 Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
58 assertTrue(tenant.isPresent());
61 public static void assertTenantNotExists(DataBroker dataBroker, String tenantId) throws Exception {
62 Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
63 assertFalse(tenant.isPresent());
66 // asserts for contract
68 public static void assertContractExists(DataBroker dataBroker, String tenantId, String contractId)
71 Optional<Contract> contract = ConfigDataStoreReader.readContract(dataBroker, tenantId, contractId);
72 assertTrue(contract.isPresent());
75 public static void assertContractNotExists(DataBroker dataBroker, String tenantId, String contractId)
77 Optional<Contract> contract = ConfigDataStoreReader.readContract(dataBroker, tenantId, contractId);
78 assertFalse(contract.isPresent());
81 public static void assertContractCount(DataBroker dataBroker, String tenantId, int expectedCount) throws Exception {
82 Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
83 assertTrue(tenant.isPresent());
84 Policy policy = tenant.get().getPolicy();
86 assertEquals(expectedCount, 0);
88 List<Contract> contracts = policy.getContract();
89 if (contracts != null) {
90 assertEquals(expectedCount, policy.getContract().size());
92 assertEquals(expectedCount, 0);
97 public static void assertContractWithEic(Contract contract, SecurityRule secRule) {
98 assertEquals(new ContractId(secRule.getUuid().getValue()), contract.getId());
99 assertNull(contract.getQuality());
100 assertNull(contract.getTarget());
101 assertOneClauseWithEicWithOneSubject(contract, secRule);
102 PolicyAssert.assertOneSubjectWithOneRule(contract, secRule);
105 private static void assertOneClauseWithEicWithOneSubject(Contract contract, SecurityRule secRule) {
106 Clause clause = assertOneItem(contract.getClause());
107 assertNull(clause.getAnyMatchers());
108 IpPrefix expectedIpPrefix = secRule.getRemoteIpPrefix();
109 assertNotNull(clause.getConsumerMatchers());
110 IpPrefix ipPrefix = clause.getConsumerMatchers()
111 .getEndpointIdentificationConstraints()
112 .getL3EndpointIdentificationConstraints()
113 .getPrefixConstraint()
116 assertEquals(expectedIpPrefix, ipPrefix);
117 SubjectName subjectRef = assertOneItem(clause.getSubjectRefs());
118 assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subjectRef);
121 public static void assertContract(Contract contract, SecurityRule secRule) {
122 assertEquals(new ContractId(secRule.getUuid().getValue()), contract.getId());
123 assertNull(contract.getQuality());
124 assertNull(contract.getTarget());
125 assertOneClauseWithOneSubject(contract, secRule);
126 assertOneSubjectWithOneRule(contract, secRule);
129 private static void assertOneClauseWithOneSubject(Contract contract, SecurityRule secRule) {
130 Clause clause = assertOneItem(contract.getClause());
131 assertClauseWithOneSubject(clause, secRule);
134 private static void assertOneSubjectWithOneRule(Contract contract, SecurityRule secRule) {
135 Subject subject = assertOneItem(contract.getSubject());
136 assertSubjectWithOneRule(subject, secRule);
139 public static void assertEndpointGroupExists(DataBroker dataBroker, String tenantId, String endpointGroupId)
141 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, endpointGroupId);
142 assertTrue(epg.isPresent());
145 public static void assertEndpointGroupNotExists(DataBroker dataBroker, String tenantId, String endpointGroupId)
147 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, endpointGroupId);
148 assertFalse(epg.isPresent());
151 public static void assertEndpointGroupCount(DataBroker dataBroker, String tenantId, int expectedCount)
153 Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
154 assertTrue(tenant.isPresent());
155 Policy policy = tenant.get().getPolicy();
156 if (policy == null) {
157 assertEquals(expectedCount, 0);
159 List<EndpointGroup> endpointGroups = policy.getEndpointGroup();
160 if (endpointGroups != null) {
161 assertEquals(expectedCount, endpointGroups.size());
163 assertEquals(expectedCount, 0);
168 public static void assertIntraGroupPolicy(DataBroker dataBroker, String tenantId, String endpointGroupId,
169 IntraGroupPolicy intraGroupPolicy) throws Exception {
170 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, endpointGroupId);
171 assertTrue(epg.isPresent());
172 assertEquals(intraGroupPolicy, epg.get().getIntraGroupPolicy());
175 // asserts for endpoint group selectors
177 public static void assertNoProviderNamedSelectors(DataBroker dataBroker, String tenantId, String secGroupId)
179 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, secGroupId);
180 assertTrue(epg.isPresent());
181 List<ProviderNamedSelector> selectors = epg.get().getProviderNamedSelector();
182 assertTrue(selectors == null || selectors.isEmpty());
185 public static void assertNoConsumerNamedSelectors(DataBroker dataBroker, String tenantId, String secGroupId)
187 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, secGroupId);
188 assertTrue(epg.isPresent());
189 List<ConsumerNamedSelector> selectors = epg.get().getConsumerNamedSelector();
190 assertTrue(selectors == null || selectors.isEmpty());
193 public static void assertProviderNamedSelectors(EndpointGroup epg, Set<ContractId> expectedContracts) {
194 Preconditions.checkNotNull(expectedContracts);
195 assertNotNull(epg.getProviderNamedSelector());
196 int numberOfContracts = 0;
197 for (ProviderNamedSelector pns : epg.getProviderNamedSelector()) {
198 assertNotNull(pns.getContract());
199 numberOfContracts += pns.getContract().size();
200 for (ContractId contractId : pns.getContract()) {
201 assertTrue(expectedContracts.contains(contractId));
204 assertEquals(expectedContracts.size(), numberOfContracts);
207 public static void assertConsumerNamedSelectors(EndpointGroup epg, Set<ContractId> expectedContracts) {
208 Preconditions.checkNotNull(expectedContracts);
209 assertNotNull(epg.getConsumerNamedSelector());
210 int numberOfContracts = 0;
211 for (ConsumerNamedSelector cns : epg.getConsumerNamedSelector()) {
212 assertNotNull(cns.getContract());
213 numberOfContracts += cns.getContract().size();
214 for (ContractId contractId : cns.getContract()) {
215 assertTrue(expectedContracts.contains(contractId));
218 assertEquals(expectedContracts.size(), numberOfContracts);
221 // asserts for classifier
223 public static void assertClassifierInstanceExists(DataBroker dataBroker, SecurityRule secRule)
225 ClassifierInstance clsfInstance = SecRuleEntityDecoder.getClassifierInstance(secRule);
226 Optional<ClassifierInstance> readClsfInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
227 secRule.getTenantId().getValue(), clsfInstance.getName());
228 assertTrue(readClsfInstance.isPresent());
231 public static void assertClassifierInstanceExists(DataBroker dataBroker, String tenantId, String classifierName)
233 Optional<ClassifierInstance> classifierInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
234 tenantId, new ClassifierName(classifierName));
235 assertTrue(classifierInstance.isPresent());
238 public static void assertClassifierInstanceNotExists(DataBroker dataBroker, SecurityRule secRule)
240 ClassifierInstance clsfInstance = SecRuleEntityDecoder.getClassifierInstance(secRule);
241 Optional<ClassifierInstance> readClsfInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
242 secRule.getTenantId().getValue(), clsfInstance.getName());
243 assertFalse(readClsfInstance.isPresent());
246 // asserts for action
248 public static void assertActionInstanceExists(DataBroker dataBroker, String tenantId, ActionName actionName)
250 Optional<ActionInstance> actionInstance = ConfigDataStoreReader.readActionInstance(dataBroker, tenantId,
252 assertTrue(actionInstance.isPresent());
255 public static void assertActionInstanceNotExists(DataBroker dataBroker, String tenantId, ActionName actionName)
257 Optional<ActionInstance> actionInstance = ConfigDataStoreReader.readActionInstance(dataBroker, tenantId,
259 assertFalse(actionInstance.isPresent());
262 // asserts for clause
264 public static void assertClauseWithOneSubject(Clause clause, SecurityRule secRule) {
265 assertNull(clause.getAnyMatchers());
266 assertNull(clause.getConsumerMatchers());
267 assertNull(clause.getProviderMatchers());
268 SubjectName subjectRef = assertOneItem(clause.getSubjectRefs());
269 assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subjectRef);
272 public static void assertClauseExists(DataBroker dataBroker, String tenantId, String contractId,
274 Optional<Clause> clause = ConfigDataStoreReader.readClause(dataBroker, tenantId, contractId, clauseName);
275 assertTrue(clause.isPresent());
278 // asserts for subject
280 public static void assertSubjectWithOneRule(Subject subject, SecurityRule secRule) {
281 assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subject.getName());
282 Rule rule = assertOneItem(subject.getRule());
283 assertRule(rule, secRule);
288 public static void assertRule(Rule rule, SecurityRule secRule) {
289 assertEquals(SecRuleNameDecoder.getRuleName(secRule), rule.getName());
290 ActionRef actionRef = assertOneItem(rule.getActionRef());
291 assertEquals(MappingUtils.ACTION_ALLOW.getName(), actionRef.getName());
292 ClassifierRef classifierRef = assertOneItem(rule.getClassifierRef());
293 assertEquals(SecRuleNameDecoder.getClassifierRefName(secRule), classifierRef.getName());
294 assertEquals(SecRuleNameDecoder.getClassifierInstanceName(secRule), classifierRef.getInstanceName());
295 assertEquals(SecRuleEntityDecoder.getDirection(secRule), classifierRef.getDirection());
298 public static void assertRule(Rule rule, SecurityRule secRule, int order) {
299 assertRule(rule, secRule);
300 assertEquals(order, rule.getOrder().intValue());
303 private static <T> T assertOneItem(Collection<T> collection) {
304 assertNotNull(collection);
305 assertTrue(collection.size() == 1);
306 return collection.iterator().next();
309 // asserts for selector
310 public static void assertConsumerNamedSelectorExists(DataBroker dataBroker, String tenantId, String egId,
311 String selectorName) {
312 Optional<ConsumerNamedSelector> potentialCns = ConfigDataStoreReader.readConsumerNamedSelector(dataBroker,
313 tenantId, egId, selectorName);
314 assertTrue(potentialCns.isPresent());