diff mbox series

[net-next,5/8] selftests: concurrency: add test to verify concurrent replace

Message ID 20190222140047.13215-6-vladbu@mellanox.com
State Accepted
Delegated to: David Miller
Headers show
Series Add tests for unlocked flower classifier implementation | expand

Commit Message

Vlad Buslov Feb. 22, 2019, 2 p.m. UTC
Implement test that verifies concurrent replacement of rules by executing
10 tc instances that replace flower filters in same handle range.

Extend tdc_multibatch.py script with new optional CLI argument that is used
to generate all batch files with same filter handle range.

Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
---
 .../tc-testing/tc-tests/filters/concurrency.json   | 25 ++++++++++++++++++++++
 .../testing/selftests/tc-testing/tdc_multibatch.py |  9 +++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/tools/testing/selftests/tc-testing/tc-tests/filters/concurrency.json b/tools/testing/selftests/tc-testing/tc-tests/filters/concurrency.json
index 57ed29eb58bf..3c49fca7e76c 100644
--- a/tools/testing/selftests/tc-testing/tc-tests/filters/concurrency.json
+++ b/tools/testing/selftests/tc-testing/tc-tests/filters/concurrency.json
@@ -71,5 +71,30 @@ 
             "$TC qdisc del dev $DEV2 ingress",
             "/bin/rm -rf $BATCH_DIR"
         ]
+    },
+    {
+        "id": "14be",
+        "name": "Concurrently replace same range of 100k flower filters from 10 tc instances",
+        "category": [
+            "filter",
+            "flower",
+            "concurrency"
+        ],
+        "setup": [
+            "/bin/mkdir $BATCH_DIR",
+            "$TC qdisc add dev $DEV2 ingress",
+            "./tdc_multibatch.py $DEV2 $BATCH_DIR 100000 1 add",
+            "$TC -b $BATCH_DIR/add_0",
+            "./tdc_multibatch.py -d $DEV2 $BATCH_DIR 100000 10 replace"
+        ],
+        "cmdUnderTest": "find $BATCH_DIR/replace* -print | xargs -n 1 -P 10 $TC -b",
+        "expExitCode": "0",
+        "verifyCmd": "$TC -s filter show dev $DEV2 ingress",
+        "matchPattern": "filter protocol ip pref 1 flower chain 0 handle",
+        "matchCount": "100000",
+        "teardown": [
+            "$TC qdisc del dev $DEV2 ingress",
+            "/bin/rm -rf $BATCH_DIR"
+        ]
     }
 ]
diff --git a/tools/testing/selftests/tc-testing/tdc_multibatch.py b/tools/testing/selftests/tc-testing/tdc_multibatch.py
index cd980d1785bb..0d8be39b5580 100755
--- a/tools/testing/selftests/tc-testing/tdc_multibatch.py
+++ b/tools/testing/selftests/tc-testing/tdc_multibatch.py
@@ -21,6 +21,11 @@  parser.add_argument(
     "operation",
     choices=['add', 'del', 'replace'],
     help="operation to perform on filters")
+parser.add_argument(
+    "-d",
+    "--duplicate_handles",
+    action="store_true",
+    help="duplicate filter handle range in all files")
 args = parser.parse_args()
 
 device = args.device
@@ -29,10 +34,12 @@  file_prefix = args.operation + "_"
 num_filters = args.num_filters
 num_files = args.num_files
 operation = args.operation
+duplicate_handles = args.duplicate_handles
 handle = 1
 
 for i in range(num_files):
     file = dir + '/' + file_prefix + str(i)
     os.system("./tdc_batch.py -n {} -a {} -e {} -m {} {} {}".format(
         num_filters, handle, operation, i, device, file))
-    handle += num_filters
+    if not duplicate_handles:
+        handle += num_filters