blob: bd11252be67faca036d9cd8df0f8738c8169497d [file] [log] [blame]
Frank Wange33e4ed2017-06-28 10:01:07 +08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Frank Wange33e4ed2017-06-28 10:01:07 +08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.net.flow.criteria;
18
Frank Wange33e4ed2017-06-28 10:01:07 +080019import com.google.common.testing.EqualsTester;
Frank Wange33e4ed2017-06-28 10:01:07 +080020import org.junit.Test;
Carmelo Cascone87892e22017-11-13 16:01:29 -080021import org.onosproject.net.pi.model.PiMatchFieldId;
Frank Wange33e4ed2017-06-28 10:01:07 +080022import org.onosproject.net.pi.runtime.PiExactFieldMatch;
23import org.onosproject.net.pi.runtime.PiFieldMatch;
Frank Wange33e4ed2017-06-28 10:01:07 +080024import org.onosproject.net.pi.runtime.PiLpmFieldMatch;
25import org.onosproject.net.pi.runtime.PiRangeFieldMatch;
26import org.onosproject.net.pi.runtime.PiTernaryFieldMatch;
Frank Wange33e4ed2017-06-28 10:01:07 +080027
Frank Wange33e4ed2017-06-28 10:01:07 +080028import static org.hamcrest.MatcherAssert.assertThat;
29import static org.hamcrest.Matchers.equalTo;
30import static org.hamcrest.Matchers.instanceOf;
31import static org.hamcrest.Matchers.is;
32import static org.hamcrest.Matchers.notNullValue;
33import static org.onlab.util.ImmutableByteSequence.copyFrom;
34
35/**
36 * Unit tests for the PiCriteria class.
37 */
38public class PiCriteriaTest {
39
Carmelo Cascone87892e22017-11-13 16:01:29 -080040 private PiMatchFieldId ethMatchFieldId = PiMatchFieldId.of("ethernet_t.etherType");
41 private byte[] matchExactBytes1 = {0x08, 0x00};
42 private byte[] matchExactBytes2 = {0x08, 0x06};
43 private Criterion matchPiExactByte1 = PiCriterion.builder()
44 .matchExact(ethMatchFieldId, matchExactBytes1).build();
45 private Criterion sameAsMatchPiExactByte1 = PiCriterion.builder()
46 .matchExact(ethMatchFieldId, matchExactBytes1).build();
47 private Criterion matchPiExactByte2 = PiCriterion.builder()
48 .matchExact(ethMatchFieldId, matchExactBytes2).build();
Frank Wange33e4ed2017-06-28 10:01:07 +080049
Carmelo Cascone87892e22017-11-13 16:01:29 -080050 private short matchExactShort1 = 0x800;
51 private short matchExactShort2 = 0x806;
52 private Criterion matchPiExactShort1 = PiCriterion.builder()
53 .matchExact(ethMatchFieldId, matchExactShort1).build();
54 private Criterion sameAsMatchPiExactShort1 = PiCriterion.builder()
55 .matchExact(ethMatchFieldId, matchExactShort1).build();
56 private Criterion matchPiExactShort2 = PiCriterion.builder()
57 .matchExact(ethMatchFieldId, matchExactShort2).build();
Frank Wange33e4ed2017-06-28 10:01:07 +080058
Carmelo Cascone87892e22017-11-13 16:01:29 -080059 private int matchExactInt1 = 0x800;
60 private int matchExactInt2 = 0x806;
61 private Criterion matchPiExactInt1 = PiCriterion.builder()
62 .matchExact(ethMatchFieldId, matchExactInt1).build();
63 private Criterion sameAsMatchPiExactInt1 = PiCriterion.builder()
64 .matchExact(ethMatchFieldId, matchExactInt1).build();
65 private Criterion matchPiExactInt2 = PiCriterion.builder()
66 .matchExact(ethMatchFieldId, matchExactInt2).build();
Frank Wange33e4ed2017-06-28 10:01:07 +080067
Carmelo Cascone87892e22017-11-13 16:01:29 -080068 private long matchExactLong1 = 0x800;
69 private long matchExactLong2 = 0x806;
70 private Criterion matchPiExactLong1 = PiCriterion.builder()
71 .matchExact(ethMatchFieldId, matchExactLong1).build();
72 private Criterion sameAsMatchPiExactLong1 = PiCriterion.builder()
73 .matchExact(ethMatchFieldId, matchExactLong1).build();
74 private Criterion matchPiExactLong2 = PiCriterion.builder()
75 .matchExact(ethMatchFieldId, matchExactLong2).build();
Frank Wange33e4ed2017-06-28 10:01:07 +080076
Carmelo Cascone87892e22017-11-13 16:01:29 -080077 private PiMatchFieldId ipv4MatchFieldId = PiMatchFieldId.of("ipv4_t.dstAddr");
78 private int mask = 0x00ffffff;
79 private byte[] matchLpmBytes1 = {0x0a, 0x01, 0x01, 0x01};
80 private byte[] matchLpmBytes2 = {0x0a, 0x01, 0x01, 0x02};
81 private Criterion matchPiLpmByte1 = PiCriterion.builder()
82 .matchLpm(ipv4MatchFieldId, matchLpmBytes1, mask).build();
83 private Criterion sameAsMatchPiLpmByte1 = PiCriterion.builder()
84 .matchLpm(ipv4MatchFieldId, matchLpmBytes1, mask).build();
85 private Criterion matchPiLpmByte2 = PiCriterion.builder()
86 .matchLpm(ipv4MatchFieldId, matchLpmBytes2, mask).build();
Frank Wange33e4ed2017-06-28 10:01:07 +080087
Carmelo Cascone87892e22017-11-13 16:01:29 -080088 private short matchLpmShort1 = 0x0a0a;
89 private short matchLpmShort2 = 0x0a0b;
90 private Criterion matchPiLpmShort1 = PiCriterion.builder()
91 .matchLpm(ipv4MatchFieldId, matchLpmShort1, mask).build();
92 private Criterion sameAsMatchPiLpmShort1 = PiCriterion.builder()
93 .matchLpm(ipv4MatchFieldId, matchLpmShort1, mask).build();
94 private Criterion matchPiLpmShort2 = PiCriterion.builder()
95 .matchLpm(ipv4MatchFieldId, matchLpmShort2, mask).build();
Frank Wange33e4ed2017-06-28 10:01:07 +080096
Carmelo Cascone87892e22017-11-13 16:01:29 -080097 private int matchLpmInt1 = 0x0a010101;
98 private int matchLpmInt2 = 0x0a010102;
99 private Criterion matchPiLpmInt1 = PiCriterion.builder()
100 .matchLpm(ipv4MatchFieldId, matchLpmInt1, mask).build();
101 private Criterion sameAsMatchPiLpmInt1 = PiCriterion.builder()
102 .matchLpm(ipv4MatchFieldId, matchLpmInt1, mask).build();
103 private Criterion matchPiLpmInt2 = PiCriterion.builder()
104 .matchLpm(ipv4MatchFieldId, matchLpmInt2, mask).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800105
Carmelo Cascone87892e22017-11-13 16:01:29 -0800106 private long matchLpmLong1 = 0x0a010101;
107 private long matchLpmLong2 = 0x0a010102;
108 private Criterion matchPiLpmLong1 = PiCriterion.builder()
109 .matchLpm(ipv4MatchFieldId, matchLpmLong1, mask).build();
110 private Criterion sameAsMatchPiLpmLong1 = PiCriterion.builder()
111 .matchLpm(ipv4MatchFieldId, matchLpmLong1, mask).build();
112 private Criterion matchPiLpmLong2 = PiCriterion.builder()
113 .matchLpm(ipv4MatchFieldId, matchLpmLong2, mask).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800114
115
Carmelo Cascone87892e22017-11-13 16:01:29 -0800116 private byte[] matchTernaryBytes1 = {0x0a, 0x01, 0x01, 0x01};
117 private byte[] matchTernaryBytes2 = {0x0a, 0x01, 0x01, 0x02};
118 private byte[] matchTernaryMaskBytes = {0x7f, 0x7f, 0x7f, 0x00};
119 private Criterion matchPiTernaryByte1 = PiCriterion.builder()
120 .matchTernary(ipv4MatchFieldId, matchTernaryBytes1, matchTernaryMaskBytes).build();
121 private Criterion sameAsMatchPiTernaryByte1 = PiCriterion.builder()
122 .matchTernary(ipv4MatchFieldId, matchTernaryBytes1, matchTernaryMaskBytes).build();
123 private Criterion matchPiTernaryByte2 = PiCriterion.builder()
124 .matchTernary(ipv4MatchFieldId, matchTernaryBytes2, matchTernaryMaskBytes).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800125
Carmelo Cascone87892e22017-11-13 16:01:29 -0800126 private short matchTernaryShort1 = 0x0a0a;
127 private short matchTernaryShort2 = 0x0a0b;
128 private short matchTernaryMaskShort = 0xff0;
129 private Criterion matchPiTernaryShort1 = PiCriterion.builder()
130 .matchTernary(ipv4MatchFieldId, matchTernaryShort1, matchTernaryMaskShort).build();
131 private Criterion sameAsMatchPiTernaryShort1 = PiCriterion.builder()
132 .matchTernary(ipv4MatchFieldId, matchTernaryShort1, matchTernaryMaskShort).build();
133 private Criterion matchPiTernaryShort2 = PiCriterion.builder()
134 .matchTernary(ipv4MatchFieldId, matchTernaryShort2, matchTernaryMaskShort).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800135
Carmelo Cascone87892e22017-11-13 16:01:29 -0800136 private int matchTernaryInt1 = 0x0a010101;
137 private int matchTernaryInt2 = 0x0a010102;
138 private int matchTernaryMaskInt = 0xffff;
139 private Criterion matchPiTernaryInt1 = PiCriterion.builder()
140 .matchTernary(ipv4MatchFieldId, matchTernaryInt1, matchTernaryMaskInt).build();
141 private Criterion sameAsMatchPiTernaryInt1 = PiCriterion.builder()
142 .matchTernary(ipv4MatchFieldId, matchTernaryInt1, matchTernaryMaskInt).build();
143 private Criterion matchPiTernaryInt2 = PiCriterion.builder()
144 .matchTernary(ipv4MatchFieldId, matchTernaryInt2, matchTernaryMaskInt).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800145
Carmelo Cascone87892e22017-11-13 16:01:29 -0800146 private long matchTernaryLong1 = 0x0a010101;
147 private long matchTernaryLong2 = 0x0a010102;
148 private long matchTernaryMaskLong = 0xffff;
149 private Criterion matchPiTernaryLong1 = PiCriterion.builder()
150 .matchTernary(ipv4MatchFieldId, matchTernaryLong1, matchTernaryMaskLong).build();
151 private Criterion sameAsMatchPiTernaryLong1 = PiCriterion.builder()
152 .matchTernary(ipv4MatchFieldId, matchTernaryLong1, matchTernaryMaskLong).build();
153 private Criterion matchPiTernaryLong2 = PiCriterion.builder()
154 .matchTernary(ipv4MatchFieldId, matchTernaryLong2, matchTernaryMaskLong).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800155
Carmelo Cascone87892e22017-11-13 16:01:29 -0800156 private byte[] matchRangeBytes1 = {0x10};
157 private byte[] matchRangeBytes2 = {0x20};
158 private byte[] matchRangeHighBytes = {0x30};
159 private Criterion matchPiRangeByte1 = PiCriterion.builder()
160 .matchRange(ipv4MatchFieldId, matchRangeBytes1, matchRangeHighBytes).build();
161 private Criterion sameAsMatchPiRangeByte1 = PiCriterion.builder()
162 .matchRange(ipv4MatchFieldId, matchRangeBytes1, matchRangeHighBytes).build();
163 private Criterion matchPiRangeByte2 = PiCriterion.builder()
164 .matchRange(ipv4MatchFieldId, matchRangeBytes2, matchRangeHighBytes).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800165
Carmelo Cascone87892e22017-11-13 16:01:29 -0800166 private short matchRangeShort1 = 0x100;
167 private short matchRangeShort2 = 0x200;
168 private short matchRangeHighShort = 0x300;
169 private Criterion matchPiRangeShort1 = PiCriterion.builder()
170 .matchRange(ipv4MatchFieldId, matchRangeShort1, matchRangeHighShort).build();
171 private Criterion sameAsMatchPiRangeShort1 = PiCriterion.builder()
172 .matchRange(ipv4MatchFieldId, matchRangeShort1, matchRangeHighShort).build();
173 private Criterion matchPiRangeShort2 = PiCriterion.builder()
174 .matchRange(ipv4MatchFieldId, matchRangeShort2, matchRangeHighShort).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800175
Carmelo Cascone87892e22017-11-13 16:01:29 -0800176 private int matchRangeInt1 = 0x100;
177 private int matchRangeInt2 = 0x200;
178 private int matchRangeHighInt = 0x300;
179 private Criterion matchPiRangeInt1 = PiCriterion.builder()
180 .matchRange(ipv4MatchFieldId, matchRangeInt1, matchRangeHighInt).build();
181 private Criterion sameAsMatchPiRangeInt1 = PiCriterion.builder()
182 .matchRange(ipv4MatchFieldId, matchRangeInt1, matchRangeHighInt).build();
183 private Criterion matchPiRangeInt2 = PiCriterion.builder()
184 .matchRange(ipv4MatchFieldId, matchRangeInt2, matchRangeHighInt).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800185
Carmelo Cascone87892e22017-11-13 16:01:29 -0800186 private long matchRangeLong1 = 0x100;
187 private long matchRangeLong2 = 0x200;
188 private long matchRangeHighLong = 0x300;
189 private Criterion matchPiRangeLong1 = PiCriterion.builder()
190 .matchRange(ipv4MatchFieldId, matchRangeLong1, matchRangeHighLong).build();
191 private Criterion sameAsMatchPiRangeLong1 = PiCriterion.builder()
192 .matchRange(ipv4MatchFieldId, matchRangeLong1, matchRangeHighLong).build();
193 private Criterion matchPiRangeLong2 = PiCriterion.builder()
194 .matchRange(ipv4MatchFieldId, matchRangeLong2, matchRangeHighLong).build();
Frank Wange33e4ed2017-06-28 10:01:07 +0800195
196 /**
Carmelo Cascone87892e22017-11-13 16:01:29 -0800197 * Checks that a Criterion object has the proper type, and then converts it to the proper type.
Frank Wange33e4ed2017-06-28 10:01:07 +0800198 *
199 * @param criterion Criterion object to convert
200 * @param type Enumerated type value for the Criterion class
201 * @param clazz Desired Criterion class
202 * @param <T> The type the caller wants returned
203 * @return converted object
204 */
205 @SuppressWarnings("unchecked")
206 private <T> T checkAndConvert(Criterion criterion, Criterion.Type type, Class clazz) {
207 assertThat(criterion, is(notNullValue()));
208 assertThat(criterion.type(), is(equalTo(type)));
209 assertThat(criterion, instanceOf(clazz));
210 return (T) criterion;
211 }
212
213 /**
214 * Test the ExactMatchPi method.
215 */
216 @Test
217 public void testExactMatchPiMethod() {
218
Carmelo Cascone87892e22017-11-13 16:01:29 -0800219 Criterion matchPiBytes = PiCriterion.builder().matchExact(ethMatchFieldId, matchExactBytes1).build();
Frank Wang76057cd2017-07-15 10:22:03 +0800220 PiCriterion piCriterionBytes = checkAndConvert(matchPiBytes, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800221 PiCriterion.class);
222 PiFieldMatch expectedMatchBytes = new PiExactFieldMatch(ethMatchFieldId, copyFrom(matchExactBytes1));
Frank Wang76057cd2017-07-15 10:22:03 +0800223 assertThat(piCriterionBytes.fieldMatches().iterator().next(), is(expectedMatchBytes));
Frank Wange33e4ed2017-06-28 10:01:07 +0800224
Carmelo Cascone87892e22017-11-13 16:01:29 -0800225 Criterion matchPiShort = PiCriterion.builder().matchExact(ethMatchFieldId, matchExactShort1).build();
Frank Wang76057cd2017-07-15 10:22:03 +0800226 PiCriterion piCriterionShort = checkAndConvert(matchPiShort, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800227 PiCriterion.class);
228 PiFieldMatch expectedMatchShort = new PiExactFieldMatch(ethMatchFieldId, copyFrom(matchExactShort1));
Frank Wang76057cd2017-07-15 10:22:03 +0800229 assertThat(piCriterionShort.fieldMatches().iterator().next(), is(expectedMatchShort));
Frank Wange33e4ed2017-06-28 10:01:07 +0800230
Carmelo Cascone87892e22017-11-13 16:01:29 -0800231 Criterion matchPiInt = PiCriterion.builder().matchExact(ethMatchFieldId, matchExactInt1).build();
Frank Wang76057cd2017-07-15 10:22:03 +0800232 PiCriterion piCriterionInt = checkAndConvert(matchPiInt, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800233 PiCriterion.class);
234 PiFieldMatch expectedMatchInt = new PiExactFieldMatch(ethMatchFieldId, copyFrom(matchExactInt1));
Frank Wang76057cd2017-07-15 10:22:03 +0800235 assertThat(piCriterionInt.fieldMatches().iterator().next(), is(expectedMatchInt));
Frank Wange33e4ed2017-06-28 10:01:07 +0800236
Carmelo Cascone87892e22017-11-13 16:01:29 -0800237 Criterion matchPiLong = PiCriterion.builder().matchExact(ethMatchFieldId, matchExactLong1).build();
Frank Wang76057cd2017-07-15 10:22:03 +0800238 PiCriterion piCriterionLong = checkAndConvert(matchPiLong, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800239 PiCriterion.class);
240 PiFieldMatch expectedMatchLong = new PiExactFieldMatch(ethMatchFieldId, copyFrom(matchExactLong1));
Frank Wang76057cd2017-07-15 10:22:03 +0800241 assertThat(piCriterionLong.fieldMatches().iterator().next(), is(expectedMatchLong));
Frank Wange33e4ed2017-06-28 10:01:07 +0800242 }
243
244 /**
245 * Test the LpmMatchPi method.
246 */
247 @Test
248 public void testLpmMatchPiMethod() {
249
Carmelo Cascone87892e22017-11-13 16:01:29 -0800250 Criterion matchPiBytes = PiCriterion.builder().matchLpm(ipv4MatchFieldId, matchLpmBytes1, mask).build();
Frank Wang76057cd2017-07-15 10:22:03 +0800251 PiCriterion piCriterionBytes = checkAndConvert(matchPiBytes, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800252 PiCriterion.class);
253 PiFieldMatch expectedMatchBytes = new PiLpmFieldMatch(ipv4MatchFieldId, copyFrom(matchLpmBytes1), mask);
Frank Wang76057cd2017-07-15 10:22:03 +0800254 assertThat(piCriterionBytes.fieldMatches().iterator().next(), is(expectedMatchBytes));
Frank Wange33e4ed2017-06-28 10:01:07 +0800255
Carmelo Cascone87892e22017-11-13 16:01:29 -0800256 Criterion matchPiShort = PiCriterion.builder().matchLpm(ipv4MatchFieldId, matchLpmShort1, mask).build();
Frank Wang76057cd2017-07-15 10:22:03 +0800257 PiCriterion piCriterionShort = checkAndConvert(matchPiShort, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800258 PiCriterion.class);
259 PiFieldMatch expectedMatchShort = new PiLpmFieldMatch(ipv4MatchFieldId, copyFrom(matchLpmShort1), mask);
Frank Wang76057cd2017-07-15 10:22:03 +0800260 assertThat(piCriterionShort.fieldMatches().iterator().next(), is(expectedMatchShort));
Frank Wange33e4ed2017-06-28 10:01:07 +0800261
Carmelo Cascone87892e22017-11-13 16:01:29 -0800262 Criterion matchPiInt = PiCriterion.builder().matchLpm(ipv4MatchFieldId, matchLpmInt1, mask).build();
Frank Wang76057cd2017-07-15 10:22:03 +0800263 PiCriterion piCriterionInt = checkAndConvert(matchPiInt, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800264 PiCriterion.class);
265 PiFieldMatch expectedMatchInt = new PiLpmFieldMatch(ipv4MatchFieldId, copyFrom(matchLpmInt1), mask);
Frank Wang76057cd2017-07-15 10:22:03 +0800266 assertThat(piCriterionInt.fieldMatches().iterator().next(), is(expectedMatchInt));
Frank Wange33e4ed2017-06-28 10:01:07 +0800267
Carmelo Cascone87892e22017-11-13 16:01:29 -0800268 Criterion matchPiLong = PiCriterion.builder().matchLpm(ipv4MatchFieldId, matchLpmLong1, mask).build();
Frank Wang76057cd2017-07-15 10:22:03 +0800269 PiCriterion piCriterionLong = checkAndConvert(matchPiLong, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800270 PiCriterion.class);
271 PiFieldMatch expectedMatchLong = new PiLpmFieldMatch(ipv4MatchFieldId, copyFrom(matchLpmLong1), mask);
Frank Wang76057cd2017-07-15 10:22:03 +0800272 assertThat(piCriterionLong.fieldMatches().iterator().next(), is(expectedMatchLong));
Frank Wange33e4ed2017-06-28 10:01:07 +0800273 }
274
275 /**
276 * Test the TernaryMatchPi method.
277 */
278 @Test
279 public void testTernaryMatchPiMethod() {
Frank Wange33e4ed2017-06-28 10:01:07 +0800280
Carmelo Cascone87892e22017-11-13 16:01:29 -0800281 Criterion matchPiBytes = PiCriterion.builder().matchTernary(ipv4MatchFieldId, matchTernaryBytes1,
282 matchTernaryMaskBytes)
Frank Wange33e4ed2017-06-28 10:01:07 +0800283 .build();
Frank Wang76057cd2017-07-15 10:22:03 +0800284 PiCriterion piCriterionBytes = checkAndConvert(matchPiBytes, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800285 PiCriterion.class);
286 PiFieldMatch expectedMatchBytes = new PiTernaryFieldMatch(ipv4MatchFieldId, copyFrom(matchTernaryBytes1),
287 copyFrom(matchTernaryMaskBytes));
Frank Wang76057cd2017-07-15 10:22:03 +0800288 assertThat(piCriterionBytes.fieldMatches().iterator().next(), is(expectedMatchBytes));
Frank Wange33e4ed2017-06-28 10:01:07 +0800289
Carmelo Cascone87892e22017-11-13 16:01:29 -0800290 Criterion matchPiShort = PiCriterion.builder().matchTernary(ipv4MatchFieldId, matchTernaryShort1,
291 matchTernaryMaskShort)
Frank Wange33e4ed2017-06-28 10:01:07 +0800292 .build();
Frank Wang76057cd2017-07-15 10:22:03 +0800293 PiCriterion piCriterionShort = checkAndConvert(matchPiShort, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800294 PiCriterion.class);
295 PiFieldMatch expectedMatchShort = new PiTernaryFieldMatch(ipv4MatchFieldId, copyFrom(matchTernaryShort1),
296 copyFrom(matchTernaryMaskShort));
Frank Wang76057cd2017-07-15 10:22:03 +0800297 assertThat(piCriterionShort.fieldMatches().iterator().next(), is(expectedMatchShort));
Frank Wange33e4ed2017-06-28 10:01:07 +0800298
Carmelo Cascone87892e22017-11-13 16:01:29 -0800299 Criterion matchPiInt = PiCriterion.builder().matchTernary(ipv4MatchFieldId, matchTernaryInt1,
300 matchTernaryMaskInt)
Frank Wange33e4ed2017-06-28 10:01:07 +0800301 .build();
Frank Wang76057cd2017-07-15 10:22:03 +0800302 PiCriterion piCriterionInt = checkAndConvert(matchPiInt, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800303 PiCriterion.class);
304 PiFieldMatch expectedMatchInt = new PiTernaryFieldMatch(ipv4MatchFieldId, copyFrom(matchTernaryInt1),
305 copyFrom(matchTernaryMaskInt));
Frank Wang76057cd2017-07-15 10:22:03 +0800306 assertThat(piCriterionInt.fieldMatches().iterator().next(), is(expectedMatchInt));
Frank Wange33e4ed2017-06-28 10:01:07 +0800307
Carmelo Cascone87892e22017-11-13 16:01:29 -0800308 Criterion matchPiLong = PiCriterion.builder().matchTernary(ipv4MatchFieldId, matchTernaryLong1,
309 matchTernaryMaskLong)
Frank Wange33e4ed2017-06-28 10:01:07 +0800310 .build();
Frank Wang76057cd2017-07-15 10:22:03 +0800311 PiCriterion piCriterionLong = checkAndConvert(matchPiLong, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800312 PiCriterion.class);
313 PiFieldMatch expectedMatchLong = new PiTernaryFieldMatch(ipv4MatchFieldId, copyFrom(matchTernaryLong1),
314 copyFrom(matchTernaryMaskLong));
Frank Wang76057cd2017-07-15 10:22:03 +0800315 assertThat(piCriterionLong.fieldMatches().iterator().next(), is(expectedMatchLong));
Frank Wange33e4ed2017-06-28 10:01:07 +0800316 }
317
318 /**
Frank Wange33e4ed2017-06-28 10:01:07 +0800319 * Test the RangeMatchPi method.
320 */
321 @Test
322 public void testRangeMatchPiMethod() {
Frank Wange33e4ed2017-06-28 10:01:07 +0800323
Carmelo Cascone87892e22017-11-13 16:01:29 -0800324 Criterion matchPiBytes = PiCriterion.builder().matchRange(ipv4MatchFieldId, matchRangeBytes1,
325 matchRangeHighBytes)
Frank Wange33e4ed2017-06-28 10:01:07 +0800326 .build();
Frank Wang76057cd2017-07-15 10:22:03 +0800327 PiCriterion piCriterionBytes = checkAndConvert(matchPiBytes, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800328 PiCriterion.class);
329 PiFieldMatch expectedMatchBytes = new PiRangeFieldMatch(ipv4MatchFieldId, copyFrom(matchRangeBytes1),
330 copyFrom(matchRangeHighBytes));
Frank Wang76057cd2017-07-15 10:22:03 +0800331 assertThat(piCriterionBytes.fieldMatches().iterator().next(), is(expectedMatchBytes));
Frank Wange33e4ed2017-06-28 10:01:07 +0800332
Carmelo Cascone87892e22017-11-13 16:01:29 -0800333 Criterion matchPiShort = PiCriterion.builder().matchRange(ipv4MatchFieldId, matchRangeShort1,
334 matchRangeHighShort)
Frank Wange33e4ed2017-06-28 10:01:07 +0800335 .build();
Frank Wang76057cd2017-07-15 10:22:03 +0800336 PiCriterion piCriterionShort = checkAndConvert(matchPiShort, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800337 PiCriterion.class);
338 PiFieldMatch expectedMatchShort = new PiRangeFieldMatch(ipv4MatchFieldId, copyFrom(matchRangeShort1),
339 copyFrom(matchRangeHighShort));
Frank Wang76057cd2017-07-15 10:22:03 +0800340 assertThat(piCriterionShort.fieldMatches().iterator().next(), is(expectedMatchShort));
Frank Wange33e4ed2017-06-28 10:01:07 +0800341
Carmelo Cascone87892e22017-11-13 16:01:29 -0800342 Criterion matchPiInt = PiCriterion.builder().matchRange(ipv4MatchFieldId, matchRangeInt1,
343 matchRangeHighInt)
Frank Wange33e4ed2017-06-28 10:01:07 +0800344 .build();
Frank Wang76057cd2017-07-15 10:22:03 +0800345 PiCriterion piCriterionInt = checkAndConvert(matchPiInt, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800346 PiCriterion.class);
347 PiFieldMatch expectedMatchInt = new PiRangeFieldMatch(ipv4MatchFieldId, copyFrom(matchRangeInt1),
348 copyFrom(matchRangeHighInt));
Frank Wang76057cd2017-07-15 10:22:03 +0800349 assertThat(piCriterionInt.fieldMatches().iterator().next(), is(expectedMatchInt));
Frank Wange33e4ed2017-06-28 10:01:07 +0800350
Carmelo Cascone87892e22017-11-13 16:01:29 -0800351 Criterion matchPiLong = PiCriterion.builder().matchRange(ipv4MatchFieldId, matchRangeLong1,
352 matchRangeHighLong)
Frank Wange33e4ed2017-06-28 10:01:07 +0800353 .build();
Frank Wang76057cd2017-07-15 10:22:03 +0800354 PiCriterion piCriterionLong = checkAndConvert(matchPiLong, Criterion.Type.PROTOCOL_INDEPENDENT,
Carmelo Cascone87892e22017-11-13 16:01:29 -0800355 PiCriterion.class);
356 PiFieldMatch expectedMatchLong = new PiRangeFieldMatch(ipv4MatchFieldId, copyFrom(matchRangeLong1),
357 copyFrom(matchRangeHighLong));
Frank Wang76057cd2017-07-15 10:22:03 +0800358 assertThat(piCriterionLong.fieldMatches().iterator().next(), is(expectedMatchLong));
Frank Wange33e4ed2017-06-28 10:01:07 +0800359 }
360
361 /**
362 * Test the equals() method of the PiCriterion class.
363 */
364 @Test
365 public void testPiExactCriterionEquals() {
366 new EqualsTester()
Carmelo Cascone22619172017-07-13 16:08:17 -0400367 .addEqualityGroup(matchPiExactByte1, sameAsMatchPiExactByte1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800368 .addEqualityGroup(matchPiExactByte2)
369 .testEquals();
370
371 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800372 .addEqualityGroup(matchPiExactShort1, sameAsMatchPiExactShort1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800373 .addEqualityGroup(matchPiExactShort2)
374 .testEquals();
375
376 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800377 .addEqualityGroup(matchPiExactInt1, sameAsMatchPiExactInt1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800378 .addEqualityGroup(matchPiExactInt2)
379 .testEquals();
380
381 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800382 .addEqualityGroup(matchPiExactLong1, sameAsMatchPiExactLong1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800383 .addEqualityGroup(matchPiExactLong2)
384 .testEquals();
385 }
386
387 /**
388 * Test the equals() method of the PiCriterion class.
389 */
390 @Test
391 public void testPiLpmCriterionEquals() {
392 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800393 .addEqualityGroup(matchPiLpmByte1, sameAsMatchPiLpmByte1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800394 .addEqualityGroup(matchPiLpmByte2)
395 .testEquals();
396
397 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800398 .addEqualityGroup(matchPiLpmShort1, sameAsMatchPiLpmShort1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800399 .addEqualityGroup(matchPiLpmShort2)
400 .testEquals();
401
402 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800403 .addEqualityGroup(matchPiLpmInt1, sameAsMatchPiLpmInt1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800404 .addEqualityGroup(matchPiLpmInt2)
405 .testEquals();
406
407 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800408 .addEqualityGroup(matchPiLpmLong1, sameAsMatchPiLpmLong1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800409 .addEqualityGroup(matchPiLpmLong2)
410 .testEquals();
411 }
412
413 /**
414 * Test the equals() method of the PiCriterion class.
415 */
416 @Test
417 public void testPiTernaryCriterionEquals() {
418 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800419 .addEqualityGroup(matchPiTernaryByte1, sameAsMatchPiTernaryByte1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800420 .addEqualityGroup(matchPiTernaryByte2)
421 .testEquals();
422
423 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800424 .addEqualityGroup(matchPiTernaryShort1, sameAsMatchPiTernaryShort1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800425 .addEqualityGroup(matchPiTernaryShort2)
426 .testEquals();
427
428 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800429 .addEqualityGroup(matchPiTernaryInt1, sameAsMatchPiTernaryInt1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800430 .addEqualityGroup(matchPiTernaryInt2)
431 .testEquals();
432
433 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800434 .addEqualityGroup(matchPiTernaryLong1, sameAsMatchPiTernaryLong1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800435 .addEqualityGroup(matchPiTernaryLong2)
436 .testEquals();
437 }
438
439 /**
440 * Test the equals() method of the PiCriterion class.
441 */
442 @Test
Frank Wange33e4ed2017-06-28 10:01:07 +0800443 public void testPiRangeCriterionEquals() {
444 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800445 .addEqualityGroup(matchPiRangeByte1, sameAsMatchPiRangeByte1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800446 .addEqualityGroup(matchPiRangeByte2)
447 .testEquals();
448
449 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800450 .addEqualityGroup(matchPiRangeShort1, sameAsMatchPiRangeShort1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800451 .addEqualityGroup(matchPiRangeShort2)
452 .testEquals();
453
454 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800455 .addEqualityGroup(matchPiRangeInt1, sameAsMatchPiRangeInt1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800456 .addEqualityGroup(matchPiRangeInt2)
457 .testEquals();
458
459 new EqualsTester()
Frank Wang76057cd2017-07-15 10:22:03 +0800460 .addEqualityGroup(matchPiRangeLong1, sameAsMatchPiRangeLong1)
Frank Wange33e4ed2017-06-28 10:01:07 +0800461 .addEqualityGroup(matchPiRangeLong2)
462 .testEquals();
463 }
464}