Skip to content

Commit

Permalink
Merge branch 'master' into remove-rc4
Browse files Browse the repository at this point in the history
  • Loading branch information
alex committed Apr 23, 2016
2 parents 4b02a9b + a14d266 commit b4474bb
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
4 changes: 2 additions & 2 deletions setup.py
Expand Up @@ -41,8 +41,8 @@
from setuptools import setup
kw = {
'install_requires': [
'pycrypto >= 2.1, != 2.4',
'ecdsa >= 0.11',
'pycrypto>=2.1,!=2.4',
'ecdsa>=0.11',
],
}
except ImportError:
Expand Down
7 changes: 7 additions & 0 deletions sites/www/changelog.rst
Expand Up @@ -2,6 +2,13 @@
Changelog
=========

* :support:`612` Identify & work around a race condition in the test for
handshake timeouts, which was causing frequent test failures for a subset of
contributors as well as Travis-CI (usually, but not always, limited to Python
3.5). Props to Ed Kellett for assistance during some of the troubleshooting.
* :support:`697` Remove whitespace in our ``setup.py``'s ``install_requires``
as it triggers occasional bugs in some versions of ``setuptools``. Thanks to
Justin Lecher for catch & original patch.
* :bug:`499` Strip trailing/leading whitespace from lines when parsing SSH
config files - this brings things in line with OpenSSH behavior. Thanks to
Alfredo Esteban for the original report and Nick Pillitteri for the patch.
Expand Down
18 changes: 17 additions & 1 deletion tests/test_transport.py
Expand Up @@ -32,7 +32,7 @@
import unittest

from paramiko import Transport, SecurityOptions, ServerInterface, RSAKey, DSSKey, \
SSHException, ChannelException
SSHException, ChannelException, Packetizer
from paramiko import AUTH_FAILED, AUTH_SUCCESSFUL
from paramiko import OPEN_SUCCEEDED, OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
from paramiko.common import MSG_KEXINIT, cMSG_CHANNEL_WINDOW_ADJUST, \
Expand Down Expand Up @@ -800,6 +800,22 @@ def test_L_handshake_timeout(self):
"""
verify that we can get a hanshake timeout.
"""
# Tweak client Transport instance's Packetizer instance so
# its read_message() sleeps a bit. This helps prevent race conditions
# where the client Transport's timeout timer thread doesn't even have
# time to get scheduled before the main client thread finishes
# handshaking with the server.
# (Doing this on the server's transport *sounds* more 'correct' but
# actually doesn't work nearly as well for whatever reason.)
class SlowPacketizer(Packetizer):
def read_message(self):
time.sleep(1)
return super(SlowPacketizer, self).read_message()
# NOTE: prettttty sure since the replaced .packetizer Packetizer is now
# no longer doing anything with its copy of the socket...everything'll
# be fine. Even tho it's a bit squicky.
self.tc.packetizer = SlowPacketizer(self.tc.sock)
# Continue with regular test red tape.
host_key = RSAKey.from_private_key_file(test_path('test_rsa.key'))
public_host_key = RSAKey(data=host_key.asbytes())
self.ts.add_server_key(host_key)
Expand Down

0 comments on commit b4474bb

Please sign in to comment.