Alternatives framework for xbps (2/2).

See xbps-alternatives(1) for more information.

Thanks to all who helped to design this and for fixing grammar in
the manual page.
This commit is contained in:
Juan RP
2015-10-30 12:24:46 +01:00
parent aafc85d494
commit cb857dfc27
18 changed files with 749 additions and 332 deletions

View File

@@ -3,6 +3,7 @@ syntax("kyuafile", 1)
test_suite("xbps")
include('libxbps/Kyuafile')
include('xbps-alternatives/Kyuafile')
include('xbps-checkvers/Kyuafile')
include('xbps-create/Kyuafile')
include('xbps-install/Kyuafile')

View File

@@ -1,5 +1,5 @@
-include ../../config.mk
SUBDIRS = common libxbps xbps-checkvers xbps-create xbps-install xbps-query xbps-rindex xbps-uhelper
SUBDIRS = common libxbps xbps-alternatives xbps-checkvers xbps-create xbps-install xbps-query xbps-rindex xbps-uhelper
include ../../mk/subdir.mk

View File

@@ -0,0 +1,4 @@
syntax("kyuafile", 1)
test_suite("xbps-alternatives")
atf_test_program{name="main"}

View File

@@ -0,0 +1,8 @@
TOPDIR = ../../..
-include $(TOPDIR)/config.mk
TESTSHELL = main
TESTSSUBDIR = xbps/xbps-alternatives
EXTRA_FILES = Kyuafile
include $(TOPDIR)/mk/test.mk

View File

@@ -0,0 +1,270 @@
#! /usr/bin/env atf-sh
atf_test_case register_one
register_one_head() {
atf_set "descr" "xbps-alternatives: register one pkg wth an alternatives group"
}
register_one_body() {
mkdir -p repo pkg_A/usr/bin
touch pkg_A/usr/bin/fileA
cd repo
xbps-create -A noarch -n A-1.1_1 -s "A pkg" --alternatives "file:/usr/bin/file:/usr/bin/fileA" ../pkg_A
atf_check_equal $? 0
xbps-rindex -d -a $PWD/*.xbps
atf_check_equal $? 0
cd ..
xbps-install -r root --repository=repo -ydv A
atf_check_equal $? 0
rv=1
if [ -e root/usr/bin/fileA ]; then
lnk=$(readlink root/usr/bin/file)
if [ "$lnk" = "/usr/bin/fileA" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
}
atf_test_case register_multi
register_multi_head() {
atf_set "descr" "xbps-alternatives: register multiple pkgs with an alternatives group"
}
register_multi_body() {
mkdir -p repo pkg_A/usr/bin pkg_B/usr/bin
touch pkg_A/usr/bin/fileA pkg_B/usr/bin/fileB
cd repo
xbps-create -A noarch -n A-1.1_1 -s "A pkg" --alternatives "file:/usr/bin/file:/usr/bin/fileA" ../pkg_A
atf_check_equal $? 0
xbps-create -A noarch -n B-1.1_1 -s "B pkg" --alternatives "file:/usr/bin/file:/usr/bin/fileB" ../pkg_B
atf_check_equal $? 0
xbps-rindex -d -a $PWD/*.xbps
atf_check_equal $? 0
cd ..
xbps-install -r root --repository=repo -ydv A
atf_check_equal $? 0
rv=1
if [ -e root/usr/bin/fileA ]; then
lnk=$(readlink root/usr/bin/file)
if [ "$lnk" = "/usr/bin/fileA" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
xbps-install -r root --repository=repo -ydv B
atf_check_equal $? 0
rv=1
if [ -e root/usr/bin/fileA -a -e root/usr/bin/fileB ]; then
lnk=$(readlink root/usr/bin/file)
if [ "$lnk" = "/usr/bin/fileA" ]; then
rv=0
fi
echo "B lnk: $lnk"
fi
atf_check_equal $rv 0
}
atf_test_case unregister_one
unregister_one_head() {
atf_set "descr" "xbps-alternatives: unregister one pkg with an alternatives group"
}
unregister_one_body() {
mkdir -p repo pkg_A/usr/bin
touch pkg_A/usr/bin/fileA
cd repo
xbps-create -A noarch -n A-1.1_1 -s "A pkg" --alternatives "file:/usr/bin/file:/usr/bin/fileA" ../pkg_A
atf_check_equal $? 0
xbps-rindex -d -a $PWD/*.xbps
atf_check_equal $? 0
cd ..
xbps-install -r root --repository=repo -ydv A
atf_check_equal $? 0
xbps-remove -r root -yvd A
rv=1
if [ ! -L root/usr/bin/file -a ! -e root/usr/bin/fileA ]; then
rv=0
fi
atf_check_equal $rv 0
}
atf_test_case unregister_multi
unregister_multi_head() {
atf_set "descr" "xbps-alternatives: unregister multiple pkgs with an alternatives group"
}
unregister_multi_body() {
mkdir -p repo pkg_A/usr/bin pkg_B/usr/bin
touch pkg_A/usr/bin/fileA pkg_B/usr/bin/fileB
cd repo
xbps-create -A noarch -n A-1.1_1 -s "A pkg" --alternatives "file:/usr/bin/file:/usr/bin/fileA" ../pkg_A
atf_check_equal $? 0
xbps-create -A noarch -n B-1.1_1 -s "B pkg" --alternatives "file:/usr/bin/file:/usr/bin/fileB" ../pkg_B
atf_check_equal $? 0
xbps-rindex -d -a $PWD/*.xbps
atf_check_equal $? 0
cd ..
xbps-install -r root --repository=repo -ydv A
atf_check_equal $? 0
if [ -e root/usr/bin/fileA ]; then
lnk=$(readlink root/usr/bin/file)
if [ "$lnk" = "/usr/bin/fileA" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
xbps-remove -r root -yvd A
rv=1
if [ ! -L root/usr/bin/file -a ! -e root/usr/bin/fileA ]; then
rv=0
fi
atf_check_equal $rv 0
xbps-install -r root --repository=repo -ydv B
atf_check_equal $? 0
if [ -e root/usr/bin/fileB ]; then
lnk=$(readlink root/usr/bin/file)
if [ "$lnk" = "/usr/bin/fileB" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
xbps-remove -r root -yvd B
rv=1
if [ ! -L root/usr/bin/file -a ! -e root/usr/bin/fileB ]; then
rv=0
fi
atf_check_equal $rv 0
}
atf_test_case set_pkg
set_pkg_head() {
atf_set "descr" "xbps-alternatives: set all alternative groups from pkg"
}
set_pkg_body() {
mkdir -p repo pkg_A/usr/bin pkg_B/usr/bin
touch pkg_A/usr/bin/A1 pkg_A/usr/bin/A2 pkg_B/usr/bin/B1 pkg_B/usr/bin/B2
cd repo
xbps-create -A noarch -n A-1.1_1 -s "A pkg" --alternatives "1:/usr/bin/1:/usr/bin/A1 2:/usr/bin/2:/usr/bin/A2" ../pkg_A
atf_check_equal $? 0
xbps-create -A noarch -n B-1.1_1 -s "B pkg" --alternatives "1:/usr/bin/1:/usr/bin/B1 2:/usr/bin/2:/usr/bin/B2" ../pkg_B
atf_check_equal $? 0
xbps-rindex -d -a $PWD/*.xbps
atf_check_equal $? 0
cd ..
xbps-install -r root --repository=repo -ydv A B
atf_check_equal $? 0
xbps-alternatives -r root -s B
atf_check_equal $? 0
rv=1
if [ -e root/usr/bin/B1 ]; then
lnk=$(readlink root/usr/bin/1)
if [ "$lnk" = "/usr/bin/B1" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
rv=1
if [ -e root/usr/bin/B2 ]; then
lnk=$(readlink root/usr/bin/2)
if [ "$lnk" = "/usr/bin/B2" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
xbps-alternatives -r root -s A
atf_check_equal $? 0
rv=1
if [ -e root/usr/bin/A1 ]; then
lnk=$(readlink root/usr/bin/1)
if [ "$lnk" = "/usr/bin/A1" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
rv=1
if [ -e root/usr/bin/A2 ]; then
lnk=$(readlink root/usr/bin/2)
if [ "$lnk" = "/usr/bin/A2" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
}
atf_test_case set_pkg_group
set_pkg_group_head() {
atf_set "descr" "xbps-alternatives: set one alternative group from pkg"
}
set_pkg_group_body() {
mkdir -p repo pkg_A/usr/bin pkg_B/usr/bin
touch pkg_A/usr/bin/A1 pkg_A/usr/bin/A2 pkg_B/usr/bin/B1 pkg_B/usr/bin/B2
cd repo
xbps-create -A noarch -n A-1.1_1 -s "A pkg" --alternatives "1:/usr/bin/1:/usr/bin/A1 2:/usr/bin/2:/usr/bin/A2" ../pkg_A
atf_check_equal $? 0
xbps-create -A noarch -n B-1.1_1 -s "B pkg" --alternatives "1:/usr/bin/1:/usr/bin/B1 2:/usr/bin/2:/usr/bin/B2" ../pkg_B
atf_check_equal $? 0
xbps-rindex -d -a $PWD/*.xbps
atf_check_equal $? 0
cd ..
xbps-install -r root --repository=repo -ydv A B
atf_check_equal $? 0
xbps-alternatives -r root -s B -g 2
atf_check_equal $? 0
rv=1
if [ -e root/usr/bin/B1 ]; then
lnk=$(readlink root/usr/bin/1)
if [ "$lnk" = "/usr/bin/A1" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
rv=1
if [ -e root/usr/bin/B2 ]; then
lnk=$(readlink root/usr/bin/2)
if [ "$lnk" = "/usr/bin/B2" ]; then
rv=0
fi
echo "A lnk: $lnk"
fi
atf_check_equal $rv 0
}
atf_init_test_cases() {
atf_add_test_case register_one
atf_add_test_case register_multi
atf_add_test_case unregister_one
atf_add_test_case unregister_multi
atf_add_test_case set_pkg
atf_add_test_case set_pkg_group
}