mirror of
https://github.com/anchore/syft.git
synced 2026-11-01 06:56:40 +01:00
Refactor install.sh (#765)
* [wip] get assets based on gh api Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * put install.sh download_asset fn under test Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * put install.sh install_asset fn under test Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * use zip for darwin installs Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * fix install.sh negative test cases Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * allow errors to propagate in install.sh Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * remove exit on error from install.sh tests Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add more docs around install.sh helpers Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add integration tests for install.sh Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add install.sh testing to pipeline Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add install test cache to CI Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * make colors globally available Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * test download against github release Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * always test release-based install against latest release Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * use better install.sh test names Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
# disable using the install.sh entrypoint such that we can unit test
|
||||
# script functions without invoking main()
|
||||
TEST_INSTALL_SH=true
|
||||
|
||||
. ../../install.sh
|
||||
set -u
|
||||
|
||||
assertTrue() {
|
||||
if eval "$1"; then
|
||||
echo "assertTrue failed: $2"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
assertFalse() {
|
||||
if eval "$1"; then
|
||||
echo "assertFalse failed: $2"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
assertEquals() {
|
||||
want=$1
|
||||
got=$2
|
||||
msg=$3
|
||||
if [ "$want" != "$got" ]; then
|
||||
echo "assertEquals failed: want='$want' got='$got' $msg"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
assertFilesDoesNotExist() {
|
||||
path="$1"
|
||||
msg=$2
|
||||
if [ -f "${path}" ]; then
|
||||
echo "assertFilesDoesNotExist failed: path exists '$path': $msg"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
assertFileExists() {
|
||||
path="$1"
|
||||
msg=$2
|
||||
if [ ! -f "${path}" ]; then
|
||||
echo "assertFileExists failed: path does not exist '$path': $msg"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
assertFilesEqual() {
|
||||
want=$1
|
||||
got=$2
|
||||
msg=$3
|
||||
|
||||
diff "$1" "$2"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "assertFilesEqual failed: $msg"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
assertNotEquals() {
|
||||
want=$1
|
||||
got=$2
|
||||
msg=$3
|
||||
if [ "$want" = "$got" ]; then
|
||||
echo "assertNotEquals failed: want='$want' got='$got' $msg"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
log_test_case() {
|
||||
echo " running $@"
|
||||
}
|
||||
|
||||
run_test_case_with_snapshot_release() {
|
||||
log_test_case ${@:1}
|
||||
|
||||
worker_pid=$(setup_snapshot_server)
|
||||
trap "teardown_snapshot_server $worker_pid" EXIT
|
||||
|
||||
# run test function with all arguments
|
||||
${@:1}
|
||||
|
||||
trap - EXIT
|
||||
teardown_snapshot_server "${worker_pid}"
|
||||
}
|
||||
|
||||
serve_port=8000
|
||||
|
||||
setup_snapshot_server() {
|
||||
# if you want to see proof in the logs, feel free to adjust the redirection
|
||||
python3 -m http.server --directory "$(snapshot_dir)" $serve_port &> /dev/null &
|
||||
worker_pid=$!
|
||||
|
||||
# it takes some time for the server to be ready...
|
||||
sleep 0.5
|
||||
|
||||
echo "$worker_pid"
|
||||
}
|
||||
|
||||
teardown_snapshot_server() {
|
||||
worker_pid="$1"
|
||||
|
||||
kill $worker_pid
|
||||
}
|
||||
|
||||
snapshot_version() {
|
||||
partial=$(ls ../../snapshot/*_checksums.txt | grep -o "_.*_checksums.txt")
|
||||
partial="${partial%_checksums.txt}"
|
||||
echo "${partial#_}"
|
||||
}
|
||||
|
||||
snapshot_download_url() {
|
||||
echo "localhost:${serve_port}"
|
||||
}
|
||||
|
||||
snapshot_dir() {
|
||||
echo "../../snapshot"
|
||||
}
|
||||
|
||||
snapshot_checksums_path() {
|
||||
echo "$(ls $(snapshot_dir)/*_checksums.txt)"
|
||||
}
|
||||
|
||||
snapshot_assets_count() {
|
||||
# example output before wc -l:
|
||||
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_linux_arm64.deb
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_linux_arm64.tar.gz
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_linux_amd64.rpm
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_darwin_arm64.tar.gz
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_linux_amd64.deb
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_linux_arm64.rpm
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_darwin_amd64.zip
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_windows_amd64.zip
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_darwin_arm64.zip
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_linux_amd64.tar.gz
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_darwin_amd64.tar.gz
|
||||
|
||||
echo "$(find ../../snapshot -maxdepth 1 -type f | grep 'syft_' | grep -v checksums | wc -l | tr -d '[:space:]')"
|
||||
}
|
||||
|
||||
|
||||
snapshot_assets_archive_count() {
|
||||
# example output before wc -l:
|
||||
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_linux_arm64.tar.gz
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_darwin_arm64.tar.gz
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_darwin_amd64.zip
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_windows_amd64.zip
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_darwin_arm64.zip
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_linux_amd64.tar.gz
|
||||
# ../../snapshot/syft_0.36.0-SNAPSHOT-e5e847a_darwin_amd64.tar.gz
|
||||
|
||||
echo "$(find ../../snapshot -maxdepth 1 -type f | grep 'syft_' | grep 'tar\|zip' | wc -l | tr -d '[:space:]')"
|
||||
}
|
||||
|
||||
|
||||
run_test_case() {
|
||||
log_test_case ${@:1}
|
||||
${@:1}
|
||||
}
|
||||
Reference in New Issue
Block a user