https://gitlab.com/libosinfo/osinfo-db/issues/13 Signed-off-by: Fabiano Fidêncio <fidencio@xxxxxxxxxx> --- tests/Makefile.am | 5 + tests/test-devicelinklist.c | 251 ++++++++++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 tests/test-devicelinklist.c diff --git a/tests/Makefile.am b/tests/Makefile.am index 06f81bf..fde5941 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -6,6 +6,7 @@ check_PROGRAMS = \ test-device \ test-list \ test-devicelist \ + test-devicelinklist \ test-filter \ test-product \ test-os \ @@ -78,6 +79,10 @@ test_devicelist_LDADD = $(COMMON_LDADD) test_devicelist_CFLAGS = $(COMMON_CFLAGS) test_devicelist_SOURCES = test-devicelist.c +test_devicelinklist_LDADD = $(COMMON_LDADD) +test_devicelinklist_CFLAGS = $(COMMON_CFLAGS) +test_devicelinklist_SOURCES = test-devicelinklist.c + test_platformlist_LDADD = $(COMMON_LDADD) test_platformlist_CFLAGS = $(COMMON_CFLAGS) test_platformlist_SOURCES = test-platformlist.c diff --git a/tests/test-devicelinklist.c b/tests/test-devicelinklist.c new file mode 100644 index 0000000..fd2531b --- /dev/null +++ b/tests/test-devicelinklist.c @@ -0,0 +1,251 @@ +/* + * 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) +{ + OsinfoDeviceLinkList *list1 = osinfo_devicelinklist_new(); + OsinfoDeviceLinkList *list2 = osinfo_devicelinklist_new(); + OsinfoDeviceLinkList *list3; + OsinfoDevice *dev1 = osinfo_device_new("wibble1"); + OsinfoDevice *dev2 = osinfo_device_new("wibble2"); + OsinfoDevice *dev3 = osinfo_device_new("wibble3"); + OsinfoDevice *dev4 = osinfo_device_new("wibble4"); + OsinfoDeviceLink *ent1 = osinfo_devicelink_new(dev1); + OsinfoDeviceLink *ent2 = osinfo_devicelink_new(dev2); + OsinfoDeviceLink *ent3 = osinfo_devicelink_new(dev3); + OsinfoDeviceLink *ent4 = osinfo_devicelink_new(dev4); + + 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_DEVICELINKLIST(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++) { + OsinfoDeviceLink *ent = OSINFO_DEVICELINK(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(dev1); + g_object_unref(dev2); + g_object_unref(dev3); + g_object_unref(dev4); + 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) +{ + OsinfoDeviceLinkList *list1 = osinfo_devicelinklist_new(); + OsinfoDeviceLinkList *list2 = osinfo_devicelinklist_new(); + OsinfoDeviceLinkList *list3; + OsinfoDevice *dev1 = osinfo_device_new("wibble1"); + OsinfoDevice *dev2 = osinfo_device_new("wibble2"); + OsinfoDevice *dev3 = osinfo_device_new("wibble3"); + OsinfoDevice *dev4 = osinfo_device_new("wibble4"); + OsinfoDeviceLink *ent1 = osinfo_devicelink_new(dev1); + OsinfoDeviceLink *ent2 = osinfo_devicelink_new(dev2); + OsinfoDeviceLink *ent3 = osinfo_devicelink_new(dev3); + OsinfoDeviceLink *ent4 = osinfo_devicelink_new(dev4); + + 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_DEVICELINKLIST(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++) { + OsinfoDeviceLink *ent = OSINFO_DEVICELINK(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(dev1); + g_object_unref(dev2); + g_object_unref(dev3); + g_object_unref(dev4); + 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) +{ + OsinfoDeviceLinkList *list1 = osinfo_devicelinklist_new(); + OsinfoDeviceLinkList *list2; + OsinfoFilter *filter = osinfo_filter_new(); + OsinfoDevice *dev1 = osinfo_device_new("wibble1"); + OsinfoDevice *dev2 = osinfo_device_new("wibble2"); + OsinfoDevice *dev3 = osinfo_device_new("wibble3"); + OsinfoDevice *dev4 = osinfo_device_new("wibble4"); + OsinfoDeviceLink *ent1 = osinfo_devicelink_new(dev1); + OsinfoDeviceLink *ent2 = osinfo_devicelink_new(dev2); + OsinfoDeviceLink *ent3 = osinfo_devicelink_new(dev3); + OsinfoDeviceLink *ent4 = osinfo_devicelink_new(dev4); + + osinfo_entity_add_param(OSINFO_ENTITY(ent1), "class", "network"); + osinfo_entity_add_param(OSINFO_ENTITY(ent1), "class", "wilma"); + osinfo_entity_add_param(OSINFO_ENTITY(ent2), "class", "network"); + osinfo_entity_add_param(OSINFO_ENTITY(ent3), "class", "network"); + osinfo_entity_add_param(OSINFO_ENTITY(ent3), "class", "audio"); + osinfo_entity_add_param(OSINFO_ENTITY(ent4), "class", "audio"); + + osinfo_filter_add_constraint(filter, "class", "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_DEVICELINKLIST(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++) { + OsinfoDeviceLink *ent = OSINFO_DEVICELINK(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(dev1); + g_object_unref(dev2); + g_object_unref(dev3); + g_object_unref(dev4); + 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("/devicelinklist/union", test_union); + g_test_add_func("/devicelinklist/intersect", test_intersect); + g_test_add_func("/devicelinklist/filter", test_filter); + + /* Upfront so we don't confuse valgrind */ + osinfo_device_get_type(); + osinfo_devicelist_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