Created
May 15, 2016 14:31
-
-
Save scmanjarrez/b61aa5a31b458c0d49f7c06d116e7dac to your computer and use it in GitHub Desktop.
Corrector casero con las pruebas de la práctica SERVIDOR (Sistemas Operativos)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#!/bin/zsh | |
######################################################################## | |
# Descripción: | |
# Fichero auxiliar para el corrector. | |
# | |
######################################################################## | |
PID_SRV="" | |
PID_CLI="" | |
PID_TO="" | |
Test_salidas() | |
{ | |
if sdiff .fd$1 ${2:--}; then | |
if [ $1 = 1 ]; then | |
echo -e "\e[0;31mLANZADOR: Contenido del Cliente correcto\e[0;0m\n" | |
else | |
echo -e "\e[0;31mLANZADOR: Contenido del Servidor correcto\e[0;0m\n" | |
fi; | |
else | |
echo "El contenido del descriptor $1 NO es el esperado" | |
exit 1 | |
fi; | |
return 0 | |
} | |
Matarile() | |
{ | |
# Matamos al ultimo cliente | |
kill -9 $PID_CLI 2> /dev/null | |
#Matamos al servidor | |
kill -9 $PID_SRV 2> /dev/null | |
#Matamos al sleep del timeout | |
kill -9 $PID_TO 2> /dev/null | |
} | |
Alarma() | |
{ | |
echo "Timeout!!" | |
Matarile | |
exit 1 | |
} | |
Timeout() | |
{ | |
# Esperamos los segundos indicados como argumento y nos | |
# mandamos una señal al propio script para capturarla | |
SECS=$1 | |
sleep $SECS && kill -14 $$ & | |
# $! es el PID del ultimo proceso en background | |
# Guardamos el PID del sleep que hace de timeout | |
PID_TO=$! | |
} | |
trap Alarma 14 | |
Timeout $[2+(2*$#)] | |
# La opción -cli indica que se quieren trazar las llamadas de los clientes | |
if [ _$1 = "_-cli" ] | |
then | |
# Quitamos el argumento 1 ($1) de la lista de argumentos de entrada | |
shift | |
# Definimos dos variables para lanzar los clientes | |
# Ejecutamos los clientes con un strace y eliminamos su salida estándar | |
CLIENTE="strace ./cliente" | |
CLIENTE_REDIRECT="/dev/null" | |
SERVIDOR_REDIRECT="/dev/null" | |
else | |
# Definimos dos variables para lanzar los clientes | |
# Ejecutamos los clientes normal y no redirigimos las salidas | |
CLIENTE="./cliente" | |
CLIENTE_REDIRECT="" | |
SERVIDOR_REDIRECT="" | |
fi | |
# La opción -srv indica que se quieren trazar las llamadas del servidor | |
if [ _$1 = "_-srv" ] | |
then | |
# Quitamos el argumento 1 ($1) de la lista de argumentos de entrada | |
shift | |
# Ejecutamos el servidor con un strace eliminamos su salida estándar | |
strace ./servidor > /dev/null & | |
CLIENTE_REDIRECT="/dev/null" | |
else | |
# Ejecutamos el servidor mandando su salida al error estándar | |
if [ _$SERVIDOR_REDIRECT = _ ] | |
then | |
./servidor > .fd2 & | |
else | |
./servidor > $SERVIDOR_REDIRECT & | |
fi | |
fi | |
# $! es el PID del ultimo proceso en background (el servidor) | |
PID_SRV=$! | |
sleep 1 | |
# Recorremos todos los argumentos (ficheros) | |
for i in $* | |
do | |
# Pedimos que transfiera el fichero $i al cliente | |
if [ _$CLIENTE_REDIRECT = _ ] | |
then | |
echo -e "\e[0;31mLANZADOR: Transfiriendo el fichero $i\e[0;0m" | |
if [ $i = "$1" ];then | |
$CLIENTE $i > .fd1 & | |
else | |
$CLIENTE $i >> .fd1 & | |
fi; | |
else | |
$CLIENTE $i > $CLIENTE_REDIRECT & | |
fi | |
# $! es el PID del ultimo proceso en background (el cliente) | |
PID_CLI=$! | |
# Esperamos a que termine este cliente | |
wait $PID_CLI | |
# Comparamos los ficheros original y local | |
diff $i "$i.local" > /dev/null 2>&1 || echo -e "\e[0;31mLANZADOR: El fichero $i has sido transferido erroneamente\e[0;0m" | |
rm -f "$i.local" | |
sleep 1 | |
done | |
if [ _$CLIENTE_REDIRECT = _ ] | |
then | |
if [ -z $1 ];then | |
$CLIENTE > .fd1 & | |
else | |
$CLIENTE >> .fd1 & | |
fi; | |
else | |
$CLIENTE > $CLIENTE_REDIRECT & | |
fi | |
# $! es el PID del ultimo proceso en background (el cliente) | |
PID_CLI=$! | |
# Esperamos a que termine este cliente | |
wait $PID_CLI | |
if [ _$CLIENTE_REDIRECT = _ ];then | |
if [ $# = 0 ];then | |
Test_salidas 2 <<EOF | |
SERVIDOR: Creacion del socket UDP: OK | |
SERVIDOR: Asignacion del puerto servidor: OK | |
SERVIDOR: Puerto guardado en fichero ./puerto_servidor: OK | |
SERVIDOR: Creacion del socket TCP: OK | |
SERVIDOR: Asignacion del puerto servidor: OK | |
SERVIDOR: Aceptacion de peticiones: OK | |
SERVIDOR: Puerto TCP reservado: OK | |
SERVIDOR: Esperando mensaje. | |
SERVIDOR: Mensaje del cliente: OK | |
SERVIDOR: QUIT | |
SERVIDOR: Enviando del resultado [OK]: OK | |
SERVIDOR: Finalizado | |
EOF | |
Test_salidas 1 <<EOF | |
CLIENTE: Puerto leido de fichero ./puerto_servidor: OK | |
CLIENTE: Creacion del socket UDP: OK | |
CLIENTE: Reserva del puerto cliente: OK | |
CLIENTE: Enviando QUIT(): OK | |
CLIENTE: Respuesta del servidor: OK | |
EOF | |
elif [ $# = 1 ];then | |
if [ ! -f "$1" ];then | |
Test_salidas 2 <<EOF | |
SERVIDOR: Creacion del socket UDP: OK | |
SERVIDOR: Asignacion del puerto servidor: OK | |
SERVIDOR: Puerto guardado en fichero ./puerto_servidor: OK | |
SERVIDOR: Creacion del socket TCP: OK | |
SERVIDOR: Asignacion del puerto servidor: OK | |
SERVIDOR: Aceptacion de peticiones: OK | |
SERVIDOR: Puerto TCP reservado: OK | |
SERVIDOR: Esperando mensaje. | |
SERVIDOR: Mensaje del cliente: OK | |
SERVIDOR: REQUEST(${1}.local,$1) | |
SERVIDOR: Enviando del resultado [ERROR]: OK | |
SERVIDOR: Esperando mensaje. | |
SERVIDOR: Mensaje del cliente: OK | |
SERVIDOR: QUIT | |
SERVIDOR: Enviando del resultado [OK]: OK | |
SERVIDOR: Finalizado | |
EOF | |
Test_salidas 1 <<EOF | |
CLIENTE: Puerto leido de fichero ./puerto_servidor: OK | |
CLIENTE: Creacion del socket UDP: OK | |
CLIENTE: Reserva del puerto cliente: OK | |
CLIENTE: Enviando REQUEST(${1}.local,$1): OK | |
CLIENTE: Respuesta del servidor: ERROR | |
CLIENTE: Puerto leido de fichero ./puerto_servidor: OK | |
CLIENTE: Creacion del socket UDP: OK | |
CLIENTE: Reserva del puerto cliente: OK | |
CLIENTE: Enviando QUIT(): OK | |
CLIENTE: Respuesta del servidor: OK | |
EOF | |
else | |
Test_salidas 2 <<EOF | |
SERVIDOR: Creacion del socket UDP: OK | |
SERVIDOR: Asignacion del puerto servidor: OK | |
SERVIDOR: Puerto guardado en fichero ./puerto_servidor: OK | |
SERVIDOR: Creacion del socket TCP: OK | |
SERVIDOR: Asignacion del puerto servidor: OK | |
SERVIDOR: Aceptacion de peticiones: OK | |
SERVIDOR: Puerto TCP reservado: OK | |
SERVIDOR: Esperando mensaje. | |
SERVIDOR: Mensaje del cliente: OK | |
SERVIDOR: REQUEST(${1}.local,${1}) | |
SERVIDOR: Enviando del resultado [OK]: OK | |
SERVIDOR: Llegada de un mensaje: OK | |
SERVIDOR: Esperando mensaje. | |
SERVIDOR: Mensaje del cliente: OK | |
SERVIDOR: QUIT | |
SERVIDOR: Enviando del resultado [OK]: OK | |
SERVIDOR: Finalizado | |
EOF | |
Test_salidas 1 <<EOF | |
CLIENTE: Puerto leido de fichero ./puerto_servidor: OK | |
CLIENTE: Creacion del socket UDP: OK | |
CLIENTE: Reserva del puerto cliente: OK | |
CLIENTE: Enviando REQUEST(${1}.local,${1}): OK | |
CLIENTE: Respuesta del servidor: OK | |
CLIENTE: Creacion del socket TCP: OK | |
CLIENTE: Conexion al puerto servidor: OK | |
CLIENTE: Puerto leido de fichero ./puerto_servidor: OK | |
CLIENTE: Creacion del socket UDP: OK | |
CLIENTE: Reserva del puerto cliente: OK | |
CLIENTE: Enviando QUIT(): OK | |
CLIENTE: Respuesta del servidor: OK | |
EOF | |
fi; | |
else | |
unset prueba | |
for i in $@;do | |
if [ -z "$prueba" ];then | |
prueba="SERVIDOR: Esperando mensaje. | |
SERVIDOR: Mensaje del cliente: OK | |
SERVIDOR: REQUEST($i.local,$i) | |
SERVIDOR: Enviando del resultado [OK]: OK | |
SERVIDOR: Llegada de un mensaje: OK" | |
else | |
prueba=$prueba" | |
SERVIDOR: Esperando mensaje. | |
SERVIDOR: Mensaje del cliente: OK | |
SERVIDOR: REQUEST($i.local,$i) | |
SERVIDOR: Enviando del resultado [OK]: OK | |
SERVIDOR: Llegada de un mensaje: OK" | |
fi; | |
done | |
Test_salidas 2 <<EOF | |
SERVIDOR: Creacion del socket UDP: OK | |
SERVIDOR: Asignacion del puerto servidor: OK | |
SERVIDOR: Puerto guardado en fichero ./puerto_servidor: OK | |
SERVIDOR: Creacion del socket TCP: OK | |
SERVIDOR: Asignacion del puerto servidor: OK | |
SERVIDOR: Aceptacion de peticiones: OK | |
SERVIDOR: Puerto TCP reservado: OK | |
$prueba | |
SERVIDOR: Esperando mensaje. | |
SERVIDOR: Mensaje del cliente: OK | |
SERVIDOR: QUIT | |
SERVIDOR: Enviando del resultado [OK]: OK | |
SERVIDOR: Finalizado | |
EOF | |
unset prueba | |
for i in $@;do | |
if [ -z "$prueba" ];then | |
prueba="CLIENTE: Puerto leido de fichero ./puerto_servidor: OK | |
CLIENTE: Creacion del socket UDP: OK | |
CLIENTE: Reserva del puerto cliente: OK | |
CLIENTE: Enviando REQUEST($i.local,$i): OK | |
CLIENTE: Respuesta del servidor: OK | |
CLIENTE: Creacion del socket TCP: OK | |
CLIENTE: Conexion al puerto servidor: OK" | |
else | |
prueba=$prueba" | |
CLIENTE: Puerto leido de fichero ./puerto_servidor: OK | |
CLIENTE: Creacion del socket UDP: OK | |
CLIENTE: Reserva del puerto cliente: OK | |
CLIENTE: Enviando REQUEST($i.local,$i): OK | |
CLIENTE: Respuesta del servidor: OK | |
CLIENTE: Creacion del socket TCP: OK | |
CLIENTE: Conexion al puerto servidor: OK" | |
fi; | |
done | |
Test_salidas 1 <<EOF | |
$prueba | |
CLIENTE: Puerto leido de fichero ./puerto_servidor: OK | |
CLIENTE: Creacion del socket UDP: OK | |
CLIENTE: Reserva del puerto cliente: OK | |
CLIENTE: Enviando QUIT(): OK | |
CLIENTE: Respuesta del servidor: OK | |
EOF | |
fi; | |
fi; | |
echo -e "\e[0;31mLANZADOR: Finalizado correctamente\e[0;0m\n" | |
Matarile |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
######################################################################## | |
# El script se encarga de realizar una serie de pruebas | |
# para comprobar el correcto funcionamiento del programa | |
# servidor.c | |
# Uso: | |
# ./servidor.sh | |
######################################################################## | |
PID_LANZ="" | |
TEST=0 | |
# Preparación de ficheros para la realización de las pruebas | |
echo -e "\e[0;31mTESTER: Preparando fichero prueba.txt...\e[0;0m\n" | |
cat > prueba.txt <<EOF | |
Este es un pequeño fichero de prueba | |
de un par de líneas | |
EOF | |
echo -e "\e[0;31mTESTER: Preparando fichero groucho.txt...\e[0;0m\n" | |
cat > groucho.txt <<EOF | |
Groucho Marx (1890-1977) | |
=================================== | |
QUOTES: | |
I've had a perfectly wonderful evening. But this wasn't it. | |
It isn't necessary to have relatives in Kansas City in order to be | |
unhappy. | |
Military intelligence is a contradiction in terms. | |
Money frees you from doing things you dislike. Since I dislike doing | |
nearly everything, money is handy. | |
My mother loved children -- she would have given anything if I had | |
been one. | |
Outside of a dog, a book is man's best friend. Inside of a dog it's | |
too dark to read. | |
I do not care to belong to a club that accepts people like me as | |
members. | |
I find television very educational. The minute somebody turns it on, I | |
go to the library and read a good book. | |
She got her looks from her father. He's a plastic surgeon. | |
While hunting in Africa, I shot an elephant in my pajamas. How an | |
elephant got into my pajamas I'll never know. | |
I never forget a face, but in your case I'll be glad to make an | |
exception. | |
Here's to our girlfriends and wives; may they never meet! | |
EOF | |
echo -e "\e[0;31mTESTER: Preparando ficheros f[1-5].txt...\e[0;0m\n" | |
for i in `seq 1 5`; | |
do | |
cat > f${i}.txt <<EOF | |
Prueba $i | |
EOF | |
done | |
############################################################################### | |
# Comienzo de las pruebas | |
echo -ne "\e[0;31mTESTER: Empezando la prueba 1..." | |
sleep 1 | |
echo -e "Enviando mensaje de QUIT\e[0;0m\n" | |
./lanzador_nuevo.sh & | |
PID_LANZ=$! | |
wait $PID_LANZ | |
if [ $? = 0 ];then | |
((TESTER+=1)) | |
fi; | |
sleep 1 | |
echo -ne "\e[0;31mTESTER: Empezando la prueba 2..." | |
sleep 1 | |
echo -e "Enviando fichero pequeño\e[0;0m\n" | |
./lanzador_nuevo.sh prueba.txt & | |
PID_LANZ=$! | |
wait $PID_LANZ | |
if [ $? = 0 ];then | |
((TESTER+=1)) | |
fi; | |
sleep 1 | |
echo -ne "\e[0;31mTESTER: Empezando la prueba 3..." | |
sleep 1 | |
echo -e "Enviando fichero grande\e[0;0m\n" | |
./lanzador_nuevo.sh groucho.txt & | |
PID_LANZ=$! | |
wait $PID_LANZ | |
if [ $? = 0 ];then | |
((TESTER+=1)) | |
fi; | |
sleep 1 | |
echo -ne "\e[0;31mTESTER: Empezando la prueba 4..." | |
sleep 1 | |
echo -e "Enviando varios ficheros, f1.txt, f2.txt, f3.txt, f4.txt, f5.txt\e[0;0m\n" | |
./lanzador_nuevo.sh f1.txt f2.txt f3.txt f4.txt f5.txt & | |
PID_LANZ=$! | |
wait $PID_LANZ | |
if [ $? = 0 ];then | |
((TESTER+=1)) | |
fi; | |
sleep 1 | |
echo -ne "\e[0;31mTESTER: Empezando la prueba 5..." | |
sleep 1 | |
echo -e "Solicitando fichero que no existe en remoto\e[0;0m\n" | |
./lanzador_nuevo.sh no_existe.txt & | |
PID_LANZ=$! | |
wait $PID_LANZ | |
if [ $? = 0 ];then | |
((TESTER+=1)) | |
fi; | |
sleep 1 | |
############################################################################### | |
# Borrar todos los ficheros usados en el tester | |
rm prueba.txt groucho.txt f1.txt f2.txt f3.txt f4.txt f5.txt .fd1 .fd2 | |
unset prueba | |
if [ $TESTER = 5 ];then | |
echo -e "\e[0;31mTESTER: El programa pasa todos los test correctamente.\e[0;0m\n" | |
else | |
echo -e "\e[0;31mTESTER: El programa NO pasa los test.\e[0;0m\n" | |
fi; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment