Skip to content

Commit

Permalink
linux: fix get_systemd_version not parsing raw type correctly
Browse files Browse the repository at this point in the history
The newly added test of get_systemd_status failed for old systemd with

	>       assert status['systemd-resolved.service']["type"] == ''
	E       assert '"' == ''
	E         + "

	tests/test_linux.py:36: AssertionError

so refactor parsing of path_and_id to fix that.

Signed-off-by: Adam Trhon <[email protected]>
  • Loading branch information
adam-trhon committed Nov 14, 2021
1 parent 55922ea commit 9fbee9c
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
9 changes: 4 additions & 5 deletions labgridhelper/linux.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 28 additions & 0 deletions tests/test_linux.py
Original file line number Diff line number Diff line change
@@ -1,8 +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"] == '/'

0 comments on commit 9fbee9c

Please sign in to comment.