Commit 78d8946d 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 f7734207
...@@ -103,106 +103,104 @@ class BasicTests(unittest.TestCase): ...@@ -103,106 +103,104 @@ class BasicTests(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 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 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()
try:
os.read(fd, 0) os.read(fd, 0)
except OSError as e: # Closing the SSL socket should close the fd too
self.assertEqual(e.errno, errno.EBADF) ss.close()
else: gc.collect()
self.fail("OSError wasn't raised") try:
os.read(fd, 0)
except OSError as e:
self.assertEqual(e.errno, errno.EBADF)
else:
self.fail("OSError wasn't raised")
def test_non_blocking_handshake(self): def test_non_blocking_handshake(self):
s = socket.socket(socket.AF_INET) with 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 as err: break
if err.args[0] == ssl.SSL_ERROR_WANT_READ: except ssl.SSLError as 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 support.verbose: s.close()
sys.stdout.write("\nNeeded %d calls to do_handshake() to establish session.\n" % count) if 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 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 as x: except ssl.SSLError as x:
#should fail #should fail
if support.verbose: if support.verbose:
sys.stdout.write("%s\n" % x) sys.stdout.write("%s\n" % x)
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 support.verbose: if 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)
# Test disabled: OPENSSL_VERSION* not available in Python 3.1 # Test disabled: OPENSSL_VERSION* not available in Python 3.1
def test_algorithms(self): def test_algorithms(self):
......
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