Skip to content

Commit

Permalink
tc-testing: use a plugin to build eBPF program
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Davide Caratti authored and David S. Miller committed Oct 5, 2018
1 parent cf5eafb commit 4c2d39b
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 6 deletions.
2 changes: 2 additions & 0 deletions tools/testing/selftests/tc-testing/README
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,8 @@ directory:
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,
but the overall template is there and it should only need tweaks.)
- buildebpfPlugin.py:
builds all programs in $EBPFDIR.


ACKNOWLEDGEMENTS
Expand Down
66 changes: 66 additions & 0 deletions tools/testing/selftests/tc-testing/plugin-lib/buildebpfPlugin.py
Original file line number Diff line number Diff line change
@@ -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
8 changes: 2 additions & 6 deletions tools/testing/selftests/tc-testing/tc-tests/actions/bpf.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@
"bpf"
],
"setup": [
"make -C bpf",
[
"$TC action flush action bpf",
0,
Expand All @@ -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",
"matchCount": "1",
"teardown": [
"$TC action flush action bpf",
"make -C bpf clean"
"$TC action flush action bpf"
]
},
{
Expand All @@ -81,7 +79,6 @@
"bpf"
],
"setup": [
"make -C bpf",
[
"$TC action flush action bpf",
0,
Expand All @@ -100,8 +97,7 @@
0,
1,
255
],
"make -C bpf clean"
]
]
},
{
Expand Down

0 comments on commit 4c2d39b

Please sign in to comment.