1 /*
2  * Copyright (C) 2018 Red Hat, Inc.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program. If not, see <http://www.gnu.org/licenses/>
16  */
17 
18 #include <osinfo/osinfo.h>
19 
20 
21 
22 static void
test_basic(void)23 test_basic(void)
24 {
25     OsinfoMedia *media = osinfo_media_new("foo", "x86_64");
26 
27     g_assert_true(OSINFO_IS_MEDIA(media));
28     g_assert_cmpstr((const char *)osinfo_entity_get_id(OSINFO_ENTITY(media)), ==, "foo");
29     g_assert_cmpstr((const char *)osinfo_media_get_architecture(media), ==, "x86_64");
30 
31     g_object_unref(media);
32 }
33 
34 
35 static void
test_loaded_attributes(void)36 test_loaded_attributes(void)
37 {
38     OsinfoLoader *loader = osinfo_loader_new();
39     OsinfoDb *db;
40     OsinfoOs *os;
41     OsinfoMediaList *list;
42     gint list_len, i;
43     GError *error = NULL;
44 
45     osinfo_loader_process_path(loader, SRCDIR "/tests/dbdata", &error);
46     g_assert_no_error(error);
47     db = osinfo_loader_get_db(loader);
48 
49     os = osinfo_db_get_os(db, "http://libosinfo.org/test/os/media");
50 
51     list = osinfo_os_get_media_list(os);
52     list_len = osinfo_list_get_length(OSINFO_LIST(list));
53     g_assert_cmpint(list_len, ==, 2);
54 
55     for (i = 0; i < list_len; i++) {
56         OsinfoMedia *media = OSINFO_MEDIA(osinfo_list_get_nth(OSINFO_LIST(list), i));
57 
58         if (g_str_equal(osinfo_media_get_architecture(media), "x86_64")) {
59             /* non-default values */
60             g_assert_true(osinfo_media_get_live(media));
61             g_assert_cmpint(osinfo_media_get_installer_reboots(media), ==, 3);
62             g_assert_false(osinfo_media_get_eject_after_install(media));
63             g_assert_false(osinfo_media_supports_installer_script(media));
64         } else if (g_str_equal(osinfo_media_get_architecture(media), "x86")) {
65             /* default-values */
66             g_assert_false(osinfo_media_get_live(media));
67             g_assert_cmpint(osinfo_media_get_installer_reboots(media), ==, 1);
68             g_assert_true(osinfo_media_get_eject_after_install(media));
69             g_assert_true(osinfo_media_supports_installer_script(media));
70         }
71     }
72 
73     g_object_unref(list);
74     g_object_unref(loader);
75 }
76 
77 
78 static void
test_loaded_no_installer(void)79 test_loaded_no_installer(void)
80 {
81     OsinfoLoader *loader = osinfo_loader_new();
82     OsinfoDb *db;
83     OsinfoOs *os;
84     OsinfoMediaList *list;
85     gint list_len, i;
86     GError *error = NULL;
87 
88     osinfo_loader_process_path(loader, SRCDIR "/tests/dbdata", &error);
89     g_assert_no_error(error);
90     db = osinfo_loader_get_db(loader);
91 
92     os = osinfo_db_get_os(db, "http://libosinfo.org/test/os/media-no-installer");
93 
94     list = osinfo_os_get_media_list(os);
95     list_len = osinfo_list_get_length(OSINFO_LIST(list));
96     g_assert_cmpint(list_len, ==, 2);
97 
98     for (i = 0; i < list_len; i++) {
99         OsinfoMedia *media = OSINFO_MEDIA(osinfo_list_get_nth(OSINFO_LIST(list), i));
100 
101         g_assert_false(osinfo_media_supports_installer_script(media));
102     }
103 
104     g_object_unref(list);
105     g_object_unref(loader);
106 }
107 
108 static void
test_loaded_installer_script(void)109 test_loaded_installer_script(void)
110 {
111 
112     OsinfoLoader *loader = osinfo_loader_new();
113     OsinfoDb *db;
114     OsinfoOs *os;
115     OsinfoMedia *media;
116     OsinfoMediaList *list;
117     OsinfoInstallScriptList *scripts;
118     gint list_len;
119     GError *error = NULL;
120 
121     osinfo_loader_process_path(loader, SRCDIR "/tests/dbdata", &error);
122     g_assert_no_error(error);
123     db = osinfo_loader_get_db(loader);
124 
125     os = osinfo_db_get_os(db, "http://libosinfo.org/test/os/media-installer-script");
126 
127     list = osinfo_os_get_media_list(os);
128     list_len = osinfo_list_get_length(OSINFO_LIST(list));
129     g_assert_cmpint(list_len, ==, 1);
130 
131     media = OSINFO_MEDIA(osinfo_list_get_nth(OSINFO_LIST(list), 0));
132     g_assert_true(osinfo_media_supports_installer_script(media));
133 
134     scripts = osinfo_media_get_install_script_list(media);
135     g_assert_cmpint(osinfo_list_get_length(OSINFO_LIST(scripts)), ==, 1);
136 
137     g_object_unref(scripts);
138     g_object_unref(list);
139     g_object_unref(loader);
140 }
141 
142 int
main(int argc,char * argv[])143 main(int argc, char *argv[])
144 {
145     g_test_init(&argc, &argv, NULL);
146 
147     g_test_add_func("/media/basic", test_basic);
148     g_test_add_func("/media/loaded/attributes", test_loaded_attributes);
149     g_test_add_func("/media/loaded/no-installer", test_loaded_no_installer);
150     g_test_add_func("/media/loaded/installer-script", test_loaded_installer_script);
151 
152     /* Upfront so we don't confuse valgrind */
153     osinfo_media_get_type();
154 
155     return g_test_run();
156 }
157