[Libosinfo] [libosinfo PATCH 29/31] test-os: Add test_features_duplication()

Fabiano Fidêncio fidencio at redhat.com
Fri Nov 23 10:15:18 UTC 2018


Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
 tests/test-os.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/tests/test-os.c b/tests/test-os.c
index a3b4cc9..9cd75f0 100644
--- a/tests/test-os.c
+++ b/tests/test-os.c
@@ -523,6 +523,73 @@ static void check_duplicated_devices_cb(OsinfoProduct *product,
 }
 
 
+static void check_duplicated_features_cb(OsinfoProduct *product,
+                                         gpointer user_data)
+{
+    OsinfoOs *os = OSINFO_OS(user_data);
+    OsinfoOs *foreach_os = OSINFO_OS(product);
+    OsinfoFeatureList *features_os, *features_foreach_os;
+    GList *list_features = NULL, *list_foreach_features = NULL, *list_duplicated = NULL;
+    GList *l;
+
+    if (os == foreach_os)
+        return;
+
+    features_os = osinfo_os_get_features(os, NULL);
+    features_foreach_os = osinfo_os_get_features(foreach_os, NULL);
+
+    if (osinfo_list_get_length(OSINFO_LIST(features_os)) == 0 ||
+        osinfo_list_get_length(OSINFO_LIST(features_foreach_os)) == 0)
+        goto done;
+
+    list_features = osinfo_list_get_elements(OSINFO_LIST(features_os));
+    list_foreach_features = osinfo_list_get_elements(OSINFO_LIST(features_foreach_os));
+
+    for (l = list_features; l != NULL; l = l->next) {
+        OsinfoFeature *d = OSINFO_FEATURE(l->data);
+        GList *ll;
+
+        for (ll = list_foreach_features; ll != NULL; ll = ll->next) {
+            OsinfoFeature *dd = OSINFO_FEATURE(ll->data);
+            if (g_str_equal(osinfo_feature_get_name(d), osinfo_feature_get_name(dd)))
+                list_duplicated = g_list_prepend(list_duplicated, d);
+        }
+    }
+
+    if (list_duplicated != NULL) {
+        gchar *string = NULL;
+        for (l = list_duplicated; l != NULL; l = l->next) {
+            gchar *tmp = NULL;
+            if (string != NULL)
+                tmp = g_strdup_printf("%s\n  - %s\n",
+                                      string,
+                                      osinfo_feature_get_name(OSINFO_FEATURE(l->data)));
+            else
+                tmp = g_strdup_printf("\n  - %s",
+                                      osinfo_feature_get_name(OSINFO_FEATURE(l->data)));
+
+            g_free(string);
+            string = tmp;
+        }
+
+        g_printerr("\nTesting \"%s\" against \"%s\" and found the following duplicated features: %s\n",
+                   osinfo_product_get_short_id(OSINFO_PRODUCT(os)),
+                   osinfo_product_get_short_id(product),
+                   string);
+        g_free(string);
+
+        g_test_fail();
+    }
+
+ done:
+    g_list_free(list_duplicated);
+    g_list_free(list_features);
+    g_list_free(list_foreach_features);
+    g_object_unref(features_os);
+    g_object_unref(features_foreach_os);
+}
+
+
 static void test_duplication_helper(void (check_duplicated_cb)(OsinfoProduct *, gpointer))
 {
     OsinfoLoader *loader = osinfo_loader_new();
@@ -577,6 +644,12 @@ static void test_devices_duplication(void)
 }
 
 
+static void test_features_duplication(void)
+{
+    test_duplication_helper(check_duplicated_features_cb);
+}
+
+
 static void
 devices_inheritance_basic_check(OsinfoDb *db,
                                 const gchar *os_id)
@@ -920,6 +993,7 @@ main(int argc, char *argv[])
     g_test_add_func("/os/devices/inheritance/removal",
                     test_devices_inheritance_removal);
     g_test_add_func("/os/features", test_features);
+    g_test_add_func("/os/features/duplication", test_features_duplication);
     g_test_add_func("/os/resources/minimum_recommended_maximum",
                     test_resources_minimum_recommended_maximum);
     g_test_add_func("/os/resources/uniqueness", test_resources_uniqueness);
-- 
2.19.1




More information about the Libosinfo mailing list