From 661cd75b413a3eb3e611a274dbd4c5e1817b1ed7 Mon Sep 17 00:00:00 2001 From: Mario Limonciello Date: Thu, 31 Mar 2016 13:23:19 -0500 Subject: [PATCH] Allow overriding the location of the provider offline files for test suite --- src/fu-provider.c | 38 +++++++++++++++++++++++++++++++++----- src/fu-provider.h | 3 +++ src/fu-self-test.c | 1 + 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/fu-provider.c b/src/fu-provider.c index 96fdd58cd..0ef8755e0 100644 --- a/src/fu-provider.c +++ b/src/fu-provider.c @@ -36,6 +36,13 @@ static void fu_provider_finalize (GObject *object); +/** + * FuProviderPrivate: + **/ +typedef struct { + gchar *offline_dir; +} FuProviderPrivate; + enum { SIGNAL_DEVICE_ADDED, SIGNAL_DEVICE_REMOVED, @@ -45,7 +52,8 @@ enum { static guint signals[SIGNAL_LAST] = { 0 }; -G_DEFINE_TYPE (FuProvider, fu_provider, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE (FuProvider, fu_provider, G_TYPE_OBJECT) +#define GET_PRIVATE(o) (fu_provider_get_instance_private (o)) /** * fu_provider_offline_invalidate: @@ -118,9 +126,10 @@ fu_provider_schedule_update (FuProvider *provider, GBytes *blob_cab, GError **error) { + FuProviderPrivate *priv = GET_PRIVATE (provider); + gchar tmpname[] = {"XXXXXX.cap"}; guint i; - g_autofree gchar *dirname = NULL; g_autofree gchar *filename = NULL; g_autoptr(FwupdResult) res_tmp = NULL; g_autoptr(FuPending) pending = NULL; @@ -139,8 +148,7 @@ fu_provider_schedule_update (FuProvider *provider, } /* create directory */ - dirname = g_build_filename (LOCALSTATEDIR, "lib", "fwupd", NULL); - file = g_file_new_for_path (dirname); + file = g_file_new_for_path (priv->offline_dir); if (!g_file_query_exists (file, NULL)) { if (!g_file_make_directory_with_parents (file, NULL, error)) return FALSE; @@ -149,7 +157,7 @@ fu_provider_schedule_update (FuProvider *provider, /* get a random filename */ for (i = 0; i < 6; i++) tmpname[i] = g_random_int_range ('A', 'Z'); - filename = g_build_filename (dirname, tmpname, NULL); + filename = g_build_filename (priv->offline_dir, tmpname, NULL); /* just copy to the temp file */ fu_provider_set_status (provider, FWUPD_STATUS_SCHEDULING); @@ -493,6 +501,26 @@ fu_provider_class_init (FuProviderClass *klass) static void fu_provider_init (FuProvider *provider) { + FuProviderPrivate *priv = GET_PRIVATE (provider); + const gchar *tmp; + + /* allow this to be overidden for testing */ + priv->offline_dir = g_build_filename (LOCALSTATEDIR, "lib", "fwupd", NULL); + tmp = g_getenv ("FWUPD_OFFLINE_DIR"); + if (tmp != NULL) + fu_provider_set_dir (provider, tmp); +} + +/** + * fu_provider_set_dir: + **/ +void +fu_provider_set_dir (FuProvider *provider, const gchar *offline_dir) +{ + FuProviderPrivate *priv = GET_PRIVATE (provider); + g_free (priv->offline_dir); + priv->offline_dir = g_strdup (offline_dir); + g_mkdir_with_parents (offline_dir, 0700); } /** diff --git a/src/fu-provider.h b/src/fu-provider.h index 50d08421f..4e0e4544c 100644 --- a/src/fu-provider.h +++ b/src/fu-provider.h @@ -113,6 +113,9 @@ gboolean fu_provider_get_results (FuProvider *provider, GError **error); GChecksumType fu_provider_get_checksum_type (FuProviderVerifyFlags flags); +void fu_provider_set_dir (FuProvider *provider, + const gchar *offline_dir); + G_END_DECLS #endif /* __FU_PROVIDER_H */ diff --git a/src/fu-self-test.c b/src/fu-self-test.c index 457df6b03..2afdb6d7e 100644 --- a/src/fu-self-test.c +++ b/src/fu-self-test.c @@ -192,6 +192,7 @@ fu_provider_func (void) g_autoptr(GMappedFile) mapped_file = NULL; /* create a fake device */ + g_setenv("FWUPD_OFFLINE_DIR", "/tmp/fwupd-self-test/var/lib/fwupd", FALSE); provider = fu_provider_fake_new (); g_signal_connect (provider, "device-added", G_CALLBACK (_provider_device_added_cb),