1 package org.opendaylight.groupbasedpolicy.neutron.mapper.test;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNotNull;
6 import static org.junit.Assert.assertNull;
7 import static org.junit.Assert.assertTrue;
9 import java.util.Collection;
10 import java.util.List;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.SecRuleEntityDecoder;
15 import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.SecRuleNameDecoder;
16 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup.IntraGroupPolicy;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule;
38 import com.google.common.base.Optional;
39 import com.google.common.base.Preconditions;
41 public final class PolicyAssert {
43 private PolicyAssert() {
44 throw new UnsupportedOperationException("Cannot create an instance");
49 public static void assertTenantExists(DataBroker dataBroker, String tenantId) throws Exception {
50 Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
51 assertTrue(tenant.isPresent());
54 public static void assertTenantNotExists(DataBroker dataBroker, String tenantId) throws Exception {
55 Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
56 assertFalse(tenant.isPresent());
59 // asserts for contract
61 public static void assertContractExists(DataBroker dataBroker, String tenantId, String contractId) throws Exception {
62 Optional<Contract> contract = ConfigDataStoreReader.readContract(dataBroker, tenantId, contractId);
63 assertTrue(contract.isPresent());
66 public static void assertContractNotExists(DataBroker dataBroker, String tenantId, String contractId)
68 Optional<Contract> contract = ConfigDataStoreReader.readContract(dataBroker, tenantId, contractId);
69 assertFalse(contract.isPresent());
72 public static void assertContractCount(DataBroker dataBroker, String tenantId, int expectedCount) throws Exception {
73 Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
74 assertTrue(tenant.isPresent());
75 Policy policy = tenant.get().getPolicy();
77 assertEquals(expectedCount, 0);
79 List<Contract> contracts = policy.getContract();
80 if (contracts != null) {
81 assertEquals(expectedCount, policy.getContract().size());
83 assertEquals(expectedCount, 0);
88 public static void assertContractWithEic(Contract contract, SecurityRule secRule) {
89 assertEquals(new ContractId(secRule.getUuid().getValue()), contract.getId());
90 assertNull(contract.getQuality());
91 assertNull(contract.getTarget());
92 assertOneClauseWithEicWithOneSubject(contract, secRule);
93 PolicyAssert.assertOneSubjectWithOneRule(contract, secRule);
96 private static void assertOneClauseWithEicWithOneSubject(Contract contract, SecurityRule secRule) {
97 Clause clause = assertOneItem(contract.getClause());
98 assertNull(clause.getAnyMatchers());
99 IpPrefix expectedIpPrefix = secRule.getRemoteIpPrefix();
100 assertNotNull(clause.getConsumerMatchers());
101 IpPrefix ipPrefix = clause.getConsumerMatchers()
102 .getEndpointIdentificationConstraints()
103 .getL3EndpointIdentificationConstraints()
104 .getPrefixConstraint()
107 assertEquals(expectedIpPrefix, ipPrefix);
108 SubjectName subjectRef = assertOneItem(clause.getSubjectRefs());
109 assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subjectRef);
112 public static void assertContract(Contract contract, SecurityRule secRule) {
113 assertEquals(new ContractId(secRule.getUuid().getValue()), contract.getId());
114 assertNull(contract.getQuality());
115 assertNull(contract.getTarget());
116 assertOneClauseWithOneSubject(contract, secRule);
117 assertOneSubjectWithOneRule(contract, secRule);
120 private static void assertOneClauseWithOneSubject(Contract contract, SecurityRule secRule) {
121 Clause clause = assertOneItem(contract.getClause());
122 assertClauseWithOneSubject(clause, secRule);
125 private static void assertOneSubjectWithOneRule(Contract contract, SecurityRule secRule) {
126 Subject subject = assertOneItem(contract.getSubject());
127 assertSubjectWithOneRule(subject, secRule);
130 public static void assertEndpointGroupExists(DataBroker dataBroker, String tenantId, String endpointGroupId)
132 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, endpointGroupId);
133 assertTrue(epg.isPresent());
136 public static void assertEndpointGroupNotExists(DataBroker dataBroker, String tenantId, String endpointGroupId)
138 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, endpointGroupId);
139 assertFalse(epg.isPresent());
142 public static void assertEndpointGroupCount(DataBroker dataBroker, String tenantId, int expectedCount)
144 Optional<Tenant> tenant = ConfigDataStoreReader.readTenant(dataBroker, tenantId);
145 assertTrue(tenant.isPresent());
146 Policy policy = tenant.get().getPolicy();
147 if (policy == null) {
148 assertEquals(expectedCount, 0);
150 List<EndpointGroup> endpointGroups = policy.getEndpointGroup();
151 if (endpointGroups != null) {
152 assertEquals(expectedCount, endpointGroups.size());
154 assertEquals(expectedCount, 0);
159 public static void assertIntraGroupPolicy(DataBroker dataBroker, String tenantId, String endpointGroupId,
160 IntraGroupPolicy intraGroupPolicy) throws Exception {
161 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, endpointGroupId);
162 assertTrue(epg.isPresent());
163 assertEquals(intraGroupPolicy, epg.get().getIntraGroupPolicy());
166 // asserts for endpoint group selectors
168 public static void assertNoProviderNamedSelectors(DataBroker dataBroker, String tenantId, String secGroupId)
170 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, secGroupId);
171 assertTrue(epg.isPresent());
172 List<ProviderNamedSelector> selectors = epg.get().getProviderNamedSelector();
173 assertTrue(selectors == null || selectors.isEmpty());
176 public static void assertNoConsumerNamedSelectors(DataBroker dataBroker, String tenantId, String secGroupId)
178 Optional<EndpointGroup> epg = ConfigDataStoreReader.readEndpointGroup(dataBroker, tenantId, secGroupId);
179 assertTrue(epg.isPresent());
180 List<ConsumerNamedSelector> selectors = epg.get().getConsumerNamedSelector();
181 assertTrue(selectors == null || selectors.isEmpty());
184 public static void assertProviderNamedSelectors(EndpointGroup epg, Set<ContractId> expectedContracts) {
185 Preconditions.checkNotNull(expectedContracts);
186 assertNotNull(epg.getProviderNamedSelector());
187 int numberOfContracts = 0;
188 for (ProviderNamedSelector pns : epg.getProviderNamedSelector()) {
189 assertNotNull(pns.getContract());
190 numberOfContracts += pns.getContract().size();
191 for (ContractId contractId : pns.getContract()) {
192 assertTrue(expectedContracts.contains(contractId));
195 assertEquals(expectedContracts.size(), numberOfContracts);
198 public static void assertConsumerNamedSelectors(EndpointGroup epg, Set<ContractId> expectedContracts) {
199 Preconditions.checkNotNull(expectedContracts);
200 assertNotNull(epg.getConsumerNamedSelector());
201 int numberOfContracts = 0;
202 for (ConsumerNamedSelector cns : epg.getConsumerNamedSelector()) {
203 assertNotNull(cns.getContract());
204 numberOfContracts += cns.getContract().size();
205 for (ContractId contractId : cns.getContract()) {
206 assertTrue(expectedContracts.contains(contractId));
209 assertEquals(expectedContracts.size(), numberOfContracts);
212 // asserts for classifier
214 public static void assertClassifierInstanceExists(DataBroker dataBroker, SecurityRule secRule)
216 ClassifierInstance clsfInstance = SecRuleEntityDecoder.getClassifierInstance(secRule);
217 Optional<ClassifierInstance> readClsfInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
218 secRule.getTenantId().getValue(), clsfInstance.getName());
219 assertTrue(readClsfInstance.isPresent());
222 public static void assertClassifierInstanceExists(DataBroker dataBroker, String tenantId, String classifierName)
224 Optional<ClassifierInstance> classifierInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
225 tenantId, new ClassifierName(classifierName));
226 assertTrue(classifierInstance.isPresent());
229 public static void assertClassifierInstanceNotExists(DataBroker dataBroker, SecurityRule secRule)
231 ClassifierInstance clsfInstance = SecRuleEntityDecoder.getClassifierInstance(secRule);
232 Optional<ClassifierInstance> readClsfInstance = ConfigDataStoreReader.readClassifierInstance(dataBroker,
233 secRule.getTenantId().getValue(), clsfInstance.getName());
234 assertFalse(readClsfInstance.isPresent());
237 // asserts for action
239 public static void assertActionInstanceExists(DataBroker dataBroker, String tenantId, ActionName actionName)
241 Optional<ActionInstance> actionInstance = ConfigDataStoreReader.readActionInstance(dataBroker, tenantId,
243 assertTrue(actionInstance.isPresent());
246 public static void assertActionInstanceNotExists(DataBroker dataBroker, String tenantId, ActionName actionName)
248 Optional<ActionInstance> actionInstance = ConfigDataStoreReader.readActionInstance(dataBroker, tenantId,
250 assertFalse(actionInstance.isPresent());
253 // asserts for clause
255 public static void assertClauseWithOneSubject(Clause clause, SecurityRule secRule) {
256 assertNull(clause.getAnyMatchers());
257 assertNull(clause.getConsumerMatchers());
258 assertNull(clause.getProviderMatchers());
259 SubjectName subjectRef = assertOneItem(clause.getSubjectRefs());
260 assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subjectRef);
263 public static void assertClauseExists(DataBroker dataBroker, String tenantId, String contractId, String clauseName) {
264 Optional<Clause> clause = ConfigDataStoreReader.readClause(dataBroker, tenantId, contractId, clauseName);
265 assertTrue(clause.isPresent());
268 // asserts for subject
270 public static void assertSubjectWithOneRule(Subject subject, SecurityRule secRule) {
271 assertEquals(SecRuleNameDecoder.getSubjectName(secRule), subject.getName());
272 Rule rule = assertOneItem(subject.getRule());
273 assertRule(rule, secRule);
278 public static void assertRule(Rule rule, SecurityRule secRule) {
279 assertEquals(SecRuleNameDecoder.getRuleName(secRule), rule.getName());
280 ActionRef actionRef = assertOneItem(rule.getActionRef());
281 assertEquals(MappingUtils.ACTION_ALLOW.getName(), actionRef.getName());
282 ClassifierRef classifierRef = assertOneItem(rule.getClassifierRef());
283 assertEquals(SecRuleNameDecoder.getClassifierRefName(secRule), classifierRef.getName());
284 assertEquals(SecRuleNameDecoder.getClassifierInstanceName(secRule), classifierRef.getInstanceName());
285 assertEquals(SecRuleEntityDecoder.getDirection(secRule), classifierRef.getDirection());
288 public static void assertRule(Rule rule, SecurityRule secRule, int order) {
289 assertRule(rule, secRule);
290 assertEquals(order, rule.getOrder().intValue());
293 private static <T> T assertOneItem(Collection<T> c) {
295 assertTrue(c.size() == 1);
296 return c.iterator().next();
299 // asserts for selector
301 public static void assertConsumerNamedSelectorExists(DataBroker dataBroker, String tenantId, String egId,
302 String selectorName) {
303 Optional<ConsumerNamedSelector> potentialCns = ConfigDataStoreReader.readConsumerNamedSelector(dataBroker,
304 tenantId, egId, selectorName);
305 assertTrue(potentialCns.isPresent());