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