mirror of
https://github.com/clearlinux/swupd-server.git
synced 2026-08-18 20:46:02 +00:00
8ac1869adf
Some of the renames tests omitted the leading forward slash for the two function arguments, so add them here. Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
247 lines
6.4 KiB
Bash
Executable File
247 lines
6.4 KiB
Bash
Executable File
#!/usr/bin/env bats
|
|
|
|
# common functions
|
|
load "../swupdlib"
|
|
|
|
setup() {
|
|
maybeskip
|
|
clean_test_dir
|
|
init_test_dir
|
|
|
|
init_server_ini
|
|
set_latest_ver 0
|
|
init_groups_ini os-core test-bundle
|
|
|
|
set_os_release 10 os-core
|
|
track_bundle 10 os-core
|
|
track_bundle 10 test-bundle
|
|
set_os_release 20 os-core
|
|
track_bundle 20 os-core
|
|
track_bundle 20 test-bundle
|
|
}
|
|
|
|
# Generate data files of 3 types in test-bundle
|
|
# All files are big enough that they get rename detection
|
|
gendataA() {
|
|
gen_file_plain_with_content "$1" test-bundle "$2" "$(seq 100)"
|
|
}
|
|
gendataB() {
|
|
gen_file_plain_with_content "$1" test-bundle "$2" "$(seq 50) $(seq 52 101)"
|
|
}
|
|
gendataC() {
|
|
# cache string
|
|
[ -z "$dataC" ] || dataC="$(seq 1000 | gzip | uuencode wombat)"
|
|
gen_file_plain_with_content "$1" test-bundle "$2" "$dataC"
|
|
}
|
|
# Generate small data files
|
|
gendataAs() {
|
|
gen_file_plain_with_content "$1" test-bundle "$2" "$(seq 50)"
|
|
}
|
|
gendataBs() {
|
|
gen_file_plain_with_content "$1" test-bundle "$2" "$(seq 24) $(seq 26 49)"
|
|
}
|
|
gendataCs() {
|
|
# cache string
|
|
[ -z "$dataCs" ] || dataC="$(seq 50 | gzip | uuencode wombat)"
|
|
gen_file_plain_with_content "$1" test-bundle "$2" "$dataCs"
|
|
}
|
|
|
|
checkrenamed(){
|
|
local flags sha1 ver name fromsha1="bad" tosha1
|
|
# Check that $1 is renamed to $2
|
|
exec 9< $DIR/www/20/Manifest.test-bundle
|
|
# skip the header
|
|
while read -u9
|
|
do
|
|
[ -z "$REPLY" ] && break
|
|
done
|
|
while read -r -u9 flags sha1 ver name
|
|
do
|
|
case "$flags" in
|
|
(?"d.r") [ "$name" = "$1" ] && fromsha1=$sha1 ;;
|
|
(?"..r") [ "$name" = "$2" ] && tosha1=$sha1 ;;
|
|
esac
|
|
done
|
|
if [ "$fromsha1" = "$tosha1" ] ; then return 0 ; else return 1 ; fi
|
|
}
|
|
|
|
# Guts of doing an update
|
|
do_an_update() {
|
|
sudo $CREATE_UPDATE --osversion 10 --statedir $DIR --format 3
|
|
sudo $MAKE_FULLFILES --statedir $DIR 10
|
|
sudo $MAKE_PACK --statedir $DIR 0 10 os-core
|
|
sudo $MAKE_PACK --statedir $DIR 0 10 test-bundle
|
|
|
|
set_latest_ver 10
|
|
|
|
sudo $CREATE_UPDATE --osversion 20 --statedir $DIR --format 3
|
|
sudo $MAKE_FULLFILES --statedir $DIR 20
|
|
sudo $MAKE_PACK --statedir $DIR 0 20 os-core
|
|
sudo $MAKE_PACK --statedir $DIR 0 20 test-bundle
|
|
sudo $MAKE_PACK --statedir $DIR 10 20 os-core
|
|
sudo $MAKE_PACK --statedir $DIR 10 20 test-bundle
|
|
}
|
|
|
|
|
|
@test "basic rename detection support" {
|
|
gendataA 10 foo
|
|
gendataA 20 bar
|
|
do_an_update
|
|
checkrenamed /foo /bar
|
|
}
|
|
|
|
@test "ignore rename detection for small files" {
|
|
gendataAs 10 foo
|
|
gendataAs 20 bar
|
|
do_an_update
|
|
# A renamed file comprises a new file and a deleted file
|
|
[[ 0 -eq $(grep '^F\.\.r.*/bar$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
[[ 0 -eq $(grep '^\.d\.r.*/foo$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
}
|
|
@test "ignore rename detection for large to small files" {
|
|
gendataA 10 foo
|
|
gendataAs 20 bar
|
|
do_an_update
|
|
# A renamed file comprises a new file and a deleted file
|
|
[[ 0 -eq $(grep '^F\.\.r.*/bar$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
[[ 0 -eq $(grep '^\.d\.r.*/foo$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
}
|
|
@test "ignore rename detection for small to large files" {
|
|
gendataAs 10 foo
|
|
gendataA 20 bar
|
|
do_an_update
|
|
# A renamed file comprises a new file and a deleted file
|
|
[[ 0 -eq $(grep '^F\.\.r.*/bar$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
[[ 0 -eq $(grep '^\.d\.r.*/foo$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
}
|
|
|
|
@test "rename one file to two" {
|
|
gendataA 10 foo
|
|
gendataA 20 bar
|
|
gendataA 20 baz
|
|
do_an_update
|
|
|
|
# A renamed file comprises a new file and a deleted file
|
|
[[ 1 -eq $(grep '^F\.\.r.*/ba[rz]$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
[[ 1 -eq $(grep '^\.d\.r.*/foo$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
}
|
|
@test "rename two file to one" {
|
|
gendataA 10 foo
|
|
gendataA 10 foz
|
|
gendataA 20 baz
|
|
do_an_update
|
|
|
|
# A renamed file comprises a new file and a deleted file
|
|
[[ 1 -eq $(grep '^F\.\.r.*/baz$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
[[ 1 -eq $(grep '^\.d\.\..*/fo[oz]$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
[[ 1 -eq $(grep '^\.d\.r.*/fo[oz]$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
}
|
|
@test "rename two files to two" {
|
|
gendataA 10 foo
|
|
gendataA 10 foz
|
|
gendataA 20 bar
|
|
gendataA 20 baz
|
|
do_an_update
|
|
checkrenamed /foo /bar
|
|
checkrenamed /foz /baz
|
|
}
|
|
|
|
@test "rename two files to two, one slightly different" {
|
|
gendataA 10 foo
|
|
gendataA 10 foz
|
|
gendataA 20 bar
|
|
gendataB 20 baz
|
|
do_an_update
|
|
# we don't actually know how the client we do this rename, but don't care
|
|
checkrenamed /foo /bar
|
|
checkrenamed /foz /baz
|
|
}
|
|
|
|
@test "rename two files to two, each pair slightly different" {
|
|
gendataA 10 foo
|
|
gendataB 10 foz
|
|
gendataA 20 bar
|
|
gendataB 20 baz
|
|
do_an_update
|
|
checkrenamed /foo /bar
|
|
checkrenamed /foz /baz
|
|
}
|
|
|
|
@test "rename two files to two, one very different" {
|
|
gendataA 10 foo
|
|
gendataA 10 foz
|
|
gendataA 20 bar
|
|
gendataC 20 baz
|
|
do_an_update
|
|
# A renamed file comprises a new file and a deleted file
|
|
[[ 1 -eq $(grep '^F\.\.r.*/ba[rz]$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
[[ 1 -eq $(grep '^\.d\.r.*/fo[oz]$' $DIR/www/20/Manifest.test-bundle | wc -l) ]]
|
|
}
|
|
@test "rename two files to two, one small" {
|
|
gendataA 10 foo
|
|
gendataA 10 foz
|
|
gendataA 20 bar
|
|
gendataCs 20 baz
|
|
do_an_update
|
|
run checkrenamed /foo /bar
|
|
if [ $status -eq 1 ] ; then
|
|
checkrenamed /foz /bar
|
|
fi
|
|
}
|
|
|
|
@test "directory name changes" {
|
|
gendataA 10 dir1/foo
|
|
gendataA 20 dir2/foo
|
|
do_an_update
|
|
checkrenamed /dir1/foo /dir2/foo
|
|
}
|
|
|
|
@test "directory name changes small files" {
|
|
gendataAs 10 dir1/foo
|
|
gendataAs 20 dir2/foo
|
|
do_an_update
|
|
if ! checkrenamed /dir1/foo /dir2/foo ; then false ; fi
|
|
}
|
|
|
|
@test "directory name and small data changes" {
|
|
gendataA 10 dir1/foo
|
|
gendataB 20 dir2/foz
|
|
do_an_update
|
|
checkrenamed /dir1/foo /dir2/foz
|
|
}
|
|
|
|
@test "directory name and small data changes, choose same name" {
|
|
gendataA 10 dir1/foo
|
|
gendataA 10 dir1/foz
|
|
gendataB 20 dir2/foz
|
|
do_an_update
|
|
checkrenamed /dir1/foz /dir2/foz
|
|
}
|
|
|
|
@test "same basename test" {
|
|
gendataA 10 dir1/foo.so.1
|
|
gendataA 10 dir1/foz.so.1
|
|
gendataB 20 dir2/foo.so.2
|
|
do_an_update
|
|
checkrenamed /dir1/foo.so.1 /dir2/foo.so.2
|
|
}
|
|
|
|
@test "rename file to dir/file" {
|
|
gendataA 10 foo
|
|
gendataA 20 foo/bar
|
|
do_an_update
|
|
checkrenamed /foo /foo/bar
|
|
}
|
|
# @test "rename foo/foo to foo" {
|
|
# gendataA 10 foo/foo
|
|
# gendataA 20 foo
|
|
# do_an_update
|
|
# checkrenamed /foo/foo /foo
|
|
# }
|
|
|
|
# Emacs and vi support
|
|
# Local variables:
|
|
# sh-indentation: 2
|
|
# End:
|
|
# vi: ft=sh ts=8 sw=2 sts=2 et tw=80
|