Netzwerkausfall simulieren für Testzwecke (in C#)?

  • C#
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von exotobias1.

    Netzwerkausfall simulieren für Testzwecke (in C#)?

    Ich habe ein Service geschrieben und wollte mithilfe von Unit Tests alle möglichen Szenarien testen. Ich will auch testen, wie sich das Programm verhält wenn die Netzwerkverbindung ausfällt. Natürlich könnte ich das manuell testen, aber da ich bereits 8 Tests geschrieben habe, bei denen Netzwerkausfälle simuliert werden (sollten), habe ich keine Lust jedes Mal das Internet abzudrehen.
    Ich habe bereits mehrere Lösungen probiert (z.B. stackoverflow.com/questions/47…re-for-test-purposes-in-c), aber keine Lösung hat bis jetzt funktioniert. Egal was ich mache, es will nicht… Ich habe auch einige Lösungen probiert, damit es die Netzwerkadapter deaktiviert, aber auch die funktionieren nicht.

    Ich bin langsam am Verzweifeln.

    Am besten wäre eine Lösungen, die ca. so aussehen könnte:

    C#-Quellcode

    1. [TestMethod]
    2. public void SU_Login_NoNetworkConnection()
    3. {
    4. // Code...
    5. TurnOffNetworkConnection();
    6. // Code...
    7. TurnOnNetworkConnection();
    8. }

    Ich arbeite mit VS2013 Ultimate, also wenn Ultimate eine Funktion besitzt, die sowas oder ähnliches macht wär ich auch zufrieden. Ich kenn mich mit dem Testen nicht so gut aus. Ich schreib hauptsächlich nur Unit Tests. Bis jetzt hab ich immer eine Playlist gemacht, in denen alle diese Netzwerktests drinnen sind und bevor ich die Playlist ausgeführt habe, habe ich die Internetverbindung geschlossen. Aber nun verlangt eine Testmethode, dass während der Test läuft die Verbindung verschwindet (und wieder kommt). Noch dazu war das einfach nur nervig…

    Ein paar eventuell wichtige Informationen:
    Der Service greift über ein WSDL Dokument (zu C# umgewandelt) auf einen bereits bestehenden Service zu. Dazu muss gesagt werden, der Service wird von unserem Finanzamt angeboten und ist dementsprechend gut programmiert – also echt (Entschuldigung) scheiße… Halb deutsch, halb englisch (Beispiel: (direkt aus dem Dokument entnommen) abfrageOperationCompleted()). Und ich will nicht dran herumpfuschen…Wie schon gesagt ich programmiere mit Visual Studio 2013 Ultimate (Dreamspark Edition) auf Windows 8.1 Update 1. Das Programm selbst ist komplett in C# geschrieben (.NET 4.0).

    Danke im Vorhinein :)
    Mir fallen etwa 20 verschiedene Arten ein, auf die ein Netzwerk/die Internetverbindung kaputt gehen könnte.

    Fängt an bei Dingen wie einem herausgezogenen Ethernetkabel, bis hin zu fiesen Paketverlusten über einzelne Routen.

    Dinge wie fälschliches DNS-NXDomain, Falschauflösungen, transparente Proxys mit dämlichen Captive-Portals, HTTPS-Spoofing/SSL-Proxys, Standardgateway reagiert nicht auf Pakete, Standardgateway reagiert nicht auf ARP-Requests, Standardgateway lehnt Pakete via ICMP ab, DNS-Server lehnt Auflösung ab, Verbindung hat Paketverlust, Verbindung bricht komplett ab, Verbindung wird unterbrochen, Routingfails...
    und sicherlich noch viele andere Ausfallmöglichkeiten, die ich jetzt vergessen habe.
    Du kannst mit VisualStudio verschiedene Netzwerkszenarien simulieren. Ob du damit auch ein Netzwerk ausfallen lassen kannst... das weiß ich leider nicht. Ist aber sicher mal einen Versuch wert.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Manawyrm schrieb:

    Standardgateway reagiert nicht auf ARP-Requests, Standardgateway lehnt Pakete via ICMP ab

    Das sind alles Dinge wo er sich meiner Meinung nach nicht drum zu kümmern hat, weil dies die Schicht 2 und 3 im OSI-Modell betrifft.

    Ich würde mir einfach die möglichen Exceptions ansehen (z.B. für Timeout usw.). Da er ja das .Net-Framework benutzt, müsste man das ja im MSDN nachlesen können.

    Wie man jetzt gezielt diese Exceptions provoziert ohne sie selber zu werfen, weiß ich leider nicht.