Skip to content

Commit c4c6720

Browse files
authored
Merge PR #77: Fix experiment filters and reporting on codespeed submission errors
2 parents 72b535d + 6d610b1 commit c4c6720

File tree

4 files changed

+65
-13
lines changed

4 files changed

+65
-13
lines changed

rebench/model/benchmark_suite.py

+3
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,6 @@ def max_runtime(self):
9898

9999
def has_max_runtime(self):
100100
return self._max_runtime != -1
101+
102+
def __str__(self):
103+
return "Suite(%s, %s)" % (self._name, self._command)

rebench/rebench.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
class ReBench:
4343

4444
def __init__(self):
45-
self.version = "0.10.0"
45+
self.version = "0.10.1"
4646
self.options = None
4747
self._config = None
4848

@@ -151,6 +151,15 @@ def shell_options(self):
151151

152152
return parser
153153

154+
@staticmethod
155+
def determine_exp_name_and_filters(filters):
156+
exp_name = filters[0] if len(filters) > 0 and (
157+
not filters[0].startswith("vm:") and
158+
not filters[0].startswith("s:")) else "all"
159+
exp_filter = [f for f in filters if (f.startswith("vm:") or
160+
f.startswith("s:"))]
161+
return exp_name, exp_filter
162+
154163
def run(self, argv = None):
155164
if argv is None:
156165
argv = sys.argv
@@ -161,13 +170,7 @@ def run(self, argv = None):
161170

162171
cli_reporter = CliReporter(args.verbose)
163172

164-
# interpret remaining args
165-
exp_filter = args.exp_filter
166-
exp_name = exp_filter[1] if len(exp_filter) > 1 and (
167-
not exp_filter[1].startswith("vm:") and
168-
not exp_filter[1].startswith("s:")) else "all"
169-
exp_filter = [f for f in exp_filter if (f.startswith("vm:") or
170-
f.startswith("s:"))]
173+
exp_name, exp_filter = self.determine_exp_name_and_filters(args.exp_filter)
171174

172175
try:
173176
config_filename = args.config[0]

rebench/reporter.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -415,10 +415,10 @@ def _send_to_codespeed(self, results):
415415
"either a wrong URL in the config file, or an "
416416
"environment not configured in Codespeed. URL: "
417417
+ self._cfg.url)
418-
envs = set([i['environment'] for i in payload])
419-
projects = set([i['project'] for i in payload])
420-
benchmarks = set([i['benchmark'] for i in payload])
421-
executables = set([i['executable'] for i in payload])
418+
envs = list(set([i['environment'] for i in results]))
419+
projects = list(set([i['project'] for i in results]))
420+
benchmarks = list(set([i['benchmark'] for i in results]))
421+
executables = list(set([i['executable'] for i in results]))
422422
logging.error("Sent data included environments: %s "
423423
"projects: %s benchmarks: %s executables: %s"
424424
% (envs, projects, benchmarks, executables))

rebench/tests/executor_test.py

+47-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,52 @@ def test_basic_execution_with_magic_all(self):
121121
cnf = Configurator(self._path + '/small.conf', DataStore(), None, None,
122122
'all', standard_data_file = self._tmp_file)
123123
self._basic_execution(cnf)
124-
124+
125+
def test_shell_options_without_filters(self):
126+
option_parser = ReBench().shell_options()
127+
args = option_parser.parse_args(['-d', '-v', 'some.conf'])
128+
self.assertEqual(args.exp_filter, [])
129+
130+
def test_shell_options_with_filters(self):
131+
option_parser = ReBench().shell_options()
132+
args = option_parser.parse_args(['-d', '-v', 'some.conf', 'exp_name'])
133+
self.assertEqual(args.exp_filter, ['exp_name'])
134+
135+
def test_shell_options_with_vm_filter(self):
136+
option_parser = ReBench().shell_options()
137+
args = option_parser.parse_args(['-d', '-v', 'some.conf', 'vm:foo'])
138+
self.assertEqual(args.exp_filter, ['vm:foo'])
139+
140+
def test_determine_exp_name_and_filters_empty(self):
141+
empty = []
142+
exp_name, exp_filter = ReBench.determine_exp_name_and_filters(empty)
143+
self.assertEqual(exp_name, "all")
144+
self.assertEqual(exp_filter, [])
145+
146+
def test_determine_exp_name_and_filters_all(self):
147+
filters = ['all']
148+
exp_name, exp_filter = ReBench.determine_exp_name_and_filters(filters)
149+
self.assertEqual(exp_name, "all")
150+
self.assertEqual(exp_filter, [])
151+
152+
def test_determine_exp_name_and_filters_some_name(self):
153+
filters = ['foo']
154+
exp_name, exp_filter = ReBench.determine_exp_name_and_filters(filters)
155+
self.assertEqual(exp_name, "foo")
156+
self.assertEqual(exp_filter, [])
157+
158+
def test_determine_exp_name_and_filters_all_and_other(self):
159+
filters = ['all', 'vm:bar', 's:b']
160+
exp_name, exp_filter = ReBench.determine_exp_name_and_filters(filters)
161+
self.assertEqual(exp_name, "all")
162+
self.assertEqual(exp_filter, ['vm:bar', 's:b'])
163+
164+
def test_determine_exp_name_and_filters_only_others(self):
165+
filters = ['vm:bar', 's:b']
166+
exp_name, exp_filter = ReBench.determine_exp_name_and_filters(filters)
167+
self.assertEqual(exp_name, "all")
168+
self.assertEqual(exp_filter, ['vm:bar', 's:b'])
169+
125170

126171
def Popen_override(cmdline, stdout, stderr=None, shell=None):
127172
class Popen:
@@ -154,5 +199,6 @@ def __exit__(self, _type, _value, _traceback):
154199
def test_suite():
155200
return unittest.makeSuite(ExecutorTest)
156201

202+
157203
if __name__ == "__main__":
158204
unittest.main(defaultTest='test_suite')

0 commit comments

Comments
 (0)