#!/bin/bash curdir=$(readlink -e $(dirname $0)) . "${curdir}/lib/common.inc" # # self test # testPackages() { # TODO: namcap -r depends fails with i686 packages find "${pkgdir}" -name "*${PKGEXT}" -exec namcap -e depends {} + || fail 'namcap failed' } # # db-update # testAddSimplePackages() { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b') local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage extra ${pkgbase} ${arch} done done ../db-update for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do checkPackage extra ${pkgbase}-1-1-${arch}.pkg.tar.xz ${arch} done done } testAddSingleSimplePackage() { releasePackage extra 'pkg-simple-a' 'i686' ../db-update checkPackage extra 'pkg-simple-a-1-1-i686.pkg.tar.xz' 'i686' } testAddAnyPackages() { local pkgs=('pkg-any-a' 'pkg-any-b') local pkgbase for pkgbase in ${pkgs[@]}; do releasePackage extra ${pkgbase} any done ../db-update for pkgbase in ${pkgs[@]}; do checkAnyPackage extra ${pkgbase}-1-1-any.pkg.tar.xz done } testAddSplitPackages() { local arches=('i686' 'x86_64') local pkgs=('pkg-split-a' 'pkg-split-b') local pkg local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage extra ${pkgbase} ${arch} done done ../db-update for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do for pkg in "${pkgdir}/${pkgbase}"/*-${arch}.pkg.tar.*; do checkPackage extra $(basename ${pkg}) ${arch} done done done } testUpdateAnyPackage() { releasePackage extra pkg-any-a any ../db-update pushd "${TMP}/svn-packages-copy/pkg-any-a/trunk/" >/dev/null sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD svn commit -q -m"update pkg to pkgrel=2" >/dev/null extra-i686-build >/dev/null 2>&1 mv pkg-any-a-1-2-any.pkg.tar.xz "${pkgdir}/pkg-any-a/" popd >/dev/null releasePackage extra pkg-any-a any ../db-update checkAnyPackage extra pkg-any-a-1-2-any.pkg.tar.xz any rm -f "${pkgdir}/pkg-any-a/pkg-any-a-1-2-any.pkg.tar.xz" } testUpdateAnyPackageToDifferentRepositoriesAtOnce() { releasePackage extra pkg-any-a any pushd "${TMP}/svn-packages-copy/pkg-any-a/trunk/" >/dev/null sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD svn commit -q -m"update pkg to pkgrel=2" >/dev/null extra-i686-build >/dev/null 2>&1 mv pkg-any-a-1-2-any.pkg.tar.xz "${pkgdir}/pkg-any-a/" popd >/dev/null releasePackage testing pkg-any-a any ../db-update checkAnyPackage extra pkg-any-a-1-1-any.pkg.tar.xz any checkAnyPackage testing pkg-any-a-1-2-any.pkg.tar.xz any rm -f "${pkgdir}/pkg-any-a/pkg-any-a-1-2-any.pkg.tar.xz" } testUpdateSameAnyPackageToDifferentRepositories() { releasePackage extra pkg-any-a any ../db-update checkAnyPackage extra pkg-any-a-1-1-any.pkg.tar.xz any releasePackage testing pkg-any-a any ../db-update >/dev/null 2>&1 && (fail 'Adding an existing package to another repository should fail'; return 1) local arch for arch in i686 x86_64; do ( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT%.tar.*}" ] \ && bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT%.tar.*}" -O | grep -q ${pkgbase}) \ && fail "${pkgbase} should not be in ${repo}/os/${arch}/${repo}${DBEXT%.tar.*}" done } # # db-remove # testRemovePackages() { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-split-a' 'pkg-split-b') local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage extra ${pkgbase} ${arch} done done ../db-update for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do ../db-remove ${pkgbase} extra ${arch} done done for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do checkRemovedPackage extra ${pkgbase} ${arch} done done } testRemoveAnyPackages() { local pkgs=('pkg-any-a' 'pkg-any-b') local pkgbase for pkgbase in ${pkgs[@]}; do releasePackage extra ${pkgbase} any done ../db-update for pkgbase in ${pkgs[@]}; do ../db-remove ${pkgbase} extra any done for pkgbase in ${pkgs[@]}; do checkRemovedAnyPackage extra ${pkgbase} done } # # db-move # testMoveSimplePackages() { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b') local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage testing ${pkgbase} ${arch} done done ../db-update ../db-move testing extra pkg-simple-a for arch in ${arches[@]}; do checkPackage extra pkg-simple-a-1-1-${arch}.pkg.tar.xz ${arch} checkRemovedPackage testing pkg-simple-a-1-1-${arch}.pkg.tar.xz ${arch} checkPackage testing pkg-simple-b-1-1-${arch}.pkg.tar.xz ${arch} done } testMoveAnyPackages() { local pkgs=('pkg-any-a' 'pkg-any-b') local pkgbase for pkgbase in ${pkgs[@]}; do releasePackage testing ${pkgbase} any done ../db-update ../db-move testing extra pkg-any-a checkAnyPackage extra pkg-any-a-1-1-any.pkg.tar.xz checkRemovedAnyPackage testing pkg-any-a checkAnyPackage testing pkg-any-b-1-1-any.pkg.tar.xz } testMoveSplitPackages() { local arches=('i686' 'x86_64') local pkgs=('pkg-split-a' 'pkg-split-b') local pkg local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage testing ${pkgbase} ${arch} done done ../db-update ../db-move testing extra pkg-split-a for arch in ${arches[@]}; do for pkg in "${pkgdir}/pkg-split-a"/*-${arch}.pkg.tar.*; do checkPackage extra $(basename ${pkg}) ${arch} done done for arch in ${arches[@]}; do for pkg in "${pkgdir}/pkg-split-b"/*-${arch}.pkg.tar.*; do checkPackage testing $(basename ${pkg}) ${arch} done done checkRemovedAnyPackage testing pkg-split-a } # # testing2x # testTesting2xAnyPackage() { releasePackage core pkg-any-a any ../db-update pushd "${TMP}/svn-packages-copy/pkg-any-a/trunk/" >/dev/null sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD svn commit -q -m"update pkg to pkgrel=2" >/dev/null extra-i686-build >/dev/null 2>&1 mv pkg-any-a-1-2-any.pkg.tar.xz "${pkgdir}/pkg-any-a/" popd >/dev/null releasePackage testing pkg-any-a any ../db-update rm -f "${pkgdir}/pkg-any-a/pkg-any-a-1-2-any.pkg.tar.xz" ../testing2x pkg-any-a checkAnyPackage core pkg-any-a-1-2-any.pkg.tar.xz any checkRemovedAnyPackage testing pkg-any-a } # # ftpdir-cleanup # testCleanupSimplePackages() { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b') local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage extra ${pkgbase} ${arch} done done ../db-update for arch in ${arches[@]}; do ../db-remove pkg-simple-a extra ${arch} done ../cron-jobs/ftpdir-cleanup >/dev/null for arch in ${arches[@]}; do local pkg1="pkg-simple-a-1-1-${arch}.pkg.tar.xz" checkRemovedPackage extra 'pkg-simple-a' ${arch} [ -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" ] && fail "${PKGPOOL}/${pkg1} found" [ -f "${FTP_BASE}/${repo}/os/${arch}/${pkg1}" ] && fail "${repo}/os/${arch}/${pkg1} found" local pkg2="pkg-simple-b-1-1-${arch}.pkg.tar.xz" checkPackage extra ${pkg2} ${arch} done } testCleanupAnyPackages() { local pkgs=('pkg-any-a' 'pkg-any-b') local pkgbase local arch='any' for pkgbase in ${pkgs[@]}; do releasePackage extra ${pkgbase} any done ../db-update ../db-remove pkg-any-a extra any ../cron-jobs/ftpdir-cleanup >/dev/null local pkg1='pkg-any-a-1-1-any.pkg.tar.xz' checkRemovedAnyPackage extra 'pkg-any-a' [ -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" ] && fail "${PKGPOOL}/${pkg1} found" [ -f "${FTP_BASE}/${repo}/os/${arch}/${pkg1}" ] && fail "${repo}/os/${arch}/${pkg1} found" local pkg2="pkg-any-b-1-1-${arch}.pkg.tar.xz" checkAnyPackage extra ${pkg2} } testCleanupSplitPackages() { local arches=('i686' 'x86_64') local pkgs=('pkg-split-a' 'pkg-split-b') local pkg local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage extra ${pkgbase} ${arch} done done ../db-update for arch in ${arches[@]}; do ../db-remove ${pkgs[0]} extra ${arch} done ../cron-jobs/ftpdir-cleanup >/dev/null for arch in ${arches[@]}; do for pkg in "${pkgdir}/${pkgs[0]}"/*-${arch}.pkg.tar.*; do checkRemovedPackage extra ${pkgs[0]} ${arch} [ -f "${FTP_BASE}/${PKGPOOL}/${pkg}" ] && fail "${PKGPOOL}/${pkg} found" [ -f "${FTP_BASE}/${repo}/os/${arch}/${pkg}" ] && fail "${repo}/os/${arch}/${pkg} found" done for pkg in "${pkgdir}/${pkgs[1]}"/*-${arch}.pkg.tar.*; do checkPackage extra $(basename ${pkg}) ${arch} done done } # # transition tests # testMovePackagesWithoutPool() { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-split-a' 'pkg-split-b') local pkgbase local arch local pkg local old for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage testing ${pkgbase} ${arch} done done ../db-update # transform two packages to old style layout for arch in ${arches[@]}; do for old in 0 2; do for pkg in "${pkgdir}/${pkgs[${old}]}"/*-${arch}.pkg.tar.*; do pkg=$(basename $pkg) mv -f "${FTP_BASE}/${PKGPOOL}/${pkg}" "${FTP_BASE}/testing/os/${arch}/${pkg}" done done done ../cron-jobs/ftpdir-cleanup >/dev/null ../db-move testing extra ${pkgs[@]} ../cron-jobs/ftpdir-cleanup >/dev/null for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do for pkg in "${pkgdir}/${pkgbase}"/*-${arch}.pkg.tar.*; do checkPackage extra $(basename ${pkg}) ${arch} done checkRemovedPackage testing ${pkgbase} ${arch} done done } testUpdateAnyPackageWithoutPool() { local pkgname='pkg-any-a' local pkg1='pkg-any-a-1-1-any.pkg.tar.xz' local pkg2='pkg-any-a-1-2-any.pkg.tar.xz' local arch releasePackage extra pkg-any-a any ../db-update # transform two packages to old style layout mv -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" "${FTP_BASE}/extra/os/any" for arch in i686 x86_64; do ln -sf "../any/${pkg1}" "${FTP_BASE}/extra/os/${arch}" done pushd "${TMP}/svn-packages-copy/${pkgname}/trunk/" >/dev/null sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD svn commit -q -m"update pkg to pkgrel=2" >/dev/null extra-i686-build >/dev/null 2>&1 mv "${pkg2}" "${pkgdir}/${pkgname}/" popd >/dev/null releasePackage extra ${pkgname} any ../db-update rm -f "${pkgdir}/${pkgname}/${pkg2}" ../cron-jobs/ftpdir-cleanup >/dev/null checkAnyPackage extra "${pkg2}" [ -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" ] && fail "${PKGPOOL}/${pkg1} found" for arch in any i686 x86_64; do [ -f "${FTP_BASE}/extra/os/${arch}/${pkg1}" ] && fail "extra/os/${arch}/${pkg1} found" done } testMoveAnyPackagesWithoutPool() { local pkgs=('pkg-any-a' 'pkg-any-b') local pkgbase local arch local pkg for pkgbase in ${pkgs[@]}; do releasePackage testing ${pkgbase} any done ../db-update # transform a package to old style layout for pkg in "${pkgdir}/${pkgs[0]}"/*-any.pkg.tar.*; do pkg=$(basename $pkg) mv -f "${FTP_BASE}/${PKGPOOL}/${pkg}" "${FTP_BASE}/testing/os/any/${pkg}" for arch in i686 x86_64; do ln -sf "../any/${pkg}" "${FTP_BASE}/testing/os/${arch}/${pkg}" done done ../cron-jobs/ftpdir-cleanup >/dev/null ../db-move testing extra ${pkgs[@]} ../cron-jobs/ftpdir-cleanup >/dev/null for pkgbase in ${pkgs[@]}; do for pkg in "${pkgdir}/${pkgbase}"/*-any.pkg.tar.*; do checkAnyPackage extra $(basename ${pkg}) done checkRemovedAnyPackage testing ${pkgbase} done for pkg in "${pkgdir}/${pkgs[0]}"/*-any.pkg.tar.*; do pkg=$(basename $pkg) for arch in any i686 x86_64; do [ -f "${FTP_BASE}/testing/os/${arch}/${pkg}" ] && fail "testing/os/${arch}/${pkg} found" done done } testUpdateSameAnyPackageToDifferentRepositoriesWithoutPool() { local pkg local arch releasePackage extra pkg-any-a any ../db-update # transform a package to old style layout for pkg in "${pkgdir}/pkg-any-a"/*-any.pkg.tar.*; do pkg=$(basename $pkg) mv -f "${FTP_BASE}/${PKGPOOL}/${pkg}" "${FTP_BASE}/extra/os/any/${pkg}" for arch in i686 x86_64; do ln -sf "../any/${pkg}" "${FTP_BASE}/extra/os/${arch}/${pkg}" done done releasePackage testing pkg-any-a any ../db-update >/dev/null 2>&1 && (fail 'Adding an existing package to another repository should fail'; return 1) for arch in i686 x86_64; do ( [ -r "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" ] \ && bsdtar -xf "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" -O | grep -q pkg-any-a) \ && fail "pkg-any-a should not be in testing/os/${arch}/testing${DBEXT%.tar.*}" done } # #sourceballs tests # testSourceballs() { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b') local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage extra ${pkgbase} ${arch} done done ../db-update ../cron-jobs/sourceballs for pkgbase in ${pkgs[@]}; do [ ! -r ${FTP_BASE}/${SRCPOOL}/${pkgbase}-*${SRCEXT} ] && fail "source package not found!" done } testAnySourceballs() { local pkgs=('pkg-any-a' 'pkg-any-b') local pkgbase for pkgbase in ${pkgs[@]}; do releasePackage extra ${pkgbase} any done ../db-update ../cron-jobs/sourceballs for pkgbase in ${pkgs[@]}; do [ ! -r ${FTP_BASE}/${SRCPOOL}/${pkgbase}-*${SRCEXT} ] && fail "source package not found!" done } testSplitSourceballs() { local arches=('i686' 'x86_64') local pkgs=('pkg-split-a' 'pkg-split-b') local pkg local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage extra ${pkgbase} ${arch} done done ../db-update ../cron-jobs/sourceballs for pkgbase in ${pkgs[@]}; do [ ! -r ${FTP_BASE}/${SRCPOOL}/${pkgbase}-*${SRCEXT} ] && fail "source package not found!" done } testSourceballsCleanup() { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b') local pkgbase local arch for pkgbase in ${pkgs[@]}; do for arch in ${arches[@]}; do releasePackage extra ${pkgbase} ${arch} done done ../db-update ../cron-jobs/sourceballs for arch in ${arches[@]}; do ../db-remove pkg-simple-a extra ${arch} done ../cron-jobs/ftpdir-cleanup >/dev/null ../cron-jobs/sourceballs [ -r ${FTP_BASE}/${SRCPOOL}/pkg-simple-a-*${SRCEXT} ] && fail "source package was not removed!" [ ! -r ${FTP_BASE}/${SRCPOOL}/pkg-simple-b-*${SRCEXT} ] && fail "source package not found!" } . "${curdir}/lib/shunit2"