mirror of
https://gitlab.alpinelinux.org/alpine/abuild.git
synced 2025-01-02 20:42:43 +00:00
6806a0d39b
Packages installing python3 site packages for python3 in version 3.x.y depend on python3~3.x. This automatically adds the required dependencies. Unit test cases have been added by reusing the `py3-foo-and-bar` test package. However, the path of that has been renamed to contain spaces to be extra sure the logic is safe in regrade to spaces in path names.
848 lines
18 KiB
Plaintext
Executable File
848 lines
18 KiB
Plaintext
Executable File
#!/usr/bin/env atf-sh
|
|
|
|
. $(atf_get_srcdir)/test_env.sh
|
|
init_tests \
|
|
abuild_help \
|
|
abuild_invalid_opt \
|
|
abuild_version \
|
|
abuild_simple_pkg_without_deps \
|
|
abuild_build_fail \
|
|
abuild_invalid_filename \
|
|
abuild_usr_lib64 \
|
|
abuild_dbg_subpackage \
|
|
abuild_SETFATTR_in_dbg \
|
|
abuild_reproducible \
|
|
abuild_checksum_generation \
|
|
abuild_checksum_duplicates \
|
|
abuild_subpkg_dep_leak \
|
|
abuild_py_providers_creation \
|
|
abuild_py_dependency_scan \
|
|
abuild_py_dependency_scan_conflict \
|
|
abuild_reject_init_with_improper_shebang \
|
|
abuild_valid_pkgnames \
|
|
abuild_invalid_pkgnames \
|
|
abuild_invalid_subpkgnames \
|
|
abuild_invalid_subpkg_version \
|
|
abuild_warn_pkgver_patch_version \
|
|
abuild_multiline_license \
|
|
abuild_git_ceiling \
|
|
abuild_package_size_zero \
|
|
abuild_package_size_nonzero \
|
|
abuild_amove \
|
|
abuild_doc \
|
|
abuild_dev \
|
|
abuild_devhelp_warn \
|
|
abuild_devhelp \
|
|
abuild_check_maintainer \
|
|
abuild_cleanoldpkg \
|
|
abuild_path_with_spaces
|
|
|
|
export ABUILD_SHAREDIR=$(atf_get_srcdir)/..
|
|
export ABUILD_CONF=/dev/null
|
|
export ABUILD_APK_INDEX_OPTS="--allow-untrusted"
|
|
export GIT_CONFIG_GLOBAL="$(atf_get_srcdir)/testdata/gitconfig"
|
|
export REPODEST="$PWD"/packages
|
|
|
|
testrepo=$(atf_get_srcdir)/testrepo
|
|
|
|
# copy keys
|
|
init_keys() {
|
|
cp -ra "$(atf_get_srcdir)"/testdata/.abuild "$PWD"
|
|
}
|
|
|
|
abuild_help_body() {
|
|
atf_check -s exit:0 \
|
|
-o match:"usage:" \
|
|
abuild -h
|
|
}
|
|
|
|
abuild_invalid_opt_body() {
|
|
atf_check -s exit:1 \
|
|
-e match:"usage:" \
|
|
abuild -@
|
|
}
|
|
|
|
abuild_version_body() {
|
|
atf_check -s exit:0 \
|
|
-o match:"abuild [0-9]+\.[0-9]+" \
|
|
abuild -V
|
|
}
|
|
|
|
abuild_simple_pkg_without_deps_body() {
|
|
init_keys
|
|
cp -r "$testrepo"/pkg1 .
|
|
cd pkg1
|
|
atf_check -s exit:0 \
|
|
-e not-match:"WARNING" \
|
|
-e not-match:"fatal" \
|
|
abuild
|
|
}
|
|
|
|
abuild_build_fail_body() {
|
|
init_keys
|
|
mkdir buildfail
|
|
cat >buildfail/APKBUILD <<-EOF
|
|
# Maintainer: Joe User <juser@example.com>
|
|
pkgname="buildfail"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc="Dummy test package that fails to build"
|
|
url="https://gitlab.alpinelinux.org/alpine/aports"
|
|
arch="noarch"
|
|
license="MIT"
|
|
subpackages="\$pkgname-dev \$pkgname-doc"
|
|
source=""
|
|
prepare() {
|
|
mkdir -p "\$builddir"
|
|
}
|
|
build() {
|
|
false
|
|
}
|
|
package() {
|
|
true
|
|
}
|
|
EOF
|
|
cd buildfail
|
|
atf_check -s exit:1 \
|
|
-e match:"ERROR: buildfail: build failed" \
|
|
abuild
|
|
}
|
|
|
|
abuild_invalid_filename_body() {
|
|
init_keys
|
|
mkdir invalid-filename
|
|
cd invalid-filename
|
|
cat >APKBUILD <<-EOF
|
|
# Maintainer: Joe User <juser@example.com>
|
|
pkgname="invalid-filename"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc="Dummy test package that fails to build"
|
|
url="https://gitlab.alpinelinux.org/alpine/aports"
|
|
arch="noarch"
|
|
license="MIT"
|
|
prepare() {
|
|
mkdir -p "\$builddir"
|
|
}
|
|
build() {
|
|
touch $'bad\nfile'
|
|
}
|
|
check() {
|
|
true
|
|
}
|
|
package() {
|
|
mkdir -p "\$pkgdir"
|
|
cp -r * "\$pkgdir"/
|
|
}
|
|
EOF
|
|
atf_check -s exit:1 \
|
|
-e match:"ERROR:.*: Found filenames with newline" \
|
|
abuild
|
|
}
|
|
|
|
abuild_usr_lib64_body() {
|
|
init_keys
|
|
mkdir lib64test
|
|
cd lib64test
|
|
cat >APKBUILD <<-EOF
|
|
# Maintainer: Joe User <juser@example.com>
|
|
pkgname="lib64test"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc="Dummy test package"
|
|
url="https://gitlab.alpinelinux.org/alpine/aports"
|
|
arch="noarch"
|
|
license="MIT"
|
|
source=""
|
|
prepare() {
|
|
mkdir -p "\$builddir"
|
|
}
|
|
build() {
|
|
mkdir -p usr/lib64
|
|
}
|
|
check() {
|
|
true
|
|
}
|
|
|
|
package() {
|
|
mkdir -p "\$pkgdir"
|
|
cp -r * "\$pkgdir"/
|
|
}
|
|
EOF
|
|
atf_check -s exit:1 \
|
|
-e match:"ERROR:.*: Packages must not put anything under /usr/lib64" \
|
|
abuild
|
|
|
|
options=lib64 atf_check -s exit:0 \
|
|
-e match:"Build complete" \
|
|
abuild
|
|
}
|
|
|
|
abuild_dbg_subpackage_body() {
|
|
init_keys
|
|
cp -ra "$testrepo" .
|
|
cd testrepo/dbgpkg
|
|
atf_check -s exit:0 \
|
|
-o match:"hello world" \
|
|
-e match:"Build complete" \
|
|
abuild
|
|
cd ../..
|
|
|
|
arch=$(abuild -A)
|
|
tar -zxf "$REPODEST"/testrepo/$arch/dbgpkg-1.0-r0.apk \
|
|
|| atf_fail "failed to extract dbgpkg-1.0-r0.apk"
|
|
if [ -e usr/lib/debug ]; then
|
|
atf_fail "usr/lib/debug should not exist"
|
|
fi
|
|
debuginfo=$(readelf -wk usr/bin/hello | grep '^ Separate debug info file: [^/]*\.debug$')
|
|
debuginfo_file=${debuginfo#" Separate debug info file: "}
|
|
atf_check -s exit:0 \
|
|
-e match:"nm: usr/bin/hello: no symbols" \
|
|
nm usr/bin/hello
|
|
|
|
if ! [ usr/bin/hello -ef usr/bin/hello-hard ]; then
|
|
atf_fail 'hello is not a hardlink of hello-hard'
|
|
fi
|
|
|
|
rm -r usr
|
|
tar -xf "$REPODEST"/testrepo/$arch/dbgpkg-dbg-1.0-r0.apk
|
|
if [ -e usr/bin ]; then
|
|
atf_fail "usr/bin should not exist"
|
|
fi
|
|
|
|
find usr
|
|
atf_check -s exit:0 \
|
|
-o match:"T main" \
|
|
nm usr/lib/debug/usr/bin/$debuginfo_file
|
|
|
|
if [ -e usr/lib/debug/usr/bin/hello-sym.debug ]; then
|
|
atf_fail "usr/lib/debug/usr/bin/hello-sym.debug should not exist"
|
|
fi
|
|
|
|
if [ -e usr/lib/debug/usr/bin/hello.debug ] && [ -e usr/lib/debug/usr/bin/hello-hard.debug ]; then
|
|
atf_fail "only one of hello.debug and hello-hard.debug should exist"
|
|
fi
|
|
}
|
|
|
|
abuild_SETFATTR_in_dbg_body() {
|
|
init_keys
|
|
cp -ra "$testrepo"/dbgpkg .
|
|
cd dbgpkg
|
|
SETFATTR=true atf_check -s exit:0 \
|
|
-o match:"hello world" \
|
|
-e match:"Build complete" \
|
|
abuild
|
|
}
|
|
|
|
abuild_reproducible_body() {
|
|
init_keys
|
|
cp -ra "$testrepo" .
|
|
cd testrepo/pkg1
|
|
|
|
# set timestamp of APKBUILD to 1 min older than current time
|
|
touch -d @$(( $(date -u +%s) - 60)) APKBUILD
|
|
|
|
arch=$(abuild -A)
|
|
pkgs=$(abuild listpkg)
|
|
|
|
abuild || atf_fail "first build failed"
|
|
checksums=$(cd "$REPODEST"/testrepo/$arch && md5sum $pkgs)
|
|
echo "$checksums"
|
|
|
|
rm -r "$REPODEST"/testrepo
|
|
abuild || atf_fail "rebuild failed"
|
|
checksums2=$(cd "$REPODEST"/testrepo/$arch && md5sum $pkgs)
|
|
echo "$checksums2"
|
|
|
|
if [ "$checksums" != "$checksums2" ]; then
|
|
atf_fail "checksums does not match"
|
|
fi
|
|
}
|
|
|
|
abuild_checksum_generation_body() {
|
|
mkdir foo
|
|
cat > foo/APKBUILD <<-EOF
|
|
pkgname="foo"
|
|
pkgver="1.0"
|
|
source="test.txt"
|
|
EOF
|
|
echo "foo" > foo/test.txt
|
|
cd foo
|
|
abuild checksum || atf_fail "checksum generation failed"
|
|
( . ./APKBUILD && echo "$sha512sums" | sed '/^$/d' > sums )
|
|
cat sums
|
|
sha512sum -c sums || atf_fail "checksum mismatch"
|
|
}
|
|
|
|
abuild_checksum_duplicates_body() {
|
|
mkdir -p foo/dir1 foo/dir2
|
|
cat > foo/APKBUILD <<-EOF
|
|
pkgname="foo"
|
|
pkgver="1.0"
|
|
source="dir1/testfile dir2/testfile"
|
|
EOF
|
|
echo "first" > foo/dir1/testfile
|
|
echo "second" > foo/dir2/testfile
|
|
cd foo
|
|
atf_check -s exit:1 \
|
|
-e match:"ERROR:.*duplicate found" \
|
|
abuild checksum
|
|
}
|
|
|
|
abuild_subpkg_dep_leak_body() {
|
|
mkdir -p testrepo/subpkg-dep-leak
|
|
cd testrepo/subpkg-dep-leak
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
|
|
pkgname="subpkg-dep-leak"
|
|
pkgver=1.0
|
|
pkgrel=0
|
|
pkgdesc="Dummy test package with subpackages and dependencies"
|
|
url="https://gitlab.alpinelinux.org/alpine/aports"
|
|
arch="noarch"
|
|
depends="tar scanelf"
|
|
license="MIT"
|
|
subpackages="\$pkgname-subpkg"
|
|
options="!check"
|
|
|
|
package() {
|
|
mkdir -p "\$pkgdir"
|
|
}
|
|
|
|
subpkg() {
|
|
depends="sed"
|
|
mkdir -p "\$subpkgdir"
|
|
}
|
|
EOF
|
|
abuild clean unpack prepare build rootpkg
|
|
|
|
grep 'depend = tar' pkg/.control.subpkg-dep-leak/.PKGINFO \
|
|
|| atf_fail "subpkg-dep-leak should depend on tar"
|
|
grep 'depend = scanelf' pkg/.control.subpkg-dep-leak/.PKGINFO \
|
|
|| atf_fail "subpkg-dep-leak should depend on scanelf"
|
|
! grep 'depend = sed' pkg/.control.subpkg-dep-leak/.PKGINFO \
|
|
|| atf_fail "subpkg-dep-leak should not depends on sed"
|
|
|
|
grep 'depend = sed' pkg/.control.subpkg-dep-leak-subpkg/.PKGINFO \
|
|
|| atf_fail "subpkg-dep-leak-subpkg should depend on sed"
|
|
|
|
! grep 'depend = tar' pkg/.control.subpkg-dep-leak-subpkg/.PKGINFO \
|
|
|| atf_fail "subpkg-dep-leak-subpkg should not depend on tar"
|
|
}
|
|
|
|
abuild_py_providers_creation_body() {
|
|
init_keys
|
|
cp -ra "$testrepo" .
|
|
cd testrepo/py3\ foo\ and\ bar
|
|
abuild rootpkg || atf_fail "abuild failed"
|
|
atf_check -s exit:0 \
|
|
-o match:"provides = py3.9:foo=1.0.0-r0" \
|
|
cat pkg/.control.py3-foo-and-bar/.PKGINFO
|
|
}
|
|
|
|
abuild_py_dependency_scan_body() {
|
|
init_keys
|
|
cp -ra "$testrepo" .
|
|
cd testrepo/py3\ foo\ and\ bar
|
|
abuild rootpkg || atf_fail "abuild failed"
|
|
atf_check -s exit:0 \
|
|
-o match:"depend = python3~3.9" \
|
|
cat pkg/.control.py3-foo-and-bar/.PKGINFO
|
|
}
|
|
|
|
abuild_py_dependency_scan_conflict_body() {
|
|
init_keys
|
|
cp -ra "$testrepo" .
|
|
cd testrepo/py3-conflicting-python-versions
|
|
atf_check -s exit:1 \
|
|
-e match:"ERROR.*package contains python3 modules for conflicting python3 versions" \
|
|
abuild rootpkg
|
|
}
|
|
|
|
abuild_reject_init_with_improper_shebang_body() {
|
|
mkdir invalid-initd
|
|
cd invalid-initd
|
|
cat >APKBUILD<<-EOF
|
|
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
|
|
pkgname="invalid-initd"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc="Dummy test package"
|
|
url="https://gitlab.alpinelinux.org/alpine/aports"
|
|
arch="noarch"
|
|
license="MIT"
|
|
subpackages=""
|
|
source="test.initd"
|
|
prepare() {
|
|
mkdir -p "\$builddir"
|
|
}
|
|
EOF
|
|
cat >test.initd<<-EOF
|
|
#!/bin/sh
|
|
command="test"
|
|
EOF
|
|
abuild checksum
|
|
|
|
atf_check -s exit:1 \
|
|
-o match:"OK" \
|
|
-e match:"ERROR.*is not an openrc" \
|
|
abuild unpack
|
|
}
|
|
|
|
abuild_valid_pkgnames_body() {
|
|
cp -ra "$testrepo"/test-pkgname .
|
|
cd test-pkgname
|
|
atf_check -s exit:0 \
|
|
-e match:"Checking sanity" \
|
|
abuild sanitycheck
|
|
TESTNAME=foo atf_check -s exit:0 \
|
|
-e match:"Checking sanity" \
|
|
abuild sanitycheck
|
|
TESTSUBNAME=foo atf_check -s exit:0 \
|
|
-e match:"Checking sanity" \
|
|
abuild sanitycheck
|
|
}
|
|
|
|
abuild_invalid_pkgnames_body() {
|
|
init_keys
|
|
cp -ra "$testrepo"/test-pkgname .
|
|
cd test-pkgname
|
|
TESTNAME="" atf_check -s exit:1 \
|
|
-e match:"Checking sanity" \
|
|
abuild sanitycheck
|
|
TESTNAME="-foo" atf_check -s exit:1 \
|
|
-e match:"Checking sanity" \
|
|
abuild sanitycheck
|
|
TESTNAME="foo with spaces" atf_check -s exit:1 \
|
|
-e match:"Checking sanity" \
|
|
abuild sanitycheck
|
|
}
|
|
|
|
abuild_invalid_subpkgnames_body() {
|
|
init_keys
|
|
cp -ra "$testrepo"/test-pkgname .
|
|
cd test-pkgname
|
|
TESTSUBNAME="" atf_check -s exit:1 \
|
|
-e match:"Checking sanity" \
|
|
abuild sanitycheck
|
|
TESTSUBNAME="-foo" atf_check -s exit:1 \
|
|
-e match:"Checking sanity" \
|
|
abuild sanitycheck
|
|
}
|
|
|
|
abuild_invalid_subpkg_version_body() {
|
|
init_keys
|
|
cp -ra "$testrepo"/test-pkgname .
|
|
cd test-pkgname
|
|
TESTDEPVER="1.0-0" atf_check -s exit:1 \
|
|
-e match:"Invalid version" \
|
|
abuild all
|
|
}
|
|
|
|
abuild_warn_pkgver_patch_version_body() {
|
|
cp -ra "$testrepo"/test-pkgname .
|
|
cd test-pkgname
|
|
TESTPKGVER=1.0_p1 atf_check -s exit:0 \
|
|
-e not-match:'WARNING' \
|
|
abuild sanitycheck
|
|
TESTPKGVER=1.0p1 atf_check -s exit:0 \
|
|
-e match:'WARNING.*1.0_p1' \
|
|
abuild sanitycheck
|
|
}
|
|
|
|
abuild_multiline_license_body() {
|
|
cp -ra "$testrepo"/test-licenses .
|
|
cd test-licenses
|
|
abuild rootpkg
|
|
atf_check -o match:'^license = MIT AND GPL-3.0-only OR GPL-3.0-or-later AND BSD-Clause-4$' \
|
|
cat pkg/.control.test-licenses/.PKGINFO
|
|
}
|
|
|
|
abuild_git_ceiling_body() {
|
|
init_keys
|
|
git init
|
|
mkdir git-pkg
|
|
cd git-pkg
|
|
cat >APKBUILD<<-EOF
|
|
# Maintainer: Joe User <juser@example.com>
|
|
pkgname="git-pkg"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc="Dummy test package"
|
|
url="https://gitlab.alpinelinux.org/alpine/aports"
|
|
arch="noarch"
|
|
license="MIT"
|
|
prepare() {
|
|
mkdir -p "\$builddir"
|
|
}
|
|
build() {
|
|
git status
|
|
}
|
|
package() {
|
|
mkdir -p "\$pkgdir"
|
|
}
|
|
EOF
|
|
atf_check -s exit:1 \
|
|
-e match:"not a git repository" \
|
|
-e match:"ERROR: git-pkg: build failed" \
|
|
abuild
|
|
}
|
|
|
|
|
|
create_fake_du() {
|
|
mkdir -p bin
|
|
cat > bin/du <<-EOF
|
|
#!/bin/sh
|
|
echo 0
|
|
EOF
|
|
chmod +x bin/du
|
|
PATH="$PWD/bin:$PATH"
|
|
}
|
|
|
|
abuild_package_size_zero_body() {
|
|
init_keys
|
|
mkdir -p test-size
|
|
create_fake_du
|
|
|
|
cd test-size
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Test User 123 <123@example.com>
|
|
|
|
# test package
|
|
pkgname="test-size"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc='Dummy test package that has no files'
|
|
url='https://gitlab.alpinelinux.org/alpine/aports'
|
|
arch='noarch'
|
|
license='MIT'
|
|
install="\$pkgname.post-install"
|
|
|
|
package() {
|
|
mkdir -p "\$pkgdir"
|
|
}
|
|
EOF
|
|
cat > test-size.post-install <<-EOF
|
|
#!/bin/sh
|
|
echo 1
|
|
EOF
|
|
abuild rootpkg
|
|
# should be set to 1
|
|
atf_check -o match:'^size = 1$' \
|
|
cat pkg/.control.test-size/.PKGINFO
|
|
}
|
|
|
|
abuild_package_size_nonzero_body() {
|
|
init_keys
|
|
mkdir -p test-size
|
|
|
|
cd test-size
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Test User 123 <123@example.com>
|
|
|
|
# test package
|
|
pkgname="test-size"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc='Dummy test package that has files'
|
|
url='https://gitlab.alpinelinux.org/alpine/aports'
|
|
arch='noarch'
|
|
license='MIT'
|
|
|
|
package() {
|
|
mkdir -p "\$pkgdir"
|
|
printf "%s" "very important data" > "\$pkgdir"/testfile
|
|
}
|
|
EOF
|
|
abuild rootpkg
|
|
# should not be set to 1
|
|
atf_check -o not-match:'^size = 1$' \
|
|
cat pkg/.control.test-size/.PKGINFO
|
|
}
|
|
|
|
abuild_amove_body() {
|
|
init_keys
|
|
mkdir -p test-amove
|
|
|
|
cd test-amove
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Test User 123 <123@example.com>
|
|
|
|
# test package
|
|
pkgname="test-amove"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc='Dummy test package - amove'
|
|
url='https://gitlab.alpinelinux.org/alpine/aports'
|
|
arch='noarch'
|
|
license='MIT'
|
|
subpackages="\$pkgname-file:_file
|
|
\$pkgname-etc:_etc
|
|
\$pkgname-bin:_bin
|
|
\$pkgname-sbin:_sbin
|
|
\$pkgname-var:_var
|
|
\$pkgname-usr:_usr"
|
|
|
|
package() {
|
|
mkdir -p "\$pkgdir"/etc \
|
|
"\$pkgdir"/bin \
|
|
"\$pkgdir"/sbin \
|
|
"\$pkgdir"/var/lib/\$pkgname \
|
|
"\$pkgdir"/usr/share
|
|
touch "\$pkgdir"/etc/file \
|
|
"\$pkgdir"/etc/\$pkgname.conf \
|
|
"\$pkgdir"/bin/hello \
|
|
"\$pkgdir"/sbin/shello \
|
|
"\$pkgdir"/var/lib/\$pkgname/testfile \
|
|
"\$pkgdir"/usr/share/a \
|
|
"\$pkgdir"/usr/share/b
|
|
}
|
|
_file() {
|
|
amove etc/file
|
|
}
|
|
_etc() {
|
|
# leading and trailing /
|
|
amove /etc/
|
|
}
|
|
_bin() {
|
|
# trailing /
|
|
amove bin/
|
|
}
|
|
_sbin() {
|
|
# no /
|
|
amove sbin/shello
|
|
}
|
|
_var() {
|
|
# leading /
|
|
amove /var/lib
|
|
}
|
|
_usr() {
|
|
# glob *
|
|
amove usr/share/*
|
|
}
|
|
|
|
EOF
|
|
abuild rootpkg || atf_fail "abuild rootpkg failed"
|
|
for i in \
|
|
test-amove-file/etc/file \
|
|
test-amove-etc/etc/test-amove.conf \
|
|
test-amove-bin/bin/hello \
|
|
test-amove-sbin/sbin/shello \
|
|
test-amove-var/var/lib/test-amove/testfile \
|
|
test-amove-usr/usr/share/a \
|
|
test-amove-usr/usr/share/b \
|
|
; do \
|
|
test -f pkg/$i || atf_fail "$i failed"
|
|
done
|
|
}
|
|
|
|
abuild_doc_body() {
|
|
init_keys
|
|
mkdir -p foo
|
|
|
|
cd foo
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Test User 123 <123@example.com>
|
|
# test package
|
|
pkgname="foo"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc='Dummy test package - doc'
|
|
url='https://gitlab.alpinelinux.org/alpine/aports'
|
|
arch='noarch'
|
|
license='MIT'
|
|
subpackages="\$pkgname-doc"
|
|
|
|
build() {
|
|
touch foo foo.1 readme
|
|
}
|
|
|
|
package() {
|
|
install -Dt "\$pkgdir"/usr/bin foo
|
|
install -Dt "\$pkgdir"/usr/share/man/man1 foo.1
|
|
install -Dt "\$pkgdir"/usr/share/doc/foo readme
|
|
}
|
|
EOF
|
|
abuild build rootpkg || atf_fail "abuild rootpkg failed"
|
|
find pkg
|
|
for i in \
|
|
foo/usr/bin/foo \
|
|
foo-doc/usr/share/man/man1/foo.1.gz \
|
|
foo-doc/usr/share/doc/foo/readme \
|
|
; do \
|
|
test -f pkg/$i || atf_fail "$i failed"
|
|
done
|
|
}
|
|
|
|
abuild_dev_body() {
|
|
init_keys
|
|
mkdir -p foo
|
|
|
|
cd foo
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Test User 123 <123@example.com>
|
|
# test package
|
|
pkgname="foo"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc='Dummy test package - dev'
|
|
url='https://gitlab.alpinelinux.org/alpine/aports'
|
|
arch='noarch'
|
|
license='MIT'
|
|
subpackages="\$pkgname-dev"
|
|
|
|
build() {
|
|
touch foo foo.h libfoo.so.1
|
|
}
|
|
|
|
package() {
|
|
install -Dt "\$pkgdir"/usr/bin foo
|
|
install -Dt "\$pkgdir"/usr/include foo.h
|
|
install -Dt "\$pkgdir"/usr/lib libfoo.so.1
|
|
ln -s libfoo.so.1 "\$pkgdir"/usr/lib/libfoo.so
|
|
}
|
|
EOF
|
|
abuild build rootpkg || atf_fail "abuild rootpkg failed"
|
|
find pkg
|
|
for i in \
|
|
foo/usr/bin/foo \
|
|
foo-dev/usr/include/foo.h \
|
|
; do \
|
|
test -f pkg/$i || atf_fail "$i failed"
|
|
done
|
|
test -L pkg/foo-dev/usr/lib/libfoo.so || atf_fail "libfoo.so failed"
|
|
}
|
|
|
|
abuild_devhelp_warn_body() {
|
|
init_keys
|
|
mkdir -p foo
|
|
|
|
cd foo
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Test User 123 <123@example.com>
|
|
pkgname="foo"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc='Dummy test package that has devhelp'
|
|
url='https://gitlab.alpinelinux.org/alpine/aports'
|
|
arch='noarch'
|
|
license='MIT'
|
|
|
|
package() {
|
|
mkdir -p "\$pkgdir"/usr/share/devhelp/book
|
|
}
|
|
EOF
|
|
atf_check -e match:"WARNING:" \
|
|
abuild rootpkg
|
|
}
|
|
|
|
abuild_devhelp_body() {
|
|
init_keys
|
|
mkdir -p foo
|
|
|
|
cd foo
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Test User 123 <123@example.com>
|
|
pkgname="foo"
|
|
pkgver="1.0"
|
|
pkgrel=0
|
|
pkgdesc='Dummy test package that has devhelp'
|
|
url='https://gitlab.alpinelinux.org/alpine/aports'
|
|
arch='noarch'
|
|
license='MIT'
|
|
subpackages="\$pkgname-devhelp"
|
|
|
|
package() {
|
|
mkdir -p "\$pkgdir"/usr/share/devhelp/book
|
|
}
|
|
EOF
|
|
atf_check -e not-match:"WARNING:" \
|
|
-o match:'->' \
|
|
abuild rootpkg
|
|
}
|
|
|
|
abuild_check_maintainer_body() {
|
|
mkdir -p foo && cd foo
|
|
for m in "Test User 123 <123example.com>" \
|
|
"foo" \
|
|
"user@example.com" \
|
|
" Leading Space <n@example.com>" \
|
|
"Trailing Space <n@example.com> " \
|
|
"Foo<u@example.com>" \
|
|
'"Quotes <u@example.com>"'; do
|
|
printf "# Maintainer: %s\n%s\n" "$m" "pkgname=foo" > APKBUILD
|
|
atf_check -s not-exit:0 \
|
|
-e match:"ERROR:" \
|
|
abuild check_maintainer
|
|
done
|
|
|
|
for m in "Test User <123@example.com>" "Foo O'Brian <n@example.com>" "Łukasz Something <s@example.com>"; do
|
|
printf "# Maintainer: %s\n%s\n" "$m" "pkgname=foo" > APKBUILD
|
|
atf_check abuild check_maintainer
|
|
done
|
|
}
|
|
|
|
abuild_cleanoldpkg_body() {
|
|
init_keys
|
|
mkdir -p main/foo
|
|
cd main/foo
|
|
for arch in aarch64 x86_64; do
|
|
for v in 0.9 1.0 1.1; do
|
|
cat > APKBUILD <<-EOF
|
|
# Maintainer: Test User 123 <123@example.com>
|
|
# test package
|
|
pkgname="foo"
|
|
pkgver="$v"
|
|
pkgrel=0
|
|
pkgdesc='Dummy test package - dev'
|
|
url='https://gitlab.alpinelinux.org/alpine/aports'
|
|
arch='noarch'
|
|
license='MIT'
|
|
options='!check'
|
|
package() {
|
|
mkdir -p "\$pkgdir"
|
|
}
|
|
EOF
|
|
CARCH=$arch atf_check -e not-empty abuild
|
|
done
|
|
done
|
|
|
|
CARCH=aarch64 atf_check -e match:"Cleaning" abuild cleanoldpkg
|
|
|
|
find "$REPODEST"
|
|
|
|
# should keep the current APKBUILD version
|
|
for arch in aarch64 x86_64; do
|
|
f="$REPODEST"/main/$arch/foo-1.1-r0.apk
|
|
if ! test -e "$f"; then
|
|
atf_fail "$f was deleted"
|
|
fi
|
|
done
|
|
|
|
# should remove old packages of aarch64
|
|
for i in 0.9 1.0; do
|
|
f="$REPODEST"/main/aarch64/foo-$i-r0.apk
|
|
if test -e "$f"; then
|
|
atf_fail "$f was not deleted"
|
|
fi
|
|
done
|
|
|
|
# should not delete other arches than aarch64
|
|
for i in 0.9 1.0; do
|
|
f="$REPODEST"/main/x86_64/foo-$i-r0.apk
|
|
if ! test -e "$f"; then
|
|
atf_fail "$f was deleted"
|
|
fi
|
|
done
|
|
}
|
|
|
|
abuild_path_with_spaces_body() {
|
|
init_keys
|
|
cp -ra "$testrepo" .
|
|
cd testrepo/pkg\ path\ with\ spaces
|
|
atf_check -s exit:0 \
|
|
-o match:"hello world" \
|
|
-e match:"Build complete" \
|
|
abuild
|
|
}
|