diff --git a/.gitignore b/.gitignore index e4edf8f..54ea191 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /build *.egg-info __pycache__ +.tox +*.eggs/README.txt +/.coverage diff --git a/dev-requirements.txt b/dev-requirements.txt new file mode 100644 index 0000000..7dfb6e0 --- /dev/null +++ b/dev-requirements.txt @@ -0,0 +1,2 @@ +pytest-cov==3.0.0 +labgrid diff --git a/labgridhelper/linux.py b/labgridhelper/linux.py index 5c6a20e..8736dd9 100644 --- a/labgridhelper/linux.py +++ b/labgridhelper/linux.py @@ -85,11 +85,10 @@ def get_systemd_status_raw(command): services[name]["active"] = next(data) services[name]["sub"] = next(data) services[name]["follow"] = next(data) - path_and_id = next(data) - pos = path_and_id.index('"') - services[name]["path"] = path_and_id[:pos] - services[name]["id"] = int(path_and_id[pos+1:-1].strip(" ")) - services[name]["type"] = path_and_id[path_and_id.rfind('"'):] + path_and_id = next(data).split('\"') + services[name]["path"] = path_and_id[0] + services[name]["id"] = int(path_and_id[1].strip(" ")) + services[name]["type"] = path_and_id[2] services[name]["objpath"] = next(data) return services diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..25bf78f --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,12 @@ +import pytest + +from labgrid.driver.fake import FakeCommandDriver +from labgrid import Target + + +@pytest.fixture +def command(): + t = Target("dummy") + d = FakeCommandDriver(t, "command") + t.activate(d) + return d diff --git a/tests/test_linux.py b/tests/test_linux.py new file mode 100644 index 0000000..de7d48d --- /dev/null +++ b/tests/test_linux.py @@ -0,0 +1,36 @@ +from labgridhelper import linux +import pytest + +def test_get_systemd_version(command, monkeypatch): + systemd_version = 'systemd 249 (249.5-2-arch)\n+PAM +AUDIT -SELINUX\n' + + monkeypatch.setattr(command, 'run_check', lambda cmd: [systemd_version]) + + assert linux.get_systemd_version(command) == 249 + +@pytest.mark.parametrize("systemd_version", [230, 240]) +def test_get_systemd_status(command, monkeypatch, systemd_version): + monkeypatch.setattr(linux, 'get_systemd_version', lambda cmd: systemd_version) + + status = { + 230: 'a(ssssssouso) 1 "systemd-resolved.service" "Network Name Resolution" "loaded" "active"' + \ + ' "running" "" "/org/freedesktop/systemd1/unit/systemd_2dresolved_2eservice" 0 "" "/"', + 240: '{"type":"a(ssssssouso)","data":[[["systemd-resolved.service",' + \ + '"Network Name Resolution","loaded","active","running","",' + \ + '"/org/freedesktop/systemd1/unit/systemd_2dresolved_2eservice",0,"","/"]]]}', + } + + monkeypatch.setattr(command, 'run_check', lambda cmd: [status[systemd_version]]) + + status = linux.get_systemd_status(command) + + assert len(status.keys()) == 1 + assert status['systemd-resolved.service']["description"] == 'Network Name Resolution' + assert status['systemd-resolved.service']["load"] == 'loaded' + assert status['systemd-resolved.service']["active"] == 'active' + assert status['systemd-resolved.service']["sub"] == 'running' + assert status['systemd-resolved.service']["follow"] == '' + assert status['systemd-resolved.service']["path"] == '/org/freedesktop/systemd1/unit/systemd_2dresolved_2eservice' + assert status['systemd-resolved.service']["id"] == 0 + assert status['systemd-resolved.service']["type"] == '' + assert status['systemd-resolved.service']["objpath"] == '/' diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..dd418ad --- /dev/null +++ b/tox.ini @@ -0,0 +1,9 @@ +[tox] +envlist = py35, py36, py37 + +[testenv] +deps = -rdev-requirements.txt +commands = + pytest tests {posargs} \ + --cov={envsitepackagesdir}/labgridhelper \ + --cov-report=html:htmlcov