mirror of
https://github.com/flatpak/flatpak.git
synced 2026-05-24 16:57:42 -04:00
portal: Add some design-for-test
During unit testing we don't have a complete Flatpak app or runtime available, and `flatpak run` is not necessarily in FLATPAK_BINDIR yet; but we can run the portal with this environment variable set, to specify a mock implementation of Flatpak. This helps to reproduce #4286. Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
committed by
Alexander Larsson
parent
e196efbf6b
commit
afd0cc4d18
@@ -794,6 +794,8 @@ handle_spawn (PortalFlatpak *object,
|
||||
gboolean empty_app;
|
||||
g_autoptr(GString) env_string = g_string_new ("");
|
||||
glnx_autofd int env_fd = -1;
|
||||
const char *flatpak;
|
||||
gboolean testing = FALSE;
|
||||
|
||||
child_setup_data.instance_id_fd = -1;
|
||||
child_setup_data.env_fd = -1;
|
||||
@@ -810,6 +812,16 @@ handle_spawn (PortalFlatpak *object,
|
||||
g_assert (app_id != NULL);
|
||||
|
||||
g_debug ("spawn() called from app: '%s'", app_id);
|
||||
|
||||
if (*app_id == 0 && g_getenv ("FLATPAK_PORTAL_MOCK_FLATPAK") != NULL)
|
||||
{
|
||||
/* Pretend we had been called from an app for test purposes */
|
||||
testing = TRUE;
|
||||
g_debug ("In unit tests, behaving as though app ID was com.example.App");
|
||||
g_clear_pointer (&app_id, g_free);
|
||||
app_id = g_strdup ("com.example.App");
|
||||
}
|
||||
|
||||
if (*app_id == 0)
|
||||
{
|
||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
||||
@@ -836,9 +848,13 @@ handle_spawn (PortalFlatpak *object,
|
||||
return G_DBUS_METHOD_INVOCATION_HANDLED;
|
||||
}
|
||||
|
||||
runtime_ref = g_key_file_get_string (app_info,
|
||||
FLATPAK_METADATA_GROUP_APPLICATION,
|
||||
FLATPAK_METADATA_KEY_RUNTIME, NULL);
|
||||
if (testing)
|
||||
runtime_ref = g_strdup ("runtime/com.example.Runtime/m68k/1.0");
|
||||
else
|
||||
runtime_ref = g_key_file_get_string (app_info,
|
||||
FLATPAK_METADATA_GROUP_APPLICATION,
|
||||
FLATPAK_METADATA_KEY_RUNTIME, NULL);
|
||||
|
||||
if (runtime_ref == NULL)
|
||||
{
|
||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS,
|
||||
@@ -985,7 +1001,13 @@ handle_spawn (PortalFlatpak *object,
|
||||
else
|
||||
env = g_get_environ ();
|
||||
|
||||
g_ptr_array_add (flatpak_argv, g_strdup (FLATPAK_BINDIR "/flatpak"));
|
||||
if ((flatpak = g_getenv ("FLATPAK_PORTAL_MOCK_FLATPAK")) != NULL)
|
||||
g_ptr_array_add (flatpak_argv, g_strdup (flatpak));
|
||||
else if ((flatpak = g_getenv ("FLATPAK")) != NULL)
|
||||
g_ptr_array_add (flatpak_argv, g_strdup (flatpak));
|
||||
else
|
||||
g_ptr_array_add (flatpak_argv, g_strdup (FLATPAK_BINDIR "/flatpak"));
|
||||
|
||||
g_ptr_array_add (flatpak_argv, g_strdup ("run"));
|
||||
|
||||
sandboxed = (arg_flags & FLATPAK_SPAWN_FLAGS_SANDBOX) != 0;
|
||||
|
||||
Reference in New Issue
Block a user