Эх сурвалжийг харах

tc-testing: use a plugin to build eBPF program

use a TDC plugin, instead of building eBPF programs in the 'setup' stage.
'-B' argument can be used to build eBPF programs in $EBPFDIR directory,
in the 'pre-suite' stage. Binaries are then cleaned in 'post-suite' stage.

Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Davide Caratti 6 жил өмнө
parent
commit
4c2d39bd40

+ 2 - 0
tools/testing/selftests/tc-testing/README

@@ -232,6 +232,8 @@ directory:
       and the other is a test whether the command leaked memory or not.
       and the other is a test whether the command leaked memory or not.
       (This one is a preliminary version, it may not work quite right yet,
       (This one is a preliminary version, it may not work quite right yet,
       but the overall template is there and it should only need tweaks.)
       but the overall template is there and it should only need tweaks.)
+  - buildebpfPlugin.py:
+      builds all programs in $EBPFDIR.
 
 
 
 
 ACKNOWLEDGEMENTS
 ACKNOWLEDGEMENTS

+ 66 - 0
tools/testing/selftests/tc-testing/plugin-lib/buildebpfPlugin.py

@@ -0,0 +1,66 @@
+'''
+build ebpf program
+'''
+
+import os
+import signal
+from string import Template
+import subprocess
+import time
+from TdcPlugin import TdcPlugin
+from tdc_config import *
+
+class SubPlugin(TdcPlugin):
+    def __init__(self):
+        self.sub_class = 'buildebpf/SubPlugin'
+        self.tap = ''
+        super().__init__()
+
+    def pre_suite(self, testcount, testidlist):
+        super().pre_suite(testcount, testidlist)
+
+        if self.args.buildebpf:
+            self._ebpf_makeall()
+
+    def post_suite(self, index):
+        super().post_suite(index)
+
+        self._ebpf_makeclean()
+
+    def add_args(self, parser):
+        super().add_args(parser)
+
+        self.argparser_group = self.argparser.add_argument_group(
+            'buildebpf',
+            'options for buildebpfPlugin')
+        self.argparser_group.add_argument(
+            '-B', '--buildebpf', action='store_true',
+            help='build eBPF programs')
+
+        return self.argparser
+
+    def _ebpf_makeall(self):
+        if self.args.buildebpf:
+            self._make('all')
+
+    def _ebpf_makeclean(self):
+        if self.args.buildebpf:
+            self._make('clean')
+
+    def _make(self, target):
+        command = 'make -C {} {}'.format(self.args.NAMES['EBPFDIR'], target)
+        proc = subprocess.Popen(command,
+            shell=True,
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE,
+            env=ENVIR)
+        (rawout, serr) = proc.communicate()
+
+        if proc.returncode != 0 and len(serr) > 0:
+            foutput = serr.decode("utf-8")
+        else:
+            foutput = rawout.decode("utf-8")
+
+        proc.stdout.close()
+        proc.stderr.close()
+        return proc, foutput

+ 2 - 6
tools/testing/selftests/tc-testing/tc-tests/actions/bpf.json

@@ -55,7 +55,6 @@
             "bpf"
             "bpf"
         ],
         ],
         "setup": [
         "setup": [
-            "make -C bpf",
             [
             [
                 "$TC action flush action bpf",
                 "$TC action flush action bpf",
                 0,
                 0,
@@ -69,8 +68,7 @@
         "matchPattern": "action order [0-9]*: bpf action.o:\\[action-ok\\] id [0-9]* tag [0-9a-f]{16}( jited)? default-action pipe.*index 667 ref",
         "matchPattern": "action order [0-9]*: bpf action.o:\\[action-ok\\] id [0-9]* tag [0-9a-f]{16}( jited)? default-action pipe.*index 667 ref",
         "matchCount": "1",
         "matchCount": "1",
         "teardown": [
         "teardown": [
-            "$TC action flush action bpf",
-            "make -C bpf clean"
+            "$TC action flush action bpf"
         ]
         ]
     },
     },
     {
     {
@@ -81,7 +79,6 @@
             "bpf"
             "bpf"
         ],
         ],
         "setup": [
         "setup": [
-            "make -C bpf",
             [
             [
                 "$TC action flush action bpf",
                 "$TC action flush action bpf",
                 0,
                 0,
@@ -100,8 +97,7 @@
                 0,
                 0,
                 1,
                 1,
                 255
                 255
-            ],
-            "make -C bpf clean"
+            ]
         ]
         ]
     },
     },
     {
     {