diff options
author | Simon McVittie <smcv@collabora.com> | 2021-05-21 15:55:27 +0100 |
---|---|---|
committer | Alexander Larsson <alexander.larsson@gmail.com> | 2021-05-25 11:11:03 +0200 |
commit | afd0cc4d184fe1b58d06587e865dc05fcfa38da7 (patch) | |
tree | 3ca31e626860a5a32a1bed7e1b0a5b725a17db43 | |
parent | e196efbf6b00c0451c4888aa9f7b8b148f4a22c5 (diff) | |
download | flatpak-afd0cc4d184fe1b58d06587e865dc05fcfa38da7.tar.gz |
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>
-rw-r--r-- | portal/flatpak-portal.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/portal/flatpak-portal.c b/portal/flatpak-portal.c index f34835a5..e5701895 100644 --- a/portal/flatpak-portal.c +++ b/portal/flatpak-portal.c @@ -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; |