¿Cómo simular los errores de socket? (a veces el servidor o el cliente se desconecta debido a algún error de socket y es imposible de reproducir.) Estaba buscando una herramienta para hacer esto, pero no puedo encontrar uno. ¿Alguien sabe de una herramienta o tiene un ejemplo de código sobre cómo hacer esto? (C# o C/C++)simular errores de socket
Respuesta
Agregue una capa de envoltura a las API que está utilizando para acceder a los sockets y haga que fallen rand()% 100> x por ciento de las veces.
bien, no estoy seguro de cómo hacer eso ... la parte de falla ... – ra170
@ ra170 en su función de contenedor, en lugar de llamar a la función real, haga que devuelva el código de error que significa "error" para esa API alguna parte del time –
Tuve exactamente el mismo problema este verano.
Tuve una clase personalizada Socket
y quería probar qué pasaría si read
o write
lanzaran una excepción. Tenía muchas ganas de imitar la burla de Java marcos, y lo hice así:
que heredaron la clase Socket
en una clase FakeSocket
, y ha creado algo llamado SocketExpectation
. Luego, en las pruebas unitarias, creé tomas falsas, establecí las expectativas y luego pasé ese enchufe falso al código que quería probar.
El FakeSocket
tenían estos métodos (despojadas de detalles innecesarios):
uint32_t write(buffer, length); // calls check
uint32_t read(buffer, length); // calls check
bool matches();
void expect(expectation);
uint32_t check(CallType, buffer, length) const;
Son todos bastante sencillo. check
comprueba los argumentos en contra de la expectativa actual y si todo está de acuerdo con el plan, procede a realizar el requisito SocketExpectation
.
El SocketExpectation
tiene este esquema (también despojado):
typedef enum { write, read } CallType;
SocketExpectation(CallType type);
SocketExpectation &with_arguments(void *a1, uint32_t a2); // expects these args
SocketExpectation &will_return(uint32_t value);
SocketExpectation &will_throw(const char * e); // test error handling
bool matches();
que añade más métodos como los he necesitado. Me gustaría crear como este, a continuación, pasar la toma falsa para el método correspondiente:
fake_socket = FakeSocket();
fake_socket.expect(SocketExpectation(write).with_arguments(....).will_return(...));
fake_socket.expect(SocketExpectation(read).with_arguments(...).will_throw("something"));
leer y escribir no puede lanzar excepciones –
Es una clase de socket personalizada, que arroja excepciones si algo inesperado le sucedió a la conexión. – laura
mi código de toma de pruebas de unidad son probablemente mejor descrito como pruebas de integración mientras manejo del código que se está probando para conectarse a un 'simulacro' compañero remoto. Como el par remoto está bajo el control de la prueba (es simplemente un cliente o servidor simple), puedo hacer que la prueba haga que el par remoto interrumpa la conexión de varias maneras y luego asegúrese de que el código bajo prueba reaccione como se espera. Se necesita un poco de trabajo para configurarlo, pero una vez que tienes todas las piezas en su lugar, es bastante trivial probar la mayoría de las situaciones.
Así que, supongo, mi sugerencia es que en lugar de intentar simular las situaciones que estás enfrentando, debes comprenderlas y luego generarlas de manera confiable.
- 1. ¿Cómo puedo simular errores de TCP/IP?
- 2. Cómo simular los errores de asignación de memoria
- 3. ¿Errores de socket de 10048 en el cliente? ¿Posibles causas?
- 4. Simular o simular Message Queue (JMS)
- 5. Simular consultas de mysql
- 6. Simular transparencia de color
- 7. Android Socket Exception "socket está cerrado"
- 8. Forma simple de simular una red lenta en python
- 9. win32: simular un clic sin simular el movimiento del mouse?
- 10. Error de socket - a veces?
- 11. Socket ReceiveTimeout
- 12. Desasignando InputStream de un socket cierra el socket?
- 13. Error de socket 10052 en el socket UDP
- 14. C#: simular pérdidas de memoria
- 15. Conexiones de socket múltiple
- 16. Programación de socket PHP
- 17. Conceptos básicos de socket
- 18. Android - Socket de servidor
- 19. Filtrar errores de tuberías rotas
- 20. cygwin + programación de socket de Windows
- 21. Cómo simular getApplicationContext
- 22. ¿Simular enumeraciones en TSQL?
- 23. Cómo simular funciones anidadas?
- 24. Cómo simular excepción OutOfMemory
- 25. C# Simular VolumeMute pulse
- 26. Simular micrófono (micrófono virtual)
- 27. Algoritmo para simular daltonismo?
- 28. Simular F11 con javascript
- 29. Simular toque en iphone
- 30. Simular Hover usando jQuery
Desconecte el cable de red? – Eclipse