es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

Tags:  ,

Answer

  1. Avatar for 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 a diff para comparación.

    El código actualizado se vería así:

    readarray -t FILES < text.in
    
    for ELEMENT in "${FILES[@]}"
    do
      printf "$ELEMENT"
      sleep 2
    done | nc -q -1 localhost 5555 | tee output.txt | diff - test.out
    

    Aquí, la salida de netcat se envía a tee, que la escribe en output.txt. Al mismo tiempo, también se envía a diff para compararla con test.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.

Comments are closed.