summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-01-29 02:52:57 +0100
committerVictor Stinner <victor.stinner@gmail.com>2015-01-29 02:52:57 +0100
commit7a46edabd8a2aa665c211cd53d36fa45b4ca856c (patch)
treede38f996d29d8ce285847f25dbb9f777fcb5c634 /tests
parent1162bf22e62544d5fdc3057ba23d2fc0fc244d07 (diff)
downloadtrollius-git-7a46edabd8a2aa665c211cd53d36fa45b4ca856c.tar.gz
Fix _SelectorSslTransport.close()
Don't call protocol.connection_lost() if protocol.connection_made() was not called yet: if the SSL handshake failed or is still in progress. The close() method can be called if the creation of the connection is cancelled, by a timeout for example.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_selector_events.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/tests/test_selector_events.py b/tests/test_selector_events.py
index 5152616..f64e40d 100644
--- a/tests/test_selector_events.py
+++ b/tests/test_selector_events.py
@@ -1427,7 +1427,7 @@ class SelectorSslTransportTests(test_utils.TestCase):
self.assertFalse(tr.can_write_eof())
self.assertRaises(NotImplementedError, tr.write_eof)
- def test_close(self):
+ def check_close(self):
tr = self._make_one()
tr.close()
@@ -1439,6 +1439,19 @@ class SelectorSslTransportTests(test_utils.TestCase):
self.assertEqual(tr._conn_lost, 1)
self.assertEqual(1, self.loop.remove_reader_count[1])
+ test_utils.run_briefly(self.loop)
+
+ def test_close(self):
+ self.check_close()
+ self.assertTrue(self.protocol.connection_made.called)
+ self.assertTrue(self.protocol.connection_lost.called)
+
+ def test_close_not_connected(self):
+ self.sslsock.do_handshake.side_effect = ssl.SSLWantReadError
+ self.check_close()
+ self.assertFalse(self.protocol.connection_made.called)
+ self.assertFalse(self.protocol.connection_lost.called)
+
@unittest.skipIf(ssl is None, 'No SSL support')
def test_server_hostname(self):
self.ssl_transport(server_hostname='localhost')