Files
mini-flees/test/run-tests.sh
2023-08-19 21:10:45 +03:00

298 lines
6.6 KiB
Bash
Executable File

#!/bin/bash
_qCol() {
# print "easier" mapping of ANSI colors and controls
local K="\033[1;30m"
local R="\033[1;31m"
local G="\033[1;32m"
local B="\033[1;34m"
local Y="\033[1;33m"
local M="\033[1;35m"
local C="\033[1;36m"
local W="\033[1;37m"
local k="\033[2;30m"
local r="\033[2;31m"
local g="\033[2;32m"
local b="\033[2;34m"
local y="\033[2;33m"
local m="\033[2;35m"
local c="\033[2;36m"
local w="\033[2;37m"
local bk="\033[40m"
local br="\033[41m"
local bg="\033[42m"
local by="\033[43m"
local bb="\033[44m"
local bm="\033[45m"
local bc="\033[46m"
local bw="\033[47m"
local S='\033[1m' #strong
local s='\033[2m' #strong off
local U='\033[4m' #underline
local u='\033[24m' #underline off
local z='\033[0m' #zero colors
local Z='\033[0m' #zero colors
local ic='\033[7m' #inverse colors
local io='\033[27m' #inverse off
local st='\033[9m' #strike on
local so='\033[29m' #strike off
local CLR='\033[2J' # Clear screen
local CLREND='\033[K' # Clear to end of line
local CLRBEG='\033[1K' # Clear to beginning of line
local CLRSCR="$CLR"'\033[0;0H' # Clear screen, reset cursor
local color_keys=" K R G B Y M C W k r g b y m c w S s U u z Z ic io st so bk br bg by bb bm bc bw CLR CLREND CLRBEG CLRSCR "
[[ "$1" = "export" ]] && {
local key
local prefix="$2"
[[ -z "$2" ]] && prefix=_c
for key in $color_keys; do
eval export ${prefix}${key}=\'${!key}\'
done
return
}
local arg val
for ((arg=1;arg<=$#;arg++)) {
val=${!arg}
[[ ${color_keys} = *" $val "* ]] || { echo "No such color code '${val}'" >&2; return 1; }
printf ${!val}
}
}
_cont() {
set +x
_qCol G
echo Continue
_qCol z
read continue
_qCol Y
echo =========================================
_qCol z
set -x
}
_title() {
_qCol G
echo "$1"
_qCol Y
echo =========================================
_qCol z
}
set -e
BIG="big file(1).ext"
BIGS="big_file1.ext"
SMALL="small file"
SMALLS="small_file"
IMAGE="image.jpg"
test -f "$BIG" || dd if=/dev/zero of="$BIG" bs=8192 count=40000
test -f "$SMALL" ||dd if=/dev/urandom of="$SMALL" bs=4096 count=400
test -f "$IMAGE" || convert -size 640x480 xc:gray $IMAGE
. ../.env
function t00-rebuild-docker() {
CWD=$PWD
cd ..
docker-compose up --build -d --force-recreate
cd "$CWD"
}
function t01-maintenance-begin() {
curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/maintenance
}
function t02-upload-small-image() {
pv "$IMAGE" | \
curl -fL -w "\n" -F file="@-" -X POST \
-H "Name: $IMAGE" \
-H "Max-Downloads: 4" \
-H "Expires-Days: 1" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/upload
}
function t03-upload-small-file() {
pv "$SMALL" | \
curl -fL -w "\n" -F file="@-" -X POST \
-H "Name: $SMALL" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/upload
}
function t04-upload-large-file() {
pv "$BIG" | \
curl -fL -w "\n" -F file="@-" -X POST \
-H "Name: $BIG" \
-H "Max-Downloads: 4" \
-H "Expires-Days: 1" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/upload
}
function t05-check-db-manually() {
sqlite3 ../data/flees.db "select * FROM files"
}
function t06-list-files() {
curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/ls
}
function t07-file-download() {
download_url=$( curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/ls | grep "$BIGS" | tail -n 1 | sed s,.*http,http, )
rm -f "$BIGS"
wget "$download_url"
}
function t08-file-details() {
download_url=$( curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/ls | grep "$BIGS" | tail -n 1 | sed s,.*http,http, )
token_name=$( echo $download_url | sed s,.*/dl/,, )
curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/details/"$token_name"
}
function t09-file-delete() {
download_url=$( curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/ls | grep "$BIGS" | tail -n 1 | sed s,.*http,http, )
token_name=$( echo $download_url | sed s,.*/dl/,, )
curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/delete/"$token_name"
}
function t09-unlimited-downloads() {
pv "$SMALL" | \
curl -fL -w "\n" -F file="@-" -X POST \
-H "Name: $SMALL" \
-H "Max-Downloads: -1" \
-H "Expires-Days: 1" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/upload
download_url=$( curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/ls | grep "$SMALLS" | tail -n 1 | sed s,.*http,http, )
token_name=$( echo $download_url | sed s,.*/dl/,, )
for ((i=0;i<10;i++)); do
curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/dl/"$token_name" > /dev/null
curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/details/"$token_name"
done
}
function t10-maintenance-post() {
pv "$SMALL" | \
curl -fL -w "\n" -F file="@-" -X POST \
-H "Name: $SMALL" \
-H "Max-Downloads: 4" \
-H "Expires-Days: -5" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/upload
pv "$SMALL" | \
curl -fL -w "\n" -F file="@-" -X POST \
-H "Name: $SMALL" \
-H "Max-Downloads: 0" \
-H "Expires-Days: 3" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/upload
curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/maintenance
curl -fL -w "\n" \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/ls
}
function t11-get-mfl() {
curl -fL \
-H "Secret: $FLASK_ACCESS_TOKEN" \
"$FLASK_PUBLIC_URL"/script/mfl > mfl
chmod +x mfl
}
function t12-mfl-update() {
./mfl update
}
function t13-mfl-list() {
./mfl list
./mfl
}
function t14-mfl-upload() {
./mfl w mfl
./mfl w -d 1 -m 1 mfl
}
_getlist() {
declare -F | awk '{ print $3 }' | grep -v ^_
echo exit
}
_getnext() {
hitfound=0
for line in $( _getlist ); do
if [[ $hitfound -eq 1 ]]; then
echo "$line"
return
fi
if [[ "$line" = "$1" ]]; then
hitfound=1
fi
done
}
_getchoice() {
_getlist | \
smenu -m "Pick task" -n 20 -t 1 -a c:2,b m:3,b -s '/'$1
}
next_task=0
while true; do
choice=$( _getchoice $next_task )
if [[ -z "$choice" ]]; then break; fi
_title "$choice"
set -x
"$choice"
set +x
_title ""
#~ next_task=$(( next_task + 1 ))
next_task=$( _getnext "$choice" )
done