diff --git a/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/packetin_test.go b/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/packetin_test.go index 31a1fffbae1..422abadc253 100644 --- a/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/packetin_test.go +++ b/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/packetin_test.go @@ -27,6 +27,7 @@ import ( "github.com/google/gopacket" "github.com/google/gopacket/layers" "github.com/open-traffic-generator/snappi/gosnappi" + "github.com/openconfig/featureprofiles/internal/otgutils" "github.com/openconfig/featureprofiles/internal/p4rtutils" "github.com/openconfig/ondatra" "github.com/openconfig/ondatra/gnmi" @@ -102,7 +103,7 @@ func decodePacket6(t *testing.T, packetData []byte) uint8 { // testTraffic sends traffic flow for duration seconds and returns the // number of packets sent out. -func testTraffic(t *testing.T, top gosnappi.Config, ate *ondatra.ATEDevice, flows []gosnappi.Flow, srcEndPoint gosnappi.Port, duration int, cs gosnappi.ControlState) int { +func testTraffic(t *testing.T, top gosnappi.Config, ate *ondatra.ATEDevice, flows []gosnappi.Flow, srcEndPoint gosnappi.Port, targetPkts uint64, cs gosnappi.ControlState) int { t.Helper() initialOutPkts := make(map[string]uint64, len(flows)) top.Flows().Clear() @@ -113,12 +114,27 @@ func testTraffic(t *testing.T, top gosnappi.Config, ate *ondatra.ATEDevice, flow } ate.OTG().PushConfig(t, top) ate.OTG().StartProtocols(t) - time.Sleep(30 * time.Second) + otgutils.WaitForARP(t, ate.OTG(), top, "IPv4") + otgutils.WaitForARP(t, ate.OTG(), top, "IPv6") + + // START THE PACKET CAPTURE AFTER CONFIG IS PUSHED + ate.OTG().SetControlState(t, cs) + for _, flow := range flows { initialOutPkts[flow.Name()] = gnmi.Get(t, ate.OTG(), gnmi.OTG().Flow(flow.Name()).Counters().OutPkts().State()) } ate.OTG().StartTraffic(t) - time.Sleep(time.Duration(duration) * time.Second) + // AWAIT LOGIC INSTEAD OF SLEEP + for _, flow := range flows { + _, ok := gnmi.Watch(t, ate.OTG(), gnmi.OTG().Flow(flow.Name()).Counters().OutPkts().State(), time.Minute, func(val *ygnmi.Value[uint64]) bool { + pkts, present := val.Val() + return present && (pkts >= initialOutPkts[flow.Name()]+targetPkts) + }).Await(t) + + if !ok { + t.Errorf("Traffic flow %s did not reach the target of %d packets within the timeout", flow.Name(), targetPkts) + } + } ate.OTG().StopTraffic(t) cs.Port().Capture().SetState(gosnappi.StatePortCaptureState.STOP) @@ -174,7 +190,7 @@ func testPacketIn(ctx context.Context, t *testing.T, args *testArgs, isIPv4 bool for _, flowValue := range flowValues { flow = append(flow, args.packetIO.GetTrafficFlow(args.ate, dstMac, isIPv4, 1, 300, 50, ipv4InnerDst, flowValue)) } - pktOut := testTraffic(t, args.top, args.ate, flow, srcEndPoint, 60, cs) + pktOut := testTraffic(t, args.top, args.ate, flow, srcEndPoint, 500, cs) var countPkts = map[string]int{"11": 0, "12": 0, "13": 0, "14": 0, "15": 0, "16": 0, "17": 0} packetInTests := []struct { diff --git a/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/traceroute_packetin_test.go b/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/traceroute_packetin_test.go index 5e9de62b889..1cef1b73af5 100644 --- a/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/traceroute_packetin_test.go +++ b/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/traceroute_packetin_test.go @@ -21,7 +21,6 @@ import ( "errors" "fmt" "testing" - "time" "github.com/cisco-open/go-p4/p4rt_client" "github.com/cisco-open/go-p4/utils" @@ -133,10 +132,6 @@ func testPacket(t *testing.T, args *testArgs, cs gosnappi.ControlState, flowValu configureDeviceID(ctx, t, dut) - ate.OTG().PushConfig(t, top) - ate.OTG().StartProtocols(t) - time.Sleep(30 * time.Second) - args = &testArgs{ ctx: ctx, leader: args.leader, diff --git a/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/traceroute_packetin_with_vrf_selection_test.go b/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/traceroute_packetin_with_vrf_selection_test.go index 295dc4558c7..9ea473c55b6 100644 --- a/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/traceroute_packetin_with_vrf_selection_test.go +++ b/feature/p4rt/otg_tests/traceroute_packetin_with_vrf_selection_test/traceroute_packetin_with_vrf_selection_test.go @@ -955,13 +955,8 @@ func startCapture(t *testing.T, args *testArgs, capturePortList []string) gosnap args.otgConfig.Captures().Add().SetName("packetCapture"). SetPortNames(capturePortList). SetFormat(gosnappi.CaptureFormat.PCAP) - args.otg.PushConfig(t, args.otgConfig) - time.Sleep(30 * time.Second) - args.otg.StartProtocols(t) - time.Sleep(30 * time.Second) cs := gosnappi.NewControlState() cs.Port().Capture().SetState(gosnappi.StatePortCaptureState.START) - args.otg.SetControlState(t, cs) return cs }