mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
Merge pull request #15978 from miri64/riotctrl_ctrl/enh/native_reset
riotctrl_ctrl: A reset helper class for `native`
This commit is contained in:
commit
c71a52dc0c
3
.github/workflows/tools-test.yml
vendored
3
.github/workflows/tools-test.yml
vendored
@ -24,10 +24,13 @@ jobs:
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install tox
|
||||
python -m pip install kconfiglib
|
||||
sudo apt-get install gcc-multilib
|
||||
- name: Test backport_pr
|
||||
run: cd dist/tools/backport_pr && tox
|
||||
- name: Test compile_and_test_for_board
|
||||
run: cd dist/tools/compile_and_test_for_board && tox
|
||||
- name: Test riotctrl_ctrl
|
||||
run: cd dist/pythonlibs/riotctrl_ctrl && tox
|
||||
- name: Test riotctrl_shell
|
||||
run: cd dist/pythonlibs/riotctrl_shell && tox
|
||||
- name: Test kconfig script
|
||||
|
0
dist/pythonlibs/riotctrl_ctrl/__init__.py
vendored
Normal file
0
dist/pythonlibs/riotctrl_ctrl/__init__.py
vendored
Normal file
30
dist/pythonlibs/riotctrl_ctrl/native.py
vendored
Normal file
30
dist/pythonlibs/riotctrl_ctrl/native.py
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
# Copyright (C) 2021 Freie Universität Berlin
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU Lesser
|
||||
# General Public License v2.1. See the file LICENSE in the top level
|
||||
# directory for more details.
|
||||
|
||||
import riotctrl.ctrl
|
||||
|
||||
import psutil
|
||||
|
||||
|
||||
class NativeRIOTCtrl(riotctrl.ctrl.RIOTCtrl):
|
||||
"""RIOTCtrl abstraction for a native node
|
||||
|
||||
This works exactly as a normal RIOTCtrl, with the exception that
|
||||
`DEBUG_ADAPTER_ID` is set in the environment to the PID of the `native`
|
||||
process, whenever a terminal is started. This allows for `reset()` to also
|
||||
work for a the `native` instance.
|
||||
"""
|
||||
def _set_debug_adapter_id(self, child):
|
||||
if child.name().endswith('.elf'):
|
||||
self.env['DEBUG_ADAPTER_ID'] = str(child.pid)
|
||||
return True
|
||||
return False
|
||||
|
||||
def start_term(self, *args, **kwargs):
|
||||
super().start_term(*args, **kwargs)
|
||||
for child in psutil.Process(pid=self._term_pid()).children():
|
||||
if self._set_debug_adapter_id(child):
|
||||
break
|
2
dist/pythonlibs/riotctrl_ctrl/requirements.txt
vendored
Normal file
2
dist/pythonlibs/riotctrl_ctrl/requirements.txt
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
psutil
|
||||
riotctrl
|
45
dist/pythonlibs/riotctrl_ctrl/tests/test_native.py
vendored
Normal file
45
dist/pythonlibs/riotctrl_ctrl/tests/test_native.py
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
# Copyright (C) 2021 Freie Universität Berlin
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU Lesser
|
||||
# General Public License v2.1. See the file LICENSE in the top level
|
||||
# directory for more details.
|
||||
|
||||
import os.path
|
||||
|
||||
import riotctrl.ctrl
|
||||
|
||||
import riotctrl_ctrl.native
|
||||
|
||||
|
||||
def test_reset():
|
||||
env = {'DEBUG_ADAPTER_ID': '', 'BOARD': 'native'}
|
||||
ctrl = riotctrl_ctrl.native.NativeRIOTCtrl(
|
||||
application_directory=os.path.normpath(os.path.join(
|
||||
os.path.abspath(__file__),
|
||||
'..', '..', '..', '..', '..',
|
||||
'examples', 'hello-world'
|
||||
)),
|
||||
env=env,
|
||||
)
|
||||
print(ctrl.application_directory)
|
||||
assert not ctrl.env['DEBUG_ADAPTER_ID']
|
||||
ctrl.make_run(['flash'])
|
||||
with ctrl.run_term(reset=False):
|
||||
# DEBUG_ADAPTER_ID is now a PID
|
||||
assert int(ctrl.env['DEBUG_ADAPTER_ID'])
|
||||
ctrl.term.expect_exact('Hello World!')
|
||||
ctrl.reset()
|
||||
ctrl.term.expect_exact('!! REBOOT !!')
|
||||
ctrl.term.expect_exact('Hello World!')
|
||||
|
||||
|
||||
def test_w_factory():
|
||||
env = {'BOARD': 'native'}
|
||||
factory = riotctrl.ctrl.RIOTCtrlBoardFactory(
|
||||
board_cls={'native': riotctrl_ctrl.native.NativeRIOTCtrl}
|
||||
)
|
||||
assert 'native' in factory.board_cls
|
||||
ctrl = factory.get_ctrl(env=env)
|
||||
# pylint: disable=unidiomatic-typecheck
|
||||
# in this case we want to know the exact type
|
||||
assert type(ctrl) is riotctrl_ctrl.native.NativeRIOTCtrl
|
20
dist/pythonlibs/riotctrl_ctrl/tox.ini
vendored
Normal file
20
dist/pythonlibs/riotctrl_ctrl/tox.ini
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
[tox]
|
||||
envlist = test,flake8
|
||||
skipsdist = True
|
||||
|
||||
[testenv]
|
||||
commands =
|
||||
test: {[testenv:test]commands}
|
||||
flake8: {[testenv:flake8]commands}
|
||||
|
||||
[testenv:test]
|
||||
deps =
|
||||
pytest
|
||||
-rrequirements.txt
|
||||
commands =
|
||||
pytest -v --doctest-modules
|
||||
|
||||
[testenv:flake8]
|
||||
deps = flake8
|
||||
commands =
|
||||
flake8 .
|
Loading…
Reference in New Issue
Block a user