Skip to content

Commit 32bc748

Browse files
authored
Merge pull request #1221 from Bastian-Krause/bst/barebox-loglevel
driver/bareboxdriver: silence barebox in _await_prompt() and unsilence on boot()
2 parents 7e418f2 + 6f7bf66 commit 32bc748

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

CHANGES.rst

+2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ Breaking changes in 23.1
5656
slightly. ``-vv`` is now an alias for ``--log-cli-level=INFO`` (effectively
5757
unchanged), ``-vvv`` is an alias for ``--log-cli-level=CONSOLE``, and
5858
``-vvvv`` is an alias for ``--log-cli-level=DEBUG``.
59+
- The `BareboxDriver` now remembers the log level, sets it to ``0`` on initial
60+
activation/reset and recovers it on ``boot()``.
5961

6062
Known issues in 23.1
6163
~~~~~~~~~~~~~~~~~~~~

labgrid/driver/bareboxdriver.py

+17
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ def __attrs_post_init__(self):
4242
super().__attrs_post_init__()
4343
self.logger = logging.getLogger(f"{self}:{self.target}")
4444
self._status = 0
45+
# barebox' default log level, used as fallback if no log level can be saved
46+
self.saved_log_level = 7
4547

4648
def on_activate(self):
4749
"""Activate the BareboxDriver
@@ -186,6 +188,18 @@ def _await_prompt(self):
186188

187189
self._check_prompt()
188190

191+
# remember barebox' log level - we don't expect to be interrupted here
192+
# by pollers because no hardware interaction is triggered by echo, so
193+
# it should be safe to use the usual shell wrapper via _run()
194+
stdout, _, exitcode = self._run("echo $global.loglevel")
195+
[saved_log_level] = stdout
196+
if exitcode == 0 and saved_log_level.isnumeric():
197+
self.saved_log_level = saved_log_level
198+
199+
# silence barebox, the driver can get confused by asynchronous messages
200+
# logged to the console otherwise
201+
self._run("global.loglevel=0")
202+
189203
@Driver.check_active
190204
def await_boot(self):
191205
"""Wait for the initial Linux version string to verify we successfully
@@ -199,6 +213,9 @@ def boot(self, name: str):
199213
200214
Args:
201215
name (str): name of the entry to boot"""
216+
# recover saved log level
217+
self._run(f"global.loglevel={self.saved_log_level}")
218+
202219
if name:
203220
self.console.sendline(f"boot -v {name}")
204221
else:

tests/test_bareboxdriver.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ def test_create(self):
1919
def test_barebox_run(self, target_with_fakeconsole, mocker):
2020
t = target_with_fakeconsole
2121
d = BareboxDriver(t, "barebox")
22-
d = t.get_driver(BareboxDriver)
22+
d = t.get_driver(BareboxDriver, activate=False)
23+
# mock for d._run('echo $global.loglevel')
24+
d._run = mocker.MagicMock(return_value=(['7'], [], 0))
25+
t.activate(d)
2326
d._run = mocker.MagicMock(return_value=(['success'], [], 0))
2427
res = d.run_check("test")
2528
assert res == ['success']
@@ -29,7 +32,10 @@ def test_barebox_run(self, target_with_fakeconsole, mocker):
2932
def test_barebox_run_error(self, target_with_fakeconsole, mocker):
3033
t = target_with_fakeconsole
3134
d = BareboxDriver(t, "barebox")
32-
d = t.get_driver(BareboxDriver)
35+
d = t.get_driver(BareboxDriver, activate=False)
36+
# mock for d._run('echo $global.loglevel')
37+
d._run = mocker.MagicMock(return_value=(['7'], [], 0))
38+
t.activate(d)
3339
d._run = mocker.MagicMock(return_value=(['error'], [], 1))
3440
with pytest.raises(ExecutionError):
3541
res = d.run_check("test")

0 commit comments

Comments
 (0)