From 332b7d49a98712cadda876a0096ed3a8cbe109be Mon Sep 17 00:00:00 2001 From: Pramod Maurya Date: Thu, 30 Nov 2023 21:32:36 +0530 Subject: [PATCH] added subscribe sample mode for queue counters (#2384) --- .../qos/otg_tests/qos_basic_test/README.md | 2 +- .../qos_basic_test/qos_basic_test.go | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/feature/qos/otg_tests/qos_basic_test/README.md b/feature/qos/otg_tests/qos_basic_test/README.md index 387cab725b4..27c82a5bd18 100644 --- a/feature/qos/otg_tests/qos_basic_test/README.md +++ b/feature/qos/otg_tests/qos_basic_test/README.md @@ -94,7 +94,7 @@ Verify that DUT supports QoS config and forward QoS traffic correctly. * Verify that there is no traffic loss -#### DP-1.14.1 [TODO: https://github.com/openconfig/featureprofiles/issues/2321] +#### DP-1.14.1 * Initiate traffic diff --git a/feature/qos/otg_tests/qos_basic_test/qos_basic_test.go b/feature/qos/otg_tests/qos_basic_test/qos_basic_test.go index e26c3558e37..b4ae086cc22 100644 --- a/feature/qos/otg_tests/qos_basic_test/qos_basic_test.go +++ b/feature/qos/otg_tests/qos_basic_test/qos_basic_test.go @@ -23,6 +23,7 @@ import ( "github.com/openconfig/featureprofiles/internal/deviations" "github.com/openconfig/featureprofiles/internal/fptest" "github.com/openconfig/featureprofiles/internal/qoscfg" + gpb "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/ondatra" "github.com/openconfig/ondatra/gnmi" "github.com/openconfig/ondatra/gnmi/oc" @@ -525,7 +526,32 @@ func TestBasicConfigWithTraffic(t *testing.T) { t.Errorf("Get dutDropOctetCounterDiff for queue %q: got %v, want 0", data.queue, dutDropOctetCounterDiff) } } + } + // gnmi subscribe sample mode(10 and 15 seconds sample interval) for queue counters + subscribeTimeout := 30 * time.Second + for _, sampleInterval := range []time.Duration{10 * time.Second, 15 * time.Second} { + minWant := int(subscribeTimeout/sampleInterval) - 1 + for _, data := range trafficFlows { + transmitPkts := gnmi.Collect(t, gnmiOpts(t, dut, sampleInterval), gnmi.OC().Qos().Interface(dp3.Name()).Output().Queue(data.queue).TransmitPkts().State(), subscribeTimeout).Await(t) + if len(transmitPkts) < minWant { + t.Errorf("TransmitPkts: got %d, want >= %d", len(transmitPkts), minWant) + } + transmitOctets := gnmi.Collect(t, gnmiOpts(t, dut, sampleInterval), gnmi.OC().Qos().Interface(dp3.Name()).Output().Queue(data.queue).TransmitOctets().State(), subscribeTimeout).Await(t) + if len(transmitOctets) < minWant { + t.Errorf("TransmitOctets: got %d, want >= %d", len(transmitOctets), minWant) + } + droppedPkts := gnmi.Collect(t, gnmiOpts(t, dut, sampleInterval), gnmi.OC().Qos().Interface(dp3.Name()).Output().Queue(data.queue).DroppedPkts().State(), subscribeTimeout).Await(t) + if len(droppedPkts) < minWant { + t.Errorf("DroppedPkts: got %d, want >= %d", len(droppedPkts), minWant) + } + if !deviations.QOSDroppedOctets(dut) { + droppedOctets := gnmi.Collect(t, gnmiOpts(t, dut, sampleInterval), gnmi.OC().Qos().Interface(dp3.Name()).Output().Queue(data.queue).DroppedOctets().State(), subscribeTimeout).Await(t) + if len(droppedOctets) < minWant { + t.Errorf("DroppedOctets: got %d, want >= %d", len(droppedOctets), minWant) + } + } + } } }) } @@ -1726,3 +1752,10 @@ func ConfigureJuniperQos(t *testing.T, dut *ondatra.DUTDevice) { gnmi.Replace(t, dut, gnmi.OC().Qos().Config(), q) } } + +func gnmiOpts(t *testing.T, dut *ondatra.DUTDevice, interval time.Duration) *gnmi.Opts { + return dut.GNMIOpts().WithYGNMIOpts( + ygnmi.WithSubscriptionMode(gpb.SubscriptionMode_SAMPLE), + ygnmi.WithSampleInterval(interval), + ) +}