diff --git a/src/fu-pending.c b/src/fu-pending.c index 5ae0d35de..06c74079f 100644 --- a/src/fu-pending.c +++ b/src/fu-pending.c @@ -38,6 +38,7 @@ static void fu_pending_finalize (GObject *object); **/ typedef struct { sqlite3 *db; + gchar *pending_dir; } FuPendingPrivate; G_DEFINE_TYPE_WITH_PRIVATE (FuPending, fu_pending, G_TYPE_OBJECT) @@ -61,15 +62,14 @@ fu_pending_load (FuPending *pending, GError **error) g_return_val_if_fail (priv->db == NULL, FALSE); /* create directory */ - dirname = g_build_filename (LOCALSTATEDIR, "lib", "fwupd", NULL); - file = g_file_new_for_path (dirname); + file = g_file_new_for_path (priv->pending_dir); if (!g_file_query_exists (file, NULL)) { if (!g_file_make_directory_with_parents (file, NULL, error)) return FALSE; } /* open */ - filename = g_build_filename (dirname, "pending.db", NULL); + filename = g_build_filename (priv->pending_dir, "pending.db", NULL); g_debug ("FuPending: trying to open database '%s'", filename); rc = sqlite3_open (filename, &priv->db); if (rc != SQLITE_OK) { @@ -512,8 +512,30 @@ fu_pending_class_init (FuPendingClass *klass) static void fu_pending_init (FuPending *pending) { + FuPendingPrivate *priv = GET_PRIVATE (pending); + const gchar *tmp; + + /* allow this to be overidden for testing */ + priv->pending_dir = g_build_filename (LOCALSTATEDIR, "lib", "fwupd", NULL); + tmp = g_getenv ("FWUPD_PENDING_DIR"); + if (tmp != NULL) + fu_pending_set_dir (pending, tmp); + } +/** + * fu_pending_set_dir: + **/ +void +fu_pending_set_dir (FuPending *pending, const gchar *pending_dir) +{ + FuPendingPrivate *priv = GET_PRIVATE (pending); + g_free (priv->pending_dir); + priv->pending_dir = g_strdup (pending_dir); + g_mkdir_with_parents (pending_dir, 0700); +} + + /** * fu_pending_finalize: **/ diff --git a/src/fu-pending.h b/src/fu-pending.h index 45f5b75dc..000ffbea0 100644 --- a/src/fu-pending.h +++ b/src/fu-pending.h @@ -57,7 +57,8 @@ FwupdResult *fu_pending_get_device (FuPending *pending, GError **error); GPtrArray *fu_pending_get_devices (FuPending *pending, GError **error); - +void fu_pending_set_dir (FuPending *pending, + const gchar *pending_dir); G_END_DECLS #endif /* __FU_PENDING_H */ diff --git a/src/fu-self-test.c b/src/fu-self-test.c index 7af2871d6..457df6b03 100644 --- a/src/fu-self-test.c +++ b/src/fu-self-test.c @@ -222,6 +222,7 @@ fu_provider_func (void) g_assert_cmpint (cnt, ==, 1); /* lets check the pending */ + g_setenv("FWUPD_PENDING_DIR", "/tmp/fwupd-self-test/var/lib/fwupd", FALSE); pending = fu_pending_new (); res = fu_pending_get_device (pending, fu_device_get_id (device), &error); g_assert_no_error (error); @@ -272,7 +273,7 @@ fu_provider_func (void) g_clear_error (&error); /* delete files */ - pending_db = g_build_filename (LOCALSTATEDIR, "lib", "fwupd", "pending.db", NULL); + pending_db = g_build_filename ("/tmp/fwupd-self-test/var/lib/fwupd", "pending.db", NULL); g_unlink (pending_db); g_unlink (pending_cap); } @@ -341,7 +342,7 @@ fu_provider_rpi_func (void) "20150805"); /* clean up */ - pending_db = g_build_filename (LOCALSTATEDIR, "lib", "fwupd", "pending.db", NULL); + pending_db = g_build_filename ("/tmp/fwupd-self-test/var/lib/fwupd", "pending.db", NULL); g_unlink (pending_db); } @@ -352,18 +353,16 @@ fu_pending_func (void) gboolean ret; FwupdResult *res; g_autoptr(FuPending) pending = NULL; - g_autofree gchar *dirname = NULL; g_autofree gchar *filename = NULL; + /* create */ + g_setenv("FWUPD_PENDING_DIR", "/tmp/fwupd-self-test/var/lib/fwupd", FALSE); pending = fu_pending_new (); g_assert (pending != NULL); /* delete the database */ - dirname = g_build_filename (LOCALSTATEDIR, "lib", "fwupd", NULL); - if (!g_file_test (dirname, G_FILE_TEST_IS_DIR)) - return; - filename = g_build_filename (dirname, "pending.db", NULL); + filename = g_build_filename ("/tmp/fwupd-self-test/var/lib/fwupd/", "pending.db", NULL); g_unlink (filename); /* add a device */