Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/tools-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't seem to be needed for testing the new classes (pure Python).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test is compiling examples/hello-world to test if the feature really work. Sure I can mock that up, but that can get stale quickly and wouldn't test if everything is working right.

- 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
Expand Down
Empty file.
30 changes: 30 additions & 0 deletions dist/pythonlibs/riotctrl_ctrl/native.py
Original file line number Diff line number Diff line change
@@ -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 changes: 2 additions & 0 deletions dist/pythonlibs/riotctrl_ctrl/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
psutil
riotctrl
45 changes: 45 additions & 0 deletions dist/pythonlibs/riotctrl_ctrl/tests/test_native.py
Original file line number Diff line number Diff line change
@@ -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 changes: 20 additions & 0 deletions dist/pythonlibs/riotctrl_ctrl/tox.ini
Original file line number Diff line number Diff line change
@@ -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 .