insertpackage 'unstable' 'old' 'all' '1.0'
- setupaptarchive
+ setupaptarchive --no-update
}
add_new_package() {
insertpackage "unstable" "new" "all" "1.0"
insertsource "unstable" "new" "all" "1.0"
- setupaptarchive --no-update
-
- avoid_ims_hit
+ setupaptarchive --no-update "$@"
}
break_repository_sources_index() {
- printf "xxx" > $APTARCHIVE/dists/unstable/main/source/Sources
- gzip -c $APTARCHIVE/dists/unstable/main/source/Sources > \
- $APTARCHIVE/dists/unstable/main/source/Sources.gz
- avoid_ims_hit
+ printf 'xxx' > $APTARCHIVE/dists/unstable/main/source/Sources
+ compressfile "$APTARCHIVE/dists/unstable/main/source/Sources" "$@"
}
-test_inrelease_to_new_inrelease() {
- msgmsg "Test InRelease to new InRelease works fine"
+start_with_good_inrelease() {
create_fresh_archive
- testequal "old/unstable 1.0 all" apt list -q
-
- add_new_package
testsuccess aptget update
+ listcurrentlistsdirectory > lists.before
+ testsuccessequal "old/unstable 1.0 all" apt list -q
+}
- testequal "new/unstable 1.0 all
+test_inrelease_to_new_inrelease() {
+ msgmsg 'Test InRelease to new InRelease works fine'
+ start_with_good_inrelease
+
+ add_new_package '+1hour'
+ testsuccess aptget update -o Debug::Acquire::Transaction=1
+ testsuccessequal "new/unstable 1.0 all
old/unstable 1.0 all" apt list -q
}
test_inrelease_to_broken_hash_reverts_all() {
- msgmsg "Test InRelease to broken InRelease reverts everything"
- create_fresh_archive
- add_new_package
+ msgmsg 'Test InRelease to broken InRelease reverts everything'
+ start_with_good_inrelease
+
+ add_new_package '+1hour'
# break the Sources file
- break_repository_sources_index
+ break_repository_sources_index '+1hour'
# test the error condition
- testequal "W: Failed to fetch file:${APTARCHIVE}/dists/unstable/InRelease
-
-W: Failed to fetch copy:${APTARCHIVE}/dists/unstable/main/source/Sources Hash Sum mismatch
-
-W: Failed to fetch copy:${APTARCHIVE}/dists/unstable/main/binary-i386/Packages
-
+ testfailureequal "W: Failed to fetch file:${APTARCHIVE}/dists/unstable/main/source/Sources.gz Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
# ensure that the Packages file is also rolled back
- testequal "E: Unable to locate package new" aptget install new -s -qq
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testfailureequal "E: Unable to locate package new" aptget install new -s -qq
}
-test_inreleae_to_valid_release() {
- msgmsg "Test InRelease to valid Release"
- create_fresh_archive
- add_new_package
- # switch to a unsinged repo now
+test_inrelease_to_valid_release() {
+ msgmsg 'Test InRelease to valid Release'
+ start_with_good_inrelease
+
+ add_new_package '+1hour'
+ # switch to a unsigned repo now
rm $APTARCHIVE/dists/unstable/InRelease
rm $APTARCHIVE/dists/unstable/Release.gpg
- avoid_ims_hit
- # update works
- testsuccess aptget update -o Debug::Acquire::Transaction=1
+ # update fails
+ testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq
- # test that we can install the new packages but do no longer have a sig
+ # test that security downgrade was not successful
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
testsuccess aptget install old -s
- testsuccess aptget install new -s
- testfailure ls $ROOTDIR/var/lib/apt/lists/*_InRelease
- testfailure ls $ROOTDIR/var/lib/apt/lists/*_Release.gpg
- testsuccess ls $ROOTDIR/var/lib/apt/lists/*_Release
+ testfailure aptget install new -s
+ testsuccess ls $ROOTDIR/var/lib/apt/lists/*_InRelease
+ testfailure ls $ROOTDIR/var/lib/apt/lists/*_Release
}
-test_inreleae_to_release_reverts_all() {
- msgmsg "Test InRelease to broken Release reverts everything"
- create_fresh_archive
+test_inrelease_to_release_reverts_all() {
+ msgmsg 'Test InRelease to broken Release reverts everything'
+ start_with_good_inrelease
- # switch to a unsinged repo now
- add_new_package
+ # switch to a unsigned repo now
+ add_new_package '+1hour'
rm $APTARCHIVE/dists/unstable/InRelease
rm $APTARCHIVE/dists/unstable/Release.gpg
+
# break it
- break_repository_sources_index
+ break_repository_sources_index '+1hour'
# ensure error
- testequal "W: Failed to fetch file:$APTARCHIVE/dists/unstable/InRelease
-
-W: Failed to fetch file:$APTARCHIVE/dists/unstable/Release
-
-W: Failed to fetch file:$APTARCHIVE/dists/unstable/Release.gpg
-
-W: Failed to fetch copy:$APTARCHIVE/dists/unstable/main/source/Sources Hash Sum mismatch
-
-W: Failed to fetch copy:$APTARCHIVE/dists/unstable/main/binary-i386/Packages
-
-E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq # -o Debug::acquire::transaction=1
+ testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq # -o Debug::acquire::transaction=1
# ensure that the Packages file is also rolled back
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
testsuccess aptget install old -s
testfailure aptget install new -s
testsuccess ls $ROOTDIR/var/lib/apt/lists/*_InRelease
}
test_unauthenticated_to_invalid_inrelease() {
- msgmsg "Test UnAuthenticated to invalid InRelease reverts everything"
+ msgmsg 'Test UnAuthenticated to invalid InRelease reverts everything'
create_fresh_archive
rm $APTARCHIVE/dists/unstable/InRelease
rm $APTARCHIVE/dists/unstable/Release.gpg
- avoid_ims_hit
-
- testsuccess aptget update -qq
- testequal "WARNING: The following packages cannot be authenticated!
+
+ testwarning aptget update --allow-insecure-repositories
+ listcurrentlistsdirectory > lists.before
+ testfailureequal "WARNING: The following packages cannot be authenticated!
old
E: There are problems and -y was used without --force-yes" aptget install -qq -y old
-
- # go to authenticated but not correct
- add_new_package
- break_repository_sources_index
- testequal "W: Failed to fetch file:$APTARCHIVE/dists/unstable/InRelease
-
-W: Failed to fetch copy:$APTARCHIVE/dists/unstable/main/source/Sources Hash Sum mismatch
-
-W: Failed to fetch copy:$APTARCHIVE/dists/unstable/main/binary-i386/Packages
+ # go to authenticated but not correct
+ add_new_package '+1hour'
+ break_repository_sources_index '+1hour'
+ testfailureequal "W: Failed to fetch file:$APTARCHIVE/dists/unstable/main/source/Sources.gz Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
testfailure ls rootdir/var/lib/apt/lists/*_InRelease
- testequal "WARNING: The following packages cannot be authenticated!
+ testfailureequal "WARNING: The following packages cannot be authenticated!
old
E: There are problems and -y was used without --force-yes" aptget install -qq -y old
}
test_inrelease_to_unauth_inrelease() {
- msgmsg "Test InRelease to InRelease without sig"
- create_fresh_archive
+ msgmsg 'Test InRelease to InRelease without good sig'
+ start_with_good_inrelease
+
signreleasefiles 'Marvin Paranoid'
- avoid_ims_hit
-
- testsuccess aptget update -qq
- testequal "WARNING: The following packages cannot be authenticated!
- old
-E: There are problems and -y was used without --force-yes" aptget install -qq -y old
+ testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E8525D47528144E2
+W: Failed to fetch file:$APTARCHIVE/dists/unstable/InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E8525D47528144E2
+W: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
- testfailure ls rootdir/var/lib/apt/lists/*_InRelease
- testsuccess ls rootdir/var/lib/apt/lists/*_Release
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
+ testsuccess ls rootdir/var/lib/apt/lists/*_InRelease
+}
+
+test_inrelease_to_broken_gzip() {
+ msgmsg "Test InRelease to broken gzip"
+ start_with_good_inrelease
+
+ break_repository_sources_index '+1hour'
+ generatereleasefiles '+2hours'
+ signreleasefiles
+
+ # append junk at the end of the compressed file
+ echo "lala" >> $APTARCHIVE/dists/unstable/main/source/Sources.gz
+ touch -d '+2min' $APTARCHIVE/dists/unstable/main/source/Sources.gz
+ # remove uncompressed file to avoid fallback
+ rm $APTARCHIVE/dists/unstable/main/source/Sources
+
+ testfailure aptget update
+ testsuccess grep 'Hash Sum mismatch' rootdir/tmp/testfailure.output
+ testfileequal lists.before "$(listcurrentlistsdirectory)"
}
TESTDIR=$(readlink -f $(dirname $0))
APTARCHIVE_LISTS="$(echo $APTARCHIVE | tr "/" "_" )"
# test the following cases:
-# - InRelease -> broken InRelease revert to previous state
+# - InRelease -> broken InRelease revert to previous state
# - empty lists dir and broken remote leaves nothing on the system
# - InRelease -> hashsum mismatch for one file reverts all files to previous state
# - Release/Release.gpg -> hashsum mismatch
# going from Release/Release.gpg -> InRelease and vice versa
# - unauthenticated -> invalid InRelease
+# stuff to do:
+# - ims-hit
+# - gzip-index tests
+
test_inrelease_to_new_inrelease
test_inrelease_to_broken_hash_reverts_all
-
-test_inreleae_to_valid_release
-test_inreleae_to_release_reverts_all
-
+test_inrelease_to_valid_release
+test_inrelease_to_release_reverts_all
test_unauthenticated_to_invalid_inrelease
-
test_inrelease_to_unauth_inrelease
+test_inrelease_to_broken_gzip