Files
allhaileris afb81b8278
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
init
2026-02-16 15:50:16 +03:00

143 lines
4.9 KiB
Python

# SPDX-License-Identifier: LGPL-2.1-or-later
import tests as xdp
import dbus
import pytest
@pytest.fixture
def app_id():
return "org.example.WrongAppId"
@pytest.fixture
def required_templates():
return {"remotedesktop": {}}
class TestRegistry:
def test_version(self, portals, dbus_con):
documents = dbus_con.get_object(
"org.freedesktop.portal.Desktop",
"/org/freedesktop/portal/desktop",
)
properties_intf = dbus.Interface(
documents,
"org.freedesktop.DBus.Properties",
)
portal_version = properties_intf.Get(
"org.freedesktop.host.portal.Registry",
"version",
)
assert int(portal_version) == 1
def create_dummy_session(self, dbus_con):
remotedesktop_intf = xdp.get_portal_iface(dbus_con, "RemoteDesktop")
request = xdp.Request(dbus_con, remotedesktop_intf)
session_counter_attr_name = "session_counter"
session_counter = getattr(self, session_counter_attr_name, 0)
setattr(self, session_counter_attr_name, session_counter + 1)
options = {
"session_handle_token": f"session_token{session_counter}",
}
response = request.call(
"CreateSession",
options=options,
)
assert response
assert response.response == 0
return xdp.Session.from_response(dbus_con, response)
def test_registerless(self, portals, dbus_con, app_id):
mock_intf = xdp.get_mock_iface(dbus_con)
expected_app_id = app_id
session = self.create_dummy_session(dbus_con)
app_id = mock_intf.GetSessionAppId(session.handle)
assert app_id == expected_app_id
def test_register(self, portals, dbus_con):
registry_intf = xdp.get_portal_iface(dbus_con, "Registry", domain="host")
mock_intf = xdp.get_mock_iface(dbus_con)
expected_app_id = "org.example.CorrectAppId"
registry_intf.Register(expected_app_id, {})
session = self.create_dummy_session(dbus_con)
app_id = mock_intf.GetSessionAppId(session.handle)
assert app_id == expected_app_id
def test_late_register(self, portals, dbus_con, app_id):
registry_intf = xdp.get_portal_iface(dbus_con, "Registry", domain="host")
mock_intf = xdp.get_mock_iface(dbus_con)
expected_app_id = app_id
unexpected_app_id = "org.example.CorrectAppId"
session = self.create_dummy_session(dbus_con)
app_id = mock_intf.GetSessionAppId(session.handle)
assert app_id == expected_app_id
with pytest.raises(dbus.exceptions.DBusException) as exc_info:
registry_intf.Register(unexpected_app_id, {})
exc_info.match(".*Connection already associated with an application ID.*")
new_session = self.create_dummy_session(dbus_con)
new_app_id = mock_intf.GetSessionAppId(new_session.handle)
assert new_app_id == expected_app_id
def test_multiple_connections(self, portals, dbus_con, app_id):
registry_intf = xdp.get_portal_iface(dbus_con, "Registry", domain="host")
mock_intf = xdp.get_mock_iface(dbus_con)
expected_app_id = "org.example.CorrectAppId"
unexpected_app_id = app_id
registry_intf.Register(expected_app_id, {})
session = self.create_dummy_session(dbus_con)
app_id = mock_intf.GetSessionAppId(session.handle)
assert app_id == expected_app_id
dbus_con2 = dbus.bus.BusConnection(dbus.bus.BusConnection.TYPE_SESSION)
dbus_con2.set_exit_on_disconnect(False)
mock_intf2 = xdp.get_mock_iface(dbus_con2)
session2 = self.create_dummy_session(dbus_con2)
app_id2 = mock_intf2.GetSessionAppId(session2.handle)
assert app_id2 == unexpected_app_id
dbus_con2.close()
dbus_con3 = dbus.bus.BusConnection(dbus.bus.BusConnection.TYPE_SESSION)
dbus_con3.set_exit_on_disconnect(False)
mock_intf3 = xdp.get_mock_iface(dbus_con3)
registry_intf3 = xdp.get_portal_iface(dbus_con3, "Registry", domain="host")
registry_intf3.Register(expected_app_id, {})
session3 = self.create_dummy_session(dbus_con3)
app_id3 = mock_intf3.GetSessionAppId(session3.handle)
assert app_id3 == expected_app_id
dbus_con3.close()
def test_no_reregister(self, portals, dbus_con):
registry_intf = xdp.get_portal_iface(dbus_con, "Registry", domain="host")
mock_intf = xdp.get_mock_iface(dbus_con)
expected_app_id = "org.example.CorrectAppId"
registry_intf.Register(expected_app_id, {})
session = self.create_dummy_session(dbus_con)
app_id = mock_intf.GetSessionAppId(session.handle)
assert app_id == expected_app_id
with pytest.raises(dbus.exceptions.DBusException) as exc_info:
registry_intf.Register(expected_app_id, {})
exc_info.match(".*Connection already associated with an application ID.*")