Commit 4e406d8f authored by Antoine Pitrou's avatar Antoine Pitrou

Merged revisions 84650 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r84650 | antoine.pitrou | 2010-09-09 15:31:46 +0200 (jeu., 09 sept. 2010) | 4 lines

  Use transient_internet() where appropriate in test_ssl
  (svn.python.org is sometimes unavailable)
........
parent 2fba0b3d
...@@ -181,102 +181,100 @@ class BasicSocketTests(unittest.TestCase): ...@@ -181,102 +181,100 @@ class BasicSocketTests(unittest.TestCase):
class NetworkedTests(unittest.TestCase): class NetworkedTests(unittest.TestCase):
def setUp(self):
self.old_timeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(30)
def tearDown(self):
socket.setdefaulttimeout(self.old_timeout)
def test_connect(self): def test_connect(self):
s = ssl.wrap_socket(socket.socket(socket.AF_INET), with test_support.transient_internet("svn.python.org"):
cert_reqs=ssl.CERT_NONE) s = ssl.wrap_socket(socket.socket(socket.AF_INET),
s.connect(("svn.python.org", 443)) cert_reqs=ssl.CERT_NONE)
c = s.getpeercert()
if c:
self.fail("Peer cert %s shouldn't be here!")
s.close()
# this should fail because we have no verification certs
s = ssl.wrap_socket(socket.socket(socket.AF_INET),
cert_reqs=ssl.CERT_REQUIRED)
try:
s.connect(("svn.python.org", 443)) s.connect(("svn.python.org", 443))
except ssl.SSLError: c = s.getpeercert()
pass if c:
finally: self.fail("Peer cert %s shouldn't be here!")
s.close() s.close()
# this should succeed because we specify the root cert # this should fail because we have no verification certs
s = ssl.wrap_socket(socket.socket(socket.AF_INET), s = ssl.wrap_socket(socket.socket(socket.AF_INET),
cert_reqs=ssl.CERT_REQUIRED, cert_reqs=ssl.CERT_REQUIRED)
ca_certs=SVN_PYTHON_ORG_ROOT_CERT) try:
try: s.connect(("svn.python.org", 443))
s.connect(("svn.python.org", 443)) except ssl.SSLError:
finally: pass
s.close() finally:
s.close()
# this should succeed because we specify the root cert
s = ssl.wrap_socket(socket.socket(socket.AF_INET),
cert_reqs=ssl.CERT_REQUIRED,
ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
try:
s.connect(("svn.python.org", 443))
finally:
s.close()
@unittest.skipIf(os.name == "nt", "Can't use a socket as a file under Windows") @unittest.skipIf(os.name == "nt", "Can't use a socket as a file under Windows")
def test_makefile_close(self): def test_makefile_close(self):
# Issue #5238: creating a file-like object with makefile() shouldn't # Issue #5238: creating a file-like object with makefile() shouldn't
# delay closing the underlying "real socket" (here tested with its # delay closing the underlying "real socket" (here tested with its
# file descriptor, hence skipping the test under Windows). # file descriptor, hence skipping the test under Windows).
ss = ssl.wrap_socket(socket.socket(socket.AF_INET)) with test_support.transient_internet("svn.python.org"):
ss.connect(("svn.python.org", 443)) ss = ssl.wrap_socket(socket.socket(socket.AF_INET))
fd = ss.fileno() ss.connect(("svn.python.org", 443))
f = ss.makefile() fd = ss.fileno()
f.close() f = ss.makefile()
# The fd is still open f.close()
os.read(fd, 0) # The fd is still open
# Closing the SSL socket should close the fd too
ss.close()
gc.collect()
with self.assertRaises(OSError) as e:
os.read(fd, 0) os.read(fd, 0)
self.assertEqual(e.exception.errno, errno.EBADF) # Closing the SSL socket should close the fd too
ss.close()
gc.collect()
with self.assertRaises(OSError) as e:
os.read(fd, 0)
self.assertEqual(e.exception.errno, errno.EBADF)
def test_non_blocking_handshake(self): def test_non_blocking_handshake(self):
s = socket.socket(socket.AF_INET) with test_support.transient_internet("svn.python.org"):
s.connect(("svn.python.org", 443)) s = socket.socket(socket.AF_INET)
s.setblocking(False) s.connect(("svn.python.org", 443))
s = ssl.wrap_socket(s, s.setblocking(False)
cert_reqs=ssl.CERT_NONE, s = ssl.wrap_socket(s,
do_handshake_on_connect=False) cert_reqs=ssl.CERT_NONE,
count = 0 do_handshake_on_connect=False)
while True: count = 0
try: while True:
count += 1 try:
s.do_handshake() count += 1
break s.do_handshake()
except ssl.SSLError, err: break
if err.args[0] == ssl.SSL_ERROR_WANT_READ: except ssl.SSLError, err:
select.select([s], [], []) if err.args[0] == ssl.SSL_ERROR_WANT_READ:
elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE: select.select([s], [], [])
select.select([], [s], []) elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
else: select.select([], [s], [])
raise else:
s.close() raise
if test_support.verbose: s.close()
sys.stdout.write("\nNeeded %d calls to do_handshake() to establish session.\n" % count) if test_support.verbose:
sys.stdout.write("\nNeeded %d calls to do_handshake() to establish session.\n" % count)
def test_get_server_certificate(self): def test_get_server_certificate(self):
pem = ssl.get_server_certificate(("svn.python.org", 443)) with test_support.transient_internet("svn.python.org"):
if not pem: pem = ssl.get_server_certificate(("svn.python.org", 443))
self.fail("No server certificate on svn.python.org:443!") if not pem:
self.fail("No server certificate on svn.python.org:443!")
try: try:
pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=CERTFILE) pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=CERTFILE)
except ssl.SSLError: except ssl.SSLError:
#should fail #should fail
pass pass
else: else:
self.fail("Got server certificate %s for svn.python.org!" % pem) self.fail("Got server certificate %s for svn.python.org!" % pem)
pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=SVN_PYTHON_ORG_ROOT_CERT) pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
if not pem: if not pem:
self.fail("No server certificate on svn.python.org:443!") self.fail("No server certificate on svn.python.org:443!")
if test_support.verbose: if test_support.verbose:
sys.stdout.write("\nVerified certificate for svn.python.org:443 is\n%s\n" % pem) sys.stdout.write("\nVerified certificate for svn.python.org:443 is\n%s\n" % pem)
def test_algorithms(self): def test_algorithms(self):
# Issue #8484: all algorithms should be available when verifying a # Issue #8484: all algorithms should be available when verifying a
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment