Ayaka Koshibe

FlowRule equals() incorporates FlowId to factor in treatment.

Reference: ONOS-481

Change-Id: Ia1fcba3f827c662c89801afc84916ffef78af66d
...@@ -203,7 +203,8 @@ public class DefaultFlowRule implements FlowRule { ...@@ -203,7 +203,8 @@ public class DefaultFlowRule implements FlowRule {
203 DefaultFlowRule that = (DefaultFlowRule) obj; 203 DefaultFlowRule that = (DefaultFlowRule) obj;
204 return Objects.equals(deviceId, that.deviceId) && 204 return Objects.equals(deviceId, that.deviceId) &&
205 Objects.equals(priority, that.priority) && 205 Objects.equals(priority, that.priority) &&
206 - Objects.equals(selector, that.selector); 206 + Objects.equals(selector, that.selector) &&
207 + Objects.equals(id, that.id());
207 208
208 } 209 }
209 return false; 210 return false;
......
...@@ -17,12 +17,15 @@ ...@@ -17,12 +17,15 @@
17 package org.onosproject.net.flow; 17 package org.onosproject.net.flow;
18 18
19 import org.junit.Test; 19 import org.junit.Test;
20 +import org.onosproject.net.PortNumber;
21 +import org.onosproject.net.flow.instructions.Instructions;
20 import org.onosproject.net.intent.IntentTestsMocks; 22 import org.onosproject.net.intent.IntentTestsMocks;
21 23
22 import com.google.common.testing.EqualsTester; 24 import com.google.common.testing.EqualsTester;
23 25
24 import static org.hamcrest.MatcherAssert.assertThat; 26 import static org.hamcrest.MatcherAssert.assertThat;
25 import static org.hamcrest.Matchers.is; 27 import static org.hamcrest.Matchers.is;
28 +import static org.hamcrest.Matchers.not;
26 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass; 29 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass;
27 import static org.onosproject.net.NetTestTools.APP_ID; 30 import static org.onosproject.net.NetTestTools.APP_ID;
28 import static org.onosproject.net.NetTestTools.did; 31 import static org.onosproject.net.NetTestTools.did;
...@@ -33,8 +36,12 @@ import static org.onosproject.net.NetTestTools.did; ...@@ -33,8 +36,12 @@ import static org.onosproject.net.NetTestTools.did;
33 public class DefaultFlowRuleTest { 36 public class DefaultFlowRuleTest {
34 private static final IntentTestsMocks.MockSelector SELECTOR = 37 private static final IntentTestsMocks.MockSelector SELECTOR =
35 new IntentTestsMocks.MockSelector(); 38 new IntentTestsMocks.MockSelector();
36 - private static final IntentTestsMocks.MockTreatment TREATMENT = 39 + private static final IntentTestsMocks.MockTreatment TREATMENT1 =
37 - new IntentTestsMocks.MockTreatment(); 40 + new IntentTestsMocks.MockTreatment(
41 + Instructions.createOutput(PortNumber.portNumber(1)));
42 + private static final IntentTestsMocks.MockTreatment TREATMENT2 =
43 + new IntentTestsMocks.MockTreatment(
44 + Instructions.createOutput(PortNumber.portNumber(2)));
38 45
39 final FlowRule flowRule1 = new IntentTestsMocks.MockFlowRule(1); 46 final FlowRule flowRule1 = new IntentTestsMocks.MockFlowRule(1);
40 final FlowRule sameAsFlowRule1 = new IntentTestsMocks.MockFlowRule(1); 47 final FlowRule sameAsFlowRule1 = new IntentTestsMocks.MockFlowRule(1);
...@@ -85,14 +92,14 @@ public class DefaultFlowRuleTest { ...@@ -85,14 +92,14 @@ public class DefaultFlowRuleTest {
85 public void testCreationWithFlowId() { 92 public void testCreationWithFlowId() {
86 final DefaultFlowRule rule = 93 final DefaultFlowRule rule =
87 new DefaultFlowRule(did("1"), SELECTOR, 94 new DefaultFlowRule(did("1"), SELECTOR,
88 - TREATMENT, 22, 33, 95 + TREATMENT1, 22, 33,
89 44, false); 96 44, false);
90 assertThat(rule.deviceId(), is(did("1"))); 97 assertThat(rule.deviceId(), is(did("1")));
91 assertThat(rule.id().value(), is(33L)); 98 assertThat(rule.id().value(), is(33L));
92 assertThat(rule.isPermanent(), is(false)); 99 assertThat(rule.isPermanent(), is(false));
93 assertThat(rule.priority(), is(22)); 100 assertThat(rule.priority(), is(22));
94 assertThat(rule.selector(), is(SELECTOR)); 101 assertThat(rule.selector(), is(SELECTOR));
95 - assertThat(rule.treatment(), is(TREATMENT)); 102 + assertThat(rule.treatment(), is(TREATMENT1));
96 assertThat(rule.timeout(), is(44)); 103 assertThat(rule.timeout(), is(44));
97 } 104 }
98 105
...@@ -103,13 +110,25 @@ public class DefaultFlowRuleTest { ...@@ -103,13 +110,25 @@ public class DefaultFlowRuleTest {
103 public void testCreationWithAppId() { 110 public void testCreationWithAppId() {
104 final DefaultFlowRule rule = 111 final DefaultFlowRule rule =
105 new DefaultFlowRule(did("1"), SELECTOR, 112 new DefaultFlowRule(did("1"), SELECTOR,
106 - TREATMENT, 22, APP_ID, 113 + TREATMENT1, 22, APP_ID,
107 44, false); 114 44, false);
108 assertThat(rule.deviceId(), is(did("1"))); 115 assertThat(rule.deviceId(), is(did("1")));
109 assertThat(rule.isPermanent(), is(false)); 116 assertThat(rule.isPermanent(), is(false));
110 assertThat(rule.priority(), is(22)); 117 assertThat(rule.priority(), is(22));
111 assertThat(rule.selector(), is(SELECTOR)); 118 assertThat(rule.selector(), is(SELECTOR));
112 - assertThat(rule.treatment(), is(TREATMENT)); 119 + assertThat(rule.treatment(), is(TREATMENT1));
113 assertThat(rule.timeout(), is(44)); 120 assertThat(rule.timeout(), is(44));
114 } 121 }
122 +
123 + /**
124 + * Tests equality that factors in TrafficTreatment through the flowId.
125 + */
126 + @Test
127 + public void testActionEquals() {
128 + final DefaultFlowRule rule1 = new DefaultFlowRule(did("1"), SELECTOR,
129 + TREATMENT1, 22, APP_ID, 44, false);
130 + final DefaultFlowRule rule2 = new DefaultFlowRule(did("1"), SELECTOR,
131 + TREATMENT2, 22, APP_ID, 44, false);
132 + assertThat(rule1, not(rule2));
133 + }
115 } 134 }
......
...@@ -80,9 +80,19 @@ public class IntentTestsMocks { ...@@ -80,9 +80,19 @@ public class IntentTestsMocks {
80 * Mock traffic treatment class used for satisfying API requirements. 80 * Mock traffic treatment class used for satisfying API requirements.
81 */ 81 */
82 public static class MockTreatment implements TrafficTreatment { 82 public static class MockTreatment implements TrafficTreatment {
83 +
84 + private List<Instruction> instructions = new ArrayList<>();
85 +
86 + public MockTreatment() {
87 + }
88 +
89 + public MockTreatment(Instruction... insts) {
90 + this.instructions.addAll(Arrays.asList(insts));
91 + }
92 +
83 @Override 93 @Override
84 public List<Instruction> instructions() { 94 public List<Instruction> instructions() {
85 - return new ArrayList<>(); 95 + return this.instructions;
86 } 96 }
87 } 97 }
88 98
......