Add release information for locked devices

This commit is contained in:
Richard Hughes 2018-06-27 12:45:06 +01:00
parent 7ecf0164de
commit f307775675
5 changed files with 67 additions and 1 deletions

14
data/tests/metadata.xml Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<components version="0.9" origin="fwupd">
<component type="firmware">
<id>org.fwupd.8330a096d9f1af8567c7374cb8403e1ce9cf3163.device</id>
<provides>
<firmware type="flashed">2d47f29b-83a2-4f31-a2e8-63474f4d4c2e</firmware>
</provides>
<releases>
<release version="1" timestamp="1456743843">
<description><p>Applying will enable UEFI firmware reporting</p></description>
</release>
</releases>
</component>
</components>

View File

@ -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))

View File

@ -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);

View File

@ -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

View File

@ -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);