diff --git a/data/tests/metadata.xml b/data/tests/metadata.xml new file mode 100644 index 000000000..449eb6727 --- /dev/null +++ b/data/tests/metadata.xml @@ -0,0 +1,14 @@ + + + + org.fwupd.8330a096d9f1af8567c7374cb8403e1ce9cf3163.device + + 2d47f29b-83a2-4f31-a2e8-63474f4d4c2e + + + +

Applying will enable UEFI firmware reporting

+
+
+
+
diff --git a/src/fu-device.h b/src/fu-device.h index 61a98d863..a9901f7a2 100644 --- a/src/fu-device.h +++ b/src/fu-device.h @@ -61,6 +61,7 @@ FuDevice *fu_device_new (void); #define fu_device_remove_flag(d,v) fwupd_device_remove_flag(FWUPD_DEVICE(d),v) #define fu_device_has_flag(d,v) fwupd_device_has_flag(FWUPD_DEVICE(d),v) #define fu_device_add_checksum(d,v) fwupd_device_add_checksum(FWUPD_DEVICE(d),v) +#define fu_device_add_release(d,v) fwupd_device_add_release(FWUPD_DEVICE(d),v) #define fu_device_add_icon(d,v) fwupd_device_add_icon(FWUPD_DEVICE(d),v) #define fu_device_set_created(d,v) fwupd_device_set_created(FWUPD_DEVICE(d),v) #define fu_device_set_description(d,v) fwupd_device_set_description(FWUPD_DEVICE(d),v) @@ -85,6 +86,7 @@ FuDevice *fu_device_new (void); #define fu_device_get_guid_default(d) fwupd_device_get_guid_default(FWUPD_DEVICE(d)) #define fu_device_get_icons(d) fwupd_device_get_icons(FWUPD_DEVICE(d)) #define fu_device_get_name(d) fwupd_device_get_name(FWUPD_DEVICE(d)) +#define fu_device_get_summary(d) fwupd_device_get_summary(FWUPD_DEVICE(d)) #define fu_device_get_id(d) fwupd_device_get_id(FWUPD_DEVICE(d)) #define fu_device_get_plugin(d) fwupd_device_get_plugin(FWUPD_DEVICE(d)) #define fu_device_get_update_error(d) fwupd_device_get_update_error(FWUPD_DEVICE(d)) diff --git a/src/fu-engine.c b/src/fu-engine.c index 89307fc4c..3412ec350 100644 --- a/src/fu-engine.c +++ b/src/fu-engine.c @@ -1641,7 +1641,7 @@ fu_engine_add_component_to_store (FuEngine *self, AsApp *app) } } -static gboolean +gboolean fu_engine_load_metadata_from_file (FuEngine *self, const gchar *path, const gchar *remote_id, @@ -2896,6 +2896,19 @@ fu_engine_add_device (FuEngine *self, FuDevice *device) } } + /* if this device is locked get some metadata from AppStream */ + if (fu_device_has_flag (device, FWUPD_DEVICE_FLAG_LOCKED)) { + AsApp *app = fu_engine_store_get_app_by_guids (self->store, device); + if (app != NULL) { + AsRelease *release = as_app_get_release_default (app); + if (release != NULL) { + g_autoptr(FwupdRelease) rel = fwupd_release_new (); + fu_engine_set_release_from_appstream (self, rel, app, release); + fu_device_add_release (device, rel); + } + } + } + /* adopt any required children, which may or may not already exist */ fu_engine_adopt_children (self, device); diff --git a/src/fu-engine.h b/src/fu-engine.h index 1546c182d..c3170cbe3 100644 --- a/src/fu-engine.h +++ b/src/fu-engine.h @@ -126,6 +126,10 @@ gboolean fu_engine_check_requirements (FuEngine *self, FuInstallTask *task, FwupdInstallFlags flags, GError **error); +gboolean fu_engine_load_metadata_from_file (FuEngine *self, + const gchar *path, + const gchar *remote_id, + GError **error); G_END_DECLS diff --git a/src/fu-self-test.c b/src/fu-self-test.c index 6c65ff5eb..d2effc491 100644 --- a/src/fu-self-test.c +++ b/src/fu-self-test.c @@ -285,6 +285,37 @@ fu_engine_partial_hash_func (void) g_assert (ret); } +static void +fu_engine_device_unlock_func (void) +{ + gboolean ret; + g_autofree gchar *filename = NULL; + g_autoptr(FuDevice) device = fu_device_new (); + g_autoptr(FuEngine) engine = fu_engine_new (FU_APP_FLAGS_NONE); + g_autoptr(GError) error = NULL; + + /* load engine to get FuConfig set up */ + ret = fu_engine_load (engine, &error); + g_assert_no_error (error); + g_assert (ret); + + /* add the hardcoded 'fwupd' metadata */ + filename = fu_test_get_filename (TESTDATADIR, "metadata.xml"); + g_assert (filename != NULL); + ret = fu_engine_load_metadata_from_file (engine, filename, NULL, &error); + g_assert_no_error (error); + g_assert_true (ret); + + /* add a dummy device */ + fu_device_set_id (device, "UEFI-dummy-dev0"); + fu_device_add_guid (device, "2d47f29b-83a2-4f31-a2e8-63474f4d4c2e"); + fu_device_add_flag (device, FWUPD_DEVICE_FLAG_LOCKED); + fu_engine_add_device (engine, device); + + /* ensure the metainfo was matched */ + g_assert_nonnull (fwupd_device_get_release_default (FWUPD_DEVICE (device))); +} + static void fu_engine_require_hwid_func (void) { @@ -2212,6 +2243,7 @@ main (int argc, char **argv) g_setenv ("G_MESSAGES_DEBUG", "all", TRUE); g_setenv ("FWUPD_DATADIR", TESTDATADIR_SRC, TRUE); g_setenv ("FWUPD_PLUGINDIR", TESTDATADIR_SRC, TRUE); + g_setenv ("FWUPD_SYSCONFDIR", TESTDATADIR_SRC, TRUE); g_setenv ("FWUPD_SYSFSFWDIR", TESTDATADIR_SRC, TRUE); g_setenv ("FWUPD_LOCALSTATEDIR", "/tmp/fwupd-self-test/var", TRUE); @@ -2228,6 +2260,7 @@ main (int argc, char **argv) g_test_add_func ("/fwupd/device-list", fu_device_list_func); g_test_add_func ("/fwupd/device-list{delay}", fu_device_list_delay_func); g_test_add_func ("/fwupd/device-list{compatible}", fu_device_list_compatible_func); + g_test_add_func ("/fwupd/engine{device-unlock}", fu_engine_device_unlock_func); g_test_add_func ("/fwupd/engine{history-success}", fu_engine_history_func); g_test_add_func ("/fwupd/engine{history-error}", fu_engine_history_error_func); g_test_add_func ("/fwupd/engine{require-hwid}", fu_engine_require_hwid_func);