Files
42_SIDE_exam_06_miniserv/grademe.sh
2023-02-17 12:44:05 +01:00

152 lines
3.8 KiB
Bash

#!/bin/bash
ARGS="Wrong number of arguments"
FATAL="Fatal error"
err=0
port=0
while [ $port -lt 1024 -o $port -gt 10000 ]; do
port=$RANDOM
done
echo "Running tests on port $port..."
check()
{
# check exit status of most recently executed command
# [ $? -eq 1 ] && echo -e "✅\c" || { echo -e "❌\c"; err=$(( $err + 1 )); }
if [ $? -eq 1 ]
then
echo -e "✅\c";
else
echo -e "❌\c";
err=$(( $err + 1 ));
fi
# compare output of cat with first argument
# [ "$(cat log.txt)" = "$1" ] && echo -e "\033[70G✅" || { echo -e "\033[70G❌"; err=$(( $err + 1 )); }
if [ "$(cat log.txt)" = "$1" ]
then
echo -e "\033[70G✅";
else
echo -e "\033[70G❌";
err=$(( $err + 1 ));
fi
}
check_diff()
{
INDENT=50
echo "coucou"
case "$1" in
5 | 7)
INDENT=55
;;
esac
diff "log$1.txt" "assets/test$1" &> /dev/null
[ $? -eq 0 ] && echo -e "\033[${INDENT}G✅\c" || { echo -e "\033[${INDENT}G❌\c"; err=$(( $err + 1 )); }
}
### COMPIL
echo -e "\033[36m[+] Checking compilation...\033[0m\033[50G\c"
clang -Wall -Wextra -Werror mini_serv.c -o mini_serv &> log.txt
[ "$(cat log.txt)" = "" ] && echo "✅"|| { echo -e "\033[31mCompilation error...\033[0m"; cat log.txt; rm log.txt; exit 1; }
### HANDLE ERRORS
echo -e "\n\033[36m[+] Checking errors\033[0m\033[50GExit status\033[70GDiff Output"
echo -e "\033[33m[+] Checking no arguments output...\033[0m\033[50G\c"
./mini_serv &> log.txt
check "$ARGS"
echo -e "\033[33m[+] Checking two many arguments output...\033[0m\033[50G\c"
./mini_serv 1 2 &> log.txt
check "$ARGS"
echo -e "\033[33m[+] Checking syscall error output...\033[0m\033[50G\c"
./mini_serv "$port" & > log.txt
./mini_serv "$port" &> log.txt
check "$FATAL"
echo "[+] Killing mini_serv..."
killall -q mini_serv
### DIFF OUTPUT
echo -e "\n\033[36m[+] Checking output...\033[0m\033[50G"
echo -e "\033[33m[+] 1 client and 1 message...\033[0m\033[50G\c"
./mini_serv "$port" & > log1.txt
r=$(nc localhost "$port" > log1.txt) &
echo "coucou" | nc localhost "$port"
check_diff 1
echo -e "\n[+] Killing mini_serv..."
killall -q mini_serv
echo -e "\n\033[33m[+] 1 client and many messages...\033[0m\033[50G\c"
port=$(( $port - 5 ))
./mini_serv "$port" & > log2.txt
r=$(nc localhost "$port" > log2.txt) &
sleep 1
echo "coucou" | nc localhost "$port"
echo "good morning" | nc localhost "$port"
echo "holà que tal?" | nc localhost "$port"
echo -e "\033[32mGREEN\n\t\033[31mRED" | nc localhost "$port"
echo "" | nc localhost "$port"
echo -e "\033[0mhello\t\tbonjour" | nc localhost "$port"
echo "last one" | nc localhost "$port"
echo "✅" | nc localhost "$port"
check_diff 2
echo -e "\n[+] Killing mini_serv..."
killall -q mini_serv
echo -e "\n\033[33m[+] 1 client and multi lines...\033[0m\033[50G\c"
./mini_serv "$(( $port + 1 ))" & > log3.txt
r=$(nc localhost "$(( $port + 1 ))" > log3.txt) &
sleep 1
cat assets/lorem | nc localhost "$(( $port + 1 ))"
check_diff 3
echo -e "\n[+] Killing mini_serv..."
killall -q mini_serv
echo -e "\n\033[33m[+] 2 clients and a simple message...\033[0m\033[50G\c"
./mini_serv "$(( $port + 2 ))" & > log4.txt
r=$(nc localhost "$(( $port + 2 ))" > log4.txt) &
sleep 1
r2=$(nc localhost "$(( $port + 2 ))" > log5.txt) &
sleep 1
echo "hello" | nc localhost "$(( $port + 2 ))"
check_diff 4
check_diff 5
echo -e "\n[+] Killing mini_serv..."
killall -q mini_serv
echo -e "\n\033[33m[+] 2 clients and multi ligne message...\033[0m\033[50G\c"
./mini_serv "$(( $port - 1 ))" & > log6.txt
r=$(nc localhost "$(( $port - 1 ))" > log6.txt) &
sleep 1
r2=$(nc localhost "$(( $port - 1 ))" > log7.txt) &
sleep 1
cat assets/lorem | nc localhost "$(( $port - 1 ))"
check_diff 6
check_diff 7
echo -e "\n[+] Killing mini_serv..."
killall -q mini_serv
### SUMMARY
[ $err -eq 0 ] && echo -e "\n\033[32mAll tests passed :)\033[0m" || echo -e "\033[31m$err test(s) failed :(\033[0m"
### CLEAN
rm -rf mini_serv log*.txt
exit $err