1 #include "testsys.h"
2 #include "test_lrmirrorlist.h"
3 #include "librepo/lrmirrorlist.h"
4 
START_TEST(test_lrmirrorlist_append_url)5 START_TEST(test_lrmirrorlist_append_url)
6 {
7     LrInternalMirrorlist *iml = NULL;
8     LrInternalMirror *mirror = NULL;
9     LrUrlVars *vars = NULL;
10 
11     gchar *url1 = g_strdup("ftp://bar");
12     gchar *url2 = g_strdup("http://foo");
13     gchar *url3 = g_strdup("http://xyz/$arch/");
14     gchar *var = g_strdup("arch");
15     gchar *val = g_strdup("i386");
16 
17     vars = lr_urlvars_set(vars, var, val);
18 
19     g_free(var);
20     g_free(val);
21 
22     iml = lr_lrmirrorlist_append_url(iml, url1, NULL);
23     iml = lr_lrmirrorlist_append_url(iml, url2, NULL);
24     iml = lr_lrmirrorlist_append_url(iml, url3, vars);
25 
26     g_free(url1);
27     g_free(url2);
28     g_free(url3);
29     lr_urlvars_free(vars);
30 
31     mirror = lr_lrmirrorlist_nth(iml, 0);
32     ck_assert_ptr_nonnull(mirror);
33     ck_assert_str_eq(mirror->url, "ftp://bar");
34 
35     mirror = lr_lrmirrorlist_nth(iml, 1);
36     ck_assert_ptr_nonnull(mirror);
37     ck_assert_str_eq(mirror->url, "http://foo");
38 
39     mirror = lr_lrmirrorlist_nth(iml, 2);
40     ck_assert_ptr_nonnull(mirror);
41     ck_assert_str_eq(mirror->url, "http://xyz/i386/");
42 
43     lr_lrmirrorlist_free(iml);
44 }
45 END_TEST
46 
START_TEST(test_lrmirrorlist_append_mirrorlist)47 START_TEST(test_lrmirrorlist_append_mirrorlist)
48 {
49     LrInternalMirrorlist *iml = NULL;
50     LrInternalMirror *mirror = NULL;
51     char *url = NULL;
52     LrMirrorlist ml = {
53         .urls = NULL,
54     };
55 
56     ml.urls = g_slist_prepend(ml.urls, "ftp://bar");
57     ml.urls = g_slist_prepend(ml.urls, "http://foo");
58 
59     ck_assert(g_slist_length(iml) == 0);
60     iml = lr_lrmirrorlist_append_mirrorlist(iml, NULL, NULL);
61     ck_assert(g_slist_length(iml) == 0);
62 
63     iml = lr_lrmirrorlist_append_mirrorlist(iml, &ml, NULL);
64     ck_assert(g_slist_length(iml) == 2);
65     mirror = lr_lrmirrorlist_nth(iml, 0);
66     ck_assert_ptr_nonnull(mirror);
67     ck_assert_str_eq(mirror->url, "http://foo");
68     ck_assert(mirror->preference == 100);
69     ck_assert(mirror->protocol == LR_PROTOCOL_HTTP);
70     mirror = lr_lrmirrorlist_nth(iml, 1);
71     ck_assert_ptr_nonnull(mirror);
72     ck_assert_str_eq(mirror->url, "ftp://bar");
73     ck_assert(mirror->preference == 100);
74     ck_assert(mirror->protocol == LR_PROTOCOL_FTP);
75 
76     ck_assert(g_slist_length(iml) == 2);
77 
78     url = lr_lrmirrorlist_nth_url(iml, 0);
79     ck_assert_str_eq(url, "http://foo");
80 
81     url = lr_lrmirrorlist_nth_url(iml, 1);
82     ck_assert_str_eq(url, "ftp://bar");
83 
84     lr_lrmirrorlist_free(iml);
85     g_slist_free(ml.urls);
86 }
87 END_TEST
88 
START_TEST(test_lrmirrorlist_append_metalink)89 START_TEST(test_lrmirrorlist_append_metalink)
90 {
91     LrInternalMirrorlist *iml = NULL;
92     LrInternalMirror *mirror = NULL;
93     char *url = NULL;
94     LrMetalinkUrl url1 = {
95             .protocol = "http",
96             .type = "http",
97             .location = "CZ",
98             .preference = 100,
99             .url = "http://foo/repodata/repomd.xml",
100         };
101     LrMetalinkUrl url2 = {
102             .protocol = "rsync",
103             .type = "rsync",
104             .location = "US",
105             .preference = 50,
106             .url = "",
107         };
108     LrMetalinkUrl url3 = {
109             .protocol = "ftp",
110             .type = "ftp",
111             .location = "CZ",
112             .preference = 1,
113             .url = NULL,
114         };
115     LrMetalinkUrl url4 = {
116             .protocol = "ftp",
117             .type = "ftp",
118             .location = "US",
119             .preference = 95,
120             .url = "ftp://bar/repodata/repomd.xml",
121         };
122     LrMetalink ml = {
123         .filename = NULL,
124         .timestamp = 1,
125         .size = 1,
126         .hashes = NULL,
127         .urls = NULL,
128     };
129 
130     ml.urls = g_slist_prepend(ml.urls, &url4);
131     ml.urls = g_slist_prepend(ml.urls, &url3);
132     ml.urls = g_slist_prepend(ml.urls, &url2);
133     ml.urls = g_slist_prepend(ml.urls, &url1);
134 
135     ck_assert(g_slist_length(iml) == 0);
136     iml = lr_lrmirrorlist_append_metalink(iml, NULL, NULL, NULL);
137     ck_assert(g_slist_length(iml) == 0);
138 
139     iml = lr_lrmirrorlist_append_metalink(iml, &ml, "/repodata/repomd.xml", NULL);
140     ck_assert(g_slist_length(iml) == 2);  // 2 because element with empty url shoud be skipped
141 
142     mirror = lr_lrmirrorlist_nth(iml, 0);
143     ck_assert_str_eq(mirror->url, "http://foo");
144     ck_assert(mirror->preference == 100);
145     ck_assert(mirror->protocol == LR_PROTOCOL_HTTP);
146 
147     mirror = lr_lrmirrorlist_nth(iml, 1);
148     ck_assert_str_eq(mirror->url, "ftp://bar");
149     ck_assert(mirror->preference == 95);
150     ck_assert(mirror->protocol == LR_PROTOCOL_FTP);
151 
152     ck_assert(g_slist_length(iml) == 2);
153 
154     url = lr_lrmirrorlist_nth_url(iml, 0);
155     ck_assert_str_eq(url, "http://foo");
156 
157     url = lr_lrmirrorlist_nth_url(iml, 1);
158     ck_assert_str_eq(url, "ftp://bar");
159 
160     lr_lrmirrorlist_free(iml);
161 
162     // Try append on list with existing element
163     iml = NULL;
164     ck_assert(g_slist_length(iml) == 0);
165     iml = lr_lrmirrorlist_append_url(iml, "http://abc", NULL);
166     ck_assert(g_slist_length(iml) == 1);
167     iml = lr_lrmirrorlist_append_metalink(iml, &ml, "/repodata/repomd.xml", NULL);
168     ck_assert(g_slist_length(iml) == 3);
169     url = lr_lrmirrorlist_nth_url(iml, 0);
170     ck_assert_str_eq(url, "http://abc");
171     url = lr_lrmirrorlist_nth_url(iml, 1);
172     ck_assert_str_eq(url, "http://foo");
173     url = lr_lrmirrorlist_nth_url(iml, 2);
174     ck_assert_str_eq(url, "ftp://bar");
175 
176     lr_lrmirrorlist_free(iml);
177     g_slist_free(ml.urls);
178 }
179 END_TEST
180 
START_TEST(test_lrmirrorlist_append_lrmirrorlist)181 START_TEST(test_lrmirrorlist_append_lrmirrorlist)
182 {
183     LrInternalMirrorlist *iml = NULL, *iml_2 = NULL;
184     LrInternalMirror *mirror = NULL;
185     char *url = NULL;
186 
187     iml_2 = lr_lrmirrorlist_append_url(iml_2, "http://foo", NULL);
188     iml_2 = lr_lrmirrorlist_append_url(iml_2, "", NULL);
189     iml_2 = lr_lrmirrorlist_append_url(iml_2, NULL, NULL);
190     iml_2 = lr_lrmirrorlist_append_url(iml_2, "ftp://bar", NULL);
191 
192     ck_assert(g_slist_length(iml_2) == 2);
193 
194     ck_assert(g_slist_length(iml) == 0);
195     iml = lr_lrmirrorlist_append_lrmirrorlist(iml, NULL);
196     ck_assert(g_slist_length(iml) == 0);
197 
198     iml = lr_lrmirrorlist_append_lrmirrorlist(iml, iml_2);
199     ck_assert(g_slist_length(iml) == 2);  // 2 because element with empty url shoud be skipped
200 
201     mirror = lr_lrmirrorlist_nth(iml, 0);
202     ck_assert_str_eq(mirror->url, "http://foo");
203     ck_assert(mirror->preference == 100);
204     ck_assert(mirror->protocol == LR_PROTOCOL_HTTP);
205 
206     mirror = lr_lrmirrorlist_nth(iml, 1);
207     ck_assert_str_eq(mirror->url, "ftp://bar");
208     ck_assert(mirror->preference == 100);
209     ck_assert(mirror->protocol == LR_PROTOCOL_FTP);
210 
211     ck_assert(g_slist_length(iml) == 2);
212 
213     url = lr_lrmirrorlist_nth_url(iml, 0);
214     ck_assert_str_eq(url, "http://foo");
215 
216     url = lr_lrmirrorlist_nth_url(iml, 1);
217     ck_assert_str_eq(url, "ftp://bar");
218 
219     lr_lrmirrorlist_free(iml);
220 
221     // Try append on list with existing element
222     iml = NULL;
223     ck_assert(g_slist_length(iml) == 0);
224     iml = lr_lrmirrorlist_append_url(iml, "http://abc", NULL);
225     ck_assert(g_slist_length(iml) == 1);
226     iml = lr_lrmirrorlist_append_lrmirrorlist(iml, iml_2);
227     ck_assert(g_slist_length(iml) == 3);
228     url = lr_lrmirrorlist_nth_url(iml, 0);
229     ck_assert_str_eq(url, "http://abc");
230     url = lr_lrmirrorlist_nth_url(iml, 1);
231     ck_assert_str_eq(url, "http://foo");
232     url = lr_lrmirrorlist_nth_url(iml, 2);
233     ck_assert_str_eq(url, "ftp://bar");
234     lr_lrmirrorlist_free(iml);
235     lr_lrmirrorlist_free(iml_2);
236 }
237 END_TEST
238 
239 Suite *
lrmirrorlist_suite(void)240 lrmirrorlist_suite(void)
241 {
242     Suite *s = suite_create("internal_mirrorlist");
243     TCase *tc = tcase_create("Main");
244     tcase_add_test(tc, test_lrmirrorlist_append_url);
245     tcase_add_test(tc, test_lrmirrorlist_append_mirrorlist);
246     tcase_add_test(tc, test_lrmirrorlist_append_metalink);
247     tcase_add_test(tc, test_lrmirrorlist_append_lrmirrorlist);
248     suite_add_tcase(s, tc);
249     return s;
250 }
251