#!/usr/bin/env atf-sh
. $(atf_get_srcdir)/test_environment.sh
tests_init \
empty_conf \
duplicate_pkgs_notallowed \
inline_repo \
repo_ssh_args \
nameserver \
expansion \
validate_shlib_provide_paths
# duplicate_pkgs_allowed \
duplicate_pkgs_allowed_body() {
cat << EOF > pkg.conf
duplicatedefault: 2
EOF
for n in 1 2; do
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg test${n} test ${n}
echo 'allowduplicate: true' >> test${n}.ucl
atf_check \
-e empty \
-o match:"Installing test-${n}..." \
-s exit:0 \
pkg register -M test${n}.ucl
done
atf_check \
-e empty \
-o match:"test-1 a test" \
-o match:"test-2 a test" \
-s exit:0 \
pkg info
}
duplicate_pkgs_notallowed_body() {
for n in 1 2; do
atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg test${n} test ${n}
done
atf_check \
-e empty \
-o match:"Installing test-1..." \
-s exit:0 \
pkg register -M test1.ucl
atf_check \
-e empty \
-s exit:1 \
pkg register -M test1.ucl
atf_check \
-e empty \
-o match:"test-1 a test" \
-s exit:0 \
pkg info
}
empty_conf_body() {
touch pkg.conf
cat << EOF > test.ucl
name: test
origin: test
version: 1
maintainer: test
categories: [test]
comment: a test
www: http://test
prefix: /
desc: <<EOD
Yet another test
EOD
EOF
atf_check \
-e empty \
-o ignore \
-s exit:0 \
pkg register -M test.ucl
atf_check \
-o ignore \
-e empty \
-s exit:0 \
pkg -C pkg.conf info test
}
inline_repo_body() {
cat > pkgconfiguration << EOF
repositories: {
pkg1: { url = file:///tmp },
pkg2: { url = file:///tmp2 },
}
EOF
atf_check -o match:'^ url : "file:///tmp",$' \
-o match:'^ url : "file:///tmp2",$' \
pkg -o REPOS_DIR=/dev/null -C pkgconfiguration -vv
}
repo_ssh_args_body() {
# Per-repo ssh_args (issue #725)
mkdir -p reposconf
cat > reposconf/test.conf << EOF
myrepo: {
url: "ssh://myhost/repo",
ssh_args: "-i /path/to/key -o ConnectTimeout=10",
}
EOF
# ssh_args should appear in -vv output
atf_check \
-o match:'ssh_args.*-i /path/to/key -o ConnectTimeout=10' \
-s exit:0 \
pkg -o REPOS_DIR="${TMPDIR}/reposconf" -vv
# Without ssh_args, it should not appear
cat > reposconf/test.conf << EOF
plain: {
url: "ssh://otherhost/repo",
}
EOF
atf_check \
-o not-match:'ssh_args' \
-s exit:0 \
pkg -o REPOS_DIR="${TMPDIR}/reposconf" -vv
# Two repos: one with ssh_args, one without
cat > reposconf/test.conf << EOF
repo_with_args: {
url: "ssh://host1/repo",
ssh_args: "-i /special/key",
}
repo_without_args: {
url: "ssh://host2/repo",
}
EOF
atf_check \
-o match:'ssh_args.*-i /special/key' \
-o match:'repo_with_args' \
-o match:'repo_without_args' \
-s exit:0 \
pkg -o REPOS_DIR="${TMPDIR}/reposconf" -vv
}
nameserver_body()
{
atf_skip_on Darwin Not possible to inject a nameserver on OSX
atf_skip_on Linux Not possible to inject a nameserver on OSX
atf_check \
-o inline:"\n" \
pkg -C /dev/null config nameserver
atf_check \
-o inline:"192.168.1.1\n" \
pkg -o NAMESERVER="192.168.1.1" -C /dev/null config nameserver
atf_check \
-o inline:"plop\n" \
-e inline:"${PROGNAME}: Unable to set nameserver, ignoring\n" \
pkg -o NAMESERVER="plop" -C /dev/null config nameserver
}
expansion_body() {
atf_skip_on Darwin "N/A"
atf_skip_on Linux "N/A"
OSNAME=$(uname)
MAJOR_VERSION=$(freebsd-version -u | cut -d . -f 1)
MINOR_VERSION=$(freebsd-version -u | cut -d . -f 2 | cut -d - -f 1)
ARCH=$(uname -p)
atf_check \
-o inline:"${OSNAME}:${MAJOR_VERSION}:${ARCH}\n" \
pkg config abi
echo "DOT_FILE=\${OSNAME}" > pkg.conf
atf_check -o inline:"${OSNAME}\n" pkg -C ${TMPDIR}/pkg.conf config dot_file
echo "DOT_FILE=\${VERSION_MAJOR}" > pkg.conf
atf_check -o inline:"${MAJOR_VERSION}\n" pkg -C ${TMPDIR}/pkg.conf config dot_file
echo "DOT_FILE=\${VERSION_MINOR}" > pkg.conf
atf_check -o inline:"${MINOR_VERSION}\n" pkg -C ${TMPDIR}/pkg.conf config dot_file
echo "DOT_FILE=\${ARCH}" > pkg.conf
atf_check -o inline:"${ARCH}\n" pkg -C ${TMPDIR}/pkg.conf config dot_file
}
validate_shlib_provide_paths_body() {
for option in \
SHLIB_PROVIDE_PATHS_NATIVE \
SHLIB_PROVIDE_PATHS_COMPAT_32 \
SHLIB_PROVIDE_PATHS_COMPAT_LINUX \
SHLIB_PROVIDE_PATHS_COMPAT_LINUX_32
do
atf_check -o inline:"/bar/foo\n" -s exit:0 pkg -o $option=/bar/foo config $option
ERROR="pkg: Invalid value for config option ${option}, 'foo' is not an absolute path.
pkg: Cannot parse configuration file!
"
atf_check -e inline:"${ERROR}" -s exit:1 pkg -o $option=foo config $option
atf_check -e inline:"${ERROR}" -s exit:1 pkg -o $option=/bar/foo,foo config $option
done
}