blob: a6781063c0cd3cad61b9002fd4cea00e384a2122 [file] [log] [blame]
/*
* Copyright 2015-present Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.flowobjective.impl;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Test FlowObjectiveCompositionTree.
*/
@Ignore
public class FlowObjectiveCompositionTreeTest {
private final Logger log = LoggerFactory.getLogger(getClass());
@Before
public void setUp() {}
@After
public void tearDown() {}
/*@Test
public void testParallelComposition() {
FlowObjectiveCompositionTree policyTree = FlowObjectiveCompositionUtil.parsePolicyString("31+32");
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPSrc(IpPrefix.valueOf("1.0.0.0/24"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder().build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(0)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.1/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(1))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.2/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(2))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder().build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(0)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Parallel ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.3/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(3))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Parallel ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.3/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(3))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.remove();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPSrc(IpPrefix.valueOf("1.0.0.0/24"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.remove();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder().build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(0)
.withSelector(selector)
.withTreatment(treatment)
.remove();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Parallel ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
}
@Test
public void testSequentialComposition() {
FlowObjectiveCompositionTree policyTree = FlowObjectiveCompositionUtil.parsePolicyString("31>32");
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPSrc(IpPrefix.valueOf("0.0.0.0/2"))
.matchIPDst(IpPrefix.valueOf("3.0.0.0/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setIpDst(IpAddress.valueOf("2.0.0.1"))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(3)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("3.0.0.0/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setIpDst(IpAddress.valueOf("2.0.0.2"))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder().build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(0)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.1/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(1))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.2/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(2))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder().build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(0)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Sequential ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.3/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(3))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPSrc(IpPrefix.valueOf("0.0.0.0/1"))
.matchIPDst(IpPrefix.valueOf("3.0.0.0/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setIpDst(IpAddress.valueOf("2.0.0.3"))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(3)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Sequential ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.3/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(3))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.remove();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPSrc(IpPrefix.valueOf("0.0.0.0/1"))
.matchIPDst(IpPrefix.valueOf("3.0.0.0/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setIpDst(IpAddress.valueOf("2.0.0.3"))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(3)
.withSelector(selector)
.withTreatment(treatment)
.remove();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Sequential ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
}
@Test
public void testOverrideComposition() {
FlowObjectiveCompositionTree policyTree = FlowObjectiveCompositionUtil.parsePolicyString("31/32");
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPSrc(IpPrefix.valueOf("1.0.0.0/32"))
.matchIPDst(IpPrefix.valueOf("2.0.0.1/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(3))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(31, "a"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.1/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(1))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.2/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(2))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
{
TrafficSelector selector = DefaultTrafficSelector.builder().build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(0)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Override ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.3/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(3))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.add();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Override ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
{
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchIPDst(IpPrefix.valueOf("2.0.0.3/32"))
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(3))
.build();
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.fromApp(new DefaultApplicationId(32, "b"))
.makePermanent()
.withFlag(ForwardingObjective.Flag.VERSATILE)
.withPriority(1)
.withSelector(selector)
.withTreatment(treatment)
.remove();
helper(policyTree, forwardingObjective);
}
System.out.println("---------- Override ----------");
for (ForwardingObjective fo : policyTree.forwardTable.getForwardingObjectives()) {
System.out.println(forwardingObjectiveToString(fo));
}
}
private void helper(FlowObjectiveCompositionTree policyTree, ForwardingObjective forwardingObjective) {
log.info("before composition");
log.info("\t{}", forwardingObjectiveToString(forwardingObjective));
List<ForwardingObjective> forwardingObjectives
= policyTree.updateForward(forwardingObjective);
log.info("after composition");
for (ForwardingObjective fo : forwardingObjectives) {
log.info("\t{}", forwardingObjectiveToString(fo));
}
}*/
}