blob: 2d772124d3652ea95134cb09696d027b3cba5c17 [file] [log] [blame]
pierventre4b72c472020-05-22 09:42:31 -07001/*
2 * Copyright 2020-present Open Networking Foundation
3 *
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.driver.traceable;
18
19import org.junit.Before;
20import org.junit.Test;
21
22import org.onosproject.driver.pipeline.ofdpa.Ofdpa2Pipeline;
23import org.onosproject.driver.pipeline.ofdpa.OvsOfdpaPipeline;
24import org.onosproject.net.DataPlaneEntity;
25import org.onosproject.net.PipelineTraceableHitChain;
26import org.onosproject.net.PipelineTraceableInput;
27import org.onosproject.net.PipelineTraceableOutput;
28import org.onosproject.net.PipelineTraceableOutput.PipelineTraceableResult;
pierventre26eb65d2020-10-08 17:21:49 +020029import org.onosproject.net.PipelineTraceablePacket;
pierventre4b72c472020-05-22 09:42:31 -070030import org.onosproject.net.PortNumber;
31import org.onosproject.net.behaviour.PipelineTraceable;
32import org.onosproject.net.behaviour.Pipeliner;
33import org.onosproject.net.driver.DefaultDriverData;
34import org.onosproject.net.driver.DriverData;
35import org.onosproject.net.driver.DriverHandler;
36
37import java.util.List;
38
39import static org.easymock.EasyMock.createNiceMock;
40import static org.easymock.EasyMock.expect;
41import static org.easymock.EasyMock.replay;
42import static org.hamcrest.Matchers.is;
43import static org.junit.Assert.assertEquals;
44import static org.junit.Assert.assertFalse;
45import static org.junit.Assert.assertNotNull;
46import static org.junit.Assert.assertNull;
47import static org.junit.Assert.assertThat;
48import static org.junit.Assert.assertTrue;
49import static org.onosproject.driver.traceable.TraceableDataPlaneObjects.getDataPlaneEntities;
50import static org.onosproject.driver.traceable.TraceableDataPlaneObjects.getHitChains;
51import static org.onosproject.driver.traceable.TraceableTestObjects.IN_ARP_PACKET;
52import static org.onosproject.driver.traceable.TraceableTestObjects.IN_L2_BRIDG_UNTAG_PACKET;
53import static org.onosproject.driver.traceable.TraceableTestObjects.IN_L2_BROAD_UNTAG_PACKET;
54import static org.onosproject.driver.traceable.TraceableTestObjects.IN_L3_ECMP_PACKET;
55import static org.onosproject.driver.traceable.TraceableTestObjects.IN_L3_UCAST_UNTAG_PACKET;
56import static org.onosproject.driver.traceable.TraceableTestObjects.IN_MPLS_ECMP_PACKET;
57import static org.onosproject.driver.traceable.TraceableTestObjects.IN_MPLS_ECMP_PACKET_OFDPA;
58import static org.onosproject.driver.traceable.TraceableTestObjects.IN_PUNT_IP_PACKET;
59import static org.onosproject.driver.traceable.TraceableTestObjects.IN_PUNT_LLDP_PACKET;
60import static org.onosproject.driver.traceable.TraceableTestObjects.OFDPA_CP;
61import static org.onosproject.driver.traceable.TraceableTestObjects.OFDPA_DEVICE;
62import static org.onosproject.driver.traceable.TraceableTestObjects.OFDPA_DRIVER;
63import static org.onosproject.driver.traceable.TraceableTestObjects.OUT_L2_BROAD_EMPTY;
64import static org.onosproject.driver.traceable.TraceableTestObjects.OUT_L3_ECMP_PACKET;
65import static org.onosproject.driver.traceable.TraceableTestObjects.OUT_L3_ECMP_PACKET_1;
66import static org.onosproject.driver.traceable.TraceableTestObjects.OUT_L3_ECMP_PACKET_OFDPA;
67import static org.onosproject.driver.traceable.TraceableTestObjects.OUT_L3_ECMP_PACKET_OFDPA_1;
68import static org.onosproject.driver.traceable.TraceableTestObjects.OUT_L3_UCAST_UNTAG_PACKET;
69import static org.onosproject.driver.traceable.TraceableTestObjects.OUT_MPLS_ECMP_PACKET;
70import static org.onosproject.driver.traceable.TraceableTestObjects.OUT_PORT;
71import static org.onosproject.driver.traceable.TraceableTestObjects.OVS_OFDPA_DRIVER;
72import static org.onosproject.driver.traceable.TraceableTestObjects.PORT;
73import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.ARP_OFDPA;
74import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.ARP_OVS_OFDPA;
75import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L2_BRIDG_NOT_ORDERED_OFDPA;
76import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L2_BRIDG_NOT_ORDERED_OVS_OFDPA;
77import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L2_BRIDG_UNTAG_OFDPA;
78import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L2_BRIDG_UNTAG_OVS_OFDPA;
79import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L2_BROAD_EMPTY_OFDPA;
80import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L2_BROAD_EMPTY_OVS_OFDPA;
81import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L2_BROAD_UNTAG_OFDPA;
82import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L2_BROAD_UNTAG_OVS_OFDPA;
83import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L3_ECMP_OFDPA;
84import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L3_ECMP_OVS_OFDPA;
85import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L3_UCAST_UNTAG_OFDPA;
86import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.L3_UCAST_UNTAG_OVS_OFDPA;
87import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.MPLS_ECMP_OFDPA;
88import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.MPLS_ECMP_OVS_OFDPA;
89import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.PUNT_IP_OFDPA;
90import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.PUNT_IP_OVS_OFDPA;
91import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.PUNT_LLDP_OFDPA;
92import static org.onosproject.driver.traceable.TraceableTestObjects.TraceableTest.PUNT_LLDP_OVS_OFDPA;
93import static org.onosproject.driver.traceable.TraceableTestObjects.UP_OFDPA_CP;
94import static org.onosproject.driver.traceable.TraceableTestObjects.UP_PORT;
95import static org.onosproject.driver.traceable.TraceableTestObjects.UP_PORT_1;
96
97/**
98 * Tests for Ofdpa pipeline traceable implementation.
99 */
100public class OfdpaPipelineTraceableTest {
101
102 private TraceableTestObjects.TestDriver ofdpaDriver = new TraceableTestObjects.TestDriver(OFDPA_DRIVER);
103 private TraceableTestObjects.TestDriver ovsOfdpaDriver = new TraceableTestObjects.TestDriver(OVS_OFDPA_DRIVER);
104
105 private DriverHandler testDriverHandlerOfdpa;
106 private DriverHandler testDriverHandlerOvsOfdpa;
107
108 @Before
109 public void setUp() {
110 testDriverHandlerOfdpa = createNiceMock(DriverHandler.class);
111 testDriverHandlerOvsOfdpa = createNiceMock(DriverHandler.class);
112 expect(testDriverHandlerOfdpa.hasBehaviour(Pipeliner.class)).andReturn(true).anyTimes();
113 expect(testDriverHandlerOvsOfdpa.hasBehaviour(Pipeliner.class)).andReturn(true).anyTimes();
114 expect(testDriverHandlerOfdpa.behaviour(Pipeliner.class)).andReturn(new Ofdpa2Pipeline()).anyTimes();
115 expect(testDriverHandlerOvsOfdpa.behaviour(Pipeliner.class)).andReturn(new OvsOfdpaPipeline()).anyTimes();
116 replay(testDriverHandlerOfdpa);
117 replay(testDriverHandlerOvsOfdpa);
118 }
119
120 private PipelineTraceable setUpOfdpa() {
121 PipelineTraceable behaviour = new OfdpaPipelineTraceable();
122 DriverData driverData = new DefaultDriverData(ofdpaDriver, OFDPA_DEVICE);
123 behaviour.setData(driverData);
124 behaviour.setHandler(testDriverHandlerOfdpa);
125 behaviour.init();
126 return behaviour;
127 }
128
129 private PipelineTraceable setUpOvsOfdpa() {
130 PipelineTraceable behaviour = new OfdpaPipelineTraceable();
131 DriverData driverData = new DefaultDriverData(ovsOfdpaDriver, OFDPA_DEVICE);
132 behaviour.setData(driverData);
133 behaviour.setHandler(testDriverHandlerOvsOfdpa);
134 behaviour.init();
135 return behaviour;
136 }
137
138 /**
139 * Test punt ip for ovs-ofdpa.
140 */
141 @Test
142 public void testOvsOfdpaPuntIP() {
pierventre26eb65d2020-10-08 17:21:49 +0200143 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
144 IN_PUNT_IP_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, PUNT_IP_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700145 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
146
147 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
148 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200149 assertThat(pipelineOutput.hitChains().size(), is(1));
150 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700151
pierventre26eb65d2020-10-08 17:21:49 +0200152 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700153 assertNotNull(hitChain);
154 List<List<DataPlaneEntity>> chains = getHitChains(PUNT_IP_OVS_OFDPA);
155 assertThat(chains.size(), is(1));
156
pierventre26eb65d2020-10-08 17:21:49 +0200157 assertNotNull(hitChain.outputPort());
158 assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER));
159 assertThat(hitChain.hitChain().size(), is(7));
160 assertEquals(IN_PUNT_IP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700161 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200162 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700163 }
164
165 /**
166 * Test punt ip for ofdpa.
167 */
168 @Test
169 public void testOfdpaPuntIP() {
pierventre26eb65d2020-10-08 17:21:49 +0200170 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
171 IN_PUNT_IP_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, PUNT_IP_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700172 PipelineTraceable pipelineTraceable = setUpOfdpa();
173
174 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
175 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200176 assertThat(pipelineOutput.hitChains().size(), is(1));
177 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700178
pierventre26eb65d2020-10-08 17:21:49 +0200179 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700180 assertNotNull(hitChain);
181 List<List<DataPlaneEntity>> chains = getHitChains(PUNT_IP_OFDPA);
182 assertThat(chains.size(), is(1));
183
pierventre26eb65d2020-10-08 17:21:49 +0200184 assertNotNull(hitChain.outputPort());
185 assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER));
186 assertThat(hitChain.hitChain().size(), is(4));
187 assertEquals(IN_PUNT_IP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700188 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200189 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700190 }
191
192 /**
193 * Test punt arp for ovs-ofdpa.
194 */
195 @Test
196 public void testOvsOfdpaArp() {
pierventre26eb65d2020-10-08 17:21:49 +0200197 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
198 IN_ARP_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, ARP_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700199 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
200
201 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
202 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200203 assertThat(pipelineOutput.hitChains().size(), is(3));
204 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700205
pierventre26eb65d2020-10-08 17:21:49 +0200206 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700207 assertNotNull(hitChain);
208 List<List<DataPlaneEntity>> chains = getHitChains(ARP_OVS_OFDPA);
209 assertThat(chains.size(), is(3));
210
211 // This is the copy sent to the controller
pierventre26eb65d2020-10-08 17:21:49 +0200212 assertNotNull(hitChain.outputPort());
213 assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER));
214 assertThat(hitChain.hitChain().size(), is(7));
215 assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700216 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200217 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700218
219 // This is the copy sent to the member port
pierventre26eb65d2020-10-08 17:21:49 +0200220 hitChain = pipelineOutput.hitChains().get(1);
pierventre4b72c472020-05-22 09:42:31 -0700221 assertNotNull(hitChain);
222
pierventre26eb65d2020-10-08 17:21:49 +0200223 assertNotNull(hitChain.outputPort());
224 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
225 assertThat(hitChain.hitChain().size(), is(8));
226 assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700227 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200228 assertEquals(chains.get(1), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700229
230 // This is the copy sent on the input port
pierventre26eb65d2020-10-08 17:21:49 +0200231 hitChain = pipelineOutput.hitChains().get(2);
pierventre4b72c472020-05-22 09:42:31 -0700232 assertNotNull(hitChain);
233
pierventre26eb65d2020-10-08 17:21:49 +0200234 assertNotNull(hitChain.outputPort());
235 assertThat(hitChain.outputPort().port(), is(PORT));
236 assertThat(hitChain.hitChain().size(), is(8));
237 assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700238 assertTrue(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200239 assertEquals(chains.get(2), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700240 }
241
242 /**
243 * Test punt arp for ovs-ofdpa.
244 */
245 @Test
246 public void testOfdpaArp() {
pierventre26eb65d2020-10-08 17:21:49 +0200247 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
248 IN_ARP_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, ARP_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700249 PipelineTraceable pipelineTraceable = setUpOfdpa();
250
251 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
252 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200253 assertThat(pipelineOutput.hitChains().size(), is(3));
254 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700255
pierventre26eb65d2020-10-08 17:21:49 +0200256 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700257 assertNotNull(hitChain);
258 List<List<DataPlaneEntity>> chains = getHitChains(ARP_OFDPA);
259 assertThat(chains.size(), is(3));
260
261
pierventre26eb65d2020-10-08 17:21:49 +0200262 assertNotNull(hitChain.outputPort());
263 assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER));
264 assertThat(hitChain.hitChain().size(), is(4));
265 assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700266 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200267 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700268
pierventre26eb65d2020-10-08 17:21:49 +0200269 hitChain = pipelineOutput.hitChains().get(1);
pierventre4b72c472020-05-22 09:42:31 -0700270 assertNotNull(hitChain);
271
pierventre26eb65d2020-10-08 17:21:49 +0200272 assertNotNull(hitChain.outputPort());
273 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
274 assertThat(hitChain.hitChain().size(), is(6));
275 assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700276 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200277 assertEquals(chains.get(1), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700278
pierventre26eb65d2020-10-08 17:21:49 +0200279 hitChain = pipelineOutput.hitChains().get(2);
pierventre4b72c472020-05-22 09:42:31 -0700280 assertNotNull(hitChain);
281
pierventre26eb65d2020-10-08 17:21:49 +0200282 assertNotNull(hitChain.outputPort());
283 assertThat(hitChain.outputPort().port(), is(PORT));
284 assertThat(hitChain.hitChain().size(), is(6));
285 assertEquals(IN_ARP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700286 assertTrue(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200287 assertEquals(chains.get(2), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700288 }
289
290 /**
291 * Test punt lldp for ovs-ofdpa.
292 */
293 @Test
294 public void testOvsOfdpaPuntLldp() {
pierventre26eb65d2020-10-08 17:21:49 +0200295 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
296 IN_PUNT_LLDP_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, PUNT_LLDP_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700297 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
298
299 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
300 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200301 assertThat(pipelineOutput.hitChains().size(), is(1));
302 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700303
pierventre26eb65d2020-10-08 17:21:49 +0200304 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700305 assertNotNull(hitChain);
306 List<List<DataPlaneEntity>> chains = getHitChains(PUNT_LLDP_OVS_OFDPA);
307 assertThat(chains.size(), is(1));
308
pierventre26eb65d2020-10-08 17:21:49 +0200309 assertNotNull(hitChain.outputPort());
310 assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER));
311 assertThat(hitChain.hitChain().size(), is(7));
312 assertEquals(IN_PUNT_LLDP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700313 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200314 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700315 }
316
317 /**
318 * Test punt lldp for ovs-ofdpa.
319 */
320 @Test
321 public void testOfdpaPuntLldp() {
pierventre26eb65d2020-10-08 17:21:49 +0200322 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
323 IN_PUNT_LLDP_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, PUNT_LLDP_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700324 PipelineTraceable pipelineTraceable = setUpOfdpa();
325
326 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
327 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200328 assertThat(pipelineOutput.hitChains().size(), is(1));
329 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700330
pierventre26eb65d2020-10-08 17:21:49 +0200331 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700332 assertNotNull(hitChain);
333 List<List<DataPlaneEntity>> chains = getHitChains(PUNT_LLDP_OFDPA);
334 assertThat(chains.size(), is(1));
335
pierventre26eb65d2020-10-08 17:21:49 +0200336 assertNotNull(hitChain.outputPort());
337 assertThat(hitChain.outputPort().port(), is(PortNumber.CONTROLLER));
338 assertThat(hitChain.hitChain().size(), is(4));
339 assertEquals(IN_PUNT_LLDP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700340 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200341 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700342 }
343
344 /**
345 * Test l2 bridging with untagged hosts for ovs-ofdpa.
346 */
347 @Test
348 public void testOvsOfdpaL2BridingUntagged() {
pierventre26eb65d2020-10-08 17:21:49 +0200349 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
350 IN_L2_BRIDG_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BRIDG_UNTAG_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700351 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
352
353 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
354 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200355 assertThat(pipelineOutput.hitChains().size(), is(1));
356 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700357
pierventre26eb65d2020-10-08 17:21:49 +0200358 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700359 assertNotNull(hitChain);
360 List<List<DataPlaneEntity>> chains = getHitChains(L2_BRIDG_UNTAG_OVS_OFDPA);
361 assertThat(chains.size(), is(1));
362
pierventre26eb65d2020-10-08 17:21:49 +0200363 assertNotNull(hitChain.outputPort());
364 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
365 assertThat(hitChain.hitChain().size(), is(6));
366 assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700367 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200368 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700369 }
370
371 /**
372 * Test l2 bridging with untagged hosts for ofdpa.
373 */
374 @Test
375 public void testOfdpaL2BridingUntagged() {
pierventre26eb65d2020-10-08 17:21:49 +0200376 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
377 IN_L2_BRIDG_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L2_BRIDG_UNTAG_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700378 PipelineTraceable pipelineTraceable = setUpOfdpa();
379
380 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
381 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200382 assertThat(pipelineOutput.hitChains().size(), is(1));
383 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700384
pierventre26eb65d2020-10-08 17:21:49 +0200385 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700386 assertNotNull(hitChain);
387 List<List<DataPlaneEntity>> chains = getHitChains(L2_BRIDG_UNTAG_OFDPA);
388 assertThat(chains.size(), is(1));
389
pierventre26eb65d2020-10-08 17:21:49 +0200390 assertNotNull(hitChain.outputPort());
391 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
392 assertThat(hitChain.hitChain().size(), is(4));
393 assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700394 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200395 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700396 }
397
398 /**
399 * Test l2 broadcast with untagged hosts for ovs-ofdpa.
400 */
401 @Test
402 public void testOvsOfdpaL2BroadcastUntagged() {
pierventre26eb65d2020-10-08 17:21:49 +0200403 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
404 IN_L2_BROAD_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BROAD_UNTAG_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700405 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
406
407 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
408 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200409 assertThat(pipelineOutput.hitChains().size(), is(2));
410 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700411
pierventre26eb65d2020-10-08 17:21:49 +0200412 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700413 assertNotNull(hitChain);
414 List<List<DataPlaneEntity>> chains = getHitChains(L2_BROAD_UNTAG_OVS_OFDPA);
415 assertThat(chains.size(), is(2));
416
pierventre26eb65d2020-10-08 17:21:49 +0200417 assertNotNull(hitChain.outputPort());
418 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
419 assertThat(hitChain.hitChain().size(), is(7));
420 assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700421 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200422 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700423
424 // Dropped chain - input port!
pierventre26eb65d2020-10-08 17:21:49 +0200425 hitChain = pipelineOutput.hitChains().get(1);
pierventre4b72c472020-05-22 09:42:31 -0700426 assertNotNull(hitChain);
427
pierventre26eb65d2020-10-08 17:21:49 +0200428 assertNotNull(hitChain.outputPort());
429 assertThat(hitChain.outputPort().port(), is(PORT));
430 assertThat(hitChain.hitChain().size(), is(7));
431 assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700432 assertTrue(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200433 assertEquals(chains.get(1), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700434 }
435
436 /**
437 * Test l2 broadcast with untagged hosts for ofdpa.
438 */
439 @Test
440 public void testOfdpaL2BroadcastUntagged() {
pierventre26eb65d2020-10-08 17:21:49 +0200441 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
442 IN_L2_BROAD_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L2_BROAD_UNTAG_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700443 PipelineTraceable pipelineTraceable = setUpOfdpa();
444
445 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
446 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200447 assertThat(pipelineOutput.hitChains().size(), is(2));
448 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700449
pierventre26eb65d2020-10-08 17:21:49 +0200450 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700451 assertNotNull(hitChain);
452 List<List<DataPlaneEntity>> chains = getHitChains(L2_BROAD_UNTAG_OFDPA);
453 assertThat(chains.size(), is(2));
454
pierventre26eb65d2020-10-08 17:21:49 +0200455 assertNotNull(hitChain.outputPort());
456 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
457 assertThat(hitChain.hitChain().size(), is(5));
458 assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700459 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200460 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700461
462 // Dropped chain - input port!
pierventre26eb65d2020-10-08 17:21:49 +0200463 hitChain = pipelineOutput.hitChains().get(1);
pierventre4b72c472020-05-22 09:42:31 -0700464 assertNotNull(hitChain);
465
pierventre26eb65d2020-10-08 17:21:49 +0200466 assertNotNull(hitChain.outputPort());
467 assertThat(hitChain.outputPort().port(), is(PORT));
468 assertThat(hitChain.hitChain().size(), is(5));
469 assertEquals(IN_L2_BROAD_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700470 assertTrue(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200471 assertEquals(chains.get(1), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700472 }
473
474 /**
475 * Test l3 unicast routing for ovs-ofdpa.
476 */
477 @Test
478 public void testOvsOfdpaL3Unicast() {
pierventre26eb65d2020-10-08 17:21:49 +0200479 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
480 IN_L3_UCAST_UNTAG_PACKET), UP_OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER,
481 L3_UCAST_UNTAG_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700482 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
483
484 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
485 assertNotNull(pipelineOutput);
486
pierventre26eb65d2020-10-08 17:21:49 +0200487 assertThat(pipelineOutput.hitChains().size(), is(1));
488 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700489
pierventre26eb65d2020-10-08 17:21:49 +0200490 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700491 assertNotNull(hitChain);
492 List<List<DataPlaneEntity>> chains = getHitChains(L3_UCAST_UNTAG_OVS_OFDPA);
493 assertThat(chains.size(), is(1));
494
pierventre26eb65d2020-10-08 17:21:49 +0200495 assertNotNull(hitChain.outputPort());
496 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
497 assertThat(hitChain.hitChain().size(), is(7));
498 assertEquals(OUT_L3_UCAST_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700499 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200500 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700501 }
502
503 /**
504 * Test l3 unicast routing for ofdpa.
505 */
506 @Test
507 public void testOfdpaL3Unicast() {
pierventre26eb65d2020-10-08 17:21:49 +0200508 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
509 IN_L3_UCAST_UNTAG_PACKET), UP_OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L3_UCAST_UNTAG_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700510 PipelineTraceable pipelineTraceable = setUpOfdpa();
511
512 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
513 assertNotNull(pipelineOutput);
514
pierventre26eb65d2020-10-08 17:21:49 +0200515 assertThat(pipelineOutput.hitChains().size(), is(1));
516 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700517
pierventre26eb65d2020-10-08 17:21:49 +0200518 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700519 assertNotNull(hitChain);
520 List<List<DataPlaneEntity>> chains = getHitChains(L3_UCAST_UNTAG_OFDPA);
521 assertThat(chains.size(), is(1));
522
pierventre26eb65d2020-10-08 17:21:49 +0200523 assertNotNull(hitChain.outputPort());
524 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
525 assertThat(hitChain.hitChain().size(), is(6));
526 assertEquals(OUT_L3_UCAST_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700527 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200528 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700529 }
530
531 /**
532 * Test l3 ecmp routing for ovs-ofdpa.
533 */
534 @Test
535 public void testOvsOfdpaL3Ecmp() {
pierventre26eb65d2020-10-08 17:21:49 +0200536 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
537 IN_L3_ECMP_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, L3_ECMP_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700538 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
539
540 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
541 assertNotNull(pipelineOutput);
542
pierventre26eb65d2020-10-08 17:21:49 +0200543 assertThat(pipelineOutput.hitChains().size(), is(2));
544 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700545
pierventre26eb65d2020-10-08 17:21:49 +0200546 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700547 assertNotNull(hitChain);
548 List<List<DataPlaneEntity>> chains = getHitChains(L3_ECMP_OVS_OFDPA);
549 assertThat(chains.size(), is(2));
550
pierventre26eb65d2020-10-08 17:21:49 +0200551 assertNotNull(hitChain.outputPort());
552 assertThat(hitChain.outputPort().port(), is(UP_PORT));
553 assertThat(hitChain.hitChain().size(), is(9));
554 assertEquals(OUT_L3_ECMP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700555 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200556 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700557
558 // 2nd spine!
pierventre26eb65d2020-10-08 17:21:49 +0200559 hitChain = pipelineOutput.hitChains().get(1);
pierventre4b72c472020-05-22 09:42:31 -0700560 assertNotNull(hitChain);
561
pierventre26eb65d2020-10-08 17:21:49 +0200562 assertNotNull(hitChain.outputPort());
563 assertThat(hitChain.outputPort().port(), is(UP_PORT_1));
564 assertThat(hitChain.hitChain().size(), is(9));
565 assertEquals(OUT_L3_ECMP_PACKET_1, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700566 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200567 assertEquals(chains.get(1), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700568 }
569
570 /**
571 * Test l3 ecmp routing for ofdpa.
572 */
573 @Test
574 public void testOfdpaL3Ecmp() {
pierventre26eb65d2020-10-08 17:21:49 +0200575 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
576 IN_L3_ECMP_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L3_ECMP_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700577 PipelineTraceable pipelineTraceable = setUpOfdpa();
578
579 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
580 assertNotNull(pipelineOutput);
581
pierventre26eb65d2020-10-08 17:21:49 +0200582 assertThat(pipelineOutput.hitChains().size(), is(2));
583 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700584
pierventre26eb65d2020-10-08 17:21:49 +0200585 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700586 assertNotNull(hitChain);
587 List<List<DataPlaneEntity>> chains = getHitChains(L3_ECMP_OFDPA);
588 assertThat(chains.size(), is(2));
589
pierventre26eb65d2020-10-08 17:21:49 +0200590 assertNotNull(hitChain.outputPort());
591 assertThat(hitChain.outputPort().port(), is(UP_PORT));
592 assertThat(hitChain.hitChain().size(), is(8));
593 assertEquals(OUT_L3_ECMP_PACKET_OFDPA, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700594 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200595 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700596
pierventre26eb65d2020-10-08 17:21:49 +0200597 hitChain = pipelineOutput.hitChains().get(1);
pierventre4b72c472020-05-22 09:42:31 -0700598 assertNotNull(hitChain);
599
pierventre26eb65d2020-10-08 17:21:49 +0200600 assertNotNull(hitChain.outputPort());
601 assertThat(hitChain.outputPort().port(), is(UP_PORT_1));
602 assertThat(hitChain.hitChain().size(), is(8));
603 assertEquals(OUT_L3_ECMP_PACKET_OFDPA_1, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700604 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200605 assertEquals(chains.get(1), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700606 }
607
608 /**
609 * Test mpls ecmp routing for ovs-ofdpa.
610 */
611 @Test
612 public void testOvsOfdpaMplsEcmp() {
pierventre26eb65d2020-10-08 17:21:49 +0200613 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
614 IN_MPLS_ECMP_PACKET), UP_OFDPA_CP,
pierventre4b72c472020-05-22 09:42:31 -0700615 getDataPlaneEntities(OVS_OFDPA_DRIVER, MPLS_ECMP_OVS_OFDPA));
616 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
617
618 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
619 assertNotNull(pipelineOutput);
620
pierventre26eb65d2020-10-08 17:21:49 +0200621 assertThat(pipelineOutput.hitChains().size(), is(1));
622 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700623
pierventre26eb65d2020-10-08 17:21:49 +0200624 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700625 assertNotNull(hitChain);
626 List<List<DataPlaneEntity>> chains = getHitChains(MPLS_ECMP_OVS_OFDPA);
627 assertThat(chains.size(), is(1));
628
pierventre26eb65d2020-10-08 17:21:49 +0200629 assertNotNull(hitChain.outputPort());
630 assertThat(hitChain.outputPort().port(), is(UP_PORT_1));
631 assertThat(hitChain.hitChain().size(), is(9));
632 assertEquals(OUT_MPLS_ECMP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700633 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200634 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700635 }
636
637 /**
638 * Test mpls ecmp routing for ofdpa.
639 */
640 @Test
641 public void testOfdpaMplsEcmp() {
pierventre26eb65d2020-10-08 17:21:49 +0200642 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
643 IN_MPLS_ECMP_PACKET_OFDPA), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, MPLS_ECMP_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700644 PipelineTraceable pipelineTraceable = setUpOfdpa();
645
646 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
647 assertNotNull(pipelineOutput);
648
pierventre26eb65d2020-10-08 17:21:49 +0200649 assertThat(pipelineOutput.hitChains().size(), is(1));
650 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700651
pierventre26eb65d2020-10-08 17:21:49 +0200652 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700653 assertNotNull(hitChain);
654 List<List<DataPlaneEntity>> chains = getHitChains(MPLS_ECMP_OFDPA);
655 assertThat(chains.size(), is(1));
656
pierventre26eb65d2020-10-08 17:21:49 +0200657 assertNotNull(hitChain.outputPort());
658 assertThat(hitChain.outputPort().port(), is(UP_PORT_1));
659 assertThat(hitChain.hitChain().size(), is(7));
pierventre4b72c472020-05-22 09:42:31 -0700660 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200661 assertEquals(chains.get(0), hitChain.hitChain());
662 assertEquals(OUT_MPLS_ECMP_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700663 }
664
665 /**
666 * Test failure due l2 flood group with no buckets for ovs-ofdpa.
667 */
668 @Test
669 public void testOvsOfdpaL2BroadEmpty() {
pierventre26eb65d2020-10-08 17:21:49 +0200670 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
671 IN_L2_BROAD_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER, L2_BROAD_EMPTY_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700672 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
673
674 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
675 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200676 assertThat(pipelineOutput.hitChains().size(), is(1));
677 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.NO_GROUP_MEMBERS));
pierventre4b72c472020-05-22 09:42:31 -0700678
pierventre26eb65d2020-10-08 17:21:49 +0200679 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700680 assertNotNull(hitChain);
681 List<List<DataPlaneEntity>> chains = getHitChains(L2_BROAD_EMPTY_OVS_OFDPA);
682 assertThat(chains.size(), is(1));
683
pierventre26eb65d2020-10-08 17:21:49 +0200684 assertNull(hitChain.outputPort());
685 assertThat(hitChain.hitChain().size(), is(6));
686 assertEquals(OUT_L2_BROAD_EMPTY, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700687 assertTrue(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200688 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700689 }
690
691 /**
692 * Test failure due l2 flood group with no buckets for ofdpa.
693 */
694 @Test
695 public void testOfdpaL2BroadEmpty() {
pierventre26eb65d2020-10-08 17:21:49 +0200696 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
697 IN_L2_BROAD_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L2_BROAD_EMPTY_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700698 PipelineTraceable pipelineTraceable = setUpOfdpa();
699
700 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
701 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200702 assertThat(pipelineOutput.hitChains().size(), is(1));
703 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.NO_GROUP_MEMBERS));
pierventre4b72c472020-05-22 09:42:31 -0700704
pierventre26eb65d2020-10-08 17:21:49 +0200705 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700706 assertNotNull(hitChain);
707 List<List<DataPlaneEntity>> chains = getHitChains(L2_BROAD_EMPTY_OFDPA);
708 assertThat(chains.size(), is(1));
709
pierventre26eb65d2020-10-08 17:21:49 +0200710 assertNull(hitChain.outputPort());
711 assertThat(hitChain.hitChain().size(), is(4));
712 assertEquals(OUT_L2_BROAD_EMPTY, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700713 assertTrue(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200714 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700715 }
716
717 /**
718 * Test l2 bridging with l2 interface group that has actions not in order for ovs-ofdpa.
719 */
720 @Test
721 public void testOvsOfdpaL2BridingNotOrdered() {
pierventre26eb65d2020-10-08 17:21:49 +0200722 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
723 IN_L2_BRIDG_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OVS_OFDPA_DRIVER,
724 L2_BRIDG_NOT_ORDERED_OVS_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700725 PipelineTraceable pipelineTraceable = setUpOvsOfdpa();
726
727 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
728 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200729 assertThat(pipelineOutput.hitChains().size(), is(1));
730 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700731
pierventre26eb65d2020-10-08 17:21:49 +0200732 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700733 assertNotNull(hitChain);
734 List<List<DataPlaneEntity>> chains = getHitChains(L2_BRIDG_NOT_ORDERED_OVS_OFDPA);
735 assertThat(chains.size(), is(1));
736
pierventre26eb65d2020-10-08 17:21:49 +0200737 assertNotNull(hitChain.outputPort());
738 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
739 assertThat(hitChain.hitChain().size(), is(6));
740 assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700741 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200742 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700743 }
744
745 /**
746 * Test l2 bridging with l2 interface group that has actions not in order for ofdpa.
747 */
748 @Test
749 public void testOfdpaL2BridingNotOrdered() {
pierventre26eb65d2020-10-08 17:21:49 +0200750 PipelineTraceableInput pipelineInput = new PipelineTraceableInput(new PipelineTraceablePacket(
751 IN_L2_BRIDG_UNTAG_PACKET), OFDPA_CP, getDataPlaneEntities(OFDPA_DRIVER, L2_BRIDG_NOT_ORDERED_OFDPA));
pierventre4b72c472020-05-22 09:42:31 -0700752 PipelineTraceable pipelineTraceable = setUpOfdpa();
753
754 PipelineTraceableOutput pipelineOutput = pipelineTraceable.apply(pipelineInput);
755 assertNotNull(pipelineOutput);
pierventre26eb65d2020-10-08 17:21:49 +0200756 assertThat(pipelineOutput.hitChains().size(), is(1));
757 assertThat(pipelineOutput.result(), is(PipelineTraceableResult.SUCCESS));
pierventre4b72c472020-05-22 09:42:31 -0700758
pierventre26eb65d2020-10-08 17:21:49 +0200759 PipelineTraceableHitChain hitChain = pipelineOutput.hitChains().get(0);
pierventre4b72c472020-05-22 09:42:31 -0700760 assertNotNull(hitChain);
761 List<List<DataPlaneEntity>> chains = getHitChains(L2_BRIDG_NOT_ORDERED_OFDPA);
762 assertThat(chains.size(), is(1));
763
pierventre26eb65d2020-10-08 17:21:49 +0200764 assertNotNull(hitChain.outputPort());
765 assertThat(hitChain.outputPort().port(), is(OUT_PORT));
766 assertThat(hitChain.hitChain().size(), is(4));
767 assertEquals(IN_L2_BRIDG_UNTAG_PACKET, hitChain.egressPacket().packet());
pierventre4b72c472020-05-22 09:42:31 -0700768 assertFalse(hitChain.isDropped());
pierventre26eb65d2020-10-08 17:21:49 +0200769 assertEquals(chains.get(0), hitChain.hitChain());
pierventre4b72c472020-05-22 09:42:31 -0700770 }
771
772}