summaryrefslogtreecommitdiff
path: root/tests/test-db.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-db.c')
-rw-r--r--tests/test-db.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/test-db.c b/tests/test-db.c
index ac5bfed..d5f48af 100644
--- a/tests/test-db.c
+++ b/tests/test-db.c
@@ -789,6 +789,96 @@ test_identify_tree(void)
}
+static void
+test_identify_all_tree(void)
+{
+ OsinfoLoader *loader = osinfo_loader_new();
+ OsinfoDb *db;
+ OsinfoTree *tree, *newtree;
+ OsinfoTreeList *treelist;
+ gboolean seenV6, seenV7, seenFallback;
+ GError *error = NULL;
+ int i;
+
+ osinfo_loader_process_path(loader, SRCDIR "/tests/dbdata", &error);
+ g_assert_no_error(error);
+ db = osinfo_loader_get_db(loader);
+
+ /* Matching against an "all" architecture" */
+ tree = create_tree("x86_64", NULL);
+ treelist = osinfo_db_identify_treelist(db, tree);
+ g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(treelist)), ==, 1);
+ newtree = OSINFO_TREE(osinfo_list_get_nth(OSINFO_LIST(treelist), 0));
+ g_assert_cmpstr(osinfo_tree_get_architecture(newtree), ==, "all");
+ g_object_unref(treelist);
+ g_object_unref(tree);
+
+ /* Matching against a known architecture, which has to have precedence */
+ tree = create_tree("i686", "i686");
+ treelist = osinfo_db_identify_treelist(db, tree);
+ g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(treelist)), ==, 1);
+ newtree = OSINFO_TREE(osinfo_list_get_nth(OSINFO_LIST(treelist), 0));
+ g_assert_cmpstr(osinfo_tree_get_architecture(newtree), ==, "i686");
+ g_object_unref(treelist);
+ g_object_unref(tree);
+
+ /* Matching against a known architecture, which has to have precedence */
+ tree = create_tree(NULL, "i686");
+ treelist = osinfo_db_identify_treelist(db, tree);
+ g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(treelist)), ==, 1);
+ newtree = OSINFO_TREE(osinfo_list_get_nth(OSINFO_LIST(treelist), 0));
+ g_assert_cmpstr(osinfo_tree_get_architecture(newtree), ==, "i686");
+ g_object_unref(treelist);
+ g_object_unref(tree);
+
+ /* Should not match a tree tagged with different arch, even
+ * if treeinfo matches, but can match fallback arch */
+ seenV6 = seenV7 = seenFallback = FALSE;
+ tree = create_tree("armv7hl", "arm");
+ treelist = osinfo_db_identify_treelist(db, tree);
+ g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(treelist)), ==, 2);
+ for (i = 0; i < 2; i++) {
+ newtree = OSINFO_TREE(osinfo_list_get_nth(OSINFO_LIST(treelist), i));
+ if (osinfo_tree_get_url(newtree) == NULL) {
+ g_assert_false(seenFallback);
+ seenFallback = TRUE;
+ } else if (g_str_equal(osinfo_tree_get_url(newtree), "http://libosinfo.org/tree/v6")) {
+ g_assert_false(seenV6);
+ seenV6 = TRUE;
+ } else if (g_str_equal(osinfo_tree_get_url(newtree), "http://libosinfo.org/tree/v7")) {
+ g_assert_false(seenV7);
+ seenV7 = TRUE;
+ }
+ }
+ g_assert(!seenV6 && seenV7 && seenFallback);
+ g_object_unref(treelist);
+ g_object_unref(tree);
+
+ tree = create_tree("armv6", "arm");
+ treelist = osinfo_db_identify_treelist(db, tree);
+ g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(treelist)), ==, 2);
+ seenV6 = seenV7 = seenFallback = FALSE;
+ for (i = 0; i < 2; i++) {
+ newtree = OSINFO_TREE(osinfo_list_get_nth(OSINFO_LIST(treelist), i));
+ if (osinfo_tree_get_url(newtree) == NULL) {
+ g_assert_false(seenFallback);
+ seenFallback = TRUE;
+ } else if (g_str_equal(osinfo_tree_get_url(newtree), "http://libosinfo.org/tree/v6")) {
+ g_assert_false(seenV6);
+ seenV6 = TRUE;
+ } else if (g_str_equal(osinfo_tree_get_url(newtree), "http://libosinfo.org/tree/v7")) {
+ g_assert_false(seenV7);
+ seenV7 = TRUE;
+ }
+ }
+ g_assert(seenV6 && !seenV7 && seenFallback);
+ g_object_unref(treelist);
+ g_object_unref(tree);
+
+ g_object_unref(loader);
+}
+
+
int
main(int argc, char *argv[])
{
@@ -805,6 +895,7 @@ main(int argc, char *argv[])
g_test_add_func("/db/identify_media", test_identify_media);
g_test_add_func("/db/identify_all_media", test_identify_all_media);
g_test_add_func("/db/identify_tree", test_identify_tree);
+ g_test_add_func("/db/identify_all_tree", test_identify_all_tree);
/* Upfront so we don't confuse valgrind */
osinfo_entity_get_type();