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 }