Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.12/test/test_asyncio/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.12/test/test_asyncio/__pycache__/test_ssl.cpython-312.pyc

�

(Μg������ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZ	ddlZddlmZddlmZej&dk(ZesdndZd�ZGd�d	ej.�ZGd
�dej2�Zej6edud�Gd
�dej8��ZGd�d�ZGd�dej>�Z Gd�de �Z!Gd�de �Z"y#e
$rdZY��wxYw)�N)�support)�utils�darwin��@c�.�tjd�y�N)�asyncio�set_event_loop_policy���7/usr/local/lib/python3.12/test/test_asyncio/test_ssl.py�tearDownModulers���!�!�$�'r
c�4�eZdZdZdZdd�Zd�Zd�Zd�Zd�Z	y)�MyBaseProtoNc��d|_d|_d|_|�7tj|��|_tj|��|_yy)N�INITIALr��loop)�	transport�state�nbytesr
�Future�	connected�done��selfrs  r�__init__zMyBaseProto.__init__'sB�������
������$�^�^��6�D�N����D�1�D�I�r
c��||_|jdk(sJ|j��d|_|jr|jjd�yy)Nr�	CONNECTED)rrr�
set_result�rrs  r�connection_madezMyBaseProto.connection_made/sI��"����z�z�Y�&�2��
�
�2�&� ��
��>�>��N�N�%�%�d�+�r
c��|jdk(sJ|j��|xjt|�z
c_y)Nr )rr�len�r�datas  r�
data_receivedzMyBaseProto.data_received6s/���z�z�[�(�4�$�*�*�4�(����s�4�y� �r
c�R�|jdk(sJ|j��d|_y)Nr �EOF)r�rs r�eof_receivedzMyBaseProto.eof_received:s$���z�z�[�(�4�$�*�*�4�(���
r
c��|jdvsJ|j��d|_|jr|jjd�yy)N)r r*�CLOSED)rrr!�r�excs  r�connection_lostzMyBaseProto.connection_lost>sC���z�z�1�1�=�4�:�:�=�1���
��9�9��I�I� � ��&�r
r	)
�__name__�
__module__�__qualname__rrrr#r(r,r1rr
rrr#s%���I��D�2�,�!��'r
rc��eZdZd�Zd�Zy)�MessageOutFilterc��||_yr	��msg)rr9s  rrzMessageOutFilter.__init__Fs	����r
c�6�|j|jvryy)NFTr8)r�records  r�filterzMessageOutFilter.filterIs���8�8�v�z�z�!��r
N)r2r3r4rr<rr
rr6r6Es���r
r6z
No ssl modulec���eZdZdZej
Z�fd�Z�fd�Ze	jdejddd�d�Ze	jejfd	�Z
d
�Zd�Zd+d�Zd
d�d�Zej&d��Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd,d�Z d�Z!d�Z"d�Z#d �Z$d!�Z%d"�Z&d#�Z'd$�Z(d%�Z)d&�Z*d'�Z+d(�Z,d)�Z-d*�Z.�xZ/S)-�TestSSLi�c����t�|��tj�|_|j|j�|j
|jj�yr	)�super�setUpr
�new_event_loopr�set_event_loop�
addCleanup�close�r�	__class__s �rrAz
TestSSL.setUpUsB���
��
���*�*�,��	����D�I�I�&�����	�	���(r
c����|jj�stj|j�|j	�tj�t�|�!�yr	)	r�	is_closed�
test_utils�run_briefly�
doCleanupsr�
gc_collectr@�tearDownrFs �rrNzTestSSL.tearDown[sF����y�y�"�"�$��"�"�4�9�9�-���������
���r
N��
)�family�addr�timeout�backlog�max_clientsc���|�@|ttdd�k(r*tj�5}|j}ddd�nd}tj|tj
�}|�t
d��|dkrt
d��|j|�	|j|�|j|�t|||||�S#1swY��xYw#t$r}	|j�|	�d}	~	wwxYw)N�AF_UNIX��	127.0.0.1r�timeout is requiredr�#only blocking sockets are supported)
�getattr�socket�tempfile�NamedTemporaryFile�name�SOCK_STREAM�RuntimeError�
settimeout�bind�listen�OSErrorrE�TestThreadedServer)
r�server_progrQrRrSrTrU�tmp�sock�exs
          r�
tcp_serverzTestSSL.tcp_serverds����<�����D�9�9��0�0�2�c��8�8�D�3�2�(���}�}�V�V�%7�%7�8���?��4�5�5��a�<��D�E�E����� �	��I�I�d�O��K�K�� �
"��$��W�k�;�	;�)3�2�� �	��J�J�L��H��	�s#�
C�"C�C�	C3�C.�.C3c���tj|tj�}|�td��|dkrtd��|j|�t	||||�S)NrZrr[)r]rarbrc�TestThreadedClient)r�client_progrQrSrjs     r�
tcp_clientzTestSSL.tcp_client�s`���}�}�V�V�%7�%7�8���?��4�5�5��a�<��D�E�E����� �!��$��W�.�	.r
c�F�|j|dtji|��S�NrQ)rlr]rW�r�args�kwargss   r�unix_serverzTestSSL.unix_server��!���t����F�V�^�^�F�v�F�Fr
c�F�|j|dtji|��Srr)rpr]rWrss   r�unix_clientzTestSSL.unix_client�rwr
c��tjtj�}|xjtjzc_|j||�|Sr	)�ssl�
SSLContext�PROTOCOL_TLS_SERVER�options�OP_NO_SSLv2�load_cert_chain)r�certfile�keyfile�
sslcontexts    r�_create_server_ssl_contextz"TestSSL._create_server_ssl_context�sA���^�^�C�$;�$;�<�
����c�o�o�-���"�"�8�W�5��r
T��disable_verifyc�j�tj�}d|_|rtj|_|S�NF)r{�create_default_context�check_hostname�	CERT_NONE�verify_mode)rr�r�s   r�_create_client_ssl_contextz"TestSSL._create_client_ssl_context�s-���/�/�1�
�$)�
�!��%(�]�]�J�"��r
c#��K�tjd�}td�}|j|�	d��|j	|�y#|j	|�wxYw�w)Nr
zhas no effect when using ssl)�logging�	getLoggerr6�	addFilter�removeFilter)r�loggerr<s   r�_silence_eof_received_warningz%TestSSL._silence_eof_received_warning�sU�����"�"�9�-��!�"@�A������ �	(������'��F����'�s�2A!�A�A!�A�A!c��	|jj�|j|�y#|j|�wxYwr	)r�stop�fail�rrks  r�_abort_socket_testzTestSSL._abort_socket_test�s,��	��I�I�N�N���I�I�b�M��D�I�I�b�M�s	�.�Ac�*�tj�Sr	)r
rBr+s r�new_loopzTestSSL.new_loop�s���%�%�'�'r
c�*�tj�Sr	)r
�DefaultEventLoopPolicyr+s r�
new_policyzTestSSL.new_policy�s���-�-�/�/r
c��K�t|tj�sy	|j��d{���y7�#tt
f$rYywxYw�wr	)�
isinstancer
�StreamWriter�wait_closed�BrokenPipeError�ConnectionError)r�objs  rr�zTestSSL.wait_closed�sD�����#�w�3�3�4��	��/�/�#�#�#����1�	��	�s1�A�:�8�:�A�:�A�	A�A�Ac���������	�
���d�d�tj�dtz�dtz��jtj
tj���j��g�	����fd��
����	�fd�����
���fd�}�j�5�jj|��ddd��j����	D]}|j��y#1swY�3xYw)Nr��AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA�BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBc���K�|jt����d{���}�j|��|jd�|jt����d{���}�j|��|j	dtd�t
d�g�|j��d{���|j��dz
�y7��7�l7��w�N�OKsSP�A�MrO�	�readexactlyr%�assertEqual�write�
writelines�	bytearray�
memoryview�drainrE��reader�writerr'�A_DATA�B_DATA�CNTrs   ����r�
handle_clientz7TestSSL.test_create_server_ssl_1.<locals>.handle_client������� �+�+�C��K�8�8�D����T�6�*��L�L����+�+�C��K�8�8�D����T�6�*����u�i��o�z�$�7G�H�I��,�,�.� � ��L�L�N��1�H�C�9��9��
!��5�C�C�AC�&C�'AC�6C�7C�C�Cc������K�tj��������fd�}�j|�}|j��j	|���d{���y7��w)Nc���	|j��|j��|j��|jd�}�j	|d�|j��|jd�}�j	|d�|j��jj�jd�y#t$r0}�jj�j|�Yd}~yd}~wwxYw)N�r���SPAM)�starttls�connect�send�recv_allr�rEr�call_soon_threadsafer!�	Exception�
set_exception)	rjr'rkr�r�rR�
client_sslctx�futrs	   ������r�progzCTestSSL.test_create_server_ssl_1.<locals>.test_client.<locals>.prog�s����I��M�M�-�0��L�L��&��I�I�f�%��=�=��+�D��$�$�T�5�1��I�I�f�%��=�=��+�D��$�$�T�7�3��J�J�L�
�I�I�2�2�3�>�>�4�H��!�J��I�I�2�2�3�3D�3D�b�I�I��J�s�BC�	C=�
&C8�8C=�r
rrp�start�append)	rRr��clientr�r�r�r��clientsrs	`  @�����r�test_clientz5TestSSL.test_create_server_ssl_1.<locals>.test_client�sK������.�.�"�C�
I�
I�(�_�_�T�*�F��L�L�N��N�N�6�"��I�I�s�AA#�A!�A#c����K�i}ttj��}tj�ddft
j�
d�|���d{���}	|j}�	j|�|dj�}g}t��D]}|j�|���tjtj|����d{����	jj|j �|j#��d{���y7��7�D7�	#�	jj|j �|j#��d{���7wxYw�w)N��ssl_handshake_timeoutrYr�rQr{)�dictr�
SHORT_TIMEOUTr
�start_serverr]�AF_INET�sockets�
assertTrue�getsockname�ranger��wait_for�gatherr�	call_soonrEr�)�extras�srv�	srv_socksrR�tasks�_�TIMEOUT�	TOTAL_CNTr�r�sslctxr�s      ������rr�z6TestSSL.test_create_server_ssl_1.<locals>.start_servers)������F���0E�0E�F�F��,�,���Q���~�~��	�
���C�
(��K�K�	����	�*� ��|�/�/�1�����y�)�A��L�L��T�!2�3�*��&�&�w�~�~�u�'=�w�G�G�G��	�	�#�#�C�I�I�.��o�o�'�'�'�+��"H��(���	�	�#�#�C�I�I�.��o�o�'�'�'�s[�A	E �D�
E �BD�D�D�8E �D�E �D�E �9E�E�E�E )
r�LONG_TIMEOUT�BUF_MULTIPLIERr�rJ�ONLYCERT�ONLYKEYr�r�r�run_until_completer�r�)
rr�r�r�r�r�r�r�r�r�r�r�r�s
`  @@@@@@@@@@r�test_create_server_ssl_1z TestSSL.test_create_server_ssl_1�s��������	��&�&���~�-���~�-���0�0�����!3�!3�
���7�7�9�
���	� 	�	�:	(�	(�6�
/�
/�
1��I�I�(�(���8�2�	
����i�(��F��K�K�M��2�
1�s�!C0�0C9c���������	�
��jjd�d�d�dtz�dtz��jtj
tj��
�j������
fd��	�����fd�}�����fd�}����	fd�}�j�5||�ddd��j�5||�ddd�y#1swY�+xYw#1swYyxYw)	Nrr�r�r�c�@��|j�d��|jt���}�j|��|j	d�|jt���}�j|��|j	d�|j�y)NT��server_sider�r�)r�r�r%r�r�rE)rjr'r�r�rr�s  ����r�serverz4TestSSL.test_create_connection_ssl_1.<locals>.server3s�����M�M�� �
�
"��=�=��V��-�D����T�6�*��I�I�e���=�=��V��-�D����T�6�*��I�I�g���J�J�Lr
c����K�i}ttj��}tj|�dd�|���d{���\}}|j���j
|jd��d{���d�|j���j
|jd��d{���d��dz
�|j��j|��d{���y7��7�t7�<7��w)	Nr���r{�server_hostnamer�r�r�r�rO)
r�rr�r
�open_connectionr�r�r�rEr�)	rRr�r�r�r�r�r�r�rs	    �����rr�z4TestSSL.test_create_connection_ssl_1.<locals>.clientBs�������F���0E�0E�F�F�#*�#:�#:��!� "�$��	$��N�F�F�
�L�L�� ����6�#5�#5�a�#8�8�%�@��L�L�� ����6�#5�#5�a�#8�8�'�B�
�1�H�C��L�L�N��"�"�6�*�*�*�!��9��9��
+�sE�8C.�C&�7C.�3C(�49C.�-C*�.2C.� C,�!C.�(C.�*C.�,C.c���K�tj�}|j|�tj|�d���d{���\}}|j	���j|j
d��d{���d�|j	���j|j
d��d{���d��dz
�|j��j|��d{���|j�y7��7��7�L7��w)Nr�)rjr{r�r�r�r�r�rO)	r]r�r
r�r�r�r�rEr�)	rRrjr�r�r�r�r�r�rs	    �����r�client_sockz9TestSSL.test_create_connection_ssl_1.<locals>.client_sockXs�������=�=�?�D��L�L���#*�#:�#:��!� "�$$�$�N�F�F�

�L�L�� ����6�#5�#5�a�#8�8�%�@��L�L�� ����6�#5�#5�a�#8�8�'�B�
�1�H�C��L�L�N��"�"�6�*�*�*��J�J�L�!$��9��9��
+�sH�AD�C?�7D�<D�=9D�6D�72D�)D�*D�D�D�Dc�(��d�d�}�j�����5}g}t��D]#}|j||j���%�jj||��ddd��j
���y#1swY�xYw)Nrc��BK�tj|��d{���S7��wr	�r
r��r�s r�_gatherzBTestSSL.test_create_connection_ssl_1.<locals>.run.<locals>._gatherqs����$�^�^�U�3�3�3�3������rUrT�rlr�r�rRrr�r��	�cororr�r�r�r�r�rr�s	     ����r�runz1TestSSL.test_create_connection_ssl_1.<locals>.runms�����C�
4�����-6�)2�!�4�7:����y�)�A��L�L��c�h�h��0�*��	�	�,�,�W�e�_�=�4�
���S�)�,�4�4���AB�B)	r�set_exception_handlerr�r�rJr�r�r�r�)rr�r�rr�r�r�r�r�r�r�s`   @@@@@@@r�test_create_connection_ssl_1z$TestSSL.test_create_connection_ssl_1$s�����	�	�'�'��-����	��~�-���~�-���0�0�������
���7�7�9�
�
	�	+�	+�,	�	�*	-�&�
/�
/�
1���K�2��
/�
/�
1����2�
1�2�
1��2�
1�s�*	C�	C)�C&�)C2c�p����j���jjd��d�}��fd�}�j|dd��5}�j	t
d�5�jj
||j��ddd�ddd�y#1swY�xYw#1swYyxYw)Nc��yr	r�rts r�<lambda>zCTestSSL.test_create_connection_ssl_slow_handshake.<locals>.<lambda>����dr
c��	|jd�|j�y#t$rY�wxYw#|j�wxYw�N��r��ConnectionAbortedErrorrE�rjs rr�zATestSSL.test_create_connection_ssl_slow_handshake.<locals>.server�s>��
��
�
�k�*��
�
���*�
��
���
�
��s�$�	0�3�0�3�Ac���K�tj|�ddd���d{���\}}|j��j|��d{���y7�17��w)Nr�g�?�r{r�r�)r
r�rEr��rRr�r�r�rs   ��rr�zATestSSL.test_create_connection_ssl_slow_handshake.<locals>.client�sV�����#*�#:�#:��!� "�&)�	$+�+�N�F�F�

�L�L�N��"�"�6�*�*�*�
+��
+�s!�A�A�+A�
A�A�ArOrzSSL handshake.*is taking longer)r�rr
rl�assertRaisesRegexrr�rR)rr�r�r�r�s`   @r�)test_create_connection_ssl_slow_handshakez1TestSSL.test_create_connection_ssl_slow_handshake�s�����7�7�9�
�	
�	�	�'�'�(:�;�	�	+��_�_�V�)*�%&��(�+.��'�'�*�6�8��	�	�,�,�V�C�H�H�-=�>�	8�	(�(�8�8��	(�(�s$�B,�#,B �B,� B)	�%B,�,B5c�������jjd���jtjtj
���j
d����fd�}��fd�}�j|dd��5}�jtj�5�jj||j��ddd�ddd�y#1swY�xYw#1swYyxYw)Nc��yr	rrs rrzGTestSSL.test_create_connection_ssl_failed_certificate.<locals>.<lambda>�rr
Fr�c����	|j�d��|j�|j�y#tjtf$rY�,wxYw#|j�wxYw)NTr�)r�r�r{�SSLErrorrfrE)rjr�s �rr�zETestSSL.test_create_connection_ssl_failed_certificate.<locals>.server�s^���
��
�
�� $��&������
�
����L�L�'�*�
��
���
�
��s!�#7�A�A�A�A�A(c����K�tj|�dtjd���d{���\}}|j	��j|��d{���y7�17��w)Nr�r)r
r�rr�rEr�rs   ��rr�zETestSSL.test_create_connection_ssl_failed_certificate.<locals>.client�s\�����#*�#:�#:��!� "�&-�&;�&;�	$=�=�N�F�F�

�L�L�N��"�"�6�*�*�*�
=��
+�s!�)A"�A�+A"�A �A"� A"rOr)
rr
r�rJr�r�r�rl�assertRaisesr{�SSLCertVerificationErrorr�rR)rr�r�r�r�r�s`   @@r�-test_create_connection_ssl_failed_certificatez5TestSSL.test_create_connection_ssl_failed_certificate�s�����	�	�'�'�(:�;��0�0�������
���7�7�u�7�M�
�		�	+��_�_�V�)*�%&��(�+.��"�"�3�#?�#?�@��	�	�,�,�V�C�H�H�-=�>�A�	(�(�A�@��	(�(�s$�? C(�,C�C(�C%	�!C(�(C1c�������tj��g��jj�fd��d��fd�}��fd�}�j	|dd��5}�jtj�5�jj||j��ddd�ddd��j���j�g�y#1swY�5xYw#1swY�9xYw)Nc�&���j|�Sr	)r�)r�ctx�messagess  �rrz4TestSSL.test_ssl_handshake_timeout.<locals>.<lambda>�s���(�/�/�#�:Nr
Fc���	|jd�|j�y#t$rd�Y�wxYw#|j�wxYw)NrTr)rj�server_side_aborteds �rr�z2TestSSL.test_ssl_handshake_timeout.<locals>.server�sB���
��
�
�k�*��
�
���*�
+�&*�#�
+���
�
��s�%�3�6�3�6�Ac	���K�tj�jjtjg|���ddd��d��d{���y7��w)Nr�g$@r��?)r
r�r�create_connection�Protocol)rRr�rs ��rr�z2TestSSL.test_ssl_handshake_timeout.<locals>.client�sY������"�"�+��	�	�+�+��$�$�0��0�&�$&�*.�0���
�
�s�AA�A�ArOr)rJ�simple_client_sslcontextrr
rlr!r
�TimeoutErrorr�rRr�r�)rr�r�r�r�r'r)s`   @@@r�test_ssl_handshake_timeoutz"TestSSL.test_ssl_handshake_timeout�s����#�;�;�=�
����	�	�'�'�(N�O�#��	�	��_�_�V�)*�%&��(�+.��"�"�7�#7�#7�8��	�	�,�,�V�C�H�H�-=�>�9�	(�	
���+�,�	
����2�&�9�8��	(�(�s$� C&�:,C�&C&�C#	�C&�&C/c�6������tj���jjd��d�d�d�}G��fd�dtj
�����fd�}�j
|dd��5}�jt�5�jj||j��ddd�ddd��r&�r�jd	�y�jd
�y�r�jd�yy#1swY�NxYw#1swY�RxYw)Nc��yr	r�rr&s  rrz<TestSSL.test_ssl_handshake_connection_lost.<locals>.<lambda>����$r
Fc�F�|jd�|j�y)Nr)�recvrErs rr�z:TestSSL.test_ssl_handshake_connection_lost.<locals>.servers���I�I�d�O��J�J�Lr
c�"��eZdZ�fd�Z�fd�Zy)�?TestSSL.test_ssl_handshake_connection_lost.<locals>.ClientProtoc�
��d�y�NTr)rr�connection_made_calleds  �rr#zOTestSSL.test_ssl_handshake_connection_lost.<locals>.ClientProto.connection_made	�	���)-�&r
c�
��d�yr:r)rr0�connection_lost_calleds  �rr1zOTestSSL.test_ssl_handshake_connection_lost.<locals>.ClientProto.connection_lost
r<r
N)r2r3r4r#r1)r>r;s��r�ClientProtor8s
���
.�
.r
r?c��f�K��jj�g|���dd���d{���fy7��w)Nr�r�)rr,)rRr?r�rs ���rr�z:TestSSL.test_ssl_handshake_connection_lost.<locals>.clientsB�����-�$�)�)�-�-��$��$�"� "�	$�
$�
%�
$�s�%1�/�1rOrz$unexpected call to connection_lost()zEunexpected call to connection_lost() withoutcalling connection_made()z$unexpected call to connection_made())rJr.rr
r
r-rlr!�ConnectionResetErrorr�rRr�)rr�r�r�r?r�r>r;s`   @@@@r�"test_ssl_handshake_connection_lostz*TestSSL.test_ssl_handshake_connection_lost�s����#�;�;�=�
�	
�	�	�'�'�(>�?�!&��!&��	�
	.�'�*�*�	.�	%��_�_�V�)*�%&��(�+.��"�"�#7�8��	�	�,�,�V�C�H�H�-=�>�9�	(�"�%��	�	�@�A��	�	�6�7�
#��I�I�<�=�$�9�8��	(�(�s$�4D�
,D�6D�D	�D�Dc�t�tj}tj|�}|jtj
tj�t|d�rd|_tj|_
tj|�}t|d�rd|_tj|_
y)Nr�F)r{r}r|r�rJr�r��hasattrr�r�r�)r�proto�server_context�client_contexts    r� test_ssl_connect_accepted_socketz(TestSSL.test_ssl_connect_accepted_socket(s����'�'������.���&�&�z�':�':�J�<N�<N�O��>�#3�4�,1�N�)�%(�]�]��"�����.���>�#3�4�,1�N�)�%(�]�]��"r
c����
�����|j�G�
�fd�dt�}tjtj�}|j	d�|jd�|j
��d�d�d�
����fd�}tj|d�	�}|j�|j�\}}|��
����_i}	|rttj��}	�j�j�fd�|fd
|i|	���}
�j!�|j#�|j#�|j%d�|j'|j)��|j+�j,d�|j+�j.t1���|j+��
�|
j3�\}}|r&|j5d|j6j8�|j#�|jj;t=j>d��y)Nc�.���eZdZ��fd�Z��fd�Z�xZS)�5TestSSL.test_connect_accepted_socket.<locals>.MyProtoc�Z��t�|�|��j�j�yr	)r@r1r�r�)rr0rGrs  ��rr1zETestSSL.test_connect_accepted_socket.<locals>.MyProto.connection_lost:s �����'��,����t�y�y�)r
c�Z��t�|�|�|jj��yr	)r@r(rr�)rr'rG�expected_responses  ��rr(zCTestSSL.test_connect_accepted_socket.<locals>.MyProto.data_received>s#�����%�d�+����$�$�%6�7r
)r2r3r4r1r(�
__classcell__)rGrNrs@��r�MyProtorK8s���
*�
8�
8r
rPrXrOs	test datasrogerc�>��	tjtj�}���j|�}|j��|j	��|jd��|j
�y#t$r}td|�Yd}~yd}~wwxYw)N�cz8Failure in client thread in test_connect_accepted_socket)	r]r��wrap_socketr��sendallr6rEr��print)�csockr0rR�
client_ssl�message�responses  ����rr�z4TestSSL.test_connect_accepted_socket.<locals>.clientKs����
��
�
�f�n�n�5���)�&�2�2�5�9�E��
�
�d�#��
�
�g�&� �:�:�b�>�����
���
��N�����
�s�A9A=�=	B�B�BT)�target�daemonrr�c����Sr	r�rEs�rrz6TestSSL.test_connect_accepted_socket.<locals>.<lambda>gs���r
r{r.�SSL皙�����?) rrr]r�rdrer��	threading�Threadr��acceptr�rr��create_task�connect_accepted_socket�run_foreverrE�join�assertFalse�is_aliver�rrr%�result�assertInrGr2r�r
�sleep)r�
server_sslrWrP�lsockr��thread�connr�r��f�trrRrNrrXrErYs  `         @@@@@@r�test_connect_accepted_socketz$TestSSL.test_connect_accepted_socket5s�����y�y��	8�k�	8��
�
�f�n�n�-��
�
�
�#�$�
���Q��� � �"������$��
	��!�!���=�������,�,�.���a��T�"����
������0E�0E�F�F����(�D�(�(���
�+5�
��
�
��	
�����
�
��
���
����A��������*�+�������h�/�������s�7�|�4�����#4�5����
���A���M�M�%����!6�!6�7�
���
��	�	�$�$�W�]�]�3�%7�8r
c�t�����jjd��tj��tj���fd�}��fd�}�j|dd��5}�jj
||j��}ddd��jd�y#1swY�xYw)Nc��yr	rr3s  rrz=TestSSL.test_start_tls_client_corrupted_ssl.<locals>.<lambda>|r4r
c�p��|j�}	|j�d��|jd�|jd�|j	d�|j�|j�y#t
j$rY�6wxYw#|j�|j�wxYw)NTr��A
rOs!please corrupt the SSL connection)�dupr�rTr�r�r{rrE)rj�	orig_sockr�s  �rr�z;TestSSL.test_start_tls_client_corrupted_ssl.<locals>.server�s�������
�I�
"��
�
�� $��&����V�$��
�
�a� ����C�D��
�
�����!��	�<�<�
��
���
�
�����!�s$�AA:�:B�
B�B�B�"B5c����K�tj|�dd���d{���\}}�j|j��d{���d�|j	d��jtj�5|j��d{���ddd�|j�	�j|��d{���y7��7��7�;#1swY�:xYw7�#tj$rYywxYw�w)Nr�r�rv�B�OK)
r
r�r��readliner�r!r{rrEr�rs   ��rr�z;TestSSL.test_start_tls_client_corrupted_ssl.<locals>.client�s������#*�#:�#:��!� "�$$�$�N�F�F�

���6�?�?�#4�4�f�=��L�L����"�"�3�<�<�0��o�o�'�'�'�1��L�L�N�
��&�&�v�.�.�.��$��
5��(��1�0��/���<�<�
���
�s��C6�C	�%C6�C�9C6�=C�C
�C�C6�/C�C�C�C6�C6�
C�C�C6�C�C3�0C6�2C3�3C6rOrr{)	rr
rJ�simple_server_sslcontextr.rlr�rRr�)rr�r�r��resr�r�s`    @@r�#test_start_tls_client_corrupted_sslz+TestSSL.test_start_tls_client_corrupted_ssl{s�����	�	�'�'�(>�?��4�4�6��"�;�;�=�
�
	"�	�"�_�_�V�)*�%&��(�+.��)�)�.�.�v�c�h�h�/?�@�C�	(�	
����d�#�
(�(�s�',B.�.B7c��������d�jz�tj��tj�����fd�}G�fd�dtj
������fd�}�j
|�j��5}�jjt	j||j�tj���ddd�y#1swYyxYw)N�1c���|j�j�|jt���}�j	t|�t���|j�d��|j
d�|jt���}�j	t|�t���|j�|j�y�NTr��O�	rcr�r�r%r�r�rT�unwraprE�rjr'�	HELLO_MSGrrFs  ���r�servez8TestSSL.test_start_tls_client_reg_proto_1.<locals>.serve�s�����O�O�D�L�L�)��=�=��Y��0�D����S��Y��I��7��M�M�.�d�M�;��L�L����=�=��Y��0�D����S��Y��I��7��K�K�M��J�J�Lr
c�*��eZdZd�Z�fd�Zd�Zd�Zy)�>TestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProtoc�.�||_||_d|_y�Nr��on_data�on_eof�con_made_cnt�rr�r�s   rrzGTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.__init__����&���$���$%��!r
c�h��|xjdz
c_�j|jd�y�NrO�r�r��rErqrs  �rr#zNTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.connection_made��*����"�"�a�'�"�� � ��!3�!3�Q�7r
c�:�|jj|�yr	�r�r!r&s  rr(zLTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.data_received�������'�'��-r
c�:�|jjd�yr:�r�r!r+s rr,zKTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.eof_received�������&�&�t�,r
N�r2r3r4rr#r(r,r+s�rr?r������
&�

8�

.�
-r
r?c�����K�tjd��d{����	jj���	jj���	jj���fd�g|����d{���\}}|j���	jj
||���d{���}�	j��d{���d�|j����d{���|j�y7��7��7�N7�;7��w)Nr+c�������Sr	r�r?r�r�s���rrzKTestSSL.test_start_tls_client_reg_proto_1.<locals>.client.<locals>.<lambda>������G�V�4r
r�)	r
rkr�
create_futurer,r��	start_tlsr�rE)
rRrqrE�new_trr�r�r?r�rGrs
    @@����rr�z9TestSSL.test_start_tls_client_reg_proto_1.<locals>.client�s�������-�-��$�$�$��i�i�-�-�/�G��Y�Y�,�,�.�F�9�d�i�i�9�9�4�=�7;�=�=�I�B��
�H�H�Y���9�9�.�.�r�5�.�I�I�F����7�]�D�1��L�L��#��L�L��L�L�N�
%��
=��J��*���sX�D
�D�AD
�<D�=8D
�5D�6D
�
D�D
�*D�+D
�D
�D
�D
�D
�rS)�PAYLOAD_SIZErJr}r.r
r-rlr�rr�r�rRrr��rr�r�r�r?r�rGrFs`   @@@@r�!test_start_tls_client_reg_proto_1z)TestSSL.test_start_tls_client_reg_proto_1�s�����4�,�,�,�	�#�<�<�>��#�<�<�>��
	�	-�'�*�*�	-�"	�$�_�_�U�D�L�L�_�
9�S��I�I�(�(�� � �����!1�)0�)>�)>�@�
A�:�
9�
9�s
�AC�C%c�R������d�jz��jtjtj���j�����fd�}G�fd�dtj������fd�}�j|�j��5}�jjt
j||j�tj���ddd�t!j"����j%���y#1swY�5xYw)Nr�c�@��|j�j�|j�d��|jd�|j	t���}�j
t|�t���|j�|j�yr�)	rcr�r�rTr�r%r�r�rEr�s  ���rr�z9TestSSL.test_create_connection_memory_leak.<locals>.serve�sk����O�O�D�L�L�)��M�M�.�d�M�;��L�L����=�=��Y��0�D����S��Y��I��7��K�K�M��J�J�Lr
c�*��eZdZd�Z�fd�Zd�Zd�Zy)�?TestSSL.test_create_connection_memory_leak.<locals>.ClientProtoc�.�||_||_d|_yr�r�r�s   rrzHTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.__init__�r�r
c�v��||_|xjdz
c_�j|jd�yr�)rqr�r�r�s  �rr#zOTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.connection_made�s1�������"�"�a�'�"�� � ��!3�!3�Q�7r
c�:�|jj|�yr	r�r&s  rr(zMTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.data_receivedr�r
c�:�|jjd�yr:r�r+s rr,zLTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.eof_received	r�r
Nr�r+s�rr?r��s���
&�

8�
.�
-r
r?c�����K�tjd��d{����jj���jj���jj���fd�g|��d�i��d{���\}}�j��d{���d�|j
����d{���|j�y7��7�O7�97��w)Nr+c�������Sr	rr�s���rrzLTestSSL.test_create_connection_memory_leak.<locals>.client.<locals>.<lambda>r�r
r{r�)r
rkrr�r,r�r�rE)	rRrqrEr�r�r?r�rGrs	   @@����rr�z:TestSSL.test_create_connection_memory_leak.<locals>.clients�������-�-��$�$�$��i�i�-�-�/�G��Y�Y�,�,�.�F�9�d�i�i�9�9�4�$�7;�$�"�$�$�I�B��
���7�]�D�1��H�H�Y���L�L��H�H�J�
%��
$��+���sF�C�C
�A C�?C�C�C�C�7C�8C�C�C�Cr�)r�r�rJr�r�r�r
r-rlr�rr�r�rRrr��weakref�ref�assertIsNoner�s`   @@@@r�"test_create_connection_memory_leakz*TestSSL.test_create_connection_memory_leak�s�����4�,�,�,�	��8�8�����!3�!3�5���8�8�:��
	�	-�'�*�*�	-�&	� �_�_�U�D�L�L�_�
9�S��I�I�(�(�� � �����!1�)0�)>�)>�@�
A�:�!���^�4�����.�*�+�:�
9�s
�AD�D&c�
�������	�d�jz�tj��	tj��d����	fd�}G�fd�dtj
��G�fd�dtj��������fd�}�j|�j�	�5}�jjt	j||j��j�	��ddd�y#1swYyxYw)
Nr�rc�Z��|j�j�|jt���}�j	t|�t���|j�d��|j
d�|jt���}�j	t|�t���|j
d�|jt���}�j	t|�t���|j�|j�y)NTr�r��2r�r�s  ���rr�z8TestSSL.test_start_tls_client_buf_proto_1.<locals>.serve.s�����O�O�D�L�L�)��=�=��Y��0�D����S��Y��I��7��M�M�.�d�M�;��L�L����=�=��Y��0�D����S��Y��I��7��L�L����=�=��Y��0�D����S��Y��I��7��K�K�M��J�J�Lr
c�0��eZdZd�Z�fd�Zd�Zd�Zd�Zy)�CTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirstc�2�||_td�|_yr�)r�r��buf)rr�s  rrzLTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.__init__Bs��&���$�Q�<��r
c����dz
�yr�r�rrq�client_con_made_callss  �rr#zSTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.connection_madeF����%��*�%r
c��|jSr	)r�)r�sizehints  r�
get_bufferzNTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.get_bufferJs���x�x�r
c�t�|dk(sJ�|jjt|jd|��yr�)r�r!�bytesr�)r�nsizes  r�buffer_updatedzRTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.buffer_updatedMs0����z�!�z����'�'��d�h�h�v��.>�(?�@r
c��yr	rr+s rr,zPTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.eof_receivedQs��r
N)r2r3r4rr#r�r�r,�r�s�r�ClientProtoFirstr�As���
(�
+�
 �
A�
r
r�c�*��eZdZd�Z�fd�Zd�Zd�Zy)�DTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecondc�.�||_||_d|_yr�r�r�s   rrzMTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.__init__Ur�r
c����dz
�yr�rr�s  �rr#zTTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.connection_madeZr�r
c�:�|jj|�yr	r�r&s  rr(zRTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.data_received^r�r
c�:�|jjd�yr:r�r+s rr,zQTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.eof_receivedar�r
Nr�r�s�r�ClientProtoSecondr�Ts���
&�

+�
.�
-r
r�c����K�tjd��d{����jj���jj�}�jj�}�jj��fd�g|����d{���\}}|j�	��jj
||���d{���}�j��d{���d�|j�	�|j�||���j|�d{���d�|j�	�|�d{���|j��j�
d�y7��P7��7��7��7�P7�2�w)Nr+c������Sr	r)r��on_data1s��rrzKTestSSL.test_start_tls_client_buf_proto_1.<locals>.client.<locals>.<lambda>ls���(��2r
r�r�rO)
r
rkrr�r,r�r�r��set_protocolrE)
rR�on_data2r�rqrEr�r�r�r�r�r�rGrs
      @������rr�z9TestSSL.test_start_tls_client_buf_proto_1.<locals>.clientds7������-�-��$�$�$��y�y�.�.�0�H��y�y�.�.�0�H��Y�Y�,�,�.�F�9�d�i�i�9�9�2�;�59�;�;�I�B��
�H�H�Y���9�9�.�.�r�5�.�I�I�F����8�^�T�2��L�L��#���� 1�(�F� C�D����8�^�T�2��L�L��#��L�L��L�L�N�

���2�A�6�3
%��;��J��+��,���sk�E:�E-�A6E:�E0�8E:�
E2�E:�"E4�#AE:�%E6�&E:�E8�(E:�0E:�2E:�4E:�6E:�8E:r�)
r�rJr}r.r
�BufferedProtocolr-rlr�rr�r�rR)
rr�r�r�r�r�r�r�rGrFs
`   @@@@@@r�!test_start_tls_client_buf_proto_1z)TestSSL.test_start_tls_client_buf_proto_1&s�����4�,�,�,�	�#�<�<�>��#�<�<�>�� !��	�&	�w�7�7�	�&	-�� 0� 0�	-� 	7�	7�8�_�_�U�D�L�L�_�
9�S��I�I�(�(�� � �����!1�)-���7�
8�:�
9�
9�s
�%AC9�9Dc��������d�jz�tj���jj	�����fd�}G�fd�dt
j�������fd�}�j|�j��5}�jjtj||j�tj���ddd�y#1swYyxYw)Nr�c���|j�j�|jt���}�j	t|�t���	�j
j
�jd�|jd�}|j�y#t$rY�wxYw#|j�wxYwr)
rcr�r�r%r�rr�r!rrE)rjr'r�r�server_waits_on_handshakes  ���rr�z8TestSSL.test_start_tls_slow_client_cancel.<locals>.serve�s�����O�O�D�L�L�)��=�=��Y��0�D����S��Y��I��7�
��	�	�.�.�-�8�8�$�@��}�}�[�1���
�
���*�
��
���
�
��s$�7B$�$	B0�-B3�/B0�0B3�3Cc�*��eZdZd�Z�fd�Zd�Zd�Zy)�>TestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProtoc�.�||_||_d|_yr�r�r�s   rrzGTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.__init__�r�r
c�h��|xjdz
c_�j|jd�yr�r�r�s  �rr#zNTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.connection_made�r�r
c�:�|jj|�yr	r�r&s  rr(zLTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.data_received�r�r
c�:�|jjd�yr:r�r+s rr,zKTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.eof_received�r�r
Nr�r+s�rr?r��r�r
r?c��.���K�tjd��d{����jj���jj���jj���fd�g|����d{���\}}|j���	�d{����j
tj�5tj�jj||��d��d{���ddd�y7��7��7�j7�#1swYyxYw�w)Nr+c�������Sr	rr�s���rrzKTestSSL.test_start_tls_slow_client_cancel.<locals>.client.<locals>.<lambda>�r�r
)
r
rkrr�r,r�r!r/r�r�)
rRrqrEr�r�r?r�rGrr�s
   @@�����rr�z9TestSSL.test_start_tls_slow_client_cancel.<locals>.client�s�������-�-��$�$�$��i�i�-�-�/�G��Y�Y�,�,�.�F�9�d�i�i�9�9�4�=�7;�=�=�I�B��
�H�H�Y��+�+�+��"�"�7�#7�#7�8��&�&��I�I�'�'��E�>�B�����9�8�
%��
=��

,����9�8�s^�D�D�AD�<D�=D�D�#D�>5D	�3D�4D	�8
D�D�D�D	�	D�Dr�)r�rJr.rr�r
r-rlr�r�r�rRrr�)rr�r�r�r?r�rGr�s`   @@@@r�!test_start_tls_slow_client_cancelz)TestSSL.test_start_tls_slow_client_cancel�s�����4�,�,�,�	�#�<�<�>��$(�I�I�$;�$;�$=�!�
	�	-�'�*�*�	-�"	�	�$�_�_�U�D�L�L�_�
9�S��I�I�(�(�� � �����!1�)0�)>�)>�@�
A�:�
9�
9�s
�AC#�#C,c���������d�jz�tj��tj�����fd��Gd�dtj
�����fd������fd�}�jj|��y)Nr�c�^��|j�j�|j|�|jt	���}�jt	|�t	���|j
��|j��|j�|j�yr	)
rcr�r�r�r%r�r�rTr�rE)rjrRr'r�rGrs   ���rr�z/TestSSL.test_start_tls_server_1.<locals>.client�ss����O�O�D�L�L�)��L�L����=�=��Y��0�D����S��Y��I��7��M�M�.�)��L�L��#��K�K�M��J�J�Lr
c�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�4TestSSL.test_start_tls_server_1.<locals>.ServerProtoc�<�||_||_||_d|_y�Nr
)�on_conr��on_con_lostr')rr�r�r�s    rrz=TestSSL.test_start_tls_server_1.<locals>.ServerProto.__init__�s��$���$���#.�� ���	r
c�:�|jj|�yr	)r�r!)rrqs  rr#zDTestSSL.test_start_tls_server_1.<locals>.ServerProto.connection_made�s�����&�&�r�*r
c�.�|xj|z
c_yr	)r'r&s  rr(zBTestSSL.test_start_tls_server_1.<locals>.ServerProto.data_received�s���	�	�T�!�	r
c�:�|jjd�yr�r�r+s rr,zATestSSL.test_start_tls_server_1.<locals>.ServerProto.eof_received�s�����&�&�q�)r
c�v�|�|jjd�y|jj|�yr	)r�r!r�r/s  rr1zDTestSSL.test_start_tls_server_1.<locals>.ServerProto.connection_lost�s/���;��$�$�/�/��5��$�$�2�2�3�7r
N)r2r3r4rr#r(r,r1rr
r�ServerProtor��s��
 �
+�
"�
*�
8r
r�c��p�K�|�d{���}|j���j|jd��jj	||�d�j
���d{���}|�d{���|�d{����j|j��|j
�y7��7�G7�?7�7�w)Nr
T)r�r�)r�r�r'rr�r�rE)	rEr�r�r�rqr�r�rrFs	      ���r�mainz-TestSSL.test_start_tls_server_1.<locals>.main�s��������B��H�H�Y�����U�Z�Z��-��9�9�.�.��E�>� �&*�l�l�/�4�4�F�
�L�L�������U�Z�Z��3��L�L�N���
4��

���sF�B6�B.�AB6�(B0�)	B6�2B2�3	B6�<B4�=2B6�0B6�2B6�4B6c	��x���K��	jj�}�	jj�}�	jj�}�|||���	jj�fd�dd��d{���}|jdj	���	j��fd��	j��5tj��|||��	j���d{���ddd�|j�|j��d{���y7��7�7#1swY�6xYw7��w)Nc����Sr	rr]s�rrzCTestSSL.test_start_tls_server_1.<locals>.run_main.<locals>.<lambda>s���r
rYrc����|��Sr	r)rjrRr�s ��rrzCTestSSL.test_start_tls_server_1.<locals>.run_main.<locals>.<lambda>s���f�T�4�.@r
r�)rr��
create_serverr�r�rpr�r
r�rEr�)
r�r�r�r�rRrEr�r�r�rs
    @@����r�run_mainz1TestSSL.test_start_tls_server_1.<locals>.run_main�s������Y�Y�,�,�.�F��Y�Y�,�,�.�F��)�)�1�1�3�K�����<�E��9�9�2�2��{�A�/�/�F��>�>�!�$�0�0�2�D����!@�)-���!�7��&�&������<� �L�L�*�*�*�7�
�L�L�N��$�$�&�&�&�/��*��7�7��
'�sI�A<D:�D(�AD:�.D,�2D*�3D,�7+D:�"D8�#D:�*D,�,D5�1D:)r�rJr}r.r
r-rr�)rr�r�r�r�rGr�rFs` @@@@@@r�test_start_tls_server_1zTestSSL.test_start_tls_server_1�sf����4�,�,�,�	�#�<�<�>��#�<�<�>��	�	8�'�*�*�	8�,	� 	'�&	
�	�	�$�$�X�Z�0r
c���������	�
���
����d�d�tj�dtz�dtz��jtj
tj���j��	�jtj
tj���j��
g�����fd��G�fd�dtj����fd��
���	�
��fd	������
��fd
�}�j�5�jj|��ddd��j����D]}|j��y#1swY�3xYw)Nrr�r�r�c���K�|jt����d{���}�j|��|jd�|jt����d{���}�j|��|j	dtd�t
d�g�|j��d{���|j��dz
�y7��7�l7��wr�r�r�s   ����rr�z>TestSSL.test_create_server_ssl_over_ssl.<locals>.handle_client!r�r�c�"���eZdZ��fd�Z�xZS)�?TestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocolc������t��|j�|jj|jj	||�d������fd�}�j|�y)NTr�c���	�j�}�j|�y#t$r}�j|�Yd}~yd}~wwxYwr	)rir#r�r1)r�rqrkr��super_s   ��r�cbz[TestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocol.connection_made.<locals>.cb8sF���3� �Z�Z�\���.�.�r�2��%�3��.�.�r�2�2��3�s�%�	A	�A�A	)r@�
pause_reading�_looprcr��add_done_callback)rrrr�rrG�sslctx_2s   @@��rr#zOTestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocol.connection_made2sa�������'�'�)��j�j�,�,�T�Z�Z�-A�-A��t�X�4�.B�.A�B��3��%�%�b�)r
)r2r3r4r#rO)rGr	s@�r�ServerProtocolr1s
���

*�

*r
r
c�B��tj�}�|��}|Sr	)r
�StreamReader)r��protocolr
r�s  ��r�server_protocol_factoryzHTestSSL.test_create_server_ssl_over_ssl.<locals>.server_protocol_factoryAs"����)�)�+�F�%�f�m�<�H��Or
c������K�tj���������	fd�}�	j|�}|j��j	|���d{���y7��w)Nc������	�j�
��j��tj��tj���j	���}���fd�}||j
�||j��||jd�}�j|d�||j�	�d}	||jd�}|sn||z
}��j|d�||j��j��jj�
jd�y#t$r@}�jj�
j|��j�Yd}~yd}~wwxYw)Nc�8��		||�}	�jr�j�j	��|S#tj$rN�jr�j�j	���j�j
d��YnwxYw��)Ni)r{�SSLWantReadError�pendingr��readr�r6)�funcrt�rv�incoming�outgoingrjs   ���r�dozVTestSSL.test_create_server_ssl_over_ssl.<locals>.test_client.<locals>.prog.<locals>.doTs����"�A�%)�4�[�� %�
$�+�+� �I�I�h�m�m�o�6�!�	��
$'�#7�#7�A�#+�#3�#3�$(�I�I�h�m�m�o�$>� (���t�y�y��/?� @�A��	#s�7�AB�Br�r�r
r�r�)r�r�r{�	MemoryBIO�wrap_bio�do_handshaker�rr�r�rErr�r!r�r�)rj�sslobjrr'�chunkrkrrr�r�rR�client_sslctx_1�client_sslctx_2r�rs`     @@�������rr�zJTestSSL.test_create_server_ssl_over_ssl.<locals>.test_client.<locals>.progIs@���-I��L�L��&��M�M�/�2� #�}�}��H�"�}�}��H�,�5�5�h��I�F�"��v�*�*�+��v�|�|�V�,��f�k�k�1�-�D��$�$�T�5�1��v�|�|�V�,��D�� "�6�;�;�� 2��$�!���
��	�
�$�$�T�7�3��v�}�}�%��J�J�L��I�I�2�2�3�>�>�4�H��	!�!��I�I�2�2�3�3D�3D�b�I��J�J�L�L��!�s�DE�	F	�	6F�F	r�)
rRr�r�r�r�r�rr r�rs
`  @������rr�z<TestSSL.test_create_server_ssl_over_ssl.<locals>.test_clientFsL������.�.�"�C�.
I�.
I�`�_�_�T�*�F��L�L�N��N�N�6�"��I�I�s�AA$�A"�A$c���K�i}�jj�	ddftj�
d�|���d{���}	|j}�j|�|dj
�}g}t��D]}|j�|���tjtj|����d{����jj|j�|j��d{���y7��7�D7�	#�jj|j�|j��d{���7wxYw�w)NrYrr�)rr�r]r�r�r�r�r�r�r
r�r�r�rEr�)r�r�r�rRr�r�r�r�rr�sslctx_1r�s      ������rr�z=TestSSL.test_create_server_ssl_over_ssl.<locals>.start_servers������F�/��	�	�/�/�'��Q���~�~��	�
���C�
(��K�K�	����	�*� ��|�/�/�1�����y�)�A��L�L��T�!2�3�*��&�&�w�~�~�u�'=�w�G�G�G��	�	�#�#�C�I�I�.��o�o�'�'�'�+��"H��(���	�	�#�#�C�I�I�.��o�o�'�'�'�sW�6E
�D�E
�BD
�D�D
�8E
�>D�?E
�D
�E
�
9E
�E�E
�
E
)rr�r�r�rJr�r�r�r
�StreamReaderProtocolr�rr�r�r�)rr�r�r�r�r�r
r�r�rr r�r�rr"r	r�s`  @@@@@@@@@@@@@@r�test_create_server_ssl_over_sslz'TestSSL.test_create_server_ssl_over_ssls�������	��&�&���~�-���~�-���2�2�����!3�!3�5���9�9�;���2�2�����!3�!3�5���9�9�;����	� 	*�W�9�9�	*� 	�
7	�7	�r	(�	(�4�
/�
/�
1��I�I�(�(���8�2�	
����i�(��F��K�K�M��2�
1�s�!E�Ec�0��������d�d�dtz��jtjtj���j�����fd������fd�}����fd�}�j
�5||�ddd�y#1swYyxYw)Nrr�r�c����|j�d��|jt���}�j|��|j	d�|j�|j
�y)NTr�r�)r�r�r%r�r�r�rE)rjr'r�rr�s  ���rr�z-TestSSL.test_shutdown_cleanly.<locals>.server�s\����M�M�� �
�
"��=�=��V��-�D����T�6�*��I�I�e���K�K�M��J�J�Lr
c���K�i}ttj��}tj|�dd�|���d{���\}}|j���j
|jd��d{���d��j
|j��d{���d��dz
�|j��j|��d{���y7��7�b7�<7��w)Nr�r�r�r�r�r
rO)r�rr�r
r�r�r�r�rrEr�)rRr�r�r�r�r�r�rs    ����rr�z-TestSSL.test_shutdown_cleanly.<locals>.client�s�������F���0E�0E�F�F�#*�#:�#:��!� "�$��	$��N�F�F�
�L�L�� ����6�#5�#5�a�#8�8�%�@����6�;�;�=�0�#�6�
�1�H�C��L�L�N��"�"�6�*�*�*���9��0��
+�sE�8C�C�7C�3C�4'C�C�2C�C�C�C�C�Cc�(��d�d�}�j�����5}g}t��D]#}|j||j���%�jj||��ddd��j
���y#1swY�xYw)Nrc��BK�tj|��d{���S7��wr	rrs rrz;TestSSL.test_shutdown_cleanly.<locals>.run.<locals>._gather�s����$�^�^�U�3�3�3�3�rrrrs	     ����rrz*TestSSL.test_shutdown_cleanly.<locals>.run�s�����C�
4�����-6�)2�!�4�7:����y�)�A��L�L��c�h�h��0�*��	�	�,�,��U�O�%�4�
���S�)�,�4�4�r	)r�r�rJr�r�r�r�)	rr�rr�r�r�r�r�r�s	`  @@@@@@r�test_shutdown_cleanlyzTestSSL.test_shutdown_cleanly�sv������	��~�-���0�0�����!3�!3�5���7�7�9�
�	�	+�*	-�&�
/�
/�
1���K�2�
1�
1�s�:	B�Bc�t������	�d�d��jtjtj��	�j	��d�����	fd�}��fd�}�����fd�}�j||��5}�jj||j��ddd�y#1swYyxYw)N�� c�>��|j�d���j|jd�d�|jd�t	j
d�|j��z�}�jt
|���z�|j�y)NTr�r��ping�pongr+)r�r�r�r��timerkr%rE�rjr'�CHUNK�SIZErr�s  ����rr�z2TestSSL.test_flush_before_shutdown.<locals>.server�sv����M�M�&�d�M�3����T�]�]�1�-�w�7��I�I�g���J�J�s�O��=�=����.�D����S��Y����5��J�J�Lr
c�������fd�}|S)Nc����	�|��jj�jd�y#t$r0}�jj�j|�Yd}~yd}~wwxYwr	�rr�r!r�r��rjrk�future�methrs  ���r�wrapperz@TestSSL.test_flush_before_shutdown.<locals>.run.<locals>.wrapper��]���L���J��I�I�2�2�6�3D�3D�d�K��!�M��I�I�2�2�6�3G�3G��L�L��M���2�	A+�&A&�&A+r�r:r;r9rs` ��rrz/TestSSL.test_flush_before_shutdown.<locals>.run�����
L��Nr
c���K��
jj��	tj|�dd���d{���\}}|jj
}|j
d�|jd��d{���}�
j|d�|j�t��D]}|j
d�z��|j�|j��
j|��d{���	|j��d{���}�
j|d��	�d{���y7��7��7�>7�'#t$rY�wxYw7��w�Nr�r�r/r�r0�xr
)rr�r
r�r�
_ssl_protocolr�r�r��
pause_writingr�rE�resume_writingr�rrA)rRr�r��sslprotocolr'r�r3r4r�r9rs      �����rr�z2TestSSL.test_flush_before_shutdown.<locals>.clients(������Y�Y�,�,�.�F�#*�#:�#:��!� "�$$�$�N�F�F�!�*�*�8�8�K��L�L��!��+�+�A�.�.�D����T�7�+��%�%�'��4�[�����T�E�\�*�!�
�L�L�N��&�&�(��"�"�6�*�*�*�
�#�[�[�]�*��� � ��s�+��L�L�-$��/��
+��*��'�
��
���sw�4E
�D4�AE
�:D6�;A>E
�9D8�:E
�?D<�D:�D<�)E
�.E�/E
�6E
�8E
�:D<�<	E�E
�E�E
�	r�rJr�r�r�rlrr�rR)
rr�rr�r�r3r4r�r9r�s
`    @@@@@r�test_flush_before_shutdownz"TestSSL.test_flush_before_shutdown�s���������0�0�����!3�!3�5���7�7�9�
���	�	�	�	�6�_�_�S��[�
)�S��I�I�(�(�����)9�:�*�
)�
)�s�9,B.�.B7c�2�����	�
�d�d��jtjtj��
�j	��d�	����
fd�}����
fd�}����	�fd�}�	�fd�}�j||��5}�jj||j��ddd��j||��5}�jj||j��ddd�y#1swY�UxYw#1swYyxYw)Nr,r-c�$��tj�}tj�}�
j||d��}		|j�|jr|j|j
��			|j
d�}	�	j|d�|jd�|j|j
��tjd��	jtj�5|j�ddd�|j|j
��d}		t|j
d��}||z
}�!#tj$rN|jr|j|j
��|j|jd��YnwxYw���#tj$r#|j|jd��YnwxYw���#1swY��xYw#tj$r#|j|jd��Y��tj $rYnwxYw�	j|��z�|j�|j#�y)	NTr�i@r�r/r0皙�����?r)r{rrrrr�rrr�r6r�r1rkr!r�r%�SSLZeroReturnErrorrE)rjrrrr'�data_lenrr3r4rr�s       ����rr�zCTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.server)s����}�}��H��}�}��H��_�_�X�x�T�_�J�F��	��'�'�)� �'�'��	�	�(�-�-�/�2����!�;�;�q�>�D�����T�7�+��L�L��!��I�I�h�m�m�o�&��J�J�s�O��"�"�3�#7�#7�8��
�
��9��I�I�h�m�m�o�&��H�������E� 2�3�E���%�H���=�+�+�5��'�'��	�	�(�-�-�/�2��N�N�4�9�9�U�#3�4�5�����+�+�5��N�N�4�9�9�U�#3�4�5���9�8���+�+�5��N�N�4�9�9�U�#3�4��-�-�����
���X�u�t�|�4�
�M�M�O��J�J�LsI�E"�>G�H�H�"AG�G�3G>�=G>�H�3I�I�Ic�|��|j�d���j|jd�d�|jd�t	j
d�|j
tj�|j��z�}�jt|���z�|j�y)NTr�r�r/r0rK)r�r�r�r�r1rk�shutdownr]�SHUT_WRr%rEr2s  ����r�
eof_serverzGTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.eof_server_s�����M�M�&�d�M�3����T�]�]�1�-�w�7��I�I�g���J�J�s�O�
�M�M�&�.�.�)��=�=����.�D����S��Y����5��J�J�Lr
c��R�K��	jj��tj|�dd���d{���\}}|j	d�|jd��d{���}�	j
|d�t��D] }|jjd�z��"	|j��d{���}�	j
|d���d{���|j��	j|��d{���y7��7��7�N#ttf$rY�KwxYw7�I7�"�wrA)rr�r
r�r�r�r�r�r�_test__append_write_backlogrr�rArEr�)
rRr�r�r'r�r3r4r�r9rs
     �����rr�zCTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.clientos������Y�Y�,�,�.�F�#*�#:�#:��!� "�$$�$�N�F�F�
�L�L��!��+�+�A�.�.�D����T�7�+��4�[��� � �<�<�T�E�\�J�!�
�#�[�[�]�*��� � ��s�+��L�L��L�L�N��"�"�6�*�*�*�+$��
/��+��#�%9�:�
��
��
��
+�sv�4D'�D�,D'�$D
�%AD'�*D�=D�>D�D'�D#�(D'�D%�D'�
D'�D�D �D'�D � D'�%D'c�������fd�}|S)Nc����	�|��jj�jd�y#t$r0}�jj�j|�Yd}~yd}~wwxYwr	r7r8s  ���rr;zQTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.run.<locals>.wrapper�r<r=rr>s` ��rrz@TestSSL.test_remote_shutdown_receives_trailing_data.<locals>.run�r?r
rG)rr�rQr�rr�r3r4r�r9r�s`     @@@@@r�+test_remote_shutdown_receives_trailing_dataz3TestSSL.test_remote_shutdown_receives_trailing_datas���������0�0�������
���7�7�9�
���4	�l	� 	+�	+�6	��_�_�S��[�
)�S��I�I�(�(�����)9�:�*��_�_�S��_�
-���I�I�(�(�����)9�:�.�
-�*�
)��.�
-�s�,D�,D
�D
�
Dc����tjtj�}|jd�|j����fd�}|5	�j	t
�5}�jj|��tj�tj�tj�ddd��jdjj��ddd�y#1swY�<xYw#t$r%}�jt|�d�Yd}~�>d}~wwxYw#1swYyxYw)NrXc���K�	tj�jjtjg���ddi�d��d{����jd�y7�#ttjf$rYywxYw�w)Nr{Tr_�TimeoutError is not raised�r
r�rr,r-r��ConnectionRefusedErrorr/)rRrs��r�testz2TestSSL.test_connect_timeout_warning.<locals>.test�s������
8��&�&�/�D�I�I�/�/��0@�0@�A�15�A�;?�A������	�	�6�7���+�G�,@�,@�A�
��
��;�B�AA#�
A!�A#�B�!A#�#A?�<B�>A?�?BzUnexpected ResourceWarning: {}zResourceWarning not triggered)r]r�rdr��assertWarns�ResourceWarningrr��gc�collectr��format�warning�AssertionErrorr��str)r�sr\�cm�erRs`    @r�test_connect_timeout_warningz$TestSSL.test_connect_timeout_warning�s�����M�M�&�.�.�)��	���� ��}�}���		8��	
O��%�%�o�6�"��I�I�0�0���8��J�J�L��J�J�L��J�J�L�	7��	�	�:�A�A�"�*�*�M�N��Q�6�6��
"�
J�� � ��Q��)H�I�I��
J���Q�sO�D;�D
�&AC>�D
�*D;�>D	�D
�
	D8�D3�.D;�3D8�8D;�;Ec����tjtj�}|jd�|jd�|j	����fd�}|5tj�}�jj||��tj|�}ddd��j��y#1swY� xYw)NrXrOc���K�	tj�jjtjg���d|i�d��d{����jd�y7�#ttjf$rYywxYw�w)Nr{r_rYrZ)r&rRrs ��rr\z9TestSSL.test_handshake_timeout_handler_leak.<locals>.test�s������
8��&�&�/�D�I�I�/�/��0@�0@�9�4�9�47�9������	�	�6�7���+�G�,@�,@�A�
��
�r])r]r�rdrer�r{r�rr�r�r�r�)rrfr\r&rRs`   @r�#test_handshake_timeout_handler_leakz+TestSSL.test_handshake_timeout_handler_leak�s�����M�M�&�.�.�)��	���� �	������}�}���		8���,�,�.�C��I�I�(�(��c��3��+�+�c�"�C��	
���#�%� �
�Q�s
� AC
�
Cc�������j��fd�}G�fd�dtj����fd�}�j|�5}�j	�}�j||j|��tj|�}ddd�tj�tj�tj��j��y#1swY�\xYw)Nc�����jtjtj�}|j	|d��}|jd�|j
�y)NTr�r-)r�rJr�r�rSr6rE)rjr�rs  �rr�z:TestSSL.test_shutdown_timeout_handler_leak.<locals>.server�sP����4�4��#�#��"�"��F��%�%�d��%�=�D��I�I�b�M��J�J�Lr
c���eZdZ�fd�Zd�Zy)�<TestSSL.test_shutdown_timeout_handler_leak.<locals>.Protocolc�<��tj���|_y�Nr)r
rr�rs �rrzETestSSL.test_shutdown_timeout_handler_leak.<locals>.Protocol.__init__�s���"�>�>�t�4��r
c�:�|jjd�yr	)r�r!r/s  rr1zLTestSSL.test_shutdown_timeout_handler_leak.<locals>.Protocol.connection_lost�s�����#�#�D�)r
N)r2r3r4rr1rs�rr-rp�s
���
5�
*r
r-c���K��j�g|��d|i��d{���\}}|j�|j�d{���y7�,7��w)Nr{)r,rEr�)rRr&rq�prr-rs    ��rr�z:TestSSL.test_shutdown_timeout_handler_leak.<locals>.client�sH�����1�4�1�1�(�K�T�K�s�K�K�F�B���H�H�J��&�&�L�L�L���s!�A�A
�&A�A�A�A)rr
r-rlr�r�rRr�r�r`rar�)rr�r�r�r&r-rs`    @@r�"test_shutdown_timeout_handler_leakz*TestSSL.test_shutdown_timeout_handler_leak�s�����y�y��	�	*�w�'�'�	*�	�
�_�_�V�
$���1�1�3�C��#�#�F�3�8�8�S�$9�:��+�+�c�"�C�%�	�
�
��
�
�
��
�
�
��	
���#�%� �%�
$�s
�AC*�*C3c�8�������j�tj��d����fd�}G��fd�dtj�������fd�}�j	|�5}�j||j��ddd�y#1swYyxYw)Nc����jtjtj�}|j	|d��}|jd�|j
d�dk(sJ�|jd�|jtj��j�j�|j
d�dk(sJ�|j�y)NTr��hellor�world�extra bytesr
)
r�rJr�r�rSr�r6rOr]rPr��setrE)rjr��eofrrs  ���rr�z=TestSSL.test_shutdown_timeout_handler_not_set.<locals>.server�s�����4�4��#�#��"�"��F��%�%�d��%�=�D��I�I�h���9�9�T�?�h�.�.�.��I�I�n�%��M�M�&�.�.�)��%�%�c�g�g�.��9�9�T�?�c�)�)�)��J�J�Lr
c�.��eZdZ�fd�Zd�Z�fd�Zd�Zy)�?TestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocolc�J��tj���|_d|_yrr)r
rr�rrs �rrzHTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.__init__s���"�>�>�t�4���!%��r
c��||_yr	)rr"s  rr#zOTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.connection_mades	��!*��r
c���|dk(r6|jjd�|jj�y|�y)Nryrz)rr�r)rr'�extras  �rr(zMTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.data_receiveds4����8�#��N�N�(�(��2��N�N�0�0�2�!�Er
c�v�|�|jjd�y|jj|�yr	)r�r!r�r/s  rr1zOTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.connection_losts+���;��H�H�'�'��-��H�H�*�*�3�/r
N)r2r3r4rr#r(r1)r�rs��rr-rs���
&�
+�
!�
0r
r-c��"�K��j�}�j�g|��d|i��d{���\}}�j��d{���|j�|j�d{���|j��dk(sJ�y7�[7�B7� �w)Nr{r{)r�r,�wait�resume_readingr�rE)	rRr&rqrur-r}r�rrs	    �����rr�z=TestSSL.test_shutdown_timeout_handler_not_set.<locals>.client"s�������1�1�3�C�1�4�1�1�(�K�T�K�s�K�K�F�B���(�(�*��������&�&�L�L��H�H�J��N�*�*�*�L�����s3�*B�B	�B�B�	#B�,B
�-B�B�
B)rr
�Eventr-rlr�rR)rr�r�r�r-r}r�rs`   @@@@r�%test_shutdown_timeout_handler_not_setz-TestSSL.test_shutdown_timeout_handler_not_set�sp����y�y���m�m�o����	� 	0�w�'�'�	0�.	+�	+��_�_�V�
$���#�#�F�3�8�8�$4�5�%�
$�
$�s�%"B�Br	)NN)0r2r3r4r�rr�r�rArNr]r�r�rlrprvryr�r��
contextlib�contextmanagerr�r�r�r�r�r�rrr#r0rBrHrrrr�r�r�r�r�r$r*rHrVrirlrvr�rO�rGs@rr>r>Os,����L��"�"�G�)��!�.�.��"�0�0��!�;�B!�.�.�"�0�0�
.�G�G��<@�����(��(��(�0��]�~`�D?�B#?�J)'�V/>�b3�D9�L,$�\;A�z>,�@]8�~;A�zL1�\O�b@�D9;�vz;�xO�8!�2%!�N66r
r>c�4�eZdZd�Zd�Zdddd�d�Zd�Zd	�Zy)
�TestSocketWrapperc��||_yr	)�_TestSocketWrapper__sock�rrjs  rrzTestSocketWrapper.__init__6s	����r
c��d}t|�|kr<|j|t|�z
�}|dk(rt�||z
}t|�|kr�<|Sr�)r%r6r)r�nr�r's    rr�zTestSocketWrapper.recv_all9sR�����#�h��l��9�9�Q��S��\�*�D��s�{�,�,��4�K�C�	�#�h��l�
�
r
FNT�r�r��do_handshake_on_connectc���t|tj�sJ�|j|j|||��}|r|j�|jj
�||_y)Nr�)r�r{r|rSr�rrE)r�ssl_contextr�r�r��ssl_socks      rr�zTestSocketWrapper.starttlsBsd��
�+�s�~�~�6�6�6��*�*��K�K�[�+�$;�+�=��
��!�!�#���������r
c�.�t|j|�Sr	)r\r�)rr`s  r�__getattr__zTestSocketWrapper.__getattr__Ts���t�{�{�D�)�)r
c�`�djt|�j|j�S)Nz	<{} {!r}>)rb�typer2r�r+s r�__repr__zTestSocketWrapper.__repr__Ws#���!�!�$�t�*�"5�"5�t�{�{�C�Cr
)r2r3r4rr�r�r�r�rr
rr�r�4s'����#�!%�)-��$*�Dr
r�c��eZdZd�Zd�Zd�Zy)�SocketThreadc�2�d|_|j�yr�)�_activerfr+s rr�zSocketThread.stop]s������	�	�r
c�&�|j�|Sr	)r�r+s r�	__enter__zSocketThread.__enter__as���
�
���r
c�$�|j�yr	)r�r/s  r�__exit__zSocketThread.__exit__es���	�	�r
N)r2r3r4r�r�r�rr
rr�r�[s����r
r�c��eZdZd�Zd�Zy)rnc��tjj|ddd�d|_||_||_d|_||_||_y)Nztest-clientT)	r`rarr[�_timeout�_sockr��_prog�_test)rr\rjr�rSs     rrzTestThreadedClient.__init__ksF�����!�!�$��d�M�B������
���
������
���
r
c���	|jt|j��y#ttf$r�t
$r%}|jj|�Yd}~yd}~wwxYwr	)r�r�r��KeyboardInterrupt�
SystemExit�
BaseExceptionr�r�r�s  rrzTestThreadedClient.runusR��	.��J�J�(����4�5��!�:�.�	���	.��J�J�)�)�"�-�-��	.�s�$'�A$�A�A$N)r2r3r4rrrr
rrnrnis���.r
rnc�F��eZdZd�Z�fd�Zd�Zd�Zd�Zed��Z	�xZ
S)rgc�>�tjj|ddd�d|_d|_d|_||_||_||_d|_	||_
tj�\|_
|_|jjd�||_y)Nztest-serverTrF)r`rarr[�_clients�_finished_clients�_max_clientsr�r�r�r�r]�
socketpair�_s1�_s2�setblockingr�)rr\rjr�rSrUs      rrzTestThreadedServer.__init__�s������!�!�$��d�M�B������
�!"���'�����
���
������
�#�.�.�0����$�(������U�#���
r
c����	|jr9|jj�dk7r	|jjd�t�|��y#t$rY�wxYw#t�|��wxYw)N���sstop)r��filenor�rfr@r�rFs �rr�zTestThreadedServer.stop�sa���	��x�x�D�H�H�O�O�-��3���H�H�M�M�'�*�
�G�L�N�������
�G�L�N�s(�)A&�A�	A#� A&�"A#�#A&�&A6c�x�	|j5|jjd�|j�ddd�|jj	�|j
j	�y#1swY�>xYw#|jj	�|j
j	�wxYwr�)r�r��_runr�rEr�r+s rrzTestThreadedServer.run�ss��	�����
�
�&�&�u�-��	�	���
�H�H�N�N���H�H�N�N�����
�H�H�N�N���H�H�N�N��s!�B�,A7�B�7B�<B�6B9c��|jr�|j|jk\rytj|j|j
ggg|j�\}}}|j
|vry|j|vrk	|jj�\}}|xjdz
c_|j|j�	|5|j|�ddd�|jr��yy#1swY�xYw#ttf$r�t$r.}d|_	�#|jj|�wxYwd}~wwxYw#t$rY��Zt j"$r|jsYy�wxYw)NrOF)r�r�r��selectr�r�r�rbrc�_handle_clientr�r�r�r�r��BlockingIOErrorr]rS)r�r�w�xrorRrks       rr�zTestThreadedServer._run�s;���l�l��}�}�� 1� 1�1���m�m����T�X�X�&��B��
�
�?�G�A�q�!��x�x�1�}���z�z�Q��>�!%���!2�!2�!4�J�D�$��M�M�Q�&�M��O�O�D�M�M�2�
>�!� �/�/��5�"�1�l�l�0"�T��-�z�:���(�>�',���>�!�� �J�J�9�9�"�=��>��'����~�~���<�<���	�sZ�E�D�C:�#D�:D�?D�E�E�&D'�'E�E�E�	E=�E=�;E=c�8�|jt|��yr	)r�r�r�s  rr�z!TestThreadedServer._handle_client�s���
�
�$�T�*�+r
c�6�|jj�Sr	)r�r�r+s rrRzTestThreadedServer.addr�s���z�z�%�%�'�'r
)r2r3r4rr�rr�r��propertyrRrOr�s@rrgrg~s1����$��">�H,��(��(r
rg)#r
r�r`r�r�r]�sysr^r`r1r��unittestr{�ImportErrorr\r�test.test_asynciorrJ�platform�MACOSr�rr-r�Filterr6�skipIf�TestCaser>r�rar�rnrgrr
r�<module>r�s��
��	��
�
�
���������1�

����	!��"����(�'�'�"�"�'�D�w�~�~���������o�.�\6�j�!�!�\6�/�\6�H/$D�$D�N�9�#�#��.��.�*P(��P(��U3��
�C��s�C'�'C1�0C1

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists