diff options
Diffstat (limited to 'tools/testing/selftests/tc-testing/plugin-lib/buildebpfPlugin.py')
-rw-r--r-- | tools/testing/selftests/tc-testing/plugin-lib/buildebpfPlugin.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tools/testing/selftests/tc-testing/plugin-lib/buildebpfPlugin.py b/tools/testing/selftests/tc-testing/plugin-lib/buildebpfPlugin.py new file mode 100644 index 000000000000..9f0ba10c44b4 --- /dev/null +++ b/tools/testing/selftests/tc-testing/plugin-lib/buildebpfPlugin.py | |||
@@ -0,0 +1,66 @@ | |||
1 | ''' | ||
2 | build ebpf program | ||
3 | ''' | ||
4 | |||
5 | import os | ||
6 | import signal | ||
7 | from string import Template | ||
8 | import subprocess | ||
9 | import time | ||
10 | from TdcPlugin import TdcPlugin | ||
11 | from tdc_config import * | ||
12 | |||
13 | class SubPlugin(TdcPlugin): | ||
14 | def __init__(self): | ||
15 | self.sub_class = 'buildebpf/SubPlugin' | ||
16 | self.tap = '' | ||
17 | super().__init__() | ||
18 | |||
19 | def pre_suite(self, testcount, testidlist): | ||
20 | super().pre_suite(testcount, testidlist) | ||
21 | |||
22 | if self.args.buildebpf: | ||
23 | self._ebpf_makeall() | ||
24 | |||
25 | def post_suite(self, index): | ||
26 | super().post_suite(index) | ||
27 | |||
28 | self._ebpf_makeclean() | ||
29 | |||
30 | def add_args(self, parser): | ||
31 | super().add_args(parser) | ||
32 | |||
33 | self.argparser_group = self.argparser.add_argument_group( | ||
34 | 'buildebpf', | ||
35 | 'options for buildebpfPlugin') | ||
36 | self.argparser_group.add_argument( | ||
37 | '-B', '--buildebpf', action='store_true', | ||
38 | help='build eBPF programs') | ||
39 | |||
40 | return self.argparser | ||
41 | |||
42 | def _ebpf_makeall(self): | ||
43 | if self.args.buildebpf: | ||
44 | self._make('all') | ||
45 | |||
46 | def _ebpf_makeclean(self): | ||
47 | if self.args.buildebpf: | ||
48 | self._make('clean') | ||
49 | |||
50 | def _make(self, target): | ||
51 | command = 'make -C {} {}'.format(self.args.NAMES['EBPFDIR'], target) | ||
52 | proc = subprocess.Popen(command, | ||
53 | shell=True, | ||
54 | stdout=subprocess.PIPE, | ||
55 | stderr=subprocess.PIPE, | ||
56 | env=ENVIR) | ||
57 | (rawout, serr) = proc.communicate() | ||
58 | |||
59 | if proc.returncode != 0 and len(serr) > 0: | ||
60 | foutput = serr.decode("utf-8") | ||
61 | else: | ||
62 | foutput = rawout.decode("utf-8") | ||
63 | |||
64 | proc.stdout.close() | ||
65 | proc.stderr.close() | ||
66 | return proc, foutput | ||