Files
fission-src/test/tests/test_archive_pruner.sh
T

124 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# global variables
pkg=""
http_status=""
url=""
cleanup() {
if [ -e "test-deploy-pkg.zip" ]; then
rm -rf test-deploy-pkg.zip test_dir
fi
if [ -e "/tmp/file" ]; then
rm -rf /tmp/file
fi
}
create_archive() {
log "Creating an archive"
mkdir test_dir
dd if=/dev/urandom of=test_dir/dynamically_generated_file bs=256k count=1
printf 'def main():\n return "Hello, world!"' > test_dir/hello.py
zip -jr test-deploy-pkg.zip test_dir/
}
create_package() {
log "Creating package"
pkg=$(fission package create --deploy "test-deploy-pkg.zip" --env python| cut -f2 -d' '| tr -d \')
}
delete_package() {
log "Deleting package: $1"
fission package delete --name $1
}
get_archive_url_from_package() {
log "Getting archive URL from package: $1"
url=`kubectl get package $1 -ojsonpath='{.spec.deployment.url}'`
}
get_archive_from_storage() {
storage_service_url=$1
controller_ip=$(kubectl -n $FISSION_NAMESPACE get svc controller -o jsonpath='{...ip}')
controller_proxy_url=`echo $storage_service_url | sed -e "s/storagesvc.$FISSION_NAMESPACE/$controller_ip\/proxy\/storage/"`
log "controller_proxy_url=$controller_proxy_url"
http_status=`curl -sw "%{http_code}" $controller_proxy_url -o /tmp/file`
echo "http_status: $http_status"
}
#1. declare trap to cleanup for EXIT
#2. create an archive with large files such that total size of archive is > 256KB
#3. create 2 pkgs referencing those archives
#4. delete both the packages
#5. verify archives are not recycled . this handles the case where archives are just created but not referenced by pkgs yet.
#6. sleep for two minutes
#7. now verify that both got deleted.
main() {
# trap
trap cleanup EXIT
# create a huge archive
create_archive
log "created archive test-deploy-pkg.zip"
# create packages with the huge archive
create_package
pkg_1=$pkg
get_archive_url_from_package $pkg_1
url_1=$url
log "pkg: $pkg_1, archive_url : $url_1"
create_package
pkg_2=$pkg
get_archive_url_from_package $pkg_2
url_2=$url
log "pkg: $pkg_2, archive_url : $url_2"
# delete packages
delete_package $pkg_1
delete_package $pkg_2
log "deleted packages : $pkg_1 $pkg_2"
# curl on the archive url
get_archive_from_storage $url_1
log "http_status for $url_1 : $http_status"
if [ "$http_status" -ne "200" ]; then
log "Archive $url_1 absent on storage, while expected to be present"
exit 1
fi
# curl on the archive url
get_archive_from_storage $url_2
log "http_status for $url_2 : $http_status"
if [ "$http_status" -ne "200" ]; then
log "Archive $url_2 absent on storage, while expected to be present"
exit 1
fi
# archivePruner is set to run every minute for test. In production, its set to run every hour.
log "waiting for packages to get recycled"
sleep 120
# curl on the archive url
get_archive_from_storage $url_1
log "http_status for $url_1 : $http_status"
if [ "$http_status" -ne "404" ]; then
log "Archive $url_1 should have been recycled, but curl returned $http_status, while expected status is 404."
exit 1
fi
# curl on the archive url
get_archive_from_storage $url_2
log "http_status for $url_2 : $http_status"
if [ "$http_status" -ne "404" ]; then
log "Archive $url_2 should have been recycled, but curl returned $http_status, while expected status is 404."
exit 1
fi
log "Test archive pruner PASSED"
}
main