From 6807d7d0b546a994a03504bd16611f18d3278f6b Mon Sep 17 00:00:00 2001
From: Yaroslav Brustinov <ybrustin@cisco.com>
Date: Sun, 7 Aug 2016 14:09:06 +0300
Subject: regression: compare pcaps in functional tests robust to order of
 packets with same timestamp

---
 .../regression/functional_tests/stl_basic_tests.py | 27 ++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

(limited to 'scripts/automation/regression/functional_tests')

diff --git a/scripts/automation/regression/functional_tests/stl_basic_tests.py b/scripts/automation/regression/functional_tests/stl_basic_tests.py
index e5190154..2843d619 100644
--- a/scripts/automation/regression/functional_tests/stl_basic_tests.py
+++ b/scripts/automation/regression/functional_tests/stl_basic_tests.py
@@ -23,6 +23,7 @@ import os
 import subprocess
 import shlex
 from threading import Thread
+from collections import defaultdict
 
 @attr('run_on_trex')
 class CStlBasic_Test(functional_general_test.CGeneralFunctional_Test):
@@ -82,8 +83,26 @@ class CStlBasic_Test(functional_general_test.CGeneralFunctional_Test):
 
 
     def compare_caps (self, output, golden, max_diff_sec = 0.01):
-        pkts1 = list(RawPcapReader(output))
-        pkts2 = list(RawPcapReader(golden))
+        pkts1 = []
+        pkts2 = []
+        pkts_ts_buckets = defaultdict(list)
+
+        for pkt in RawPcapReader(output):
+            ts = pkt[1][0] * 1e6 + pkt[1][1]
+            pkts_ts_buckets[ts].append(pkt)
+        # don't take last ts bucket, it can be cut in middle and packets inside bucket might be different
+        #for ts in sorted(pkts_ts_buckets.keys())[:-1]:
+        for ts in sorted(pkts_ts_buckets.keys()):
+            pkts1.extend(sorted(pkts_ts_buckets[ts]))
+        pkts_ts_buckets.clear()
+
+        for pkt in RawPcapReader(golden):
+            ts = pkt[1][0] * 1e6 + pkt[1][1]
+            pkts_ts_buckets[ts].append(pkt)
+        # don't take last ts bucket, it can be cut in middle and packets inside bucket might be different
+        #for ts in sorted(pkts_ts_buckets.keys())[:-1]:
+        for ts in sorted(pkts_ts_buckets.keys()):
+            pkts2.extend(sorted(pkts_ts_buckets[ts]))
 
         assert_equal(len(pkts1), len(pkts2), 'Lengths of generated pcap (%s) and golden (%s) are different' % (output, golden))
 
@@ -276,8 +295,8 @@ class CStlBasic_Test(functional_general_test.CGeneralFunctional_Test):
             ['hlt/hlt_udp_inc_dec_len_9k.py', '-m 1 -l 20', True, None],
             ['hlt/hlt_imix_default.py', '-m 1 -l 20', True, None],
             ['hlt/hlt_imix_4rates.py', '-m 1 -l 20', True, None],
-            #['hlt/hlt_david1.py', '-m 1 -l 20', True, None],
-            #['hlt/hlt_david2.py', '-m 1 -l 20', True, None],
+            ['hlt/hlt_david1.py', '-m 1 -l 20', True, None],
+            ['hlt/hlt_david2.py', '-m 1 -l 20', True, None],
             ['hlt/hlt_david3.py', '-m 1 -l 20', True, None],
             ['hlt/hlt_david4.py', '-m 1 -l 20', True, None],
             ['hlt/hlt_wentong1.py', '-m 1 -l 20', True, None],
-- 
cgit