support/testing: add runtime test for easydbus

Test an actual D-Bus round-trip using easydbus:
 - obtain a name on the system bus
 - subscribe to a signal on a chosen object/interface
 - emit signal with a string payload
 - run the easydbus mainloop
 - verify the handler received the expected payload

This covers both the default Lua interpreter (Lua 5.4) and LuaJIT
(Lua 5.1 ABI).

Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
[Julien:
 - move test files into a rootfs-overlay
 - move common BR2_PACKAGE_{,EASY}DBUS configs to EasyDBusBase
 - make stricter check of script output
 - add DEVELOPERS entry for rootfs-overlay files
]
Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
Marcin Niestroj
2026-07-13 20:25:54 +02:00
committed by Julien Olivain
parent d90bbf81f8
commit 4456d899d0
4 changed files with 76 additions and 0 deletions

View File

@@ -2290,6 +2290,8 @@ F: support/testing/tests/package/sample_python_dbus_fast.py
F: support/testing/tests/package/sample_python_dbus_next.py F: support/testing/tests/package/sample_python_dbus_next.py
F: support/testing/tests/package/sample_python_pytest.py F: support/testing/tests/package/sample_python_pytest.py
F: support/testing/tests/package/sample_python_pytest_asyncio.py F: support/testing/tests/package/sample_python_pytest_asyncio.py
F: support/testing/tests/package/test_easydbus.py
F: support/testing/tests/package/test_easydbus/
F: support/testing/tests/package/test_netdata.py F: support/testing/tests/package/test_netdata.py
F: support/testing/tests/package/test_python_dbus_next.py F: support/testing/tests/package/test_python_dbus_next.py
F: support/testing/tests/package/test_python_pytest.py F: support/testing/tests/package/test_python_pytest.py

View File

@@ -0,0 +1,44 @@
import infra.basetest
from tests.package.test_lua import TestLuaBase
class EasyDBusBase(TestLuaBase):
rootfs_overlay = \
infra.filepath("tests/package/test_easydbus/rootfs-overlay")
config = TestLuaBase.config + \
f"""
BR2_PACKAGE_DBUS=y
BR2_PACKAGE_EASYDBUS=y
BR2_ROOTFS_OVERLAY="{rootfs_overlay}"
"""
def signal_round_trip(self):
cmd = "lua /root/easydbus-sample.lua"
output, exit_code = self.emulator.run(cmd)
self.assertEqual(exit_code, 0)
self.assertEqual(output[0], "OK")
class TestLuaEasyDBus(EasyDBusBase):
config = EasyDBusBase.config + \
"""
BR2_PACKAGE_LUA=y
"""
def test_run(self):
self.login()
self.module_test("easydbus")
self.signal_round_trip()
class TestLuajitEasyDBus(EasyDBusBase):
config = EasyDBusBase.config + \
"""
BR2_PACKAGE_LUAJIT=y
"""
def test_run(self):
self.login()
self.module_test("easydbus")
self.signal_round_trip()

View File

@@ -0,0 +1,8 @@
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy user="root">
<allow own="easydbus.SampleTest"/>
<allow send_destination="easydbus.SampleTest"/>
</policy>
</busconfig>

View File

@@ -0,0 +1,22 @@
local dbus = require 'easydbus'
local bus = assert(dbus.system())
local service_name = 'easydbus.SampleTest'
local object_path = '/easydbus/sample'
local interface_name = 'easydbus.SampleTest'
local signal_name = 'Pinged'
local owner_id = assert(bus:own_name(service_name))
local payload
bus:subscribe(nil, object_path, interface_name, signal_name,
function(arg) payload = arg; dbus.mainloop_quit() end)
assert(bus:emit(nil, object_path, interface_name, signal_name,
's', 'hello'))
dbus.mainloop()
bus:unown_name(owner_id)
assert(payload == 'hello',
'unexpected payload: ' .. tostring(payload))
print('OK')