Signed-off-by: Fabiano Fidêncio <fidencio@xxxxxxxxxx> --- .gitignore | 1 + tests/Makefile.am | 5 + tests/test-featurelist.c | 228 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 234 insertions(+) create mode 100644 tests/test-featurelist.c diff --git a/.gitignore b/.gitignore index 1fb00d6..1c31793 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,7 @@ tests/test-db tests/test-devicelist tests/test-devicelinklist tests/test-feature +tests/test-featurelist tests/test-filter tests/test-hypervisorlist tests/test-install-script diff --git a/tests/Makefile.am b/tests/Makefile.am index aa71e77..303a57a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -8,6 +8,7 @@ check_PROGRAMS = \ test-devicelist \ test-devicelinklist \ test-feature \ + test-featurelist \ test-filter \ test-product \ test-os \ @@ -55,6 +56,10 @@ test_feature_LDADD = $(COMMON_LDADD) test_feature_CFLAGS = $(COMMON_CFLAGS) test_feature_SOURCES = test-feature.c +test_featurelist_LDADD = $(COMMON_LDADD) +test_featurelist_CFLAGS = $(COMMON_CFLAGS) +test_featurelist_SOURCES = test-featurelist.c + test_filter_LDADD = $(COMMON_LDADD) test_filter_CFLAGS = $(COMMON_CFLAGS) test_filter_SOURCES = test-filter.c diff --git a/tests/test-featurelist.c b/tests/test-featurelist.c new file mode 100644 index 0000000..61e05ff --- /dev/null +++ b/tests/test-featurelist.c @@ -0,0 +1,228 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/> + * + * Authors: + * Fabiano Fidêncio <fidencio@xxxxxxxxxx> + */ + +#include <config.h> + +#include <osinfo/osinfo.h> + + +static void +test_union(void) +{ + OsinfoFeatureList *list1 = osinfo_featurelist_new(); + OsinfoFeatureList *list2 = osinfo_featurelist_new(); + OsinfoFeatureList *list3; + OsinfoFeature *ent1 = osinfo_feature_new("wibble1"); + OsinfoFeature *ent2 = osinfo_feature_new("wibble2"); + OsinfoFeature *ent3 = osinfo_feature_new("wibble3"); + OsinfoFeature *ent4 = osinfo_feature_new("wibble4"); + + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent1)); + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent2)); + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent3)); + + osinfo_list_add(OSINFO_LIST(list2), OSINFO_ENTITY(ent1)); + osinfo_list_add(OSINFO_LIST(list2), OSINFO_ENTITY(ent4)); + + list3 = OSINFO_FEATURELIST(osinfo_list_new_union(OSINFO_LIST(list1), OSINFO_LIST(list2))); + + g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(list3)), ==, 4); + + gboolean has1 = FALSE; + gboolean has2 = FALSE; + gboolean has3 = FALSE; + gboolean has4 = FALSE; + gboolean hasBad = FALSE; + int i; + for (i = 0; i < osinfo_list_get_length(OSINFO_LIST(list3)); i++) { + OsinfoFeature *ent = OSINFO_FEATURE(osinfo_list_get_nth(OSINFO_LIST(list3), i)); + if (ent == ent1) + has1 = TRUE; + else if (ent == ent2) + has2 = TRUE; + else if (ent == ent3) + has3 = TRUE; + else if (ent == ent4) + has4 = TRUE; + else + hasBad = TRUE; + } + g_assert_true(has1); + g_assert_true(has2); + g_assert_true(has3); + g_assert_true(has4); + g_assert_false(hasBad); + + g_object_unref(ent1); + g_object_unref(ent2); + g_object_unref(ent3); + g_object_unref(ent4); + g_object_unref(list1); + g_object_unref(list2); + g_object_unref(list3); +} + + +static void +test_intersect(void) +{ + OsinfoFeatureList *list1 = osinfo_featurelist_new(); + OsinfoFeatureList *list2 = osinfo_featurelist_new(); + OsinfoFeatureList *list3; + OsinfoFeature *ent1 = osinfo_feature_new("wibble1"); + OsinfoFeature *ent2 = osinfo_feature_new("wibble2"); + OsinfoFeature *ent3 = osinfo_feature_new("wibble3"); + OsinfoFeature *ent4 = osinfo_feature_new("wibble4"); + + + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent1)); + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent2)); + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent3)); + + osinfo_list_add(OSINFO_LIST(list2), OSINFO_ENTITY(ent1)); + osinfo_list_add(OSINFO_LIST(list2), OSINFO_ENTITY(ent3)); + osinfo_list_add(OSINFO_LIST(list2), OSINFO_ENTITY(ent4)); + + list3 = OSINFO_FEATURELIST(osinfo_list_new_intersection(OSINFO_LIST(list1), OSINFO_LIST(list2))); + + g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(list3)), ==, 2); + + gboolean has1 = FALSE; + gboolean has2 = FALSE; + gboolean has3 = FALSE; + gboolean has4 = FALSE; + gboolean hasBad = FALSE; + int i; + for (i = 0; i < osinfo_list_get_length(OSINFO_LIST(list3)); i++) { + OsinfoFeature *ent = OSINFO_FEATURE(osinfo_list_get_nth(OSINFO_LIST(list3), i)); + if (ent == ent1) + has1 = TRUE; + else if (ent == ent2) + has2 = TRUE; + else if (ent == ent3) + has3 = TRUE; + else if (ent == ent4) + has4 = TRUE; + else + hasBad = TRUE; + } + g_assert_true(has1); + g_assert_false(has2); + g_assert_true(has3); + g_assert_false(has4); + g_assert_false(hasBad); + + g_object_unref(ent1); + g_object_unref(ent2); + g_object_unref(ent3); + g_object_unref(ent4); + g_object_unref(list1); + g_object_unref(list2); + g_object_unref(list3); +} + + +static void +test_filter(void) +{ + OsinfoFeatureList *list1 = osinfo_featurelist_new(); + OsinfoFeatureList *list2; + OsinfoFilter *filter = osinfo_filter_new(); + OsinfoFeature *ent1 = osinfo_feature_new("wibble1"); + OsinfoFeature *ent2 = osinfo_feature_new("wibble2"); + OsinfoFeature *ent3 = osinfo_feature_new("wibble3"); + OsinfoFeature *ent4 = osinfo_feature_new("wibble4"); + + osinfo_entity_add_param(OSINFO_ENTITY(ent1), "name", "network"); + osinfo_entity_add_param(OSINFO_ENTITY(ent1), "name", "wilma"); + osinfo_entity_add_param(OSINFO_ENTITY(ent2), "name", "network"); + osinfo_entity_add_param(OSINFO_ENTITY(ent3), "name", "network"); + osinfo_entity_add_param(OSINFO_ENTITY(ent3), "name", "audio"); + osinfo_entity_add_param(OSINFO_ENTITY(ent4), "name", "audio"); + + osinfo_filter_add_constraint(filter, "name", "network"); + + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent1)); + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent2)); + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent3)); + osinfo_list_add(OSINFO_LIST(list1), OSINFO_ENTITY(ent4)); + + list2 = OSINFO_FEATURELIST(osinfo_list_new_filtered(OSINFO_LIST(list1), filter)); + + g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(list2)), ==, 3); + + gboolean has1 = FALSE; + gboolean has2 = FALSE; + gboolean has3 = FALSE; + gboolean has4 = FALSE; + gboolean hasBad = FALSE; + int i; + for (i = 0; i < osinfo_list_get_length(OSINFO_LIST(list2)); i++) { + OsinfoFeature *ent = OSINFO_FEATURE(osinfo_list_get_nth(OSINFO_LIST(list2), i)); + if (ent == ent1) + has1 = TRUE; + else if (ent == ent2) + has2 = TRUE; + else if (ent == ent3) + has3 = TRUE; + else if (ent == ent4) + has4 = TRUE; + else + hasBad = TRUE; + } + g_assert_true(has1); + g_assert_true(has2); + g_assert_true(has3); + g_assert_false(has4); + g_assert_false(hasBad); + + g_object_unref(ent1); + g_object_unref(ent2); + g_object_unref(ent3); + g_object_unref(ent4); + g_object_unref(filter); + g_object_unref(list1); + g_object_unref(list2); +} + + +int +main(int argc, char *argv[]) +{ + g_test_init(&argc, &argv, NULL); + + g_test_add_func("/featurelist/union", test_union); + g_test_add_func("/featurelist/intersect", test_intersect); + g_test_add_func("/featurelist/filter", test_filter); + + /* Upfront so we don't confuse valgrind */ + osinfo_feature_get_type(); + osinfo_featurelist_get_type(); + osinfo_filter_get_type(); + + return g_test_run(); +} +/* + * Local variables: + * indent-tabs-mode: nil + * c-indent-level: 4 + * c-basic-offset: 4 + * End: + */ -- 2.19.1 _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo