Cómo comparar la salida de un cliente lento de netcat con un archivo.
readarray -t FILES < text.in
for ELEMENT in ${FILES[@]}
do
printf $ELEMENT
sleep 2
done | nc -q -1 localhost 5555 | diff - test.out
Este código simula un cliente de red lento que envía una línea de texto de text.in cada 2 segundos a un servidor de almacenamiento de clave-valor con netcat. ¿Cómo puedo comparar la salida de netcat con un archivo test.out?
Ejemplo para text.in:
GET$5$hello
SET$5$hello$7$myworld
GET$5$hello
QUIT
Ejemplo para test.out:
ERR
OK
VALUE$7$myworld
Una vez que se envía la línea QUIT
, el servidor cierra la conexión. Después de eso, quiero comparar la salida estándar de netcat con test.out.
Podría hacer esto: nc localhost 5555 < text.in | diff - test.out
pero luego se envía todo el archivo text.in inmediatamente, lo cual va en contra del propósito de simular un cliente lento.
Intenté lo siguiente, pero se bloquea y nunca devuelve nada:
davy.ai
Para comparar la salida de netcat con un archivo test.out después de que se haya enviado todo el archivo, podemos usar el comando
tee
para escribir la salida de netcat en un archivo mientras aún se envía adiff
para comparación.El código actualizado se vería así:
Aquí, la salida de netcat se envía a
tee
, que la escribe enoutput.txt
. Al mismo tiempo, también se envía adiff
para compararla contest.out
. De esta manera, podemos asegurarnos de que estamos comparando la salida de netcat con la salida esperada después de que se haya enviado todo el archivo, mientras simulamos un cliente lento.