2015-04-09 5 views
9

Ich versuche Unit-Test mein Server-Code (nicht-HTTP, benutzerdefinierte Protokoll). Ich muss einen Pseudo-Duplex-Socket erstellen, an den ich Nachrichten asynchron senden und Nachrichten empfangen kann.NodeJS: Wie kann ich eine gefälschte TCP-Socket zum Testen von Servern erstellen

Ich hatte einen marginalen Erfolg beim Erstellen eines Duplex-Streams von Event-Stream ReadArray und WriteArray, aber ReadArray benötigt die Daten im Vordergrund, und WriteArray wird nicht ausgelöst, bis der Stream endet. Ich muss im Laufe der Zeit testen. Eine ideale Lösung wären zwei miteinander verbundene Duplexbuchsen.

Gibt es dafür bereits bestehende Lösungen? Ich würde lieber nicht auf die Initialisierung eines tatsächlichen Servers zurückgreifen müssen, um dies zu testen.

+0

[Knoten-mitm] (https://github.com/moll/node-mitm) kann Ihnen helfen. –

+0

node-mitm dient zur Erfassung ausgehender Anfragen. Ich versuche eine eingehende Anfrage zu simulieren. – ChiperSoft

Antwort

1

Node Mitm kann das wirklich gut tun. Es kann nicht nur HTTP, sondern auch jede TCP-Verbindung abfangen und vortäuschen.

mitm.on("connection", function(socket) { socket.write("Hello back!") }) 

var socket = Net.connect(22, "example.org") 
socket.write("Hello!") 
socket.setEncoding("utf8") 
socket.read() // => "Hello back!" 
+0

Ich versuche nicht, eine eingehende Verbindung abzufangen, ich versuche überhaupt nichts abzufangen. Ich möchte eine Pseudo-TCP-Verbindung erstellen, um sie an meinen Verbindungshandler (die Funktion, die Sie an net.createServer bereitstellen) und andere Funktionen zu übergeben, die ich dann überprüfbar kommunizieren kann, ohne einen tatsächlichen Server starten zu müssen. – ChiperSoft

+0

Dann möchten Sie vielleicht einen Blick darauf werfen: [https://gist.github.com/FGRibreau/7284395](https://gist.github.com/FGRibreau/7284395) –

+0

Ja, ich fand das in meinem Suche. Es ist nicht Pipe-fähig, was es mit meinem Testfall unbrauchbar macht. Ich brauche einen Arbeitsstrom, nicht nur eine Emulation von einem, und ich weiß nicht genug über die Streams api, damit es macht, was ich brauche. Was ich wirklich will, sind nur zwei Duplex-Streams, die miteinander verbunden sind, aber ich kann nicht herausfinden, wie man das macht. – ChiperSoft

Verwandte Themen