/*
* 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.resolver;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.groupbasedpolicy.dto.ConditionGroup;
import org.opendaylight.groupbasedpolicy.dto.ConditionSet;
import org.opendaylight.groupbasedpolicy.dto.EndpointConstraint;
import org.opendaylight.groupbasedpolicy.dto.Policy;
import org.opendaylight.groupbasedpolicy.dto.RuleGroup;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefixBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraintBuilder;
public class PolicyTest {
private Policy policy;
@Before
public void init() {
policy = new Policy(null);
}
@Test
public void testGetRules() {
ConditionSet conditionSet = newConditionSet();
Set<ConditionSet> conditionSets = new HashSet<>();
conditionSets.add(conditionSet);
ConditionGroup fromCg = new ConditionGroup(conditionSets);
ConditionGroup toCg = new ConditionGroup(conditionSets);
Set<ConditionSet> conditionSetsEmpty = new HashSet<>();
ConditionGroup fromCgEmpty = new ConditionGroup(conditionSetsEmpty);
ConditionGroup toCgEmpty = new ConditionGroup(conditionSetsEmpty);
EndpointConstraint endpointConstraint = new EndpointConstraint(conditionSet, null);
List<RuleGroup> ruleGroups = new ArrayList<>();
ruleGroups.add(mock(RuleGroup.class));
Table<EndpointConstraint, EndpointConstraint, List<RuleGroup>> ruleMap = HashBasedTable.create(1, 1);
ruleMap.put(endpointConstraint, endpointConstraint, ruleGroups);
Policy p = new Policy(ruleMap);
assertTrue(p.getRules(fromCg, toCg).size() == 1);
assertTrue(p.getRules(fromCg, toCgEmpty).isEmpty());
assertTrue(p.getRules(fromCgEmpty, toCg).isEmpty());
assertTrue(p.getRules(fromCgEmpty, toCgEmpty).isEmpty());
}
@Test
public void testGetIpPrefixesFrom() {
Set<PrefixConstraint> prefixConstraints = new HashSet<>();
final IpPrefix ipPrefix1 = IpPrefixBuilder.getDefaultInstance("10.1.0.1/24");
prefixConstraints.add(new PrefixConstraintBuilder().setIpPrefix(ipPrefix1).build());
final IpPrefix ipPrefix2 = IpPrefixBuilder.getDefaultInstance("10.2.0.1/24");
prefixConstraints.add(new PrefixConstraintBuilder().setIpPrefix(ipPrefix2).build());
Set<IpPrefix> ipPrefixes = Policy.getIpPrefixesFrom(prefixConstraints);
assertTrue(ipPrefixes.size() == 2);
assertTrue(ipPrefixes.contains(ipPrefix1));
assertTrue(ipPrefixes.contains(ipPrefix2));
}
@Test
public void testEquals() {
Policy other = new Policy(null);
assertTrue(policy.equals(other));
}
@Test
public void testToString() {
Assert.assertNotNull(policy.toString());
}
private ConditionSet newConditionSet(){
Set<ConditionName> all = new HashSet<>();
Set<ConditionName> none = new HashSet<>();
Set<Set<ConditionName>> any = new HashSet<>();
Set<ConditionName> any1 = new HashSet<>();
Set<ConditionName> any2 = new HashSet<>();
all.add(new ConditionName("condition-all-1"));
all.add(new ConditionName("condition-all-2"));
none.add(new ConditionName("condition-none-1"));
none.add(new ConditionName("condition-none-2"));
any1.add(new ConditionName("condition-any1-1"));
any1.add(new ConditionName("condition-any1-2"));
any2.add(new ConditionName("condition-any2-1"));
any2.add(new ConditionName("condition-any2-2"));
any.add(any1);
any.add(any2);
return new ConditionSet(all, none, any);
}
}