> If it is an interaction with threads and sockets
Let's look at what is involved in that test then:
self.start_server(ssh_server)
This will start a thread for the server and since it's threading server, one for each connection. Each of them have a socket.
Since we're using paramiko, that also means one thread per socket as per paramiko implementation.
Then we have:
t.mkdir('foo')
This will also create a socket and its paramiko thread.
When the server receives the connection, it will start a subprocess and 3 threads for stdin, stdout and stderr each of them
associated with a pipe, so 3 file handles in the parent process and 3 file handles in the server process.
Paramiko use a 0.1 timeout for handling his sockets adding a lot of possible failures.
I can see a lot a *granularity* to add to this design to better track where the failures occur.
Or, come to think of it, I think the design is just to brittle to continue with and we'd better start again from scratch :)
> If it is an interaction with threads and sockets
Let's look at what is involved in that test then:
This will start a thread for the server and since it's threading server, one for each connection. Each of them have a socket.
Since we're using paramiko, that also means one thread per socket as per paramiko implementation.
Then we have:
This will also create a socket and its paramiko thread.
When the server receives the connection, it will start a subprocess and 3 threads for stdin, stdout and stderr each of them
associated with a pipe, so 3 file handles in the parent process and 3 file handles in the server process.
Paramiko use a 0.1 timeout for handling his sockets adding a lot of possible failures.
I can see a lot a *granularity* to add to this design to better track where the failures occur.
Or, come to think of it, I think the design is just to brittle to continue with and we'd better start again from scratch :)