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
143 lines
4.9 KiB
Python
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.*")
|