[ONOS-6397] Fix incorrect filtering objective condition from Intent copmiler.
LinkCollectionObjectiveCompiler should generate filtering objective
according to different situation.
This implementation use criterion from in/egress FilteredConnectedPoint and encapsulation tag for the
filtering objective.
Change-Id: Ib2ccd6fb00d055a96f2762ce261780ebc544a77b
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/AbstractLinkCollectionTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/AbstractLinkCollectionTest.java
index f0f1d29..f32c8a3 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/AbstractLinkCollectionTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/AbstractLinkCollectionTest.java
@@ -134,6 +134,7 @@
final TrafficSelector selector = emptySelector();
final TrafficSelector vlan69Selector = vlanSelector("69");
+ final TrafficSelector vlan1Selector = vlanSelector("1");
final TrafficSelector vlan100Selector = vlanSelector("100");
final TrafficSelector vlan200Selector = vlanSelector("200");
final TrafficSelector vlan300Selector = vlanSelector("300");
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/LinkCollectionIntentObjectiveCompilerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/LinkCollectionIntentObjectiveCompilerTest.java
index 88b2118..7a5ac87 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/LinkCollectionIntentObjectiveCompilerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/LinkCollectionIntentObjectiveCompilerTest.java
@@ -15,16 +15,19 @@
*/
package org.onosproject.net.intent.impl.compiler;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
import org.onosproject.cfg.ComponentConfigAdapter;
+import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.net.DefaultLink;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.EncapsulationType;
import org.onosproject.net.FilteredConnectPoint;
import org.onosproject.net.Link;
import org.onosproject.net.PortNumber;
@@ -44,23 +47,30 @@
import org.onosproject.net.intent.Intent;
import org.onosproject.net.intent.IntentExtensionService;
import org.onosproject.net.intent.LinkCollectionIntent;
+import org.onosproject.net.intent.constraint.EncapsulationConstraint;
import org.onosproject.net.resource.MockResourceService;
import org.onosproject.net.resource.ResourceService;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import static org.easymock.EasyMock.*;
-import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.onosproject.net.Link.Type.DIRECT;
import static org.onosproject.net.NetTestTools.PID;
import static org.onosproject.net.domain.DomainId.LOCAL;
+import static org.onosproject.net.flowobjective.ForwardingObjective.Flag.SPECIFIC;
+import static org.onosproject.net.flowobjective.NextObjective.Type.BROADCAST;
+import static org.onosproject.net.flowobjective.NextObjective.Type.SIMPLE;
+import static org.onosproject.net.flowobjective.Objective.Operation.ADD;
public class LinkCollectionIntentObjectiveCompilerTest extends AbstractLinkCollectionTest {
+ private static final VlanId VLAN_1 = VlanId.vlanId("1");
+ private static final VlanId VLAN_100 = VlanId.vlanId("100");
private LinkCollectionIntentObjectiveCompiler compiler;
private FlowObjectiveServiceAdapter flowObjectiveService;
@@ -105,7 +115,13 @@
LinkCollectionCompiler.copyTtl = false;
replay(coreService, domainService, intentExtensionService);
+ compiler.activate();
+ }
+ @After
+ public void tearDown() {
+ super.tearDown();
+ compiler.deactivate();
}
/**
@@ -114,8 +130,6 @@
*/
@Test
public void testCompile() {
- compiler.activate();
-
LinkCollectionIntent intent = LinkCollectionIntent.builder()
.appId(appId)
.selector(selector)
@@ -131,14 +145,13 @@
FlowObjectiveIntent foIntent = (FlowObjectiveIntent) result.get(0);
List<Objective> objectives = foIntent.objectives();
- assertThat(objectives, hasSize(9));
+ assertThat(objectives, hasSize(6));
/*
* First set of objective
*/
- filteringObjective = (FilteringObjective) objectives.get(0);
- forwardingObjective = (ForwardingObjective) objectives.get(1);
- nextObjective = (NextObjective) objectives.get(2);
+ forwardingObjective = (ForwardingObjective) objectives.get(0);
+ nextObjective = (NextObjective) objectives.get(1);
// expect selector and treatment
TrafficSelector expectSelector = DefaultTrafficSelector.builder()
@@ -147,102 +160,44 @@
TrafficTreatment expectTreatment = DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(1))
.build();
- PortCriterion inPortCriterion =
- (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
-
- // test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* Second set of objective
*/
- filteringObjective = (FilteringObjective) objectives.get(3);
- forwardingObjective = (ForwardingObjective) objectives.get(4);
- nextObjective = (NextObjective) objectives.get(5);
+ forwardingObjective = (ForwardingObjective) objectives.get(2);
+ nextObjective = (NextObjective) objectives.get(3);
expectSelector = DefaultTrafficSelector.builder()
.matchInPort(PortNumber.portNumber(0))
.build();
- inPortCriterion =
- (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
-
- // test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
-
// test case for second next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for second forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* 3rd set of objective
*/
- filteringObjective = (FilteringObjective) objectives.get(6);
- forwardingObjective = (ForwardingObjective) objectives.get(7);
- nextObjective = (NextObjective) objectives.get(8);
-
+ forwardingObjective = (ForwardingObjective) objectives.get(4);
+ nextObjective = (NextObjective) objectives.get(5);
expectSelector = DefaultTrafficSelector.builder()
.matchInPort(PortNumber.portNumber(1))
.build();
- inPortCriterion =
- (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
-
- // test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
-
// test case for 3rd next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for 3rd forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
-
- compiler.deactivate();
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
}
/**
@@ -258,7 +213,6 @@
*/
@Test
public void testFilteredConnectPointForSp() {
- compiler.activate();
Set<Link> testLinks = ImmutableSet.of(
DefaultLink.builder().providerId(PID).src(of1p2).dst(of2p1).type(DIRECT).build(),
DefaultLink.builder().providerId(PID).src(of2p2).dst(of3p1).type(DIRECT).build(),
@@ -307,36 +261,27 @@
// expect selector and treatment
TrafficSelector expectSelector = DefaultTrafficSelector.builder()
.matchInPort(PortNumber.portNumber(1))
- .matchVlanId(VlanId.vlanId("100"))
+ .matchVlanId(VLAN_100)
.matchEthDst(MacAddress.BROADCAST)
.build();
- TrafficTreatment expectTreatment = DefaultTrafficTreatment.builder()
- .setOutput(PortNumber.portNumber(2))
- .build();
+ List<TrafficTreatment> expectTreatments = ImmutableList.of(
+ DefaultTrafficTreatment.builder()
+ .setOutput(PortNumber.portNumber(2))
+ .build()
+ );
PortCriterion inPortCriterion =
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.BROADCAST));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* Second set of objective
@@ -349,25 +294,14 @@
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for second next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.BROADCAST));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
// test case for second forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* 3rd set of objective
@@ -380,25 +314,14 @@
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for 3rd next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.BROADCAST));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
// test case for 3rd forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* 4th set of objective
@@ -411,38 +334,22 @@
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for 3rd next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.BROADCAST));
-
- // have 2 treatments in this objective
- assertThat(nextObjective.next(), hasSize(2));
- expectTreatment = DefaultTrafficTreatment.builder()
+ expectTreatments = ImmutableList.of(
+ DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(2))
- .build();
- assertThat(nextObjective.next(), hasItem(expectTreatment));
-
- expectTreatment = DefaultTrafficTreatment.builder()
+ .build(),
+ DefaultTrafficTreatment.builder()
.setOutput(PortNumber.portNumber(3))
- .build();
- assertThat(nextObjective.next(), hasItem(expectTreatment));
-
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ .build()
+ );
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
// test case for 3rd forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
-
- compiler.deactivate();
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
}
/**
@@ -456,7 +363,6 @@
*/
@Test
public void testFilteredConnectPointForMp() {
- compiler.activate();
Set<Link> testLinks = ImmutableSet.of(
DefaultLink.builder().providerId(PID).src(of1p2).dst(of2p1).type(DIRECT).build(),
DefaultLink.builder().providerId(PID).src(of3p2).dst(of2p3).type(DIRECT).build(),
@@ -472,8 +378,6 @@
new FilteredConnectPoint(of4p2, vlan100Selector)
);
-
-
LinkCollectionIntent intent = LinkCollectionIntent.builder()
.appId(appId)
.selector(ethDstSelector)
@@ -494,7 +398,7 @@
TrafficSelector expectSelector = DefaultTrafficSelector
.builder(ethDstSelector)
.matchInPort(PortNumber.portNumber(1))
- .matchVlanId(VlanId.vlanId("100"))
+ .matchVlanId(VLAN_100)
.build();
TrafficTreatment expectTreatment = DefaultTrafficTreatment.builder()
@@ -512,25 +416,14 @@
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* Second set of objective
@@ -540,25 +433,14 @@
nextObjective = (NextObjective) objectives.get(5);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* 3rd set of objective
@@ -568,25 +450,14 @@
nextObjective = (NextObjective) objectives.get(8);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* 4th set of objective
@@ -596,25 +467,14 @@
nextObjective = (NextObjective) objectives.get(11);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* 5th set of objective
@@ -624,7 +484,7 @@
nextObjective = (NextObjective) objectives.get(14);
expectSelector = DefaultTrafficSelector.builder(ethDstSelector)
- .matchVlanId(VlanId.vlanId("100"))
+ .matchVlanId(VLAN_100)
.matchInPort(PortNumber.portNumber(3))
.build();
@@ -632,26 +492,14 @@
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
- compiler.deactivate();
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
}
/**
@@ -661,7 +509,6 @@
*/
@Test
public void singleHopTestForMp() {
- compiler.activate();
Set<Link> testLinks = ImmutableSet.of();
Set<FilteredConnectPoint> ingress = ImmutableSet.of(
@@ -694,7 +541,7 @@
TrafficSelector expectSelector = DefaultTrafficSelector
.builder(ethDstSelector)
.matchInPort(PortNumber.portNumber(1))
- .matchVlanId(VlanId.vlanId("100"))
+ .matchVlanId(VLAN_100)
.build();
TrafficTreatment expectTreatment = DefaultTrafficTreatment.builder()
@@ -712,25 +559,14 @@
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
/*
* Second set of objective
@@ -741,33 +577,21 @@
expectSelector = DefaultTrafficSelector.builder(ethDstSelector)
.matchInPort(PortNumber.portNumber(2))
- .matchVlanId(VlanId.vlanId("100"))
+ .matchVlanId(VLAN_100)
.build();
inPortCriterion =
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.SIMPLE));
- assertThat(nextObjective.next(), hasSize(1));
- assertThat(nextObjective.next().iterator().next(), is(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
- compiler.deactivate();
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
}
/**
@@ -777,7 +601,6 @@
*/
@Test
public void singleHopTestForSp() {
- compiler.activate();
Set<Link> testLinks = ImmutableSet.of();
Set<FilteredConnectPoint> ingress = ImmutableSet.of(
@@ -812,12 +635,17 @@
TrafficSelector expectSelector = DefaultTrafficSelector
.builder(ethDstSelector)
.matchInPort(PortNumber.portNumber(1))
- .matchVlanId(VlanId.vlanId("100"))
+ .matchVlanId(VLAN_100)
.build();
- TrafficTreatment expectTreatment = DefaultTrafficTreatment.builder()
- .setOutput(PortNumber.portNumber(3))
- .build();
+ List<TrafficTreatment> expectTreatments = ImmutableList.of(
+ DefaultTrafficTreatment.builder()
+ .setOutput(PortNumber.portNumber(2))
+ .build(),
+ DefaultTrafficTreatment.builder()
+ .setOutput(PortNumber.portNumber(3))
+ .build()
+ );
/*
* First set of objective
@@ -830,33 +658,382 @@
(PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
// test case for first filtering objective
- assertThat(filteringObjective.key(), is(inPortCriterion));
- assertThat(filteringObjective.priority(), is(intent.priority()));
- assertThat(filteringObjective.meta(), nullValue());
- assertThat(filteringObjective.appId(), is(appId));
- assertThat(filteringObjective.permanent(), is(true));
- assertThat(filteringObjective.conditions(), is(Lists.newArrayList(expectSelector.criteria())));
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, vlan100Selector.criteria());
// test case for first next objective
- assertThat(nextObjective.type(), is(NextObjective.Type.BROADCAST));
- assertThat(nextObjective.next(), hasSize(2));
- assertThat(nextObjective.next(), hasItem(expectTreatment));
- expectTreatment = DefaultTrafficTreatment.builder()
- .setOutput(PortNumber.portNumber(3))
- .build();
- assertThat(nextObjective.next(), hasItem(expectTreatment));
- assertThat(nextObjective.meta(), is(expectSelector));
- assertThat(nextObjective.op(), is(Objective.Operation.ADD));
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
// test case for first forwarding objective
- assertThat(forwardingObjective.op(), is(Objective.Operation.ADD));
- assertThat(forwardingObjective.selector(), is(expectSelector));
- assertThat(forwardingObjective.nextId(), is(nextObjective.id()));
- assertThat(forwardingObjective.flag(), is(ForwardingObjective.Flag.SPECIFIC));
-
- compiler.deactivate();
-
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
}
+ /**
+ * Single point to multi point case. Scenario is the follow:
+ *
+ * -1 of1 2-1 of2 2--1 of3 2-
+ * 3
+ * `-1 of4 2-
+ *
+ * We test the proper compilation constraint of sp2mp
+ * with encapsulation, trivial selector, empty treatment and points.
+ */
+ @Test
+ public void testFilteredConnectPointForSpWithEncap() throws Exception {
+ LinkCollectionCompiler.labelAllocator.setLabelSelection(LABEL_SELECTION);
+ Set<Link> testLinks = ImmutableSet.of(
+ DefaultLink.builder().providerId(PID).src(of1p2).dst(of2p1).type(DIRECT).build(),
+ DefaultLink.builder().providerId(PID).src(of2p2).dst(of3p1).type(DIRECT).build(),
+ DefaultLink.builder().providerId(PID).src(of2p3).dst(of4p1).type(DIRECT).build()
+ );
+ Set<FilteredConnectPoint> ingress = ImmutableSet.of(
+ new FilteredConnectPoint(of1p1, vlan100Selector)
+ );
+
+ Set<FilteredConnectPoint> egress = ImmutableSet.of(
+ new FilteredConnectPoint(of3p2, vlan100Selector),
+ new FilteredConnectPoint(of4p2, vlan100Selector)
+ );
+
+ TrafficSelector broadcastSelector = DefaultTrafficSelector.builder()
+ .matchEthDst(MacAddress.BROADCAST)
+ .build();
+
+ EncapsulationConstraint constraint = new EncapsulationConstraint(EncapsulationType.VLAN);
+ LinkCollectionIntent intent = LinkCollectionIntent.builder()
+ .appId(appId)
+ .selector(broadcastSelector)
+ .treatment(treatment)
+ .links(testLinks)
+ .filteredIngressPoints(ingress)
+ .filteredEgressPoints(egress)
+ .applyTreatmentOnEgress(true)
+ .resourceGroup(resourceGroup1)
+ .constraints(ImmutableList.of(constraint))
+ .build();
+
+ List<Intent> result = compiler.compile(intent, Collections.emptyList());
+ assertThat(result, hasSize(1));
+ assertThat(result.get(0), instanceOf(FlowObjectiveIntent.class));
+
+ FlowObjectiveIntent foIntent = (FlowObjectiveIntent) result.get(0);
+ List<Objective> objectives = foIntent.objectives();
+ assertThat(objectives, hasSize(12));
+
+ /*
+ * First set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(0);
+ forwardingObjective = (ForwardingObjective) objectives.get(1);
+ nextObjective = (NextObjective) objectives.get(2);
+
+ // expect selector and treatment
+ TrafficSelector expectSelector = DefaultTrafficSelector.builder()
+ .matchInPort(PortNumber.portNumber(1))
+ .matchVlanId(VLAN_100)
+ .matchEthDst(MacAddress.BROADCAST)
+ .build();
+ List<TrafficTreatment> expectTreatments = ImmutableList.of(
+ DefaultTrafficTreatment.builder()
+ .setVlanId(VLAN_1)
+ .setOutput(PortNumber.portNumber(2))
+ .build()
+ );
+ TrafficSelector filteringSelector = vlan100Selector;
+ PortCriterion inPortCriterion =
+ (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
+
+ // test case for first filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+
+ // test case for first next objective
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
+
+ // test case for first forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
+
+ /*
+ * Second set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(3);
+ forwardingObjective = (ForwardingObjective) objectives.get(4);
+ nextObjective = (NextObjective) objectives.get(5);
+ expectSelector = DefaultTrafficSelector.builder()
+ .matchInPort(PortNumber.portNumber(1))
+ .matchVlanId(VLAN_1)
+ .build();
+ expectTreatments = ImmutableList.of(
+ DefaultTrafficTreatment.builder()
+ .setVlanId(VLAN_100)
+ .setOutput(PortNumber.portNumber(2))
+ .build()
+ );
+ filteringSelector = vlan1Selector;
+ inPortCriterion =
+ (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
+
+ // test case for first filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+
+ // test case for second next objective
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
+
+ // test case for second forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
+
+ /*
+ * 3rd set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(6);
+ forwardingObjective = (ForwardingObjective) objectives.get(7);
+ nextObjective = (NextObjective) objectives.get(8);
+ inPortCriterion =
+ (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
+
+ // test case for first filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+
+ // test case for 3rd next objective
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
+
+ // test case for 3rd forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
+
+ /*
+ * 4th set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(9);
+ forwardingObjective = (ForwardingObjective) objectives.get(10);
+ nextObjective = (NextObjective) objectives.get(11);
+
+ inPortCriterion =
+ (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
+
+ // test case for first filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+
+ // test case for 3rd next objective
+ expectTreatments = ImmutableList.of(
+ DefaultTrafficTreatment.builder()
+ .setVlanId(VLAN_1)
+ .setOutput(PortNumber.portNumber(2))
+ .build(),
+ DefaultTrafficTreatment.builder()
+ .setVlanId(VLAN_1)
+ .setOutput(PortNumber.portNumber(3))
+ .build()
+ );
+ checkNext(nextObjective, BROADCAST, expectTreatments, expectSelector, ADD);
+
+ // test case for 3rd forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
+ }
+
+ /**
+ * Multi point to single point intent with filtered connect point.
+ * Scenario is the follow:
+ *
+ * -1 of1 2-1 of2 2-1 of4 2-
+ * 3
+ * -1 of3 2---/
+ * We test the proper compilation constraint of mp2sp
+ * with encapsulation, trivial selector, empty treatment and points.
+ */
+ @Test
+ public void testFilteredConnectPointForMpWithEncap() throws Exception {
+ LinkCollectionCompiler.labelAllocator.setLabelSelection(LABEL_SELECTION);
+ Set<Link> testLinks = ImmutableSet.of(
+ DefaultLink.builder().providerId(PID).src(of1p2).dst(of2p1).type(DIRECT).build(),
+ DefaultLink.builder().providerId(PID).src(of3p2).dst(of2p3).type(DIRECT).build(),
+ DefaultLink.builder().providerId(PID).src(of2p2).dst(of4p1).type(DIRECT).build()
+ );
+ Set<FilteredConnectPoint> ingress = ImmutableSet.of(
+ new FilteredConnectPoint(of3p1, vlan100Selector),
+ new FilteredConnectPoint(of1p1, vlan100Selector)
+ );
+ Set<FilteredConnectPoint> egress = ImmutableSet.of(
+ new FilteredConnectPoint(of4p2, vlan100Selector)
+ );
+ EncapsulationConstraint constraint = new EncapsulationConstraint(EncapsulationType.VLAN);
+ LinkCollectionIntent intent = LinkCollectionIntent.builder()
+ .appId(appId)
+ .selector(ethDstSelector)
+ .treatment(treatment)
+ .links(testLinks)
+ .filteredIngressPoints(ingress)
+ .filteredEgressPoints(egress)
+ .constraints(ImmutableList.of(constraint))
+ .build();
+ List<Intent> result = compiler.compile(intent, Collections.emptyList());
+ assertThat(result, hasSize(1));
+ assertThat(result.get(0), instanceOf(FlowObjectiveIntent.class));
+ FlowObjectiveIntent foIntent = (FlowObjectiveIntent) result.get(0);
+ List<Objective> objectives = foIntent.objectives();
+ assertThat(objectives, hasSize(15));
+ TrafficSelector expectSelector = DefaultTrafficSelector
+ .builder(ethDstSelector)
+ .matchInPort(PortNumber.portNumber(1))
+ .matchVlanId(VLAN_100)
+ .build();
+ TrafficSelector filteringSelector = vlan100Selector;
+ TrafficTreatment expectTreatment = DefaultTrafficTreatment.builder()
+ .setVlanId(VLAN_1)
+ .setOutput(PortNumber.portNumber(2))
+ .build();
+ /*
+ * First set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(0);
+ forwardingObjective = (ForwardingObjective) objectives.get(1);
+ nextObjective = (NextObjective) objectives.get(2);
+ PortCriterion inPortCriterion =
+ (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
+ // test case for first filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+ // test case for first next objective
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
+ // test case for first forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
+ /*
+ * Second set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(3);
+ forwardingObjective = (ForwardingObjective) objectives.get(4);
+ nextObjective = (NextObjective) objectives.get(5);
+ expectSelector = DefaultTrafficSelector
+ .builder()
+ .matchInPort(PortNumber.portNumber(1))
+ .matchVlanId(VLAN_1)
+ .build();
+ filteringSelector = vlan1Selector;
+ expectTreatment = DefaultTrafficTreatment
+ .builder()
+ .setVlanId(VLAN_100)
+ .setOutput(PortNumber.portNumber(2))
+ .build();
+ // test case for second filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+ // test case for second next objective
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
+ // test case for second forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
+ /*
+ * 3rd set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(6);
+ forwardingObjective = (ForwardingObjective) objectives.get(7);
+ nextObjective = (NextObjective) objectives.get(8);
+ filteringSelector = vlan100Selector;
+ expectTreatment = DefaultTrafficTreatment
+ .builder()
+ .setVlanId(VLAN_1)
+ .setOutput(PortNumber.portNumber(2))
+ .build();
+ expectSelector = DefaultTrafficSelector
+ .builder(ethDstSelector)
+ .matchInPort(PortNumber.portNumber(1))
+ .matchVlanId(VLAN_100)
+ .build();
+ // test case for 3rd filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+ // test case for 3rd next objective
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
+ // test case for 3rd forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
+ /*
+ * 4th set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(9);
+ forwardingObjective = (ForwardingObjective) objectives.get(10);
+ nextObjective = (NextObjective) objectives.get(11);
+ filteringSelector = vlan1Selector;
+ expectSelector = DefaultTrafficSelector
+ .builder()
+ .matchInPort(PortNumber.portNumber(1))
+ .matchVlanId(VLAN_1)
+ .build();
+ // test case for 4th filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+ // test case for 4th next objective
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
+ // test case for 4th forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector, nextObjective.id(), SPECIFIC);
+
+ /*
+ * 5th set of objective
+ */
+ filteringObjective = (FilteringObjective) objectives.get(12);
+ forwardingObjective = (ForwardingObjective) objectives.get(13);
+ nextObjective = (NextObjective) objectives.get(14);
+ expectSelector = DefaultTrafficSelector.builder()
+ .matchVlanId(VlanId.vlanId("1"))
+ .matchInPort(PortNumber.portNumber(3))
+ .build();
+ inPortCriterion =
+ (PortCriterion) expectSelector.getCriterion(Criterion.Type.IN_PORT);
+ // test case for 5th filtering objective
+ checkFiltering(filteringObjective, inPortCriterion, intent.priority(),
+ null, appId, true, filteringSelector.criteria());
+ // test case for 5th next objective
+ checkNext(nextObjective, SIMPLE, expectTreatment, expectSelector, ADD);
+ // test case for 5th forwarding objective
+ checkForward(forwardingObjective, ADD, expectSelector,
+ nextObjective.id(), SPECIFIC);
+ }
+
+ private void checkFiltering(FilteringObjective filteringObjective,
+ Criterion key,
+ int priority,
+ TrafficSelector meta,
+ ApplicationId appId,
+ boolean permanent,
+ Collection<Criterion> conditions) {
+ conditions = ImmutableList.copyOf(conditions);
+ assertThat(filteringObjective.key(), is(key));
+ assertThat(filteringObjective.priority(), is(priority));
+ assertThat(filteringObjective.meta(), is(meta));
+ assertThat(filteringObjective.appId(), is(appId));
+ assertThat(filteringObjective.permanent(), is(permanent));
+ assertThat(filteringObjective.conditions(), is(conditions));
+ }
+
+ private void checkNext(NextObjective nextObjective,
+ NextObjective.Type type,
+ TrafficTreatment next,
+ TrafficSelector meta,
+ Objective.Operation op) {
+ checkNext(nextObjective, type, ImmutableList.of(next), meta, op);
+ }
+
+ private void checkNext(NextObjective nextObjective,
+ NextObjective.Type type,
+ Collection<TrafficTreatment> next,
+ TrafficSelector meta,
+ Objective.Operation op) {
+ assertThat(nextObjective.type(), is(type));
+ assertThat(nextObjective.next().size(), is(next.size()));
+ assertThat(nextObjective.next().containsAll(next), is(true));
+ assertThat(nextObjective.meta(), is(meta));
+ assertThat(nextObjective.op(), is(op));
+ }
+
+ private void checkForward(ForwardingObjective forwardingObjective,
+ Objective.Operation op,
+ TrafficSelector selector,
+ int nextId,
+ ForwardingObjective.Flag flag) {
+ assertThat(forwardingObjective.op(), is(op));
+ assertThat(forwardingObjective.selector(), is(selector));
+ assertThat(forwardingObjective.nextId(), is(nextId));
+ assertThat(forwardingObjective.flag(), is(flag));
+ }
}