diff options
-rw-r--r-- | bpkg/types | 6 | ||||
-rw-r--r-- | build/export.build | 10 | ||||
-rw-r--r-- | buildfile | 5 | ||||
-rw-r--r-- | tests/auth.test | 23 | ||||
-rwxr-xr-x | tests/auth/cert | 36 | ||||
-rw-r--r-- | tests/auth/default-cert-fp | 1 | ||||
-rw-r--r-- | tests/auth/default-cert.pem (renamed from tests/pkg/1/build2.org/auth/create-expired/repositories) | 29 | ||||
-rw-r--r-- | tests/auth/default-openssl.cnf (renamed from tests/default-openssl.cnf) | 0 | ||||
-rw-r--r-- | tests/auth/expired-cert.pem | 30 | ||||
-rw-r--r-- | tests/auth/key.pem (renamed from tests/key.pem) | 0 | ||||
-rw-r--r-- | tests/auth/mismatch-cert.pem | 31 | ||||
-rw-r--r-- | tests/auth/mismatch-openssl.cnf (renamed from tests/mismatch-openssl.cnf) | 2 | ||||
-rw-r--r-- | tests/auth/noemail-cert.pem (renamed from tests/pkg/1/build2.org/auth/create-noemail/repositories) | 31 | ||||
-rw-r--r-- | tests/auth/noemail-openssl.cnf (renamed from tests/noemail-openssl.cnf) | 0 | ||||
-rw-r--r-- | tests/build/.gitignore | 1 | ||||
-rw-r--r-- | tests/build/bootstrap.build | 9 | ||||
-rw-r--r-- | tests/build/root.build | 17 | ||||
-rw-r--r-- | tests/buildfile | 12 | ||||
-rwxr-xr-x | tests/cert.sh | 46 | ||||
-rw-r--r-- | tests/cfg-create.test | 75 | ||||
-rw-r--r-- | tests/common.test | 41 | ||||
-rw-r--r-- | tests/common/bar/stable/libbar-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/common/bar/stable/libbar-1.0.0.tar.gz) | bin | 957 -> 957 bytes | |||
-rw-r--r-- | tests/common/bar/stable/repositories (renamed from tests/pkg/1/build2.org/common/bar/stable/repositories) | 0 | ||||
-rw-r--r-- | tests/common/bar/testing/libbar-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/common/bar/testing/libbar-1.1.0.tar.gz) | bin | 959 -> 959 bytes | |||
-rw-r--r-- | tests/common/bar/testing/repositories (renamed from tests/pkg/1/build2.org/common/bar/testing/repositories) | 0 | ||||
-rw-r--r-- | tests/common/bar/unstable/libbar-1.1.1.tar.gz (renamed from tests/pkg/1/build2.org/common/bar/unstable/libbar-1.1.1.tar.gz) | bin | 1189 -> 1189 bytes | |||
-rw-r--r-- | tests/common/bar/unstable/repositories (renamed from tests/pkg/1/build2.org/common/bar/unstable/repositories) | 0 | ||||
-rw-r--r-- | tests/common/foo-1.tar.gz | bin | 0 -> 261 bytes | |||
-rw-r--r-- | tests/common/foo/stable/libfoo-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/common/foo/stable/libfoo-1.0.0.tar.gz) | bin | 881 -> 881 bytes | |||
-rw-r--r-- | tests/common/foo/stable/repositories (renamed from tests/pkg/1/build2.org/common/foo/stable/repositories) | 0 | ||||
-rw-r--r-- | tests/common/foo/testing/libfoo-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/common/foo/testing/libfoo-1.1.0.tar.gz) | bin | 874 -> 874 bytes | |||
-rw-r--r-- | tests/common/foo/testing/repositories (renamed from tests/pkg/1/build2.org/common/foo/testing/repositories) | 0 | ||||
-rw-r--r-- | tests/common/hello/libhello-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/common/hello/libhello-1.0.0.tar.gz) | bin | 2483 -> 2483 bytes | |||
-rw-r--r-- | tests/common/hello/repositories | 4 | ||||
-rw-r--r-- | tests/common/libfoo-1.1.0/build/bootstrap.build (renamed from tests/pkg/1/build2.org/fetch/libfoo-1.1.0/build/bootstrap.build) | 0 | ||||
-rw-r--r-- | tests/common/libfoo-1.1.0/buildfile (renamed from tests/pkg/1/build2.org/fetch/libfoo-1.1.0/buildfile) | 0 | ||||
-rw-r--r-- | tests/common/libfoo-1.1.0/manifest (renamed from tests/pkg/1/build2.org/fetch/libfoo-1.1.0/manifest) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/INSTALL (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/INSTALL) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/build/bootstrap.build (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/build/bootstrap.build) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/build/export.build (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/build/export.build) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/build/root.build (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/build/root.build) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/buildfile (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/buildfile) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/hello/buildfile (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/hello/buildfile) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/hello/export (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/hello/export) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/hello/hello (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/hello/hello) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/hello/hello.cxx (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/hello/hello.cxx) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/manifest (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/manifest) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/tests/build/bootstrap.build (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/tests/build/bootstrap.build) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/tests/build/root.build (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/tests/build/root.build) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/tests/buildfile (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/tests/buildfile) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/tests/test/buildfile (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/buildfile) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/tests/test/driver.cxx (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/driver.cxx) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/tests/test/test.out (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/test.out) | 0 | ||||
-rw-r--r-- | tests/common/libhello-1.0.0/version (renamed from tests/pkg/1/build2.org/common/libhello-1.0.0/version) | 0 | ||||
-rw-r--r-- | tests/common/satisfy/libbar-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libbar-1.0.0.tar.gz) | bin | 356 -> 356 bytes | |||
-rw-r--r-- | tests/common/satisfy/libbar-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libbar-1.1.0.tar.gz) | bin | 360 -> 360 bytes | |||
-rw-r--r-- | tests/common/satisfy/libbar-1.2.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libbar-1.2.0.tar.gz) | bin | 348 -> 348 bytes | |||
-rw-r--r-- | tests/common/satisfy/libbaz-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libbaz-1.0.0.tar.gz) | bin | 359 -> 359 bytes | |||
-rw-r--r-- | tests/common/satisfy/libbaz-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libbaz-1.1.0.tar.gz) | bin | 363 -> 363 bytes | |||
-rw-r--r-- | tests/common/satisfy/libbiz-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libbiz-1.0.0.tar.gz) | bin | 366 -> 366 bytes | |||
-rw-r--r-- | tests/common/satisfy/libfoo-0.0.1.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libfoo-0.0.1.tar.gz) | bin | 352 -> 352 bytes | |||
-rw-r--r-- | tests/common/satisfy/libfoo-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/auth/libfoo-1.0.0.tar.gz) | bin | 348 -> 348 bytes | |||
-rw-r--r-- | tests/common/satisfy/libfoo-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/depend/stable/libfoo-1.1.0.tar.gz) | bin | 349 -> 349 bytes | |||
-rw-r--r-- | tests/common/satisfy/libfoo-1.1.0/build/bootstrap.build (renamed from tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/build/bootstrap.build) | 0 | ||||
-rw-r--r-- | tests/common/satisfy/libfoo-1.1.0/buildfile (renamed from tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/buildfile) | 0 | ||||
-rw-r--r-- | tests/common/satisfy/libfoo-1.1.0/manifest (renamed from tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/manifest) | 0 | ||||
-rw-r--r-- | tests/common/satisfy/libfoo-1.2.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libfoo-1.2.0.tar.gz) | bin | 350 -> 350 bytes | |||
-rw-r--r-- | tests/common/satisfy/libfox-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libfox-1.0.0.tar.gz) | bin | 349 -> 349 bytes | |||
-rw-r--r-- | tests/common/satisfy/repositories (renamed from tests/pkg/1/build2.org/auth/unsigned1/repositories) | 0 | ||||
l--------- | tests/common/satisfy/t1/libfoo-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/auth/create-expired/libfoo-1.0.0.tar.gz) | 0 | ||||
l--------- | tests/common/satisfy/t1/repositories (renamed from tests/pkg/1/build2.org/fetch/t1/repositories) | 0 | ||||
l--------- | tests/common/satisfy/t2/libbar-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/t2/libbar-1.0.0.tar.gz) | 0 | ||||
l--------- | tests/common/satisfy/t2/libfoo-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/auth/create-noemail/libfoo-1.0.0.tar.gz) | 0 | ||||
l--------- | tests/common/satisfy/t2/repositories (renamed from tests/pkg/1/build2.org/satisfy/t1/repositories) | 0 | ||||
l--------- | tests/common/satisfy/t3/libbaz-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/t3/libbaz-1.0.0.tar.gz) | 0 | ||||
l--------- | tests/common/satisfy/t3/libfox-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/t3/libfox-1.0.0.tar.gz) | 0 | ||||
-rw-r--r-- | tests/common/satisfy/t3/repositories (renamed from tests/pkg/1/build2.org/satisfy/t3/repositories) | 0 | ||||
l--------- | tests/common/satisfy/t4a/libfoo-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/fetch/t1/libfoo-1.1.0.tar.gz) | 0 | ||||
l--------- | tests/common/satisfy/t4a/repositories (renamed from tests/pkg/1/build2.org/satisfy/t2/repositories) | 0 | ||||
l--------- | tests/common/satisfy/t4b/libbar-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/t4b/libbar-1.1.0.tar.gz) | 0 | ||||
-rw-r--r-- | tests/common/satisfy/t4b/repositories (renamed from tests/pkg/1/build2.org/satisfy/t4b/repositories) | 0 | ||||
l--------- | tests/common/satisfy/t4c/libbaz-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/t4c/libbaz-1.1.0.tar.gz) | 0 | ||||
l--------- | tests/common/satisfy/t4c/libfoo-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/auth/expired/libfoo-1.0.0.tar.gz) | 0 | ||||
-rw-r--r-- | tests/common/satisfy/t4c/repositories (renamed from tests/pkg/1/build2.org/satisfy/t4c/repositories) | 0 | ||||
l--------- | tests/common/satisfy/t4d/libbiz-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/t4d/libbiz-1.0.0.tar.gz) | 0 | ||||
l--------- | tests/common/satisfy/t4d/libfox-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/t4d/libfox-1.0.0.tar.gz) | 0 | ||||
-rw-r--r-- | tests/common/satisfy/t4d/repositories (renamed from tests/pkg/1/build2.org/satisfy/t4d/repositories) | 0 | ||||
l--------- | tests/common/satisfy/t5/libbar-1.2.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/t5/libbar-1.2.0.tar.gz) | 0 | ||||
l--------- | tests/common/satisfy/t5/repositories (renamed from tests/pkg/1/build2.org/satisfy/t4a/repositories) | 0 | ||||
-rw-r--r-- | tests/common/t1/libfoo-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/depend/stable/libfoo-1.0.0.tar.gz) | bin | 348 -> 348 bytes | |||
-rw-r--r-- | tests/common/t1/libfoo-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/fetch/libfoo-1.1.0.tar.gz) | bin | 349 -> 349 bytes | |||
-rw-r--r-- | tests/common/t1/repositories (renamed from tests/pkg/1/build2.org/auth/unsigned2/repositories) | 0 | ||||
-rw-r--r-- | tests/config.test | 27 | ||||
-rw-r--r-- | tests/pkg-build.test | 1239 | ||||
l--------- | tests/pkg-build/libbar-1.0.0.tar.gz | 1 | ||||
l--------- | tests/pkg-build/libbaz-1.1.0.tar.gz | 1 | ||||
l--------- | tests/pkg-build/libfoo-0.0.1.tar.gz | 1 | ||||
l--------- | tests/pkg-build/libfoo-1.0.0.tar.gz | 1 | ||||
l--------- | tests/pkg-build/libfoo-1.1.0 | 1 | ||||
l--------- | tests/pkg-build/libfoo-1.1.0.tar.gz | 1 | ||||
l--------- | tests/pkg-build/libfoo-1.2.0.tar.gz | 1 | ||||
l--------- | tests/pkg-build/t1 | 1 | ||||
l--------- | tests/pkg-build/t2 | 1 | ||||
l--------- | tests/pkg-build/t3 | 1 | ||||
l--------- | tests/pkg-build/t4a | 1 | ||||
l--------- | tests/pkg-build/t4b | 1 | ||||
l--------- | tests/pkg-build/t4c | 1 | ||||
l--------- | tests/pkg-build/t4d | 1 | ||||
l--------- | tests/pkg-build/t5 | 1 | ||||
-rw-r--r-- | tests/pkg-clean.test | 133 | ||||
l--------- | tests/pkg-clean/hello | 1 | ||||
l--------- | tests/pkg-clean/libhello-1.0.0 | 1 | ||||
-rw-r--r-- | tests/pkg-configure.test | 389 | ||||
l--------- | tests/pkg-configure/hello | 1 | ||||
l--------- | tests/pkg-configure/libhello-1.0.0 | 1 | ||||
-rw-r--r-- | tests/pkg-configure/stable/libbar-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/depend/stable/libbar-1.0.0.tar.gz) | bin | 354 -> 354 bytes | |||
-rw-r--r-- | tests/pkg-configure/stable/libbar-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/depend/stable/libbar-1.1.0.tar.gz) | bin | 359 -> 359 bytes | |||
-rw-r--r-- | tests/pkg-configure/stable/libbar-1.2.0.tar.gz (renamed from tests/pkg/1/build2.org/depend/stable/libbar-1.2.0.tar.gz) | bin | 372 -> 372 bytes | |||
-rw-r--r-- | tests/pkg-configure/stable/libbar-1.3.0.tar.gz (renamed from tests/pkg/1/build2.org/depend/stable/libbar-1.3.0.tar.gz) | bin | 378 -> 378 bytes | |||
-rw-r--r-- | tests/pkg-configure/stable/libfoo-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz) | bin | 348 -> 348 bytes | |||
-rw-r--r-- | tests/pkg-configure/stable/libfoo-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/satisfy/libfoo-1.1.0.tar.gz) | bin | 349 -> 349 bytes | |||
-rw-r--r-- | tests/pkg-configure/stable/libfoo-1.2.0.tar.gz (renamed from tests/pkg/1/build2.org/depend/stable/libfoo-1.2.0.tar.gz) | bin | 348 -> 348 bytes | |||
-rw-r--r-- | tests/pkg-configure/stable/repositories (renamed from tests/pkg/1/build2.org/depend/stable/repositories) | 0 | ||||
-rw-r--r-- | tests/pkg-drop.test | 448 | ||||
l--------- | tests/pkg-drop/t4a | 1 | ||||
l--------- | tests/pkg-drop/t4b | 1 | ||||
l--------- | tests/pkg-drop/t4c | 1 | ||||
l--------- | tests/pkg-drop/t4d | 1 | ||||
-rw-r--r-- | tests/pkg-fetch.test | 200 | ||||
l--------- | tests/pkg-fetch/hello | 1 | ||||
l--------- | tests/pkg-fetch/t1 | 1 | ||||
-rw-r--r-- | tests/pkg-purge.test | 182 | ||||
l--------- | tests/pkg-purge/libfoo-1.0.0.tar.gz | 1 | ||||
l--------- | tests/pkg-purge/libfoo-1.1.0 | 1 | ||||
-rw-r--r-- | tests/pkg-status.test | 160 | ||||
-rw-r--r-- | tests/pkg-status/extra/libbar-1.1.0+1.tar.gz (renamed from tests/pkg/1/build2.org/status/extra/libbar-1.1.0+1.tar.gz) | bin | 243 -> 243 bytes | |||
-rw-r--r-- | tests/pkg-status/extra/repositories (renamed from tests/pkg/1/build2.org/status/extra/repositories) | 0 | ||||
-rw-r--r-- | tests/pkg-status/stable/libbar-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/status/stable/libbar-1.0.0.tar.gz) | bin | 241 -> 241 bytes | |||
-rw-r--r-- | tests/pkg-status/stable/libfoo-1.0.0.tar.gz (renamed from tests/pkg/1/build2.org/status/stable/libfoo-1.0.0.tar.gz) | bin | 240 -> 240 bytes | |||
-rw-r--r-- | tests/pkg-status/stable/repositories (renamed from tests/pkg/1/build2.org/fetch/repositories) | 0 | ||||
-rw-r--r-- | tests/pkg-status/testing/libbar-1.0.0+1.tar.gz (renamed from tests/pkg/1/build2.org/status/testing/libbar-1.0.0+1.tar.gz) | bin | 243 -> 243 bytes | |||
-rw-r--r-- | tests/pkg-status/testing/libbar-1.1.0.tar.gz (renamed from tests/pkg/1/build2.org/status/testing/libbar-1.1.0.tar.gz) | bin | 242 -> 242 bytes | |||
-rw-r--r-- | tests/pkg-status/testing/repositories (renamed from tests/pkg/1/build2.org/status/testing/repositories) | 0 | ||||
-rw-r--r-- | tests/pkg-status/unstable/libbar-2.0.0.tar.gz (renamed from tests/pkg/1/build2.org/status/unstable/libbar-2.0.0.tar.gz) | bin | 245 -> 245 bytes | |||
-rw-r--r-- | tests/pkg-status/unstable/repositories (renamed from tests/pkg/1/build2.org/status/unstable/repositories) | 0 | ||||
-rw-r--r-- | tests/pkg-system.test | 873 | ||||
-rw-r--r-- | tests/pkg-system/foo-2.tar.gz (renamed from tests/pkg/1/build2.org/system/foo-2.tar.gz) | bin | 356 -> 356 bytes | |||
-rw-r--r-- | tests/pkg-system/libbar-0+1.tar.gz (renamed from tests/pkg/1/build2.org/system/libbar-0+1.tar.gz) | bin | 239 -> 239 bytes | |||
-rw-r--r-- | tests/pkg-system/libbar-1.tar.gz (renamed from tests/pkg/1/build2.org/system/libbar-1.tar.gz) | bin | 352 -> 352 bytes | |||
-rw-r--r-- | tests/pkg-system/libbar-2.tar.gz (renamed from tests/pkg/1/build2.org/system/libbar-2.tar.gz) | bin | 353 -> 353 bytes | |||
-rw-r--r-- | tests/pkg-system/libbaz-2.tar.gz (renamed from tests/pkg/1/build2.org/system/libbaz-2.tar.gz) | bin | 338 -> 338 bytes | |||
l--------- | tests/pkg-system/t1/foo-2.tar.gz (renamed from tests/pkg/1/build2.org/system/t1/foo-2.tar.gz) | 0 | ||||
l--------- | tests/pkg-system/t1/libbar-1.tar.gz (renamed from tests/pkg/1/build2.org/system/t1/libbar-1.tar.gz) | 0 | ||||
l--------- | tests/pkg-system/t1/libbar-2.tar.gz (renamed from tests/pkg/1/build2.org/system/t1/libbar-2.tar.gz) | 0 | ||||
l--------- | tests/pkg-system/t1/libbaz-2.tar.gz (renamed from tests/pkg/1/build2.org/system/t1/libbaz-2.tar.gz) | 0 | ||||
-rw-r--r-- | tests/pkg-system/t1/repositories (renamed from tests/pkg/1/build2.org/satisfy/repositories) | 0 | ||||
l--------- | tests/pkg-system/t2/foo-2.tar.gz (renamed from tests/pkg/1/build2.org/system/t2/foo-2.tar.gz) | 0 | ||||
l--------- | tests/pkg-system/t2/libbar-0+1.tar.gz (renamed from tests/pkg/1/build2.org/system/t2/libbar-0+1.tar.gz) | 0 | ||||
-rw-r--r-- | tests/pkg-system/t2/repositories (renamed from tests/pkg/1/build2.org/status/stable/repositories) | 0 | ||||
l--------- | tests/pkg-system/t3/foo-2.tar.gz (renamed from tests/pkg/1/build2.org/system/t3/foo-2.tar.gz) | 0 | ||||
-rw-r--r-- | tests/pkg-system/t3/repositories (renamed from tests/pkg/1/build2.org/system/t3/repositories) | 0 | ||||
-rw-r--r-- | tests/pkg-unpack.test | 199 | ||||
l--------- | tests/pkg-unpack/hello | 1 | ||||
l--------- | tests/pkg-unpack/libfoo-1.1.0 | 1 | ||||
l--------- | tests/pkg-unpack/t1 | 1 | ||||
-rw-r--r-- | tests/pkg-update.test | 148 | ||||
l--------- | tests/pkg-update/hello | 1 | ||||
l--------- | tests/pkg-update/libhello-1.0.0 | 1 | ||||
-rw-r--r-- | tests/pkg-verify.test | 59 | ||||
l--------- | tests/pkg-verify/foo-1.tar.gz | 1 | ||||
-rw-r--r-- | tests/pkg-verify/foo-2.tar.gz | bin | 0 -> 277 bytes | |||
-rw-r--r-- | tests/pkg-verify/not-a-package.tar.gz | bin | 0 -> 174 bytes | |||
-rw-r--r-- | tests/pkg/.gitignore | 2 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/auth/expired/packages | 11 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/auth/expired/signature | 13 | ||||
l--------- | tests/pkg/1/build2.org/auth/name-mismatch/libfoo-1.0.0.tar.gz | 1 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/auth/name-mismatch/repositories | 34 | ||||
l--------- | tests/pkg/1/build2.org/auth/sha256sum-mismatch/libfoo-1.0.0.tar.gz | 1 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/auth/sha256sum-mismatch/repositories | 33 | ||||
l--------- | tests/pkg/1/build2.org/auth/signature-mismatch/libfoo-1.0.0.tar.gz | 1 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/auth/signature-mismatch/repositories | 33 | ||||
l--------- | tests/pkg/1/build2.org/auth/signed/libfoo-1.0.0.tar.gz | 1 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/auth/signed/repositories | 33 | ||||
l--------- | tests/pkg/1/build2.org/auth/unsigned1/libfoo-1.0.0.tar.gz | 1 | ||||
l--------- | tests/pkg/1/build2.org/auth/unsigned2/libfoo-1.0.0.tar.gz | 1 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/common/hello/repositories | 36 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/common/not-a-package.tar.gz | bin | 259 -> 0 bytes | |||
l--------- | tests/pkg/1/build2.org/fetch/t1/libfoo-1.0.0.tar.gz | 1 | ||||
-rw-r--r-- | tests/pkg/1/build2.org/satisfy/libfoo-1.0.0.tar.gz | bin | 348 -> 0 bytes | |||
l--------- | tests/pkg/1/build2.org/satisfy/t1/libfoo-1.0.0.tar.gz | 1 | ||||
l--------- | tests/pkg/1/build2.org/satisfy/t2/libfoo-1.0.0.tar.gz | 1 | ||||
l--------- | tests/pkg/1/build2.org/satisfy/t4a/libfoo-1.1.0.tar.gz | 1 | ||||
l--------- | tests/pkg/1/build2.org/satisfy/t4c/libfoo-1.0.0.tar.gz | 1 | ||||
l--------- | tests/pkg/1/build2.org/satisfy/t5/repositories | 1 | ||||
-rwxr-xr-x | tests/publish (renamed from tests/pkg/publish) | 2 | ||||
-rw-r--r-- | tests/remote.test | 37 | ||||
-rw-r--r-- | tests/rep-add.test | 70 | ||||
-rw-r--r-- | tests/rep-auth.test | 469 | ||||
l--------- | tests/rep-auth/expired/foo-1.tar.gz | 1 | ||||
-rw-r--r-- | tests/rep-auth/expired/packages | 11 | ||||
-rw-r--r-- | tests/rep-auth/expired/repositories (renamed from tests/pkg/1/build2.org/auth/expired/repositories) | 26 | ||||
-rw-r--r-- | tests/rep-auth/expired/signature | 13 | ||||
l--------- | tests/rep-auth/unsigned/foo-1.tar.gz | 1 | ||||
-rw-r--r-- | tests/rep-auth/unsigned/repositories (renamed from tests/pkg/1/build2.org/system/t1/repositories) | 0 | ||||
-rw-r--r-- | tests/rep-create.test | 184 | ||||
l--------- | tests/rep-create/stable/foo-1.tar.gz | 1 | ||||
-rw-r--r-- | tests/rep-create/stable/repositories (renamed from tests/pkg/1/build2.org/system/t2/repositories) | 0 | ||||
-rw-r--r-- | tests/rep-create/testing/foo-2.tar.gz | bin | 0 -> 277 bytes | |||
-rw-r--r-- | tests/rep-create/testing/repositories | 4 | ||||
-rw-r--r-- | tests/rep-fetch.test | 134 | ||||
l--------- | tests/rep-fetch/bar | 1 | ||||
l--------- | tests/rep-fetch/foo | 1 | ||||
l--------- | tests/rep-fetch/hello | 1 | ||||
-rw-r--r-- | tests/rep-info.test | 128 | ||||
l--------- | tests/rep-info/testing/foo-1.tar.gz | 1 | ||||
-rw-r--r-- | tests/rep-info/testing/repositories | 6 | ||||
-rwxr-xr-x | tests/test.sh | 2003 |
217 files changed, 5491 insertions, 2309 deletions
@@ -90,12 +90,14 @@ namespace bpkg // namespace std { - // Custom path printing (with trailing slash for directories). + // Custom path printing (canonicalized, with trailing slash for directories). // inline ostream& operator<< (ostream& os, const ::butl::path& p) { - return os << p.representation (); + string r (p.representation ()); + ::butl::path::traits::canonicalize (r); + return os << r; } } diff --git a/build/export.build b/build/export.build new file mode 100644 index 0000000..dd351d6 --- /dev/null +++ b/build/export.build @@ -0,0 +1,10 @@ +# file : build/export.build +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +$out_root/: +{ + include bpkg/ +} + +export $out_root/bpkg/exe{bpkg} @@ -2,11 +2,10 @@ # copyright : Copyright (c) 2014-2017 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file -d = bpkg/ doc/ +d = bpkg/ tests/ doc/ ./: $d doc{INSTALL LICENSE NEWS README version} file{manifest} -include $d # Don't install tests or the INSTALL file. # -dir{tests/}: install = false +dir{tests/}: install = false doc{INSTALL}@./: install = false diff --git a/tests/auth.test b/tests/auth.test new file mode 100644 index 0000000..3669894 --- /dev/null +++ b/tests/auth.test @@ -0,0 +1,23 @@ +# file : tests/auth.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# OpenSSL passwordless private key. +# +key = $src_base/auth/key.pem + +# Repository certificate generated with the above private key. +# +cert = $src_base/auth/default-cert.pem + +# Repository certificate fingerprint. +# ++set cert_fp <<<$src_base/auth/default-cert-fp + +# Manifest certificate name/value. Can be appended to the repositories file to +# sign the repository. +# +cert_manifest = $~/cert-manifest ++echo 'certificate: \' >=$cert_manifest ++cat <<<$cert >+$cert_manifest ++echo '\' >+$cert_manifest diff --git a/tests/auth/cert b/tests/auth/cert new file mode 100755 index 0000000..41b3b9c --- /dev/null +++ b/tests/auth/cert @@ -0,0 +1,36 @@ +#! /bin/sh + +# Normally, you don't need to regenerate the private key. +# +# openssl genrsa 4096 > key.pem + +openssl req -x509 -new -key key.pem -days 1825 -config default-openssl.cnf > \ + default-cert.pem + +cat default-cert.pem | openssl x509 -sha256 -noout -fingerprint | \ + sed -n 's/^SHA256 Fingerprint=\(.*\)$/\1/p' >default-cert-fp + +openssl req -x509 -new -key key.pem -days 1825 -config mismatch-openssl.cnf > \ + mismatch-cert.pem + +openssl req -x509 -new -key key.pem -days 1825 -config noemail-openssl.cnf > \ + noemail-cert.pem + +# Normally, you have no reason to regenerate expired-cert.pem, as need to keep +# it expired for the testing purposes. But if you do, copy expired-cert.pem +# content to the certificate value of the following manifest files: +# ../rep-auth/expired/repositories +# +# To regenerate the packages and signature manifest files run bpkg rep-create +# command, for example: +# +# ../../bpkg/bpkg rep-create ../rep-auth/expired --key key.pem +# +# We cannot do it in the testscript since the certificate has expired. This is +# also the reason why we store these auto-generated manifests in git. +# +# Will have to wait 1 day until the certificate expires. Until then testscript +# will be failing. +# +# openssl req -x509 -new -key key.pem -days 1 -config default-openssl.cnf > \ +# expired-cert.pem diff --git a/tests/auth/default-cert-fp b/tests/auth/default-cert-fp new file mode 100644 index 0000000..11ebf3a --- /dev/null +++ b/tests/auth/default-cert-fp @@ -0,0 +1 @@ +AB:0D:3F:C1:B0:13:E4:0E:AD:4A:08:06:AE:F3:85:DB:E2:27:5F:83:11:47:A2:78:64:3C:73:60:F8:66:3A:A4 diff --git a/tests/pkg/1/build2.org/auth/create-expired/repositories b/tests/auth/default-cert.pem index 8370fa4..34a39f9 100644 --- a/tests/pkg/1/build2.org/auth/create-expired/repositories +++ b/tests/auth/default-cert.pem @@ -1,9 +1,7 @@ -: 1 -certificate: \ -----BEGIN CERTIFICATE----- -MIIFLzCCAxegAwIBAgIJAPIoh0763iYdMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV +MIIFLzCCAxegAwIBAgIJAKroQKG400AsMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV BAoMDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDDA9uYW1lOmJ1aWxkMi5vcmcwHhcN -MTYwNTAxMTA1MDMyWhcNMTYwNTAyMTA1MDMyWjAzMRcwFQYDVQQKDA5Db2RlIFN5 +MTcwMzA3MDk1NjExWhcNMjIwMzA2MDk1NjExWjAzMRcwFQYDVQQKDA5Db2RlIFN5 bnRoZXNpczEYMBYGA1UEAwwPbmFtZTpidWlsZDIub3JnMIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEA2rvxJe7MXMIygVTVGfMR4B/MTRRRgbKdLcXaUbu+ IfdyjGMu34GsUG51WzhcNOmNdLX2FHEiiESAPvVbWOEO+ZQL3IIxbXc8IgiNEpNP @@ -18,16 +16,15 @@ u7jGNUzp9KuNFQXfiay5ZzP8cqj1bfnQDDbLkXn2TOI/6bsbq4FiuqYSW//XdVqa DZlnVvfwozPlKzdKR9wMSs7PP8P7SFGU5oIh5a2zUbbNZxC8Gef7MYD6xMi7TEAU 4JECAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF BwMDMBoGA1UdEQQTMBGBD2luZm9AYnVpbGQyLm9yZzANBgkqhkiG9w0BAQsFAAOC -AgEAAb+Yxvqi4sOZ+Ti8wcxkxqFrIs32M3XgJIeZYJn9JZbtjuBx0JFZWnL/tz4M -VTiM2nrUc4qIIpTqEt2If1NcdH0Cjvf6vysLvIOoB4q09B+aW4F+19moixYodoDp -qq1Ki1MZrBMx+KUICagqRSklPyxaZ2rEFv2TY0pg8/QRFRWGCFgdWJleX6VsqIXC -KDK6MyHfR1gsDnZZfgr7HJCq1SH3loqlchLBvAF6K/c1LdQyJFYoP4xAt6yaQWzv -wEqqhhZ7tLpjrjK0K2pqsPoupNcNhE31k+6ZdM5Z5oHT844qKIVNJIdlvFwnQ3ed -grP6gBCLVY7h7GJ0x2ZG/2hYt4My8RqLxFYHaHAzQsmXFATIzT1Yqz1nw+8V3l5P -m+rXQNVAw7rgpl3T7klbHVfkg5rPa0kF66PkKq5ax46NS6KVj9sNOqkcXL7huQSG -BnSLTkaLwwrSZWl+DPXeY8TgUGkkEMY6RvYdqoOGZiZSqtMfK9QKsFi79a4Munc8 -ypUPxE++jhtXcarDy0ta3BXrspIg63a2Ab6C5yv2fC31Ec5v75rUxt9BVxMMQdlX -h9eMe5FmkgkSBcklOShE2kZvTOPUCSq8DK7JuKsKEH3istPto+PpoyT8RxuZ9K2Q -rr78CskHtj+TVdFv7TAqn2YDx9ki4HJIxWKVanJ+zOBSrJw= +AgEANT2ZQXyrjo/Tqm9KWfQfbYwYMGZH8Ftm1miqpXc5/+Hs3gtKhzIgQvCByO+l +glvpqOB4sPnul1FTE/9cJFMGH6GGD/oe9pFnaR7mnz+WGwtUCa+i33QJ9sc9H8Uf +Nk8DDO1g8c6Okn2SAEvg5owygFlhdL822PTCnxB34ns1Q+mgfZlCqczh7MDtXN4h +d2ezPND6cfWTyEZ/ZYfZVJ54+xUEcuHnY6huyHQJ8vm/E0B77y1B1u9ESHCZKD0A +/Vb1CYPCIB4Re4oradVO6CkgX6+7k47vhIlFV1Ulo7KtMb1f5a7dlpiMQbVovdK2 +njsMKdaWxgQ9PWXXuDOQZ3U5BcxfUNF8wlOA9ad1Kze+i6Bp64s3FfZ4s+x3QD11 +hDofBZ0YJeEYxyY/zIz7wCmqIoM++FpSYR9lrLuVDnxWN+fdxue79C3oG86c+ny6 +/RR8P+YzO4Jy9nevMom7Hx6F+q/3vU25+NuSvupMqJB3/MuBJl9RNcQ3mcwber8l +cZNTUVoM/YQ1DwPqLmXobRNxUuqnRtaIEDoWKXNCzhFsMMFA9SJBrEaKDRAuzrxE +B7GWDvwwpnoKvTooz0g1/CJbPd7qrnAqhHzBZBe7Ux8dTJc62FKNhNn0TSZxIXhS +nqyCIjDkxJHGaTIoe32tsNxmM1JdRqJUcXHuq6vlFOfHFeI= -----END CERTIFICATE----- -\ diff --git a/tests/default-openssl.cnf b/tests/auth/default-openssl.cnf index c14ec06..c14ec06 100644 --- a/tests/default-openssl.cnf +++ b/tests/auth/default-openssl.cnf diff --git a/tests/auth/expired-cert.pem b/tests/auth/expired-cert.pem new file mode 100644 index 0000000..3dbbe91 --- /dev/null +++ b/tests/auth/expired-cert.pem @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFLzCCAxegAwIBAgIJAOx1KvcHxv3GMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV +BAoMDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDDA9uYW1lOmJ1aWxkMi5vcmcwHhcN +MTcwMzAxMTcwMTI0WhcNMTcwMzAyMTcwMTI0WjAzMRcwFQYDVQQKDA5Db2RlIFN5 +bnRoZXNpczEYMBYGA1UEAwwPbmFtZTpidWlsZDIub3JnMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA2rvxJe7MXMIygVTVGfMR4B/MTRRRgbKdLcXaUbu+ +IfdyjGMu34GsUG51WzhcNOmNdLX2FHEiiESAPvVbWOEO+ZQL3IIxbXc8IgiNEpNP +PR58SFNwwd2E6C8pmyN7QhXuy+gpVdwbsN9RWXnXBY9A9JtSt+xBuxeDs/PkdoPH +4O3aL2HB0TUzTPhHZ23BCSzMXIIqJfxEX2g9eKtPPkRMsLd/X0lRqkutjmXlnKXN +CJ8uE8yUcuWtPSfsqSiEfvBpfcrJ4trQzYgiXfNp4Cy434SsVV5wB2Uki9fTRy2H +Y478bHLT2wgqVqCLartkOKTawy8bx0C/uA1mxen4U6P9dcKI4j1/oPmiykl0r0Hl +QIAGOYZzxbk52/pkt7LlSLvqW4jtyIhM4p8CgSRvIyI0eJHEt0ztoB6LN1zAdThu +bomWaImTxTLJXzl/fea8JJ+6jsP4NBiIrrnT/HBF1MUEiqLfwjAwTraBPtqH8A6a +I+yGPsWPAhTtlYeyTKv2qkTFA4QolegtkmjWt/oxFzwCwnLPrN19CFPUFPOGiA1+ +u7jGNUzp9KuNFQXfiay5ZzP8cqj1bfnQDDbLkXn2TOI/6bsbq4FiuqYSW//XdVqa +DZlnVvfwozPlKzdKR9wMSs7PP8P7SFGU5oIh5a2zUbbNZxC8Gef7MYD6xMi7TEAU +4JECAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF +BwMDMBoGA1UdEQQTMBGBD2luZm9AYnVpbGQyLm9yZzANBgkqhkiG9w0BAQsFAAOC +AgEATQmuoB+NC/IF2qoNQnurJWrV63lC4Ozi/VLIqCSR6A4S9TCcoLNDAtcdiyf4 +GrM+/USyV3whpISesXn0ij10OEMe2/9NUoqkO0Q/woN9WtUQActeBxThOcz0NYMi +1vg6krlx1fKpQ5g65yC3qka8VUaV9gtaCHFa6mOxZ9q5DaV2NdBAr+FOutRY6d4v +UySkOyqxfZYLs5W2e+9ofEve17eVNFQwuJY29sw406X+18gYc+KiqldPlwKIhJs1 +CBsWhO0m1GP5dR0gRBmF9WQ4fzNyoYF293ix+WC7eMf2OtRTpo/GEAXDqLlRvpiF +jALhFtcZjiIqrvnkQFq36jyVNcUnxbMKUgW4XJVpYv4uVII47eJk4a8XRGj0d+7b +nuFfT4d6gACN3gfOmtd12uT7dNsn5q0fkGhzR4ppDIyTJpGA8UhHETTRPL+HFcb1 +6kXnRPFS7eoF9DoSGtBhdpRUefj8EPJWhfE7xQvMDTYIE/ccBWp173F+xShr2mgF +xDkHH+vXGFzUZXSEAF2NW9U3bf4bRQpdOkYJsvHJmLYjcGNKdkHjJVWdXmoRpbsR +IC8M7ZPp+/oV5JEinCXRsT1NN+7l8rkec9hNk5sbokVCcyYv+GxL8kRFt2jyLqny +RlM2vM3uhgJNYVSlYsgjjg4QfikV6s+QawjSVi6y4ZnHEho= +-----END CERTIFICATE----- diff --git a/tests/key.pem b/tests/auth/key.pem index 6615a2d..6615a2d 100644 --- a/tests/key.pem +++ b/tests/auth/key.pem diff --git a/tests/auth/mismatch-cert.pem b/tests/auth/mismatch-cert.pem new file mode 100644 index 0000000..785e094 --- /dev/null +++ b/tests/auth/mismatch-cert.pem @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFTzCCAzegAwIBAgIJAO7DtVrDDUcXMA0GCSqGSIb3DQEBCwUAMEMxFzAVBgNV +BAoMDkNvZGUgU3ludGhlc2lzMSgwJgYDVQQDDB9uYW1lOmJ1aWxkMi5vcmcvbWlz +bWF0Y2hlZC9uYW1lMB4XDTE3MDMwNzA5NTYxMVoXDTIyMDMwNjA5NTYxMVowQzEX +MBUGA1UECgwOQ29kZSBTeW50aGVzaXMxKDAmBgNVBAMMH25hbWU6YnVpbGQyLm9y +Zy9taXNtYXRjaGVkL25hbWUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDau/El7sxcwjKBVNUZ8xHgH8xNFFGBsp0txdpRu74h93KMYy7fgaxQbnVbOFw0 +6Y10tfYUcSKIRIA+9VtY4Q75lAvcgjFtdzwiCI0Sk089HnxIU3DB3YToLymbI3tC +Fe7L6ClV3Buw31FZedcFj0D0m1K37EG7F4Oz8+R2g8fg7dovYcHRNTNM+EdnbcEJ +LMxcgiol/ERfaD14q08+REywt39fSVGqS62OZeWcpc0Iny4TzJRy5a09J+ypKIR+ +8Gl9ysni2tDNiCJd82ngLLjfhKxVXnAHZSSL19NHLYdjjvxsctPbCCpWoItqu2Q4 +pNrDLxvHQL+4DWbF6fhTo/11wojiPX+g+aLKSXSvQeVAgAY5hnPFuTnb+mS3suVI +u+pbiO3IiEzinwKBJG8jIjR4kcS3TO2gHos3XMB1OG5uiZZoiZPFMslfOX995rwk +n7qOw/g0GIiuudP8cEXUxQSKot/CMDBOtoE+2ofwDpoj7IY+xY8CFO2Vh7JMq/aq +RMUDhCiV6C2SaNa3+jEXPALCcs+s3X0IU9QU84aIDX67uMY1TOn0q40VBd+JrLln +M/xyqPVt+dAMNsuRefZM4j/puxurgWK6phJb/9d1WpoNmWdW9/CjM+UrN0pH3AxK +zs8/w/tIUZTmgiHlrbNRts1nELwZ5/sxgPrEyLtMQBTgkQIDAQABo0YwRDAOBgNV +HQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwMwGgYDVR0RBBMwEYEP +aW5mb0BidWlsZDIub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQDCecjF6hzS8IcSsOgx +ReZIu4UPpBXGcfvx5NSiYqahxeepWTnd6Du14Z5gtQZYeXsNLnhHaZMNgLKPnQ0g +cmpTpeqQF9XKiWbW7YQVstwWdPWoWmmqfZY1nz5jPD/aYBzq+JV1UjztWTQgCQYu +bovxs/kor6BcPy+KH5oKGq6l+kDdaXCKNqHP7Eg0xiB7tjP8OFt4XPV34tLcLQcb +gZdhuDCNgds0n8EglUoUBieRtDVIWxP2uVfiTiVTEVpFeFjC2KWEZ5OtFXa4WTkY +CLDnxVAngZ2xmfNt189YGUrtDS1kD/Kza+wOggQ95iHy2zyNlU4cHZVJxakOm3yf +X7EcLoQLY2rwtQUr+h+qvk/zrN5eBB50zjTrbFaIC+zTR4FOv+/UWieX8k/aqcnD +DeLvcEjuh+amLSapYlYrhMGal615PIbsi3eAJJz5ZDS8oUuev9NcuU57rBNqUNbz +UV8hMHGsD7ej8Tu+XeEgIBmBY6Bke1M6VU00Bt3xW0bH9yaEa0RWSflyfQfX4WGA +Ukl/CzI3IVxqO8TXDJ5ww0NOdzl9PkQV5HwzDiukutkrvGumUDzu5zkvSyDPGauO +/xmojCNSGuGYAI1bQnJjLtnKOxJgrHxTsiNCznOCXePr9+/UcoIQ6nyrHwi37/ze +8hMr+XqSi4IaPRAjSsj8b6IVVg== +-----END CERTIFICATE----- diff --git a/tests/mismatch-openssl.cnf b/tests/auth/mismatch-openssl.cnf index f4fe4d7..0c328d0 100644 --- a/tests/mismatch-openssl.cnf +++ b/tests/auth/mismatch-openssl.cnf @@ -1,4 +1,4 @@ -repository = build2.org/auth/mismatched/name/x +repository = build2.org/mismatched/name company = Code Synthesis email = info@build2.org diff --git a/tests/pkg/1/build2.org/auth/create-noemail/repositories b/tests/auth/noemail-cert.pem index 3645b23..420c195 100644 --- a/tests/pkg/1/build2.org/auth/create-noemail/repositories +++ b/tests/auth/noemail-cert.pem @@ -1,9 +1,7 @@ -: 1 -certificate: \ -----BEGIN CERTIFICATE----- -MIIFEzCCAvugAwIBAgIJANxwhIzYRCmBMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV +MIIFEzCCAvugAwIBAgIJALnZEjzzFueMMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV BAoMDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDDA9uYW1lOmJ1aWxkMi5vcmcwHhcN -MTYwNTAxMTYwODQyWhcNMTcwNTAxMTYwODQyWjAzMRcwFQYDVQQKDA5Db2RlIFN5 +MTcwMzA3MDk1NjExWhcNMjIwMzA2MDk1NjExWjAzMRcwFQYDVQQKDA5Db2RlIFN5 bnRoZXNpczEYMBYGA1UEAwwPbmFtZTpidWlsZDIub3JnMIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEA2rvxJe7MXMIygVTVGfMR4B/MTRRRgbKdLcXaUbu+ IfdyjGMu34GsUG51WzhcNOmNdLX2FHEiiESAPvVbWOEO+ZQL3IIxbXc8IgiNEpNP @@ -17,17 +15,16 @@ I+yGPsWPAhTtlYeyTKv2qkTFA4QolegtkmjWt/oxFzwCwnLPrN19CFPUFPOGiA1+ u7jGNUzp9KuNFQXfiay5ZzP8cqj1bfnQDDbLkXn2TOI/6bsbq4FiuqYSW//XdVqa DZlnVvfwozPlKzdKR9wMSs7PP8P7SFGU5oIh5a2zUbbNZxC8Gef7MYD6xMi7TEAU 4JECAwEAAaMqMCgwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF -BwMDMA0GCSqGSIb3DQEBCwUAA4ICAQC4bolUadknEL7ryAGisjFxK0WkH4zNDGrV -c3c27jHfr7D/GXqMvAkpE9aXwbBDTkgmsvQMkLx4on1WewLFVuDfyvqAS2IGU9i4 -7bbCaACkrhEb1PYvZ8mbVJiXSfnwHSmbEeBbVlej9OqFga2+drv2cI1cqpPZJKhF -UiUstPYl6vFONE5hLGxKI+6Xg6HYkkc/qawCmY3fuNxC5Hv4n0dwQGdcUqMt5oMK -1NhfPnunBXY2d/N3SaeBh8PW9Wk5zDq/S2LcO6fgdSho3R3oGbkHj52wPLWK93Vr -IBU1NhswvR69IOT92UG5KAqHK3VFp8EatuvbODQpvd0uuwIf7BO4Cj7ZPy5R7u8c -6fwyP1C/jTwSER143NA0LlmjR+qowsicz7zhBI4Fv6dj4rO725lnZ0+Sqok/45SR -jYdSPZnyWhiWh2ImfMC5INIlWvTtpL6dbfbkR1ZVABVkn3j0Xe4kpsFrmhY693mJ -LY8PTKJpIZeoj/XrnTDm/NgwcDHpS8j3F++DwZ2UxzJSOgmL9NJlC1lf1ehhxQt8 -33+/zTw6VXwK0PUputdS7xf7z+10Yf4el1kEoAzWZwaz5bwVFOyCQHPCYxuSUKz+ -O0X8FWd2wgPCmU6CB518Cv9cOyUfoZZuV3Va/IyoOUvwNd5Lxen0mo2LPNlXRMVM -e44+PKmbFA== +BwMDMA0GCSqGSIb3DQEBCwUAA4ICAQC1grbRMNAvDJ2+yYnHsGsafgx7mYM7QN7N +kHyYdzr87wvumRiJ5xgnn49VBO51RQkcT7Z/P4MJq9xjYkKS+wCJV2+WTev3ltzQ +LyFfRJkTJKTvHRDM+hbRFqyvtuRe4U91/aJU7G79gaCjmEr2LSwOywusnPU95VNw +UPMUMUYhdD1qdQfJ+PbNmrl1UC8MaflwVOb7K/OSjl7tO9JOk3QK3cMm9bqpeCYD +3HJglvl/yLzW3smh6DxdBVujWcrOAbTALc1tC2bTNQm+f83MipD4YXj09qWAnBy0 +WdRuEtdwZKW3zQ/Y1QesZcEv/3QBYSaKkwr+9sNqAHpD/UVj7qwRfHYLs1GM6o+d +/bpYz+evSdEu/3lMDxg4CLQtRqElgOnOhvIuziu7qcpgmJpRvYSHJ7RrGQET/fna ++a5KZiYvWVbFQhA79nPBGWvW/Om2dk+/pzn40zcnwnRF8wwNt8ncAI/ZhjLap5qG +5VFoMA/AP+MCsk0at3E4t4VwofdS7WB0KJv2cuGEnLRk7GOP058zOv/QQt2fXgK/ +iO68nn7vfNzVFNfbb6vYzfKigd9JiYn+icfi/cZfB7zbVHzvjS3GEQk+2NVBnnyf +LUTr5k9fTekFR1l1AE8NWi56fJ6W5d/TApkl8uun7CItHL6y2WuLyKhMxAp66LLB +hMfgR3OW4w== -----END CERTIFICATE----- -\ diff --git a/tests/noemail-openssl.cnf b/tests/auth/noemail-openssl.cnf index 4fc8618..4fc8618 100644 --- a/tests/noemail-openssl.cnf +++ b/tests/auth/noemail-openssl.cnf diff --git a/tests/build/.gitignore b/tests/build/.gitignore new file mode 100644 index 0000000..225c27f --- /dev/null +++ b/tests/build/.gitignore @@ -0,0 +1 @@ +config.build diff --git a/tests/build/bootstrap.build b/tests/build/bootstrap.build new file mode 100644 index 0000000..355a05a --- /dev/null +++ b/tests/build/bootstrap.build @@ -0,0 +1,9 @@ +# file : tests/build/bootstrap.build +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +project = # Unnamed subproject. + +using config +using dist +using test diff --git a/tests/build/root.build b/tests/build/root.build new file mode 100644 index 0000000..c188bc6 --- /dev/null +++ b/tests/build/root.build @@ -0,0 +1,17 @@ +# file : tests/build/root.build +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# We need to configure C++ module to pass the compiler path to some of bpkg +# test commands. +# +using cxx + +# Setup the bpkg that we are testing. +# +import bpkg = bpkg%exe{bpkg} +dir{*}: test = $bpkg + +# Specify the test target for cross-testing. +# +test.target = $cxx.target diff --git a/tests/buildfile b/tests/buildfile new file mode 100644 index 0000000..d59d40e --- /dev/null +++ b/tests/buildfile @@ -0,0 +1,12 @@ +# file : tests/buildfile +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +define common: file +common{*}: extension = test + +# The common/ directory contains repositories that are reused, being symlinked +# in source repositories specific for testscripts. +# +./: test{* -common -config -auth -remote} common{common config auth remote} \ + {*/ -build/ -test/}{**} $bpkg diff --git a/tests/cert.sh b/tests/cert.sh deleted file mode 100755 index 7382636..0000000 --- a/tests/cert.sh +++ /dev/null @@ -1,46 +0,0 @@ -#! /bin/sh - -# Normally, you don't need to regenerate the private key. -# -# openssl genrsa 4096 > key.pem - -# Copy default-cert.pem content to the certificate value of the following -# manifest files: -# pkg/1/build2.org/auth/signature-mismatch/repositories -# pkg/1/build2.org/auth/sha256sum-mismatch/repositories -# pkg/1/build2.org/auth/signed/repositories -# pkg/1/build2.org/common/hello/repositories -# -openssl req -x509 -new -key key.pem -days 365 -config default-openssl.cnf > \ - default-cert.pem - -# Copy mismatch-cert.pem content to the certificate value of -# pkg/1/build2.org/auth/name-mismatch/repositories manifest file. -# -openssl req -x509 -new -key key.pem -days 365 -config mismatch-openssl.cnf > \ - mismatch-cert.pem - -# Copy noemail-cert.pem content to the certificate value of -# pkg/1/build2.org/auth/create-noemail/repositories manifest file. -# -openssl req -x509 -new -key key.pem -days 365 -config noemail-openssl.cnf > \ - noemail-cert.pem - -# Normally, you have no reason to regenerate expired-cert.pem, as need to keep -# it expired for the testing purposes. But if you do, copy expired-cert.pem -# content to the certificate value of the following manifest files: -# pkg/1/build2.org/auth/expired/repositories -# pkg/1/build2.org/auth/create-expired/repositories -# -# To regenerate the packages and signature manifest files run: -# -# ../bpkg/bpkg rep-create pkg/1/build2.org/auth/expired --key key.pem -# -# We cannot do it in test.sh since the certificate has expired. This is also -# the reason why we store these auto-generated manifests in git. -# -# Will have to wait 1 day until the certificate expires. Until then test.sh -# will be failing. -# -# openssl req -x509 -new -key key.pem -days 1 -config default-openssl.cnf > \ -# expired-cert.pem diff --git a/tests/cfg-create.test b/tests/cfg-create.test new file mode 100644 index 0000000..65fe2f9 --- /dev/null +++ b/tests/cfg-create.test @@ -0,0 +1,75 @@ +# file : tests/cfg-create.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test + +pkg_status += -d cfg + +: non-empty +: +$* 2>>/~%EOE% != 0 +error: directory ./ is not empty + info: use --wipe to clean it up but be careful +EOE + +: dir +: +{ + test.arguments += -d cfg + test.cleanups += &cfg/*** + + : no-vars-mods + : + { + $* 2>>/~%EOE%; + %created new configuration in .+/cfg/% + EOE + + $pkg_status libfoo >'unknown' + } + + : conf-var + : + { + $* "config.install.root=$~/opt" 2>>/~%EOE%; + %created new configuration in .+/cfg/% + EOE + + $pkg_status libfoo >'unknown'; + + cat cfg/build/config.build >>/~"%EOO%" + %.+ + %config.install.root = '?.+/opt/'?% + %.+ + EOO + } + + : module + : + { + $* cxx "config.cxx=$config.cxx" 2>>/~%EOE%; + %created new configuration in .+/cfg/% + EOE + + $pkg_status libfoo >'unknown'; + + cat cfg/build/config.build >>/~"%EOO%" + %.+ + %config.cxx = .+% + %.+ + EOO + } + + : wipe + : + { + mkdir -p cfg/foo/bar &!cfg/ &!cfg/foo/ &!cfg/foo/bar/; + + $* --wipe 2>>/~%EOE%; + %created new configuration in .+/cfg/% + EOE + + $pkg_status libfoo >'unknown' + } +} diff --git a/tests/common.test b/tests/common.test new file mode 100644 index 0000000..8fec47e --- /dev/null +++ b/tests/common.test @@ -0,0 +1,41 @@ +# file : tests/common.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Commonly-used variables setup and driver command line. +# + +# All testscripts are named after bpkg commands, for example pkg-verify.test. +# So the testscript scope id is a name of the command being tested. +# +cmd = [string] $@ +test.arguments = $cmd + +# Each testscript has an associated repository source directory. Its +# subdirectories are copied by tests to manipulate locally and throw away upon +# completion. +# +src = [dir_path] "$src_base/$@" + +# Helper commands that can be used by tests to prepare the testing environment +# or validate an outcome of the command being tested. They are likely to get +# additional options and redirects appended prior to use. A common approach +# will be to redirect output to the null device for commands that are used for +# test setup, and to match it for commands being tested or performing teardown +# (for example, to make sure that configuration post-test state is valid and is +# as expected). +# +cfg_create = $0 cfg-create +pkg_build = $0 pkg-build +pkg_configure = $0 pkg-configure +pkg_disfigure = $0 pkg-disfigure +pkg_drop = $0 pkg-drop +pkg_fetch = $0 pkg-fetch +pkg_purge = $0 pkg-purge +pkg_status = $0 pkg-status +pkg_unpack = $0 pkg-unpack +pkg_update = $0 pkg-update +rep_add = $0 rep-add +rep_create = $0 rep-create +rep_fetch = $0 rep-fetch +rep_info = $0 rep-info diff --git a/tests/pkg/1/build2.org/common/bar/stable/libbar-1.0.0.tar.gz b/tests/common/bar/stable/libbar-1.0.0.tar.gz Binary files differindex d77c1ba..d77c1ba 100644 --- a/tests/pkg/1/build2.org/common/bar/stable/libbar-1.0.0.tar.gz +++ b/tests/common/bar/stable/libbar-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/common/bar/stable/repositories b/tests/common/bar/stable/repositories index b8ecc1f..b8ecc1f 100644 --- a/tests/pkg/1/build2.org/common/bar/stable/repositories +++ b/tests/common/bar/stable/repositories diff --git a/tests/pkg/1/build2.org/common/bar/testing/libbar-1.1.0.tar.gz b/tests/common/bar/testing/libbar-1.1.0.tar.gz Binary files differindex f081804..f081804 100644 --- a/tests/pkg/1/build2.org/common/bar/testing/libbar-1.1.0.tar.gz +++ b/tests/common/bar/testing/libbar-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/common/bar/testing/repositories b/tests/common/bar/testing/repositories index 5ab8cba..5ab8cba 100644 --- a/tests/pkg/1/build2.org/common/bar/testing/repositories +++ b/tests/common/bar/testing/repositories diff --git a/tests/pkg/1/build2.org/common/bar/unstable/libbar-1.1.1.tar.gz b/tests/common/bar/unstable/libbar-1.1.1.tar.gz Binary files differindex a0fbdc3..a0fbdc3 100644 --- a/tests/pkg/1/build2.org/common/bar/unstable/libbar-1.1.1.tar.gz +++ b/tests/common/bar/unstable/libbar-1.1.1.tar.gz diff --git a/tests/pkg/1/build2.org/common/bar/unstable/repositories b/tests/common/bar/unstable/repositories index d4ddcf5..d4ddcf5 100644 --- a/tests/pkg/1/build2.org/common/bar/unstable/repositories +++ b/tests/common/bar/unstable/repositories diff --git a/tests/common/foo-1.tar.gz b/tests/common/foo-1.tar.gz Binary files differnew file mode 100644 index 0000000..0195f04 --- /dev/null +++ b/tests/common/foo-1.tar.gz diff --git a/tests/pkg/1/build2.org/common/foo/stable/libfoo-1.0.0.tar.gz b/tests/common/foo/stable/libfoo-1.0.0.tar.gz Binary files differindex c29dd9d..c29dd9d 100644 --- a/tests/pkg/1/build2.org/common/foo/stable/libfoo-1.0.0.tar.gz +++ b/tests/common/foo/stable/libfoo-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/common/foo/stable/repositories b/tests/common/foo/stable/repositories index 13673fb..13673fb 100644 --- a/tests/pkg/1/build2.org/common/foo/stable/repositories +++ b/tests/common/foo/stable/repositories diff --git a/tests/pkg/1/build2.org/common/foo/testing/libfoo-1.1.0.tar.gz b/tests/common/foo/testing/libfoo-1.1.0.tar.gz Binary files differindex a6c0202..a6c0202 100644 --- a/tests/pkg/1/build2.org/common/foo/testing/libfoo-1.1.0.tar.gz +++ b/tests/common/foo/testing/libfoo-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/common/foo/testing/repositories b/tests/common/foo/testing/repositories index cd33f88..cd33f88 100644 --- a/tests/pkg/1/build2.org/common/foo/testing/repositories +++ b/tests/common/foo/testing/repositories diff --git a/tests/pkg/1/build2.org/common/hello/libhello-1.0.0.tar.gz b/tests/common/hello/libhello-1.0.0.tar.gz Binary files differindex e9d9ff1..e9d9ff1 100644 --- a/tests/pkg/1/build2.org/common/hello/libhello-1.0.0.tar.gz +++ b/tests/common/hello/libhello-1.0.0.tar.gz diff --git a/tests/common/hello/repositories b/tests/common/hello/repositories new file mode 100644 index 0000000..eb30fe1 --- /dev/null +++ b/tests/common/hello/repositories @@ -0,0 +1,4 @@ +# Hello World repository. Currently does not have any prerequisite +# repositories. +# +: 1 diff --git a/tests/pkg/1/build2.org/fetch/libfoo-1.1.0/build/bootstrap.build b/tests/common/libfoo-1.1.0/build/bootstrap.build index 54f267e..54f267e 100644 --- a/tests/pkg/1/build2.org/fetch/libfoo-1.1.0/build/bootstrap.build +++ b/tests/common/libfoo-1.1.0/build/bootstrap.build diff --git a/tests/pkg/1/build2.org/fetch/libfoo-1.1.0/buildfile b/tests/common/libfoo-1.1.0/buildfile index 9f80de9..9f80de9 100644 --- a/tests/pkg/1/build2.org/fetch/libfoo-1.1.0/buildfile +++ b/tests/common/libfoo-1.1.0/buildfile diff --git a/tests/pkg/1/build2.org/fetch/libfoo-1.1.0/manifest b/tests/common/libfoo-1.1.0/manifest index 3453757..3453757 100644 --- a/tests/pkg/1/build2.org/fetch/libfoo-1.1.0/manifest +++ b/tests/common/libfoo-1.1.0/manifest diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/INSTALL b/tests/common/libhello-1.0.0/INSTALL index 485b10f..485b10f 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/INSTALL +++ b/tests/common/libhello-1.0.0/INSTALL diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/build/bootstrap.build b/tests/common/libhello-1.0.0/build/bootstrap.build index 8d8db2b..8d8db2b 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/build/bootstrap.build +++ b/tests/common/libhello-1.0.0/build/bootstrap.build diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/build/export.build b/tests/common/libhello-1.0.0/build/export.build index 1eb73b7..1eb73b7 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/build/export.build +++ b/tests/common/libhello-1.0.0/build/export.build diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/build/root.build b/tests/common/libhello-1.0.0/build/root.build index 4f70114..4f70114 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/build/root.build +++ b/tests/common/libhello-1.0.0/build/root.build diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/buildfile b/tests/common/libhello-1.0.0/buildfile index a416648..a416648 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/buildfile +++ b/tests/common/libhello-1.0.0/buildfile diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/hello/buildfile b/tests/common/libhello-1.0.0/hello/buildfile index bff7fce..bff7fce 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/hello/buildfile +++ b/tests/common/libhello-1.0.0/hello/buildfile diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/hello/export b/tests/common/libhello-1.0.0/hello/export index 18f4968..18f4968 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/hello/export +++ b/tests/common/libhello-1.0.0/hello/export diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/hello/hello b/tests/common/libhello-1.0.0/hello/hello index 5fb7d9e..5fb7d9e 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/hello/hello +++ b/tests/common/libhello-1.0.0/hello/hello diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/hello/hello.cxx b/tests/common/libhello-1.0.0/hello/hello.cxx index 65d0aa7..65d0aa7 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/hello/hello.cxx +++ b/tests/common/libhello-1.0.0/hello/hello.cxx diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/manifest b/tests/common/libhello-1.0.0/manifest index 75dc91b..75dc91b 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/manifest +++ b/tests/common/libhello-1.0.0/manifest diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/build/bootstrap.build b/tests/common/libhello-1.0.0/tests/build/bootstrap.build index 2c2de24..2c2de24 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/build/bootstrap.build +++ b/tests/common/libhello-1.0.0/tests/build/bootstrap.build diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/build/root.build b/tests/common/libhello-1.0.0/tests/build/root.build index de723b8..de723b8 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/build/root.build +++ b/tests/common/libhello-1.0.0/tests/build/root.build diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/buildfile b/tests/common/libhello-1.0.0/tests/buildfile index 4dcbe2a..4dcbe2a 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/buildfile +++ b/tests/common/libhello-1.0.0/tests/buildfile diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/buildfile b/tests/common/libhello-1.0.0/tests/test/buildfile index a46969d..a46969d 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/buildfile +++ b/tests/common/libhello-1.0.0/tests/test/buildfile diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/driver.cxx b/tests/common/libhello-1.0.0/tests/test/driver.cxx index 59bfb2d..59bfb2d 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/driver.cxx +++ b/tests/common/libhello-1.0.0/tests/test/driver.cxx diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/test.out b/tests/common/libhello-1.0.0/tests/test/test.out index 8ab686e..8ab686e 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/tests/test/test.out +++ b/tests/common/libhello-1.0.0/tests/test/test.out diff --git a/tests/pkg/1/build2.org/common/libhello-1.0.0/version b/tests/common/libhello-1.0.0/version index 3eefcb9..3eefcb9 100644 --- a/tests/pkg/1/build2.org/common/libhello-1.0.0/version +++ b/tests/common/libhello-1.0.0/version diff --git a/tests/pkg/1/build2.org/satisfy/libbar-1.0.0.tar.gz b/tests/common/satisfy/libbar-1.0.0.tar.gz Binary files differindex 5dc3a9b..5dc3a9b 100644 --- a/tests/pkg/1/build2.org/satisfy/libbar-1.0.0.tar.gz +++ b/tests/common/satisfy/libbar-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libbar-1.1.0.tar.gz b/tests/common/satisfy/libbar-1.1.0.tar.gz Binary files differindex 881292e..881292e 100644 --- a/tests/pkg/1/build2.org/satisfy/libbar-1.1.0.tar.gz +++ b/tests/common/satisfy/libbar-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libbar-1.2.0.tar.gz b/tests/common/satisfy/libbar-1.2.0.tar.gz Binary files differindex 4572395..4572395 100644 --- a/tests/pkg/1/build2.org/satisfy/libbar-1.2.0.tar.gz +++ b/tests/common/satisfy/libbar-1.2.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libbaz-1.0.0.tar.gz b/tests/common/satisfy/libbaz-1.0.0.tar.gz Binary files differindex 1de32b2..1de32b2 100644 --- a/tests/pkg/1/build2.org/satisfy/libbaz-1.0.0.tar.gz +++ b/tests/common/satisfy/libbaz-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libbaz-1.1.0.tar.gz b/tests/common/satisfy/libbaz-1.1.0.tar.gz Binary files differindex 1aa72a8..1aa72a8 100644 --- a/tests/pkg/1/build2.org/satisfy/libbaz-1.1.0.tar.gz +++ b/tests/common/satisfy/libbaz-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libbiz-1.0.0.tar.gz b/tests/common/satisfy/libbiz-1.0.0.tar.gz Binary files differindex 42e3db4..42e3db4 100644 --- a/tests/pkg/1/build2.org/satisfy/libbiz-1.0.0.tar.gz +++ b/tests/common/satisfy/libbiz-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libfoo-0.0.1.tar.gz b/tests/common/satisfy/libfoo-0.0.1.tar.gz Binary files differindex 2ab5094..2ab5094 100644 --- a/tests/pkg/1/build2.org/satisfy/libfoo-0.0.1.tar.gz +++ b/tests/common/satisfy/libfoo-0.0.1.tar.gz diff --git a/tests/pkg/1/build2.org/auth/libfoo-1.0.0.tar.gz b/tests/common/satisfy/libfoo-1.0.0.tar.gz Binary files differindex 28a6a90..28a6a90 100644 --- a/tests/pkg/1/build2.org/auth/libfoo-1.0.0.tar.gz +++ b/tests/common/satisfy/libfoo-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/depend/stable/libfoo-1.1.0.tar.gz b/tests/common/satisfy/libfoo-1.1.0.tar.gz Binary files differindex e03481f..e03481f 100644 --- a/tests/pkg/1/build2.org/depend/stable/libfoo-1.1.0.tar.gz +++ b/tests/common/satisfy/libfoo-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/build/bootstrap.build b/tests/common/satisfy/libfoo-1.1.0/build/bootstrap.build index b24ee6a..b24ee6a 100644 --- a/tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/build/bootstrap.build +++ b/tests/common/satisfy/libfoo-1.1.0/build/bootstrap.build diff --git a/tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/buildfile b/tests/common/satisfy/libfoo-1.1.0/buildfile index 9f80de9..9f80de9 100644 --- a/tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/buildfile +++ b/tests/common/satisfy/libfoo-1.1.0/buildfile diff --git a/tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/manifest b/tests/common/satisfy/libfoo-1.1.0/manifest index 3453757..3453757 100644 --- a/tests/pkg/1/build2.org/satisfy/libfoo-1.1.0/manifest +++ b/tests/common/satisfy/libfoo-1.1.0/manifest diff --git a/tests/pkg/1/build2.org/satisfy/libfoo-1.2.0.tar.gz b/tests/common/satisfy/libfoo-1.2.0.tar.gz Binary files differindex 80ce03b..80ce03b 100644 --- a/tests/pkg/1/build2.org/satisfy/libfoo-1.2.0.tar.gz +++ b/tests/common/satisfy/libfoo-1.2.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libfox-1.0.0.tar.gz b/tests/common/satisfy/libfox-1.0.0.tar.gz Binary files differindex 9ba7a31..9ba7a31 100644 --- a/tests/pkg/1/build2.org/satisfy/libfox-1.0.0.tar.gz +++ b/tests/common/satisfy/libfox-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/auth/unsigned1/repositories b/tests/common/satisfy/repositories index 5b70556..5b70556 100644 --- a/tests/pkg/1/build2.org/auth/unsigned1/repositories +++ b/tests/common/satisfy/repositories diff --git a/tests/pkg/1/build2.org/auth/create-expired/libfoo-1.0.0.tar.gz b/tests/common/satisfy/t1/libfoo-1.0.0.tar.gz index 32e5a3c..32e5a3c 120000 --- a/tests/pkg/1/build2.org/auth/create-expired/libfoo-1.0.0.tar.gz +++ b/tests/common/satisfy/t1/libfoo-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/fetch/t1/repositories b/tests/common/satisfy/t1/repositories index d965b15..d965b15 120000 --- a/tests/pkg/1/build2.org/fetch/t1/repositories +++ b/tests/common/satisfy/t1/repositories diff --git a/tests/pkg/1/build2.org/satisfy/t2/libbar-1.0.0.tar.gz b/tests/common/satisfy/t2/libbar-1.0.0.tar.gz index 93e8c71..93e8c71 120000 --- a/tests/pkg/1/build2.org/satisfy/t2/libbar-1.0.0.tar.gz +++ b/tests/common/satisfy/t2/libbar-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/auth/create-noemail/libfoo-1.0.0.tar.gz b/tests/common/satisfy/t2/libfoo-1.0.0.tar.gz index 32e5a3c..32e5a3c 120000 --- a/tests/pkg/1/build2.org/auth/create-noemail/libfoo-1.0.0.tar.gz +++ b/tests/common/satisfy/t2/libfoo-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t1/repositories b/tests/common/satisfy/t2/repositories index d965b15..d965b15 120000 --- a/tests/pkg/1/build2.org/satisfy/t1/repositories +++ b/tests/common/satisfy/t2/repositories diff --git a/tests/pkg/1/build2.org/satisfy/t3/libbaz-1.0.0.tar.gz b/tests/common/satisfy/t3/libbaz-1.0.0.tar.gz index 189242a..189242a 120000 --- a/tests/pkg/1/build2.org/satisfy/t3/libbaz-1.0.0.tar.gz +++ b/tests/common/satisfy/t3/libbaz-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t3/libfox-1.0.0.tar.gz b/tests/common/satisfy/t3/libfox-1.0.0.tar.gz index dcfd7aa..dcfd7aa 120000 --- a/tests/pkg/1/build2.org/satisfy/t3/libfox-1.0.0.tar.gz +++ b/tests/common/satisfy/t3/libfox-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t3/repositories b/tests/common/satisfy/t3/repositories index d65b272..d65b272 100644 --- a/tests/pkg/1/build2.org/satisfy/t3/repositories +++ b/tests/common/satisfy/t3/repositories diff --git a/tests/pkg/1/build2.org/fetch/t1/libfoo-1.1.0.tar.gz b/tests/common/satisfy/t4a/libfoo-1.1.0.tar.gz index c004b2a..c004b2a 120000 --- a/tests/pkg/1/build2.org/fetch/t1/libfoo-1.1.0.tar.gz +++ b/tests/common/satisfy/t4a/libfoo-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t2/repositories b/tests/common/satisfy/t4a/repositories index d965b15..d965b15 120000 --- a/tests/pkg/1/build2.org/satisfy/t2/repositories +++ b/tests/common/satisfy/t4a/repositories diff --git a/tests/pkg/1/build2.org/satisfy/t4b/libbar-1.1.0.tar.gz b/tests/common/satisfy/t4b/libbar-1.1.0.tar.gz index b9a2de5..b9a2de5 120000 --- a/tests/pkg/1/build2.org/satisfy/t4b/libbar-1.1.0.tar.gz +++ b/tests/common/satisfy/t4b/libbar-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t4b/repositories b/tests/common/satisfy/t4b/repositories index 7b85e71..7b85e71 100644 --- a/tests/pkg/1/build2.org/satisfy/t4b/repositories +++ b/tests/common/satisfy/t4b/repositories diff --git a/tests/pkg/1/build2.org/satisfy/t4c/libbaz-1.1.0.tar.gz b/tests/common/satisfy/t4c/libbaz-1.1.0.tar.gz index 0edbce7..0edbce7 120000 --- a/tests/pkg/1/build2.org/satisfy/t4c/libbaz-1.1.0.tar.gz +++ b/tests/common/satisfy/t4c/libbaz-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/auth/expired/libfoo-1.0.0.tar.gz b/tests/common/satisfy/t4c/libfoo-1.0.0.tar.gz index 32e5a3c..32e5a3c 120000 --- a/tests/pkg/1/build2.org/auth/expired/libfoo-1.0.0.tar.gz +++ b/tests/common/satisfy/t4c/libfoo-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t4c/repositories b/tests/common/satisfy/t4c/repositories index 26c0e93..26c0e93 100644 --- a/tests/pkg/1/build2.org/satisfy/t4c/repositories +++ b/tests/common/satisfy/t4c/repositories diff --git a/tests/pkg/1/build2.org/satisfy/t4d/libbiz-1.0.0.tar.gz b/tests/common/satisfy/t4d/libbiz-1.0.0.tar.gz index 70c2fda..70c2fda 120000 --- a/tests/pkg/1/build2.org/satisfy/t4d/libbiz-1.0.0.tar.gz +++ b/tests/common/satisfy/t4d/libbiz-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t4d/libfox-1.0.0.tar.gz b/tests/common/satisfy/t4d/libfox-1.0.0.tar.gz index dcfd7aa..dcfd7aa 120000 --- a/tests/pkg/1/build2.org/satisfy/t4d/libfox-1.0.0.tar.gz +++ b/tests/common/satisfy/t4d/libfox-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t4d/repositories b/tests/common/satisfy/t4d/repositories index f0e1983..f0e1983 100644 --- a/tests/pkg/1/build2.org/satisfy/t4d/repositories +++ b/tests/common/satisfy/t4d/repositories diff --git a/tests/pkg/1/build2.org/satisfy/t5/libbar-1.2.0.tar.gz b/tests/common/satisfy/t5/libbar-1.2.0.tar.gz index b4a7773..b4a7773 120000 --- a/tests/pkg/1/build2.org/satisfy/t5/libbar-1.2.0.tar.gz +++ b/tests/common/satisfy/t5/libbar-1.2.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/t4a/repositories b/tests/common/satisfy/t5/repositories index d965b15..d965b15 120000 --- a/tests/pkg/1/build2.org/satisfy/t4a/repositories +++ b/tests/common/satisfy/t5/repositories diff --git a/tests/pkg/1/build2.org/depend/stable/libfoo-1.0.0.tar.gz b/tests/common/t1/libfoo-1.0.0.tar.gz Binary files differindex 28a6a90..28a6a90 100644 --- a/tests/pkg/1/build2.org/depend/stable/libfoo-1.0.0.tar.gz +++ b/tests/common/t1/libfoo-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/fetch/libfoo-1.1.0.tar.gz b/tests/common/t1/libfoo-1.1.0.tar.gz Binary files differindex e03481f..e03481f 100644 --- a/tests/pkg/1/build2.org/fetch/libfoo-1.1.0.tar.gz +++ b/tests/common/t1/libfoo-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/auth/unsigned2/repositories b/tests/common/t1/repositories index 5b70556..5b70556 100644 --- a/tests/pkg/1/build2.org/auth/unsigned2/repositories +++ b/tests/common/t1/repositories diff --git a/tests/config.test b/tests/config.test new file mode 100644 index 0000000..c40d24b --- /dev/null +++ b/tests/config.test @@ -0,0 +1,27 @@ +# file : tests/config.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Create an empty configuration that will be copied by subsequent tests and +# scopes setup commands. The common approach will be that group scopes copy and +# modify the parent scope configuration as required by the nested tests and +# scopes. Tests will also clone the parent scope configuration to optionally +# modify it, use and cleanup at the end. Note that configuration can not be +# shared between multiple bpkg processes. Also we need to make sure that +# configurations are not cloned while being used by bpkg. +# ++$cfg_create -d cfg 2>- &cfg/*** + +# The most commonly used configuration cloning command that copies it from the +# parent scope working directory. +# +clone_cfg = cp -r ../cfg ./ + +# Clones the original (presumably empty) configuration from the root scope +# working directory. +# +clone_root_cfg = cp -r $~/cfg ./ + +# Setup a test command to use a cloned configuration directory by default. +# +test.arguments += -d cfg diff --git a/tests/pkg-build.test b/tests/pkg-build.test new file mode 100644 index 0000000..763574b --- /dev/null +++ b/tests/pkg-build.test @@ -0,0 +1,1239 @@ +# file : tests/pkg-build.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test config.test remote.test + +# Source repository: +# +# pkg-build +# |-- libbar-1.0.0.tar.gz +# |-- libbaz-1.1.0.tar.gz +# |-- libfoo-0.0.1.tar.gz +# |-- libfoo-1.0.0.tar.gz +# |-- libfoo-1.1.0 +# | |-- build +# | | `-- bootstrap.build +# | |-- buildfile +# | `-- manifest +# |-- libfoo-1.1.0.tar.gz +# |-- libfoo-1.2.0.tar.gz +# |-- t1 +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# |-- t2 +# | |-- libbar-1.0.0.tar.gz -> libfoo +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# |-- t3 -> t2 (prerequisite) +# | |-- libbaz-1.0.0.tar.gz -> libbar +# | |-- libfox-1.0.0.tar.gz +# | `-- repositories +# |-- t4a +# | |-- libfoo-1.1.0.tar.gz +# | `-- repositories +# |-- t4b -> t4a (prerequisite) +# | |-- libbar-1.1.0.tar.gz -> libfoo == 1.1.0 +# | `-- repositories +# |-- t4c -> t4b (prerequisite) +# | |-- libbaz-1.1.0.tar.gz -> libfoo, libbar +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# |-- t4d -> t4c (prerequisite) +# | |-- libbiz-1.0.0.tar.gz -> libfox, libfoo, libbaz +# | |-- libfox-1.0.0.tar.gz +# | `-- repositories +# `-- t5 +# |-- libbar-1.2.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages + cp -r $src/t2 $out/t2 && $rep_create $out/t2 &$out/t2/packages + cp -r $src/t3 $out/t3 && $rep_create $out/t3 &$out/t3/packages + cp -r $src/t4a $out/t4a && $rep_create $out/t4a &$out/t4a/packages + cp -r $src/t4b $out/t4b && $rep_create $out/t4b &$out/t4b/packages + cp -r $src/t4c $out/t4c && $rep_create $out/t4c &$out/t4c/packages + cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages + cp -r $src/t5 $out/t5 && $rep_create $out/t5 &$out/t5/packages +end + +pkg_configure += -d cfg "config.cxx=$config.cxx" 2>- +pkg_disfigure += -d cfg +pkg_fetch += -d cfg 2>- +pkg_purge += -d cfg +pkg_status += -d cfg +pkg_unpack += -d cfg 2>- +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all --trust-yes 2>- + +: libfoo +: +: Test building different versions of libfoo. +: +{ + test.arguments += --print-only + + : no-name + : + $clone_root_cfg; + $* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-build' for more information + EOE + + : unknown-package + : + $clone_root_cfg; + $* libfoo 2>>/EOE != 0 + error: unknown package libfoo + info: configuration cfg/ has no repositories + info: use 'bpkg rep-add' to add a repository + EOE + + : unknown-package-ver + : + $clone_root_cfg; + $* libfoo/1.0.0 2>>/EOE != 0 + error: unknown package libfoo + info: configuration cfg/ has no repositories + info: use 'bpkg rep-add' to add a repository + EOE + + : archive + : + $clone_root_cfg; + $* $src/libfoo-1.1.0.tar.gz >'build libfoo/1.1.0' + + : dir + : + $clone_root_cfg; + $* $src/libfoo-1.1.0/ >'build libfoo/1.1.0' + + : unpacked-dir + : + { + $clone_root_cfg && $pkg_unpack -e $src/libfoo-1.1.0; + + $* libfoo >'build libfoo/1.1.0'; + $* libfoo/1.1.0 >'build libfoo/1.1.0'; + $* libfoo libfoo >'build libfoo/1.1.0'; + + $* libfoo libfoo/1.1.0 2>>EOE != 0; + error: duplicate package libfoo + info: first mentioned as libfoo + info: second mentioned as libfoo/1.1.0 + EOE + + $* libfoo/1.1.0 libfoo 2>>EOE != 0; + error: duplicate package libfoo + info: first mentioned as libfoo/1.1.0 + info: second mentioned as libfoo + EOE + + $* libfoo/1.1.0 libfoo/1.1.0 >'build libfoo/1.1.0'; + + $* libfoo/1.0.0 2>>/EOE != 0; + error: unknown package libfoo + info: configuration cfg/ has no repositories + info: use 'bpkg rep-add' to add a repository + EOE + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : t1 + : + { + +$clone_root_cfg && $rep_add $rep/t1 && $rep_fetch + + : downgrade + : + { + $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; + + $* libfoo >'build libfoo/1.1.0'; + $* libfoo/1.0.0 >'downgrade libfoo/1.0.0'; + + $* libfoo/0.0.1 2>>EOE != 0; + error: libfoo/0.0.1 is not available in source + info: specify sys:libfoo/0.0.1 if it is available from the system + EOE + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : upgrade + : + { + $clone_cfg; + $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; + + $* libfoo >'upgrade libfoo/1.0.0'; + $* libfoo/0.0.1 >'build libfoo/0.0.1'; + + $* libfoo/1.1.0 2>>EOE != 0; + error: libfoo/1.1.0 is not available in source + info: specify sys:libfoo/1.1.0 if it is available from the system + EOE + + $pkg_purge libfoo 2>'purged libfoo/0.0.1' + } + + : upgrade-failure + : + { + $clone_cfg; + + $* libfoo >'build libfoo/1.0.0'; + $* libfoo/1.0.0 >'build libfoo/1.0.0'; + + $* libfoo/1.1.0 2>>EOE != 0 + error: libfoo/1.1.0 is not available in source + info: specify sys:libfoo/1.1.0 if it is available from the system + EOE + } + } +} + +: libbar-libfoo +: +: Test building libbar that depends on libfoo. +: +{ + test.arguments += --print-only + + : unknown-prerequisite + : + $clone_root_cfg; + $* $src/libbar-1.0.0.tar.gz 2>>EOE != 0 + error: unknown prerequisite libfoo of package libbar + info: while satisfying libbar/1.0.0 + EOE + + : t2 + : + { + +$clone_root_cfg && $rep_add $rep/t2 && $rep_fetch + + : build-prerequisite + : + { + $clone_cfg; + + $* libbar >>EOO; + build libfoo/1.0.0 (required by libbar) + build libbar/1.0.0 + EOO + + $* libbar libfoo >>EOO; + build libfoo/1.0.0 + build libbar/1.0.0 + EOO + + $* libbar libfoo/1.0.0 >>EOO; + build libfoo/1.0.0 + build libbar/1.0.0 + EOO + + $* libbar libfoo libbar/1.0.0 2>>EOE != 0; + error: duplicate package libbar + info: first mentioned as libbar + info: second mentioned as libbar/1.0.0 + EOE + + $* libbar libfoo/1.1.0 2>>EOE != 0 + error: libfoo/1.1.0 is not available in source + info: specify sys:libfoo/1.1.0 if it is available from the system + EOE + } + + : upgrade-prerequisite + : + { + $clone_cfg; + $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; + + $* libbar >>EOO; + build libfoo/0.0.1 (required by libbar) + build libbar/1.0.0 + EOO + + $* libbar libfoo >>EOO; + upgrade libfoo/1.0.0 + build libbar/1.0.0 + EOO + + $* libbar libfoo/0.0.1 >>EOO; + build libfoo/0.0.1 + build libbar/1.0.0 + EOO + + $pkg_purge libfoo 2>'purged libfoo/0.0.1' + } + + : downgrade-prerequisite + : + { + $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; + + $* libbar >>EOO; + build libfoo/1.1.0 (required by libbar) + build libbar/1.0.0 + EOO + + $* libbar libfoo >>EOO; + build libfoo/1.1.0 + build libbar/1.0.0 + EOO + + $* libbar libfoo/1.0.0 >>EOO; + downgrade libfoo/1.0.0 + build libbar/1.0.0 + EOO + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + } +} + +: libbaz-libbar +: +: Test building libbaz that depends on libbar; libbar is in prerequisite +: repository. +: +{ + test.arguments += --print-only + + : t3 + : + { + +$clone_root_cfg && $rep_add $rep/t3 && $rep_fetch + + : prerequisites-build-failure + : + : Fail to build packages that are only in prerequisite repository. + : + { + $clone_cfg; + + $* libfoo 2>>EOE != 0; + error: unknown package libfoo + EOE + + $* libbar 2>>EOE != 0; + error: unknown package libbar + EOE + + $* libbaz libbar 2>>EOE != 0 + error: unknown package libbar + EOE + } + + : prerequisites-build + : + $clone_cfg; + $* libbaz >>EOO + build libfoo/1.0.0 (required by libbar) + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : different-build-order + : + { + +$clone_cfg && $rep_add $rep/t2 && $rep_fetch + + : fox-foo + : + $clone_cfg; + $* libfox libfoo >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 + EOO + + : foo-fox + : + $clone_cfg; + $* libfoo libfox >>EOO + build libfoo/1.0.0 + build libfox/1.0.0 + EOO + + : baz-foo + : + $clone_cfg; + $* libbaz libfoo >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : foo-baz + : + $clone_cfg; + $* libfoo libbaz >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : baz-fox + : + $clone_cfg; + $* libbaz libfox >>EOO + build libfoo/1.0.0 (required by libbar) + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + build libfox/1.0.0 + EOO + + : fox-baz + : + $clone_cfg; + $* libfox libbaz >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 (required by libbar) + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : fox-foo-baz + : + $clone_cfg; + $* libfox libfoo libbaz >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : fox-baz-foo + : + $clone_cfg; + $* libfox libbaz libfoo >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : foo-fox-baz + : + $clone_cfg; + $* libfoo libfox libbaz >>EOO + build libfoo/1.0.0 + build libfox/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : foo-baz-fox + : + $clone_cfg; + $* libfoo libbaz libfox >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + build libfox/1.0.0 + EOO + + : baz-fox-foo + : + : This one is contradictory: baz before fox but fox before foo. + : + $clone_cfg; + $* libbaz libfox libfoo >>EOO + build libfox/1.0.0 + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + EOO + + : baz-foo-fox + : + $clone_cfg; + $* libbaz libfoo libfox >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 (required by libbaz) + build libbaz/1.0.0 + build libfox/1.0.0 + EOO + + : baz-foo-bar + : + $clone_cfg; + $* libbaz libfoo libbar >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 + build libbaz/1.0.0 + EOO + + : baz-bar-foo + : + $clone_cfg; + $* libbaz libbar libfoo >>EOO + build libfoo/1.0.0 + build libbar/1.0.0 + build libbaz/1.0.0 + EOO + } + } +} + +: libbaz-libfoo-libbar +: +: Test building libbaz that depends on libfoo and libbar; libbar depends on +: libfoo >= 1.1.0. +: +{ + test.arguments += --print-only + + : t4c + : + { + +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch + + : baz + : + $clone_cfg; + $* libbaz >>EOO + build libfoo/1.1.0 (required by libbar libbaz) + build libbar/1.1.0 (required by libbaz) + build libbaz/1.1.0 + EOO + + : foo-baz + : + $clone_cfg; + $* libfoo libbaz >>EOO + build libfoo/1.1.0 + build libbar/1.1.0 (required by libbaz) + build libbaz/1.1.0 + EOO + + : unable-satisfy + : + $clone_cfg; + $* libfoo/1.0.0 libbaz 2>>EOE != 0 + error: unable to satisfy constraints on package libfoo + info: libbar depends on (libfoo == 1.1.0) + info: command line depends on (libfoo == 1.0.0) + info: available libfoo/1.1.0 + info: available libfoo/1.0.0 + info: explicitly specify libfoo version to manually satisfy both constraints + info: while satisfying libbar/1.1.0 + info: while satisfying libbaz/1.1.0 + EOE + + : not-available + : + $clone_cfg; + $* libfoo/1.1.0 libbaz 2>>EOE != 0 + error: libfoo/1.1.0 is not available in source + info: specify sys:libfoo/1.1.0 if it is available from the system + EOE + + : upgrade-warning + : + { + $clone_cfg; + $pkg_fetch -e $src/libfoo-0.0.1.tar.gz && $pkg_unpack libfoo; + + $* libbaz >>EOO 2>>EOE; + upgrade libfoo/1.1.0 (required by libbar libbaz) + build libbar/1.1.0 (required by libbaz) + build libbaz/1.1.0 + EOO + warning: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/0.0.1 to 1.1.0 + EOE + + $pkg_purge libfoo 2>'purged libfoo/0.0.1' + } + + : downgrade-error + : + { + $clone_cfg; + $pkg_fetch -e $src/libfoo-1.2.0.tar.gz && $pkg_unpack libfoo; + + $* libbaz 2>>EOE != 0; + error: package libbar dependency on (libfoo == 1.1.0) is forcing downgrade of libfoo/1.2.0 to 1.1.0 + info: explicitly request version downgrade to continue + info: while satisfying libbar/1.1.0 + info: while satisfying libbaz/1.1.0 + EOE + + $rep_add $rep/t4a && $rep_fetch; + + $* libfoo/1.1.0 libbaz >>EOO; + downgrade libfoo/1.1.0 + build libbar/1.1.0 (required by libbaz) + build libbaz/1.1.0 + EOO + + $pkg_purge libfoo 2>'purged libfoo/1.2.0' + } + + : unable-downgrade + : + : Test that dependent prevents up/downgrade that would break dependency + : constraints. + : + { + $clone_cfg; + $pkg_fetch libfoo/1.1.0 && $pkg_unpack libfoo && $pkg_configure libfoo; + $pkg_fetch libbar/1.1.0 && $pkg_unpack libbar && $pkg_configure libbar; + + $* libfoo-1.2.0.tar.gz 2>>EOE != 0; + error: unknown package libfoo-1.2.0.tar.gz + EOE + + $* libfoo/1.0.0 2>>EOE != 0; + error: unable to downgrade package libfoo/1.1.0 to 1.0.0 + info: because package libbar depends on (libfoo == 1.1.0) + info: explicitly request up/downgrade of package libbar + info: or explicitly specify package libfoo version to manually satisfy these constraints + EOE + + $* libfoo/1.1.0 >'build libfoo/1.1.0'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + } + + : dependent-reconfiguration + : + { + +$clone_root_cfg + + +$pkg_fetch -e $src/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo + +$pkg_configure libfoo + + +$pkg_fetch -e $src/libbar-1.0.0.tar.gz && $pkg_unpack libbar + +$pkg_configure libbar + + +$pkg_fetch -e $src/libbaz-1.1.0.tar.gz && $pkg_unpack libbaz + +$pkg_configure libbaz + + +$rep_add $rep/t4a && $rep_add $rep/t4b && $rep_fetch + + : bar + : + $clone_cfg; + $* libbar >>EOO 2>>EOE + upgrade libfoo/1.1.0 (required by libbar libbaz) + upgrade libbar/1.1.0 + reconfigure libbaz (dependent of libbar) + EOO + warning: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 + EOE + + : foo + : + $clone_cfg; + $* libfoo >>EOO + upgrade libfoo/1.1.0 + reconfigure libbar (dependent of libfoo) + reconfigure libbaz (dependent of libbar) + EOO + + : foo-bar + : + $clone_cfg; + $* libfoo libbar/1.0.0 >>EOO + upgrade libfoo/1.1.0 + reconfigure/build libbar/1.0.0 + reconfigure libbaz (dependent of libbar) + EOO + + : bar-foo + : + $clone_cfg; + $* libbar/1.0.0 libfoo >>EOO + upgrade libfoo/1.1.0 + reconfigure/build libbar/1.0.0 + reconfigure libbaz (dependent of libbar) + EOO + + : baz-foo + : + $clone_cfg; + $* libbaz libfoo >>EOO + upgrade libfoo/1.1.0 + reconfigure libbar (dependent of libbaz libfoo) + reconfigure/build libbaz/1.1.0 + EOO + + : baz-foo-1.0.0 + : + $clone_cfg; + $* libbaz libfoo/1.0.0 >>EOO + build libfoo/1.0.0 + build libbaz/1.1.0 + EOO + + -$pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0' + -$pkg_purge libbaz 2>'purged libbaz/1.1.0' + + -$pkg_disfigure libbar 2>'disfigured libbar/1.0.0' + -$pkg_purge libbar 2>'purged libbar/1.0.0' + + -$pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0' + -$pkg_purge libfoo 2>'purged libfoo/1.0.0' + } +} + +# Note that when we fetch a package from remote repository the bpkg stderr +# contains fetch program progress output, that comes prior the informational +# message. +# + +: actual-build +: +{ + test.arguments += --yes + + : wth-prerequisites + : + { + $clone_root_cfg && $rep_add $rep/t4c && $rep_fetch; + + $* libbaz 2>>~%EOE%; + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + %.* + %.*fetched libbar/1.1.0% + unpacked libbar/1.1.0 + %.* + %.*fetched libbaz/1.1.0% + unpacked libbaz/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.1.0 + configured libbaz/1.1.0 + %info: dir.+libbaz-1.1.0.+ is up to date% + updated libbaz/1.1.0 + EOE + + $pkg_status libfoo/1.1.0 >'configured; available'; + $pkg_status libbar/1.1.0 >'configured'; + $pkg_status libbaz/1.1.0 >'configured hold_package; available'; + + $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; + $pkg_purge libbaz 2>'purged libbaz/1.1.0'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : hold-fs-fetched + : + { + : direct + : + { + $clone_root_cfg; + + $* $src/libfoo-1.0.0.tar.gz 2>>~%EOE%; + fetched libfoo/1.0.0 + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package hold_version'; + + $* $src/libfoo-1.1.0/ 2>>~%EOE%; + disfigured libfoo/1.0.0 + unpacked libfoo/1.1.0 + configured libfoo/1.1.0 + %info: dir.+libfoo-1.1.0.+ is up to date% + updated libfoo/1.1.0 + EOE + + $pkg_status libfoo >'configured 1.1.0 hold_package hold_version'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : pre-fetch + : + { + $clone_root_cfg; + $pkg_fetch -e $src/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo; + $pkg_configure libfoo; + + $pkg_status libfoo >'configured 1.0.0'; + + $* libfoo 2>>~%EOE%; + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + } + + : hold-repo-fetched + : + { + +$clone_root_cfg && $rep_add $rep/t4c && $rep_fetch + + : package-version + : + { + $clone_cfg; + + $* libfoo 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package; available sys:?'; + + $* libfoo/1.0.0 2>>~%EOE%; + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package hold_version; available sys:?'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + + : version + : + { + $clone_cfg; + + $* libfoo/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package hold_version; available sys:?'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + + : not-held + : + { + $clone_cfg; + + $* libbaz 2>>~%EOE%; + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + %.* + %.*fetched libbar/1.1.0% + unpacked libbar/1.1.0 + %.* + %.*fetched libbaz/1.1.0% + unpacked libbaz/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.1.0 + configured libbaz/1.1.0 + %info: dir.+libbaz-1.1.0.+ is up to date% + updated libbaz/1.1.0 + EOE + + $pkg_status libfoo >'configured 1.1.0; available sys:?'; + + $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; + $pkg_purge libbaz 2>'purged libbaz/1.1.0'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : forcing-upgrade-unheld + : + { + $clone_cfg; + + $* libfoo 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package; available sys:?'; + + $* libbaz 2>>~%EOE%; + warning: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 + disfigured libfoo/1.0.0 + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + %.* + %.*fetched libbar/1.1.0% + unpacked libbar/1.1.0 + %.* + %.*fetched libbaz/1.1.0% + unpacked libbaz/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.1.0 + configured libbaz/1.1.0 + %info: dir.+libbaz-1.1.0.+ is up to date% + updated libbaz/1.1.0 + EOE + + $pkg_status libfoo >'configured 1.1.0 hold_package; available sys:?'; + + $pkg_disfigure libbaz 2>'disfigured libbaz/1.1.0'; + $pkg_purge libbaz 2>'purged libbaz/1.1.0'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : forcing-upgrade-held + : + { + $clone_cfg; + + $* libfoo/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + configured libfoo/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + updated libfoo/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package hold_version; available sys:?'; + + $* libbaz 2>>EOE != 0; + error: package libbar dependency on (libfoo == 1.1.0) is forcing upgrade of libfoo/1.0.0 to 1.1.0 + info: package version libfoo/1.0.0 is held + info: explicitly request version upgrade to continue + info: while satisfying libbar/1.1.0 + info: while satisfying libbaz/1.1.0 + EOE + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + } + + : drop-prerequisites + : + { + $clone_root_cfg && $rep_add $rep/t2 && $rep_fetch; + + $* libbar 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: dir.+libbar-1.0.0.+ is up to date% + updated libbar/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0; available sys:?'; + $pkg_status libbar >'configured 1.0.0 hold_package; available sys:?'; + + $rep_add $rep/t5 && $rep_fetch; + + $* libbar 2>>~%EOE%; + disfigured libbar/1.0.0 + %.* + %.*fetched libbar/1.2.0% + unpacked libbar/1.2.0 + configured libbar/1.2.0 + disfigured libfoo + purged libfoo + %info: dir.+libbar-1.2.0.+ is up to date% + updated libbar/1.2.0 + EOE + + $pkg_status libfoo >'available 1.0.0 sys:?'; + $pkg_status libbar >'configured 1.2.0 hold_package; available sys:?'; + + $* libbar/1.0.0 libfoo 2>>~%EOE%; + disfigured libbar/1.2.0 + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: dir.+libfoo-1.0.0.+ is up to date% + %info: dir.+libbar-1.0.0.+ is up to date% + updated libfoo/1.0.0 + updated libbar/1.0.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package; available sys:?'; + $pkg_status libbar >'configured 1.0.0 hold_package hold_version; available 1.2.0 sys:?'; + + $* libbar 2>>~%EOE%; + disfigured libbar/1.0.0 + %.* + %.*fetched libbar/1.2.0% + unpacked libbar/1.2.0 + configured libbar/1.2.0 + %info: dir.+libbar-1.2.0.+ is up to date% + updated libbar/1.2.0 + EOE + + $pkg_status libfoo >'configured 1.0.0 hold_package; available sys:?'; + $pkg_status libbar >'configured 1.2.0 hold_package; available sys:?'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; + $pkg_purge libbar 2>'purged libbar/1.2.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } +} + +: prerequisite +: +{ + +$clone_cfg + +$rep_add $rep/t2 && $rep_add $rep/t5 && $rep_fetch + + : drop + : + : Test --drop-prerequisite option. + : + { + $clone_cfg; + + $* --yes libbar/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: dir.+ is up to date% + updated libbar/1.0.0 + EOE + + $* --drop-prerequisite libbar/1.2.0 <'y' 2>>~%EOE%; + upgrade libbar/1.2.0 + continue? [Y/n] disfigured libbar/1.0.0 + %.* + %.*fetched libbar/1.2.0% + unpacked libbar/1.2.0 + configured libbar/1.2.0 + disfigured libfoo + purged libfoo + %info: .+ is up to date% + updated libbar/1.2.0 + EOE + + $pkg_status libfoo >'available 1.0.0 sys:?'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; + $pkg_purge libbar 2>'purged libbar/1.2.0' + } + + : keep + : + : Test --keep-prerequisite option. + : + { + $clone_cfg; + + $* --yes libbar/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: dir.+ is up to date% + updated libbar/1.0.0 + EOE + + $* --keep-prerequisite libbar/1.2.0 <'y' 2>>~%EOE%; + upgrade libbar/1.2.0 + continue? [Y/n] disfigured libbar/1.0.0 + %.* + %.*fetched libbar/1.2.0% + unpacked libbar/1.2.0 + configured libbar/1.2.0 + %info: .+ is up to date% + updated libbar/1.2.0 + EOE + + $pkg_status libfoo >'configured 1.0.0; available sys:?'; + + $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; + $pkg_purge libbar 2>'purged libbar/1.2.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } +} + +: dependent +: +{ + +$clone_cfg + +$rep_add $rep/t2 && $rep_fetch + + : update + : + : Test --update-dependent option. + : + { + $clone_cfg; + + $* --yes libbar 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: .+ is up to date% + updated libbar/1.0.0 + EOE + + $rep_add $rep/t4a && $rep_fetch; + + $* --update-dependent libfoo/1.1.0 <'y' 2>>~%EOE%; + upgrade libfoo/1.1.0 + reconfigure libbar (dependent of libfoo) + continue? [Y/n] disfigured libbar/1.0.0 + disfigured libfoo/1.0.0 + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.0.0 + %info: .+ is up to date% + %info: .+ is up to date% + updated libfoo/1.1.0 + updated libbar/1.0.0 + EOE + + $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; + $pkg_purge libbar 2>'purged libbar/1.0.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : leave + : + : Test --leave-dependent option. + : + { + $clone_cfg; + + $* --yes libbar 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + %info: .+ is up to date% + updated libbar/1.0.0 + EOE + + $rep_add $rep/t4a && $rep_fetch; + + $* --leave-dependent libfoo/1.1.0 <'y' 2>>~%EOE%; + upgrade libfoo/1.1.0 + reconfigure libbar (dependent of libfoo) + continue? [Y/n] disfigured libbar/1.0.0 + disfigured libfoo/1.0.0 + %.* + %.*fetched libfoo/1.1.0% + unpacked libfoo/1.1.0 + configured libfoo/1.1.0 + configured libbar/1.0.0 + %info: .+ is up to date% + updated libfoo/1.1.0 + EOE + + $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; + $pkg_purge libbar 2>'purged libbar/1.0.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } +} + +: configure-only +: +: Test --configure-only option. +: +{ + $clone_cfg; + $rep_add $rep/t2 && $rep_fetch; + + $* --configure-only --yes libbar 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + unpacked libfoo/1.0.0 + %.* + %.*fetched libbar/1.0.0% + unpacked libbar/1.0.0 + configured libfoo/1.0.0 + configured libbar/1.0.0 + EOE + + $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; + $pkg_purge libbar 2>'purged libbar/1.0.0'; + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' +} diff --git a/tests/pkg-build/libbar-1.0.0.tar.gz b/tests/pkg-build/libbar-1.0.0.tar.gz new file mode 120000 index 0000000..643487e --- /dev/null +++ b/tests/pkg-build/libbar-1.0.0.tar.gz @@ -0,0 +1 @@ +../common/satisfy/libbar-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg-build/libbaz-1.1.0.tar.gz b/tests/pkg-build/libbaz-1.1.0.tar.gz new file mode 120000 index 0000000..c3a33c8 --- /dev/null +++ b/tests/pkg-build/libbaz-1.1.0.tar.gz @@ -0,0 +1 @@ +../common/satisfy/libbaz-1.1.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg-build/libfoo-0.0.1.tar.gz b/tests/pkg-build/libfoo-0.0.1.tar.gz new file mode 120000 index 0000000..0f1802e --- /dev/null +++ b/tests/pkg-build/libfoo-0.0.1.tar.gz @@ -0,0 +1 @@ +../common/satisfy/libfoo-0.0.1.tar.gz
\ No newline at end of file diff --git a/tests/pkg-build/libfoo-1.0.0.tar.gz b/tests/pkg-build/libfoo-1.0.0.tar.gz new file mode 120000 index 0000000..4f215aa --- /dev/null +++ b/tests/pkg-build/libfoo-1.0.0.tar.gz @@ -0,0 +1 @@ +../common/satisfy/libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg-build/libfoo-1.1.0 b/tests/pkg-build/libfoo-1.1.0 new file mode 120000 index 0000000..c991a82 --- /dev/null +++ b/tests/pkg-build/libfoo-1.1.0 @@ -0,0 +1 @@ +../common/satisfy/libfoo-1.1.0
\ No newline at end of file diff --git a/tests/pkg-build/libfoo-1.1.0.tar.gz b/tests/pkg-build/libfoo-1.1.0.tar.gz new file mode 120000 index 0000000..4c8bb75 --- /dev/null +++ b/tests/pkg-build/libfoo-1.1.0.tar.gz @@ -0,0 +1 @@ +../common/satisfy/libfoo-1.1.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg-build/libfoo-1.2.0.tar.gz b/tests/pkg-build/libfoo-1.2.0.tar.gz new file mode 120000 index 0000000..a6cc8b7 --- /dev/null +++ b/tests/pkg-build/libfoo-1.2.0.tar.gz @@ -0,0 +1 @@ +../common/satisfy/libfoo-1.2.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg-build/t1 b/tests/pkg-build/t1 new file mode 120000 index 0000000..c7c69d2 --- /dev/null +++ b/tests/pkg-build/t1 @@ -0,0 +1 @@ +../common/satisfy/t1
\ No newline at end of file diff --git a/tests/pkg-build/t2 b/tests/pkg-build/t2 new file mode 120000 index 0000000..0f8869b --- /dev/null +++ b/tests/pkg-build/t2 @@ -0,0 +1 @@ +../common/satisfy/t2
\ No newline at end of file diff --git a/tests/pkg-build/t3 b/tests/pkg-build/t3 new file mode 120000 index 0000000..df69aba --- /dev/null +++ b/tests/pkg-build/t3 @@ -0,0 +1 @@ +../common/satisfy/t3
\ No newline at end of file diff --git a/tests/pkg-build/t4a b/tests/pkg-build/t4a new file mode 120000 index 0000000..47997b2 --- /dev/null +++ b/tests/pkg-build/t4a @@ -0,0 +1 @@ +../common/satisfy/t4a
\ No newline at end of file diff --git a/tests/pkg-build/t4b b/tests/pkg-build/t4b new file mode 120000 index 0000000..917299c --- /dev/null +++ b/tests/pkg-build/t4b @@ -0,0 +1 @@ +../common/satisfy/t4b
\ No newline at end of file diff --git a/tests/pkg-build/t4c b/tests/pkg-build/t4c new file mode 120000 index 0000000..06b7611 --- /dev/null +++ b/tests/pkg-build/t4c @@ -0,0 +1 @@ +../common/satisfy/t4c
\ No newline at end of file diff --git a/tests/pkg-build/t4d b/tests/pkg-build/t4d new file mode 120000 index 0000000..56dc0f7 --- /dev/null +++ b/tests/pkg-build/t4d @@ -0,0 +1 @@ +../common/satisfy/t4d
\ No newline at end of file diff --git a/tests/pkg-build/t5 b/tests/pkg-build/t5 new file mode 120000 index 0000000..58fcea2 --- /dev/null +++ b/tests/pkg-build/t5 @@ -0,0 +1 @@ +../common/satisfy/t5
\ No newline at end of file diff --git a/tests/pkg-clean.test b/tests/pkg-clean.test new file mode 100644 index 0000000..c090036 --- /dev/null +++ b/tests/pkg-clean.test @@ -0,0 +1,133 @@ +# file : tests/pkg-clean.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test config.test remote.test + +# Source repository: +# +# pkg-clean +# |-- hello +# | |-- libhello-1.0.0.tar.gz +# | `-- repositories +# `-- libhello-1.0.0 +# |-- build +# | |-- bootstrap.build +# | |-- export.build +# | `-- root.build +# |-- buildfile +# |-- hello +# | |-- buildfile +# | |-- export +# | |-- hello +# | `-- hello.cxx +# |-- INSTALL +# |-- manifest +# |-- tests +# | |-- build +# | | |-- bootstrap.build +# | | `-- root.build +# | |-- buildfile +# | `-- test +# | |-- buildfile +# | |-- driver.cxx +# | `-- test.out +# `-- version + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + # Create the signed 'hello' repository. + # + cp -r $src/hello $out/hello + cat <<<$cert_manifest >+$out/hello/repositories + $rep_create --key $key $out/hello &$out/hello/packages &$out/hello/signature +end + +pkg_configure += -d cfg "config.cxx=$config.cxx" 2>- +pkg_disfigure += -d cfg +pkg_fetch += -d cfg 2>- +pkg_purge += -d cfg +pkg_unpack += -d cfg 2>- +pkg_update += -d cfg 2>- +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all 2>- + +: no-name +: +$clone_cfg; +$* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-clean' for more information + EOE + +: fetched +: +{ + +$clone_cfg + +$rep_add $rep/hello && $rep_fetch --trust $cert_fp &cfg/.bpkg/certs/*** + + : no-such-package + : + $clone_cfg; + $* libhello 2>>/EOE != 0 + error: package libhello does not exist in configuration cfg/ + EOE + + : wrong-state + : + { + $clone_cfg && $pkg_fetch libhello/1.0.0; + + $* libhello 2>>EOE != 0; + error: package libhello is fetched + info: expected it to be configured + EOE + + $pkg_purge libhello 2>'purged libhello/1.0.0' + } + + : src-eq-out + : + { + $clone_cfg; + $pkg_fetch libhello/1.0.0 && $pkg_unpack libhello; + $pkg_configure libhello && $pkg_update libhello; + + $* libhello 2>>~%EOE%; + %.{6} + cleaned libhello/1.0.0 + EOE + + $* libhello 2>>~%EOE%; + %info: .+ is clean% + cleaned libhello/1.0.0 + EOE + + $pkg_disfigure libhello 2>'disfigured libhello/1.0.0'; + $pkg_purge libhello 2>'purged libhello/1.0.0' + } +} + +: src-ne-out +: +{ + $clone_cfg; + $pkg_unpack -e $src/libhello-1.0.0; + $pkg_configure libhello && $pkg_update libhello; + + $* libhello 2>>~%EOE%; + %.{8} + cleaned libhello/1.0.0 + EOE + + $* libhello 2>>~%EOE%; + %info: .+ is clean% + cleaned libhello/1.0.0 + EOE + + $pkg_disfigure libhello 2>'disfigured libhello/1.0.0'; + $pkg_purge libhello 2>'purged libhello/1.0.0' +} diff --git a/tests/pkg-clean/hello b/tests/pkg-clean/hello new file mode 120000 index 0000000..e10a7f8 --- /dev/null +++ b/tests/pkg-clean/hello @@ -0,0 +1 @@ +../common/hello
\ No newline at end of file diff --git a/tests/pkg-clean/libhello-1.0.0 b/tests/pkg-clean/libhello-1.0.0 new file mode 120000 index 0000000..a6f638b --- /dev/null +++ b/tests/pkg-clean/libhello-1.0.0 @@ -0,0 +1 @@ +../common/libhello-1.0.0
\ No newline at end of file diff --git a/tests/pkg-configure.test b/tests/pkg-configure.test new file mode 100644 index 0000000..098b1a9 --- /dev/null +++ b/tests/pkg-configure.test @@ -0,0 +1,389 @@ +# file : tests/pkg-configure.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Here we test both pkg-configure and pkg-disfigure commands. +# + +.include common.test auth.test config.test remote.test + +# Source repository: +# +# pkg-configure +# |-- hello +# | |-- libhello-1.0.0.tar.gz +# | `-- repositories +# |-- libhello-1.0.0 +# | |-- build +# | | |-- bootstrap.build +# | | |-- export.build +# | | `-- root.build +# | |-- buildfile +# | |-- hello +# | | |-- buildfile +# | | |-- export +# | | |-- hello +# | | `-- hello.cxx +# | |-- INSTALL +# | |-- manifest +# | |-- tests +# | | |-- build +# | | | |-- bootstrap.build +# | | | `-- root.build +# | | |-- buildfile +# | | `-- test +# | | |-- buildfile +# | | |-- driver.cxx +# | | `-- test.out +# | `-- version +# `-- stable +# |-- libbar-1.0.0.tar.gz -> libfoo +# |-- libbar-1.1.0.tar.gz -> libfoo >= 1.1.0 +# |-- libbar-1.2.0.tar.gz -> libfoo >= 1.1.0, libfox | libfoo >= 1.2.0 +# |-- libbar-1.3.0.tar.gz -> libfox | libfoo <= 1.1.0, +# | libfix | libfoo >= 1.1.0 +# |-- libfoo-1.0.0.tar.gz +# |-- libfoo-1.1.0.tar.gz +# |-- libfoo-1.2.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + # Create the signed 'hello' repository. + # + cp -r $src/hello $out/hello + cat <<<$cert_manifest >+$out/hello/repositories + $rep_create --key $key $out/hello &$out/hello/packages &$out/hello/signature + + # Create the 'stable' repository. + # + cp -r $src/stable $out/stable + $rep_create $out/stable &$out/stable/packages +end + +test.arguments += "config.cxx=$config.cxx" + +pkg_disfigure += -d cfg +pkg_fetch += -d cfg 2>- +pkg_purge += -d cfg +pkg_status += -d cfg +pkg_unpack += -d cfg 2>- +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all 2>- + +: no-name +: +$clone_cfg; +$* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-configure' for more information + EOE + +: var-no-name +: +$clone_cfg; +$* "config.dist.root=$~/opt" 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-configure' for more information + EOE + +: unexpected-arg +: +$clone_cfg; +$* libhello libhello 2>>EOE != 0 + error: unexpected argument 'libhello' + EOE + +: fetched +: +{ + +$clone_cfg + +$rep_add $rep/hello && $rep_fetch --trust $cert_fp &cfg/.bpkg/certs/*** + + : no-such-package + : + $clone_cfg; + $* libhello1 2>>/EOE != 0 + error: package libhello1 does not exist in configuration cfg/ + EOE + + : disfigure + { + : no-name + : + $clone_root_cfg; + $pkg_disfigure 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-disfigure' for more information + EOE + + : no-such-package + : + $clone_root_cfg; + $pkg_disfigure libhello1 2>>/EOE != 0 + error: package libhello1 does not exist in configuration cfg/ + EOE + } + + : wrong-state + : + { + $clone_cfg && $pkg_fetch libhello/1.0.0; + + $* libhello 2>>EOE != 0; + error: package libhello is fetched + info: expected it to be unpacked + EOE + + $pkg_disfigure libhello 2>>EOE != 0; + error: package libhello is fetched + info: expected it to be configured + EOE + + $pkg_purge libhello 2>'purged libhello/1.0.0' + } + + : src-eq-out + : + { + $clone_cfg; + $pkg_fetch libhello/1.0.0 && $pkg_unpack libhello; + + $* libhello 2>'configured libhello/1.0.0'; + $pkg_status libhello 1>'configured 1.0.0; available sys:?'; + $pkg_disfigure libhello 2>'disfigured libhello/1.0.0'; + $pkg_status libhello 1>'unpacked 1.0.0; available sys:?'; + + $pkg_purge libhello 2>'purged libhello/1.0.0'; + $pkg_status libhello/1.0.0 1>'available' + } +} + +: src-ne-out +: +{ + $clone_cfg && $pkg_unpack -e $src/libhello-1.0.0; + + $* libhello 2>'configured libhello/1.0.0'; + $pkg_status libhello 1>'configured 1.0.0'; + $pkg_disfigure libhello 2>'disfigured libhello/1.0.0'; + $pkg_status libhello 1>'unpacked 1.0.0'; + + $pkg_purge libhello 2>'purged libhello/1.0.0'; + $pkg_status libhello 1>'unknown'; + test -d cfg/libhello-1.0.0 == 1 +} + +: out-exists-disfigure +: +{ + $clone_cfg && $pkg_unpack -e $src/libhello-1.0.0; + + $* libhello 2>'configured libhello/1.0.0'; + touch cfg/libhello-1.0.0/stray &!cfg/libhello-1.0.0/stray; + + $pkg_disfigure libhello 2>>/EOE != 0; + warning: directory cfg/libhello-1.0.0/ is not empty, not removing + error: package output directory cfg/libhello-1.0.0/ still exists + info: package libhello is now broken; use 'pkg-purge' to remove + EOE + + $pkg_status libhello/1.0.0 >'broken'; + rm -r cfg/libhello-1.0.0; + + $pkg_purge -f libhello 2>'purged libhello/1.0.0'; + $pkg_status libhello/1.0.0 1>'unknown' +} + +: broken +: +if ($cxx.target.class != 'windows') +{ + : disfigure-failed + : + { + $clone_root_cfg && $pkg_unpack -e $src/libhello-1.0.0; + + $* libhello 2>'configured libhello/1.0.0'; + chmod 555 cfg/libhello-1.0.0; + + $pkg_disfigure libhello 2>>/~%EOE% != 0; + %error: unable to remove directory cfg/libhello-1.0.0/.+% + info: package libhello is now broken; use 'pkg-purge' to remove + EOE + + $pkg_status libhello >'broken 1.0.0'; + + chmod 755 cfg/libhello-1.0.0; + rm -r cfg/libhello-1.0.0; + $pkg_purge -f libhello 2>'purged libhello/1.0.0'; + $pkg_status libhello >'unknown' + } + + : configure-failed + : + : Note that pkg-configure in case of build2 process failure implicitly + : performs pkg-disfigure, that succeeds. + : + { + $clone_root_cfg && $pkg_unpack -e $src/libhello-1.0.0; + c = &!cfg/libhello-1.0.0/ &!cfg/libhello-1.0.0/build/; + mkdir -p cfg/libhello-1.0.0/build $c; + chmod 555 cfg/libhello-1.0.0/build; + + $* libhello 2>>/~%EOE% != 0; + %error: unable to create directory cfg/libhello-1.0.0/build/.+% + EOE + + $pkg_status libhello >'unpacked 1.0.0' + } + + : configure-disfigure-failed + : + : Note that pkg-configure in case of build2 process failure implicitly + : performs pkg-disfigure, that also fails. + : + { + $clone_root_cfg && $pkg_unpack -e $src/libhello-1.0.0; + c = &!cfg/libhello-1.0.0/ &!cfg/libhello-1.0.0/build/; + mkdir -p cfg/libhello-1.0.0/build $c; + chmod 555 cfg/libhello-1.0.0 cfg/libhello-1.0.0/build; + + $* libhello 2>>/~%EOE% != 0; + %error: unable to create directory cfg/libhello-1.0.0/build/.+% + %error: unable to remove directory cfg/libhello-1.0.0/build/.+% + info: package libhello is now broken; use 'pkg-purge' to remove + EOE + + $pkg_status libhello >'broken 1.0.0'; + + chmod 755 cfg/libhello-1.0.0 cfg/libhello-1.0.0/build; + rm -r cfg/libhello-1.0.0; + $pkg_purge -f libhello 2>'purged libhello/1.0.0'; + $pkg_status libhello >'unknown' + } +} + +: dependency-management +: +{ + +$clone_cfg && $rep_add $rep/stable && $rep_fetch --trust-yes + + : still-has-deps + : + { + $clone_cfg; + $pkg_fetch libbar/1.0.0 && $pkg_unpack libbar; + + $* libbar 2>>EOE != 0; + error: no configured package satisfies dependency on libfoo + EOE + + $pkg_status libbar/1.0.0 1>'unpacked; available'; + $pkg_fetch libfoo/1.0.0; + $pkg_unpack libfoo; + + $* libbar 2>>EOE != 0; + error: no configured package satisfies dependency on libfoo + EOE + + $* libfoo 2>'configured libfoo/1.0.0'; + $* libbar 2>'configured libbar/1.0.0'; + + $pkg_disfigure libfoo 2>>EOE != 0; + error: package libfoo still has dependencies: + info: package libbar + EOE + + $pkg_disfigure libbar 2>'disfigured libbar/1.0.0'; + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + + $pkg_purge libbar 2>'purged libbar/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + + : no-package-satisfy + : + { + $clone_cfg; + $pkg_fetch libfoo/1.0.0 && $pkg_unpack libfoo; + + $* libfoo 2>'configured libfoo/1.0.0'; + $pkg_fetch libbar/1.1.0; + $pkg_unpack libbar; + + $* libbar 2>>EOE != 0; + error: no configured package satisfies dependency on libfoo >= 1.1.0 + EOE + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.0.0'; + $pkg_purge libfoo 2>'purged libfoo/1.0.0'; + $pkg_fetch libfoo/1.1.0; + $pkg_unpack libfoo; + $* libfoo 2>'configured libfoo/1.1.0'; + $* libbar 2>'configured libbar/1.1.0'; + $pkg_disfigure libbar 2>'disfigured libbar/1.1.0'; + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + + $pkg_purge libfoo 2>'purged libfoo/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.1.0' + } + + : no-package-satisfy-alt + : + { + $clone_cfg; + $pkg_fetch libfoo/1.1.0 && $pkg_unpack libfoo; + + $* libfoo 2>'configured libfoo/1.1.0'; + $pkg_fetch libbar/1.2.0; + $pkg_unpack libbar; + + $* libbar 2>>EOE != 0; + error: no configured package satisfies dependency on libfox | libfoo >= 1.2.0 + EOE + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + $pkg_purge libfoo 2>'purged libfoo/1.1.0'; + $pkg_fetch libfoo/1.2.0; + $pkg_unpack libfoo; + $* libfoo 2>'configured libfoo/1.2.0'; + $* libbar 2>'configured libbar/1.2.0'; + + $pkg_disfigure libfoo 2>>EOE != 0; + error: package libfoo still has dependencies: + info: package libbar on libfoo >= 1.2.0 + EOE + + $pkg_disfigure libbar 2>'disfigured libbar/1.2.0'; + $pkg_disfigure libfoo 2>'disfigured libfoo/1.2.0'; + + $pkg_purge libfoo 2>'purged libfoo/1.2.0'; + $pkg_purge libbar 2>'purged libbar/1.2.0' + } + + : incompatible-constraints + : + { + $clone_cfg; + $pkg_fetch libfoo/1.1.0 && $pkg_unpack libfoo; + + $* libfoo 2>'configured libfoo/1.1.0'; + $pkg_fetch libbar/1.3.0; + $pkg_unpack libbar; + + $* libbar 2>>EOE != 0; + error: multiple dependencies on package libfoo + info: libfoo <= 1.1.0 + info: libfoo >= 1.1.0 + EOE + + $pkg_disfigure libfoo 2>'disfigured libfoo/1.1.0'; + + $pkg_purge libfoo 2>'purged libfoo/1.1.0'; + $pkg_purge libbar 2>'purged libbar/1.3.0' + } +} diff --git a/tests/pkg-configure/hello b/tests/pkg-configure/hello new file mode 120000 index 0000000..9312ba9 --- /dev/null +++ b/tests/pkg-configure/hello @@ -0,0 +1 @@ +../common/hello/
\ No newline at end of file diff --git a/tests/pkg-configure/libhello-1.0.0 b/tests/pkg-configure/libhello-1.0.0 new file mode 120000 index 0000000..a6f638b --- /dev/null +++ b/tests/pkg-configure/libhello-1.0.0 @@ -0,0 +1 @@ +../common/libhello-1.0.0
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/depend/stable/libbar-1.0.0.tar.gz b/tests/pkg-configure/stable/libbar-1.0.0.tar.gz Binary files differindex 0ae6e26..0ae6e26 100644 --- a/tests/pkg/1/build2.org/depend/stable/libbar-1.0.0.tar.gz +++ b/tests/pkg-configure/stable/libbar-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/depend/stable/libbar-1.1.0.tar.gz b/tests/pkg-configure/stable/libbar-1.1.0.tar.gz Binary files differindex 39dbdf4..39dbdf4 100644 --- a/tests/pkg/1/build2.org/depend/stable/libbar-1.1.0.tar.gz +++ b/tests/pkg-configure/stable/libbar-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/depend/stable/libbar-1.2.0.tar.gz b/tests/pkg-configure/stable/libbar-1.2.0.tar.gz Binary files differindex 3a034ff..3a034ff 100644 --- a/tests/pkg/1/build2.org/depend/stable/libbar-1.2.0.tar.gz +++ b/tests/pkg-configure/stable/libbar-1.2.0.tar.gz diff --git a/tests/pkg/1/build2.org/depend/stable/libbar-1.3.0.tar.gz b/tests/pkg-configure/stable/libbar-1.3.0.tar.gz Binary files differindex 19d5a6f..19d5a6f 100644 --- a/tests/pkg/1/build2.org/depend/stable/libbar-1.3.0.tar.gz +++ b/tests/pkg-configure/stable/libbar-1.3.0.tar.gz diff --git a/tests/pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz b/tests/pkg-configure/stable/libfoo-1.0.0.tar.gz Binary files differindex 28a6a90..28a6a90 100644 --- a/tests/pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz +++ b/tests/pkg-configure/stable/libfoo-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/libfoo-1.1.0.tar.gz b/tests/pkg-configure/stable/libfoo-1.1.0.tar.gz Binary files differindex e03481f..e03481f 100644 --- a/tests/pkg/1/build2.org/satisfy/libfoo-1.1.0.tar.gz +++ b/tests/pkg-configure/stable/libfoo-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/depend/stable/libfoo-1.2.0.tar.gz b/tests/pkg-configure/stable/libfoo-1.2.0.tar.gz Binary files differindex aad6906..aad6906 100644 --- a/tests/pkg/1/build2.org/depend/stable/libfoo-1.2.0.tar.gz +++ b/tests/pkg-configure/stable/libfoo-1.2.0.tar.gz diff --git a/tests/pkg/1/build2.org/depend/stable/repositories b/tests/pkg-configure/stable/repositories index 5b70556..5b70556 100644 --- a/tests/pkg/1/build2.org/depend/stable/repositories +++ b/tests/pkg-configure/stable/repositories diff --git a/tests/pkg-drop.test b/tests/pkg-drop.test new file mode 100644 index 0000000..500d611 --- /dev/null +++ b/tests/pkg-drop.test @@ -0,0 +1,448 @@ +# file : tests/pkg-drop.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test config.test remote.test + +# Source repository: +# +# pkg-drop +# |-- t4a +# | |-- libfoo-1.1.0.tar.gz +# | `-- repositories +# |-- t4b -> t4a (prerequisite) +# | |-- libbar-1.1.0.tar.gz -> libfoo == 1.1.0 +# | `-- repositories +# |-- t4c -> t4b (prerequisite) +# | |-- libbaz-1.1.0.tar.gz -> libfoo, libbar +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# `-- t4d -> t4c (prerequisite) +# |-- libbiz-1.0.0.tar.gz -> libfox, libfoo, libbaz +# |-- libfox-1.0.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + cp -r $src/t4a $out/t4a && $rep_create $out/t4a &$out/t4a/packages + cp -r $src/t4b $out/t4b && $rep_create $out/t4b &$out/t4b/packages + cp -r $src/t4c $out/t4c && $rep_create $out/t4c &$out/t4c/packages + cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages +end + +pkg_build += -d cfg --yes 2>- +pkg_status += -d cfg +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all --trust-yes 2>- + +: no-name +: +$clone_cfg; +$* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-drop' for more information + EOE + +: unknown-package +: +$clone_cfg; +$* libfoo 2>>/EOE != 0 + error: package libfoo does not exist in configuration cfg/ + EOE + +: unknown-package-ver +: +$clone_cfg; +$* libfoo/1.0.0 2>>~%EOE% != 0 + %error: package libfoo/1.0.0 does not exist in configuration cfg[/\\]% + EOE + +: prerequisites-or-dependents +: +{ + +$clone_cfg && $rep_add $rep/t4c && $rep_fetch + +$pkg_build libbaz + + test.arguments += --print-only + + : foo-baz-bar + : + $clone_cfg; + $* -y libfoo libbaz libbar >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + + : dependents + : + { + # Prepare the nested tests to use configuration from the enclosing + # 'prerequisites-or-dependents' group scope. + # + clone_cfg = cp -r $~/../cfg ./ + + : unconfirmed + : + { + test.arguments += --yes + + : libfoo + : + $clone_cfg; + $* libfoo 2>>EOE != 0 + following dependent packages will have to be dropped as well: + libbar (requires libfoo) + libbaz (requires libbar) + error: refusing to drop dependent packages with just --yes + info: specify --drop-dependent to confirm + EOE + + : libfoo-libbar + : + $clone_cfg; + $* libfoo libbar 2>>EOE != 0 + following dependent packages will have to be dropped as well: + libbaz (requires libbar) + error: refusing to drop dependent packages with just --yes + info: specify --drop-dependent to confirm + EOE + + : libfoo-libbaz + : + $clone_cfg; + $* libfoo libbaz 2>>EOE != 0 + following dependent packages will have to be dropped as well: + libbar (requires libfoo) + error: refusing to drop dependent packages with just --yes + info: specify --drop-dependent to confirm + EOE + } + + : confirmed + : + { + test.arguments += --drop-dependent + + : libfoo + : + $clone_cfg; + $* libfoo >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + + : libfoo-libbaz + : + $clone_cfg; + $* libfoo libbaz >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + + : libbaz-libfoo + : + $clone_cfg; + $* libbaz libfoo >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + } + } + + : prerequisites + : + { + # Prepare the nested tests to use configuration from the enclosing + # 'prerequisites-or-dependents' group scope. + # + clone_cfg = cp -r $~/../cfg ./ + + : libbaz + : + $clone_cfg; + $* -y libbaz >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + + : libbaz-only + : + $clone_cfg; + $* -n libbaz >>EOO + drop libbaz + EOO + + : libbar-libbaz + : + $clone_cfg; + $* -n libbar libbaz >>EOO + drop libbaz + drop libbar + EOO + + : libbaz-libbar + : + $clone_cfg; + $* -n libbaz libbar >>EOO + drop libbaz + drop libbar + EOO + + : dependencies + : + : Note that we don't move this test to the prerequisites-and-dependents + : group as the configuration repository set would be different. + : + $clone_cfg; + $* -y --drop-dependent libbar >>EOO + drop libbaz + drop libbar + drop libfoo + EOO + } + + # Here we combine the test group teardown and the "actual drop" test. + # + -$pkg_drop -d cfg --yes libbaz 2>>EOE + disfigured libbaz + disfigured libbar + disfigured libfoo + purged libbaz + purged libbar + purged libfoo + EOE + + -$pkg_status libbar/1.1.0 >'unknown' + -$pkg_status libbaz/1.1.0 >'available' + -$pkg_status libfoo/1.1.0 >'available' +} + +: prerequisites-and-dependents +: +{ + +$clone_cfg && $rep_add $rep/t4d && $rep_fetch + +$pkg_build libbiz + + clone_cfg = cp -r ../../cfg ./ + test.arguments += --print-only + + : drop-prerequisites-no-dependents + : + { + test.arguments += --yes + + : libbiz + : + $clone_cfg; + $* libbiz >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfoo + drop libfox + EOO + + : libfox-libbiz + : + $clone_cfg; + $* libfox libbiz >>EOO + drop libbiz + drop libfox + drop libbaz + drop libbar + drop libfoo + EOO + } + + : drop-prerequisites + : + { + test.arguments += --yes --drop-dependent + + : libfox + : + $clone_cfg; + $* libfox >>EOO + drop libbiz + drop libfox + drop libbaz + drop libbar + drop libfoo + EOO + + : libbaz + : + $clone_cfg; + $* libbaz >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfoo + drop libfox + EOO + + : libbar + : + $clone_cfg; + $* libbar >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfoo + drop libfox + EOO + + : libfoo + : + $clone_cfg; + $* libfoo >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfoo + drop libfox + EOO + } + + : keep-prerequisites + { + test.arguments += --no --drop-dependent + + : fox-baz + : + $clone_cfg; + $* libfox libbaz >>EOO + drop libbiz + drop libfox + drop libbaz + EOO + + : libbaz-libfox + : + $clone_cfg; + $* libbaz libfox >>EOO + drop libbiz + drop libbaz + drop libfox + EOO + + : libfox-libbar + : + $clone_cfg; + $* libfox libbar >>EOO + drop libbiz + drop libfox + drop libbaz + drop libbar + EOO + + : libbar-libfox + : + $clone_cfg; + $* libbar libfox >>EOO + drop libbiz + drop libbaz + drop libbar + drop libfox + EOO + } + + -$pkg_drop -d cfg --yes --drop-dependent libbar 2>>EOE + disfigured libbiz + disfigured libbaz + disfigured libbar + disfigured libfoo + disfigured libfox + purged libbiz + purged libbaz + purged libbar + purged libfoo + purged libfox + EOE + + -$pkg_status libfox/1.0.0 >'available' + -$pkg_status libfoo/1.1.0 >'unknown' + -$pkg_status libbar/1.1.0 >'unknown' + -$pkg_status libbaz/1.1.0 >'unknown' + -$pkg_status libbiz/1.0.0 >'available' +} + +: keep-drop-options +: +: Test --drop-dependent, --keep-dependent, --drop-prerequisite, +: --keep-prerequisite option. +: +{ + +$clone_cfg && $rep_add $rep/t4b && $rep_fetch + + : keep-drop-dependent + : + { + $clone_cfg && $pkg_build libbar; + + $* --keep-dependent libfoo 2>>EOE != 0; + error: following dependent packages will have to be dropped as well: + libbar (requires libfoo) + EOE + + $* --drop-dependent libfoo 2>>EOE + disfigured libbar + disfigured libfoo + purged libbar + purged libfoo + EOE + } + + : drop-prerequisite + : + { + $clone_cfg && $pkg_build libbar; + + $* --drop-prerequisite libbar 2>>EOE + disfigured libbar + disfigured libfoo + purged libbar + purged libfoo + EOE + } + + : keep-prerequisite + : + { + $clone_cfg && $pkg_build libbar; + + $* --keep-prerequisite libbar 2>>EOE; + disfigured libbar + purged libbar + EOE + + $pkg_status libfoo >'configured 1.1.0'; + + $* libfoo 2>>EOE + disfigured libfoo + purged libfoo + EOE + } +} + +: disfigure-only +: +: Test --disfigure-only option. +: +{ + $clone_cfg && $rep_add $rep/t4a && $rep_fetch; + $pkg_build libfoo; + + $* --disfigure-only libfoo 2>'disfigured libfoo'; + $pkg_status libfoo >'unpacked 1.1.0 hold_package; available sys:?'; + + $* libfoo 2>'purged libfoo' +} diff --git a/tests/pkg-drop/t4a b/tests/pkg-drop/t4a new file mode 120000 index 0000000..47997b2 --- /dev/null +++ b/tests/pkg-drop/t4a @@ -0,0 +1 @@ +../common/satisfy/t4a
\ No newline at end of file diff --git a/tests/pkg-drop/t4b b/tests/pkg-drop/t4b new file mode 120000 index 0000000..917299c --- /dev/null +++ b/tests/pkg-drop/t4b @@ -0,0 +1 @@ +../common/satisfy/t4b
\ No newline at end of file diff --git a/tests/pkg-drop/t4c b/tests/pkg-drop/t4c new file mode 120000 index 0000000..06b7611 --- /dev/null +++ b/tests/pkg-drop/t4c @@ -0,0 +1 @@ +../common/satisfy/t4c
\ No newline at end of file diff --git a/tests/pkg-drop/t4d b/tests/pkg-drop/t4d new file mode 120000 index 0000000..56dc0f7 --- /dev/null +++ b/tests/pkg-drop/t4d @@ -0,0 +1 @@ +../common/satisfy/t4d
\ No newline at end of file diff --git a/tests/pkg-fetch.test b/tests/pkg-fetch.test new file mode 100644 index 0000000..6689d3d --- /dev/null +++ b/tests/pkg-fetch.test @@ -0,0 +1,200 @@ +# file : tests/pkg-fetch.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test config.test remote.test + +# Source repository: +# +# pkg-fetch +# |-- hello +# | |-- libhello-1.0.0.tar.gz +# | `-- repositories +# `-- t1 +# |-- libfoo-1.0.0.tar.gz +# |-- libfoo-1.1.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + # Create the signed 'hello' repository. + # + cp -r $src/hello $out/hello + cat <<<$cert_manifest >+$out/hello/repositories + $rep_create --key $key $out/hello &$out/hello/packages &$out/hello/signature + + # Create the 't1' repository. + # + cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages +end + +pkg_purge += -d cfg +pkg_status += -d cfg +pkg_unpack += -d cfg +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all 2>- + +: no-archive +: +$clone_cfg; +$* -e 2>>EOE != 0 + error: archive path argument expected + info: run 'bpkg help pkg-fetch' for more information + EOE + +: archive-not-exist +: +$clone_cfg; +$* -e ./no-such-file 2>>/EOE != 0 + error: archive file './no-such-file' does not exist + EOE + +: no-name +: +$clone_cfg; +$* 2>>EOE != 0 + error: package name/version argument expected + info: run 'bpkg help pkg-fetch' for more information + EOE + +: no-version +: +$clone_cfg; +$* libfoo 2>>EOE != 0 + error: package version expected + info: run 'bpkg help pkg-fetch' for more information + EOE + +: invalid-version +: +$clone_cfg; +$* libfoo/1/2/3 2>>EOE != 0 + error: invalid package version '1/2/3': alpha-numeric characters expected in a component + EOE + +: no-repositories +: +$clone_cfg; +$* libfoo/1.0.0 2>>/EOE != 0 + error: configuration cfg/ has no repositories + info: use 'bpkg rep-add' to add a repository + EOE + +: no-packages +: +{ + $clone_cfg && $rep_add $rep/t1; + + $* libfoo/1.0.0 2>>/EOE != 0 + error: configuration cfg/ has no available packages + info: use 'bpkg rep-fetch' to fetch available packages list + EOE +} + +# Note that when we fetch a package from remote repository the bpkg stderr +# contains fetch program progress output, that comes prior the informational +# message. +# + +: fetched-rep +: +{ + +$clone_cfg && $rep_add $rep/t1 && $rep_fetch --trust-yes + + : package-not-available + : + $clone_cfg; + $* libfoo/2.0.0+1 2>>/EOE != 0 + error: package libfoo 2.0.0+1 is not available + EOE + + : package-available + : + { + $clone_cfg; + + $* libfoo/1.0.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.0.0% + EOE + + $pkg_status libfoo/1.0.0 1>'fetched; available'; + + $* libfoo/1.0.0 2>>/EOE != 0; + error: package libfoo already exists in configuration cfg/ + info: version: 1.0.0, state: fetched, substate: none + info: use 'pkg-fetch --replace|-r' to replace + EOE + + $* -e $src/t1/libfoo-1.0.0.tar.gz 2>>/EOE != 0; + error: package libfoo already exists in configuration cfg/ + info: version: 1.0.0, state: fetched, substate: none + info: use 'pkg-fetch --replace|-r' to replace + EOE + + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + + : package-replace + : + { + $clone_cfg; + + $* -e $src/t1/libfoo-1.0.0.tar.gz 2>'fetched libfoo/1.0.0'; + $pkg_status libfoo/1.0.0 1>'fetched; available'; + $pkg_unpack libfoo 2>'unpacked libfoo/1.0.0'; + + test.arguments += --replace; # Replace existing package. + + $* libfoo/1.1.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.1.0% + EOE + + $pkg_status libfoo/1.1.0 1>'fetched; available'; + $pkg_unpack libfoo 2>'unpacked libfoo/1.1.0'; + $* -e $src/t1/libfoo-1.0.0.tar.gz 2>'fetched libfoo/1.0.0'; + $pkg_status libfoo/1.0.0 1>'fetched; available'; + + $* libfoo/1.1.0 2>>~%EOE%; + %.* + %.*fetched libfoo/1.1.0% + EOE + + $pkg_status libfoo/1.1.0 1>'fetched; available'; + $* -e $src/t1/libfoo-1.0.0.tar.gz 2>'fetched libfoo/1.0.0'; + $pkg_status libfoo/1.0.0 1>'fetched; available'; + + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + + : purge-existing + : + { + $clone_cfg; + cp $src/t1/libfoo-1.0.0.tar.gz ./ &!libfoo-1.0.0.tar.gz; + + $* -p -e libfoo-1.0.0.tar.gz 2>'fetched libfoo/1.0.0'; + + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } +} + +: hello +: +{ + $clone_cfg; + $rep_add $rep/hello && $rep_fetch --trust $cert_fp &cfg/.bpkg/certs/***; + + $* libhello/1.0.0 2>>~%EOE%; + %.* + %.*fetched libhello/1.0.0% + EOE + + $pkg_status libhello/1.0.0 1>'fetched; available'; + + $pkg_purge libhello 2>'purged libhello/1.0.0' +} diff --git a/tests/pkg-fetch/hello b/tests/pkg-fetch/hello new file mode 120000 index 0000000..e10a7f8 --- /dev/null +++ b/tests/pkg-fetch/hello @@ -0,0 +1 @@ +../common/hello
\ No newline at end of file diff --git a/tests/pkg-fetch/t1 b/tests/pkg-fetch/t1 new file mode 120000 index 0000000..a27d298 --- /dev/null +++ b/tests/pkg-fetch/t1 @@ -0,0 +1 @@ +../common/t1
\ No newline at end of file diff --git a/tests/pkg-purge.test b/tests/pkg-purge.test new file mode 100644 index 0000000..0f7b256 --- /dev/null +++ b/tests/pkg-purge.test @@ -0,0 +1,182 @@ +# file : tests/pkg-purge.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test config.test + +# Source repository: +# +# pkg-purge +# |-- libfoo-1.0.0.tar.gz +# `-- libfoo-1.1.0 -> +# |-- build +# | `-- bootstrap.build +# |-- buildfile +# `-- manifest + +pkg_fetch += -d cfg 2>- +pkg_unpack += -d cfg 2>- +pkg_status += -d cfg + +: no-name +: +$clone_cfg; +$* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-purge' for more information + EOE + +: no-package +: +$clone_cfg; +$* libfoo 2>>/EOE != 0 + error: package libfoo does not exist in configuration cfg/ + EOE + +: fetched +: +{ + $clone_cfg && $pkg_fetch -e $src/libfoo-1.0.0.tar.gz; + + $* libfoo 2>'purged libfoo/1.0.0'; + $pkg_status libfoo 1>'unknown' +} + +: keep +: +{ + $clone_cfg && $pkg_fetch -e $src/libfoo-1.0.0.tar.gz; + + $* -k libfoo 2>'keeping archive libfoo/1.0.0'; + $pkg_status libfoo 1>'fetched 1.0.0'; + $* libfoo 2>'purged libfoo/1.0.0' +} + +: purge-archive +: +{ + $clone_cfg; + cp $src/libfoo-1.0.0.tar.gz cfg/ &!cfg/libfoo-1.0.0.tar.gz; + $pkg_fetch -e -p cfg/libfoo-1.0.0.tar.gz; + + $* libfoo 2>'purged libfoo/1.0.0'; + $pkg_status libfoo 1>'unknown'; + test -f cfg/libfoo-1.0.0.tar.gz == 1 +} + +: no-archive-keep +: +{ + $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; + + $* --keep libfoo 2>>EOE != 0; + error: package libfoo has no archive to keep + EOE + + $pkg_status libfoo 1>'unpacked 1.1.0'; + $* libfoo 2>'purged libfoo/1.1.0' +} + +: unpacked-dir +: +{ + $clone_cfg && $pkg_unpack -e $src/libfoo-1.1.0; + + $* libfoo 2>'purged libfoo/1.1.0'; + $pkg_status libfoo 1>'unknown' +} + +: unpacked-archive +: +{ + $clone_cfg; + $pkg_fetch -e $src/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo; + + $* libfoo 2>'purged libfoo/1.0.0'; + $pkg_status libfoo 1>'unknown'; + test -d cfg/libfoo-1.0.0 == 1 +} + +: keep-unpacked-archive +: +{ + $clone_cfg; + $pkg_fetch -e $src/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo; + + $* --keep libfoo 2>'keeping archive libfoo/1.0.0'; + $pkg_status libfoo 1>'fetched 1.0.0'; + test -d cfg/libfoo-1.0.0 == 1; + $* libfoo 2>'purged libfoo/1.0.0'; + $pkg_status libfoo 1>'unknown' +} + +: purge-dir +: +{ + $clone_cfg; + + # @@ Use --no-cleanup for cp builtin when implemented. + # + d = &!cfg/libfoo-1.1.0/; + c = $d/ $d/build/ $d/build/bootstrap.build $d/buildfile $d/manifest; + cp -r $src/libfoo-1.1.0 cfg/ $c; + + $pkg_unpack -e -p cfg/libfoo-1.1.0; + + $* libfoo 2>'purged libfoo/1.1.0'; + $pkg_status libfoo 1>'unknown'; + test -d cfg/libfoo-1.1.0 == 1 +} + +: purge-unpacked-archive +: +{ + $clone_cfg; + cp $src/libfoo-1.0.0.tar.gz cfg/ &!cfg/libfoo-1.0.0.tar.gz; + $pkg_fetch -e -p cfg/libfoo-1.0.0.tar.gz && $pkg_unpack libfoo; + + $* libfoo 2>'purged libfoo/1.0.0'; + $pkg_status libfoo 1>'unknown'; + test -d cfg/libfoo-1.0.0 == 1; + test -f cfg/libfoo-1.0.0.tar.gz == 1 +} + +: broken +: +if ($cxx.target.class != 'windows') +{ + $clone_cfg; + cp $src/libfoo-1.0.0.tar.gz cfg/ &!cfg/libfoo-1.0.0.tar.gz; + $pkg_fetch -e -p cfg/libfoo-1.0.0.tar.gz; + $pkg_unpack libfoo; + chmod 000 cfg/libfoo-1.0.0; + + $* libfoo 2>>/~%EOE% != 0; + %error: unable to remove directory cfg/libfoo-1.0.0/.+% + info: package libfoo is now broken; use 'pkg-purge --force' to remove + EOE + + $pkg_status libfoo/1.0.0 >'broken'; + + $* -f -k libfoo 2>'error: cannot keep broken package libfoo' != 0; + $pkg_status libfoo/1.0.0 >'broken'; + + $* -f libfoo 2>>/EOE != 0; + error: source directory of broken package libfoo still exists + info: remove cfg/libfoo-1.0.0/ manually then re-run pkg-purge + EOE + + $pkg_status libfoo/1.0.0 >'broken'; + + chmod 755 cfg/libfoo-1.0.0; + rm -r cfg/libfoo-1.0.0; + + $* -f libfoo 2>>/EOE != 0; + error: archive file of broken package libfoo still exists + info: remove cfg/libfoo-1.0.0.tar.gz manually then re-run pkg-purge + EOE + + rm cfg/libfoo-1.0.0.tar.gz; + $* -f libfoo 2>'purged libfoo/1.0.0'; + $pkg_status libfoo >'unknown' +} diff --git a/tests/pkg-purge/libfoo-1.0.0.tar.gz b/tests/pkg-purge/libfoo-1.0.0.tar.gz new file mode 120000 index 0000000..85fcfba --- /dev/null +++ b/tests/pkg-purge/libfoo-1.0.0.tar.gz @@ -0,0 +1 @@ +../common/t1/libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg-purge/libfoo-1.1.0 b/tests/pkg-purge/libfoo-1.1.0 new file mode 120000 index 0000000..15fcf5c --- /dev/null +++ b/tests/pkg-purge/libfoo-1.1.0 @@ -0,0 +1 @@ +../common/libfoo-1.1.0
\ No newline at end of file diff --git a/tests/pkg-status.test b/tests/pkg-status.test new file mode 100644 index 0000000..ff7cab7 --- /dev/null +++ b/tests/pkg-status.test @@ -0,0 +1,160 @@ +# file : tests/pkg-status.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test config.test remote.test + +# Source repository: +# +# pkg-status +# |-- extra -> stable (prerequisite) +# | |-- libbar-1.1.0+1.tar.gz +# | `-- repositories +# |-- stable +# | |-- libbar-1.0.0.tar.gz +# | |-- libfoo-1.0.0.tar.gz +# | `-- repositories +# |-- testing -> stable (complement), extra (prerequisite) +# | |-- libbar-1.0.0+1.tar.gz +# | |-- libbar-1.1.0.tar.gz +# | `-- repositories +# `-- unstable -> testing (complement) +# |-- libbar-2.0.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + c = $rep_create 2>- + + cp -r $src/extra $out/extra && $c $out/extra &$out/extra/packages + cp -r $src/stable $out/stable && $c $out/stable &$out/stable/packages + cp -r $src/testing $out/testing && $c $out/testing &$out/testing/packages + cp -r $src/unstable $out/unstable && $c $out/unstable &$out/unstable/packages +end + +pkg_fetch += 2>- +pkg_purge += -d cfg 2>- +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all --trust-yes 2>- + +: basics +: +{ + +$clone_cfg + + : not-fetched + : + { + +$clone_cfg + + : libfoo-1.0.0 + : + $clone_cfg; + $* libfoo/1.0.0 >'unknown' + + : libfoo + : + $clone_cfg; + $* libfoo >'unknown' + } + + : rep-fetched + : + { + +$clone_cfg && $rep_add $rep/stable && $rep_fetch + + +cp -r cfg ./fetched + +$pkg_fetch libfoo/1.0.0 -d fetched &fetched/libfoo-1.0.0.tar.gz + + : libfoo-1.0.0 + : + $clone_cfg; + $* libfoo/1.0.0 >'available' + + : libfoo + : + $clone_cfg; + $* libfoo >'available 1.0.0 sys:?' + + : pkg-fetched + : + { + clone_cfg = cp -r ../../fetched cfg + + : libfoo-1.0.0 + : + $clone_cfg; + $* libfoo/1.0.0 >'fetched; available' + + : libfoo + : + $clone_cfg; + $* libfoo >'fetched 1.0.0; available sys:?' + } + } +} + +: multiple-versions +{ + # Prepare the nested tests to copy the root configuration. Note that they + # must provide the destination directory name as an argument. + # + clone_cfg = cp -r $~/../cfg + + : extra + : + { + # Here we, first, prepare 2 configurations that derive from each other, and + # then spawn 2 tests on them. + # + +$clone_cfg extra && $rep_add -d extra $rep/extra && $rep_fetch -d extra + + +cp -r extra extra-stable + +$rep_add -d extra-stable $rep/stable && $rep_fetch -d extra-stable + + : libbar + : + $* -d ../extra libbar >'available 1.1.0+1 sys:?' + + : libbar-stable + : + $* -d ../extra-stable libbar >'available 1.1.0+1 1.0.0 sys:?' + } + + : testing + : + { + $clone_cfg ./ && $rep_add $rep/testing && $rep_fetch; + + $* libbar >'available 1.1.0 1.0.0+1 1.0.0 sys:?' + } + + : unstable + : + { + # Here we, first, prepare 3 configurations that derive from each other, and + # then spawn 3 tests on them. + # + +$clone_cfg ./ && $rep_add $rep/unstable && $rep_fetch + + +cp -r cfg fetched1 + +$pkg_fetch libbar/1.0.0+1 -d fetched1 &fetched1/libbar-1.0.0+1.tar.gz + + +cp -r fetched1 fetched2 + +$pkg_purge -d fetched2 libbar &!fetched2/libbar-1.0.0+1.tar.gz + +$pkg_fetch libbar/2.0.0 -d fetched2 &fetched2/libbar-2.0.0.tar.gz + + : not-fetched + : + $* -d ../cfg libbar >'available 2.0.0 1.1.0 1.0.0+1 1.0.0 sys:?' + + : fetched-1 + : + $* -d ../fetched1 libbar >'fetched 1.0.0+1; available 2.0.0 1.1.0 sys:?' + + : fetched-2 + : + $* -d ../fetched2 libbar >'fetched 2.0.0; available sys:?' + } +} diff --git a/tests/pkg/1/build2.org/status/extra/libbar-1.1.0+1.tar.gz b/tests/pkg-status/extra/libbar-1.1.0+1.tar.gz Binary files differindex 890e9e2..890e9e2 100644 --- a/tests/pkg/1/build2.org/status/extra/libbar-1.1.0+1.tar.gz +++ b/tests/pkg-status/extra/libbar-1.1.0+1.tar.gz diff --git a/tests/pkg/1/build2.org/status/extra/repositories b/tests/pkg-status/extra/repositories index ecaa454..ecaa454 100644 --- a/tests/pkg/1/build2.org/status/extra/repositories +++ b/tests/pkg-status/extra/repositories diff --git a/tests/pkg/1/build2.org/status/stable/libbar-1.0.0.tar.gz b/tests/pkg-status/stable/libbar-1.0.0.tar.gz Binary files differindex 97e6e32..97e6e32 100644 --- a/tests/pkg/1/build2.org/status/stable/libbar-1.0.0.tar.gz +++ b/tests/pkg-status/stable/libbar-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/status/stable/libfoo-1.0.0.tar.gz b/tests/pkg-status/stable/libfoo-1.0.0.tar.gz Binary files differindex 5e7fa17..5e7fa17 100644 --- a/tests/pkg/1/build2.org/status/stable/libfoo-1.0.0.tar.gz +++ b/tests/pkg-status/stable/libfoo-1.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/fetch/repositories b/tests/pkg-status/stable/repositories index 5b70556..5b70556 100644 --- a/tests/pkg/1/build2.org/fetch/repositories +++ b/tests/pkg-status/stable/repositories diff --git a/tests/pkg/1/build2.org/status/testing/libbar-1.0.0+1.tar.gz b/tests/pkg-status/testing/libbar-1.0.0+1.tar.gz Binary files differindex 5794085..5794085 100644 --- a/tests/pkg/1/build2.org/status/testing/libbar-1.0.0+1.tar.gz +++ b/tests/pkg-status/testing/libbar-1.0.0+1.tar.gz diff --git a/tests/pkg/1/build2.org/status/testing/libbar-1.1.0.tar.gz b/tests/pkg-status/testing/libbar-1.1.0.tar.gz Binary files differindex b01ac44..b01ac44 100644 --- a/tests/pkg/1/build2.org/status/testing/libbar-1.1.0.tar.gz +++ b/tests/pkg-status/testing/libbar-1.1.0.tar.gz diff --git a/tests/pkg/1/build2.org/status/testing/repositories b/tests/pkg-status/testing/repositories index 7bd7269..7bd7269 100644 --- a/tests/pkg/1/build2.org/status/testing/repositories +++ b/tests/pkg-status/testing/repositories diff --git a/tests/pkg/1/build2.org/status/unstable/libbar-2.0.0.tar.gz b/tests/pkg-status/unstable/libbar-2.0.0.tar.gz Binary files differindex 6cc5890..6cc5890 100644 --- a/tests/pkg/1/build2.org/status/unstable/libbar-2.0.0.tar.gz +++ b/tests/pkg-status/unstable/libbar-2.0.0.tar.gz diff --git a/tests/pkg/1/build2.org/status/unstable/repositories b/tests/pkg-status/unstable/repositories index 8f4a5f6..8f4a5f6 100644 --- a/tests/pkg/1/build2.org/status/unstable/repositories +++ b/tests/pkg-status/unstable/repositories diff --git a/tests/pkg-system.test b/tests/pkg-system.test new file mode 100644 index 0000000..e8210f6 --- /dev/null +++ b/tests/pkg-system.test @@ -0,0 +1,873 @@ +# file : tests/pkg-system.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test config.test remote.test + +# There is no pkg-system command, and this testscript contains tests for +# various building scenarios that involves system packages. Note that by that +# reason usage of $* is meaningless. +# + +# Source repository: +# +# pkg-system +# |-- foo-2.tar.gz -> libbar >= 2 +# |-- libbar-0+1.tar.gz +# |-- libbar-1.tar.gz -> libbaz == 2 +# |-- libbar-2.tar.gz -> libbaz == 2 +# |-- libbaz-2.tar.gz +# |-- t1 +# | |-- foo-2.tar.gz -> libbar >= 2 +# | |-- libbar-1.tar.gz -> libbaz == 2 +# | |-- libbar-2.tar.gz -> libbaz == 2 +# | |-- libbaz-2.tar.gz +# | `-- repositories +# |-- t2 +# | |-- foo-2.tar.gz -> libbar >= 2 +# | |-- libbar-0+1.tar.gz +# | `-- repositories +# `-- t3 -> t2 (prerequisite) +# |-- foo-2.tar.gz -> libbar >= 2 +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages + cp -r $src/t2 $out/t2 && $rep_create $out/t2 &$out/t2/packages + cp -r $src/t3 $out/t3 && $rep_create $out/t3 &$out/t3/packages +end + +pkg_build += -d cfg --yes +pkg_drop += -d cfg --yes 2>- +pkg_status += -d cfg +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all --trust-yes 2>- + +# Note that when we fetch a package from remote repository the bpkg stderr +# contains fetch program progress output, that comes prior the informational +# message. +# + +: t1 +: +{ + +$clone_cfg && $rep_add $rep/t1 && $rep_fetch + + : dup + : + : Test that passing package duplicates on the command line expectedly fails. + : Note that we unite all such tests into a single one for the sake of code + : (and not to think of too many ids for almost identical tests :-)). + : + { + $clone_cfg; + + $pkg_build 'sys:libbar' '?sys:libbar' 2>>EOE != 0; + error: duplicate package libbar + info: first mentioned as ?sys:libbar + info: second mentioned as sys:libbar + EOE + + $pkg_build '?sys:libbar' 'sys:libbar' 2>>EOE != 0; + error: duplicate package libbar + info: first mentioned as ?sys:libbar + info: second mentioned as sys:libbar + EOE + + $pkg_build '?sys:libbar' libbar 2>>EOE != 0; + error: duplicate package libbar + info: first mentioned as ?sys:libbar + info: second mentioned as libbar + EOE + + $pkg_build libbar '?sys:libbar' 2>>EOE != 0; + error: duplicate package libbar + info: first mentioned as ?sys:libbar + info: second mentioned as libbar + EOE + + $pkg_build 'sys:libbar' libbar 2>>EOE != 0; + error: duplicate package libbar + info: first mentioned as sys:libbar + info: second mentioned as libbar + EOE + + $pkg_build libbar 'sys:libbar' 2>>EOE != 0 + error: duplicate package libbar + info: first mentioned as libbar + info: second mentioned as sys:libbar + EOE + } + + : syslibbar-foo-syslibbar2-libbar2 + : + : The overall plan is to build sys:libbar/*, foo, then reconfigure + : sys:libbar/* to sys:libbar/2 and afterwards to libbar/2. + : + { + $clone_cfg; + + # Build sys:libbar/*. + # + $pkg_build 'sys:libbar' 2>'configured sys:libbar/*'; + $pkg_status libbar 1>'configured,system * hold_package hold_version; available 2 1 sys:?'; + $pkg_status libbaz 1>'available 2 sys:?'; + + # Build foo with preconfigured sys:libbar/*. + # + $pkg_build foo 2>>~%EOE%; + %.* + %.*fetched foo/2% + unpacked foo/2 + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system * hold_package hold_version; available 2 1 sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + # Reconfigure sys:libbar/* to 2. + # + $pkg_build 'sys:libbar/2' 2>>~%EOE%; + disfigured foo/2 + purged libbar/* + configured sys:libbar/2 + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + # Reconfigure sys:libbar/2 to libbar/2. + # + $pkg_build libbar/2 2>>~%EOE%; + disfigured foo/2 + purged libbar/2 + %.* + %.*fetched libbaz/2% + unpacked libbaz/2 + %.* + %.*fetched libbar/2% + unpacked libbar/2 + configured libbaz/2 + configured libbar/2 + configured foo/2 + %info: .+ is up to date% + %info: .+ is up to date% + updated libbar/2 + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'configured 2; available sys:?'; + + $pkg_drop foo libbar + } + + : foo-syslibbar2 + : + : Build foo and sys:libbar/2. + : + { + $clone_cfg; + + $pkg_build foo 'sys:libbar/2' 2>>~%EOE%; + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/2 + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + $pkg_drop foo libbar + } + + : syslibbar2-foo + : + : Build sys:libbar/2 and foo. + : + { + $clone_cfg; + + $pkg_build 'sys:libbar/2' foo 2>>~%EOE%; + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/2 + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + $pkg_drop foo libbar + } + + : libbar2-foo-syslibbar2 + : + : The overall plan is to build libbar/2, then foo and sys:libbar/2. + : + { + $clone_cfg; + + # Build libbar/2. + # + $pkg_build libbar/2 2>>~%EOE%; + %.* + %.*fetched libbaz/2% + unpacked libbaz/2 + %.* + %.*fetched libbar/2% + unpacked libbar/2 + configured libbaz/2 + configured libbar/2 + %info: .+ is up to date% + updated libbar/2 + EOE + + $pkg_status libbar >'configured 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'configured 2; available sys:?'; + + # Build foo and sys:libbar/2. + # + $pkg_build foo 'sys:libbar/2' 2>>~%EOE%; + disfigured libbar/2 + purged libbar/2 + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/2 + configured foo/2 + disfigured libbaz + purged libbaz + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + $pkg_drop foo libbar + } + + : libbar2-foo-syslibbar + : + : The overall plan is to build libbar/2, then foo and sys:libbar. + : + { + $clone_cfg; + + # Build libbar/2. + # + $pkg_build libbar/2 2>>~%EOE%; + %.* + %.*fetched libbaz/2% + unpacked libbaz/2 + %.* + %.*fetched libbar/2% + unpacked libbar/2 + configured libbaz/2 + configured libbar/2 + %info: .+ is up to date% + updated libbar/2 + EOE + + $pkg_status libbar >'configured 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'configured 2; available sys:?'; + + # Build foo and sys:libbar. + # + $pkg_build foo 'sys:libbar' 2>>~%EOE%; + disfigured libbar/2 + purged libbar/2 + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/* + configured foo/2 + disfigured libbaz + purged libbaz + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system * hold_package hold_version; available 2 1 sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + $pkg_drop foo libbar + } + + : syslibbar2-foo-libbar2-syslibbar2-libbar2 + : + : The overall plan is to build sys:libbar/2, then foo and libbar/2, then + : reconfigure to sys:libbar/2 and afterwards to libbar/2. + : + { + $clone_cfg; + + # Build sys:libbar/2. + # + $pkg_build 'sys:libbar/2' 2>'configured sys:libbar/2'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + + # Build foo and libbar/2. + # + $pkg_build foo libbar/2 2>>~%EOE%; + purged libbar/2 + %.* + %.*fetched libbaz/2% + unpacked libbaz/2 + %.* + %.*fetched libbar/2% + unpacked libbar/2 + %.* + %.*fetched foo/2% + unpacked foo/2 + configured libbaz/2 + configured libbar/2 + configured foo/2 + %info: .+ is up to date% + %info: .+ is up to date% + updated libbar/2 + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'configured 2; available sys:?'; + + # Build sys:libbar/2. + # + $pkg_build 'sys:libbar/2' 2>>~%EOE%; + disfigured foo/2 + disfigured libbar/2 + purged libbar/2 + configured sys:libbar/2 + configured foo/2 + disfigured libbaz + purged libbaz + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + # Build libbar/2. + # + $pkg_build libbar/2 2>>~%EOE%; + disfigured foo/2 + purged libbar/2 + %.* + %.*fetched libbaz/2% + unpacked libbaz/2 + %.* + %.*fetched libbar/2% + unpacked libbar/2 + configured libbaz/2 + configured libbar/2 + configured foo/2 + %info: .+ is up to date% + %info: .+ is up to date% + updated libbar/2 + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'configured 2; available sys:?'; + + $pkg_drop foo libbar + } + + : syslibbar1-foo-libbar + : + : The overall plan is to configure sys:libbar/1, then fail to build foo but + : succeed to build foo libbar. + : + { + $clone_cfg; + + # Build sys:libbar/1. + # + $pkg_build 'sys:libbar/1' 2>'configured sys:libbar/1'; + $pkg_status libbar 1>'configured,system 1 hold_package hold_version; available 2 sys:?'; + $pkg_status libbaz 1>'available 2 sys:?'; + + # Fail to build foo. + # + $pkg_build foo 2>>EOE != 0; + error: package foo dependency on (libbar >= 2) is forcing upgrade of sys:libbar/1 to libbar/2 + info: package version sys:libbar/1 is held + info: explicitly request version upgrade to continue + info: while satisfying foo/2 + EOE + + # Build foo and libbar. + # + $pkg_build foo libbar 2>>~%EOE%; + purged libbar/1 + %.* + %.*fetched libbaz/2% + unpacked libbaz/2 + %.* + %.*fetched libbar/2% + unpacked libbar/2 + %.* + %.*fetched foo/2% + unpacked foo/2 + configured libbaz/2 + configured libbar/2 + configured foo/2 + %info: .+ is up to date% + %info: .+ is up to date% + updated libbar/2 + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured 2 hold_package; available sys:?'; + $pkg_status libbaz >'configured 2; available sys:?'; + + $pkg_drop foo libbar + } + + : foo-syslibbar + : + : Build foo and ?sys:libbar. + : + { + $clone_cfg; + + $pkg_build foo '?sys:libbar' 2>>~%EOE%; + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/* + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system *; available 2 1 sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + $pkg_drop foo libbar + } + + : libbar1-foo-syslibbar2 + : + : The overall plan is to configure libbar/1, then fail to build foo but + : succeed to build foo ?sys:libbar/2, and then foo sys:libbar/2. + : + { + $clone_cfg; + + # Build libbar/1. + # + $pkg_build libbar/1 2>>~%EOE%; + %.* + %.*fetched libbaz/2% + unpacked libbaz/2 + %.* + %.*fetched libbar/1% + unpacked libbar/1 + configured libbaz/2 + configured libbar/1 + %info: .+ is up to date% + updated libbar/1 + EOE + + $pkg_status libbar >'configured 1 hold_package hold_version; available 2 sys:?'; + $pkg_status libbaz >'configured 2; available sys:?'; + + # Fail to build foo. + # + $pkg_build foo 2>>EOE != 0; + error: package foo dependency on (libbar >= 2) is forcing upgrade of libbar/1 to 2 + info: package version libbar/1 is held + info: explicitly request version upgrade to continue + info: while satisfying foo/2 + EOE + + # Build foo and ?sys:libbar/2. + # + $pkg_build foo '?sys:libbar/2' 2>>~%EOE%; + disfigured libbar/1 + purged libbar/1 + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/2 + configured foo/2 + disfigured libbaz + purged libbaz + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + # Build foo and sys:libbar/2. + # + $pkg_build foo 'sys:libbar/2' 2>>~%EOE%; + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + $pkg_status libbaz >'available 2 sys:?'; + + $pkg_drop foo libbar + } +} + +: t2 +: +{ + +$clone_cfg && $rep_add $rep/t2 && $rep_fetch + + : no-libbar + : + : Test that the following builds expectedly fails having no libbar available + : in source. + : + { + $clone_cfg; + + $pkg_build foo 2>>EOE != 0; + error: prerequisite libbar >= 2 of package foo is not available in source + info: specify ?sys:libbar if it is available from the system + info: while satisfying foo/2 + EOE + + $pkg_build foo libbar 2>>EOE != 0; + error: libbar is not available in source + info: specify sys:libbar if it is available from the system + EOE + + $pkg_status foo >'available 2 sys:?'; + $pkg_status libbar >'available sys:?' + } + + : foo-syslibbar + : + : Build foo configuring sys:libbar. + : + { + $clone_cfg; + + $pkg_build foo 'sys:libbar' 2>>~%EOE%; + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/* + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system * hold_package hold_version; available sys:?'; + + $pkg_drop foo libbar + } + + : libbar1-foo-syslibbar2 + : + : The overall plan is to configure sys:libbar/1, then fail to build foo, but + : succeed to build foo sys:libbar/2. + : + { + $clone_cfg; + + # Build sys:libbar/1. + # + $pkg_build 'sys:libbar/1' 2>'configured sys:libbar/1'; + $pkg_status libbar 1>'configured,system 1 hold_package hold_version; available sys:?'; + + # Fail to build foo. + # + $pkg_build foo 2>>EOE != 0; + error: prerequisite libbar >= 2 of package foo is not available in source + info: sys:libbar/1 does not satisfy the constrains + info: while satisfying foo/2 + EOE + + # Build foo and sys:libbar/2. + # + $pkg_build foo 'sys:libbar/2' 2>>~%EOE%; + purged libbar/1 + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/2 + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + + $pkg_drop foo libbar + } + + : syslibbar2 + : + : The overall plan is to fail to build foo sys:libbar/1, then configure + : sys:libbar/2 but still fail to build foo sys:libbar/1. + : + { + $clone_cfg; + + # Fail to build foo and sys:libbar/1. + # + $pkg_build foo 'sys:libbar/1' 2>>EOE != 0; + error: prerequisite libbar >= 2 of package foo is not available in source + info: sys:libbar/1 does not satisfy the constrains + info: while satisfying foo/2 + EOE + + # Build sys:libbar/2. + # + $pkg_build 'sys:libbar/2' 2>'configured sys:libbar/2'; + $pkg_status libbar 1>'configured,system 2 hold_package hold_version; available sys:?'; + + # Still fail to build foo and sys:libbar/1. + # + $pkg_build foo 'sys:libbar/1' 2>>EOE != 0; + error: prerequisite libbar >= 2 of package foo is not available in source + info: sys:libbar/1 does not satisfy the constrains + info: while satisfying foo/2 + EOE + + $pkg_drop libbar + } + + : syslibbar1 + : + : The overall plan is to configure sys:libbar/1, then fail to build + : sys:libbar/1.1 foo. + : + { + $clone_cfg; + + # Build sys:libbar/2. + # + $pkg_build 'sys:libbar/1' 2>'configured sys:libbar/1'; + $pkg_status libbar 1>'configured,system 1 hold_package hold_version; available sys:?'; + + # Fail to build sys:libbar/1.1 and foo. + # + $pkg_build 'sys:libbar/1.1' foo 2>>EOE != 0; + error: prerequisite libbar >= 2 of package foo is not available in source + info: sys:libbar/1.1 does not satisfy the constrains + info: while satisfying foo/2 + EOE + + $pkg_drop libbar + } + + : foo-syslibbar-drop-foo + : + : The overall plan is to build foo ?sys:libbar, then drop foo and make sure + : libbar is purged as well. + : + { + $clone_cfg; + + # Build foo and ?sys:libbar. + # + $pkg_build foo '?sys:libbar' 2>>~%EOE%; + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/* + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system *; available sys:?'; + + # Drop foo. + # + $pkg_drop foo 2>>EOE; + disfigured foo + purged libbar + purged foo + EOE + + $pkg_status foo >'available 2 sys:?'; + $pkg_status libbar >'available sys:?' + } + + : syslibbar1-foo-syslibbar-drop-foo + : + : The overall plan is to build sys:libbar/1, then fail to build foo but + : succeed to build foo ?sys:libbar, then drop foo and make sure libbar stays. + : + { + $clone_cfg; + + # Build sys:libbar/1. + # + $pkg_build 'sys:libbar/1' 2>'configured sys:libbar/1'; + $pkg_status libbar 1>'configured,system 1 hold_package hold_version; available sys:?'; + + # Fail to build foo. + # + $pkg_build foo 2>>EOE != 0; + error: prerequisite libbar >= 2 of package foo is not available in source + info: sys:libbar/1 does not satisfy the constrains + info: while satisfying foo/2 + EOE + + # Build foo and '?sys:libbar/2'. + # + $pkg_build foo '?sys:libbar/2' 2>>~%EOE%; + purged libbar/1 + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/2 + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?'; + + # Drop foo. + # + $pkg_drop foo 2>>EOE; + disfigured foo + purged foo + EOE + + $pkg_status foo >'available 2 sys:?'; + $pkg_status libbar >'configured,system 2 hold_package hold_version; available sys:?' + } +} + +: t3 +: +{ + +$clone_cfg && $rep_add $rep/t3 && $rep_fetch + + : no-libbar + : + : Test that the following builds expectedly fails having no libbar available + : in source. + : + { + $clone_cfg; + + $pkg_build foo 2>>EOE != 0; + error: prerequisite libbar >= 2 of package foo is not available in source + info: specify ?sys:libbar if it is available from the system + info: while satisfying foo/2 + EOE + + $pkg_build 'sys:libbar/1' 2>>EOE != 0; + error: unknown package libbar + EOE + + $pkg_build foo 'sys:libbar/1' 2>>EOE != 0; + error: unknown package libbar + EOE + + $pkg_build foo '?sys:libbar/1' 2>>EOE != 0; + error: prerequisite libbar >= 2 of package foo is not available in source + info: sys:libbar/1 does not satisfy the constrains + info: while satisfying foo/2 + EOE + + $pkg_status foo >'available 2 sys:?'; + $pkg_status libbar >'unknown' + } + + : syslibbar1-foo-syslibbar-drop-foo + : + : The overall plan is to build foo ?sys:libbar/2, fail to build sys:libbar + : and foo 'sys:libbar', but succeed to build foo ?sys:libbar/3 and foo + : ?sys:libbar. + : + { + $clone_cfg; + + # Build foo '?sys:libbar/2'. + # + $pkg_build foo '?sys:libbar/2' 2>>~%EOE%; + %.* + %.*fetched foo/2% + unpacked foo/2 + configured sys:libbar/2 + configured foo/2 + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2'; + + # Fail as libbar while being selected is still unknown (not present in t3 + # repo). + # + $pkg_build 'sys:libbar' 2>'error: unknown package libbar' != 0; + $pkg_build foo 'sys:libbar' 2>'error: unknown package libbar' != 0; + $pkg_status foo 1>'configured 2 hold_package; available sys:?'; + $pkg_status libbar 1>'configured,system 2'; + + # Build foo and ?sys:libbar/3. Note that libbar stays as system version 2. + # + $pkg_build foo '?sys:libbar/3' 2>>~%EOE%; + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2'; + + # Build foo and ?sys:libbar. + # + $pkg_build foo '?sys:libbar' 2>>~%EOE%; + %info: .+ is up to date% + updated foo/2 + EOE + + $pkg_status foo >'configured 2 hold_package; available sys:?'; + $pkg_status libbar >'configured,system 2'; + + $pkg_drop foo + } +} diff --git a/tests/pkg/1/build2.org/system/foo-2.tar.gz b/tests/pkg-system/foo-2.tar.gz Binary files differindex 7fef159..7fef159 100644 --- a/tests/pkg/1/build2.org/system/foo-2.tar.gz +++ b/tests/pkg-system/foo-2.tar.gz diff --git a/tests/pkg/1/build2.org/system/libbar-0+1.tar.gz b/tests/pkg-system/libbar-0+1.tar.gz Binary files differindex 9f90936..9f90936 100644 --- a/tests/pkg/1/build2.org/system/libbar-0+1.tar.gz +++ b/tests/pkg-system/libbar-0+1.tar.gz diff --git a/tests/pkg/1/build2.org/system/libbar-1.tar.gz b/tests/pkg-system/libbar-1.tar.gz Binary files differindex 4b52278..4b52278 100644 --- a/tests/pkg/1/build2.org/system/libbar-1.tar.gz +++ b/tests/pkg-system/libbar-1.tar.gz diff --git a/tests/pkg/1/build2.org/system/libbar-2.tar.gz b/tests/pkg-system/libbar-2.tar.gz Binary files differindex 28ad509..28ad509 100644 --- a/tests/pkg/1/build2.org/system/libbar-2.tar.gz +++ b/tests/pkg-system/libbar-2.tar.gz diff --git a/tests/pkg/1/build2.org/system/libbaz-2.tar.gz b/tests/pkg-system/libbaz-2.tar.gz Binary files differindex 3e9c3e6..3e9c3e6 100644 --- a/tests/pkg/1/build2.org/system/libbaz-2.tar.gz +++ b/tests/pkg-system/libbaz-2.tar.gz diff --git a/tests/pkg/1/build2.org/system/t1/foo-2.tar.gz b/tests/pkg-system/t1/foo-2.tar.gz index 39d2e10..39d2e10 120000 --- a/tests/pkg/1/build2.org/system/t1/foo-2.tar.gz +++ b/tests/pkg-system/t1/foo-2.tar.gz diff --git a/tests/pkg/1/build2.org/system/t1/libbar-1.tar.gz b/tests/pkg-system/t1/libbar-1.tar.gz index 971bed1..971bed1 120000 --- a/tests/pkg/1/build2.org/system/t1/libbar-1.tar.gz +++ b/tests/pkg-system/t1/libbar-1.tar.gz diff --git a/tests/pkg/1/build2.org/system/t1/libbar-2.tar.gz b/tests/pkg-system/t1/libbar-2.tar.gz index 2c8027b..2c8027b 120000 --- a/tests/pkg/1/build2.org/system/t1/libbar-2.tar.gz +++ b/tests/pkg-system/t1/libbar-2.tar.gz diff --git a/tests/pkg/1/build2.org/system/t1/libbaz-2.tar.gz b/tests/pkg-system/t1/libbaz-2.tar.gz index 111a2e7..111a2e7 120000 --- a/tests/pkg/1/build2.org/system/t1/libbaz-2.tar.gz +++ b/tests/pkg-system/t1/libbaz-2.tar.gz diff --git a/tests/pkg/1/build2.org/satisfy/repositories b/tests/pkg-system/t1/repositories index 5b70556..5b70556 100644 --- a/tests/pkg/1/build2.org/satisfy/repositories +++ b/tests/pkg-system/t1/repositories diff --git a/tests/pkg/1/build2.org/system/t2/foo-2.tar.gz b/tests/pkg-system/t2/foo-2.tar.gz index 39d2e10..39d2e10 120000 --- a/tests/pkg/1/build2.org/system/t2/foo-2.tar.gz +++ b/tests/pkg-system/t2/foo-2.tar.gz diff --git a/tests/pkg/1/build2.org/system/t2/libbar-0+1.tar.gz b/tests/pkg-system/t2/libbar-0+1.tar.gz index 82bdcba..82bdcba 120000 --- a/tests/pkg/1/build2.org/system/t2/libbar-0+1.tar.gz +++ b/tests/pkg-system/t2/libbar-0+1.tar.gz diff --git a/tests/pkg/1/build2.org/status/stable/repositories b/tests/pkg-system/t2/repositories index 5b70556..5b70556 100644 --- a/tests/pkg/1/build2.org/status/stable/repositories +++ b/tests/pkg-system/t2/repositories diff --git a/tests/pkg/1/build2.org/system/t3/foo-2.tar.gz b/tests/pkg-system/t3/foo-2.tar.gz index 39d2e10..39d2e10 120000 --- a/tests/pkg/1/build2.org/system/t3/foo-2.tar.gz +++ b/tests/pkg-system/t3/foo-2.tar.gz diff --git a/tests/pkg/1/build2.org/system/t3/repositories b/tests/pkg-system/t3/repositories index 2715634..2715634 100644 --- a/tests/pkg/1/build2.org/system/t3/repositories +++ b/tests/pkg-system/t3/repositories diff --git a/tests/pkg-unpack.test b/tests/pkg-unpack.test new file mode 100644 index 0000000..49faffa --- /dev/null +++ b/tests/pkg-unpack.test @@ -0,0 +1,199 @@ +# file : tests/pkg-unpack.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test config.test remote.test + +# Source repository: +# +# pkg-unpack +# |-- hello +# | |-- libhello-1.0.0.tar.gz +# | `-- repositories +# |-- libfoo-1.1.0 +# | |-- build +# | | `-- bootstrap.build +# | |-- buildfile +# | `-- manifest +# `-- t1 +# |-- libfoo-1.0.0.tar.gz +# |-- libfoo-1.1.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + # Create the signed 'hello' repository. + # + cp -r $src/hello $out/hello + cat <<<$cert_manifest >+$out/hello/repositories + $rep_create --key $key $out/hello &$out/hello/packages &$out/hello/signature + + # Create the 't1' repository. + # + cp -r $src/t1 $out/t1 && $rep_create $out/t1 &$out/t1/packages +end + +pkg_fetch += -d cfg 2>- +pkg_purge += -d cfg +pkg_status += -d cfg +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all 2>- + +: replace-with-existing +: +$clone_cfg; +$* -r 2>>EOE != 0 + error: --replace|-r can only be specified with --existing|-e + EOE + +: no-dir +: +$clone_cfg; +$* -e 2>>EOE != 0 + error: package directory argument expected + info: run 'bpkg help pkg-unpack' for more information + EOE + +: not-package-dir +: +$clone_cfg; +$* -e ./ 2>>/EOE != 0 + error: no manifest file in package directory ./ + EOE + +: dir-not-exist +: +$clone_cfg; +$* -e ./no-such-dir 2>>/EOE != 0 + error: package directory ./no-such-dir/ does not exist + EOE + +: no-name +: +$clone_cfg; +$* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-unpack' for more information + EOE + +: fetched-rep +: +{ + +$clone_cfg && $rep_add $rep/t1 && $rep_fetch --trust-yes + + : package-exists + : + { + $clone_cfg && $pkg_fetch libfoo/1.0.0; + + $* -e $src/libfoo-1.1.0 2>>/EOE != 0; + error: package libfoo already exists in configuration cfg/ + info: version: 1.0.0, state: fetched, substate: none + info: use 'pkg-unpack --replace|-r' to replace + EOE + + $pkg_purge libfoo 2>'purged libfoo/1.0.0'; + $* -e $src/libfoo-1.1.0 2>'unpacked libfoo/1.1.0'; + $pkg_status libfoo/1.1.0 1>'unpacked; available'; + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : replace-fetched + : + { + $clone_cfg && $pkg_fetch libfoo/1.0.0; + + $* -e $src/libfoo-1.1.0 2>>/EOE != 0; + error: package libfoo already exists in configuration cfg/ + info: version: 1.0.0, state: fetched, substate: none + info: use 'pkg-unpack --replace|-r' to replace + EOE + + $* -r -e $src/libfoo-1.1.0 2>'unpacked libfoo/1.1.0'; + $pkg_status libfoo/1.1.0 1>'unpacked; available'; + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : replace-unpacked + : + { + $clone_cfg && $pkg_fetch libfoo/1.0.0; + + $* libfoo 2>'unpacked libfoo/1.0.0'; + + $* -e $src/libfoo-1.1.0 2>>/EOE != 0; + error: package libfoo already exists in configuration cfg/ + info: version: 1.0.0, state: unpacked, substate: none + info: use 'pkg-unpack --replace|-r' to replace + EOE + + $* -r -e $src/libfoo-1.1.0 2>'unpacked libfoo/1.1.0'; + $pkg_status libfoo/1.1.0 1>'unpacked; available'; + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : wrong-state + : + { + $clone_cfg; + + $* libfoo 2>>/EOE != 0; + error: package libfoo does not exist in configuration cfg/ + EOE + + $* -e $src/libfoo-1.1.0 2>'unpacked libfoo/1.1.0'; + + $* libfoo 2>>EOE != 0; + error: package libfoo is unpacked + info: expected it to be fetched + EOE + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } + + : right-state + : + { + $clone_cfg && $pkg_fetch libfoo/1.0.0; + + $pkg_status libfoo/1.0.0 1>'fetched; available'; + $* libfoo 2>'unpacked libfoo/1.0.0'; + $pkg_status libfoo/1.0.0 1>'unpacked; available'; + + $pkg_purge libfoo 2>'purged libfoo/1.0.0' + } + + : purge-existing + : + { + $clone_cfg; + + # @@ Use --no-cleanup for cp builtin when implemented. + # + d = &!libfoo-1.1.0/; + c = $d/ $d/build/ $d/build/bootstrap.build $d/buildfile $d/manifest; + cp -r $src/libfoo-1.1.0 ./ $c; + + $* -p -e libfoo-1.1.0 2>'unpacked libfoo/1.1.0'; + + $pkg_purge libfoo 2>'purged libfoo/1.1.0' + } +} + +: hello +: +{ + $clone_cfg; + $rep_add $rep/hello && $rep_fetch --trust $cert_fp &cfg/.bpkg/certs/***; + $pkg_fetch libhello/1.0.0; + + $* libhello 2>'unpacked libhello/1.0.0'; + + $pkg_purge libhello 2>'purged libhello/1.0.0' +} diff --git a/tests/pkg-unpack/hello b/tests/pkg-unpack/hello new file mode 120000 index 0000000..e10a7f8 --- /dev/null +++ b/tests/pkg-unpack/hello @@ -0,0 +1 @@ +../common/hello
\ No newline at end of file diff --git a/tests/pkg-unpack/libfoo-1.1.0 b/tests/pkg-unpack/libfoo-1.1.0 new file mode 120000 index 0000000..15fcf5c --- /dev/null +++ b/tests/pkg-unpack/libfoo-1.1.0 @@ -0,0 +1 @@ +../common/libfoo-1.1.0
\ No newline at end of file diff --git a/tests/pkg-unpack/t1 b/tests/pkg-unpack/t1 new file mode 120000 index 0000000..a27d298 --- /dev/null +++ b/tests/pkg-unpack/t1 @@ -0,0 +1 @@ +../common/t1
\ No newline at end of file diff --git a/tests/pkg-update.test b/tests/pkg-update.test new file mode 100644 index 0000000..c64b309 --- /dev/null +++ b/tests/pkg-update.test @@ -0,0 +1,148 @@ +# file : tests/pkg-update.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test config.test remote.test + +# Source repository: +# +# pkg-update +# |-- hello +# | |-- libhello-1.0.0.tar.gz +# | `-- repositories +# `-- libhello-1.0.0 +# |-- build +# | |-- bootstrap.build +# | |-- export.build +# | `-- root.build +# |-- buildfile +# |-- hello +# | |-- buildfile +# | |-- export +# | |-- hello +# | `-- hello.cxx +# |-- INSTALL +# |-- manifest +# |-- tests +# | |-- build +# | | |-- bootstrap.build +# | | `-- root.build +# | |-- buildfile +# | `-- test +# | |-- buildfile +# | |-- driver.cxx +# | `-- test.out +# `-- version + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + # Create the signed 'hello' repository. + # + cp -r $src/hello $out/hello + cat <<<$cert_manifest >+$out/hello/repositories + $rep_create --key $key $out/hello &$out/hello/packages &$out/hello/signature +end + +pkg_configure += -d cfg "config.cxx=$config.cxx" 2>- +pkg_disfigure += -d cfg +pkg_fetch += -d cfg 2>- +pkg_purge += -d cfg +pkg_unpack += -d cfg 2>- +rep_add += -d cfg 2>- +rep_fetch += -d cfg --auth all 2>- + +# Sometimes we need to run underlying build update operation with -j 1 options +# to have an output that we can match reliably. +# +j1 = --build-option -j --build-option 1 + +: no-name +: +$clone_cfg; +$* 2>>EOE != 0 + error: package name argument expected + info: run 'bpkg help pkg-update' for more information + EOE + +: fetched +: +{ + +$clone_cfg + +$rep_add $rep/hello && $rep_fetch --trust $cert_fp &cfg/.bpkg/certs/*** + + : no-such-package + : + $clone_cfg; + $* libhello 2>>/EOE != 0 + error: package libhello does not exist in configuration cfg/ + EOE + + : wrong-state + : + { + $clone_cfg && $pkg_fetch libhello/1.0.0; + + $* libhello 2>>EOE != 0; + error: package libhello is fetched + info: expected it to be configured + EOE + + $pkg_purge libhello 2>'purged libhello/1.0.0' + } + + : src-eq-out + : + { + $clone_cfg; + $pkg_fetch libhello/1.0.0 && $pkg_unpack libhello; + $pkg_configure libhello; + + $* $j1 libhello 2>>~%EOE%; + %c\+\+ .+% + %ld .+% + %c\+\+ .+% + %ld .+% + %c\+\+ .+% + %ld .+% + updated libhello/1.0.0 + EOE + + $* libhello 2>>~%EOE%; + %info: .+ is up to date% + updated libhello/1.0.0 + EOE + + $pkg_disfigure libhello 2>'disfigured libhello/1.0.0'; + $pkg_purge libhello 2>'purged libhello/1.0.0' + } +} + +: src-ne-out +: +{ + $clone_cfg; + $pkg_unpack -e $src/libhello-1.0.0 && $pkg_configure libhello; + + $* $j1 libhello 2>>~%EOE%; + %mkdir .+% + %mkdir .+% + %c\+\+ .+% + %ld .+% + %c\+\+ .+% + %ld .+% + %c\+\+ .+% + %ld .+% + updated libhello/1.0.0 + EOE + + $* libhello 2>>~%EOE%; + %info: .+ is up to date% + updated libhello/1.0.0 + EOE + + $pkg_disfigure libhello 2>'disfigured libhello/1.0.0'; + $pkg_purge libhello 2>'purged libhello/1.0.0' +} diff --git a/tests/pkg-update/hello b/tests/pkg-update/hello new file mode 120000 index 0000000..e10a7f8 --- /dev/null +++ b/tests/pkg-update/hello @@ -0,0 +1 @@ +../common/hello
\ No newline at end of file diff --git a/tests/pkg-update/libhello-1.0.0 b/tests/pkg-update/libhello-1.0.0 new file mode 120000 index 0000000..a6f638b --- /dev/null +++ b/tests/pkg-update/libhello-1.0.0 @@ -0,0 +1 @@ +../common/libhello-1.0.0
\ No newline at end of file diff --git a/tests/pkg-verify.test b/tests/pkg-verify.test new file mode 100644 index 0000000..9d9c714 --- /dev/null +++ b/tests/pkg-verify.test @@ -0,0 +1,59 @@ +# file : tests/pkg-verify.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test + +# Source repository: +# +# pkg-verify +# |-- foo-1.tar.gz +# |-- foo-2.tar.gz (manifest with unknown name) +# `-- not-a-package.tar.gz + +: valid-package +: +$* $src/foo-1.tar.gz 2>'valid package foo 1' + +: no-package +: +$* 2>>EOE != 0 +error: archive path argument expected + info: run 'bpkg help pkg-verify' for more information +EOE + +: not-a-package +: +{ + : verbose + : + $* $src/not-a-package.tar.gz 2>>/~%EOE% != 0 + %.+ + %error: .+/not-a-package.tar.gz does not appear to be a bpkg package% + EOE + + : silent + : + $* --silent $src/not-a-package.tar.gz != 0 +} + +: unknown-name +: +: Test that package manifest that contains an unknown name is properly handled. +: +{ + : verbose + : + $* $src/foo-2.tar.gz 2>>/~%EOE% != 0 + foo-2/manifest:8:1: error: unknown name 'color' in package manifest + % info: package archive .+/foo-2.tar.gz% + EOE + + : silent + : + $* --silent $src/foo-2.tar.gz != 0 + + : ignore + : + $* --ignore-unknown $src/foo-2.tar.gz 2>'valid package foo 2' +} diff --git a/tests/pkg-verify/foo-1.tar.gz b/tests/pkg-verify/foo-1.tar.gz new file mode 120000 index 0000000..7a0bc92 --- /dev/null +++ b/tests/pkg-verify/foo-1.tar.gz @@ -0,0 +1 @@ +../common/foo-1.tar.gz
\ No newline at end of file diff --git a/tests/pkg-verify/foo-2.tar.gz b/tests/pkg-verify/foo-2.tar.gz Binary files differnew file mode 100644 index 0000000..cb39194 --- /dev/null +++ b/tests/pkg-verify/foo-2.tar.gz diff --git a/tests/pkg-verify/not-a-package.tar.gz b/tests/pkg-verify/not-a-package.tar.gz Binary files differnew file mode 100644 index 0000000..be3823a --- /dev/null +++ b/tests/pkg-verify/not-a-package.tar.gz diff --git a/tests/pkg/.gitignore b/tests/pkg/.gitignore deleted file mode 100644 index cd1ec36..0000000 --- a/tests/pkg/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -packages -signature diff --git a/tests/pkg/1/build2.org/auth/expired/packages b/tests/pkg/1/build2.org/auth/expired/packages deleted file mode 100644 index 9aaf177..0000000 --- a/tests/pkg/1/build2.org/auth/expired/packages +++ /dev/null @@ -1,11 +0,0 @@ -: 1 -sha256sum: ba75221f5f610f5f9ebee19a7449dfcff5c9fb2c7d87d2482b8324c4ea419950 -: -name: libfoo -version: 1.0.0 -summary: libfoo -license: MIT -url: http://example.org -email: pkg@example.org -location: libfoo-1.0.0.tar.gz -sha256sum: 642aa60cda80f6579247dfc64192c67ec3f2ed932ae2f56e592000ad9fea435d diff --git a/tests/pkg/1/build2.org/auth/expired/signature b/tests/pkg/1/build2.org/auth/expired/signature deleted file mode 100644 index dc2aeee..0000000 --- a/tests/pkg/1/build2.org/auth/expired/signature +++ /dev/null @@ -1,13 +0,0 @@ -: 1 -sha256sum: cd05e2ebe9dac484950a54e95a76efba0cac27ec5148dc34fa23a5cd7da72e3d -signature: \ -geWdw7Gm+Rt+CLDMBby5Y796E8rxwImb0bmcZwGWar9D3vkFm9Kjh00Buuo1PuU7tP1dV6yvRbH8 -NzC0IryEoUJHx9909AJ449ET9Zb+C3ykEeBlKH2wonj7cAVK9ZEDpPEGAtp56XWZQEawl50mwq6t -XkZAABxtOswXiicdh3HK7kaPHp38/9CBMc0rva6wDnkbTigUYA2ULqLtP5a5mLovVc48zI9A/hmb -Qx1/Nr7nzTZNDGK7CwTAb1fPam9rZklTfCTPSPUUjvWjM9XdY8cbRE1FrE14TXdyQPxCLzHO2dUO -YWH5/qMikEoCYhYXQ6KhekoT/MUiVC3PMcYQbYOrOtSxq6RcgnymexBe1XIyld5Rfo1eXu8TK11r -QPULIqAGy6RwEUhGznuEiGHQwb1UymNyJ/qgr4vBPjJtlvptqG5XNmtiJ22f07nmeVRi2Vg2UyOw -HoVpy5t/w0tEnUXPA39Vt0v1bUm7Knhc8qL4JFEqK/j/CzEHzEtAjn0aoGuKubCO0WUa+v6ZlkLU -YrNUIdgT1wgj4yEhLO3g+NsnxFH05D2sfR16rrkI2E6st5crAHR8FOl2FDsWxgKqNbzXZw7rl+Fa -TobGycX7MDf2mbBmR/KmEkMBJ4mziWLAycSAGyE5VRYDwHPJlQE0143wBzT8eNw4VLm/r+88VYw= -\ diff --git a/tests/pkg/1/build2.org/auth/name-mismatch/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/auth/name-mismatch/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/auth/name-mismatch/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/auth/name-mismatch/repositories b/tests/pkg/1/build2.org/auth/name-mismatch/repositories deleted file mode 100644 index 15fa092..0000000 --- a/tests/pkg/1/build2.org/auth/name-mismatch/repositories +++ /dev/null @@ -1,34 +0,0 @@ -: 1 -certificate: \ ------BEGIN CERTIFICATE----- -MIIFXTCCA0WgAwIBAgIJANXKeBuJax30MA0GCSqGSIb3DQEBCwUAMEoxFzAVBgNV -BAoMDkNvZGUgU3ludGhlc2lzMS8wLQYDVQQDDCZuYW1lOmJ1aWxkMi5vcmcvYXV0 -aC9taXNtYXRjaGVkL25hbWUveDAeFw0xNjA1MDMyMzUyNDJaFw0xNzA1MDMyMzUy -NDJaMEoxFzAVBgNVBAoMDkNvZGUgU3ludGhlc2lzMS8wLQYDVQQDDCZuYW1lOmJ1 -aWxkMi5vcmcvYXV0aC9taXNtYXRjaGVkL25hbWUveDCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANq78SXuzFzCMoFU1RnzEeAfzE0UUYGynS3F2lG7viH3 -coxjLt+BrFBudVs4XDTpjXS19hRxIohEgD71W1jhDvmUC9yCMW13PCIIjRKTTz0e -fEhTcMHdhOgvKZsje0IV7svoKVXcG7DfUVl51wWPQPSbUrfsQbsXg7Pz5HaDx+Dt -2i9hwdE1M0z4R2dtwQkszFyCKiX8RF9oPXirTz5ETLC3f19JUapLrY5l5ZylzQif -LhPMlHLlrT0n7KkohH7waX3KyeLa0M2IIl3zaeAsuN+ErFVecAdlJIvX00cth2OO -/Gxy09sIKlagi2q7ZDik2sMvG8dAv7gNZsXp+FOj/XXCiOI9f6D5ospJdK9B5UCA -BjmGc8W5Odv6ZLey5Ui76luI7ciITOKfAoEkbyMiNHiRxLdM7aAeizdcwHU4bm6J -lmiJk8UyyV85f33mvCSfuo7D+DQYiK650/xwRdTFBIqi38IwME62gT7ah/AOmiPs -hj7FjwIU7ZWHskyr9qpExQOEKJXoLZJo1rf6MRc8AsJyz6zdfQhT1BTzhogNfru4 -xjVM6fSrjRUF34msuWcz/HKo9W350Aw2y5F59kziP+m7G6uBYrqmElv/13Vamg2Z -Z1b38KMz5Ss3SkfcDErOzz/D+0hRlOaCIeWts1G2zWcQvBnn+zGA+sTIu0xAFOCR -AgMBAAGjRjBEMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcD -AzAaBgNVHREEEzARgQ9pbmZvQGJ1aWxkMi5vcmcwDQYJKoZIhvcNAQELBQADggIB -AKvUnaZP20bf4ahpa50QUvRb4Kel7yhvvmae7/aIBk5ANxnJC3yuOpmtGve5+lLE -+6w/XwFASz/7PAdUlEp+LBYknGnx5StoqBzP7nwapm+tBcrZ3Q5MxareXXOSx1Ac -4Dh9vDMRevDHZ5LQATHG+Q7zaKmBb0ZeSjJlP4+0680AKN4YDmY1a81uoa1jRXbV -c4iutSoBaVNdWB5+GGelEjvhzN0gZ22IpS3mjbyCbJNywHQMHBLwtxuFgkdOfPkC -MGBbvG5TD7SKgQNlfsoQu3UJpokzz7hP1TmjCpSDjGSqJlYvovrHCFQGWjtk0UVQ -tXAQiVPlMsj2kbxJf2ICYYZuvQbmhvNF049ldrpk26jlDzSZ+5t2jueC+q8knTsn -p3LPx7sqGfkIq41pxHAQseBSYUEo6r6LwfDQPmwb7fOUpLJm6GdsEkqqUhmB3W6Y -H4t6PKCjFI91JqTka6oF3Lblf3QLXlMpevBwvgaZAC1d4eiNPq+mSAL6T2Cb8Hvq -Imzyh6EcMbWD9RSnbDCujBjnj0WXO7VjUqShZ60D78PCdXbaK7RAOX9cLUYO/OHd -z5vUbBrPvDImu5gJFRLOGKKw/7Yn9um/pyuSHuuucBkjBJ4J/tPi/MBZiWM7g2qc -obzYoLev74dMkZMZDsGDAcuYX40ZVkF7ATqZC405/fSH ------END CERTIFICATE----- -\ diff --git a/tests/pkg/1/build2.org/auth/sha256sum-mismatch/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/auth/sha256sum-mismatch/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/auth/sha256sum-mismatch/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/auth/sha256sum-mismatch/repositories b/tests/pkg/1/build2.org/auth/sha256sum-mismatch/repositories deleted file mode 100644 index 9bcb20a..0000000 --- a/tests/pkg/1/build2.org/auth/sha256sum-mismatch/repositories +++ /dev/null @@ -1,33 +0,0 @@ -: 1 -certificate: \ ------BEGIN CERTIFICATE----- -MIIFLzCCAxegAwIBAgIJAK41T2Si9cMEMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV -BAoTDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDEw9uYW1lOmJ1aWxkMi5vcmcwHhcN -MTYwNDMwMTQyNDQ3WhcNMTcwNDMwMTQyNDQ3WjAzMRcwFQYDVQQKEw5Db2RlIFN5 -bnRoZXNpczEYMBYGA1UEAxMPbmFtZTpidWlsZDIub3JnMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA2rvxJe7MXMIygVTVGfMR4B/MTRRRgbKdLcXaUbu+ -IfdyjGMu34GsUG51WzhcNOmNdLX2FHEiiESAPvVbWOEO+ZQL3IIxbXc8IgiNEpNP -PR58SFNwwd2E6C8pmyN7QhXuy+gpVdwbsN9RWXnXBY9A9JtSt+xBuxeDs/PkdoPH -4O3aL2HB0TUzTPhHZ23BCSzMXIIqJfxEX2g9eKtPPkRMsLd/X0lRqkutjmXlnKXN -CJ8uE8yUcuWtPSfsqSiEfvBpfcrJ4trQzYgiXfNp4Cy434SsVV5wB2Uki9fTRy2H -Y478bHLT2wgqVqCLartkOKTawy8bx0C/uA1mxen4U6P9dcKI4j1/oPmiykl0r0Hl -QIAGOYZzxbk52/pkt7LlSLvqW4jtyIhM4p8CgSRvIyI0eJHEt0ztoB6LN1zAdThu -bomWaImTxTLJXzl/fea8JJ+6jsP4NBiIrrnT/HBF1MUEiqLfwjAwTraBPtqH8A6a -I+yGPsWPAhTtlYeyTKv2qkTFA4QolegtkmjWt/oxFzwCwnLPrN19CFPUFPOGiA1+ -u7jGNUzp9KuNFQXfiay5ZzP8cqj1bfnQDDbLkXn2TOI/6bsbq4FiuqYSW//XdVqa -DZlnVvfwozPlKzdKR9wMSs7PP8P7SFGU5oIh5a2zUbbNZxC8Gef7MYD6xMi7TEAU -4JECAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF -BwMDMBoGA1UdEQQTMBGBD2luZm9AYnVpbGQyLm9yZzANBgkqhkiG9w0BAQsFAAOC -AgEAeBHkz12OPjjFPftCZ8u/9Kq+W0ZnqQqXmSLj5SQFiG5PEUSV19XFcGawwjbU -6guceUSHhHQr/KhpV02pyoPPtskdognHQCPr6HCR6eeEtfBUSum5dKpJAWqGhszg -bPCb11/ksBBzpBbc/C+gnU8ZvsglJ/wxrizZ0AYeSdvyWq8pgoh2vGpgdhK5MWhd -rVGQm+TUVmXyQwNrYDjqhoGZF02UilIekedegWUEvkXnk5rzyzTaX+GwlnsplVY2 -Xijn8cWkO4cCDkthyjfNPgUm8ZgKuBgs+OYRbW4XtuXgeBucBVCryrM8+3OSmzbs -IBQWL0EDT7bnt2ukE+cUx8Foc/+180KZAdDbUY9MOsYCac3bXnIJd/q1pzkr+OvL -EXnuIGuzUqVkcD4+ABaWefNUm3KeZwBAupYc9eo2/YzpCUsgAe0PAdgJhcg9D4kX -2RwwjVpOPWUxevrPq32Lo3R8obfl2aCLzcuiuheb1EcJLlAH67KqdXLDpvZqJ9qi -iaBCixRl2t3our5VSBWQQefGnH6DWn1JM34zyBbeZdgjyqebSN42p+hADYe2qzdf -AviHJsBwvt3HYpr3bfU6EDx1cU5D6gNAxzZMkZhnEQ7u6kXDcLyWJhgXcZhGT0xv -D/x+fIGI1t2XkoOmvuno1MqoDQX3sCYd0bfB/9wwzcNexic= ------END CERTIFICATE----- -\ diff --git a/tests/pkg/1/build2.org/auth/signature-mismatch/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/auth/signature-mismatch/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/auth/signature-mismatch/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/auth/signature-mismatch/repositories b/tests/pkg/1/build2.org/auth/signature-mismatch/repositories deleted file mode 100644 index 9bcb20a..0000000 --- a/tests/pkg/1/build2.org/auth/signature-mismatch/repositories +++ /dev/null @@ -1,33 +0,0 @@ -: 1 -certificate: \ ------BEGIN CERTIFICATE----- -MIIFLzCCAxegAwIBAgIJAK41T2Si9cMEMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV -BAoTDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDEw9uYW1lOmJ1aWxkMi5vcmcwHhcN -MTYwNDMwMTQyNDQ3WhcNMTcwNDMwMTQyNDQ3WjAzMRcwFQYDVQQKEw5Db2RlIFN5 -bnRoZXNpczEYMBYGA1UEAxMPbmFtZTpidWlsZDIub3JnMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA2rvxJe7MXMIygVTVGfMR4B/MTRRRgbKdLcXaUbu+ -IfdyjGMu34GsUG51WzhcNOmNdLX2FHEiiESAPvVbWOEO+ZQL3IIxbXc8IgiNEpNP -PR58SFNwwd2E6C8pmyN7QhXuy+gpVdwbsN9RWXnXBY9A9JtSt+xBuxeDs/PkdoPH -4O3aL2HB0TUzTPhHZ23BCSzMXIIqJfxEX2g9eKtPPkRMsLd/X0lRqkutjmXlnKXN -CJ8uE8yUcuWtPSfsqSiEfvBpfcrJ4trQzYgiXfNp4Cy434SsVV5wB2Uki9fTRy2H -Y478bHLT2wgqVqCLartkOKTawy8bx0C/uA1mxen4U6P9dcKI4j1/oPmiykl0r0Hl -QIAGOYZzxbk52/pkt7LlSLvqW4jtyIhM4p8CgSRvIyI0eJHEt0ztoB6LN1zAdThu -bomWaImTxTLJXzl/fea8JJ+6jsP4NBiIrrnT/HBF1MUEiqLfwjAwTraBPtqH8A6a -I+yGPsWPAhTtlYeyTKv2qkTFA4QolegtkmjWt/oxFzwCwnLPrN19CFPUFPOGiA1+ -u7jGNUzp9KuNFQXfiay5ZzP8cqj1bfnQDDbLkXn2TOI/6bsbq4FiuqYSW//XdVqa -DZlnVvfwozPlKzdKR9wMSs7PP8P7SFGU5oIh5a2zUbbNZxC8Gef7MYD6xMi7TEAU -4JECAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF -BwMDMBoGA1UdEQQTMBGBD2luZm9AYnVpbGQyLm9yZzANBgkqhkiG9w0BAQsFAAOC -AgEAeBHkz12OPjjFPftCZ8u/9Kq+W0ZnqQqXmSLj5SQFiG5PEUSV19XFcGawwjbU -6guceUSHhHQr/KhpV02pyoPPtskdognHQCPr6HCR6eeEtfBUSum5dKpJAWqGhszg -bPCb11/ksBBzpBbc/C+gnU8ZvsglJ/wxrizZ0AYeSdvyWq8pgoh2vGpgdhK5MWhd -rVGQm+TUVmXyQwNrYDjqhoGZF02UilIekedegWUEvkXnk5rzyzTaX+GwlnsplVY2 -Xijn8cWkO4cCDkthyjfNPgUm8ZgKuBgs+OYRbW4XtuXgeBucBVCryrM8+3OSmzbs -IBQWL0EDT7bnt2ukE+cUx8Foc/+180KZAdDbUY9MOsYCac3bXnIJd/q1pzkr+OvL -EXnuIGuzUqVkcD4+ABaWefNUm3KeZwBAupYc9eo2/YzpCUsgAe0PAdgJhcg9D4kX -2RwwjVpOPWUxevrPq32Lo3R8obfl2aCLzcuiuheb1EcJLlAH67KqdXLDpvZqJ9qi -iaBCixRl2t3our5VSBWQQefGnH6DWn1JM34zyBbeZdgjyqebSN42p+hADYe2qzdf -AviHJsBwvt3HYpr3bfU6EDx1cU5D6gNAxzZMkZhnEQ7u6kXDcLyWJhgXcZhGT0xv -D/x+fIGI1t2XkoOmvuno1MqoDQX3sCYd0bfB/9wwzcNexic= ------END CERTIFICATE----- -\ diff --git a/tests/pkg/1/build2.org/auth/signed/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/auth/signed/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/auth/signed/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/auth/signed/repositories b/tests/pkg/1/build2.org/auth/signed/repositories deleted file mode 100644 index 9bcb20a..0000000 --- a/tests/pkg/1/build2.org/auth/signed/repositories +++ /dev/null @@ -1,33 +0,0 @@ -: 1 -certificate: \ ------BEGIN CERTIFICATE----- -MIIFLzCCAxegAwIBAgIJAK41T2Si9cMEMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV -BAoTDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDEw9uYW1lOmJ1aWxkMi5vcmcwHhcN -MTYwNDMwMTQyNDQ3WhcNMTcwNDMwMTQyNDQ3WjAzMRcwFQYDVQQKEw5Db2RlIFN5 -bnRoZXNpczEYMBYGA1UEAxMPbmFtZTpidWlsZDIub3JnMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA2rvxJe7MXMIygVTVGfMR4B/MTRRRgbKdLcXaUbu+ -IfdyjGMu34GsUG51WzhcNOmNdLX2FHEiiESAPvVbWOEO+ZQL3IIxbXc8IgiNEpNP -PR58SFNwwd2E6C8pmyN7QhXuy+gpVdwbsN9RWXnXBY9A9JtSt+xBuxeDs/PkdoPH -4O3aL2HB0TUzTPhHZ23BCSzMXIIqJfxEX2g9eKtPPkRMsLd/X0lRqkutjmXlnKXN -CJ8uE8yUcuWtPSfsqSiEfvBpfcrJ4trQzYgiXfNp4Cy434SsVV5wB2Uki9fTRy2H -Y478bHLT2wgqVqCLartkOKTawy8bx0C/uA1mxen4U6P9dcKI4j1/oPmiykl0r0Hl -QIAGOYZzxbk52/pkt7LlSLvqW4jtyIhM4p8CgSRvIyI0eJHEt0ztoB6LN1zAdThu -bomWaImTxTLJXzl/fea8JJ+6jsP4NBiIrrnT/HBF1MUEiqLfwjAwTraBPtqH8A6a -I+yGPsWPAhTtlYeyTKv2qkTFA4QolegtkmjWt/oxFzwCwnLPrN19CFPUFPOGiA1+ -u7jGNUzp9KuNFQXfiay5ZzP8cqj1bfnQDDbLkXn2TOI/6bsbq4FiuqYSW//XdVqa -DZlnVvfwozPlKzdKR9wMSs7PP8P7SFGU5oIh5a2zUbbNZxC8Gef7MYD6xMi7TEAU -4JECAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF -BwMDMBoGA1UdEQQTMBGBD2luZm9AYnVpbGQyLm9yZzANBgkqhkiG9w0BAQsFAAOC -AgEAeBHkz12OPjjFPftCZ8u/9Kq+W0ZnqQqXmSLj5SQFiG5PEUSV19XFcGawwjbU -6guceUSHhHQr/KhpV02pyoPPtskdognHQCPr6HCR6eeEtfBUSum5dKpJAWqGhszg -bPCb11/ksBBzpBbc/C+gnU8ZvsglJ/wxrizZ0AYeSdvyWq8pgoh2vGpgdhK5MWhd -rVGQm+TUVmXyQwNrYDjqhoGZF02UilIekedegWUEvkXnk5rzyzTaX+GwlnsplVY2 -Xijn8cWkO4cCDkthyjfNPgUm8ZgKuBgs+OYRbW4XtuXgeBucBVCryrM8+3OSmzbs -IBQWL0EDT7bnt2ukE+cUx8Foc/+180KZAdDbUY9MOsYCac3bXnIJd/q1pzkr+OvL -EXnuIGuzUqVkcD4+ABaWefNUm3KeZwBAupYc9eo2/YzpCUsgAe0PAdgJhcg9D4kX -2RwwjVpOPWUxevrPq32Lo3R8obfl2aCLzcuiuheb1EcJLlAH67KqdXLDpvZqJ9qi -iaBCixRl2t3our5VSBWQQefGnH6DWn1JM34zyBbeZdgjyqebSN42p+hADYe2qzdf -AviHJsBwvt3HYpr3bfU6EDx1cU5D6gNAxzZMkZhnEQ7u6kXDcLyWJhgXcZhGT0xv -D/x+fIGI1t2XkoOmvuno1MqoDQX3sCYd0bfB/9wwzcNexic= ------END CERTIFICATE----- -\ diff --git a/tests/pkg/1/build2.org/auth/unsigned1/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/auth/unsigned1/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/auth/unsigned1/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/auth/unsigned2/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/auth/unsigned2/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/auth/unsigned2/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/common/hello/repositories b/tests/pkg/1/build2.org/common/hello/repositories deleted file mode 100644 index bbe8a66..0000000 --- a/tests/pkg/1/build2.org/common/hello/repositories +++ /dev/null @@ -1,36 +0,0 @@ -# Hello World repository. Currently does not have any prerequisite -# repositories. -# -: 1 -certificate: \ ------BEGIN CERTIFICATE----- -MIIFLzCCAxegAwIBAgIJAK41T2Si9cMEMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV -BAoTDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDEw9uYW1lOmJ1aWxkMi5vcmcwHhcN -MTYwNDMwMTQyNDQ3WhcNMTcwNDMwMTQyNDQ3WjAzMRcwFQYDVQQKEw5Db2RlIFN5 -bnRoZXNpczEYMBYGA1UEAxMPbmFtZTpidWlsZDIub3JnMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA2rvxJe7MXMIygVTVGfMR4B/MTRRRgbKdLcXaUbu+ -IfdyjGMu34GsUG51WzhcNOmNdLX2FHEiiESAPvVbWOEO+ZQL3IIxbXc8IgiNEpNP -PR58SFNwwd2E6C8pmyN7QhXuy+gpVdwbsN9RWXnXBY9A9JtSt+xBuxeDs/PkdoPH -4O3aL2HB0TUzTPhHZ23BCSzMXIIqJfxEX2g9eKtPPkRMsLd/X0lRqkutjmXlnKXN -CJ8uE8yUcuWtPSfsqSiEfvBpfcrJ4trQzYgiXfNp4Cy434SsVV5wB2Uki9fTRy2H -Y478bHLT2wgqVqCLartkOKTawy8bx0C/uA1mxen4U6P9dcKI4j1/oPmiykl0r0Hl -QIAGOYZzxbk52/pkt7LlSLvqW4jtyIhM4p8CgSRvIyI0eJHEt0ztoB6LN1zAdThu -bomWaImTxTLJXzl/fea8JJ+6jsP4NBiIrrnT/HBF1MUEiqLfwjAwTraBPtqH8A6a -I+yGPsWPAhTtlYeyTKv2qkTFA4QolegtkmjWt/oxFzwCwnLPrN19CFPUFPOGiA1+ -u7jGNUzp9KuNFQXfiay5ZzP8cqj1bfnQDDbLkXn2TOI/6bsbq4FiuqYSW//XdVqa -DZlnVvfwozPlKzdKR9wMSs7PP8P7SFGU5oIh5a2zUbbNZxC8Gef7MYD6xMi7TEAU -4JECAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF -BwMDMBoGA1UdEQQTMBGBD2luZm9AYnVpbGQyLm9yZzANBgkqhkiG9w0BAQsFAAOC -AgEAeBHkz12OPjjFPftCZ8u/9Kq+W0ZnqQqXmSLj5SQFiG5PEUSV19XFcGawwjbU -6guceUSHhHQr/KhpV02pyoPPtskdognHQCPr6HCR6eeEtfBUSum5dKpJAWqGhszg -bPCb11/ksBBzpBbc/C+gnU8ZvsglJ/wxrizZ0AYeSdvyWq8pgoh2vGpgdhK5MWhd -rVGQm+TUVmXyQwNrYDjqhoGZF02UilIekedegWUEvkXnk5rzyzTaX+GwlnsplVY2 -Xijn8cWkO4cCDkthyjfNPgUm8ZgKuBgs+OYRbW4XtuXgeBucBVCryrM8+3OSmzbs -IBQWL0EDT7bnt2ukE+cUx8Foc/+180KZAdDbUY9MOsYCac3bXnIJd/q1pzkr+OvL -EXnuIGuzUqVkcD4+ABaWefNUm3KeZwBAupYc9eo2/YzpCUsgAe0PAdgJhcg9D4kX -2RwwjVpOPWUxevrPq32Lo3R8obfl2aCLzcuiuheb1EcJLlAH67KqdXLDpvZqJ9qi -iaBCixRl2t3our5VSBWQQefGnH6DWn1JM34zyBbeZdgjyqebSN42p+hADYe2qzdf -AviHJsBwvt3HYpr3bfU6EDx1cU5D6gNAxzZMkZhnEQ7u6kXDcLyWJhgXcZhGT0xv -D/x+fIGI1t2XkoOmvuno1MqoDQX3sCYd0bfB/9wwzcNexic= ------END CERTIFICATE----- -\ diff --git a/tests/pkg/1/build2.org/common/not-a-package.tar.gz b/tests/pkg/1/build2.org/common/not-a-package.tar.gz Binary files differdeleted file mode 100644 index aa10905..0000000 --- a/tests/pkg/1/build2.org/common/not-a-package.tar.gz +++ /dev/null diff --git a/tests/pkg/1/build2.org/fetch/t1/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/fetch/t1/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/fetch/t1/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/satisfy/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/satisfy/libfoo-1.0.0.tar.gz Binary files differdeleted file mode 100644 index 28a6a90..0000000 --- a/tests/pkg/1/build2.org/satisfy/libfoo-1.0.0.tar.gz +++ /dev/null diff --git a/tests/pkg/1/build2.org/satisfy/t1/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/satisfy/t1/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/satisfy/t1/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/satisfy/t2/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/satisfy/t2/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/satisfy/t2/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/satisfy/t4a/libfoo-1.1.0.tar.gz b/tests/pkg/1/build2.org/satisfy/t4a/libfoo-1.1.0.tar.gz deleted file mode 120000 index c004b2a..0000000 --- a/tests/pkg/1/build2.org/satisfy/t4a/libfoo-1.1.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.1.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/satisfy/t4c/libfoo-1.0.0.tar.gz b/tests/pkg/1/build2.org/satisfy/t4c/libfoo-1.0.0.tar.gz deleted file mode 120000 index 32e5a3c..0000000 --- a/tests/pkg/1/build2.org/satisfy/t4c/libfoo-1.0.0.tar.gz +++ /dev/null @@ -1 +0,0 @@ -../libfoo-1.0.0.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/satisfy/t5/repositories b/tests/pkg/1/build2.org/satisfy/t5/repositories deleted file mode 120000 index d965b15..0000000 --- a/tests/pkg/1/build2.org/satisfy/t5/repositories +++ /dev/null @@ -1 +0,0 @@ -../repositories
\ No newline at end of file diff --git a/tests/pkg/publish b/tests/publish index 00453cc..3a6b0d8 100755 --- a/tests/pkg/publish +++ b/tests/publish @@ -14,4 +14,4 @@ rsync -v -rlpt --copy-unsafe-links \ --include 'repositories' \ --include 'signature' \ --exclude '*' \ -1/build2.org/ build2.org:/var/pkg/1/ +test/*/pkg/1/build2.org/ build2.org:/var/pkg/1/ diff --git a/tests/remote.test b/tests/remote.test new file mode 100644 index 0000000..fdd3fbb --- /dev/null +++ b/tests/remote.test @@ -0,0 +1,37 @@ +# file : tests/remote.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Tests for commands that accept repository location must be able to run +# regardless whether the repository is local or remote. They also must be able +# to create the repository used for testing at the specified path, so being +# published to build2.org it can be used for the remote testing. Note that +# prior to publishing repositories tests must be performed with the +# config.test.output=keep variable override, so their working directories (that +# contain repositories produced) are not cleaned up. +# + +# Output directory path that testscripts must use to prepare repositories +# required by tests they contains. +# +# Note that the local path is carefully crafted so that we end up with the +# same repository names in both (local and remote) cases. This is necessary +# for the authentication to work properly in both cases. +# +out = $canonicalize([dir_path] $~/pkg/1/build2.org/) + +# If $remote is true then remote repositories locations must be used for +# tests. Variables rep_root and rep refer to the root and the command- +# specific repositories respectively. Note that the variables type is dir_path +# for local repositories (rather than string for the remote ones), that allows +# to portably obtain sub-repositories locations representations. +# +remote = $config.bpkg.test.remote +rep_root = ($remote == true ? [string] "https://build2.org/bpkg/1" : $out) + +out += [dir_path] $cmd +rep = ($remote == true ? [string] "$rep_root/$cmd" : $out) + ++if ($remote != true) + mkdir -p $out +end diff --git a/tests/rep-add.test b/tests/rep-add.test new file mode 100644 index 0000000..a1b9104 --- /dev/null +++ b/tests/rep-add.test @@ -0,0 +1,70 @@ +# file : tests/rep-add.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test config.test + +: location +: +{ + : none + : + $* 2>>EOE != 0 + error: repository location argument expected + info: run 'bpkg help rep-add' for more information + EOE + + : no-version + : + $* 'stable' 2>>EOE != 0 + error: invalid repository location 'stable': missing repository version + EOE + + : invalid-host + : + $* 'http://' 2>>EOE != 0 + error: invalid repository location 'http://': invalid host + EOE +} + +: relative-path +: +{ + $clone_cfg; + + $* ./1/bar/stable 2>>/~%EOE%; + %added repository .+/relative-path/bar/stable% + EOE + + $* ./1/../1/bar/stable 2>>/~%EOE% != 0 + %error: .+/relative-path/bar/stable is already a repository of this configuration% + EOE +} + +: absolute-path +: +{ + $clone_cfg; + + $* $~/1/foo/stable 2>>/~%EOE%; + %added repository .+/absolute-path/foo/stable% + EOE + + $* $~/1/../1/foo/stable 2>>/~%EOE% != 0 + %error: .+/absolute-path/foo/stable is already a repository of this configuration% + EOE +} + +: remote-url +: +{ + $clone_cfg; + + $* 'http://pkg.example.org/1/testing' 2>>~%EOE%; + %added repository example.org/testing% + EOE + + $* 'https://www.example.org/1/testing' 2>>~%EOE% != 0 + %error: example.org/testing is already a repository of this configuration% + EOE +} diff --git a/tests/rep-auth.test b/tests/rep-auth.test new file mode 100644 index 0000000..80e98de --- /dev/null +++ b/tests/rep-auth.test @@ -0,0 +1,469 @@ +# file : tests/rep-auth.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test config.test remote.test + +# There is no rep-auth command, and this testscript contains tests for various +# authentication scenarios throughout different stages of repositories +# preparation and consumption. Note that by that reason usage of $* is +# meaningless. +# + +# Source repository: +# +# rep-auth +# |-- expired +# | |-- foo-1.tar.gz +# | |-- packages +# | |-- repositories +# | `-- signature +# `-- unsigned +# |-- foo-1.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rc = $rep_create 2>- + + # Create the 'unsigned1' repository. + # + cp -r $src/unsigned $out/unsigned1 + $rc $out/unsigned1 &$out/unsigned1/packages + + # Create the 'unsigned2' repository. This is a copy of the just created + # 'unsigned1' repository. + # + cp -r $out/unsigned1 $out/unsigned2 + + # Create the 'signed' repository. + # + cp -r $src/unsigned $out/signed + cat <<<$cert_manifest >+$out/signed/repositories + $rc --key $key $out/signed &$out/signed/packages &$out/signed/signature + + # Create the 'name-mismatch' repository. Note that its certificate name + # mismatches the repository location. + # + cp -r $src/unsigned $out/name-mismatch + + echo 'certificate: \' >+$out/name-mismatch/repositories + cat <<<$src_base/auth/mismatch-cert.pem >+$out/name-mismatch/repositories + echo '\' >+$out/name-mismatch/repositories + + $rc --key $key $out/name-mismatch &$out/name-mismatch/packages \ + &$out/name-mismatch/signature + + # Create the 'expired' repository. This repository is "pre-created" and its + # certificate is expired by now. So we just copy it from the source + # directory. + # + cp -r $src/expired $out/expired + + # Create the 'sha256sum-mismatch' repository. This is a copy of the just + # created 'signed' repository that has the sha256sum manifest value tampered. + # + cp -r $out/signed $out/sha256sum-mismatch + + v = 'd374c59b36fdbdbd0d4468665061d94fda9c6c687863dfe72b0bcc34ff9d5fb4' + sed -i -e "s/^\(sha256sum: \).*\$/\\1$v/" $out/sha256sum-mismatch/signature + + # Create the 'signature-mismatch' repository. This is a copy of the just + # created 'signed' repository that has the signature manifest value tampered. + # + cp -r $out/signed $out/signature-mismatch + + # Here we tamper the last signature line (the one of 76 chars length, without + # spaces and terminated with '='). + # + v = 'mnBAsS529NUdNIQy8EB4si/UK26ICaMywbLeHDVvWOB+AsqZ5rj8VjGDamLbmUrDr3ru7BU1gJU=' + sed -i -e "s%^[^ ]{75}=\$%$v%" $out/signature-mismatch/signature +end + +pkg_status += -d cfg +rep_add += -d cfg 2>- +rep_fetch += -d cfg + +# Check if rep-fetch command was successfull or not. +# +fetched = $pkg_status foo >'available 1 sys:?' +not_fetched = $pkg_status foo >'unknown' + +sc = " " # Space character to append to here-document line when required. + +: no-auth +: +: Test that local repositories do not require authentication by default. +: +{ + r = 1/signed + +mkdir 1/ + +cp -r $src/unsigned $r + +cat <<<$cert_manifest >+$r/repositories + +$rep_create --key $key $r &$r/packages &$r/signature 2>- + + : rep-fetch + : + { + $clone_root_cfg && $rep_add ../$r; + + $rep_fetch 2>>/~%EOE% + %fetching .+/no-auth/signed% + 1 package(s) in 1 repository(s) + EOE + } + + : rep-info + : + $clone_root_cfg; + $rep_info --cert-name ../$r >'name:build2.org' +} + +: signed +: +{ + : rep-fetch + : + { + +$clone_root_cfg && $rep_add $rep/signed + rep_fetch += --auth all &?cfg/.bpkg/certs/*** + + : no-auth + : + { + $clone_cfg; + + $rep_fetch 2>>"EOE" != 0; + fetching build2.org/rep-auth/signed + warning: authenticity of the certificate for repository build2.org/rep-auth/signed cannot be established + certificate is for build2.org, "Code Synthesis" <info@build2.org> + certificate SHA256 fingerprint: + $cert_fp + trust this certificate? [y/n]$sc + error: unable to read y/n answer from STDOUT + EOE + + $not_fetched + } + + : trust-fp + : + { + $clone_cfg; + + $rep_fetch --trust $cert_fp 2>>EOE; + fetching build2.org/rep-auth/signed + 1 package(s) in 1 repository(s) + EOE + + $fetched + } + + : trust-fp-no + : + { + $clone_cfg; + + $rep_fetch --trust-no --trust $cert_fp 2>>EOE; + fetching build2.org/rep-auth/signed + 1 package(s) in 1 repository(s) + EOE + + $fetched + } + + : trust-yes + : + { + $clone_cfg; + + $rep_fetch --trust-yes 2>>EOE; + fetching build2.org/rep-auth/signed + 1 package(s) in 1 repository(s) + EOE + + $fetched + } + + : trust-no + : + { + $clone_cfg; + + $rep_fetch --trust-no 2>>EOE != 0; + fetching build2.org/rep-auth/signed + error: authenticity of the certificate for repository build2.org/rep-auth/signed cannot be established + EOE + + $not_fetched + } + + : trust-yes-no + : + { + $clone_cfg; + + $rep_fetch --trust-yes --trust-no 2>>EOE != 0; + fetching build2.org/rep-auth/signed + error: --trust-yes and --trust-no are mutually exclusive + EOE + + $not_fetched + } + + : already-trusted + : + { + $clone_cfg; + + $rep_fetch --trust-yes 2>>EOE; + fetching build2.org/rep-auth/signed + 1 package(s) in 1 repository(s) + EOE + + $rep_fetch 2>>EOE; + fetching build2.org/rep-auth/signed + 1 package(s) in 1 repository(s) + EOE + + $fetched; + + $rep_fetch --trust-no 2>>EOE; + fetching build2.org/rep-auth/signed + 1 package(s) in 1 repository(s) + EOE + + $fetched + } + } + + : rep-info + : + { + rep_info += --cert-name --auth all $rep/signed + + : no-auth + : + $rep_info 2>>"EOE" != 0 + warning: authenticity of the certificate for repository build2.org/rep-auth/signed cannot be established + certificate is for build2.org, "Code Synthesis" <info@build2.org> + certificate SHA256 fingerprint: + $cert_fp + trust this certificate? [y/n]$sc + error: unable to read y/n answer from STDOUT + EOE + + : trust-fp + : + $rep_info --trust $cert_fp >'name:build2.org' + + : trust-yes + : + $rep_info --trust-yes >'name:build2.org' + + : trust-no + : + $rep_info --trust-no 2>>EOE != 0 + error: authenticity of the certificate for repository build2.org/rep-auth/signed cannot be established + EOE + + : already-trusted + : + { + $clone_root_cfg; + rep_info += -d cfg; + + $rep_info --trust "$cert_fp" &cfg/.bpkg/certs/*** >'name:build2.org'; + $rep_info >'name:build2.org' + } + } +} + +: unsigned +: +{ + : rep-fetch + : + { + +$clone_root_cfg && $rep_add $rep/unsigned1 + rep_fetch += --auth all + + : no-auth + : + { + $clone_cfg; + + $rep_fetch 2>>~%EOE% != 0; + fetching build2.org/rep-auth/unsigned1 + warning: repository build2.org/rep-auth/unsigned1 is unsigned + %continue without authenticating repositories at .+\? \[y/n\] % + error: unable to read y/n answer from STDOUT + EOE + + $not_fetched + } + + : trust-yes + : + { + $clone_cfg; + + $rep_fetch --trust-yes 2>>EOE; + fetching build2.org/rep-auth/unsigned1 + 1 package(s) in 1 repository(s) + EOE + + $fetched + } + + : trust-no + : + { + $clone_cfg; + + $rep_fetch --trust-no 2>>EOE != 0; + fetching build2.org/rep-auth/unsigned1 + error: repository build2.org/rep-auth/unsigned1 is unsigned + EOE + + $not_fetched + } + + : already-trusted + : + { + $clone_cfg; + + $rep_fetch --trust-yes 2>>EOE; + fetching build2.org/rep-auth/unsigned1 + 1 package(s) in 1 repository(s) + EOE + + $rep_fetch 2>>EOE; + fetching build2.org/rep-auth/unsigned1 + 1 package(s) in 1 repository(s) + EOE + + $fetched; + + $rep_fetch --trust-no 2>>EOE; + fetching build2.org/rep-auth/unsigned1 + 1 package(s) in 1 repository(s) + EOE + + $fetched; + + $rep_add $rep/unsigned2; + + $rep_fetch 2>>EOE; + fetching build2.org/rep-auth/unsigned1 + fetching build2.org/rep-auth/unsigned2 + 1 package(s) in 2 repository(s) + EOE + + $fetched + } + } + + : rep-info + : + { + rep_info += --name --auth all $rep/unsigned1 + + : no-auth + : + $rep_info 2>>~%EOE% != 0 + warning: repository build2.org/rep-auth/unsigned1 is unsigned + %continue without authenticating repositories at .+\? \[y/n\] % + error: unable to read y/n answer from STDOUT + EOE + + : trust-yes + : + $rep_info --trust-yes >"build2.org/rep-auth/unsigned1 ($rep/unsigned1)" + + : trust-no + : + $rep_info --trust-no 2>>EOE != 0 + error: repository build2.org/rep-auth/unsigned1 is unsigned + EOE + + : already-trusted + : + { + $clone_root_cfg; + rep_info += -d cfg; + + $rep_info --trust-yes >"build2.org/rep-auth/unsigned1 ($rep/unsigned1)"; + $rep_info >"build2.org/rep-auth/unsigned1 ($rep/unsigned1)" + } + } +} + +: faulty +: +{ + rep_info += --auth all --trust-yes + + : name-mismatch + : + $rep_info $rep/name-mismatch 2>>EOE != 0 + error: certificate name mismatch for repository build2.org/rep-auth/name-mismatch + info: certificate name is build2.org/mismatched/name + EOE + + : expired + : + $rep_info $rep/expired 2>>EOE != 0 + error: certificate for repository build2.org/rep-auth/expired has expired + EOE + + : sha256sum-mismatch + : + $rep_info $rep/sha256sum-mismatch 2>>EOE != 0 + error: packages manifest file checksum mismatch for build2.org/rep-auth/sha256sum-mismatch + info: try again + EOE + + : signature-mismatch + : + $rep_info $rep/signature-mismatch 2>>~%EOE% != 0 + %.* + %error: unable to authenticate repository build2.org/rep-auth/signature-mismatch% + EOE + + : create-rep + : + { + : no-email + : + { + cp -r $src/unsigned rep; + + echo 'certificate: \' >+rep/repositories; + cat <<<$src_base/auth/noemail-cert.pem >+rep/repositories; + echo '\' >+rep/repositories; + + $rep_create --key $key rep &rep/packages 2>>/EOE != 0 + adding foo 1 + error: invalid certificate for rep/: no email + EOE + } + + : expired + : + { + cp -r $src/unsigned rep; + + echo 'certificate: \' >+rep/repositories; + cat <<<$src_base/auth/expired-cert.pem >+rep/repositories; + echo '\' >+rep/repositories; + + $rep_create --key $key rep &rep/packages 2>>/EOE != 0 + adding foo 1 + error: certificate for repository rep/ has expired + EOE + } + } +} diff --git a/tests/rep-auth/expired/foo-1.tar.gz b/tests/rep-auth/expired/foo-1.tar.gz new file mode 120000 index 0000000..d771dc4 --- /dev/null +++ b/tests/rep-auth/expired/foo-1.tar.gz @@ -0,0 +1 @@ +../../common/foo-1.tar.gz
\ No newline at end of file diff --git a/tests/rep-auth/expired/packages b/tests/rep-auth/expired/packages new file mode 100644 index 0000000..4fa075a --- /dev/null +++ b/tests/rep-auth/expired/packages @@ -0,0 +1,11 @@ +: 1 +sha256sum: dbeea68d374f6ca66b5f65652e26a0d8324d3fe118341ac470c07214ceb34b60 +: +name: foo +version: 1 +summary: The "Foo" utility +license: MIT +url: http://www.example.org/foo +email: foo-users@example.org +location: foo-1.tar.gz +sha256sum: fee330a362a4f87ff42a954aa305b6446d541b7b60000ebcd2fbf68f2b1ae58e diff --git a/tests/pkg/1/build2.org/auth/expired/repositories b/tests/rep-auth/expired/repositories index 8370fa4..7e68ee8 100644 --- a/tests/pkg/1/build2.org/auth/expired/repositories +++ b/tests/rep-auth/expired/repositories @@ -1,9 +1,9 @@ : 1 certificate: \ -----BEGIN CERTIFICATE----- -MIIFLzCCAxegAwIBAgIJAPIoh0763iYdMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV +MIIFLzCCAxegAwIBAgIJAOx1KvcHxv3GMA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV BAoMDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDDA9uYW1lOmJ1aWxkMi5vcmcwHhcN -MTYwNTAxMTA1MDMyWhcNMTYwNTAyMTA1MDMyWjAzMRcwFQYDVQQKDA5Db2RlIFN5 +MTcwMzAxMTcwMTI0WhcNMTcwMzAyMTcwMTI0WjAzMRcwFQYDVQQKDA5Db2RlIFN5 bnRoZXNpczEYMBYGA1UEAwwPbmFtZTpidWlsZDIub3JnMIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEA2rvxJe7MXMIygVTVGfMR4B/MTRRRgbKdLcXaUbu+ IfdyjGMu34GsUG51WzhcNOmNdLX2FHEiiESAPvVbWOEO+ZQL3IIxbXc8IgiNEpNP @@ -18,16 +18,16 @@ u7jGNUzp9KuNFQXfiay5ZzP8cqj1bfnQDDbLkXn2TOI/6bsbq4FiuqYSW//XdVqa DZlnVvfwozPlKzdKR9wMSs7PP8P7SFGU5oIh5a2zUbbNZxC8Gef7MYD6xMi7TEAU 4JECAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF BwMDMBoGA1UdEQQTMBGBD2luZm9AYnVpbGQyLm9yZzANBgkqhkiG9w0BAQsFAAOC -AgEAAb+Yxvqi4sOZ+Ti8wcxkxqFrIs32M3XgJIeZYJn9JZbtjuBx0JFZWnL/tz4M -VTiM2nrUc4qIIpTqEt2If1NcdH0Cjvf6vysLvIOoB4q09B+aW4F+19moixYodoDp -qq1Ki1MZrBMx+KUICagqRSklPyxaZ2rEFv2TY0pg8/QRFRWGCFgdWJleX6VsqIXC -KDK6MyHfR1gsDnZZfgr7HJCq1SH3loqlchLBvAF6K/c1LdQyJFYoP4xAt6yaQWzv -wEqqhhZ7tLpjrjK0K2pqsPoupNcNhE31k+6ZdM5Z5oHT844qKIVNJIdlvFwnQ3ed -grP6gBCLVY7h7GJ0x2ZG/2hYt4My8RqLxFYHaHAzQsmXFATIzT1Yqz1nw+8V3l5P -m+rXQNVAw7rgpl3T7klbHVfkg5rPa0kF66PkKq5ax46NS6KVj9sNOqkcXL7huQSG -BnSLTkaLwwrSZWl+DPXeY8TgUGkkEMY6RvYdqoOGZiZSqtMfK9QKsFi79a4Munc8 -ypUPxE++jhtXcarDy0ta3BXrspIg63a2Ab6C5yv2fC31Ec5v75rUxt9BVxMMQdlX -h9eMe5FmkgkSBcklOShE2kZvTOPUCSq8DK7JuKsKEH3istPto+PpoyT8RxuZ9K2Q -rr78CskHtj+TVdFv7TAqn2YDx9ki4HJIxWKVanJ+zOBSrJw= +AgEATQmuoB+NC/IF2qoNQnurJWrV63lC4Ozi/VLIqCSR6A4S9TCcoLNDAtcdiyf4 +GrM+/USyV3whpISesXn0ij10OEMe2/9NUoqkO0Q/woN9WtUQActeBxThOcz0NYMi +1vg6krlx1fKpQ5g65yC3qka8VUaV9gtaCHFa6mOxZ9q5DaV2NdBAr+FOutRY6d4v +UySkOyqxfZYLs5W2e+9ofEve17eVNFQwuJY29sw406X+18gYc+KiqldPlwKIhJs1 +CBsWhO0m1GP5dR0gRBmF9WQ4fzNyoYF293ix+WC7eMf2OtRTpo/GEAXDqLlRvpiF +jALhFtcZjiIqrvnkQFq36jyVNcUnxbMKUgW4XJVpYv4uVII47eJk4a8XRGj0d+7b +nuFfT4d6gACN3gfOmtd12uT7dNsn5q0fkGhzR4ppDIyTJpGA8UhHETTRPL+HFcb1 +6kXnRPFS7eoF9DoSGtBhdpRUefj8EPJWhfE7xQvMDTYIE/ccBWp173F+xShr2mgF +xDkHH+vXGFzUZXSEAF2NW9U3bf4bRQpdOkYJsvHJmLYjcGNKdkHjJVWdXmoRpbsR +IC8M7ZPp+/oV5JEinCXRsT1NN+7l8rkec9hNk5sbokVCcyYv+GxL8kRFt2jyLqny +RlM2vM3uhgJNYVSlYsgjjg4QfikV6s+QawjSVi6y4ZnHEho= -----END CERTIFICATE----- \ diff --git a/tests/rep-auth/expired/signature b/tests/rep-auth/expired/signature new file mode 100644 index 0000000..454653f --- /dev/null +++ b/tests/rep-auth/expired/signature @@ -0,0 +1,13 @@ +: 1 +sha256sum: ad6c46b7c2b994957215025de0f0ce9be192f6973a8b36f5d3f3d1670172af1e +signature: \ +PQrvkr6ONdIIrEaORzsgpXNpNkMVmdjW8Ahgpi+sdwyjsxkgMj/0gHjyF0amPi6ae+zUu4igDeKM +JnWuShDMbxLy+zxy6IpjpchwtPymM3euqQnLWebRJ2b+9RlBVGIRCl25VnFn+mmHW76+yRnOT6nI +fYNCM6eiLihWKLRUCnsj18PZSV7EK68Q3iPAUws4F4A63eKqJe/qSWkRjJrVpi+UFDjYkJi9542D +MELmYFXV592UVoQ3PPK+ZU/Ja+cosHND9mHe2xvLKHFnBKUi5LKvZ+aZdiZXisnisX9PgvGzk+5j +qzzJUse21NLA2J4D+jiH8r2fj4qjh1dLHgocQj3GQeN8r18XvaLtP9+tcLYfphWnyOfk3q12xtn8 +h9yNoVPHVsMiYrB7JXX2TM4qPqepi3f8iQmEfZxWqlI5/cpeQz3DTDZ4wagNbBoYzavUqTjriXCU +eLWVZz89JkYhWYTBPx26XZp56TsN16ZrN6oMtHgVy6YmmbjIea7sZXhNc8a/7FCdxap8PZfJS1cW +LieoZqQF5C0O8+sJnYl88Pp76mtQIgXEsfc5TnvgMosQfXbHzMbD7naD0woWqu5GVKWx6+AdK2uH +KbuSXYrJYfmuS2Ptp/T7ZIkRE2YZPe4+lsMkIiqY1fg2qIdWgpQiH0ZE3Ki3GH4FUWEkurWgxYk= +\ diff --git a/tests/rep-auth/unsigned/foo-1.tar.gz b/tests/rep-auth/unsigned/foo-1.tar.gz new file mode 120000 index 0000000..d771dc4 --- /dev/null +++ b/tests/rep-auth/unsigned/foo-1.tar.gz @@ -0,0 +1 @@ +../../common/foo-1.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/system/t1/repositories b/tests/rep-auth/unsigned/repositories index 5b70556..5b70556 100644 --- a/tests/pkg/1/build2.org/system/t1/repositories +++ b/tests/rep-auth/unsigned/repositories diff --git a/tests/rep-create.test b/tests/rep-create.test new file mode 100644 index 0000000..acc6957 --- /dev/null +++ b/tests/rep-create.test @@ -0,0 +1,184 @@ +# file : tests/rep-create.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test + +# Source repository: +# +# rep-create +# |-- stable +# | |-- foo-1.tar.gz +# | `-- repositories +# `-- testing -> stable (complement) +# |-- foo-2.tar.gz (manifest with unknown name) +# `-- repositories + +: unsigned +: +{ + # Make sure the cloned repository has a valid location, so we can use + # rep-info command to validate the repository info. + # + clone_rep = mkdir 1/ && cp -r $src/stable 1/ + + : without-key + : + { + $clone_rep; + + $* 1/stable/ 2>>/~%EOE% &1/stable/packages; + adding foo 1 + %1 package\(s\) in .+/stable/% + EOE + + $rep_info -p -m 1/stable/ >>EOO + : 1 + sha256sum: 6cac7ffa1f02f90776fc89bcacf38604ba0eddf176f2314c75dc9bf1b10a8b32 + : + name: foo + version: 1 + summary: The "Foo" utility + license: MIT + url: http://www.example.org/foo + email: foo-users@example.org + location: foo-1.tar.gz + sha256sum: fee330a362a4f87ff42a954aa305b6446d541b7b60000ebcd2fbf68f2b1ae58e + EOO + } + + : with-key + : + { + $clone_rep; + + $* --key $key 1/stable/ 2>>/~%EOE% &1/stable/packages; + adding foo 1 + warning: --key option ignored + info: repository manifest contains no certificate + info: run 'bpkg help rep-create' for more information + %1 package\(s\) in .+/stable/% + EOE + + $rep_info -p -m 1/stable/ >>EOO + : 1 + sha256sum: 6cac7ffa1f02f90776fc89bcacf38604ba0eddf176f2314c75dc9bf1b10a8b32 + : + name: foo + version: 1 + summary: The "Foo" utility + license: MIT + url: http://www.example.org/foo + email: foo-users@example.org + location: foo-1.tar.gz + sha256sum: fee330a362a4f87ff42a954aa305b6446d541b7b60000ebcd2fbf68f2b1ae58e + EOO + } +} + +: signed +: +: Here we sign the 'stable' repository with the certificate prior to running +: tests. +: +{ + +cp -r $src/stable ./ && cat <<<$cert_manifest >+stable/repositories + + # Make sure the cloned repository has a valid location, so we can use + # rep-info command to validate the repository info. + # + clone_rep = mkdir 1/ && cp -r ../stable 1/ + + : with-key + : + : Note that as we re-create the repositories file on the fly (see above) its + : sha256sum can vary due to CRs mix-in on Windows. That explains why we do + : not match it exactly. + : + { + $clone_rep; + + $* --key $key 1/stable/ 2>>/~%EOE% &1/stable/packages &1/stable/signature; + adding foo 1 + %1 package\(s\) in .+/stable/% + EOE + + $rep_info --cert-fingerprint -p -m 1/stable/ >>~"%EOO%" + $cert_fp + : 1 + %sha256sum: .+% + : + name: foo + version: 1 + summary: The "Foo" utility + license: MIT + url: http://www.example.org/foo + email: foo-users@example.org + location: foo-1.tar.gz + sha256sum: fee330a362a4f87ff42a954aa305b6446d541b7b60000ebcd2fbf68f2b1ae58e + EOO + } + + : without-key + : + $clone_rep; + $* 1/stable/ 2>>EOE &1/stable/packages != 0 + adding foo 1 + error: --key option required + info: repository manifest contains a certificate + info: run 'bpkg help rep-create' for more information + EOE +} + +: unknown-name +: +: Test that package manifest that contains an unknown name is properly handled. +: +{ + clone_rep = cp -r $src/testing ./ + + : fail + : + $clone_rep; + $* testing/ 2>>/EOE != 0 + foo-2/manifest:8:1: error: unknown name 'color' in package manifest + info: package archive testing/foo-2.tar.gz + EOE + + : ignore + : + $clone_rep; + $* --ignore-unknown testing/ 2>>/~%EOE% &testing/packages + adding foo 2 + %1 package\(s\) in .+/testing/% + EOE +} + +: broken-repo +: +: Here we break the 'stable' repository prior to running a test. +: +{ + clone_rep = cp -r $src/stable ./ + + : no-repositories-file + : + { + $clone_rep &!stable/repositories; + rm stable/repositories; + + $* stable/ 2>/'error: file stable/repositories does not exist' != 0 + } + + : unexpected-file + : + { + $clone_rep; + touch stable/foo; + + $* stable/ 2>>/~%EOE% != 0 + %.+ + error: stable/foo does not appear to be a bpkg package + EOE + } +} diff --git a/tests/rep-create/stable/foo-1.tar.gz b/tests/rep-create/stable/foo-1.tar.gz new file mode 120000 index 0000000..d771dc4 --- /dev/null +++ b/tests/rep-create/stable/foo-1.tar.gz @@ -0,0 +1 @@ +../../common/foo-1.tar.gz
\ No newline at end of file diff --git a/tests/pkg/1/build2.org/system/t2/repositories b/tests/rep-create/stable/repositories index 5b70556..5b70556 100644 --- a/tests/pkg/1/build2.org/system/t2/repositories +++ b/tests/rep-create/stable/repositories diff --git a/tests/rep-create/testing/foo-2.tar.gz b/tests/rep-create/testing/foo-2.tar.gz Binary files differnew file mode 100644 index 0000000..cb39194 --- /dev/null +++ b/tests/rep-create/testing/foo-2.tar.gz diff --git a/tests/rep-create/testing/repositories b/tests/rep-create/testing/repositories new file mode 100644 index 0000000..7411f25 --- /dev/null +++ b/tests/rep-create/testing/repositories @@ -0,0 +1,4 @@ +: 1 +location: ../stable +role: complement +: diff --git a/tests/rep-fetch.test b/tests/rep-fetch.test new file mode 100644 index 0000000..e59ebf4 --- /dev/null +++ b/tests/rep-fetch.test @@ -0,0 +1,134 @@ +# file : tests/rep-fetch.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test config.test remote.test + +# Source repository: +# +# rep-fetch +# |-- bar +# | |-- stable -> ../foo/stable (prerequisite) +# | | |-- libbar-1.0.0.tar.gz -> libfoo >= 1.0.0 +# | | `-- repositories +# | |-- testing -> stable (complement), +# | | | ../foo/testing (prerequisite) +# | | |-- libbar-1.1.0.tar.gz -> libfoo >= 1.1.0 +# | | `-- repositories +# | `-- unstable -> testing (complement), +# | | ../foo/testing (prerequisite) +# | |-- libbar-1.1.1.tar.gz -> libfoo >= 1.1.0 +# | `-- repositories +# |-- foo +# | |-- stable +# | | |-- libfoo-1.0.0.tar.gz +# | | `-- repositories +# | `-- testing -> stable (complement) +# | |-- libfoo-1.1.0.tar.gz +# | `-- repositories +# `-- hello +# |-- libhello-1.0.0.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rep_create += 2>- + + # Create the signed 'hello' repository. + # + cp -r $src/hello $out/hello + cat <<<$cert_manifest >+$out/hello/repositories + $rep_create --key $key $out/hello &$out/hello/packages &$out/hello/signature + + # Create 'foo/*' repositories. + # + cp -r $src/foo $out/foo + $rep_create $out/foo/stable &$out/foo/stable/packages + $rep_create $out/foo/testing &$out/foo/testing/packages + + # Create 'bar/*' repositories. + # + cp -r $src/bar $out/bar + $rep_create $out/bar/stable &$out/bar/stable/packages + $rep_create $out/bar/testing &$out/bar/testing/packages + $rep_create $out/bar/unstable &$out/bar/unstable/packages +end + +test.options += --auth all + +rep_add += -d cfg 2>- + +: no-repositories +: +$clone_cfg; +$* 2>>/EOE != 0 + error: configuration cfg/ has no repositories + info: use 'bpkg rep-add' to add a repository + EOE + +: hello +: +{ + $clone_cfg && $rep_add $rep/hello; + + $* --trust $cert_fp 2>>EOE &cfg/.bpkg/certs/***; + fetching build2.org/rep-fetch/hello + 1 package(s) in 1 repository(s) + EOE + + $* 2>>EOE + fetching build2.org/rep-fetch/hello + 1 package(s) in 1 repository(s) + EOE +} + +: bar-unstable +: +{ + $clone_cfg && $rep_add $rep/bar/unstable; + + $* --trust-yes 2>>EOE; + fetching build2.org/rep-fetch/bar/unstable + fetching build2.org/rep-fetch/foo/testing (prerequisite of build2.org/rep-fetch/bar/unstable) + fetching build2.org/rep-fetch/foo/stable (complements build2.org/rep-fetch/foo/testing) + fetching build2.org/rep-fetch/bar/testing (complements build2.org/rep-fetch/bar/unstable) + fetching build2.org/rep-fetch/bar/stable (complements build2.org/rep-fetch/bar/testing) + 5 package(s) in 5 repository(s) + EOE + + $* 2>>EOE + fetching build2.org/rep-fetch/bar/unstable + fetching build2.org/rep-fetch/foo/testing (prerequisite of build2.org/rep-fetch/bar/unstable) + fetching build2.org/rep-fetch/foo/stable (complements build2.org/rep-fetch/foo/testing) + fetching build2.org/rep-fetch/bar/testing (complements build2.org/rep-fetch/bar/unstable) + fetching build2.org/rep-fetch/bar/stable (complements build2.org/rep-fetch/bar/testing) + 5 package(s) in 5 repository(s) + EOE +} + +: both +: +{ + $clone_cfg && $rep_add $rep/hello && $rep_add $rep/bar/unstable; + + $* --trust-yes 2>>EOE &cfg/.bpkg/certs/***; + fetching build2.org/rep-fetch/bar/unstable + fetching build2.org/rep-fetch/foo/testing (prerequisite of build2.org/rep-fetch/bar/unstable) + fetching build2.org/rep-fetch/foo/stable (complements build2.org/rep-fetch/foo/testing) + fetching build2.org/rep-fetch/bar/testing (complements build2.org/rep-fetch/bar/unstable) + fetching build2.org/rep-fetch/bar/stable (complements build2.org/rep-fetch/bar/testing) + fetching build2.org/rep-fetch/hello + 6 package(s) in 6 repository(s) + EOE + + $* 2>>EOE + fetching build2.org/rep-fetch/bar/unstable + fetching build2.org/rep-fetch/foo/testing (prerequisite of build2.org/rep-fetch/bar/unstable) + fetching build2.org/rep-fetch/foo/stable (complements build2.org/rep-fetch/foo/testing) + fetching build2.org/rep-fetch/bar/testing (complements build2.org/rep-fetch/bar/unstable) + fetching build2.org/rep-fetch/bar/stable (complements build2.org/rep-fetch/bar/testing) + fetching build2.org/rep-fetch/hello + 6 package(s) in 6 repository(s) + EOE +} diff --git a/tests/rep-fetch/bar b/tests/rep-fetch/bar new file mode 120000 index 0000000..7684b42 --- /dev/null +++ b/tests/rep-fetch/bar @@ -0,0 +1 @@ +../common/bar
\ No newline at end of file diff --git a/tests/rep-fetch/foo b/tests/rep-fetch/foo new file mode 120000 index 0000000..4ee4799 --- /dev/null +++ b/tests/rep-fetch/foo @@ -0,0 +1 @@ +../common/foo
\ No newline at end of file diff --git a/tests/rep-fetch/hello b/tests/rep-fetch/hello new file mode 120000 index 0000000..9312ba9 --- /dev/null +++ b/tests/rep-fetch/hello @@ -0,0 +1 @@ +../common/hello/
\ No newline at end of file diff --git a/tests/rep-info.test b/tests/rep-info.test new file mode 100644 index 0000000..43e455e --- /dev/null +++ b/tests/rep-info.test @@ -0,0 +1,128 @@ +# file : tests/rep-info.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include common.test auth.test remote.test + +# Source repository: +# +# rep-info +# `-- testing -> stable (complement), ../foo/testing (prerequisite) +# |-- foo-1.tar.gz +# `-- repositories + +# Prepare repositories used by tests if running in the local mode. +# ++if ($remote != true) + rc = $rep_create 2>- + + # Create the unsigned 'testing' repository. + # + cp -r $src/testing $out/testing + $rc $out/testing &$out/testing/packages + + # Create the signed 'testing' repository. + # + cp -r $src/testing $out/signed + cat <<<$cert_manifest >+$out/signed/repositories + $rc --key $key $out/signed &$out/signed/packages &$out/signed/signature +end + +test.options = --auth all --trust-yes + +: no-location +: +$* 2>>EOE != 0 +error: repository location argument expected + info: run 'bpkg help rep-info' for more information +EOE + +: default +: +{ + : unsigned + : + $* $rep/testing >>"EOO" + build2.org/rep-info/testing ($rep/testing) + prerequisite build2.org/foo/testing ($rep_root/foo/testing) + complement build2.org/rep-info/stable ($rep/stable) + + foo/1 + EOO + + : signed + : + $* $rep/signed >>"EOO" + build2.org/rep-info/signed ($rep/signed) + CN=build2.org/O=Code Synthesis/info@build2.org + $cert_fp + prerequisite build2.org/foo/testing ($rep_root/foo/testing) + complement build2.org/rep-info/stable ($rep/stable) + + foo/1 + EOO +} + +: name +: +$* --name $rep/testing >"build2.org/rep-info/testing ($rep/testing)" + +: packages +: +{ + : list + : + $* --packages $rep/testing >>EOO + + foo/1 + EOO + + : manifest + : + $* --packages --manifest $rep/testing >>EOO + : 1 + sha256sum: 7cdc5965cf41742a7feb1c4b73f1438f35e6a6ed7e4e6b30d9fba36c26baca04 + : + name: foo + version: 1 + summary: The "Foo" utility + license: MIT + url: http://www.example.org/foo + email: foo-users@example.org + location: foo-1.tar.gz + sha256sum: fee330a362a4f87ff42a954aa305b6446d541b7b60000ebcd2fbf68f2b1ae58e + EOO +} + +: repositories +: +{ + : list + : + $* --repositories $rep/testing >>"EOO" + prerequisite build2.org/foo/testing ($rep_root/foo/testing) + complement build2.org/rep-info/stable ($rep/stable) + EOO + + : manifest + : + $* --repositories --manifest $rep/testing >>EOO + : 1 + location: ../../foo/testing + : + location: ../stable + role: complement + : + EOO +} + +: cert +: +{ + test.arguments += $rep/signed + + $* --cert-fingerprint >"$cert_fp" : fingerprint + $* --cert-name >'name:build2.org' : name + $* --cert-organization >'Code Synthesis' : organization + $* --cert-email >'info@build2.org' : email +} diff --git a/tests/rep-info/testing/foo-1.tar.gz b/tests/rep-info/testing/foo-1.tar.gz new file mode 120000 index 0000000..d771dc4 --- /dev/null +++ b/tests/rep-info/testing/foo-1.tar.gz @@ -0,0 +1 @@ +../../common/foo-1.tar.gz
\ No newline at end of file diff --git a/tests/rep-info/testing/repositories b/tests/rep-info/testing/repositories new file mode 100644 index 0000000..3cc2531 --- /dev/null +++ b/tests/rep-info/testing/repositories @@ -0,0 +1,6 @@ +: 1 +location: ../../foo/testing +: +location: ../stable +role: complement +: diff --git a/tests/test.sh b/tests/test.sh deleted file mode 100755 index 6858ea6..0000000 --- a/tests/test.sh +++ /dev/null @@ -1,2003 +0,0 @@ -#! /usr/bin/env bash - -# Usage: test.sh [test-options] [bpkg-common-options] -# -# Test options are: -# -# -v -# Run verbose. By default, this script runs bpkg quiet and suppresses -# error messages in the fail tests. Note that when this options is -# specified, bpkg is called with default verbosity level. If you want -# more bpkg diagnostics, add the --verbose N option. -# -# --remote -# Test using the remote repositories. Normally, you would first run the -# local test in order to create the repositories, then publish them (see -# pkg/publish.sh), and finally run the remote test. -# -# -c <compiler> -# Use the compiler specified to configure cxx module. -# -# --valgrind -# Run under valgrind (takes forever). -# -# Some common bpkg use-cases worth testing: -# -# --fetch wget -# --fetch curl -# --fetch fetch --fetch-option --no-verify-peer -# -# --tar bsdtar -# -# --sha256 shasum -# --sha256 sha256-freebsd -# - -trap 'exit 1' ERR - -tmp_file=`mktemp` - -# Remove temporary file on exit. Cover the case when exit due to an error. -# -trap 'rm -f $tmp_file' EXIT - -function error () -{ - echo "$*" 1>&2 - exit 1 -} - -bpkg="../bpkg/bpkg" -cfg=/tmp/conf - -if [ "${MSYSTEM:0:5}" = "MINGW" -o "${MSYSTEM:0:4}" = "MSYS" ]; then - msys=y -fi - -verbose=n -remote=n -options= -cxx_options= - -while [ $# -gt 0 ]; do - case $1 in - -v) - verbose=y - shift - ;; - --remote) - remote=y - shift - ;; - --valgrind) - bpkg="valgrind -q $bpkg" - shift - ;; - -c) - shift - cxx_options="config.cxx=$1" - shift - ;; - *) - # If this is the --verbose bpkg option, switch to the verbose - # mode as well. - # - if [ "$1" == "--verbose" ]; then - verbose=y - fi - - options="$options $1" - shift - ;; - esac -done - -if [ "$verbose" != "y" ]; then - options="$options -q" -fi - -bpkg="$bpkg $options" - -# Repository location and name prefixes. Note that the local path is carefully -# crafted so that we end up with the same repository names in both cases. This -# is necessary for the authentication tests to work in both cases. -# -if [ "$remote" = "y" ]; then - rep=https://build2.org/bpkg/1 - repn=build2.org/ -else - rep=pkg/1/build2.org - repn=build2.org/ -fi - -# -# -function test () -{ - local cmd=$1; shift - local ops= - - if [ "$cmd" != "rep-create" -a \ - "$cmd" != "rep-info" -a \ - "$cmd" != "pkg-verify" ]; then - ops="-d $cfg" - fi - - if [ "$cmd" = "rep-fetch" -o \ - "$cmd" = "rep-info" ]; then - ops="$ops --auth all" - fi - - if [ -t 0 ]; then - $bpkg $cmd $ops $* - else - $bpkg $cmd $ops $* >$tmp_file - diff --strip-trailing-cr -u - $tmp_file - fi - - if [ $? -ne 0 ]; then - error "failed: $bpkg $cmd $ops $*" - fi -} - -function fail () -{ - local cmd=$1; shift - local ops= - - if [ "$cmd" != "rep-create" -a \ - "$cmd" != "rep-info" -a \ - "$cmd" != "pkg-verify" ]; then - ops="-d $cfg" - fi - - if [ "$cmd" = "rep-fetch" -o \ - "$cmd" = "rep-info" ]; then - ops="$ops --auth all" - fi - - if [ "$verbose" = "y" ]; then - $bpkg $cmd $ops $* - else - $bpkg $cmd $ops $* 2>/dev/null - fi - - if [ $? -eq 0 ]; then - error "succeeded: $bpkg $cmd $ops $*" - fi - - return 0 -} - -# Verify package status. -# -function stat () -{ - local s=`$bpkg pkg-status -d $cfg $1` - - if [ "$s" != "$2" ]; then - error "status $1: '$s', expected: '$2'" - fi -} - -# Verify path is gone (no longer exists) -# -function gone () -{ - if [ -e "$1" ]; then - error "path $1 still exists" - fi -} - -# Repository certificate fingerprint. -# -function rep_cert_fp () -{ - cat $1/repositories | \ - sed -n '/^-----BEGIN CERTIFICATE-----$/,/^-----END CERTIFICATE-----$/p' | \ - openssl x509 -sha256 -noout -fingerprint | \ - sed -n 's/^SHA256 Fingerprint=\(.*\)$/\1/p' -} - -# Edit file with sed. -# -function edit () -{ - local path=$1; shift - sed "$@" $path > $path.bak - mv $path.bak $path -} - -# Repository absolute location from a relative path. -# -function location () -{ - if [ "$remote" = "y" ]; then - echo "$rep/$1" - elif [ "$msys" = "y" ]; then - # Convert Windows path like c:/abc/xyz to the c:\abc\xyz canonical form. - # - echo "`pwd -W`/$rep/$1" | sed 's%/%\\%g' - else - echo "`pwd`/$rep/$1" - fi -} - -## -## Low-level commands. -## - -## -## pkg-verify -## -fail pkg-verify # archive expected -fail pkg-verify ./no-such-file # archive does not exist -fail pkg-verify pkg/1/build2.org/common/not-a-package.tar.gz -fail pkg-verify --silent pkg/1/build2.org/common/not-a-package.tar.gz -test pkg-verify pkg/1/build2.org/common/hello/libhello-1.0.0.tar.gz - - -## -## rep-create -## -fail rep-create # no 'repositories' file -fail rep-create pkg/1/build2.org/satisfy # unexpected files - -test rep-create pkg/1/build2.org/common/hello --key key.pem - -test rep-create pkg/1/build2.org/common/foo/stable -test rep-create pkg/1/build2.org/common/foo/testing - -test rep-create pkg/1/build2.org/common/bar/stable -test rep-create pkg/1/build2.org/common/bar/testing -test rep-create pkg/1/build2.org/common/bar/unstable - - -## -## rep-info -## -fail rep-info # repository location expected - -test rep-info --trust-yes $rep/common/foo/testing <<EOF -${repn}common/foo/testing `location common/foo/testing` -complement ${repn}common/foo/stable `location common/foo/stable` - -libfoo/1.1.0 -EOF - -test rep-info -m -r -n --trust-yes $rep/common/bar/unstable <<EOF -${repn}common/bar/unstable `location common/bar/unstable` -: 1 -location: ../../foo/testing -: -location: ../testing -role: complement -: -EOF - -test rep-info -m -p --trust-yes $rep/common/bar/unstable <<EOF -: 1 -sha256sum: 3034b727288efbb52b7b6e41fe147b815e7b3aa704e8cef6c2ee8d7421ab5b72 -: -name: libbar -version: 1.1.1 -summary: libbar -license: MIT -description: \\ -libbar is a very modern C++ XML parser. - -It has an API that we believe should have already been in Boost or even in -the C++ standard library. - -\\ -changes: \\ -* Applied upstream patch for critical bug bar. - -* Applied upstream patch for critical bug foo. - -\\ -url: http://example.org -email: pkg@example.org -depends: libfoo >= 1.1.0 -location: libbar-1.1.1.tar.gz -sha256sum: d09700602ff78ae405b6d4850e34660e939d27676e015a23b549884497c8bb45 -EOF - -hello_fp=`rep_cert_fp pkg/1/build2.org/common/hello` - -test rep-info -m -p --trust $hello_fp $rep/common/hello <<EOF -: 1 -sha256sum: 8d324fa7911038778b215d28805c6546e737e0092f79f7bd167cf2e28f4ad96f -: -name: libhello -version: 1.0.0 -summary: The "Hello World" example library -license: MIT -tags: c++, hello, world, example -description: \\ -A simple library that implements the "Hello World" example in C++. Its primary -goal is to show a canonical build2/bpkg project/package. -\\ -url: http://www.example.org/libhello -email: hello-users@example.org -requires: c++11 -requires: build2 >= 0.4.0 -location: libhello-1.0.0.tar.gz -sha256sum: d18d1472980399dd1fdbc776cb3eb3f7b2f62447210c8cfbcf1a8dd52a468395 -EOF - -## -## cfg-create -## -test cfg-create --wipe cxx $cxx_options config.install.root=/tmp/install -stat libfoo unknown - -test cfg-create --wipe config.install.root=/tmp/install cxx $cxx_options -stat libfoo unknown - - -## -## rep-add -## -test cfg-create --wipe - -fail rep-add # repository location expected -fail rep-add stable # invalid location -fail rep-add http:// # invalid location - -# relative path -# -test rep-add ./1/bar/stable -fail rep-add ./1/../1/bar/stable # duplicate - -# absolute path -# -test rep-add /tmp/1/foo/stable -fail rep-add /tmp/1/../1/foo/stable # duplicate - -# remote URL -# -test rep-add http://pkg.example.org/1/testing -fail rep-add https://www.example.org/1/testing # duplicate - - -## -## rep-fetch -## -test cfg-create --wipe - -fail rep-fetch # no repositories - -# hello repository -# -test cfg-create --wipe -test rep-add $rep/common/hello -test rep-fetch --trust $hello_fp -test rep-fetch - -# bar/unstable repository -# -test cfg-create --wipe -test rep-add $rep/common/bar/unstable -test rep-fetch --trust-yes -test rep-fetch - -# both -# -test cfg-create --wipe -test rep-add $rep/common/hello -test rep-add $rep/common/bar/unstable -test rep-fetch --trust-yes -test rep-fetch - - -## -## pkg-fetch -## -test rep-create pkg/1/build2.org/fetch/t1 -test cfg-create --wipe - -fail pkg-fetch -e # archive expected -fail pkg-fetch -e ./no-such-file # archive does not exist - -fail pkg-fetch # package name expected -fail pkg-fetch libfoo # package version expected -fail pkg-fetch libfoo/1/2/3 # invalid package version - -fail pkg-fetch libfoo/1.0.0 # no repositories -test rep-add $rep/fetch/t1 -fail pkg-fetch libfoo/1.0.0 # no packages -test rep-fetch --trust-yes -fail pkg-fetch libfoo/2+1.0.0 # not available -test cfg-create --wipe -test rep-add $rep/fetch/t1 -test rep-fetch --trust-yes -test pkg-fetch libfoo/1.0.0 -stat libfoo/1.0.0 "fetched; available" -fail pkg-fetch libfoo/1.0.0 -fail pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz -test pkg-purge libfoo -test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz -stat libfoo/1.0.0 "fetched; available" -test pkg-unpack libfoo -test pkg-fetch -r libfoo/1.1.0 -stat libfoo/1.1.0 "fetched; available" -test pkg-unpack libfoo -test pkg-fetch -r -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz -stat libfoo/1.0.0 "fetched; available" -test pkg-fetch -r libfoo/1.1.0 -stat libfoo/1.1.0 "fetched; available" -test pkg-fetch -r -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz -stat libfoo/1.0.0 "fetched; available" -test pkg-purge libfoo - -# hello -# -test cfg-create --wipe -test rep-add $rep/common/hello -test rep-fetch --trust $hello_fp -test pkg-fetch libhello/1.0.0 -test pkg-purge libhello - - -## -## pkg-unpack -## -test cfg-create --wipe -fail pkg-unpack -r # replace only with existing -fail pkg-unpack -e # package directory expected -fail pkg-unpack # package name expected - -test rep-add $rep/fetch/t1 -test rep-fetch --trust-yes - -# existing -# -fail pkg-unpack -e ./no-such-dir # package directory does not exist -fail pkg-unpack -e ./pkg # not a package directory -test pkg-fetch libfoo/1.0.0 -fail pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 # already exists -test pkg-purge libfoo -test pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 -stat libfoo/1.1.0 "unpacked; available" -test pkg-purge libfoo - -# existing & replace -# -test pkg-fetch libfoo/1.0.0 -fail pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 -test pkg-unpack -r -e pkg/1/build2.org/fetch/libfoo-1.1.0 -stat libfoo/1.1.0 "unpacked; available" -test pkg-purge libfoo -test pkg-fetch libfoo/1.0.0 -test pkg-unpack libfoo -fail pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 -test pkg-unpack -r -e pkg/1/build2.org/fetch/libfoo-1.1.0 -stat libfoo/1.1.0 "unpacked; available" -test pkg-purge libfoo - -# package name -# -fail pkg-unpack libfoo # no such package in configuration -test pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 -fail pkg-unpack libfoo # wrong package state -test pkg-purge libfoo -test pkg-fetch libfoo/1.0.0 -stat libfoo/1.0.0 "fetched; available" -test pkg-unpack libfoo -stat libfoo/1.0.0 "unpacked; available" -test pkg-purge libfoo - -# hello -# -test cfg-create --wipe -test rep-add $rep/common/hello -test rep-fetch --trust $hello_fp -test pkg-fetch libhello/1.0.0 -test pkg-unpack libhello -test pkg-purge libhello - - -## -## pkg-purge -## -test cfg-create --wipe - -fail pkg-purge # missing package name -fail pkg-purge libfoo # no such package - -# purge fetched -# -test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz -test pkg-purge libfoo -stat libfoo unknown - -# --keep -# -test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz -test pkg-purge -k libfoo -stat libfoo "fetched 1.0.0" -test pkg-purge libfoo - -# archive and --purge -# -cp pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz $cfg/ -test pkg-fetch -e -p $cfg/libfoo-1.0.0.tar.gz -test pkg-purge libfoo -stat libfoo unknown -gone $cfg/libfoo-1.0.0.tar.gz - -# no archive but --keep -# -test pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 -fail pkg-purge --keep libfoo -stat libfoo "unpacked 1.1.0" -test pkg-purge libfoo - -# purge unpacked directory -# -test pkg-unpack -e pkg/1/build2.org/fetch/libfoo-1.1.0 -test pkg-purge libfoo -stat libfoo unknown - -# purge unpacked archive -# -test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz -test pkg-unpack libfoo -test pkg-purge libfoo -stat libfoo unknown -gone $cfg/libfoo-1.0.0 - -# purge unpacked archive but --keep -# -test pkg-fetch -e pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz -test pkg-unpack libfoo -test pkg-purge --keep libfoo -stat libfoo "fetched 1.0.0" -gone $cfg/libfoo-1.0.0 -test pkg-purge libfoo -stat libfoo unknown - -# directory and --purge -# -cp -r pkg/1/build2.org/fetch/libfoo-1.1.0 $cfg/ -test pkg-unpack -e -p $cfg/libfoo-1.1.0 -test pkg-purge libfoo -stat libfoo unknown -gone $cfg/libfoo-1.1.0 - -# archive and --purge -# -cp pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz $cfg/ -test pkg-fetch -e -p $cfg/libfoo-1.0.0.tar.gz -test pkg-unpack libfoo -test pkg-purge libfoo -stat libfoo unknown -gone $cfg/libfoo-1.0.0 -gone $cfg/libfoo-1.0.0.tar.gz - -# broken -# -cp pkg/1/build2.org/fetch/libfoo-1.0.0.tar.gz $cfg/ -test pkg-fetch -e -p $cfg/libfoo-1.0.0.tar.gz -test pkg-unpack libfoo -chmod 000 $cfg/libfoo-1.0.0 -fail pkg-purge libfoo -stat libfoo/1.0.0 broken -fail pkg-purge libfoo # need --force -fail pkg-purge -f -k libfoo # can't keep broken -fail pkg-purge -f libfoo # out directory still exists -chmod 755 $cfg/libfoo-1.0.0 -rm -r $cfg/libfoo-1.0.0 -fail pkg-purge -f libfoo # archive still exists -rm $cfg/libfoo-1.0.0.tar.gz -test pkg-purge -f libfoo -stat libfoo unknown - -## -## pkg-configure/pkg-disfigure -## -test cfg-create --wipe -test rep-add $rep/common/hello -test rep-fetch --trust $hello_fp - -fail pkg-configure # package name expected -fail pkg-configure config.dist.root=/tmp # ditto -fail pkg-configure libhello libhello # unexpected argument -fail pkg-configure libhello1 # no such package - -fail pkg-disfigure # package name expected -fail pkg-disfigure libhello1 # no such package - -test pkg-fetch libhello/1.0.0 - -fail pkg-configure libhello $cxx_options # wrong package state -fail pkg-disfigure libhello # wrong package state - -test pkg-purge libhello - -# src == out -# -test pkg-fetch libhello/1.0.0 -test pkg-unpack libhello -test pkg-configure libhello $cxx_options -stat libhello "configured 1.0.0; available sys:?" -test pkg-disfigure libhello -stat libhello "unpacked 1.0.0; available sys:?" -test pkg-purge libhello -stat libhello/1.0.0 "available" - -# src != out -# -test cfg-create --wipe -test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 -test pkg-configure libhello $cxx_options -stat libhello "configured 1.0.0" -test pkg-disfigure libhello -stat libhello "unpacked 1.0.0" -test pkg-purge libhello -stat libhello unknown -gone $cfg/libhello-1.0.0 - -# out still exists after disfigure -# -test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 -test pkg-configure libhello $cxx_options -touch $cfg/libhello-1.0.0/stray -fail pkg-disfigure libhello -stat libhello/1.0.0 broken -rm -r $cfg/libhello-1.0.0 -test pkg-purge -f libhello -stat libhello unknown - -# disfigure failed -# -test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 -test pkg-configure libhello $cxx_options -chmod 555 $cfg/libhello-1.0.0 -fail pkg-disfigure libhello -stat libhello/1.0.0 broken -chmod 755 $cfg/libhello-1.0.0 -rm -r $cfg/libhello-1.0.0 -test pkg-purge -f libhello -stat libhello unknown - -# While it's forbidden to delete a directory with write permissions being -# revoked with the 'chmod 555' command in MSYS, it's still allowed to create -# subdirectories and files inside such a directory. This is why the following -# 'fail pkg-configure libhello' test cases undesirably succeed in MSYS. -# -if [ "$msys" != "y" ]; then - # configure failed but disfigure succeeds - # - test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 - mkdir -p $cfg/libhello-1.0.0/build - chmod 555 $cfg/libhello-1.0.0/build - fail pkg-configure libhello $cxx_options - stat libhello "unpacked 1.0.0" - test pkg-purge libhello - stat libhello unknown - - # configure and disfigure both failed - # - test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 - mkdir -p $cfg/libhello-1.0.0/build - # Trip both con/dis. - # - chmod 555 $cfg/libhello-1.0.0 $cfg/libhello-1.0.0/build - fail pkg-configure libhello $cxx_options - stat libhello/1.0.0 broken - chmod 755 $cfg/libhello-1.0.0 $cfg/libhello-1.0.0/build - rm -r $cfg/libhello-1.0.0 - test pkg-purge -f libhello - stat libhello unknown -fi - -# dependency management -# -test rep-create pkg/1/build2.org/depend/stable -test cfg-create --wipe -test rep-add $rep/depend/stable -test rep-fetch --trust-yes - -test pkg-fetch libbar/1.0.0 -test pkg-unpack libbar -fail pkg-configure libbar # no libfoo -stat libbar/1.0.0 "unpacked; available" -test pkg-fetch libfoo/1.0.0 -test pkg-unpack libfoo -fail pkg-configure libbar # libfoo not configured -test pkg-configure libfoo -test pkg-configure libbar -fail pkg-disfigure libfoo # libbar still depends on libfoo -test pkg-disfigure libbar -test pkg-disfigure libfoo -test pkg-purge libbar -test pkg-purge libfoo - -test pkg-fetch libfoo/1.0.0 -test pkg-unpack libfoo -test pkg-configure libfoo -test pkg-fetch libbar/1.1.0 -test pkg-unpack libbar -fail pkg-configure libbar # libfoo >= 1.1.0 -test pkg-disfigure libfoo -test pkg-purge libfoo -test pkg-fetch libfoo/1.1.0 -test pkg-unpack libfoo -test pkg-configure libfoo -test pkg-configure libbar -test pkg-disfigure libbar -test pkg-disfigure libfoo -test pkg-purge libfoo -test pkg-purge libbar - -test pkg-fetch libfoo/1.1.0 -test pkg-unpack libfoo -test pkg-configure libfoo -test pkg-fetch libbar/1.2.0 -test pkg-unpack libbar -fail pkg-configure libbar # libfoo >= 1.2.0 -test pkg-disfigure libfoo -test pkg-purge libfoo -test pkg-fetch libfoo/1.2.0 -test pkg-unpack libfoo -test pkg-configure libfoo -test pkg-configure libbar -fail pkg-disfigure libfoo # "package libbar on libfoo >= 1.2.0" -test pkg-disfigure libbar -test pkg-disfigure libfoo -test pkg-purge libfoo -test pkg-purge libbar - -test pkg-fetch libfoo/1.1.0 -test pkg-unpack libfoo -test pkg-configure libfoo -test pkg-fetch libbar/1.3.0 -test pkg-unpack libbar -fail pkg-configure libbar # incompatible constraints -test pkg-disfigure libfoo -test pkg-purge libfoo -test pkg-purge libbar - - -## -## pkg-status (also tested in pkg-{fetch,unpack,configure,disfigure,purge}) -## -test rep-create pkg/1/build2.org/status/stable -test rep-create pkg/1/build2.org/status/extra -test rep-create pkg/1/build2.org/status/testing -test rep-create pkg/1/build2.org/status/unstable - -# basics -# -test cfg-create --wipe -stat libfoo/1.0.0 "unknown" -stat libfoo "unknown" -test rep-add $rep/status/stable -test rep-fetch --trust-yes -stat libfoo/1.0.0 "available" -stat libfoo "available 1.0.0 sys:?" -test pkg-fetch libfoo/1.0.0 -stat libfoo/1.0.0 "fetched; available" -stat libfoo "fetched 1.0.0; available sys:?" - -# multiple versions/revisions -# -test cfg-create --wipe -test rep-add $rep/status/extra -test rep-fetch --trust-yes -stat libbar "available 1.1.0+1 sys:?" -test rep-add $rep/status/stable -test rep-fetch --trust-yes -stat libbar "available 1.1.0+1 1.0.0 sys:?" - -test cfg-create --wipe -test rep-add $rep/status/testing -test rep-fetch --trust-yes -stat libbar "available 1.1.0 1.0.0+1 1.0.0 sys:?" - -test cfg-create --wipe -test rep-add $rep/status/unstable -test rep-fetch --trust-yes -stat libbar "available 2.0.0 1.1.0 1.0.0+1 1.0.0 sys:?" -test pkg-fetch libbar/1.0.0+1 -stat libbar "fetched 1.0.0+1; available 2.0.0 1.1.0 sys:?" -test pkg-purge libbar -test pkg-fetch libbar/2.0.0 -stat libbar "fetched 2.0.0; available sys:?" - - -## -## pkg-update -## -test cfg-create --wipe -test rep-add $rep/common/hello -test rep-fetch --trust $hello_fp - -fail pkg-update # package name expected -fail pkg-update libhello # no such package -test pkg-fetch libhello/1.0.0 -fail pkg-update libhello # wrong package state -test pkg-purge libhello - -# src == out -# -test pkg-fetch libhello/1.0.0 -test pkg-unpack libhello -test pkg-configure libhello $cxx_options -test pkg-update libhello -test pkg-update libhello -test pkg-disfigure libhello -test pkg-purge libhello - -# src != out -# -test cfg-create --wipe -test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 -test pkg-configure libhello $cxx_options -test pkg-update libhello -test pkg-update libhello -test pkg-disfigure libhello -test pkg-purge libhello - - -## -## pkg-clean -## -test cfg-create --wipe -test rep-add $rep/common/hello -test rep-fetch --trust $hello_fp - -fail pkg-clean # package name expected -fail pkg-clean libhello # no such package -test pkg-fetch libhello/1.0.0 -fail pkg-clean libhello # wrong package state -test pkg-purge libhello - -# src == out -# -test pkg-fetch libhello/1.0.0 -test pkg-unpack libhello -test pkg-configure libhello $cxx_options -test pkg-update libhello -test pkg-clean libhello -test pkg-clean libhello -test pkg-disfigure libhello -test pkg-purge libhello - -# src != out -# -test cfg-create --wipe -test pkg-unpack -e pkg/1/build2.org/common/libhello-1.0.0 -test pkg-configure libhello $cxx_options -test pkg-update libhello -test pkg-clean libhello -test pkg-clean libhello -test pkg-disfigure libhello -test pkg-purge libhello - - -## -## Low-level command scenarios. -## - - -# build and clean package -# -test cfg-create --wipe cxx $cxx_options -test rep-add $rep/common/hello -test rep-fetch --trust $hello_fp -test pkg-fetch libhello/1.0.0 -test pkg-unpack libhello -test pkg-configure libhello $cxx_options -test pkg-update libhello -test pkg-clean libhello -test pkg-disfigure libhello -test pkg-purge libhello - -## -## pkg-build -## - -# 1 (libfoo) -# -test rep-create pkg/1/build2.org/satisfy/t1 -test cfg-create --wipe - -fail pkg-build -p # package name expected -fail pkg-build -p libfoo # unknown package -fail pkg-build -p libfoo/1.0.0 # unknown package -test pkg-build -p pkg/1/build2.org/satisfy/libfoo-1.1.0.tar.gz <<EOF -build libfoo/1.1.0 -EOF -test pkg-build -p pkg/1/build2.org/satisfy/libfoo-1.1.0/ <<EOF -build libfoo/1.1.0 -EOF - -test pkg-unpack -e pkg/1/build2.org/satisfy/libfoo-1.1.0 -test pkg-build -p libfoo <<< "build libfoo/1.1.0" -test pkg-build -p libfoo/1.1.0 <<< "build libfoo/1.1.0" -test pkg-build -p libfoo libfoo <<< "build libfoo/1.1.0" -fail pkg-build -p libfoo libfoo/1.1.0 -fail pkg-build -p libfoo/1.1.0 libfoo -test pkg-build -p libfoo/1.1.0 libfoo/1.1.0 <<< "build libfoo/1.1.0" -fail pkg-build -p libfoo/1.0.0 -test pkg-purge libfoo - -test rep-add $rep/satisfy/t1 -test rep-fetch --trust-yes -test pkg-build -p libfoo <<< "build libfoo/1.0.0" -test pkg-build -p libfoo/1.0.0 <<< "build libfoo/1.0.0" -fail pkg-build -p libfoo/1.1.0 - -test pkg-unpack -e pkg/1/build2.org/satisfy/libfoo-1.1.0 -test pkg-build -p libfoo <<< "build libfoo/1.1.0" -test pkg-build -p libfoo/1.0.0 <<< "downgrade libfoo/1.0.0" -fail pkg-build -p libfoo/0.0.1 -test pkg-purge libfoo - -test pkg-fetch -e pkg/1/build2.org/satisfy/libfoo-0.0.1.tar.gz -test pkg-unpack libfoo -test pkg-build -p libfoo <<< "upgrade libfoo/1.0.0" -test pkg-build -p libfoo/0.0.1 <<< "build libfoo/0.0.1" -fail pkg-build -p libfoo/1.1.0 -test pkg-purge libfoo - -# 2 (libbar depends on libfoo) -# -test rep-create pkg/1/build2.org/satisfy/t2 -test cfg-create --wipe - -fail pkg-build pkg/1/build2.org/satisfy/libbar-1.0.0.tar.gz - -test rep-add $rep/satisfy/t2 -test rep-fetch --trust-yes - -test pkg-build -p libbar <<EOF -build libfoo/1.0.0 (required by libbar) -build libbar/1.0.0 -EOF -test pkg-build -p libbar libfoo <<EOF -build libfoo/1.0.0 -build libbar/1.0.0 -EOF -test pkg-build -p libbar libfoo/1.0.0 <<EOF -build libfoo/1.0.0 -build libbar/1.0.0 -EOF -fail pkg-build -p libbar libfoo libbar/1.0.0 -fail pkg-build -p libbar libfoo/1.1.0 - -test pkg-fetch -e pkg/1/build2.org/satisfy/libfoo-0.0.1.tar.gz -test pkg-unpack libfoo -test pkg-build -p libbar <<EOF -build libfoo/0.0.1 (required by libbar) -build libbar/1.0.0 -EOF -test pkg-build -p libbar libfoo <<EOF -upgrade libfoo/1.0.0 -build libbar/1.0.0 -EOF -test pkg-build -p libbar libfoo/0.0.1 <<EOF -build libfoo/0.0.1 -build libbar/1.0.0 -EOF -test pkg-purge libfoo - -test pkg-unpack -e pkg/1/build2.org/satisfy/libfoo-1.1.0 -test pkg-build -p libbar <<EOF -build libfoo/1.1.0 (required by libbar) -build libbar/1.0.0 -EOF -test pkg-build -p libbar libfoo <<EOF -build libfoo/1.1.0 -build libbar/1.0.0 -EOF -test pkg-build -p libbar libfoo/1.0.0 <<EOF -downgrade libfoo/1.0.0 -build libbar/1.0.0 -EOF -test pkg-purge libfoo - -# 3 (libbaz depends on libbar; libbar in prerequisite repository) -# -test rep-create pkg/1/build2.org/satisfy/t3 -test cfg-create --wipe -test rep-add $rep/satisfy/t3 -test rep-fetch --trust-yes - -# only in prerequisite repository -# -fail pkg-build -p libfoo -fail pkg-build -p libbar -fail pkg-build -p libbaz libbar - -test pkg-build -p libbaz <<EOF -build libfoo/1.0.0 (required by libbar) -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -EOF - -test rep-add $rep/satisfy/t2 -test rep-fetch - -# order -# -test pkg-build -p libfox libfoo <<EOF -build libfox/1.0.0 -build libfoo/1.0.0 -EOF - -test pkg-build -p libfoo libfox <<EOF -build libfoo/1.0.0 -build libfox/1.0.0 -EOF - -test pkg-build -p libbaz libfoo <<EOF -build libfoo/1.0.0 -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -EOF - -test pkg-build -p libfoo libbaz <<EOF -build libfoo/1.0.0 -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -EOF - -test pkg-build -p libbaz libfox <<EOF -build libfoo/1.0.0 (required by libbar) -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -build libfox/1.0.0 -EOF - -test pkg-build -p libfox libbaz <<EOF -build libfox/1.0.0 -build libfoo/1.0.0 (required by libbar) -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -EOF - -test pkg-build -p libfox libfoo libbaz <<EOF -build libfox/1.0.0 -build libfoo/1.0.0 -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -EOF - -test pkg-build -p libfox libbaz libfoo <<EOF -build libfox/1.0.0 -build libfoo/1.0.0 -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -EOF - -test pkg-build -p libfoo libfox libbaz <<EOF -build libfoo/1.0.0 -build libfox/1.0.0 -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -EOF - -test pkg-build -p libfoo libbaz libfox <<EOF -build libfoo/1.0.0 -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -build libfox/1.0.0 -EOF - -# this one is contradictory: baz before fox but fox before foo -# -test pkg-build -p libbaz libfox libfoo <<EOF -build libfox/1.0.0 -build libfoo/1.0.0 -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -EOF - -test pkg-build -p libbaz libfoo libfox <<EOF -build libfoo/1.0.0 -build libbar/1.0.0 (required by libbaz) -build libbaz/1.0.0 -build libfox/1.0.0 -EOF - -test pkg-build -p libbaz libfoo libbar <<EOF -build libfoo/1.0.0 -build libbar/1.0.0 -build libbaz/1.0.0 -EOF - -test pkg-build -p libbaz libbar libfoo <<EOF -build libfoo/1.0.0 -build libbar/1.0.0 -build libbaz/1.0.0 -EOF - -# 4 (libbaz depends on libfoo and libbar; libbar depends on libfoo >= 1.1.0) -# -test rep-create pkg/1/build2.org/satisfy/t4a -test rep-create pkg/1/build2.org/satisfy/t4b -test rep-create pkg/1/build2.org/satisfy/t4c -test rep-create pkg/1/build2.org/satisfy/t4d - -test cfg-create --wipe -test rep-add $rep/satisfy/t4c -test rep-fetch --trust-yes - -test pkg-build -p libbaz <<EOF -build libfoo/1.1.0 (required by libbar libbaz) -build libbar/1.1.0 (required by libbaz) -build libbaz/1.1.0 -EOF - -test pkg-build -p libfoo libbaz <<EOF -build libfoo/1.1.0 -build libbar/1.1.0 (required by libbaz) -build libbaz/1.1.0 -EOF - -fail pkg-build -p libfoo/1.0.0 libbaz -fail pkg-build -p libfoo/1.1.0 libbaz - -# upgrade warning -# -test pkg-fetch -e pkg/1/build2.org/satisfy/libfoo-0.0.1.tar.gz -test pkg-unpack libfoo -test pkg-build -p libbaz <<EOF -upgrade libfoo/1.1.0 (required by libbar libbaz) -build libbar/1.1.0 (required by libbaz) -build libbaz/1.1.0 -EOF -test pkg-purge libfoo - -# downgrade error -# -test pkg-fetch -e pkg/1/build2.org/satisfy/libfoo-1.2.0.tar.gz -test pkg-unpack libfoo -fail pkg-build -p libbaz -test rep-add $rep/satisfy/t4a -test rep-fetch --trust-yes -test pkg-build -p libfoo/1.1.0 libbaz <<EOF -downgrade libfoo/1.1.0 -build libbar/1.1.0 (required by libbaz) -build libbaz/1.1.0 -EOF -test pkg-purge libfoo - -# dependent prevents upgrade/downgrade -# -test pkg-fetch libfoo/1.1.0 -test pkg-unpack libfoo -test pkg-configure libfoo -test pkg-fetch libbar/1.1.0 -test pkg-unpack libbar -test pkg-configure libbar -fail pkg-build -p pkg/1/build2.org/satisfy/libfoo-1.2.0.tar.gz -fail pkg-build -p libfoo/1.0.0 -test pkg-build -p libfoo/1.1.0 <<< "build libfoo/1.1.0" -test pkg-disfigure libbar -test pkg-disfigure libfoo -test pkg-purge libbar -test pkg-purge libfoo - -# dependent reconfigure -# -test cfg-create --wipe - -test pkg-fetch -e pkg/1/build2.org/satisfy/libfoo-1.0.0.tar.gz -test pkg-unpack libfoo -test pkg-configure libfoo -test pkg-fetch -e pkg/1/build2.org/satisfy/libbar-1.0.0.tar.gz -test pkg-unpack libbar -test pkg-configure libbar -test pkg-fetch -e pkg/1/build2.org/satisfy/libbaz-1.1.0.tar.gz -test pkg-unpack libbaz -test pkg-configure libbaz - -test rep-add $rep/satisfy/t4a -test rep-add $rep/satisfy/t4b -test rep-fetch --trust-yes - -test pkg-build -p libbar <<EOF -upgrade libfoo/1.1.0 (required by libbar libbaz) -upgrade libbar/1.1.0 -reconfigure libbaz (dependent of libbar) -EOF - -test pkg-build -p libfoo <<EOF -upgrade libfoo/1.1.0 -reconfigure libbar (dependent of libfoo) -reconfigure libbaz (dependent of libbar) -EOF - -test pkg-build -p libfoo libbar/1.0.0 <<EOF -upgrade libfoo/1.1.0 -reconfigure/build libbar/1.0.0 -reconfigure libbaz (dependent of libbar) -EOF - -test pkg-build -p libbar/1.0.0 libfoo <<EOF -upgrade libfoo/1.1.0 -reconfigure/build libbar/1.0.0 -reconfigure libbaz (dependent of libbar) -EOF - -test pkg-build -p libbaz libfoo <<EOF -upgrade libfoo/1.1.0 -reconfigure libbar (dependent of libbaz libfoo) -reconfigure/build libbaz/1.1.0 -EOF - -test pkg-build -p libbaz libfoo/1.0.0 <<EOF -build libfoo/1.0.0 -build libbaz/1.1.0 -EOF - -# actually build -# -test cfg-create --wipe -test rep-add $rep/satisfy/t4c -test rep-fetch --trust-yes -test pkg-build -y libbaz -stat libfoo/1.1.0 "configured; available" -stat libbar/1.1.0 "configured" -stat libbaz/1.1.0 "configured hold_package; available" - -# hold -# -test cfg-create --wipe -test pkg-build -y pkg/1/build2.org/satisfy/libfoo-1.0.0.tar.gz -stat libfoo "configured 1.0.0 hold_package hold_version" -test pkg-build -y pkg/1/build2.org/satisfy/libfoo-1.1.0/ -stat libfoo "configured 1.1.0 hold_package hold_version" - -test cfg-create --wipe -test rep-add $rep/satisfy/t4c -test rep-fetch --trust-yes -test pkg-build -y libfoo -stat libfoo "configured 1.0.0 hold_package; available sys:?" -test pkg-build -y libfoo/1.0.0 -stat libfoo "configured 1.0.0 hold_package hold_version; available sys:?" - -test cfg-create --wipe -test rep-add $rep/satisfy/t4c -test rep-fetch --trust-yes -test pkg-build -y libfoo/1.0.0 -stat libfoo "configured 1.0.0 hold_package hold_version; available sys:?" - -test cfg-create --wipe -test pkg-fetch -e pkg/1/build2.org/satisfy/libfoo-1.0.0.tar.gz -test pkg-unpack libfoo -test pkg-configure libfoo -stat libfoo "configured 1.0.0" -test pkg-build -y libfoo -stat libfoo "configured 1.0.0 hold_package" - -test cfg-create --wipe -test rep-add $rep/satisfy/t4c -test rep-fetch --trust-yes -test pkg-build -y libfoo -stat libfoo "configured 1.0.0 hold_package; available sys:?" -test pkg-build -y libbaz -stat libfoo "configured 1.1.0 hold_package; available sys:?" - -test cfg-create --wipe -test rep-add $rep/satisfy/t4c -test rep-fetch --trust-yes -test pkg-build -y libfoo/1.0.0 -stat libfoo "configured 1.0.0 hold_package hold_version; available sys:?" -fail pkg-build -y libbaz - -test cfg-create --wipe -test rep-add $rep/satisfy/t4c -test rep-fetch --trust-yes -test pkg-build -y libbaz -stat libfoo "configured 1.1.0; available sys:?" - -# drop prerequisites on downgrade -# -test rep-create pkg/1/build2.org/satisfy/t5 -test cfg-create --wipe -test rep-add $rep/satisfy/t2 -test rep-fetch --trust-yes - -test pkg-build -y libbar -stat libfoo "configured 1.0.0; available sys:?" -stat libbar "configured 1.0.0 hold_package; available sys:?" - -test rep-add $rep/satisfy/t5 -test rep-fetch --trust-yes - -test pkg-build -y libbar -stat libfoo "available 1.0.0 sys:?" -stat libbar "configured 1.2.0 hold_package; available sys:?" - -test pkg-build -y libbar/1.0.0 libfoo -stat libfoo "configured 1.0.0 hold_package; available sys:?" -stat libbar "configured 1.0.0 hold_package hold_version; available 1.2.0 sys:?" - -test pkg-build -y libbar -stat libfoo "configured 1.0.0 hold_package; available sys:?" -stat libbar "configured 1.2.0 hold_package; available sys:?" - -## -## pkg-drop -## -test cfg-create --wipe - -fail pkg-drop -p # package name expected -fail pkg-drop -p libfoo # unknown package -fail pkg-drop -p libfoo/1.0.0 # unknown package - -test cfg-create --wipe -test rep-add $rep/satisfy/t4c -test rep-fetch --trust-yes -test pkg-build -y libbaz - -test pkg-drop -p -y libfoo libbaz libbar <<EOF -drop libbaz -drop libbar -drop libfoo -EOF - -# dependents -# -fail pkg-drop -y libfoo -fail pkg-drop -y libfoo libbar -fail pkg-drop -y libfoo libbaz - -test pkg-drop -p -y --drop-dependent libfoo <<EOF -drop libbaz -drop libbar -drop libfoo -EOF - -test pkg-drop -p --drop-dependent libfoo libbaz <<EOF -drop libbaz -drop libbar -drop libfoo -EOF - -test pkg-drop -p --drop-dependent libbaz libfoo <<EOF -drop libbaz -drop libbar -drop libfoo -EOF - -# prerequisites -# -test pkg-drop -p -y libbaz <<EOF -drop libbaz -drop libbar -drop libfoo -EOF - -test pkg-drop -p -n libbaz <<EOF -drop libbaz -EOF - -test pkg-drop -p -n libbar libbaz <<EOF -drop libbaz -drop libbar -EOF - -test pkg-drop -p -n libbaz libbar <<EOF -drop libbaz -drop libbar -EOF - -# prerequisites and dependents -# -test pkg-drop -p -y --drop-dependent libbar <<EOF -drop libbaz -drop libbar -drop libfoo -EOF - -test cfg-create --wipe -test rep-add $rep/satisfy/t4d -test rep-fetch --trust-yes -test pkg-build -y libbiz - -test pkg-drop -p -y libbiz <<EOF -drop libbiz -drop libbaz -drop libbar -drop libfoo -drop libfox -EOF - -test pkg-drop -p -y libfox libbiz <<EOF -drop libbiz -drop libfox -drop libbaz -drop libbar -drop libfoo -EOF - -test pkg-drop -p -y --drop-dependent libfox <<EOF -drop libbiz -drop libfox -drop libbaz -drop libbar -drop libfoo -EOF - -test pkg-drop -p -y --drop-dependent libbaz <<EOF -drop libbiz -drop libbaz -drop libbar -drop libfoo -drop libfox -EOF - -test pkg-drop -p -y --drop-dependent libbar <<EOF -drop libbiz -drop libbaz -drop libbar -drop libfoo -drop libfox -EOF - -test pkg-drop -p -y --drop-dependent libfoo <<EOF -drop libbiz -drop libbaz -drop libbar -drop libfoo -drop libfox -EOF - -test pkg-drop -p -n --drop-dependent libfox libbaz <<EOF -drop libbiz -drop libfox -drop libbaz -EOF - -test pkg-drop -p -n --drop-dependent libbaz libfox <<EOF -drop libbiz -drop libbaz -drop libfox -EOF - -test pkg-drop -p -n --drop-dependent libfox libbar <<EOF -drop libbiz -drop libfox -drop libbaz -drop libbar -EOF - -test pkg-drop -p -n --drop-dependent libbar libfox <<EOF -drop libbiz -drop libbaz -drop libbar -drop libfox -EOF - -# actually drop -# -test pkg-drop -y --drop-dependent libbar -stat libfox/1.0.0 "available" -stat libfoo/1.1.0 "unknown" -stat libbar/1.1.0 "unknown" -stat libbaz/1.1.0 "unknown" -stat libbiz/1.0.0 "available" - -## -## auth -## - -# rep-create -# -fail rep-create pkg/1/build2.org/auth/create-noemail --key key.pem -fail rep-create pkg/1/build2.org/auth/create-expired --key key.pem - -fail rep-create pkg/1/build2.org/auth/signed # no --key option -test rep-create pkg/1/build2.org/auth/signed --key key.pem -test rep-create pkg/1/build2.org/auth/unsigned1 -test rep-create pkg/1/build2.org/auth/unsigned2 -test rep-create pkg/1/build2.org/auth/name-mismatch --key key.pem - -test rep-create pkg/1/build2.org/auth/sha256sum-mismatch --key key.pem - -# Tamper signature manifest's sha256sum value. -# -s=d374c59b36fdbdbd0d4468665061d94fda9c6c687863dfe72b0bcc34ff9d5fb4 -edit pkg/1/build2.org/auth/sha256sum-mismatch/signature \ - "s/^\(sha256sum: \).*\$/\1$s/" - -test rep-create pkg/1/build2.org/auth/signature-mismatch --key key.pem - -# Tamper signature manifest's signature value. -# -edit pkg/1/build2.org/auth/signature-mismatch/signature \ - '/^signature: \\$/,/^\\$/d' -cat >> pkg/1/build2.org/auth/signature-mismatch/signature << EOF -signature: \\ -XBjnmXXVHY0RqMI0gL/P4t/vuWwK9JJkLl4Qf2gMxq5k2WQ2CIE56DfG0RaGklgKcI3UxsQZvMQI -5PNtAHJDjteQ+BqY0io8A43KPX+2LKMU+I825sKmPRjCLYleGM3mNndDkWfYtAzYk5AmR2piqRz0 -D7CLq9GIoQQZO4Fw44muaQDMCRcXy8Txx2jDnretQjx/C0ZQw4M/cd6/cKEKUmLITDkBig9oVlSh -tpxHqWz5NTbO3vm8ILc03AwiOJHwZweLb6ocJ6a467IJa+F/xUm9B09k8wFWMs+jHXXzHDE0syv7 -lqWL7SvHSjVFrGVFKS6nx7lCj2b8XFiGlwWIwjY4m/VK/5QmbL/lC4f+ww5XT5NG5iYh/eMaCxCJ -zTg5iZsWNLhrx9uKNrL5xC4z0OONRVOwzu7gsqr0GLWewPyhH0AqJLgOSkw9N7FJwbv2IKNZ88YA -u2YMXNkXytcQvENLVQDX5oxvUMEurUJFOCuYB/SEnpcwkV5h9RtXzIFVy4OCTU2MhQHDEldI8s7w -Hga/ct4WupgE228gGdgwJLCbHx6AWBlS9iL10AdS8JkQ9LaZwTMHHz44f8y00X4MiT06gpgDeoQD -rUyP0KNG65tdWnVTMqg6Q/YXhtRZLHoD6+QbiYLlruR1phu4y4fDt7AKxoXfeme/a86A37UogZY= -\\ -EOF - -# rep-fetch -# -signed_fp=`rep_cert_fp pkg/1/build2.org/auth/signed` -test cfg-create --wipe -test rep-add $rep/auth/signed -test rep-fetch --trust $signed_fp -test rep-fetch - -test cfg-create --wipe -test rep-add $rep/auth/signed -test rep-fetch --trust-no --trust $signed_fp -test rep-fetch -test rep-fetch --trust-no # certificate is already trusted - -test cfg-create --wipe -test rep-add $rep/auth/signed -test rep-fetch --trust-yes -test rep-fetch - -test cfg-create --wipe -test rep-add $rep/auth/signed -fail rep-fetch --trust-no - -test cfg-create --wipe -test rep-add $rep/auth/signed -fail rep-fetch --trust-yes --trust-no # inconsistent options - -test cfg-create --wipe -test rep-add $rep/auth/unsigned1 -test rep-fetch --trust-yes -test rep-fetch -test rep-add $rep/auth/unsigned2 -test rep-fetch -test rep-fetch --trust-no # certificates are already trusted - -test cfg-create --wipe -test rep-add $rep/auth/unsigned1 -fail rep-fetch --trust-no - -test cfg-create --wipe -test rep-add $rep/auth/name-mismatch -fail rep-fetch --trust-yes # certificate name mismatch - -test cfg-create --wipe -test rep-add $rep/auth/expired -fail rep-fetch --trust-yes # certificate expired - -test cfg-create --wipe -test rep-add $rep/auth/sha256sum-mismatch -fail rep-fetch --trust-yes # packages file checksum mismatch - -test cfg-create --wipe -test rep-add $rep/auth/signature-mismatch -fail rep-fetch --trust-yes # packages file signature:mismatch - -# rep-info -# -test cfg-create --wipe -test rep-info --trust-no --trust $signed_fp -d $cfg $rep/auth/signed <<EOF -${repn}auth/signed `location auth/signed` -CN=build2.org/O=Code Synthesis/info@build2.org -$signed_fp - -libfoo/1.0.0 -EOF - -test rep-info --trust-no -d $cfg $rep/auth/signed <<EOF -${repn}auth/signed `location auth/signed` -CN=build2.org/O=Code Synthesis/info@build2.org -$signed_fp - -libfoo/1.0.0 -EOF - -test cfg-create --wipe -test rep-info --trust-yes $rep/auth/signed <<EOF -${repn}auth/signed `location auth/signed` -CN=build2.org/O=Code Synthesis/info@build2.org -$signed_fp - -libfoo/1.0.0 -EOF - -fail rep-info --trust-no $rep/auth/signed <<EOF -${repn}auth/signed `location auth/signed` -CN=build2.org/O=Code Synthesis/info@build2.org -$signed_fp - -libfoo/1.0.0 -EOF - -test cfg-create --wipe -test rep-info --trust-yes -d $cfg $rep/auth/unsigned1 <<EOF -${repn}auth/unsigned1 `location auth/unsigned1` - -libfoo/1.0.0 -EOF - -test rep-info --trust-no -d $cfg $rep/auth/unsigned2 <<EOF -${repn}auth/unsigned2 `location auth/unsigned2` - -libfoo/1.0.0 -EOF - -test cfg-create --wipe -test rep-info --trust-yes $rep/auth/unsigned1 <<EOF -${repn}auth/unsigned1 `location auth/unsigned1` - -libfoo/1.0.0 -EOF - -fail rep-info --trust-no $rep/auth/unsigned1 <<EOF -${repn}auth/unsigned1 `location auth/unsigned1` - -libfoo/1.0.0 -EOF - -## -## system -## - -test rep-create pkg/1/build2.org/system/t1 # foo/2 (->libbar>=2), libbar/2 -test rep-create pkg/1/build2.org/system/t2 # foo/2 (->libbar>=2), libbar/0+1 -test rep-create pkg/1/build2.org/system/t3 # ->t2; foo/2 (->libbar>=2) - -function build () -{ - test build -p $* - test build -y $* -} - -# Fetch system/t1 repository: foo/2 (->libbar/2), libbar/2 -# -test cfg-create --wipe -test rep-add $rep/system/t1 -test rep-fetch --trust-yes - -# Fail to build different combinations of package duplicates on the command -# line. -# -fail build sys:libbar ?sys:libbar -fail build ?sys:libbar sys:libbar -fail build ?sys:libbar libbar -fail build libbar ?sys:libbar -fail build sys:libbar libbar -fail build libbar sys:libbar - -# Build sys:libbar/*. -# -build sys:libbar <<< 'configure sys:libbar/*' -stat libbar \ - 'configured,system * hold_package hold_version; available 2 1 sys:?' -stat libbaz 'available 2 sys:?' - -# Build foo with preconfigured sys:libbar/*. -# -build foo <<< "build foo/2" -stat foo 'configured 2 hold_package; available sys:?' -stat libbar \ - 'configured,system * hold_package hold_version; available 2 1 sys:?' -stat libbaz 'available 2 sys:?' - -# Reconfigure sys:libbar/* to 2. -# -build sys:libbar/2 <<EOF -reconfigure sys:libbar/2 -reconfigure foo (dependent of libbar) -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' -stat libbaz 'available 2 sys:?' - -# Reconfigure sys:libbar/2 to libbar/2. -# -build libbar/2 <<EOF -build libbaz/2 (required by libbar) -reconfigure/build libbar/2 -reconfigure foo (dependent of libbar) -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured 2 hold_package hold_version; available sys:?' -stat libbaz 'configured 2; available sys:?' - -# Drop all, build foo and sys:libbar/2. -# -test pkg-drop -y foo libbar - -build foo sys:libbar/2 <<EOF -configure sys:libbar/2 -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' -stat libbaz 'available 2 sys:?' - -# Drop all, build sys:libbar/2 and foo. -# -test pkg-drop -y foo libbar - -build sys:libbar/2 foo <<EOF -configure sys:libbar/2 -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' -stat libbaz 'available 2 sys:?' - -# Drop all, build libbar/2, then foo and sys:libbar/2. -# -test pkg-drop -y foo libbar - -build libbar/2 <<EOF -build libbaz/2 (required by libbar) -build libbar/2 -EOF -stat libbar 'configured 2 hold_package hold_version; available sys:?' -stat libbaz 'configured 2; available sys:?' - -build foo sys:libbar/2 <<EOF -reconfigure sys:libbar/2 -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' -stat libbaz 'available 2 sys:?' - -# Drop all, build libbar/2, then foo and sys:libbar/2. -# -test pkg-drop -y foo libbar - -build libbar/2 <<EOF -build libbaz/2 (required by libbar) -build libbar/2 -EOF -stat libbar 'configured 2 hold_package hold_version; available sys:?' -stat libbaz 'configured 2; available sys:?' - -build foo sys:libbar <<EOF -reconfigure sys:libbar/* -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar \ - 'configured,system * hold_package hold_version; available 2 1 sys:?' -stat libbaz 'available 2 sys:?' - -# Drop all, build sys:libbar/2, then foo and libbar/2, then reconfigure to -# sys:libbar/2 and afterwards to libbar/2. -# -test pkg-drop -y foo libbar - -build sys:libbar/2 <<< "configure sys:libbar/2" -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' - -build foo libbar/2 <<EOF -build libbaz/2 (required by libbar) -reconfigure/build libbar/2 -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured 2 hold_package hold_version; available sys:?' -stat libbaz 'configured 2; available sys:?' - -build sys:libbar/2 <<EOF -reconfigure sys:libbar/2 -reconfigure foo (dependent of libbar) -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' -stat libbaz 'available 2 sys:?' - -build libbar/2 <<EOF -build libbaz/2 (required by libbar) -reconfigure/build libbar/2 -reconfigure foo (dependent of libbar) -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured 2 hold_package hold_version; available sys:?' -stat libbaz 'configured 2; available sys:?' - -# Drop all, configure sys:libbar/1, then fail to build foo but succeed to -# build foo libbar. -# -test pkg-drop -y foo libbar - -build sys:libbar/1 <<< "configure sys:libbar/1" -stat libbar 'configured,system 1 hold_package hold_version; available 2 sys:?' -stat libbaz 'available 2 sys:?' - -fail build foo - -build foo libbar <<EOF -build libbaz/2 (required by libbar) -upgrade libbar/2 -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured 2 hold_package; available sys:?' -stat libbaz 'configured 2; available sys:?' - -# Drop all, then build foo ?sys:libbar. -# -test pkg-drop -y foo libbar - -build foo ?sys:libbar<<EOF -configure sys:libbar/* (required by foo) -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system *; available 2 1 sys:?' -stat libbaz 'available 2 sys:?' - -# Drop all, configure libbar/1, then fail to build foo and foo ?sys:libbar/2, -# but succeed to build foo sys:libbar/2. -# -test pkg-drop -y foo libbar - -build libbar/1 <<EOF -build libbaz/2 (required by libbar) -build libbar/1 -EOF -stat libbar 'configured 1 hold_package hold_version; available 2 sys:?' -stat libbaz 'configured 2; available sys:?' - -fail build foo - -build foo ?sys:libbar/2<<EOF -reconfigure sys:libbar/2 (required by foo) -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' -stat libbaz 'available 2 sys:?' - -build foo sys:libbar/2 <<EOF -reconfigure sys:libbar/2 -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' -stat libbaz 'available 2 sys:?' - -# Fetch system/t2 repository: foo/2 (->libbar>=2), libbar/0+1 -# -test cfg-create --wipe -test rep-add $rep/system/t2 -test rep-fetch --trust-yes - -# Fail to build foo having no system package configured. -# -fail build foo -fail build foo libbar -stat foo 'available 2 sys:?' -stat libbar 'available sys:?' - -# Build foo configuring sys:libbar. -# -build foo sys:libbar <<EOF -configure sys:libbar/* -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system * hold_package hold_version; available sys:?' - -# Drop all, configure sys:libbar/1, then fail to build foo, but succeed to -# build foo sys:libbar/2. -# -test pkg-drop -y foo libbar - -build sys:libbar/1 <<< "configure sys:libbar/1" -stat libbar 'configured,system 1 hold_package hold_version; available sys:?' - -fail build foo -build foo sys:libbar/2 <<EOF -reconfigure sys:libbar/2 -build foo/2 -EOF - -# Drop all, fail to build build foo sys:libbar/1, then configure sys:libbar/2 -# but still fail to build foo sys:libbar/1. -# -test pkg-drop -y foo libbar - -fail build foo sys:libbar/1 - -build sys:libbar/2 <<< "configure sys:libbar/2" -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' - -fail build foo sys:libbar/1 - -# Drop all, configure sys:libbar/1, then fail to build sys:libbar/1.1 foo. -# -test pkg-drop -y libbar - -build sys:libbar/1 <<< "configure sys:libbar/1" -stat libbar 'configured,system 1 hold_package hold_version; available sys:?' - -fail build sys:libbar/1.1 foo - -# Drop all, build foo ?sys:libbar, then drop foo and make sure libbar is purged -# as well. -# -test pkg-drop -y libbar - -build foo ?sys:libbar<<EOF -configure sys:libbar/* (required by foo) -build foo/2 -EOF -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system *; available sys:?' - -test pkg-drop -y foo -stat foo 'available 2 sys:?' -stat libbar 'available sys:?' - -# Build sys:libbar/1, then build foo ?sys:libbar, then drop foo and make sure -# libbar stays. -# -build sys:libbar/1<<EOF -configure sys:libbar/1 -EOF -stat libbar 'configured,system 1 hold_package hold_version; available sys:?' - -fail build foo - -build foo ?sys:libbar/2 <<EOF -reconfigure sys:libbar/2 (required by foo) -build foo/2 -EOF - -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' - -test pkg-drop -y foo -stat foo 'available 2 sys:?' -stat libbar 'configured,system 2 hold_package hold_version; available sys:?' - -# Fetch system/t2 repository: foo/2 (->libbar>=2), libbar/0+1 -# -test cfg-create --wipe -test rep-add $rep/system/t3 # ->t2; foo/2 (->libbar>=2) -test rep-fetch --trust-yes - -# After test number of faulty builds, then build foo ?sys:libbar/2. Afterwards -# fail attempts to reconfigure libbar. -# -fail build foo -fail build sys:libbar/1 -fail build foo sys:libbar/1 -fail build foo ?sys:libbar/1 -stat foo 'available 2 sys:?' -stat libbar 'unknown' - -build foo ?sys:libbar/2 <<EOF -configure sys:libbar/2 (required by foo) -build foo/2 -EOF - -# libbar while being selected is still unknown. -# -fail build sys:libbar -fail build foo sys:libbar - -build foo ?sys:libbar/3 <<EOF -build foo/2 -EOF - -build foo ?sys:libbar <<EOF -build foo/2 -EOF - -stat foo 'configured 2 hold_package; available sys:?' -stat libbar 'configured,system 2' |