moll / node-mitm

Intercept and mock outgoing Node.js network TCP connections and HTTP requests for testing. Intercepts and gives you a Net.Socket, Http.IncomingMessage and Http.ServerResponse to test and respond with. Super useful when testing code that hits remote servers.
Other
641 stars 48 forks source link

Configurable delay options on the original socket #74

Open kamaz opened 3 years ago

kamaz commented 3 years ago

I was wondering how open are you for a PR that would open ability to configure a delay on the socket.

I was thinking something between these line:

Mitm.prototype.connect = function connect(orig, Socket, opts, done) {
    ...
    const origSocket = orig.call(this, opts, done)
    if (client.delay) {
      origSocket.pause()
      setTimeout(() => {
        origSocket.resume()
      }, client.delay)
    } 
    ...
}

Potential usage:

    mitm.on('connect', function (socket: any, _opts: any) {
      console.log('bypassing connection')
      socket.delay = 1000
      socket.bypass()
    })
moll commented 3 months ago

Hey, @kamaz! Thanks for the idea.

Not against supporting delays, but I'm not yet sure what exactly should be delayed. Perhaps the initial connection (client socket's connect)...

What are you trying to test there? Some timeouts on initial connection? Including DNS resolving delays?