diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2010-08-31 12:05:38 +0100 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2010-08-31 12:08:52 +0100 |
commit | 7a395674e3000d044de0af91da5d57965136cc72 (patch) | |
tree | c758421023d47443c3848e38f80c87d89aada234 | |
parent | c43af5932df1d3bcbb32498e54df9bbdb044970e (diff) | |
download | libosinfo-7a395674e3000d044de0af91da5d57965136cc72.tar.gz |
Avoid directly exposing internal lists in OsinfoDb
Don't directly expose the OsinfoList objects used by the
OsinfoDb class. Instead return a shallow copy of the lists.
Add formal APIs for adding entities to the DB.
* osinfo/osinfo_devicelist.c, osinfo/osinfo_devicelist.h,
osinfo/osinfo_hypervisorlist.c, osinfo/osinfo_hypervisorlist.h,
osinfo/osinfo_oslist.c, osinfo/osinfo_oslist.h: Add new
constructor to copy an existing list
* osinfo/osinfo_list.c, osinfo/osinfo_list.h: Add API to
copy elements of an existing list
* osinfo/osinfo_db.c, osinfo/osinfo_db.h: Shallow copy
the lists before returning them. New APIs for adding
entities to the DB.
* test/test-list.c, test/test-db.c: Update for changed APIs
-rw-r--r-- | osinfo/libosinfo.syms | 8 | ||||
-rw-r--r-- | osinfo/osinfo_db.c | 34 | ||||
-rw-r--r-- | osinfo/osinfo_db.h | 4 | ||||
-rw-r--r-- | osinfo/osinfo_devicelist.c | 8 | ||||
-rw-r--r-- | osinfo/osinfo_devicelist.h | 1 | ||||
-rw-r--r-- | osinfo/osinfo_hypervisorlist.c | 7 | ||||
-rw-r--r-- | osinfo/osinfo_hypervisorlist.h | 1 | ||||
-rw-r--r-- | osinfo/osinfo_list.c | 12 | ||||
-rw-r--r-- | osinfo/osinfo_list.h | 1 | ||||
-rw-r--r-- | osinfo/osinfo_loader.c | 9 | ||||
-rw-r--r-- | osinfo/osinfo_oslist.c | 8 | ||||
-rw-r--r-- | osinfo/osinfo_oslist.h | 1 | ||||
-rw-r--r-- | test/test-db.c | 109 | ||||
-rw-r--r-- | test/test-list.c | 7 |
14 files changed, 148 insertions, 62 deletions
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms index 7286f99..854eddb 100644 --- a/osinfo/libosinfo.syms +++ b/osinfo/libosinfo.syms @@ -8,6 +8,9 @@ LIBOSINFO_0.0.1 { osinfo_db_get_os_list; osinfo_db_get_hypervisor_list; osinfo_db_get_device_list; + osinfo_db_add_os; + osinfo_db_add_hypervisor; + osinfo_db_add_device; osinfo_db_unique_values_for_property_in_os; osinfo_db_unique_values_for_property_in_hv; osinfo_db_unique_values_for_property_in_dev; @@ -16,6 +19,7 @@ LIBOSINFO_0.0.1 { osinfo_device_new; osinfo_devicelist_get_type; osinfo_devicelist_new; + osinfo_devicelist_new_copy; osinfo_devicelist_new_filtered; osinfo_devicelist_new_intersection; osinfo_devicelist_new_union; @@ -40,17 +44,20 @@ LIBOSINFO_0.0.1 { osinfo_hypervisor_add_device; osinfo_hypervisorlist_get_type; osinfo_hypervisorlist_new; + osinfo_hypervisorlist_new_copy; osinfo_hypervisorlist_new_filtered; osinfo_hypervisorlist_new_intersection; osinfo_hypervisorlist_new_union; osinfo_list_get_type; osinfo_list_get_length; osinfo_list_get_nth; + osinfo_list_get_element_type; osinfo_list_find_by_id; osinfo_list_add; osinfo_list_add_filtered; osinfo_list_add_intersection; osinfo_list_add_union; + osinfo_list_add_all; osinfo_list_foreach; osinfo_osfilter_get_type; osinfo_osfilter_new; @@ -67,6 +74,7 @@ LIBOSINFO_0.0.1 { osinfo_os_add_related_os; osinfo_oslist_get_type; osinfo_oslist_new; + osinfo_oslist_new_copy; osinfo_oslist_new_filtered; osinfo_oslist_new_intersection; osinfo_oslist_new_union; diff --git a/osinfo/osinfo_db.c b/osinfo/osinfo_db.c index b5bf48c..bbd860f 100644 --- a/osinfo/osinfo_db.c +++ b/osinfo/osinfo_db.c @@ -110,23 +110,51 @@ OsinfoOsList *osinfo_db_get_os_list(OsinfoDb *self) { g_return_val_if_fail(OSINFO_IS_DB(self), NULL); - return self->priv->oses; + return osinfo_oslist_new_copy(self->priv->oses); } OsinfoHypervisorList *osinfo_db_get_hypervisor_list(OsinfoDb *self) { g_return_val_if_fail(OSINFO_IS_DB(self), NULL); - return self->priv->hypervisors; + return osinfo_hypervisorlist_new_copy(self->priv->hypervisors); } OsinfoDeviceList *osinfo_db_get_device_list(OsinfoDb *self) { g_return_val_if_fail(OSINFO_IS_DB(self), NULL); - return self->priv->devices; + return osinfo_devicelist_new_copy(self->priv->devices); } + +void osinfo_db_add_os(OsinfoDb *self, OsinfoOs *os) +{ + g_return_if_fail(OSINFO_IS_DB(self)); + g_return_if_fail(OSINFO_IS_OS(os)); + + osinfo_list_add(OSINFO_LIST(self->priv->oses), OSINFO_ENTITY(os)); +} + + +void osinfo_db_add_hypervisor(OsinfoDb *self, OsinfoHypervisor *hv) +{ + g_return_if_fail(OSINFO_IS_DB(self)); + g_return_if_fail(OSINFO_IS_HYPERVISOR(hv)); + + osinfo_list_add(OSINFO_LIST(self->priv->hypervisors), OSINFO_ENTITY(hv)); +} + + +void osinfo_db_add_device(OsinfoDb *self, OsinfoDevice *device) +{ + g_return_if_fail(OSINFO_IS_DB(self)); + g_return_if_fail(OSINFO_IS_DEVICE(device)); + + osinfo_list_add(OSINFO_LIST(self->priv->devices), OSINFO_ENTITY(device)); +} + + struct osinfo_db_populate_values_args { GHashTable *values; const gchar *property; diff --git a/osinfo/osinfo_db.h b/osinfo/osinfo_db.h index 22994b7..cce1896 100644 --- a/osinfo/osinfo_db.h +++ b/osinfo/osinfo_db.h @@ -94,6 +94,10 @@ OsinfoOsList *osinfo_db_get_os_list(OsinfoDb *self); OsinfoHypervisorList *osinfo_db_get_hypervisor_list(OsinfoDb *self); OsinfoDeviceList *osinfo_db_get_device_list(OsinfoDb *self); +void osinfo_db_add_os(OsinfoDb *self, OsinfoOs *os); +void osinfo_db_add_hypervisor(OsinfoDb *self, OsinfoHypervisor *hv); +void osinfo_db_add_device(OsinfoDb *self, OsinfoDevice *device); + // Get me all unique values for property "vendor" among operating systems GList *osinfo_db_unique_values_for_property_in_os(OsinfoDb *self, const gchar *propName); diff --git a/osinfo/osinfo_devicelist.c b/osinfo/osinfo_devicelist.c index 0b7505e..d1c89ff 100644 --- a/osinfo/osinfo_devicelist.c +++ b/osinfo/osinfo_devicelist.c @@ -67,6 +67,14 @@ OsinfoDeviceList *osinfo_devicelist_new(void) NULL); } +OsinfoDeviceList *osinfo_devicelist_new_copy(OsinfoDeviceList *source) +{ + OsinfoDeviceList *newList = osinfo_devicelist_new(); + osinfo_list_add_all(OSINFO_LIST(newList), + OSINFO_LIST(source)); + return newList; +} + OsinfoDeviceList *osinfo_devicelist_new_filtered(OsinfoDeviceList *source, OsinfoFilter *filter) { OsinfoDeviceList *newList = osinfo_devicelist_new(); diff --git a/osinfo/osinfo_devicelist.h b/osinfo/osinfo_devicelist.h index bb625af..b55ba34 100644 --- a/osinfo/osinfo_devicelist.h +++ b/osinfo/osinfo_devicelist.h @@ -67,6 +67,7 @@ struct _OsinfoDeviceListClass GType osinfo_devicelist_get_type(void); OsinfoDeviceList *osinfo_devicelist_new(void); +OsinfoDeviceList *osinfo_devicelist_new_copy(OsinfoDeviceList *source); OsinfoDeviceList *osinfo_devicelist_new_filtered(OsinfoDeviceList *source, OsinfoFilter *filter); OsinfoDeviceList *osinfo_devicelist_new_intersection(OsinfoDeviceList *sourceOne, OsinfoDeviceList *sourceTwo); OsinfoDeviceList *osinfo_devicelist_new_union(OsinfoDeviceList *sourceOne, OsinfoDeviceList *sourceTwo); diff --git a/osinfo/osinfo_hypervisorlist.c b/osinfo/osinfo_hypervisorlist.c index 3f59a77..6a847a6 100644 --- a/osinfo/osinfo_hypervisorlist.c +++ b/osinfo/osinfo_hypervisorlist.c @@ -68,6 +68,13 @@ OsinfoHypervisorList *osinfo_hypervisorlist_new(void) NULL); } +OsinfoHypervisorList *osinfo_hypervisorlist_new_copy(OsinfoHypervisorList *source) +{ + OsinfoHypervisorList *newList = osinfo_hypervisorlist_new(); + osinfo_list_add_all(OSINFO_LIST(newList), + OSINFO_LIST(source)); + return newList; +} OsinfoHypervisorList *osinfo_hypervisorlist_new_filtered(OsinfoHypervisorList *source, OsinfoFilter *filter) { diff --git a/osinfo/osinfo_hypervisorlist.h b/osinfo/osinfo_hypervisorlist.h index 47b00fe..93a8ac9 100644 --- a/osinfo/osinfo_hypervisorlist.h +++ b/osinfo/osinfo_hypervisorlist.h @@ -67,6 +67,7 @@ struct _OsinfoHypervisorListClass GType osinfo_hypervisorlist_get_type(void); OsinfoHypervisorList *osinfo_hypervisorlist_new(void); +OsinfoHypervisorList *osinfo_hypervisorlist_new_copy(OsinfoHypervisorList *source); OsinfoHypervisorList *osinfo_hypervisorlist_new_filtered(OsinfoHypervisorList *source, OsinfoFilter *filter); OsinfoHypervisorList *osinfo_hypervisorlist_new_intersection(OsinfoHypervisorList *sourceOne, OsinfoHypervisorList *sourceTwo); OsinfoHypervisorList *osinfo_hypervisorlist_new_union(OsinfoHypervisorList *sourceOne, OsinfoHypervisorList *sourceTwo); diff --git a/osinfo/osinfo_list.c b/osinfo/osinfo_list.c index fca77aa..39b98ad 100644 --- a/osinfo/osinfo_list.c +++ b/osinfo/osinfo_list.c @@ -251,6 +251,18 @@ void osinfo_list_add_union(OsinfoList *self, OsinfoList *sourceOne, OsinfoList * g_hash_table_unref(newSet); } +void osinfo_list_add_all(OsinfoList *self, OsinfoList *source) +{ + int i, len; + g_return_if_fail(self->priv->elementType == source->priv->elementType); + + len = osinfo_list_get_length(source); + for (i = 0; i < len; i++) { + OsinfoEntity *entity = osinfo_list_get_nth(source, i); + osinfo_list_add(self, entity); + } +} + void osinfo_list_foreach(OsinfoList *self, osinfo_list_iterator iter, gpointer data) { diff --git a/osinfo/osinfo_list.h b/osinfo/osinfo_list.h index aa324d3..dff948d 100644 --- a/osinfo/osinfo_list.h +++ b/osinfo/osinfo_list.h @@ -71,6 +71,7 @@ void osinfo_list_add(OsinfoList *self, OsinfoEntity *entity); void osinfo_list_add_filtered(OsinfoList *self, OsinfoList *source, OsinfoFilter *filter); void osinfo_list_add_intersection(OsinfoList *self, OsinfoList *sourceOne, OsinfoList *sourceTwo); void osinfo_list_add_union(OsinfoList *self, OsinfoList *sourceOne, OsinfoList *sourceTwo); +void osinfo_list_add_all(OsinfoList *self, OsinfoList *source); typedef gboolean (*osinfo_list_iterator)(OsinfoList *self, OsinfoEntity *entity, gpointer data); void osinfo_list_foreach(OsinfoList *self, osinfo_list_iterator iter, gpointer data); diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c index 7662104..670f9fe 100644 --- a/osinfo/osinfo_loader.c +++ b/osinfo/osinfo_loader.c @@ -183,9 +183,8 @@ static OsinfoDevice *osinfo_loader_get_device(OsinfoLoader *loader, { OsinfoDevice *dev = osinfo_db_get_device(loader->priv->db, id); if (!dev) { - OsinfoDeviceList *list = osinfo_db_get_device_list(loader->priv->db); dev = osinfo_device_new(id); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev)); + osinfo_db_add_device(loader->priv->db, dev); g_object_unref(dev); } return dev; @@ -197,9 +196,8 @@ static OsinfoOs *osinfo_loader_get_os(OsinfoLoader *loader, { OsinfoOs *os = osinfo_db_get_os(loader->priv->db, id); if (!os) { - OsinfoOsList *list = osinfo_db_get_os_list(loader->priv->db); os = osinfo_os_new(id); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os)); + osinfo_db_add_os(loader->priv->db, os); g_object_unref(os); } return os; @@ -211,9 +209,8 @@ static OsinfoHypervisor *osinfo_loader_get_hypervisor(OsinfoLoader *loader, { OsinfoHypervisor *hv = osinfo_db_get_hypervisor(loader->priv->db, id); if (!hv) { - OsinfoHypervisorList *list = osinfo_db_get_hypervisor_list(loader->priv->db); hv = osinfo_hypervisor_new(id); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(hv)); + osinfo_db_add_hypervisor(loader->priv->db, hv); g_object_unref(hv); } return hv; diff --git a/osinfo/osinfo_oslist.c b/osinfo/osinfo_oslist.c index 0a21dc3..aa415d5 100644 --- a/osinfo/osinfo_oslist.c +++ b/osinfo/osinfo_oslist.c @@ -69,6 +69,14 @@ OsinfoOsList *osinfo_oslist_new(void) } +OsinfoOsList *osinfo_oslist_new_copy(OsinfoOsList *source) +{ + OsinfoOsList *newList = osinfo_oslist_new(); + osinfo_list_add_all(OSINFO_LIST(newList), + OSINFO_LIST(source)); + return newList; +} + OsinfoOsList *osinfo_oslist_new_filtered(OsinfoOsList *source, OsinfoFilter *filter) { OsinfoOsList *newList = osinfo_oslist_new(); diff --git a/osinfo/osinfo_oslist.h b/osinfo/osinfo_oslist.h index 82d1df6..c8cbdaf 100644 --- a/osinfo/osinfo_oslist.h +++ b/osinfo/osinfo_oslist.h @@ -67,6 +67,7 @@ struct _OsinfoOsListClass GType osinfo_oslist_get_type(void); OsinfoOsList *osinfo_oslist_new(void); +OsinfoOsList *osinfo_oslist_new_copy(OsinfoOsList *source); OsinfoOsList *osinfo_oslist_new_filtered(OsinfoOsList *source, OsinfoFilter *filter); OsinfoOsList *osinfo_oslist_new_intersection(OsinfoOsList *sourceOne, OsinfoOsList *sourceTwo); OsinfoOsList *osinfo_oslist_new_union(OsinfoOsList *sourceOne, OsinfoOsList *sourceTwo); diff --git a/test/test-db.c b/test/test-db.c index 92f08e0..d0c659c 100644 --- a/test/test-db.c +++ b/test/test-db.c @@ -20,11 +20,15 @@ START_TEST(test_device) OsinfoDevice *dev2 = osinfo_device_new("dev2"); OsinfoDevice *dev3 = osinfo_device_new("dev3"); - OsinfoDeviceList *list = osinfo_db_get_device_list(db); + osinfo_db_add_device(db, dev1); + osinfo_db_add_device(db, dev2); + osinfo_db_add_device(db, dev3); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev1)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev2)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev3)); + OsinfoDeviceList *list = osinfo_db_get_device_list(db); + fail_unless(OSINFO_ENTITY(dev1) == osinfo_list_get_nth(OSINFO_LIST(list), 0), "Dev 1 is missing"); + fail_unless(OSINFO_ENTITY(dev2) == osinfo_list_get_nth(OSINFO_LIST(list), 1), "Dev 2 is missing"); + fail_unless(OSINFO_ENTITY(dev3) == osinfo_list_get_nth(OSINFO_LIST(list), 2), "Dev 3 is missing"); + g_object_unref(list); OsinfoDevice *dev = osinfo_db_get_device(db, "dev2"); fail_unless(dev != NULL, "Device is NULL"); @@ -41,23 +45,27 @@ END_TEST START_TEST(test_hypervisor) { OsinfoDb *db = osinfo_db_new(); - OsinfoHypervisor *dev1 = osinfo_hypervisor_new("dev1"); - OsinfoHypervisor *dev2 = osinfo_hypervisor_new("dev2"); - OsinfoHypervisor *dev3 = osinfo_hypervisor_new("dev3"); + OsinfoHypervisor *hv1 = osinfo_hypervisor_new("hv1"); + OsinfoHypervisor *hv2 = osinfo_hypervisor_new("hv2"); + OsinfoHypervisor *hv3 = osinfo_hypervisor_new("hv3"); - OsinfoHypervisorList *list = osinfo_db_get_hypervisor_list(db); + osinfo_db_add_hypervisor(db, hv1); + osinfo_db_add_hypervisor(db, hv2); + osinfo_db_add_hypervisor(db, hv3); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev1)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev2)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev3)); + OsinfoHypervisorList *list = osinfo_db_get_hypervisor_list(db); + fail_unless(OSINFO_ENTITY(hv1) == osinfo_list_get_nth(OSINFO_LIST(list), 0), "Hv 1 is missing"); + fail_unless(OSINFO_ENTITY(hv2) == osinfo_list_get_nth(OSINFO_LIST(list), 1), "Hv 2 is missing"); + fail_unless(OSINFO_ENTITY(hv3) == osinfo_list_get_nth(OSINFO_LIST(list), 2), "Hv 3 is missing"); + g_object_unref(list); - OsinfoHypervisor *dev = osinfo_db_get_hypervisor(db, "dev2"); - fail_unless(dev != NULL, "Hypervisor is NULL"); - fail_unless(dev == dev2, "Hypervisor was not dev2"); + OsinfoHypervisor *hv = osinfo_db_get_hypervisor(db, "hv2"); + fail_unless(hv != NULL, "Hypervisor is NULL"); + fail_unless(hv == hv2, "Hypervisor was not hv2"); - g_object_unref(dev1); - g_object_unref(dev2); - g_object_unref(dev3); + g_object_unref(hv1); + g_object_unref(hv2); + g_object_unref(hv3); g_object_unref(db); } END_TEST @@ -66,23 +74,27 @@ END_TEST START_TEST(test_os) { OsinfoDb *db = osinfo_db_new(); - OsinfoOs *dev1 = osinfo_os_new("dev1"); - OsinfoOs *dev2 = osinfo_os_new("dev2"); - OsinfoOs *dev3 = osinfo_os_new("dev3"); + OsinfoOs *os1 = osinfo_os_new("os1"); + OsinfoOs *os2 = osinfo_os_new("os2"); + OsinfoOs *os3 = osinfo_os_new("os3"); - OsinfoOsList *list = osinfo_db_get_os_list(db); + osinfo_db_add_os(db, os1); + osinfo_db_add_os(db, os2); + osinfo_db_add_os(db, os3); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev1)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev2)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev3)); + OsinfoOsList *list = osinfo_db_get_os_list(db); + fail_unless(OSINFO_ENTITY(os1) == osinfo_list_get_nth(OSINFO_LIST(list), 0), "Os 1 is missing"); + fail_unless(OSINFO_ENTITY(os2) == osinfo_list_get_nth(OSINFO_LIST(list), 1), "Os 2 is missing"); + fail_unless(OSINFO_ENTITY(os3) == osinfo_list_get_nth(OSINFO_LIST(list), 2), "Os 3 is missing"); + g_object_unref(list); - OsinfoOs *dev = osinfo_db_get_os(db, "dev2"); - fail_unless(dev != NULL, "Os is NULL"); - fail_unless(dev == dev2, "Os was not dev2"); + OsinfoOs *os = osinfo_db_get_os(db, "os2"); + fail_unless(os != NULL, "Os is NULL"); + fail_unless(os == os2, "Os was not os2"); - g_object_unref(dev1); - g_object_unref(dev2); - g_object_unref(dev3); + g_object_unref(os1); + g_object_unref(os2); + g_object_unref(os3); g_object_unref(db); } END_TEST @@ -102,11 +114,9 @@ START_TEST(test_prop_device) osinfo_entity_add_param(OSINFO_ENTITY(dev3), "class", "display"); osinfo_entity_add_param(OSINFO_ENTITY(dev3), "fruit", "apple"); - OsinfoDeviceList *list = osinfo_db_get_device_list(db); - - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev1)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev2)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(dev3)); + osinfo_db_add_device(db, dev1); + osinfo_db_add_device(db, dev2); + osinfo_db_add_device(db, dev3); GList *uniq = osinfo_db_unique_values_for_property_in_dev(db, "class"); GList *tmp = uniq; @@ -157,11 +167,9 @@ START_TEST(test_prop_hypervisor) osinfo_entity_add_param(OSINFO_ENTITY(hv3), "vendor", "dog"); osinfo_entity_add_param(OSINFO_ENTITY(hv3), "arch", "x86"); - OsinfoHypervisorList *list = osinfo_db_get_hypervisor_list(db); - - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(hv1)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(hv2)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(hv3)); + osinfo_db_add_hypervisor(db, hv1); + osinfo_db_add_hypervisor(db, hv2); + osinfo_db_add_hypervisor(db, hv3); GList *uniq = osinfo_db_unique_values_for_property_in_hv(db, "vendor"); GList *tmp = uniq; @@ -208,12 +216,9 @@ START_TEST(test_prop_os) osinfo_entity_add_param(OSINFO_ENTITY(os3), "vendor", "dog"); osinfo_entity_add_param(OSINFO_ENTITY(os3), "arch", "x86"); - - OsinfoOsList *list = osinfo_db_get_os_list(db); - - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os1)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os2)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os3)); + osinfo_db_add_os(db, os1); + osinfo_db_add_os(db, os2); + osinfo_db_add_os(db, os3); GList *uniq = osinfo_db_unique_values_for_property_in_os(db, "vendor"); GList *tmp = uniq; @@ -257,13 +262,11 @@ START_TEST(test_rel_os) OsinfoOs *os4 = osinfo_os_new("os4"); OsinfoOs *os5 = osinfo_os_new("os5"); - OsinfoOsList *list = osinfo_db_get_os_list(db); - - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os1)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os2)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os3)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os4)); - osinfo_list_add(OSINFO_LIST(list), OSINFO_ENTITY(os5)); + osinfo_db_add_os(db, os1); + osinfo_db_add_os(db, os2); + osinfo_db_add_os(db, os3); + osinfo_db_add_os(db, os4); + osinfo_db_add_os(db, os5); osinfo_os_add_related_os(os1, OSINFO_OS_RELATIONSHIP_DERIVES_FROM, os2); osinfo_os_add_related_os(os1, OSINFO_OS_RELATIONSHIP_DERIVES_FROM, os3); diff --git a/test/test-list.c b/test/test-list.c index d90440d..68e0eba 100644 --- a/test/test-list.c +++ b/test/test-list.c @@ -53,6 +53,13 @@ START_TEST(test_basic) fail_unless(osinfo_list_get_length(list) == 0, "List was not empty"); fail_unless(osinfo_list_find_by_id(list, "wibble") == NULL, "List was not empty"); + GType type; + g_object_get(list, "element-type", &type, NULL); + fail_unless(type == OSINFO_TYPE_ENTITY, "Type is not entity"); + + type = osinfo_list_get_element_type(list); + fail_unless(type == OSINFO_TYPE_ENTITY, "Type is not entity"); + g_object_unref(list); } END_TEST |