Parcourir la source

autorun permission tests for all apt-get update calls

Adds some infrastructure to run tests automatically for certain
commands. The first command being 'apt-get update' (and 'apt update')
which check for correct permission and owner of the files in lists/.

Git-Dch: Ignore
David Kalnischkies il y a 11 ans
Parent
commit
ab25bf1f08

+ 39 - 3
test/integration/framework

@@ -1081,12 +1081,13 @@ testfileequal() {
 testempty() {
 testempty() {
 	msgtest "Test for no output of" "$*"
 	msgtest "Test for no output of" "$*"
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testempty.comparefile"
 	local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testempty.comparefile"
-	if $* >$COMPAREFILE 2>&1 && test ! -s $COMPAREFILE; then
+	if "$@" >$COMPAREFILE 2>&1 && test ! -s $COMPAREFILE; then
 		msgpass
 		msgpass
 	else
 	else
 		cat $COMPAREFILE
 		cat $COMPAREFILE
 		msgfail
 		msgfail
 	fi
 	fi
+	aptautotest 'testempty' "$@"
 }
 }
 
 
 testequal() {
 testequal() {
@@ -1103,7 +1104,8 @@ testequal() {
 	if [ -n "$MSG" ]; then
 	if [ -n "$MSG" ]; then
 		msgtest "$MSG" "$*"
 		msgtest "$MSG" "$*"
 	fi
 	fi
-	$* 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail
+	"$@" 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail
+	aptautotest 'testequal' "$@"
 }
 }
 
 
 testequalor2() {
 testequalor2() {
@@ -1114,7 +1116,7 @@ testequalor2() {
 	echo "$2" > $COMPAREFILE2
 	echo "$2" > $COMPAREFILE2
 	shift 2
 	shift 2
 	msgtest "Test for equality OR of" "$*"
 	msgtest "Test for equality OR of" "$*"
-	$* >$COMPAREAGAINST 2>&1 || true
+	"$@" >$COMPAREAGAINST 2>&1 || true
 	if checkdiff $COMPAREFILE1 $COMPAREAGAINST >/dev/null 2>&1 || \
 	if checkdiff $COMPAREFILE1 $COMPAREAGAINST >/dev/null 2>&1 || \
 		checkdiff $COMPAREFILE2 $COMPAREAGAINST >/dev/null 2>&1
 		checkdiff $COMPAREFILE2 $COMPAREAGAINST >/dev/null 2>&1
 	then
 	then
@@ -1126,6 +1128,7 @@ testequalor2() {
 		checkdiff $COMPAREFILE2 $COMPAREAGAINST || true
 		checkdiff $COMPAREFILE2 $COMPAREAGAINST || true
 		msgfail
 		msgfail
 	fi
 	fi
+	aptautotest 'testequalor2' "$@"
 }
 }
 
 
 testshowvirtual() {
 testshowvirtual() {
@@ -1210,6 +1213,7 @@ testsuccess() {
 		cat >&2 $OUTPUT
 		cat >&2 $OUTPUT
 		msgfail "exitcode $EXITCODE"
 		msgfail "exitcode $EXITCODE"
 	fi
 	fi
+	aptautotest 'testsuccess' "$@"
 }
 }
 
 
 testfailure() {
 testfailure() {
@@ -1227,6 +1231,7 @@ testfailure() {
 	else
 	else
 		msgpass
 		msgpass
 	fi
 	fi
+	aptautotest 'testfailure' "$@"
 }
 }
 
 
 testfilestats() {
 testfilestats() {
@@ -1271,3 +1276,34 @@ pause() {
 	local IGNORE
 	local IGNORE
 	read IGNORE
 	read IGNORE
 }
 }
+
+### The following tests are run by most test methods automatically to check
+### general things about commands executed without writing the test every time.
+
+aptautotest() {
+	local TESTCALL="$1"
+	local CMD="$2"
+	local FIRSTOPT="$3"
+	local AUTOTEST="aptautotest_$(basename "$CMD" | tr -d '-')_$(echo "$FIRSTOPT" | tr -d '-')"
+	if command -v $AUTOTEST >/dev/null; then
+		shift 3
+		# save and restore the *.output files from other tests
+		# as we might otherwise override them in these automatic tests
+		rm -rf rootdir/tmp-before
+		mv rootdir/tmp rootdir/tmp-before
+		mkdir rootdir/tmp
+		$AUTOTEST "$TESTCALL" "$@"
+		rm -rf rootdir/tmp-aptautotest
+		mv rootdir/tmp rootdir/tmp-aptautotest
+		mv rootdir/tmp-before rootdir/tmp
+	fi
+}
+
+aptautotest_aptget_update() {
+	if ! test -d "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists"; then return; fi
+	# all copied files are properly chmodded
+	find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists" -maxdepth 1 -type f | while read file; do
+		testfilestats "$file" '%U:%G:%a' '=' "${USER}:${USER}:644"
+	done
+}
+aptautotest_apt_update() { aptautotest_aptget_update "$@"; }

+ 0 - 5
test/integration/test-apt-get-download

@@ -32,11 +32,6 @@ done
 
 
 testsuccess aptget update
 testsuccess aptget update
 
 
-# all copied files are properly chmodded
-find rootdir/var/lib/apt/lists -type f | while read file; do
-	testaccessrights "$file" '644'
-done
-
 testdownload() {
 testdownload() {
 	local APT="$2"
 	local APT="$2"
 	if [ -n "$3" ]; then
 	if [ -n "$3" ]; then

+ 2 - 3
test/integration/test-apt-update-ims

@@ -54,7 +54,7 @@ Hit http://localhost:8080 unstable/main amd64 Packages
 Hit http://localhost:8080 unstable/main Translation-en
 Hit http://localhost:8080 unstable/main Translation-en
 Reading package lists..."
 Reading package lists..."
 
 
-find aptarchive -name "InRelease" | xargs rm -f
+find aptarchive -name 'InRelease' -delete
 
 
 echo "Acquire::GzipIndexes "0";" > rootdir/etc/apt/apt.conf.d/02compressindex
 echo "Acquire::GzipIndexes "0";" > rootdir/etc/apt/apt.conf.d/02compressindex
 runtest
 runtest
@@ -78,9 +78,8 @@ Hit http://localhost:8080 unstable/main Translation-en
 Reading package lists...
 Reading package lists...
 W: The data from 'http://localhost:8080 unstable Release.gpg' is not signed. Packages from that repository can not be authenticated."
 W: The data from 'http://localhost:8080 unstable Release.gpg' is not signed. Packages from that repository can not be authenticated."
 
 
-find aptarchive -name "Release.gpg" | xargs rm -f
+find aptarchive -name 'Release.gpg' -delete
 
 
-echo 'Acquire::AllowInsecureRepositories "1";' > rootdir/etc/apt/apt.conf.d/insecure.conf
 echo "Acquire::GzipIndexes "0";" > rootdir/etc/apt/apt.conf.d/02compressindex
 echo "Acquire::GzipIndexes "0";" > rootdir/etc/apt/apt.conf.d/02compressindex
 runtest
 runtest
 
 

+ 0 - 5
test/integration/test-apt-update-transactions

@@ -27,11 +27,6 @@ restorefile() {
 
 
 listscheck() {
 listscheck() {
 	testequal "$(cat $1)" ls rootdir/var/lib/apt/lists
 	testequal "$(cat $1)" ls rootdir/var/lib/apt/lists
-	# all copied files are properly chmodded
-	find rootdir/var/lib/apt/lists -maxdepth 1 -type f | while read file; do
-		testaccessrights "$file" '644'
-		testfilestats "$file" '%U' '!=' '_apt'
-	done
 }
 }
 
 
 testrun() {
 testrun() {