cast - ¿Cómo simular la falla de la red para fines de prueba(en C#)?
convert string to int c# (11)
Busque un simulador WAN que le permita restringir el ancho de banda (y cortarlo por completo). Siempre me parece interesante ver cómo cambia la experiencia del usuario cuando mis aplicaciones se ejecutan en un entorno de ancho de banda restringido. Mire aquí para obtener información.
Estoy creando lo que podría llamarse el DAL para una nueva aplicación. Desafortunadamente, la conectividad de red a la base de datos es un problema real.
Me gustaría poder bloquear temporalmente el acceso a la red dentro del alcance de mi prueba para poder garantizar que mi DAL se comporte como se espera bajo esas circunstancias.
ACTUALIZACIÓN: hay muchas formas manuales de desactivar la red, pero seguro sería bueno si pudiera activar / desactivar dentro de la prueba en sí.
Depende del problema de red particular que desee simular. Para la mayoría de las personas, es tan simple como "servidor inalcanzable", en cuyo caso solo tratarías de conectarte a un servidor inexistente. Tenga cuidado, sin embargo, porque quiere algo que sea enrutable pero que no responda. Intentar conectarse a dkjdsjk.com fallará inmediatamente (búsqueda de DNS), pero al intentar conectar con www.google.com:1433 (probablemente) se agote el tiempo de espera debido a un firewall, que es la forma en que se comportará su aplicación cuando su servidor de base de datos esté abajo.
Escriba un contenedor para la clase de conectividad de la clase de red que está utilizando (por ejemplo, WebClient) con un interruptor de encendido y apagado :)
O eso, o bloquea tu aplicación en el firewall.
Hay una herramienta que puede usar para simular alta latencia y bajo ancho de banda en pruebas de aplicaciones de bases de datos, como se explica en esta entrada de blog .
Intenta bloquear la conexión con un firewall a mitad de la sesión, ¿no es así?
También me gusta la idea de la envoltura, pero eso es una especie de resumen del problema y probablemente no tengas un comportamiento exacto en el mundo real. Además, insertar la capa de envoltura y luego quitarla puede ser más problemático que su valor.
Editar : ¿ejecuta un script que enciende / apaga el adaptador de red al azar o en intervalos establecidos?
Por el momento, simplemente estoy "deshabilitando" la red configurando una IP estática falsa de la siguiente manera:
using System.Management;
class NetworkController
{
public static void Disable()
{
SetIP("192.168.0.4", "255.255.255.0");
}
public static void Enable()
{
SetDHCP();
}
private static void SetIP(string ip_address, string subnet_mask)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC) {
if ((bool)objMO("IPEnabled")) {
try {
ManagementBaseObject setIP = default(ManagementBaseObject);
ManagementBaseObject newIP = objMO.GetMethodParameters("EnableStatic");
newIP("IPAddress") = new string[] { ip_address };
newIP("SubnetMask") = new string[] { subnet_mask };
setIP = objMO.InvokeMethod("EnableStatic", newIP, null);
}
catch (Exception generatedExceptionName) {
throw;
}
}
}
}
private static void SetDHCP()
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc) {
// Make sure this is a IP enabled device. Not something like memory card or VM Ware
if ((bool)mo("IPEnabled")) {
ManagementBaseObject newDNS = mo.GetMethodParameters("SetDNSServerSearchOrder");
newDNS("DNSServerSearchOrder") = null;
ManagementBaseObject enableDHCP = mo.InvokeMethod("EnableDHCP", null, null);
ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
}
}
}
}
Probablemente no sea útil para simular problemas de red "reales", pero podría apuntar su cadena de conexión DB a una máquina inexistente mientras se encuentre dentro del alcance de su prueba.
Si está intentando una interrupción de red completa para su aplicación, desconectar el cable de red funcionará. A veces puede tener una capa de acceso a datos con múltiples orígenes de datos (en diferentes máquinas) en cuyo caso puede simular una excepción en sus pruebas con un Mock Framework como Rhino Mocks. Aquí hay un pseudocódigo que puede tener en su prueba
void TestUserDBFailure()
{
// ***** THIS IS PSEUDO-CODE *******
//setting up the stage - retrieval of the user info create an exception
Expect.Call(_userRepository.GetUser(null))
.IgnoreArguments()
.Return(new Exception());
// Call that uses the getuser function, see how it reacts
User selectedUser = _dataLoader.GetUserData("testuser", "password");
}
Utilice objetos simulados para crear versiones configurables y destructibles del objeto real, en este caso, la base de datos.
Acabo de encontrar una alternativa que permite cerrar directamente las conexiones TCP:
http://lamahashim.blogspot.ch/2010/03/disabling-network-using-c.html
Está basado en la API de Windows IP Helper (usa DllImport): http://msdn.microsoft.com/en-us/library/windows/desktop/aa366073(v=vs.85).aspx
Pruebe Toxiproxi, puede simular la interrupción de la red.
Tienen la API REST e incluso la API del cliente .NET para cambiar la simulación de la red programáticamente (a partir de su código de prueba) https://github.com/shopify/toxiproxy