summaryrefslogtreecommitdiff
path: root/portal
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2021-05-21 15:55:27 +0100
committerAlexander Larsson <alexander.larsson@gmail.com>2021-05-25 11:11:03 +0200
commitafd0cc4d184fe1b58d06587e865dc05fcfa38da7 (patch)
tree3ca31e626860a5a32a1bed7e1b0a5b725a17db43 /portal
parente196efbf6b00c0451c4888aa9f7b8b148f4a22c5 (diff)
downloadflatpak-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>
Diffstat (limited to 'portal')
-rw-r--r--portal/flatpak-portal.c30
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;