Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/tests/lib/manifest.c
2065 views
1
#include <atf-c.h>
2
#include <pkg.h>
3
#include <string.h>
4
5
#include "tests.h"
6
7
char manifest[] = ""
8
"name: foobar\n"
9
"version: 0.3\n"
10
"origin: foo/bar\n"
11
"categories: [foo, bar]\n"
12
"comment: A dummy manifest\n"
13
"arch: amd64\n"
14
"www: http://www.foobar.com\n"
15
"maintainer: [email protected]\n"
16
"flatsize: 10000\n"
17
"deps:\n"
18
" depfoo: {origin: dep/foo, version: 1.2}\n"
19
" depbar: {origin: dep/bar, version: 3.4}\n"
20
"hello: world\n" /* unknown keyword should not be a problem */
21
"conflicts: [foo-*, bar-*]\n"
22
"prefix: /opt/prefix\n"
23
"desc: |\n"
24
" port description\n"
25
"message: |\n"
26
" pkg message\n"
27
"options:\n"
28
" foo: true\n"
29
" bar: false\n"
30
"files:\n"
31
" /usr/local/bin/foo: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\n";
32
33
/* Name empty */
34
char wrong_manifest1[] = ""
35
"name:\n"
36
"version: 0.3\n"
37
"origin: foo/bar\n"
38
"comment: A dummy manifest\n"
39
"arch: amd64\n"
40
"www: http://www.foobar.com\n"
41
"maintainer: [email protected]\n"
42
"flatsize: 10000\n"
43
"deps:\n"
44
" depfoo: {origin: dep/foo, version: 1.2}\n"
45
" depbar: {origin: dep/bar, version: 3.4}\n"
46
"hello: world\n" /* unknown keyword should not be a problem */
47
"conflicts: [foo-*, bar-*]\n"
48
"options:\n"
49
" foo: true\n"
50
" bar: false\n"
51
"files:\n"
52
" /usr/local/bin/foo: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\n";
53
54
/* bad dependency line */
55
char wrong_manifest2[] = ""
56
"name: foobar\n"
57
"version: 0.3\n"
58
"origin: foo/bar\n"
59
"comment: A dummy manifest\n"
60
"arch: amd64\n"
61
"www: http://www.foobar.com\n"
62
"maintainer: [email protected]\n"
63
"flatsize: 10000\n"
64
"deps:\n"
65
" depfoo: {origin: dep/foo}\n"
66
" depbar: {origin: dep/bar, version: 3.4}\n"
67
"hello: world\n" /* unknown keyword should not be a problem */
68
"conflicts: [foo-*, bar-*]\n"
69
"options:\n"
70
" foo: true\n"
71
" bar: false\n"
72
"files:\n"
73
" /usr/local/bin/foo: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\n";
74
75
/* bad conflict line */
76
char wrong_manifest3[] = ""
77
"name: foobar\n"
78
"version: 0.3\n"
79
"origin: foo/bar\n"
80
"comment: A dummy manifest\n"
81
"arch: amd64\n"
82
"www: http://www.foobar.com\n"
83
"maintainer: [email protected]\n"
84
"flatsize: 10000\n"
85
"deps:\n"
86
" depfoo: {origin: dep/foo, version: 1.2}\n"
87
" depbar: {origin: dep/bar, version: 3.4}\n"
88
"hello: world\n" /* unknown keyword should not be a problem */
89
"conflicts: []\n"
90
"options:\n"
91
" foo: true\n"
92
" bar: false\n"
93
"files:\n"
94
" /usr/local/bin/foo: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\n";
95
96
/* bad option line */
97
char wrong_manifest4[] = ""
98
"name: foobar\n"
99
"version: 0.3\n"
100
"origin: foo/bar\n"
101
"comment: A dummy manifest\n"
102
"arch: amd64\n"
103
"www: http://www.foobar.com\n"
104
"maintainer: [email protected]\n"
105
"flatsize: 10000\n"
106
"deps:\n"
107
" depfoo: {origin: dep/foo, version: 1.2}\n"
108
" depbar: {origin: dep/bar, version: 3.4}\n"
109
"hello: world\n" /* unknown keyword should not be a problem */
110
"conflicts: [foo-*, bar-*]\n"
111
"options:\n"
112
" foo:\n"
113
" bar: false\n"
114
"files:\n"
115
" /usr/local/bin/foo: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\n";
116
117
void
118
test_manifest(void)
119
{
120
struct pkg *p = NULL;
121
struct pkg_dep *dep = NULL;
122
struct pkg_conflict *conflict = NULL;
123
struct pkg_option *option = NULL;
124
struct pkg_category *category = NULL;
125
struct pkg_file *file = NULL;
126
const char *pkg_str;
127
int64_t pkg_int;
128
int i;
129
130
ATF_REQUIRE_EQ(EPKG_OK, pkg_new(&p, PKG_FILE));
131
ATF_REQUIRE(p != NULL);
132
ATF_REQUIRE_EQ(EPKG_OK, pkg_parse_manifest(p, manifest, strlen(manifest)));
133
134
ATF_REQUIRE(pkg_get(p, PKG_NAME, &pkg_str) == EPKG_OK);
135
ATF_REQUIRE(strcmp(pkg_str, "foobar") == 0);
136
137
ATF_REQUIRE(pkg_get(p, PKG_VERSION, &pkg_str) == EPKG_OK);
138
ATF_REQUIRE(strcmp(pkg_str, "0.3") == 0);
139
140
ATF_REQUIRE(pkg_get(p, PKG_ORIGIN, &pkg_str) == EPKG_OK);
141
ATF_REQUIRE(strcmp(pkg_str, "foo/bar") == 0);
142
143
ATF_REQUIRE(pkg_get(p, PKG_COMMENT, &pkg_str) == EPKG_OK);
144
ATF_REQUIRE(strcmp(pkg_str, "A dummy manifest") == 0);
145
146
ATF_REQUIRE(pkg_get(p, PKG_ARCH, &pkg_str) == EPKG_OK);
147
ATF_REQUIRE(strcmp(pkg_str, "amd64") == 0);
148
149
ATF_REQUIRE(pkg_get(p, PKG_WWW, &pkg_str) == EPKG_OK);
150
ATF_REQUIRE(strcmp(pkg_str, "http://www.foobar.com") == 0);
151
152
ATF_REQUIRE(pkg_get(p, PKG_MAINTAINER, &pkg_str) == EPKG_OK);
153
ATF_REQUIRE(strcmp(pkg_str, "[email protected]") == 0);
154
155
ATF_REQUIRE(pkg_get(p, PKG_PREFIX, &pkg_str) == EPKG_OK);
156
ATF_REQUIRE(strcmp(pkg_str, "/opt/prefix") == 0);
157
158
ATF_REQUIRE(pkg_get(p, PKG_DESC, &pkg_str) == EPKG_OK);
159
ATF_REQUIRE(strcmp(pkg_str, "port description") == 0);
160
161
ATF_REQUIRE(pkg_get(p, PKG_MESSAGE, &pkg_str) == EPKG_OK);
162
ATF_REQUIRE(strcmp(pkg_str, "pkg message") == 0);
163
164
ATF_REQUIRE(pkg_get(p, PKG_FLATSIZE, &pkg_int) == EPKG_OK);
165
ATF_REQUIRE(pkg_int == 10000);
166
167
i = 0;
168
while (pkg_deps(p, &dep) == EPKG_OK) {
169
if (i == 0) {
170
ATF_REQUIRE(strcmp(pkg_dep_name(dep), "depfoo") == 0);
171
ATF_REQUIRE(strcmp(pkg_dep_origin(dep), "dep/foo") == 0);
172
ATF_REQUIRE(strcmp(pkg_dep_version(dep), "1.2") == 0);
173
} else if (i == 1) {
174
ATF_REQUIRE(strcmp(pkg_dep_name(dep), "depbar") == 0);
175
ATF_REQUIRE(strcmp(pkg_dep_origin(dep), "dep/bar") == 0);
176
ATF_REQUIRE(strcmp(pkg_dep_version(dep), "3.4") == 0);
177
}
178
i++;
179
}
180
ATF_REQUIRE(i == 2);
181
182
i = 0;
183
#if 0
184
while (pkg_conflicts(p, &conflict) == EPKG_OK) {
185
if (i == 0) {
186
ATF_REQUIRE(strcmp(pkg_conflict_glob(conflict), "foo-*") == 0);
187
} else if (i == 1) {
188
ATF_REQUIRE(strcmp(pkg_conflict_glob(conflict), "bar-*") == 0);
189
}
190
i++;
191
}
192
ATF_REQUIRE(i == 2);
193
#endif
194
195
i = 0;
196
while (pkg_options(p, &option) == EPKG_OK) {
197
if (i == 0) {
198
ATF_REQUIRE(strcmp(pkg_option_opt(option), "foo") == 0);
199
ATF_REQUIRE(strcmp(pkg_option_value(option), "true") == 0);
200
} else if (i == 1) {
201
ATF_REQUIRE(strcmp(pkg_option_opt(option), "bar") == 0);
202
ATF_REQUIRE(strcmp(pkg_option_value(option), "false") == 0);
203
}
204
i++;
205
}
206
ATF_REQUIRE(i == 2);
207
208
i = 0;
209
while (pkg_categories(p, &category) == EPKG_OK) {
210
if (i == 0) {
211
ATF_REQUIRE(strcmp(pkg_category_name(category), "foo") == 0);
212
} else if (i == 1) {
213
ATF_REQUIRE(strcmp(pkg_category_name(category), "bar") == 0);
214
}
215
i++;
216
}
217
ATF_REQUIRE(i == 2);
218
219
ATF_REQUIRE(pkg_files(p, &file) == EPKG_OK);
220
ATF_REQUIRE(strcmp(file->path, "/usr/local/bin/foo") == 0);
221
#if 0
222
ATF_REQUIRE(strcmp(pkg_file_sha256(file),
223
"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b")
224
== 0);
225
#endif
226
pkg_free(p);
227
/* p = NULL;
228
229
ATF_REQUIRE(pkg_new(&p, PKG_FILE) == EPKG_OK);
230
ATF_REQUIRE(pkg_parse_manifest(p, wrong_manifest1) == EPKG_FATAL);
231
232
pkg_free(p);
233
p = NULL;
234
235
ATF_REQUIRE(pkg_new(&p, PKG_FILE) == EPKG_OK);
236
ATF_REQUIRE(pkg_parse_manifest(p, wrong_manifest2) == EPKG_FATAL);
237
238
pkg_free(p);
239
p = NULL;
240
241
ATF_REQUIRE(pkg_new(&p, PKG_FILE) == EPKG_OK);
242
ATF_REQUIRE(pkg_parse_manifest(p, wrong_manifest3) == EPKG_FATAL);
243
244
pkg_free(p);
245
p = NULL;
246
247
ATF_REQUIRE(pkg_new(&p, PKG_FILE) == EPKG_OK);
248
ATF_REQUIRE(pkg_parse_manifest(p, wrong_manifest4) == EPKG_FATAL);
249
pkg_free(p);
250
*/
251
}
252
253