/ tests / lib / manifest.c
manifest.c
  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: test@pkgng.lan\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: test@pkgng.lan\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: test@pkgng.lan\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: test@pkgng.lan\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: test@pkgng.lan\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, "test@pkgng.lan") == 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  }