test-boot: run in parallel

--quit-after-boot: fix for gem5, update path to gem5.sh

Improve the printing of results and errors:

- remove newlines from IDs at the end for ./test-boot
- remove newlines from progress for __call__ commands and don't print executed commands at all,
  otherwise there are too many lines per test and it is hard to tell what is going on
- print backtraces for any exception in the threads (bugs while developing this code)

Tests across different archs and emulators are still not running in parallel,
which is a huge loss. TODO.

thread_pool: introduce with API. This was motivate by test-boot, I've had enough
of doing separate error handling for each loop type! Greatly dries up the code, awesome.

common: make --all-emulators work properly with native hopefully for the last time,
./test-baremetal was still failing.

gem5: don't pass --command-line for baremetal. Maybe later we can use it to actually
pass command line arguments to main()? To be seen.
This commit is contained in:
Ciro Santilli 六四事件 法轮功
2019-05-21 00:00:00 +00:00
parent 75fd708099
commit 01984c2201
12 changed files with 640 additions and 318 deletions

View File

@@ -68,12 +68,7 @@ class PathProperties:
'skip_run_unclassified': False,
# Aruments added automatically to run when running tests,
# but not on manual running.
'test_run_args': {
'ctrl_c_host': True,
'show_stdout': False,
'show_time': False,
'background': True,
},
'test_run_args': {},
}
'''
@@ -142,6 +137,13 @@ class PathProperties:
)
)
def _update_dict(self, other_tmp_properties, key):
if key in self.properties and key in other_tmp_properties:
other_tmp_properties[key] = {
**self.properties[key],
**other_tmp_properties[key]
}
def _update_list(self, other_tmp_properties, key):
if key in self.properties and key in other_tmp_properties:
other_tmp_properties[key] = \
@@ -153,11 +155,7 @@ class PathProperties:
self._update_list(other_tmp_properties, 'cc_flags')
self._update_list(other_tmp_properties, 'cc_flags_after')
self._update_list(other_tmp_properties, 'extra_objs')
if 'test_run_args' in self.properties and 'test_run_args' in other_tmp_properties:
other_tmp_properties['test_run_args'] = {
**self.properties['test_run_args'],
**other_tmp_properties['test_run_args']
}
self._update_dict(other_tmp_properties, 'test_run_args')
return self.properties.update(other_tmp_properties)
class PrefixTree: