@@ -861,6 +861,34 @@ async def run_test():
861861 self .loop .run_until_complete (run_test ())
862862 self .assertEqual (messages , [])
863863
864+ def test_streamwriter_start_tls_updates_reader_transport (self ):
865+ reader = asyncio .StreamReader (loop = self .loop )
866+ protocol = asyncio .StreamReaderProtocol (reader , loop = self .loop )
867+ old_transport = mock .Mock ()
868+ old_transport .get_extra_info .return_value = None
869+ old_transport .is_closing .return_value = False
870+ protocol .connection_made (old_transport )
871+
872+ writer = asyncio .StreamWriter (old_transport , protocol , reader , self .loop )
873+
874+ ssl_context = mock .sentinel .ssl_context
875+ new_transport = mock .Mock ()
876+ new_transport .get_extra_info .return_value = ssl_context
877+ self .loop .start_tls = mock .AsyncMock (return_value = new_transport )
878+
879+ self .loop .run_until_complete (writer .start_tls (ssl_context ))
880+
881+ self .loop .start_tls .assert_awaited_once_with (
882+ old_transport , protocol , ssl_context ,
883+ server_side = False , server_hostname = None ,
884+ ssl_handshake_timeout = None ,
885+ ssl_shutdown_timeout = None ,
886+ )
887+ self .assertIs (writer .transport , new_transport )
888+ self .assertIs (protocol ._transport , new_transport )
889+ self .assertIs (reader ._transport , new_transport )
890+ self .assertTrue (protocol ._over_ssl )
891+
864892 def test_streamreader_constructor_without_loop (self ):
865893 with self .assertRaisesRegex (RuntimeError , 'no current event loop' ):
866894 asyncio .StreamReader ()
0 commit comments