Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_logging.cpython-311.opt-2.pyc
�

�Keo��`�	ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZddlmZddlmZddlmZddlm Z ddl!Z!ddl"Z"ddl#Z#ddl$Z$ddl%Z%ddl&Z&dd	l'm(Z(m)Z)dd
l*m+Z+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1ej2d��Z3ej2d
��Z4	ddl5Z5ddl6Z6ddl7Z7n#e8$r	dxZ5xZ6Z7YnwxYw	ddl9Z9n#e8$rYnwxYwGd�de$j:��Z;Gd�de;��Z<Gd�de;��Z=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGeHeGe>dz��ZIe>de?d e@d!eAd"eBd#eCd$eDd%eEd&eFd'eGd(i
ZJGd)�d*ejK��ZLGd+�d,ejK��ZMGd-�d.e;��ZNGd/�d0e;��ZOGd1�d2eP��ZQGd3�d4ejR��ZSGd5�d6eP��ZTGd7�d8e;��ZUGd9�d:e4jV��ZWGd;�d<eP��ZXGd=�d>eXe(��ZYGd?�d@eXe0��ZZGdA�dBeXe.��Z[e\edC��rGdD�dEeZ��Z]GdF�dGe[��Z^ej_��ej`��GdH�dIe;������ZaGdJ�dKe;��ZbGdL�dMejc��ZdGdN�dOe;��Zeej_��ej`��GdP�dQe;������ZfdR�Zge$jhe\edC��dS��GdT�dUef����Ziej_��ej`��GdV�dWe;������Zje$jhe\edC��dS��GdX�dYej����Zkej_��ej`��GdZ�d[e;������Zle$jhe\edC��dS��Gd\�d]el����Zme$jhejnd^��Gd_�d`el����Zoej_��ej`��Gda�dbe;������ZpGdc�dde;��ZqGde�dfe;��ZrGdg�dhe;��Zsd�di�ZtGdj�dk��Zudl�ZvGdm�dnejR��ZwGdo�dpe;��ZxGdq�dre;��ZyGds�dte;��ZzGdu�dvej{��Z|Gdw�dxe;��Z}ej`��Gdy�dze;����Z~e\ejd{��r-ddl�Z�dd|l�m�Z�ej`��Gd}�d~e;����Z�ej�d��Z�Gd�d�ej���Z�e���Z�Gd��d���Z�Gd��d�e$j:e���Z�Gd��d�ej���Z�Gd��d�e$j:��Z�Gd��d�e;��Z�Gd��d�e;��Z�Gd��d���Z�Gd��d�ej���Z�Gd��d�e;��Z�Gd��d�e;��Z�Gd��d�e;��Z�Gd��d�e$j:��Z�Gd��d�e$j:��Z�Gd��d�e;e���Z�Gd��d�e;��Z�Gd��d�e���Z�Gd��d�e���Z�Gd��d�e���Z�d��Z�d�d�d�d�d�d�e�d�d�����ffD]\Z�Z�e�e�fd��Z�e�e�d�e�ze����e$jhe5d���Gd��d�e;����Z�Gd��d�e$j:��Z�d��Z�e�d�kre$j���dSdS)��N)�assert_python_ok�assert_python_failure)�support)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper)�TestHandler)�
HTTPServer�BaseHTTPRequestHandler)�urlparse�parse_qs)�ThreadingUDPServer�DatagramRequestHandler�ThreadingTCPServer�StreamRequestHandler�asyncore�smtpdc�6�eZdZ	dZdZdZd�Zd�Zd	d�Zd�Z	dS)
�BaseTestz&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$rc�|�	tj��|_tj��jj}tj��	tj�	��|_
tjdd�|_|�	��x|_
}tj�	��|_tj�	��|_ix|_}|D]}t'||dd��||<�	tj��n#tj��wxYwtjd��|_tjd��|_tjd��|_|j���|_t5j��|_|j�tj��tj|j��|_ tj!|j"��|_#|j �$|j#��|j�%��r+|jj&|jj&z}tOd|z���|j�%��r+|jj&|jj&z}tOd|z���|j�(|j ��|�)|j�%����|�)|j�%����dS)N�disabledu«×»uĿÖG�zUnexpected handlers: %s)*r�threading_setup�_threading_key�logging�	getLogger�manager�
loggerDict�_acquireLock�	_handlers�copy�saved_handlers�_handlerList�saved_handler_list�
saved_loggers�_nameToLevel�saved_name_to_level�_levelToName�saved_level_to_name�
logger_states�getattr�_releaseLock�logger1�logger2�root_logger�getEffectiveLevel�original_logging_level�io�StringIO�stream�setLevel�DEBUG�
StreamHandler�	root_hdlr�	Formatter�
log_format�root_formatter�setFormatter�hasHandlers�handlers�AssertionError�
addHandler�
assertTrue)�self�logger_dictr&r+�name�hlists      �;/usr/local/apps/python3/lib/python3.11/test/test_logging.py�setUpzBaseTest.setUpWs���	9�.�>�@�@����'�)�)�1�<�������	#�")�"3�"8�"8�":�":�D��&-�&:�1�1�1�&=�D�#�1<�1A�1A�1C�1C�C�D���'.�';�'@�'@�'B�'B�D�$�'.�';�'@�'@�'B�'B�D�$�13�3�D���%�
@�
@��&-�m�D�.A�.8�$�'@�'@�
�d�#�#�
@�
� �"�"�"�"��G� �"�"�"�"�����(��8�8����(�)=�>�>���"�,�R�0�0���&*�&6�&H�&H�&J�&J��#��k�m�m�����!�!�'�-�0�0�0� �.�t�{�;�;���%�/���@�@�����#�#�D�$7�8�8�8��<�#�#�%�%�	D��L�)�D�,<�,E�E�E� �!:�U�!B�C�C�C��<�#�#�%�%�	D��L�)�D�,<�,E�E�E� �!:�U�!B�C�C�C���#�#�D�N�3�3�3������0�0�2�2�3�3�3������0�0�2�2�3�3�3�3�3s
�CD%�%D:c��	|j���|j�|j��|jjrL|jjd}|j�|��|���|jj�L|j�|j��tj	��	tj
���tj
�|j
��tj���tj�|j��tj���tj�|j��|jtjdd�<tj��j}d|_|j}|���|�|j��|j}|jD]"}||�|||j|_�#	tj��n#tj��wxYw|���t;j|j�dS)Nr) r5�closer0�
removeHandlerr9r?r6r2rr r)�clear�updater*r'r(r!r#r%r$rr�disablerr&r+rr-�
doCleanupsr�threading_cleanupr)rC�hrrr+rEs      rG�tearDownzBaseTest.tearDown�s3��	����������&�&�t�~�6�6�6���'�	�� �)�!�,�A���*�*�1�-�-�-�
�G�G�I�I�I���'�	�	
��!�!�$�"=�>�>�>������	#�� �&�&�(�(�(�� �'�'��(@�A�A�A�� �&�&�(�(�(�� �'�'��(@�A�A�A���#�#�%�%�%���$�$�T�%8�9�9�9�&*�&=�G� ����#��'�)�)�1�G��G�O� �+�J����������d�0�1�1�1� �.�M��*�
L�
L�� ��&�2�8E�d�8K�D�&�t�,�5��
L�
� �"�"�"�"��G� �"�"�"�"�����������*�D�,?�@�@�@�@s
�E!H;�;INc�P�	|p|j}tj|p|j��}|������}|�t|��t|����t||��D]i\}}|�	|��}|s|�
d|z��|�t|�����|���j|�
��}|r|�
d|z��dSdS)Nz*Log line does not match expected pattern:
z'Remaining output at end of log stream:
)r5�re�compile�expected_log_pat�getvalue�
splitlines�assertEqual�len�zip�search�fail�tuple�groups�read)	rC�expected_valuesr5�pat�actual_lines�actual�expected�match�ss	         rG�assert_log_lineszBaseTest.assert_log_lines�s.��	/��&�4�;���j��5�� 5�6�6�����(�(�3�3�5�5������\�*�*�C��,@�,@�A�A�A� #�L�/� B� B�	>�	>��F�H��J�J�v�&�&�E��
$��	�	�G�"�#�$�$�$����U�5�<�<�>�>�2�2�H�=�=�=�=��K�K�M�M���	F��I�I�@�1�D�E�E�E�E�E�	F�	F�c�8�	|xjdz
c_d|jzS)N�z%d)�message_num�rCs rG�next_messagezBaseTest.next_message�s)��	����A�����d�&�&�&ri�NN)
�__name__�
__module__�__qualname__r;rVrlrHrRrhrn�rirGrrOsq������'�9�J�4���K�(4�(4�(4�T A� A� A�DF�F�F�F�$'�'�'�'�'rirc�:�eZdZ	d�Zd�Zd�Zd�Zd�Zd�Zd�Z	dS)	�BuiltinLevelsTestc�B�|j}tjd��}|�tj��tjtjd��i��}|�tj��tjd��}|�tj��|�tj	|����|�
|����|�tj	|����|�
|����|�|����|�|����|�tj	|����|�
|����|�|����|�|����|�
|����|�|����|�|����|�
|����|�
|����|�gd���dS)N�ERR�INF�DEB))rw�CRITICAL�1)rw�ERROR�2)rxrz�3)rxr|�4)rx�WARNING�5)rx�INFO�6)ryrz�7)ryr|�8)ryr��9)ryr��10)ryr7�11)rnrrr6r|�
LoggerAdapterr�r7�logrz�error�warning�info�debugrh)rC�mrwrxrys     rG�	test_flatzBuiltinLevelsTest.test_flat�s��������&�&�����W�]�#�#�#��#�G�$5�e�$<�$<�b�A�A�����W�\�"�"�"����&�&�����W�]�#�#�#�	���� �!�!�#�#�&�&�&��	�	�!�!�#�#�������� �!�!�#�#�&�&�&��	�	�!�!�#�#�������A�A�C�C�����������
�
�
����� �!�!�#�#�&�&�&��	�	�!�!�#�#�������A�A�C�C�����������
�
�
��	�	�!�!�#�#����	���A�A�C�C�����������
�
�
��	�	�!�!�#�#�����	�	�!�!�#�#�������
�
�
�	�	�	�	�	ric�F�|j}tjd��}|�tj��tjd��}|�tj��|�tj|����|�|����|�	|����|�
|����|�|����|�ddg��dS)Nrx�INF.ERR)r�rzr{)r�r|r}�
rnrrr6r�r|r�rzr�r�r�r�rh)rCr�rx�INF_ERRs    rG�test_nested_explicitz&BuiltinLevelsTest.test_nested_explicit�s��������&�&�����W�\�"�"�"��$�Y�/�/�������'�'�'�	���G�$�a�a�c�c�*�*�*��
�
�a�a�c�c����	�������������Q�Q�S�S�����
�
�a�a�c�c�������(�%�
�	�	�	�	�	ric��|j}tjd��}|�tj��tjd��}|�tj��tjd��}tjd��}tjd��}|�tj|����|�|����|�	|����|�
|����|�tj|����|�|����|�|����|�	|����|�
|����|�|����|�gd���dS)Nrxr��	INF.UNDEF�
INF.ERR.UNDEF�UNDEF))r�rzr{)r�r|r})r�r�r~)r�r�r)r�rzr�)r�r|r�r�)rCr�rxr��	INF_UNDEF�
INF_ERR_UNDEFr�s       rG�test_nested_inheritedz'BuiltinLevelsTest.test_nested_inheriteds���������&�&�����W�\�"�"�"��$�Y�/�/�������'�'�'��%�k�2�2�	��)�/�:�:�
��!�'�*�*��	�
�
�g�&�����,�,�,��������������!�!�#�#�������q�q�s�s�������'�*�A�A�C�C�0�0�0����A�A�C�C� � � �	�������������a�a�c�c�"�"�"����1�1�3�3�������A�A�C�C� � � ����
�
�
�	�	�	�	�	ric��|j}tjd��}tjd��}tjd��}|�tj��|�tj|����|�|����|�tj|����|�|����|�|����|�|����|�	gd���dS)Nrx�INF.BADPARENT.UNDEF�
INF.BADPARENT))r�rzr{)r�r�r})r�rzr~)r�r�r)
rnrrr6r�r��FATALr�r�rh)rCr�rx�
GRANDCHILD�CHILDs     rG�test_nested_with_virtual_parentz1BuiltinLevelsTest.test_nested_with_virtual_parent(s��������&�&���&�'<�=�=�
��!�/�2�2�����W�\�"�"�"�	���w�}�a�a�c�c�*�*�*�����������
�	�	�'�-�����%�%�%�
�
�
�1�1�3�3����	����������
���A�A�C�C�������
�
�
�	�	�	�	�	ric���	|�tjd��tj��|�tjtj��d��dS)Nr�)rYr�getLevelNamer�rms rG�test_regression_22386z'BuiltinLevelsTest.test_regression_22386BsQ��4�����-�f�5�5�w�|�D�D�D�����-�g�l�;�;�V�D�D�D�D�Dric�n�tjd��}|�|tj��dS)Nr�)rr�rYr�)rC�fatals  rG�test_issue27935z!BuiltinLevelsTest.test_issue27935Gs0���$�W�-�-�������
�.�.�.�.�.ric���	tjtjd��|�tjtjd��|�tjtj��d��|�tjtj��d��|�tjd��tj��dS)Nrr��NOTSET)r�addLevelNamer��
addCleanuprYr�r�rms rG�test_regression_29220z'BuiltinLevelsTest.test_regression_29220Ks���4���W�\�2�.�.�.�����,�g�l�F�C�C�C�����-�g�l�;�;�R�@�@�@�����-�g�n�=�=�x�H�H�H�����-�h�7�7���H�H�H�H�HriN)
rprqrrr�r�r�r�r�r�r�rsrirGruru�s�������4�-�-�-�^���.!�!�!�F���4E�E�E�
/�/�/�I�I�I�I�Iriruc�"�eZdZ	d�Zd�Zd�ZdS)�BasicFilterTestc���tjd��}|jjd}	|�|��tjd��}tjd��}tjd��}tjd��}|�|�����|�|�����|�|�����|�|�����|�ddg��|�	|��dS#|�	|��wxYw)N�	spam.eggsr�spam�spam.eggs.fish�spam.bakedbeans�r�r�r}�r�r�r~)
r�Filterr0r?�	addFilterrr�rnrh�removeFilter)rC�filter_�handlerr��	spam_eggs�spam_eggs_fish�spam_bakedbeanss       rG�test_filterzBasicFilterTest.test_filterWsS���.��-�-���"�+�A�.��	*����g�&�&�&��$�V�,�,�D��)�+�6�6�I�$�.�/?�@�@�N�%�/�0A�B�B�O��I�I�d�'�'�)�)�*�*�*��N�N�4�,�,�.�.�/�/�/����� 1� 1� 3� 3�4�4�4�� � ��!2�!2�!4�!4�5�5�5��!�!�*�/�#�
�
�
�

� � ��)�)�)�)�)��G� � ��)�)�)�)���s�DE�E.c��d�}|jjd}	|�|��tjd��}tjd��}tjd��}tjd��}|�|�����|�|�����|�|�����|�|�����|�ddg��|�|��dS#|�|��wxYw)	Nc�|�|j�d��}d�|dd���}|dkS)N�.�r�)rE�split�join)�record�parts�prefixs   rG�
filterfuncz8BasicFilterTest.test_callable_filter.<locals>.filterfuncss;���K�%�%�c�*�*�E��X�X�e�B�Q�B�i�(�(�F��[�(�(rirr�r�r�r�r�r�)	r0r?r�rrr�rnrhr�)rCr�r�r�r�r�r�s       rG�test_callable_filterz$BasicFilterTest.test_callable_filterosS��	)�	)�	)�
�"�+�A�.��	-����j�)�)�)��$�V�,�,�D��)�+�6�6�I�$�.�/?�@�@�N�%�/�0A�B�B�O��I�I�d�'�'�)�)�*�*�*��N�N�4�,�,�.�.�/�/�/����� 1� 1� 3� 3�4�4�4�� � ��!2�!2�!4�!4�5�5�5��!�!�*�/�#�
�
�
�

� � ��,�,�,�,�,��G� � ��,�,�,�,���s�DE�Ec��tj��}tjddi��}|�|�|����dS)NrEr�)rr��
makeLogRecordrB�filter)rC�f�rs   rG�test_empty_filterz!BasicFilterTest.test_empty_filter�sF���N�����!�6�;�"7�8�8�����������$�$�$�$�$riN)rprqrrr�r�r�rsrirGr�r�SsD������(�*�*�*�0-�-�-�:%�%�%�%�%rir��x�w�v�u�t�s�r�q�p�ork�Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	Talkative�	Garrulous�
Chatterbox�Boringc��eZdZ	d�ZdS)�GarrulousFilterc�"�|jtkS�N)�levelno�	GARRULOUS�rCr�s  rGr�zGarrulousFilter.filter�s���~��*�*riN�rprqrrr�rsrirGr�r��s&������3�+�+�+�+�+rir�c��eZdZ	d�ZdS)�VerySpecificFilterc�,�|jttfvSr�)r��SOCIABLE�TACITURNr�s  rGr�zVerySpecificFilter.filter�s���~�h��%9�9�9riNr�rsrirGr�r��s&������?�:�:�:�:�:rir�c�2�eZdZ	dZd�Zd�Zd�Zd�Zd�ZdS)�CustomLevelsAndFiltersTest�^[\w.]+ -> (\w+): (\d+)$c��t�|��t���D]\}}t	j||���dSr�)rrH�my_logging_levels�itemsrr�)rC�k�vs   rGrHz CustomLevelsAndFiltersTest.setUp�sS�����t����%�+�+�-�-�	'�	'�D�A�q�� ��A�&�&�&�&�	'�	'ric�j�tD]*}|�||������+dSr�)�LEVEL_RANGEr�rn)rC�logger�lvls   rG�log_at_all_levelsz,CustomLevelsAndFiltersTest.log_at_all_levels�s>���	1�	1�C��J�J�s�D�-�-�/�/�0�0�0�0�	1�	1ric��|j�t��|�|j��|�gd���dS)N)�r�r��r�r��r�r��r�r��r�r��r�r�)r0r6�VERBOSEr�rhrms rG�test_logger_filterz-CustomLevelsAndFiltersTest.test_logger_filter�sa����!�!�'�*�*�*����t�/�0�0�0����
�
�
�	�	�	�	�	ric��|jjd�t��	|�|j��|�gd���|jjd�tj��dS#|jjd�tj��wxYw)Nr)rrrrr)r0r?r6r�r�rhrr�rms rG�test_handler_filterz.CustomLevelsAndFiltersTest.test_handler_filter�s�����!�!�$�-�-�h�7�7�7�	B��"�"�4�#3�4�4�4��!�!�#�#�#�
�
�
�
��%�a�(�1�1�'�.�A�A�A�A�A��D��%�a�(�1�1�'�.�A�A�A�A���s�1B�1B?c�b�|jjd}d}t��}|�|��	|�|j��gd�}|�|��t
��}|j�|��|�|j��|�|gd�z��|r|j�|��|�|��dS#|r|j�|��|�|��wxYw)Nr)	)r�r{)r�r})r�rrrrrrr))r�r�)r��12)r��14)r��15)r��17)r��18)r��20)r0r?r�r�r�rhr�r�)rCr��specific_filter�garr�first_liness     rG�test_specific_filtersz0CustomLevelsAndFiltersTest.test_specific_filters�sY���"�+�A�.����� � �����$����!	'��"�"�4�#3�4�4�4����K�
�!�!�+�.�.�.�0�2�2�O���&�&��7�7�7��"�"�4�#3�4�4�4��!�!�+�
1
�
1
�
1
�
#
�

�

�

��
?�� �-�-�o�>�>�>�� � ��&�&�&�&�&���
?�� �-�-�o�>�>�>�� � ��&�&�&�&���s�BC;�;3D.N)	rprqrrrVrHr�rr
rrsrirGr�r��sm������J�3��'�'�'�
1�1�1����B�B�B� ('�('�('�('�('rir�c�"�eZdZd�Zd�Zd�Zejej	dkd��eje
jd��ej
��d�������Ze
j��ej
��d�����Zd	S)
�HandlerTestc��tj��}d|_|�|jd��d|_|�|jd��|�t
|jd��dS)N�generic�anothergeneric)r�HandlerrErY�assertRaises�NotImplementedError�emit�rCrQs  rG�	test_namezHandlerTest.test_name so���O�������������+�+�+�!��������!1�2�2�2����-�q�v�t�<�<�<�<�<ric�8�tjdv�rRdD�]�}tj��\}}t	j|��|st	j|��tj�	|dd���}|r�|j
|j}}|�|d��|�|d��tj
ddi��}|�|��t	j|��|�tj�|����|�|��|�tj�|����n6|�|j
d��|�|jd��|���|rt	j|�����tjd	krd
}nd}	tj�|��}|�|j|j��|�|j��|���n#t.$rYnwxYwdD]k}	|	d
kr.|�t2tjjdd|	���6tj�dd|	��}|����ltj�d��}tj
i��}|�|�|����|���tj�d��}|�|�|����|���dS)N��linux�darwin)TF�utf-8T��encoding�delay����msg�Testr$z/var/run/syslogz/dev/log)�GET�POST�PUTr.�	localhostz/logrrk)�sys�platform�tempfile�mkstemp�osrJ�unlinkrr?�WatchedFileHandler�dev�inorYr��handle�assertFalse�path�existsrB�
SysLogHandler�facility�LOG_USER�
unixsocket�OSErrorr�
ValueError�HTTPHandler�BufferingHandler�shouldFlush)
rC�existing�fd�fnrQr7r8r��sockname�methods
          rG�test_builtin_handlersz!HandlerTest.test_builtin_handlers(s%���<�.�.�.�)�
"�
"��!�)�+�+���B��������"��I�b�M�M�M��$�7�7��W�TX�7�Y�Y���0� �u�a�e��C��$�$�S�"�-�-�-��$�$�S�"�-�-�-��-�u�f�o�>�>�A��H�H�Q�K�K�K��I�b�M�M�M��$�$�R�W�^�^�B�%7�%7�8�8�8��H�H�Q�K�K�K��O�O�B�G�N�N�2�$6�$6�7�7�7�7��$�$�Q�U�B�/�/�/��$�$�Q�U�B�/�/�/����	�	�	��"��I�b�M�M�M���|�x�'�'�,���%��
��$�2�2�8�<�<��� � ���Q�Z�8�8�8������-�-�-����	�	�	�	���
�
�
���
����,�	�	�F������!�!�*�g�.>�.J�"-�v�v�?�?�?�?��$�0�0��f�f�M�M�����	�	�	�	���-�-�a�0�0���!�"�%�%������
�
�a�(�(�)�)�)�	���	�	�	���-�-�a�0�0��������q�)�)�*�*�*�	���	�	�	�	�	s�$A-I�
I�Ic�@�	tj��\}}tj|��tj|��tj|��}tj|dfftj	j
|dfftj	j|dfff}tj
dvr|tj	j|dfffz
}|D]g\}}||ddi�}|�tj�|����|���tj|���hdS)N�w�arQr"r'r%)r2r3r4rJr5�pathlib�Pathr�FileHandlerr?�RotatingFileHandler�TimedRotatingFileHandlerr0r1r6rBr;r<)rCrGrH�pfn�cases�cls�argsrQs        rG�test_path_objectszHandlerTest.test_path_objects^s��	�
�!�#�#���B�
������
�	�"�
�
�
��l�2�����(�3��*�5��%�9�C��:�F��%�>��c�
�K���
�<�.�.�.��w�'�:�S�#�J�G�I�I�E��	�	�I�C����T�,�G�,�,�A��O�O�B�G�N�N�2�.�.�/�/�/�
�G�G�I�I�I��I�b�M�M�M�M�		�	ri�ntz/WatchedFileHandler not appropriate for Windows.z'Emscripten cannot fstat unlinked files.c	�D���fd�}d}d}d�_d�_dD�]}tjdd��\}}t	j|��t
j|||f���}d|_|�	��tj�|d|�	��}tj
d
��}	|�|	��	t|��D]�}
t!jd��tjdd
i��}	t!j���_|�|���[#t($r!t+d�j�d�j�����wxYw	|���|���tj�|��rt	j|�����#|���|���tj�|��rt	j|��wwxYwdS)Nc���t|��D]j}	tj|��tj���_n#t
$rYnwxYwtjdtjdd��z���kdS)Ng����Mbp?r�)	�ranger4r5�time�
deletion_timerA�sleep�random�randint)�fname�tries�_rCs   �rG�remove_loopz*HandlerTest.test_race.<locals>.remove_loop|s�����5�\�\�
9�
9����I�e�$�$�$�)-����D�&�&�������D������
�5�6�>�!�Q�#7�#7�7�8�8�8�8�

9�
9s�,A�
A�
Ai��FT�.logztest_logging-3-��targetrWTr%r&z'%(asctime)s: %(levelname)s: %(message)s�{�G�zt?r*�testingzDeleted at z, opened at )�handle_timer_r2r3r4rJ�	threading�Thread�daemon�startrr?r6r:r=r]r^r`r�r9�	Exception�printr�r;r<r5)rCrf�	del_count�	log_countr(rGrH�removerrQr�rer�s`           rG�	test_racezHandlerTest.test_raceus)���	9�	9�	9�	9�	9��	��	����!���"�	"�	"�E��%�f�.?�@�@�F�B���H�R�L�L�L��&�k��Y��P�P�P�G�!�G�N��M�M�O�O�O�� �3�3�B��PU�3�V�V�A��!�"K�L�L�A�
�N�N�1����
"��y�)�)�
�
�A��J�u�%�%�%��-�u�i�.A�B�B�A��+/�9�;�;��(����������$������04�0B�0B�0B�04�0@�0@�B�C�C�C��	����
����������	�	�	��7�>�>�"�%�%�"��I�b�M�M�M������������	�	�	��7�>�>�"�%�%�"��I�b�M�M�M�M�"����1	"�	"s%�	;F?�-D3�2F?�3+E�F?�?AHc�~����	Gd�dtj��}|�ttj��d��|���|��jjj��d�_	|�
ttj��d��|�
ttj��d��tjd��}|�
���|�tj��t!j���t!j������fd�}t!j|d�	��}|�������t+j��}|dkrE	|�d
��t+jd��dS#t+jd��wxYw|�d������|���t7j|d���dS)
Nc�$��eZdZ�fd�Zd�Z�xZS)�AHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandlerc���t�����tjt	ddd������|_dS)Nz	/dev/null�wtr%�r'�r5)�super�__init__rr8�open�sub_handler�rC�	__class__s �rGr�zJHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__�sN������ � �"�"�"�#*�#8���T�G�D�D�D�$F�$F�$F�� � � ric���|j���	|j�|��|j���dS#|j���wxYwr�)r��acquirer�releaser�s  rGrzFHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit�si��� �(�(�*�*�*�/��$�)�)�&�1�1�1��$�,�,�.�.�.�.�.��D�$�,�,�.�.�.�.���s�A�A+�rprqrrr�r�
__classcell__�r�s@rG�_OurHandlerrz�sL�������
F�
F�
F�
F�
F�

/�
/�
/�
/�
/�
/�
/rir�rz*because we need at least one for this testrk� test_post_fork_child_no_deadlockc�`��tj��	����	������d������n#����wxYw	tj��dS#tj��wxYw)N��?)rr r��set�waitr�r-)�+fork_happened__release_locks_and_end_thread�locks_held__ready_to_fork�refed_hs���rG�lock_holder_thread_fnzKHandlerTest.test_post_fork_child_no_deadlock.<locals>.lock_holder_thread_fn�s����� �"�"�"�
'����!�!�!�&�-�1�1�3�3�3�@�D�D�S�I�I�I��O�O�%�%�%�%��G�O�O�%�%�%�%����%��$�&�&�&�&�&���$�&�&�&�&���s"�B�)A)�B�)A?�?B�B-z,test_post_fork_child_no_deadlock lock holder)rjrEz#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)�exitcode)rrrYrZr!r�r�r5rJrE�
assertGreater�_at_fork_reinit_lock_weaksetrrAr6r7rn�Eventrorqr�r4�forkr��_exitr�r�r�wait_process)	rCr��test_loggerr��lock_holder_thread�pidr�r�r�s	      @@@rGr�z,HandlerTest.test_post_fork_child_no_deadlock�s4�����	M�	/�	/�	/�	/�	/�'�/�	/�	/�	/�	
����W�.�/�/��3�3�3��+�-�-������+�2�8�9�9�9�C������3�w�0�1�1�1�5�5�5����3�w�C�D�D�a�H�H�H��'�(J�K�K�����w�'�'�'����W�]�+�+�+�$-�O�$5�$5�!�6?�o�6G�6G�3�	'�	'�	'�	'�	'�	'�	'�2'�-�,�C�E�E�E��	� � �"�"�"�!�&�&�(�(�(��g�i�i���!�8�8�
�� � �!G�H�H�H��������������������
���F�G�G�G�7�;�;�=�=�=��#�#�%�%�%�� ��q�1�1�1�1�1�1s�&G�G'N)rprqrrr rKrX�unittest�skipIfr4rEr�
is_emscriptenr�requires_working_threadingrw�
requires_forkr�rsrirGrrs�������=�=�=�4�4�4�l���.�X�_�R�W��_�&W�X�X��X�_���H���1��0�2�2�*"�*"�3�2���Y�X�
*"�`�W����0��0�2�2�H2�H2�3�2���H2�H2�H2rirc��eZdZd�ZdS)�	BadStreamc� �td���)N�deliberate mistake)�RuntimeError)rC�datas  rG�writezBadStream.write�s���/�0�0�0riN)rprqrrr�rsrirGr�r��s#������1�1�1�1�1rir�c��eZdZd�ZdS)�TestStreamHandlerc��||_dSr�)�error_recordr�s  rG�handleErrorzTestStreamHandler.handleError�s��"����riN)rprqrrr�rsrirGr�r��s#������#�#�#�#�#rir�c� �eZdZejZdZdS)�StreamWithIntNamer�N)rprqrrrr��levelrErsrirGr�r��s�������N�E��D�D�Drir�c� �eZdZd�Zd�Zd�ZdS)�StreamHandlerTestc��tt����}tji��}tj}	|�|��|�|j|��tjt����}tj
��5}|�|��d}|�||�����ddd��n#1swxYwYdt_tj
��5}|�|��|�
d|�����ddd��n#1swxYwY|t_dS#|t_wxYw)Nz"
RuntimeError: deliberate mistake
Fr)r�r�rr��raiseExceptionsr9�assertIsr�r8r�captured_stderr�assertInrWrY)rCrQr��	old_raise�stderrr*s      rG�test_error_handlingz%StreamHandlerTest.test_error_handlings����i�k�k�*�*���!�"�%�%���+�	�	0�
�H�H�Q�K�K�K��M�M�!�.�!�,�,�,��%�i�k�k�2�2�A��(�*�*�
6�f��������<���
�
�c�6�?�?�#4�#4�5�5�5�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6����
6�
6�
6�
6�
',�G�#��(�*�*�
8�f��������� � ��V�_�_�%6�%6�7�7�7�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8�'0�G�#�#�#��i�G�#�/�/�/�/sU�A#E9� AC,� E9�,C0�0E9�3C0�4"E9�>E �E9� E$�$E9�'E$�(E9�9Fc�h�	tj��}tj��}|�|��}|�|tj��|�|��}|�||��|�|��}|�|��dSr�)	rr8r3r4�	setStreamr�r0r��assertIsNone)rCrQr5�oldrds     rG�test_stream_settingz%StreamHandlerTest.test_stream_settings���	�
�!�#�#��������k�k�&�!�!���
�
�c�3�:�&�&�&����S�!�!���
�
�f�f�%�%�%����S�!�!�����&�!�!�!�!�!ric��tjt����}|�t	|��d��dS)Nz<StreamHandler 2 (NOTSET)>)rr8r�rY�reprrs  rG�'test_can_represent_stream_with_int_namez9StreamHandlerTest.test_can_represent_stream_with_int_name(s<���!�"3�"5�"5�6�6������a���">�?�?�?�?�?riN)rprqrrr�r�r�rsrirGr�r�sF������0�0�0�,"�"�"�@�@�@�@�@rir�c�.�eZdZ	d�Zd�Zd�Zd�Zd�ZdS)�TestSMTPServerc���tj�||d|d���|j���d|_||_d|_d|_||_	dS)NT)�map�decode_datarkF)
r�
SMTPServerr��socket�getsockname�port�_handler�_thread�_quit�
poll_interval)rC�addrr�r��sockmaps     rGr�zTestSMTPServer.__init__Dsj��
��!�!�$��d��.2�	"�	4�	4�	4��K�+�+�-�-�a�0��	���
������
�*����ric�8�	|�||||��dSr�)r�)rC�peer�mailfrom�rcpttosr�s     rG�process_messagezTestSMTPServer.process_messageMs'��	�	
�
�
�d�H�g�t�4�4�4�4�4ric��	tj|j|jf���x|_}d|_|���dS�NriT�rnro�
serve_foreverr�r�rprq�rC�ts  rGrqzTestSMTPServer.startY�S��	�%�+�4�3E�26�2D�1F�H�H�H�	H���q����	���	�	�	�	�	ric�l�	|js+t�||jd���|j�)dSdS)Nrk)r��count)r�r�loop�_map)rCr�s  rGr�zTestSMTPServer.serve_foreverbsS��	��*�	A��M�M�-�T�Y�a�M�@�@�@��*�	A�	A�	A�	A�	Aric��	d|_tj|j��d|_|���t
�|jd���dS)NT)r��
ignore_all)r�r�join_threadr�rJr�	close_allr�rms rG�stopzTestSMTPServer.stopmsX��	���
��$�T�\�2�2�2�����
�
�������t�y�T��:�:�:�:�:riN)rprqrrr�r�rqr�r�rsrirGr�r�/sg�������(+�+�+�
5�
5�
5����	A�	A�	A�	;�	;�	;�	;�	;rir�c�2��eZdZ	d�Zd�Z�fd�Zd�Z�xZS)�ControlMixinc�`�d|_||_||_tj��|_dSr�)r�r�r�rnr��ready)rCr�r�s   rGr�zControlMixin.__init__�s+�����*�����
��_�&�&��
�
�
ric��	tj|j|jf���x|_}d|_|���dSr�r�r�s  rGrqzControlMixin.start�r�ric���	|j���tt|���|��dSr�)r�r�rr�r�)rCr�r�s  �rGr�zControlMixin.serve_forever�s@���	�	
�
������
�l�D�!�!�/�/�
�>�>�>�>�>ric���	|���|j� tj|j��d|_|���|j���dSr�)�shutdownr�rr��server_closer�rLrms rGr�zControlMixin.stop�sd��	�	
�
�
�����<�#��(���6�6�6��D�L��������
�������ri)rprqrrr�rqr�r�r�r�s@rGr�r�ysj��������'�'�'����?�?�?�?�?�	�	�	�	�	�	�	rir�c�"�eZdZ			dd�Zd�ZdS)�TestHTTPServerr�FNc����G��fd�dt���tj||���t�|||��||_dS)Nc�2���eZdZdd�Zd�Z���fd�Z�xZS)�=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandlerNc�X�|�d��r|jSt|���)N�do_)�
startswith�process_request�AttributeError)rCrE�defaults   rG�__getattr__zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__�s-���?�?�5�)�)�0��/�/�$�T�*�*�*ric�:�|j�|��dSr���serverr�rms rGr�zMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_request������$�$�T�*�*�*�*�*ric�H���rt�|��j|g|�R�dSdSr�)r�log_message)rC�formatrW�DelegatingHTTPRequestHandlerr�r�s   ���rGrzITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message�sW����;�,�E�6�� � � +�F�;�59�;�;�;�;�;�;�;�;rir�)rprqrrr�r�rr�)r�rr�s@��rGrr��sf��������
+�
+�
+�
+�

+�
+�
+�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;rir)rrr�r��sslctx)rCr�r�r�r�rrs    ` @rGr�zTestHTTPServer.__init__�sy����	;�	;�	;�	;�	;�	;�	;�	;�+A�	;�	;�	;�	��D�$�(D�E�E�E����d�G�]�;�;�;�����ric��	|j���\}}|jr|j�|d���}n5#t$r(}t
j�d|z���d}~wwxYw||fS)NT)�server_sidezGot an error:
%s
)r��acceptr�wrap_socketrAr0r�r�)rC�sockr��es    rG�get_requestzTestHTTPServer.get_request�s���	���+�+�-�-�J�D�$��{�
G��{�.�.�t��.�F�F�����	�	�	��J���2�Q�6�7�7�7������	�����T�z�s�?A�
A4�#A/�/A4)r�FN)rprqrrr�r
rsrirGr�r��sD������	�58�#'�����&	�	�	�	�	rir�c�0��eZdZ	dZ		dd�Z�fd�Z�xZS)�
TestTCPServerTr�c��Gd�dt��}tj||||��t�|||��dS)Nc��eZdZd�ZdS)�;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlerc�:�|j�|��dSr�r�rms rGr9zBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handle�rriN)rprqrrr9rsrirG�DelegatingTCPRequestHandlerr�s#������
+�
+�
+�
+�
+rir)rrr�r�)rCr�r�r��bind_and_activaters      rGr�zTestTCPServer.__init__�sl��	+�	+�	+�	+�	+�*>�	+�	+�	+�	�#�D�$�0K�$5�	7�	7�	7����d�G�]�;�;�;�;�;ric���tt|�����|j���d|_dS�Nrk)rr�server_bindr�r�r�r�s �rGrzTestTCPServer.server_bind��=���
�m�T�"�"�.�.�0�0�0��K�+�+�-�-�a�0��	�	�	ri�r�T)rprqrr�allow_reuse_addressr�rr�r�s@rGrr�s_����������47�#'�<�<�<�<�1�1�1�1�1�1�1�1�1rirc�6��eZdZ			dd�Z�fd�Z�fd�Z�xZS)�
TestUDPServerr�Tc���G�fd�dt���tj||�|��t�|||��d|_dS)Nc�(���eZdZd�Z��fd�Z�xZS)�;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlerc�:�|j�|��dSr�r�rms rGr9zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handlerric����|j���}|rC	t�|�����dS#t$r|jjs�YdSwxYwdSr�)�wfilerWr�finishrAr�_closed)rCr��DelegatingUDPRequestHandlerr�s  ��rGr$zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finishs�����z�*�*�,�,���"�"��9�4�@�@�G�G�I�I�I�I�I��"�"�"�"�#�{�2�"�!�"�"�"�"����"�"s�"A�A�A)rprqrrr9r$r�)r�r&s@�rGr&r sM��������
+�
+�
+�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"rir&F)rrr�r�r%)rCr�r�r�rr&s     @rGr�zTestUDPServer.__init__s~���	"�	"�	"�	"�	"�	"�	"�*@�	"�	"�	"�	�#�D�$�$?�$5�	7�	7�	7�	���d�G�]�;�;�;�����ric���tt|�����|j���d|_dSr)rrrr�r�r�r�s �rGrzTestUDPServer.server_bindrric�d��tt|�����d|_dS)NT)rrr�r%r�s �rGr�zTestUDPServer.server_closes*���
�m�T�"�"�/�/�1�1�1�����rir)rprqrrr�rr�r�r�s@rGrr�sr�������� 58�#'�����,1�1�1�1�1���������rir�AF_UNIXc��eZdZejZdS)�TestUnixStreamServerN�rprqrrr�r)�address_familyrsrirGr+r+#�����������rir+c��eZdZejZdS)�TestUnixDatagramServerNr,rsrirGr0r0&r.rir0c�(�eZdZejZd�Zd�ZdS)�SMTPHandlerTestc���i}ttjdf|jd|��}|���tj|jf}tj�|ddd|j	���}|�
|jdg��g|_t
j
ddi��}tj��|_|�|��|j�|j	��|���|�|j�����|�
t-|j��d	��|jd\}}}}	|�
|d��|�
|dg��|�d
|	��|�|	�d����|���dS)Nr���MbP?�me�you�Log)�timeoutr*u	Hello ✓rkz
Subject: Log
u

Hello ✓)r�r�HOSTr�rqr�rr?�SMTPHandler�TIMEOUTrY�toaddrs�messagesr�rnr��handledr9r�r�rB�is_setrZr��endswithrJ)
rCr�rr�rQr�r�r�r�r�s
          rG�
test_basiczSMTPHandlerTest.test_basic1s�������!3�Q� 7��9M�u� '�)�)���������"�F�K�0����(�(��t�U�E�15��
)�
?�
?�������U�G�,�,�,���
��!�5�.�"9�:�:�� ��(�(���	�����������$�,�'�'�'����
�
�
������+�+�-�-�.�.�.�����T�]�+�+�Q�/�/�/�(,�
�a�(8�%��h�������4�(�(�(�����5�'�*�*�*��
�
�(�$�/�/�/�����
�
�&8�9�9�:�:�:�	���	�	�	�	�	ric�l�|j�|��|j���dSr�)r=�appendr>r�)rCrWs  rGr�zSMTPHandlerTest.process_messageIs2���
���T�"�"�"���������riN)rprqrrr�LONG_TIMEOUTr;rAr�rsrirGr2r2+s<�������"�G����0����rir2c�\�eZdZ	dZd�Zd�Zd�Zd�Zej	��d���Z
dS)�MemoryHandlerTestr�c�,�t�|��tj�dtj|j��|_tjd��|_	d|j	_
|j	�|j��dS)N�
�memr)rrHrr?�
MemoryHandlerr�r9�mem_hdlrr�
mem_logger�	propagaterArms rGrHzMemoryHandlerTest.setUpTsu�����t�����(�6�6�r�7�?�7;�~�G�G��
�!�+�E�2�2���$%���!���"�"�4�=�1�1�1�1�1ric�l�|j���t�|��dSr�)rKrJrrRrms rGrRzMemoryHandlerTest.tearDown\�0���
���������$�����ric��|j�|�����|�g��|j�|�����|�g��|j�|�����gd�}|�|��dD]�}t
d��D].}|j�|������/|�|��|j�|�����|d�t
||dz��D��z}|�|����|j�|�����|�|��dS)N)�r7r{�r�r})r�r~)r\��	c�0�g|]}dt|��f��S)r7)�str)�.0�is  rG�
<listcomp>z0MemoryHandlerTest.test_flush.<locals>.<listcomp>vs#��I�I�I�1�g�s�1�v�v�.�I�I�IrirH)rLr�rnrhr�r�r])rC�lines�nrXs    rG�
test_flushzMemoryHandlerTest.test_flush`s���	
����d�/�/�1�1�2�2�2����b�!�!�!�����T�.�.�0�0�1�1�1����b�!�!�!������ 1� 1� 3� 3�4�4�4�
�
�
��
	
���e�$�$�$��	)�	)�A��1�X�X�
;�
;����%�%�d�&7�&7�&9�&9�:�:�:�:��!�!�%�(�(�(�
�O�!�!�$�"3�"3�"5�"5�6�6�6��I�I��a��R��8H�8H�I�I�I�I�E��!�!�%�(�(�(�(�����d�/�/�1�1�2�2�2����e�$�$�$�$�$ric��	|j�|�����|�g��|j�|�����|�g��|j�|j��|j���ddg}|�|��tj	�
dtj|jd��|_|j�
|j��|j�|�����|�|��|j�|�����|�|��|j�|j��|j���|�|��dS)NrQrRrHF)rLr�rnrhr�rKrKrJrr?rJr�r9rA)rCrZs  rG�test_flush_on_closez%MemoryHandlerTest.test_flush_on_close|s���	�	
����d�/�/�1�1�2�2�2����b�!�!�!�����T�.�.�0�0�1�1�1����b�!�!�!���%�%�d�m�4�4�4��
��������
��	
���e�$�$�$��(�6�6�r�7�?�7;�~�7<�>�>��
�	
��"�"�4�=�1�1�1�����d�/�/�1�1�2�2�2����e�$�$�$�����T�.�.�0�0�1�1�1����e�$�$�$���%�%�d�m�4�4�4��
���������e�$�$�$�$�$ric��Gd�d��}||j��}	|j�|��td��D]J}tjd��|j�d��|j�d���K	|jD]}tj
|���dS#|jD]}tj
|���wxYw)Nc� �eZdZd�Zd�Zd�ZdS)�ZMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandlerc�"�||_g|_dSr�)rK�threads)rCrKs  rGr�zcMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.__init__�s�� (��
�!����ric�:�|j�d��dSr�)rK�	setTargetrms rG�removeTargetzgMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.removeTarget�s���
�'�'��-�-�-�-�-ric��tj|j���}|j�|��|���dS)N)rj)rnrorfrcrCrq)rCr*�threads   rGr9zaMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handle�s?��"�)��1B�C�C�C����#�#�F�+�+�+��������riN)rprqrrr�rfr9rsrirG�MockRaceConditionHandlerra�sA������
"�
"�
"�
.�
.�
.�
�
�
�
�
ririrHrkznot flushed�flushed)rKrer]r^r`rLr�r�rcrr�)rCrirjrerhs     rG�&test_race_between_set_target_and_flushz8MemoryHandlerTest.test_race_between_set_target_and_flush�s��	�	�	�	�	�	�	�	�*�)�$�-�8�8��		5��M�#�#�F�+�+�+��2�Y�Y�
3�
3���
�5�!�!�!���$�$�]�3�3�3���'�'�	�2�2�2�2�
3�
!�.�
5�
5�� �,�V�4�4�4�4�
5�
5��&�.�
5�
5�� �,�V�4�4�4�4�
5���s�A4B4�4 CN)rprqrrrVrHrRr\r^rr�rkrsrirGrFrFMs�������&�3��2�2�2� � � �%�%�%�8%�%�%�<1��0�2�2�5�5�3�2�5�5�5rirFc��eZdZ	d�ZdS)�ExceptionFormatterc�"�d|djzS)Nz
Got a [%s]r)rp)rC�eis  rG�formatExceptionz"ExceptionFormatter.formatException�s���b��e�n�,�,riN)rprqrrrprsrirGrmrm�s&������(�-�-�-�-�-rirmc�*�eZdZ	ejZdZdZdZdZe�	dd��Z
e�	dd��Zd	ezd
zZe�	dd��Z
d
ZdZdZdZd�Zd�Zd�Zefd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS) �ConfigFileTest�^(\w+) \+\+ (\w+)$aN
    [loggers]
    keys=root

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    a�
    [loggers]
    keys=root,parser

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=

    [logger_parser]
    level=DEBUG
    handlers=hand1
    propagate=1
    qualname=compiler.parser

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    a�
    [loggers]
    keys=root,parser

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

    [logger_parser]
    level=DEBUG
    handlers=
    propagate=1
    qualname=compiler.parser

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    z
sys.stdoutz
sys.stboutzformatter=form1zformatter=misspelled_namea
    [loggers]
    keys=root

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=NOTSET
    handlers=hand1

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [formatter_form1]
    class=zS.ExceptionFormatter
    format=%(levelname)s:%(name)s:%(message)s
    datefmt=
    zclass=StreamHandlerzclass=logging.StreamHandlerag
    [loggers]
    keys=root,parser

    [handlers]
    keys=hand1, hand2

    [formatters]
    keys=form1, form2

    [logger_root]
    level=WARNING
    handlers=

    [logger_parser]
    level=DEBUG
    handlers=hand1
    propagate=1
    qualname=compiler.parser

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stdout,)

    [handler_hand2]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    args=(sys.stderr,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=

    [formatter_form2]
    format=%(message)s
    datefmt=
    a%
    [loggers]
    keys=root,parser,compiler

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

    [logger_compiler]
    level=DEBUG
    handlers=
    propagate=1
    qualname=compiler

    [logger_parser]
    level=DEBUG
    handlers=
    propagate=1
    qualname=compiler.parser

    [handler_hand1]
    class=StreamHandler
    level=NOTSET
    formatter=form1
    kwargs={'stream': sys.stdout,}

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    a
    [loggers]
    keys=root

    [handlers]
    keys=file

    [formatters]
    keys=

    [logger_root]
    level=DEBUG
    handlers=file

    [handler_file]
    class=FileHandler
    level=DEBUG
    args=("{tempfile}",)
    kwargs={{"encoding": "utf-8"}}
    z�
    [loggers]
    keys=root

    [handlers]
    keys=screen

    [formatters]
    keys=

    [logger_root]
    level=DEBUG
    handlers=screen

    [handler_screen]
    level=DEBUG
    class=StreamHandler
    args=(sys.stdout,)
    formatter=
    c��tjtj|����}t	jj|fddi|��dS)Nr'r%)r3r4�textwrap�dedentr�config�
fileConfig)rC�conf�kwargs�files    rG�apply_configzConfigFileTest.apply_config�sA���{�8�?�4�0�0�1�1����!�$�C�C��C�F�C�C�C�C�Cric��tj��5}|�|j��t	j��}|�|�����|�|�����|�	dg|���|�	g��ddd��dS#1swxYwYdS�N�r|r}r~�
r�captured_stdoutr|�config0rrr�rnr�rh�rC�outputr�s   rG�test_config0_okzConfigFileTest.test_config0_ok����
�
$�
&�
&�	&�&����d�l�+�+�+��&�(�(�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��!�!��#��
"�
�
�
�
�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&��B)C
�
C�Cc�^�tj��5}tjt	j|j����}tj��}|�	|��tj�|��tj
��}|�|�����|�|�����|�dg|���|�g��ddd��dS#1swxYwYdSr~)rr�r3r4rurvr��configparser�ConfigParser�	read_filerrwrxrr�rnr�rh)rCr�r{�cpr�s     rG�test_config0_using_cp_okz'ConfigFileTest.test_config0_using_cp_ok�sK��
�
$�
&�
&�	&�&��;�x��t�|�<�<�=�=�D��*�,�,�B��L�L������N�%�%�b�)�)�)��&�(�(�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��!�!��#��
"�
�
�
�
�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&s�DD"�"D&�)D&c��tj��5}|�|��tjd��}|�|�����|�|�����|�ddg|���|�g��ddd��dS#1swxYwYdS�N�compiler.parser�r�r{rr~�	rr�r|rrr�rnr�rh�rCrwr�r�s    rG�test_config1_okzConfigFileTest.test_config1_ok����
�
$�
&�
&�	&�&����f�%�%�%��&�'8�9�9�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��!�!���#��
"�
�
�
�

�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&��B&C�C�Cc�R�|�t|j|j��dSr��rrrr|�config2rms rG�test_config2_failurez#ConfigFileTest.test_config2_failure��%�����)�T�%6���E�E�E�E�Eric�R�|�t|j|j��dSr��rrrr|�config3rms rG�test_config3_failurez#ConfigFileTest.test_config3_failure�r�ric���tj��5}|�|j��t	j��}	t
���#t$rt	jd��YnwxYwtj	�
d��|�|���d��|�
g��ddd��dS#1swxYwYdS�Nzjust testingrz-ERROR:root:just testing
Got a [RuntimeError]
)rr�r|�config4rrr��	exceptionr0�stdout�seekrYrWrhr�s   rG�test_config4_okzConfigFileTest.test_config4_ok�s+��
�
$�
&�
&�	&�&����d�l�+�+�+��&�(�(�F�
2�"�n�n�$���
2�
2�
2��!�.�1�1�1�1�1�
2�����J�O�O�A�������V�_�_�.�.�A�
C�
C�
C�
�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&s0�.C�A�A2�/C�1A2�2AC�C"�%C"c�<�|�|j���dS�N)rw�r��config5rms rG�test_config5_okzConfigFileTest.test_config5_ok�!�����D�L��1�1�1�1�1ric�<�|�|j���dSr�)r��config6rms rG�test_config6_okzConfigFileTest.test_config6_ok
r�ric��tj��5}|�|j��t	jd��}t	jd��}|�|�����|�|�����|�	|�����|�
gd�|���|�
g��ddd��n#1swxYwYtj��5}|�|j��t	jd��}|�|j
��|�|�����|�|�����t	jd��}|�|�����|�|�����|�	|�����|�
gd�|���|�
g��ddd��dS#1swxYwYdS�Nr�zcompiler-hyphenated)r�r)rzr~r~�compiler.lexer))r�r)r|r�)r�r�)r|r�)rr�r|�config1arrr�rnr��criticalrh�config7r:r�rCr�r��
hyphenateds    rG�test_config7_okzConfigFileTest.test_config7_ok
s���
�
$�
&�
&�	&�&����d�m�,�,�,��&�'8�9�9�F�!�*�+@�A�A�J��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-����� 1� 1� 3� 3�4�4�4��!�!�#�#�#��	
"�
�
�
�
�!�!�"�%�%�%�'	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�(�
$�
&�
&�	&�&����d�l�+�+�+��&�'8�9�9�F����V�_�-�-�-��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��&�'7�8�8�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-����� 1� 1� 3� 3�4�4�4��!�!�#�#�#�
�
"�
�
�
�
�!�!�"�%�%�%�)	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&�%�C&D�D
�
D
�$EI?�?J�Jc���d�}|���5tjdd��\}}tj|��tjdkr|�dd��}|j�|���}|�	|��|�	|��ddd��n#1swxYwYtjjd}|�
|||��dS)	Nc�V�|���tj|��dSr��rJr4�remove��h1rHs  rG�cleanupz/ConfigFileTest.test_config8_ok.<locals>.cleanup:� ���H�H�J�J�J��I�b�M�M�M�M�Mrirh�test_logging-X-rY�\z\\)r2r)�check_no_resource_warningr2r3r4rJrE�replace�config8rr|r�rootr?r�)rCr�rGrHr�r�s      rG�test_config8_okzConfigFileTest.test_config8_ok8s+��	�	�	��
+�
+�
-�
-�	'�	'��%�f�.?�@�@�F�B���H�R�L�L�L��w�$����Z�Z��f�-�-���l�)�)�2�)�6�6�G����g�&�&�&����g�&�&�&�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'�	'����	'�	'�	'�	'��,�'��*�������"�-�-�-�-�-s�BB<�<C�Cc�j�|�|j��tjd��}|�|j��|�|j��|�|j��|�|jd���|�|j��dS)N�some_pristine_loggerF)�disable_existing_loggers)r|�disable_testrrr:rrB�rCr�s  rG�test_logger_disablingz$ConfigFileTest.test_logger_disablingOs������$�+�,�,�,��"�#9�:�:�������)�)�)����$�+�,�,�,������(�(�(����$�+�e��L�L�L������)�)�)�)�)ric��d}|�|��|�tj��jdjd��dS)Naw
            [loggers]
            keys=root

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

            [formatter_form1]
            format=%(levelname)s ++ %(message)s
            r�hand1)r|rYrrr?rE)rC�test_configs  rG�test_config_set_handler_namesz,ConfigFileTest.test_config_set_handler_namesXsO����(	
���+�&�&�&�����*�,�,�5�a�8�=�w�G�G�G�G�Gric
���	tjd�����}tjdd���\}}	tj||�d����tj|��tj
�|dtddd	d
ddd
�i������tj
|��dS#tj
|��wxYw)Nat
            [formatters]
            keys=default

            [formatter_default]

            [handlers]
            keys=console

            [handler_console]
            class=logging.StreamHandler
            args=tuple()

            [loggers]
            keys=root

            [logger_root]
            formatter=default
            handlers=console
            �
test_logging_z.ini�r��suffix�asciir%rkFrz5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)r�datefmt�class)�versionr��
formatters)r'�defaults)rurv�stripr2r3r4r��encoderJrrwrx�dictr5)rC�inirGrHs    rG�!test_defaults_do_no_interpolationz0ConfigFileTest.test_defaults_do_no_interpolationps���<��o����&����'	�(�!���H�H�H���B�	��H�R����G�,�,�-�-�-��H�R�L�L�L��N�%�%�� ���-2�!�&]�'?�%8�$�$� �
�
�
�
&�
�
�
� 
�I�b�M�M�M�M�M��B�I�b�M�M�M�M���s
�A4C�C"N) rprqrrr	r�rVr��config1r�r�r�r�r�r�r�r�r�r�r|r�r�r�r�r�r�r�r�r�r�r�r�r�rsrirGrrrr�s�������?� /� I��,���G�4�G�@�H�@�o�o�l�L�9�9�G��o�o�/�1L�M�M�G��*�+�*�+�G�6�o�o�3�5R�S�S�G�'�G�T#�G�L�G�*�L�*D�D�D�
&�
&�
&�&�&�&�$&-�
&�
&�
&�
&�F�F�F�F�F�F�
&�
&�
&�2�2�2�2�2�2�)&�)&�)&�V.�.�.�.*�*�*�H�H�H�0*�*�*�*�*rirrc�6�eZdZ	eZdZd�Zd�Zd�Zd�Z	d�Z
dS)�SocketHandlerTest�r/rc���	t�|��dx|_x|_|_	|�|j|jd��x|_}|���n#t$r}||_Yd}~dSd}~wwxYw|j
���tj
j}t|jt"��r|d|j��|_n||jd��|_d|_|j�|jj
d��|j�|j��t/jd��|_dS�N�{�G�z�?r/rr)rrHr�	sock_hdlr�server_exception�server_class�address�
handle_socketrqrAr�r�rr?�
SocketHandler�
isinstance�server_addressr^r��
log_outputr0rKrArn�	Semaphorer>�rCrr�hclss    rGrHzSocketHandlerTest.setUp�sa��	7����t����?C�C���C�d�n�t�'<�	�#'�#4�#4�T�\�59�5G��$O�$O�
O�D�K�&��L�L�N�N�N�N���	�	�	�$%�D�!��F�F�F�F�F�����	����	���������-���f�+�U�3�3�	?�!�T�+�v�{�;�;�D�N�N�!�T�&�"7��>�>�D�N������&�&�t�'7�'@��'C�D�D�D���#�#�D�N�3�3�3� �*�1�-�-������<A/�/
B�9B�Bc�:�		|jr8|j�|j��|j���|jr|j���t�|��dS#t�|��wxYwr�)r�r0rKrJrr�rrRrms rGrRzSocketHandlerTest.tearDown�s���&�	$��~�
'�� �.�.�t�~�>�>�>���$�$�&�&�&��{�
#��� � �"�"�"����d�#�#�#�#�#��H���d�#�#�#�#�����AA>�>Bc��|j}	|�d��}t|��dkrdStjd|��d}|�|��}t|��|kr;||�|t|��z
��z}t|��|k�;tj|��}tj|��}|xj	|j
dzz
c_	|j�����)NTr\�>Lr�
)
�
connection�recvrZ�struct�unpack�pickle�loadsrr�r�r*r>r�)rC�request�conn�chunk�slen�objr�s       rGr�zSocketHandlerTest.handle_socket�s����!��	#��I�I�a�L�L�E��5�z�z�A�~�~����=��u�-�-�a�0�D��I�I�d�O�O�E��e�*�*�t�#�#���	�	�$��U���*;� <� <�<���e�*�*�t�#�#��,�u�%�%�C��*�3�/�/�F��O�O�v�z�D�0�0�O�O��L� � �"�"�"�	#ric�^�|jr|�|j��tjd��}|�d��|j���|�d��|j���|�|j	d��dS)N�tcpr��eggs�
spam
eggs
)
r��skipTestrrr�r>r�r�rYr�r�s  rG�test_outputzSocketHandlerTest.test_output�s���� �	1��M�M�$�/�0�0�0��"�5�)�)�����V��������������V����������������.�9�9�9�9�9ric��|jr|�|j��d|j_|j���	t
d���#t$r|j�d��YnwxYw|j�	d��tj
��}|�|jj|��tj
|jj|z
dz��|j�	d��dS)Ng@zDeliberate mistakez
Never sentzNever sent, eitherr4zNor this)r�r
r��
retryStartrr�r�r0r�r�r^r��	retryTimer`)rC�nows  rG�
test_noserverzSocketHandlerTest.test_noserver�s��� �	1��M�M�$�/�0�0�0�%(���!��������	5��3�4�4�4���	5�	5�	5���&�&�|�4�4�4�4�4�	5��������3�4�4�4��i�k�k�����4�>�3�S�9�9�9��
�4�>�+�c�1�E�9�:�:�:�����z�*�*�*�*�*s�A�$A>�=A>N)rprqrrrr�r�rHrRr�rrrsrirGr�r��sn������*� �L��G�.�.�.�4	$�	$�	$�
#�
#�
#�	:�	:�	:�+�+�+�+�+rir�c��tjdd���\}}tj|��tj|��|S)Nr�z.sockr�)r2r3r4rJr�)rGrHs  rG�_get_temp_domain_socketr�s<��
�
�_�W�
E�
E�
E�F�B���H�R�L�L�L��I�b�M�M�M�
�IrizUnix sockets requiredc�8�eZdZ	eed��reZd�Zd�ZdS)�UnixSocketHandlerTestr)c�`�t��|_t�|��dSr�)rr�r�rHrms rGrHzUnixSocketHandlerTest.setUp�)��.�0�0�������%�%�%�%�%ric�l�t�|��tj|j��dSr�)r�rRrr5r�rms rGrRzUnixSocketHandlerTest.tearDown
�/���"�"�4�(�(�(�����&�&�&�&�&riN)	rprqrr�hasattrr�r+r�rHrRrsrirGrrsP������4��w�v�y�!�!�,�+��&�&�&�
'�'�'�'�'rirc�0�eZdZ	eZdZd�Zd�Zd�Zd�Z	dS)�DatagramHandlerTestr�c���	t�|��dx|_x|_|_	|�|j|jd��x|_}|���n#t$r}||_Yd}~dSd}~wwxYw|j
���tj
j}t|jt"��r|d|j��|_n||jd��|_d|_|j�|jj
d��|j�|j��t/j��|_dSr�)rrHrr�r�r�r��handle_datagramrqrAr�r�rr?�DatagramHandlerr�r�r^r�r�r0rKrArnr�r>r�s    rGrHzDatagramHandlerTest.setUps^��	7����t����?C�C���C�d�n�t�'<�	�#'�#4�#4�T�\�59�5I�4�$Q�$Q�
Q�D�K�&��L�L�N�N�N�N���	�	�	�$%�D�!��F�F�F�F�F�����	����	���������/���f�+�U�3�3�	?�!�T�+�v�{�;�;�D�N�N�!�T�&�"7��>�>�D�N������&�&�t�'7�'@��'C�D�D�D���#�#�D�N�3�3�3� ��(�(����r�c�:�		|jr|j���|jr8|j�|j��|j���t�|��dS#t�|��wxYwr�)rr�r�r0rKrJrrRrms rGrRzDatagramHandlerTest.tearDown4s���&�	$��{�
#��� � �"�"�"��~�
'�� �.�.�t�~�>�>�>���$�$�&�&�&����d�#�#�#�#�#��H���d�#�#�#�#���r�c��tjdd��}|jt|��d�}t	j|��}t
j|��}|xj|j	dzz
c_|j
���dS)Nr�rr�)r��pack�packetrZr�rrr�r�r*r>r�)rCrrr"rr�s      rGrz#DatagramHandlerTest.handle_datagram?sy���{�4��#�#�����D�	�	�
�
�+���l�6�"�"���&�s�+�+�����6�:��,�,�����������ric��|jr|�|j��tjd��}|�d��|j���|j���|�d��|j���|�|j	d��dS)N�udpr�rr	)
r�r
rrr�r>r�rLrYr�r�s  rGrzDatagramHandlerTest.test_outputGs���� �	1��M�M�$�/�0�0�0��"�5�)�)�����V���������������������V����������������.�9�9�9�9�9riN)
rprqrrrr�r�rHrRrrrsrirGrrs_������$� �L��G�)�)�)�4	$�	$�	$����
:�
:�
:�
:�
:rirc�8�eZdZ	eed��reZd�Zd�ZdS)�UnixDatagramHandlerTestr)c�`�t��|_t�|��dSr�)rr�rrHrms rGrHzUnixDatagramHandlerTest.setUp[s)��.�0�0����!�!�$�'�'�'�'�'ric�l�t�|��tj|j��dSr�)rrRrr5r�rms rGrRz UnixDatagramHandlerTest.tearDown`s/���$�$�T�*�*�*�����&�&�&�&�&riN�	rprqrrrr�r0r�rHrRrsrirGr&r&SsP������7��w�v�y�!�!�.�-��(�(�(�
'�'�'�'�'rir&c�6�eZdZ	eZdZd�Zd�Zd�Zd�Z	d�Z
dS)�SysLogHandlerTestr�c���	t�|��dx|_x|_|_	|�|j|jd��x|_}|���n#t$r}||_Yd}~dSd}~wwxYw|j
���tj
j}t|jt"��r#||jd|jf��|_n||j��|_d|_|j�|jj
d��|j�|j��t/j��|_dS)Nr�rri)rrHr�sl_hdlrr�r�r�rrqrAr�r�rr?r=r�r�r^r�r�r0rKrArnr�r>r�s    rGrHzSysLogHandlerTest.setUpmsg��	7����t����=A�A���A�d�l�T�%:�	�#'�#4�#4�T�\�59�5I�4�$Q�$Q�
Q�D�K�&��L�L�N�N�N�N���	�	�	�$%�D�!��F�F�F�F�F�����	����	���������-���f�+�U�3�3�	7��4��!6�q�!9�6�;� G�H�H�D�L�L��4�� 5�6�6�D�L������&�&�t�'7�'@��'C�D�D�D���#�#�D�L�1�1�1� ��(�(����r�c�:�		|jr|j���|jr8|j�|j��|j���t�|��dS#t�|��wxYwr�)rr�r-r0rKrJrrRrms rGrRzSysLogHandlerTest.tearDown�s���"�	$��{�
#��� � �"�"�"��|�
%�� �.�.�t�|�<�<�<���"�"�$�$�$����d�#�#�#�#�#��H���d�#�#�#�#���r�c�P�|j|_|j���dSr�)r"r�r>r�)rCrs  rGrz!SysLogHandlerTest.handle_datagram�s%��!�.�����������ric��|jr|�|j��tjd��}|�d��|j���|�|jd��|j�	��d|j
_|�d��|j���|�|jd��|j�	��d|j
_|�d��|j���|�|jd��dS)N�slh�späm�
<11>spämFs	<11>spämuhäm-s<11>häm-späm)
r�r
rrr�r>r�rYr�rLr-�
append_nul�identr�s  rGrzSysLogHandlerTest.test_output�s1��� �	1��M�M�$�/�0�0�0��"�5�)�)�����Y����������������*@�A�A�A��������"'�������Y����������������*<�=�=�=��������&�������Y����������������*G�H�H�H�H�Hric�&�tjd��}|j���|j���|�d��|j�d��|�|j	d��dS)Nr1r2g�������?r3)
rrr-rJr>rLr�r�rYr�r�s  rG�test_udp_reconnectionz'SysLogHandlerTest.test_udp_reconnection�s����"�5�)�)�������������������Y��������#���������*@�A�A�A�A�AriN)rprqrrrr�r�rHrRrrr7rsrirGr+r+dsv������,� �L��G�)�)�)�4	$�	$�	$����I�I�I�&B�B�B�B�Brir+c�8�eZdZ	eed��reZd�Zd�ZdS)�UnixSysLogHandlerTestr)c�`�t��|_t�|��dSr�)rr�r+rHrms rGrHzUnixSysLogHandlerTest.setUp�rric�l�t�|��tj|j��dSr�)r+rRrr5r�rms rGrRzUnixSysLogHandlerTest.tearDown�rriNr)rsrirGr9r9�sP������4��w�v�y�!�!�.�-��&�&�&�
'�'�'�'�'rir9z$IPv6 support required for this test.c�2��eZdZ	eZdZ�fd�Z�fd�Z�xZS)�IPv6SysLogHandlerTest)z::1rc���tj|j_t	t
|�����dSr�)r��AF_INET6r�r-rr=rHr�s �rGrHzIPv6SysLogHandlerTest.setUp�s3���+1�?���(�
�#�T�*�*�0�0�2�2�2�2�2ric���tj|j_t	t
|�����dSr�)r��AF_INETr�r-rr=rRr�s �rGrRzIPv6SysLogHandlerTest.tearDown�s3���+1�>���(�
�#�T�*�*�3�3�5�5�5�5�5ri)	rprqrrrr�r�rHrRr�r�s@rGr=r=�s`�������1� �L��G�3�3�3�3�3�6�6�6�6�6�6�6�6�6rir=c�"�eZdZ	d�Zd�Zd�ZdS)�HTTPHandlerTestc�l�	t�|��tj��|_dSr�)rrHrnr�r>rms rGrHzHTTPHandlerTest.setUp�s,��	7����t���� ��(�(����ric�|�|j|_t|j��|_|jdkrI	t	|jd��}|j�|��|_n#d|_YnxYw|�	d��|�
��|j���dS)Nr-zContent-Length��)
�commandr
r;�log_data�int�headers�rfiler`�	post_data�
send_response�end_headersr>r�)rCr�rlens   rG�handle_requestzHTTPHandlerTest.handle_request�s������� ���.�.��
��<�6�!�!�
&��7�?�+;�<�=�=��!(��!3�!3�D�!9�!9�����
&�!%�����������c�"�"�"���������������s�9A,�,	A7c�:�tjd��}|j}|�|jjd��dD�]�}d}|r�	ddl}tj�t��}tj�
|d��}|�|j��}|�
|��|�|���}	n#t$rd}YnwxYwd}d}	t!||jd|���x|_}
|
���|
j���d	|
jz}|o|}tj�|d
||	d���|_d|_|�|j��d
D�]1}
|
|j_|j���d}|�|��|j���|�|jjd
��|�|j |
��|
dkrtC|jj"��}n'tC|j#�$d����}|�|ddg��|�|ddg��|�|d|g����3|j�%��|j�|j��|j�&�����dS)N�httprrgr�zkeycert.pem)�cafiler�)rzlocalhost:%dz/frob)�foo�bar)�secure�context�credentials)r,r-r2r,r%rE�funcNamerr*)'rrr0rKr?�sslr4r;�dirname�__file__r��
SSLContext�PROTOCOL_TLS_SERVER�load_cert_chain�create_default_context�ImportErrorr�rPrrqr�r��server_portrC�h_hdlrrHrArJr>rLr�rYrGr�queryrL�decoder�rJ)rCr�r0rVr�rZ�here�localhost_certrrWr�host�
secure_clientrJr*�ds                rGrzHTTPHandlerTest.test_output�s���"�6�*�*���&���!�!�$�"2�";�A�">�?�?�?�#�0	 �0	 �F�#�D��
�
P��J�J�J��7�?�?�8�4�4�D�%'�W�\�\�$�
�%F�%F�N� �^�^�C�,C�D�D�F��*�*�>�:�:�:�!�8�8��8�O�O�G�G��#�"�"�"�!�F�F�F�"��������#1�$��8K�48��$I�$I�$I�
I�D�K�&��L�L�N�N�N��L������!�F�$6�6�D�"�-�v�M�!�*�6�6�t�W�>K�?F�CQ�7�S�S�D�K�!�D�M��"�"�4�;�/�/�/�)�
2�
2��%+���"���"�"�$�$�$������S�!�!�!���!�!�#�#�#�� � ���!3�W�=�=�=�� � ���v�6�6�6��U�?�?� ���!4�5�5�A�A� ���!6�!6�w�!?�!?�@�@�A�� � ��6��V�H�5�5�5�� � ��:����@�@�@�� � ��5��C�5�1�1�1�1��K��������*�*�4�;�7�7�7��K�������a0	 �0	 s�C�C(�'C(N)rprqrrrHrPrrsrirGrCrC�sF������ �)�)�)����5 �5 �5 �5 �5 rirCc�(�eZdZ	d�Zd�Zd�Zd�ZdS)�
MemoryTestc�J�	t�|��i|_dSr�)rrH�
_survivorsrms rGrHzMemoryTest.setUp&s"��F����t��������ric��	|D]<}t|��t|��f}tj|��|j|<�=dSr�)�idr��weakref�refrn)rCrWr�keys    rG�_watch_for_survivalzMemoryTest._watch_for_survival+sO��	��	4�	4�C��S�'�'�4��9�9�$�C�#*�;�s�#3�#3�D�O�C� � �	4�	4ric�0�	tj��g}|j���D]'\\}}}|���|�|���(|r<|�dt
|��d�|��fz��dSdS)Nz;%d objects should have survived but have been destroyed: %sz, )�gc�collectrnr�rCr]rZr�)rC�dead�id_�repr_rrs     rG�_assertTruesurvivalzMemoryTest._assertTruesurvival2s���I�
�
������!%��!6�!6�!8�!8�	#�	#��L�S�%�#��s�u�u�}����E�"�"�"���	N��I�I�.�14�T���D�I�I�d�O�O�0L�M�
N�
N�
N�
N�
N�	N�	Nric�~�|j�tj��tjd��}|�|��|�tj��|j�|�����|�|�����|�	dg��~|�
��tjd��}|�|�����|�	ddg��dS)NrT)rTr7r})rTr7r~)r0r6rr�rrtr7r�rnrhr{)rCrTrUs   rG�test_persistent_loggersz"MemoryTest.test_persistent_loggers>s(��	
��!�!�'�,�/�/�/����&�&��� � ��%�%�%����W�]�#�#�#�����t�0�0�2�2�3�3�3��	�	�$�#�#�%�%�&�&�&����!�
�	�	�	�
�� � �"�"�"����&�&���	�	�$�#�#�%�%�&�&�&����!�!�
�	�	�	�	�	riN)rprqrrrHrtr{r}rsrirGrlrl"sV������4����
4�4�4�
N�
N�
N�����rirlc��eZdZd�Zd�ZdS)�EncodingTestc��tjd��}tjdd��\}}t	j|��d}	tj|d���}|�|��	|�|��|�	|��|���n.#|�	|��|���wxYwt|d���}	|�|����
��|��|���n#|���wxYw	tj�|��rt	j|��dSdS#tj�|��rt	j|��wwxYw)N�testrhztest_logging-1-ufoo€r%r})rrr2r3r4rJrQrAr�rKr�rYr`�rstripr;�isfiler�)rCr�rGrHr�r�r�s       rG�test_encoding_plain_filez%EncodingTest.test_encoding_plain_fileWs������'�'���!�&�*;�<�<���B�
��������	��)�"�w�?�?�?�G��N�N�7�#�#�#�
 ����D�!�!�!��!�!�'�*�*�*��
�
�������!�!�'�*�*�*��
�
���������R�'�*�*�*�A�
�� � ��������!2�!2�D�9�9�9����	�	�	�	�����	�	�	�	����	��w�~�~�b�!�!�
��	�"�
�
�
�
�
�
�
��r�w�~�~�b�!�!�
��	�"�
�
�
�
�
���s<�+F�0B/�*F�/+C�F�/:D>�)F�>E�F�6Gc�(�tjd��}d}tjd��}d|_tj��}||d��}tj|��}|�|��	|�	|��|�
|��|���n.#|�
|��|���wxYw|���}|�
|d��dS)Nr�uдо свидания�cp1251�stricts�� �������
)rr�codecs�	getwriterr'r3�BytesIOr8rAr�rKrJrWrY)rCr��message�writer_classr5�writerr�rgs        rG�test_encoding_cyrillic_unicodez+EncodingTest.test_encoding_cyrillic_unicodeqs������'�'��Q���'��1�1�� (����������f�h�/�/���'��/�/�����w����	��K�K�� � � ����g�&�&�&��M�M�O�O�O�O��
���g�&�&�&��M�M�O�O�O�O�����O�O��������J�K�K�K�K�Ks�;B:�:+C%N)rprqrrr�r�rsrirGrrVs7���������4L�L�L�L�Lrirc��eZdZd�Zd�ZdS)�WarningsTestc	�n�tj��5tjd��|�tjd��tjdt���tj��}tj	|��}tj
d��}|�|��tjd��|�
|��|���}|���|�|�d��d��tj��}tjd	td
d|d��|���}|���|�|d
��ddd��dS#1swxYwYdS)NTF�always)�category�py.warningszI'm warning you...z UserWarning: I'm warning you...
r�Explicit�dummy.py�*z
Dummy linez0dummy.py:42: UserWarning: Explicit
  Dummy line
)�warnings�catch_warningsr�captureWarningsr��filterwarnings�UserWarningr3r4r8rrA�warnrKrWrJr��find�showwarningrY)rCr5rQr�rg�a_files      rG�
test_warningszWarningsTest.test_warnings�s���
�
$�
&�
&�	F�	F��#�D�)�)�)��O�O�G�3�U�;�;�;��#�H�{�C�C�C�C��[�]�]�F��%�f�-�-�A��&�}�5�5�F����a� � � ��M�.�/�/�/�� � ��#�#�#����!�!�A�
�G�G�I�I�I����q�v�v�&I�J�J�A�N�N�N��[�]�]�F�� ��[�*�b�!'��
7�
7�
7����!�!�A��L�L�N�N�N����Q�D�
F�
F�
F�)	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F�	F�	Fs�F	F*�*F.�1F.c��tj��5tjd��|�tjd��tjd��}|�|jg��tjdtdd��|�t|j��d��|�|jdtj��ddd��dS#1swxYwYdS)	NTFr�r�r�r�rkr)
r�r�rr�r�rrYr?r�r�rZ�assertIsInstance�NullHandlerr�s  rG�test_warnings_no_handlersz&WarningsTest.test_warnings_no_handlers�s2��
�
$�
&�
&�
	K�
	K��#�D�)�)�)��O�O�G�3�U�;�;�;��&�}�5�5�F����V�_�b�1�1�1�� ��[�*�b�I�I�I����S���1�1�1�5�5�5��!�!�&�/�!�"4�g�6I�J�J�J�
	K�
	K�
	K�
	K�
	K�
	K�
	K�
	K�
	K�
	K�
	K�
	K����
	K�
	K�
	K�
	K�
	K�
	Ks�CC4�4C8�;C8N)rprqrrr�r�rsrirGr�r��s:������F�F�F�0K�K�K�K�Krir�c�,�tj||��Sr�)rr:)rr�s  rG�
formatFuncr��s����V�W�-�-�-ric��eZdZdd�ZdS)�myCustomFormatterNc��dSr�rs)rC�fmtr�s   rGr�zmyCustomFormatter.__init__�s���rir�)rprqrrr�rsrirGr�r��s(������
�
�
�
�
�
rir�c�(�tj��Sr�)rr8rsrirG�handlerFuncr��s��� �"�"�"ric��eZdZdS)�
CustomHandlerN�rprqrrrsrirGr�r����������Drir�c
�r�eZdZ	ejZdZddddiiddddd	d
�iddgd�d
�Zddddiiddddd	d
�idddgd�iddid�Zddddiiddddd	d
�idddiiddgd�d�Zddddiidddddd
�idddgd�iddid�Z	ddddiiddddd	d
�idddgd�iddid�Z
ddddiiddddd	d
�idddgd�iddid�Zddddiiddddd	d
�idddgd�iddid�Zddedzdd�iddddd	d
�iddgd�d
�Z
dedd�edzdd�edd�d�dddd	d
�deid�ddgd�d
�Zddddiidedzddd	d
�idddgd�iddid�Zddddiidedzddd	dd�idddgd�iddid�Zddddiiddddd	d
�id ddgd�iddid�Zdd!dddiiddddd	d
�iddgd�id"�ddid#�Zdd$dddiiddddd	d
�iddgd�id"�ddid#�Zddddiiddddd	d
�idddgd�iddid�Zdd$dddiiddd%iid&�Zdd$ddd%iiddd%iid&�Zddddiid'd(diiddddd	d'gd)�iddd'gd*�iddgd�d+�Zddddiiddddd	d
�id,dd-idddgd�iddid.�Zdddiiddddd	d
�id,dd-idddgd�iddid/�Zd0dddiiddddd	d
�id,dd-idddgd�iddid.�Zddddiiddddd	d1d2d3�d4�iddgd�d
�Zdd5d6d7d8�iddd5d9�d:d;d5d<dd=�d>�d?dd@gdAdB�idC�Zddedzdd!dD�iddddd	d
�idEddgdAdB�idC�Z ddedzdd!dF�iddddd	d
�idEddgdAdB�idC�Z!ddedGzdd!dF�iddddd	d
�idEddgdAdB�idC�Z"ddedd!dD�iddddd	d
�idEddgdAdB�idC�Z#dH�Z$dI�Z%efdJ�Z&dK�Z'dL�Z(dM�Z)dN�Z*dO�Z+dP�Z,dQ�Z-dR�Z.dS�Z/dT�Z0dU�Z1dV�Z2dW�Z3dX�Z4dY�Z5dZ�Z6d[�Z7d\�Z8dpd^�Z9e:j;��d_���Z<e:j;��d`���Z=e:j;��da���Z>db�Z?dc�Z@dd�ZAde�ZBdf�ZCdg�ZDdh�ZEdi�ZFdj�ZGdk�ZHdl�ZIdm�ZJdn�ZKdo�ZLd]S)q�ConfigDictTestrsrk�form1rz%(levelname)s ++ %(message)sr��logging.StreamHandlerr�zext://sys.stdout)r��	formatterr�r5r��r�r?)r�r�r?r�r�r7r�)r�r�r?�loggersr�zext://sys.stdbout�NTOSET�WRANING�misspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)�()rz.formatFunc)r��form2�form3r�)r��hand2z.CustomHandlerzinvalid parameter name)r�r�r�r5r�r�F)�compilerr�)r�r�r�r?r�r�Tr�)r��incrementalr?r��filt1rE)r�r�r�r5�filters�r�r�)r�r�r�r?r�r�zcfg://true_formatterszcfg://handler_configs[hand1])r��true_formatters�handler_configsr�r?r�r�)r�r�r�r?r�r�r�rU�!
)rT�
terminator)r�r�r�r5r��mySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s�$)r�style)r�r�r�zlogging.handlers.MemoryHandler��
fileGlobal)r��capacityr�rjr�)r��bufferGlobal�mymoduler��true)r�r?rM)r�r�r?r�)r�r�validate�my_test_logger_custom_formatter)r�rr�z.myCustomFormatterc�D�tj�|��dSr�)rrw�
dictConfig)rCrys  rGr|zConfigDictTest.apply_config�s����!�!�$�'�'�'�'�'ric��tj��5}|�|j��t	j��}|�|�����|�|�����|�	dg|���|�	g��ddd��dS#1swxYwYdSr~r�r�s   rGr�zConfigDictTest.test_config0_ok�r�r�c��tj��5}|�|��tjd��}|�|�����|�|�����|�ddg|���|�g��ddd��dS#1swxYwYdSr�r�r�s    rGr�zConfigDictTest.test_config1_ok�r�r�c�R�|�t|j|j��dSr�r�rms rGr�z#ConfigDictTest.test_config2_failure�r�ric�R�|�t|j|j��dSr�)rrrr|�config2arms rG�test_config2a_failurez$ConfigDictTest.test_config2a_failure��%�����)�T�%6��
�F�F�F�F�Fric�R�|�t|j|j��dSr�)rrrr|�config2brms rG�test_config2b_failurez$ConfigDictTest.test_config2b_failure�r�ric�R�|�t|j|j��dSr�r�rms rGr�z#ConfigDictTest.test_config3_failure�r�ric��tj��5}|�|j��	t	���#t$rtjd��YnwxYwtj�	d��|�
|���d��|�g��ddd��dS#1swxYwYdSr�)
rr�r|r�r�rr�r0r�r�rYrWrh�rCr�s  rGr�zConfigDictTest.test_config4_ok�s��
�
$�
&�
&�	&�&����d�l�+�+�+�
2�"�n�n�$���
2�
2�
2��!�.�1�1�1�1�1�
2�����J�O�O�A�������V�_�_�.�.�A�
C�
C�
C�
�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&�-�C�>�A�C�A�AC�C�Cc��tj��5}|�|j��	t	���#t$rtjd��YnwxYwtj�	d��|�
|���d��|�g��ddd��dS#1swxYwYdSr�)
rr�r|�config4ar�rr�r0r�r�rYrWrhr�s  rG�test_config4a_okzConfigDictTest.test_config4a_ok�s��
�
$�
&�
&�	&�&����d�m�,�,�,�
2�"�n�n�$���
2�
2�
2��!�.�1�1�1�1�1�
2�����J�O�O�A�������V�_�_�.�.�A�
C�
C�
C�
�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&r�c�<�|�|j���dSr�r�rms rGr�zConfigDictTest.test_config5_ok�r�ric�R�|�t|j|j��dSr�)rrrr|r�rms rG�test_config6_failurez#ConfigDictTest.test_config6_failure�s%�����)�T�%6���E�E�E�E�Eric��tj��5}|�|j��t	jd��}|�|�����|�|�����|�	ddg|���|�	g��ddd��n#1swxYwYtj��5}|�|j
��t	jd��}|�|j��t	jd��}|�|�����|�|�����|�	ddg|���|�	g��ddd��dS#1swxYwYdS)Nr�r�rr~r��r�r~�r|r)
rr�r|r�rrr�rnr�rhr�rBrr�s   rGr�zConfigDictTest.test_config7_ok�sF��
�
$�
&�
&�	&�&����d�l�+�+�+��&�'8�9�9�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��!�!���#��
"�
�
�
�

�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&��
$�
&�
&�
	&�&����d�l�+�+�+��&�'8�9�9�F��O�O�F�O�,�,�,��&�'7�8�8�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��!�!���#��
"�
�
�
�

�!�!�"�%�%�%�
	&�
	&�
	&�
	&�
	&�
	&�
	&�
	&�
	&�
	&�
	&�
	&����
	&�
	&�
	&�
	&�
	&�
	&s%�B+C�C�C�)CG�G�Gc�T�tj��5}|�|j��t	jd��}|�|�����|�|�����|�	ddg|���|�	g��ddd��n#1swxYwYtj��5}|�|j
��t	jd��}|�|j��|�|�����|�|�����t	jd��}|�|�����|�|�����|�	gd�|���|�	g��ddd��dS#1swxYwYdS)Nr�r�rr~r�)r�r��r�r��r|r�)
rr�r|r�rrr�rnr�rhr�r:rr�s   rG�test_config_8_okzConfigDictTest.test_config_8_oks���
�
$�
&�
&�	&�&����d�l�+�+�+��&�'8�9�9�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��!�!���#��
"�
�
�
�

�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&��
$�
&�
&�	&�&����d�l�+�+�+��&�'8�9�9�F����V�_�-�-�-��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��&�'7�8�8�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��!�!�#�#�#�
�
"�
�
�
�
�!�!�"�%�%�%�%	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&s%�B+C�C�C�)D'H�H!�$H!c��tj��5}|�|j��t	jd��}t	jd��}|�|�����|�|�����|�	|�����|�
gd�|���|�
g��ddd��n#1swxYwYtj��5}|�|j��t	jd��}|�|j
��|�|�����|�|�����t	jd��}|�|�����|�|�����|�	|�����|�
gd�|���|�
g��ddd��dS#1swxYwYdSr�)rr�r|r�rrr�rnr�r�rh�config8ar:rr�s    rG�test_config_8a_okz ConfigDictTest.test_config_8a_ok5s���
�
$�
&�
&�	&�&����d�m�,�,�,��&�'8�9�9�F�!�*�+@�A�A�J��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-����� 1� 1� 3� 3�4�4�4��!�!�#�#�#��	
"�
�
�
�
�!�!�"�%�%�%�'	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�(�
$�
&�
&�	&�&����d�m�,�,�,��&�'8�9�9�F����V�_�-�-�-��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��&�'7�8�8�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-����� 1� 1� 3� 3�4�4�4��!�!�#�#�#�
�
"�
�
�
�
�!�!�"�%�%�%�)	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&r�c��tj��5}|�|j��t	jd��}|�|�����|�g|���|�|j	��|�|�����|�g|���|�|j
��|�|�����|�dg|���ddd��dS#1swxYwYdS)Nr�r~r�)rr�r|�config9rrr�rnrh�config9a�config9br�s   rG�test_config_9_okzConfigDictTest.test_config_9_ok`sy��
�
$�
&�
&�	�&����d�l�+�+�+��&�'8�9�9�F��K�K��)�)�+�+�,�,�,��!�!�"�V�!�4�4�4����d�m�,�,�,��K�K��)�)�+�+�,�,�,��!�!�"�V�!�4�4�4����d�m�,�,�,��K�K��)�)�+�+�,�,�,��!�!��#��
"�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�DD?�?E�Ec��tj��5}|�|j��t	jd��}|�|�����t	jd��}|�|�����t	jd��}|�|�����t	jd��}|�|�����|�	ddg|���ddd��dS#1swxYwYdS�Nr�r�r�zcompiler.parser.codegen)r�r{r�r~)
rr�r|�config10rrr�rnr�rhr�s   rG�test_config_10_okz ConfigDictTest.test_config_10_okrsp��
�
$�
&�
&�	�&����d�m�,�,�,��&�'8�9�9�F��N�N�4�,�,�.�.�/�/�/��&�z�2�2�F��N�N�4�,�,�.�.�/�/�/��&�'7�8�8�F��N�N�4�,�,�.�.�/�/�/��&�'@�A�A�F��L�L��*�*�,�,�-�-�-��!�!� ��#��
"�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�D E�E�Ec�:�|�|j��dSr�)r��config11rms rG�test_config11_okzConfigDictTest.test_config11_ok�s�����T�]�+�+�+�+�+ric�R�|�t|j|j��dSr�)rrrr|�config12rms rG�test_config12_failurez$ConfigDictTest.test_config12_failure��%�����)�T�%6��
�F�F�F�F�Fric�R�|�t|j|j��dSr�)rrrr|�config13rms rG�test_config13_failurez$ConfigDictTest.test_config13_failure�rric��tj��5}|�|j��tjd}|�|jd��|�|jd��t	j	d��|�
|����d����ddd��dS#1swxYwYdS)Nr�rUr��Exclamationz
Exclamation!
)
rr�r|�config14rr!rYrTr�r�rBrWr@)rCr�rQs   rG�test_config14_okzConfigDictTest.test_config14_ok�s��
�
$�
&�
&�	J�&����d�m�,�,�,��!�'�*�A����Q�U�E�*�*�*����Q�\�5�1�1�1��O�M�*�*�*��O�O�F�O�O�-�-�6�6�7G�H�H�I�I�I�
	J�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J����	J�	J�	J�	J�	J�	Js�B1C�C�Cc��d�}|���5tjdd��\}}tj|��ddd|dd�id	dgid
�}|�|��|�|��ddd��n#1swxYwYtjjd}|�	|||��dS)Nc�V�|���tj|��dSr�r�r�s  rGr�z0ConfigDictTest.test_config15_ok.<locals>.cleanup�r�rirhr�rkr{zlogging.FileHandlerr%)r��filenamer'r?�r�r?r�r)
r�r2r3r4rJr|rr�r?r�)rCr�rGrHrwr�s      rG�test_config15_okzConfigDictTest.test_config15_ok�s/��	�	�	��
+�
+�
-�
-�	&�	&��%�f�.?�@�@�F�B���H�R�L�L�L���!6�$&�$+����������F�
���f�%�%�%����f�%�%�%�'	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�*�,�'��*�������"�-�-�-�-�-s�A&B
�
B�BNc���|�d��}tj�d|��}|���|j���|j}|j���	tj	tj
tj��}|�d��|�
d|f��tjdt!|����}||z}d}t!|��}	|	dkr-|�||d���}
||
z
}|	|
z}	|	dk�-|���|j�d��tj���t)j|��dS#|j�d��tj���t)j|��wxYw)Nr%rg@r/r�)r�rrw�listenrqr�r�r�rLr�rA�SOCK_STREAM�
settimeout�connectr�r!rZ�sendrJ�
stopListeningrr�)rC�text�verifyr�r�rrrg�	sentsofar�left�sents           rG�setup_via_listenerz!ConfigDictTest.setup_via_listener�s����{�{�7�#�#���N�!�!�!�V�,�,��	���	�	�	�	��������v��	��
�
����	,��=����1C�D�D�D��O�O�C� � � ��L�L�+�t�,�-�-�-��;�t�S��Y�Y�/�/�D��t��A��I��q�6�6�D���(�(��y�y��9�:�:��/�/���T�!�	�������(�(�
�J�J�L�L�L�
�G�L�L������N�(�(�*�*�*��(��+�+�+�+�+��
�G�L�L������N�(�(�*�*�*��(��+�+�+�+���s�CF&�&AG4c��tj��5}|�tj|j����t
jd��}|�|�	����t
jd��}|�|�	����t
jd��}|�|�	����t
jd��}|�
|�	����|�ddg|���ddd��dS#1swxYwYdSr�)rr�r�json�dumpsr�rrr�rnr�rhr�s   rG�test_listen_config_10_okz'ConfigDictTest.test_listen_config_10_ok�sz��
�
$�
&�
&�	�&��#�#�D�J�t�}�$=�$=�>�>�>��&�'8�9�9�F��N�N�4�,�,�.�.�/�/�/��&�z�2�2�F��N�N�4�,�,�.�.�/�/�/��&�'7�8�8�F��N�N�4�,�,�.�.�/�/�/��&�'@�A�A�F��L�L��*�*�,�,�-�-�-��!�!� ��#��
"�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�D2E�E�Ec���tj��5}|�tjt
j����tjd��}|�	|�
����|�|�
����|�ddg|���|�g��ddd��dS#1swxYwYdSr�)
rr�rrurvrrr�rrr�rnr�rhr�s   rG�test_listen_config_1_okz&ConfigDictTest.test_listen_config_1_ok�s#��
�
$�
&�
&�	&�&��#�#�H�O�N�4J�$K�$K�L�L�L��&�'8�9�9�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-��!�!���#��
"�
�
�
�

�!�!�"�%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&s�CC#�#C'�*C'c�X�d�}d�}tjd��}tjtj��}t
j��5}|�||��|�	|�
����|�|�
����ddd��n#1swxYwY|�g|���|�ddgd���t
j��5}|�|��tjd��}|�	|�
����|�|�
����ddd��n#1swxYwY|�d	d
g|���|�ddgd���t
j��5}|�|ddd�|��tjd��}|�	|�
����|�|�
����ddd��n#1swxYwY|�dd
g|���|�ddgd���dS)Nc��dSr�rs��stuffs rG�verify_failz6ConfigDictTest.test_listen_verify.<locals>.verify_fail�s���4ric��|ddd�S)Nr)rsr%s rG�verify_reversez9ConfigDictTest.test_listen_verify.<locals>.verify_reverse�s�����2��;�rir�r~r�rr�)rbr�r�r)r�r�)
rrrurvrrr�rr�rr�rnr�rh)rCr'r)r��to_sendr�s      rG�test_listen_verifyz!ConfigDictTest.test_listen_verify�s���	�	�	�	�	�	��"�#4�5�5���/�.�"8�9�9���
$�
&�
&�	.�&��#�#�G�[�9�9�9��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-�		.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�
	
���b���0�0�0������
�+�	�	,�	,�	,��
$�
&�
&�	.�&��#�#�G�,�,�,��&�'8�9�9�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	
�����
��	�	�	�	�
	
�����
�+�	�	,�	,�	,��
$�
&�
&�	.�&��#�#�G�D�D�b�D�M�>�B�B�B��&�'8�9�9�F��K�K��)�)�+�+�,�,�,��L�L��*�*�,�,�-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	
�����
��	�	�	�	�
	
�����
�+�	�	,�	,�	,�	,�	,s9�A%B=�=C�C�A8F�F�F�BI-�-I1�4I1c�R�|�t|j|j��dSr�)rrBr|�out_of_orderrms rG�test_out_of_orderz ConfigDictTest.test_out_of_order3
s&�����*�d�&7��9J�K�K�K�K�Kric�`�tj|j��}d|ddd<|�|��t	jd��jd}|�|jtj	��|�|j
jtj��dS)Nz-${asctime} (${name}) ${levelname}: ${message}r�r�rr�r)
r"�deepcopyr-r|rrr?r�rjrr��_style�StringTemplateStyle�rCrwr�s   rG�#test_out_of_order_with_dollar_stylez2ConfigDictTest.test_out_of_order_with_dollar_style6
s�����t�0�1�1��>m��|��0�1�(�;����&�!�!�!��#�J�/�/�8��;�����g�n�g�o�>�>�>����g�/�6�%�9�	;�	;�	;�	;�	;ric��|�|j��tjd��jd}|�|jt��dS�Nr�r)r|�custom_formatter_class_validaterrr?r�r�rm�rCr�s  rG�)test_custom_formatter_class_with_validatez8ConfigDictTest.test_custom_formatter_class_with_validate@
sS�����$�>�?�?�?��#�$E�F�F�O�PQ�R�����g�/�1C�D�D�D�D�Dric��|�|j��tjd��jd}|�|jt��dSr6)r|� custom_formatter_class_validate2rrr?r�r�rmr8s  rG�*test_custom_formatter_class_with_validate2z9ConfigDictTest.test_custom_formatter_class_with_validate2E
sS�����$�?�@�@�@��#�$E�F�F�O�PQ�R�����g�/�1C�D�D�D�D�Dric��|j���}d|ddd<|�|��tjd��jd}|�|jt��dS)Nr�r�r�r�r�r)	r7r"r|rrr?r�r�rmr3s   rG�9test_custom_formatter_class_with_validate2_with_wrong_fmtzHConfigDictTest.test_custom_formatter_class_with_validate2_with_wrong_fmtJ
sz���5�:�:�<�<��14��|��W�%�g�.�	
���&�!�!�!��#�$E�F�F�O�PQ�R�����g�/�1C�D�D�D�D�Dric�R�|�t|j|j��dSr�)rrBr|� custom_formatter_class_validate3rms rG�*test_custom_formatter_class_with_validate3z9ConfigDictTest.test_custom_formatter_class_with_validate3S
s&�����*�d�&7��9^�_�_�_�_�_ric�R�|�t|j|j��dSr�)rrBr|�custom_formatter_with_functionrms rG�,test_custom_formatter_function_with_validatez;ConfigDictTest.test_custom_formatter_function_with_validateV
s&�����*�d�&7��9\�]�]�]�]�]ric��dgd�ddd�dddd	gd
ggd�d�}tj�|��}|�|�d
��d��|�|�d��d��|�|�d��d��|�|�d��d	��|�|�d��d��|�|�d��d��|�d��}|�|�d��gd���|�t|jd��|�t|jd��|�t|jd��dS)N)rkr��)rN�b�crrF)rjr�)�g)rQrX�jr��lr�r[)�ozcfg://alist�p)�atuple�alist�adict�nest1�nest2�nest3zcfg://atuple[1]r�zcfg://alist[1]rGzcfg://nest1[1][0]rQzcfg://nest2[1][1]z
cfg://adict.dzcfg://adict[f]zcfg://nest3rkzcfg://nosuchzcfg://!zcfg://adict[2])	rrw�BaseConfiguratorrY�convert�popr�KeyErrorrB)rCrj�bcr�s    rG�test_baseconfigzConfigDictTest.test_baseconfigY
s����$�_�_��Q�(�(�+��C��:�s�+�.�.�.�

�
���^�
,�
,�Q�
/�
/��������$5�6�6��:�:�:�������$4�5�5�s�;�;�;�������$7�8�8�#�>�>�>�������$7�8�8�#�>�>�>�������O�4�4�c�:�:�:�������$4�5�5�q�9�9�9��J�J�}�%�%��������q���?�?�?�3�3�3����(�B�J��?�?�?����*�b�j�)�<�<�<����(�B�J�0@�A�A�A�A�Aric���ddlm�G�fd�dtj��}�dddg��}|dd	g�
��}dd||d
�iddgd�d�}t	j��5}|�|��tjd��ddd��n#1swxYwY|�|�	��d��dS)Nr)�
namedtuplec�,���eZdZ��fd�Z�fd�Z�xZS)�1ConfigDictTest.test_namedtuple.<locals>.MyHandlerc�H��t��j|i|��||_dSr�)rr��resource)rCr_rWrzr�r[s    ��rGr�z:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__t
s*��� ���� �$�1�&�1�1�1�,4��
�
�
ric���|xjd|jj��z
c_t���|��S�N� )r*r_�typerr)rCr�r�s  �rGrz6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emitx
s7����
�
�6�$�-�"4�6�6�6�
�
��w�w�|�|�F�+�+�+rir�)r�r[s@�rG�	MyHandlerr]s
sW��������
5�
5�
5�
5�
5�
5�
,�
,�
,�
,�
,�
,�
,�
,�
,rird�Resourcerc�labels�my_typerN)rcrfrk�	myhandler)r�r_r�r�rzsome logzsome log my_type
)
�collectionsr[rr8rr�r|r�rYrW)rCrdrer_rwr�r[s      @rG�test_namedtuplezConfigDictTest.test_namedtupleo
sb���*�*�*�*�*�*�	,�	,�	,�	,�	,�	,�	,��-�	,�	,�	,��:�j�6�8�*<�=�=���8��C�5�9�9�9����#� (���� &�K�=�A�A�	
�	
���
$�
&�
&�	%�&����f�%�%�%��L��$�$�$�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%�	
������*�*�,@�A�A�A�A�As� *B�B�Bc�t�d�}|�dd|gd�d���gtj��_dS)Nc��dSrrs)res rGr�zAConfigDictTest.test_config_callable_filter_works.<locals>.filter_�
s���1rirkr7r��r�r��r|rrr��rCr�s  rG�!test_config_callable_filter_worksz0ConfigDictTest.test_config_callable_filter_works�
s[��	�	�	�����G��	�"J�"J�
�
�	�	�	�')�����#�#�#ric��tjd��}|�dd|gd�d���gtj��_dS)Nr�rkr7r�rm)rr�r|rr�ros  rG�test_config_filter_worksz'ConfigDictTest.test_config_filter_works�
s[���.��-�-������G��	�"J�"J�
�
�	�	�	�')�����#�#�#ric��Gd�d��}|��}|�dd|gd�d���gtj��_dS)Nc��eZdZd�ZdS)�BConfigDictTest.test_config_filter_method_works.<locals>.FakeFilterc��dSrrs)rCres  rGr�zIConfigDictTest.test_config_filter_method_works.<locals>.FakeFilter.filter�
s���qriNr�rsrirG�
FakeFilterru�
s#������
�
�
�
�
rirwrkr7r�rmrn)rCrwr�s   rG�test_config_filter_method_worksz.ConfigDictTest.test_config_filter_method_works�
s���	�	�	�	�	�	�	�	��*�,�,������G��	�"J�"J�
�
�	�	�	�')�����#�#�#ric	��Gd�d��}dd|��fD]*}|�t|jdd|gd�d����+dS)Nc��eZdZdS)�;ConfigDictTest.test_invalid_type_raises.<locals>.NotAFilterNr�rsrirG�
NotAFilterr{�
s�������rir|rkr7r�rm)rrBr|)rCr|r�s   rG�test_invalid_type_raisesz'ConfigDictTest.test_invalid_type_raises�
s{�����������a�����.�	�	�G������!���g�Y�'O�'O�P�P�
�
�
�
�	�	ric��dddddd�idddgd�id	�}tjd��}|�|j��|�|��|�|j��|�d
di��|�|j��|d=|�|��|�|j��dS)NrkF�consoler7r�)r�r�rNr�)r�r�r?r�r�r�)rrr:rr|rB)rCrwr�s   rG�
test_90195zConfigDictTest.test_90195�
s���(-��$�4�����$�!*�����
�
�� �"�3�'�'�������)�)�)����&�!�!�!������)�)�)����9�a�.�)�)�)������(�(�(��-�.����&�!�!�!������)�)�)�)�)rir�)Mrprqrrr	r�rVr�r�r�r�r�r�r�r�rmr�r�r�r�r�r�r�r�r�r�r�r�r�rrr	r-r7r;r@rCr|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
rrr�requires_working_socketr r"r+r.r4r9r<r>rArDrYrjrprrrxr}r�rsrirGr�r��s�������3� /� I��,�����9��
�
�1�%�"�.�	��
� �!��
�
���G�.���9��
�
�1�%�"�.�	��
�
�!�%�Y�!�!�
�
�i�
�+��G�8���9��
�
�1�%�"�.�	��
�
��'�!�
� �!��
�
�)��H�8���9��
�
�1�%�"�/�	��
�
�!�%�Y�!�!�
�
�i�
�+��G�8���9��
�
�1�%�"�.�	��
�
�!�%�Y�!�!�
�
�i�
�+��H�:���9��
�
�1�%�"�.�	��
�
�!�%�Y�!�!�
�
�i�
�+��H�8���9��
�
�1�/�"�.�	��
�
�!�%�Y�!�!�
�
�i�
�+��G�8���"7�7�?���
�
�1�%�"�.�	��
��%�Y�
�
�!��G�0�*�?���
 �-�/�?���
"�?���

�

� 2�%�"�.�	���{��

�

��%�Y�
�
�7��H�F���9��
�
�"�%5�5�%�"�.�	��
�
�!�%�Y�!�!�
�
�i�
�+��G�:���9��
�
�"�%5�5�%�"�.�.���
�
�!�%�Y�!�!�
�
�i�
�-��G�<���9��
�
�1�%�"�.�	��
�
�!�%�Y� � �
�
�i�
�+��G�<�%*���9��
�
�1�%�"�.�	��
�"�%�Y��� �
�
�
�i�
�1��G�>�%)���9��
�
�1�%�"�.�	��
�"�%�Y��� �
�
�
�i�
�1��H�<���9��
�
�1�%�#�.�	��
�
�#�%�Y�!�!�
�
�h�
�+��G�6����)��
�
��&�!�
�
�
�H� ����&��
�
��&�!�
�
�
�H�"���9��
�
��*��
�
�1�%�"�.�$�I���
�
�!�$�I�!�!�
� �!��
�
�7��H�F���9��
�
�1�%�"�.�	��
�/��4�
�
�!�%�Y�!�!�
�
�i�
�3��H�B
��9��
�
�1�%�"�.�	��
�/��4�
�
�!�%�Y�!�!�
�
�i�
�1��H�>���9��
�
�1�%�"�.�	��
�/��4�
�
�!�%�Y�!�!�
�
�i�
�3��H�@���9��
�
�1�%�"�.� �"'���	�	�
� �!��
�
�'��H�4��M��"�"�
�1� �0���:��0�&� ���


�

�
� �+�,�#���
�-��L�B���!6�6�>�!���
�
�0�$�!�,�	��
�
.� �$�I�#�0�0�
�#'�'�#�8��!�$9�9�>�!���
�
�0�$�!�,�	��
�
.� �$�I�#�0�0�
�#(�(�$�8��!�$8�8�>�!���
�
�0�$�!�,�	��
�
.� �$�I�#�0�0�
�#(�(�$�8�� �>�!���
�
�0�$�!�,�	��
�
.� �$�I�#�0�0�
�#&�&�"�4(�(�(�
&�
&�
&�&-�
&�
&�
&�
&�F�F�F�G�G�G�G�G�G�F�F�F�
&�
&�
&�
&�
&�
&�2�2�2�F�F�F�&�&�&�:&�&�&�B)&�)&�)&�V���$���&,�,�,�G�G�G�G�G�G�J�J�J�.�.�.�<,�,�,�,�8%�W�$�&�&���'�&��&%�W�$�&�&�&�&�'�&�&�%�W�$�&�&�<,�<,�'�&�<,�|L�L�L�;�;�;�E�E�E�
E�E�E�
E�E�E�`�`�`�^�^�^�B�B�B�,B�B�B�>)�)�)�)�)�)�	)�	)�	)����*�*�*�*�*rir�c��eZdZd�Zd�ZdS)�ManagerTestc���g�G�fd�dtj��}tjd��}|�t|jt��|�|��|�d��}|�d��tjd��|�	�dg��dS)Nc���eZdZd�fd�	ZdS)�6ManagerTest.test_manager_loggerclass.<locals>.MyLoggerNc�2����|��dSr��rC)rCr�r*rW�exc_info�extra�loggeds      �rG�_logz;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log�
s����
�
�c�"�"�"�"�"riro)rprqrrr�)r�s�rG�MyLoggerr��
s3�������
#�
#�
#�
#�
#�
#�
#�
#rir�r�zshould appear in loggedzshould not appear in logged)
r�Logger�Managerr�	TypeError�setLoggerClassrIrr�rY)rCr��manr�r�s    @rG�test_manager_loggerclassz$ManagerTest.test_manager_loggerclass�
s������	#�	#�	#�	#�	#�	#�	#�w�~�	#�	#�	#��o�d�#�#�����)�S�%7��=�=�=����8�$�$�$����v�&�&�����0�1�1�1���5�6�6�6�����";�!<�=�=�=�=�=ric��tjd��}t��}|�|��|�|j|��dSr�)rr��object�setLogRecordFactoryrY�logRecordFactory)rCr�res   rG�test_set_log_record_factoryz'ManagerTest.test_set_log_record_factory�
sM���o�d�#�#���8�8������)�)�)�����-�x�8�8�8�8�8riN)rprqrrr�r�rsrirGr�r��
s2������>�>�>� 9�9�9�9�9rir�c��eZdZd�ZdS)�ChildLoggerTestc��tj��}tjd��}tjd��}|�d��}|�d��}|�|tjd����|�|tjd����|�d��}|�d��}|�d��}|�|tjd����|�|tjd����|�||��dS)	N�abczdef.ghi�xyzzuvw.xyz�def�ghi�abc.defzabc.def.ghi)rr�getChildr�)rCr��l1�l2�c1�c2�c3s       rG�test_child_loggersz"ChildLoggerTest.test_child_loggers�
s�������
�
�u�
%�
%��
�
�y�
)�
)��
�Z�Z��
�
��
�Z�Z�	�
"�
"���
�
�b�'�+�E�2�2�3�3�3��
�
�b�'�+�I�6�6�7�7�7�
�[�[��
�
��
�[�[��
�
��
�[�[��
#�
#���
�
�b�'�+�I�6�6�7�7�7��
�
�b�'�+�M�:�:�;�;�;��
�
�b�"�����riN)rprqrrr�rsrirGr�r��
s#������
�
�
�
�
rir�c��eZdZdS)�DerivedLogRecordNr�rsrirGr�r��
r�rir�c� �eZdZd�Zd�Zd�ZdS)�LogRecordFactoryTestc��Gd�dtj��}t�|��|t��|_|j�|j��tj��|_	dS)Nc��eZdZd�Zd�ZdS)�2LogRecordFactoryTest.setUp.<locals>.CheckingFilterc��||_dSr�)rV)rCrVs  rGr�z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__s
������ric�n�t|��}||jurd|�d|j��}t|���dS)NzUnexpected LogRecord type z, expected T)rcrVr�)rCr�r�r*s    rGr�z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filtersC����L�L���D�H�$�$�$�IJ��� �H�H�&�C�#�C�.�.�(��triN)rprqrrr�r�rsrirG�CheckingFilterr��
s2������
�
�
�
�
�
�
�
rir�)
rr�rrHr�r�r0r��getLogRecordFactory�orig_factory)rCr�s  rGrHzLogRecordFactoryTest.setUp�
s���
	�
	�
	�
	�
	�W�^�
	�
	�
	�	���t����$�n�%5�6�6�����"�"�4�;�/�/�/�#�7�9�9����ric��|j�|j��t�|��tj|j��dSr�)r0r�r�rrRrr�r�rms rGrRzLogRecordFactoryTest.tearDownsI����%�%�d�k�2�2�2����$�����#�D�$5�6�6�6�6�6ric�,�|�t|jj|�����tjt��|j�|�����|�	dg��dS)N)r�r|r})
rr�r0r�rnrr�r�r�rhrms rG�test_logrecord_classz)LogRecordFactoryTest.test_logrecord_classs������)�T�%5�%=��+�+�-�-�	/�	/�	/��#�$4�5�5�5�����t�0�0�2�2�3�3�3����!�
�	�	�	�	�	riN)rprqrrrHrRr�rsrirGr�r��
sA������:�:�:�$7�7�7�
����rir�c� �eZdZdZd�Zd�Zd�Zd�Zej	e
ejd��d��d���Z
ej	e
ejd��d��d	���Zej	e
ejd��d��d
���ZdS)�QueueHandlerTestr�c��t�|��tjd��|_tj�|j��|_d|_t	j	d��|_
d|j
_|j
�tj
��|j
�|j��dS)Nr)�queF)rrH�queue�Queuerr?�QueueHandler�que_hdlrrEr�
que_loggerrMr6r�rArms rGrHzQueueHandlerTest.setUp$s������t�����[��_�_��
��(�5�5�d�j�A�A��
���	�!�+�E�2�2���$)���!��� � ���1�1�1���"�"�4�=�1�1�1�1�1ric�l�|j���t�|��dSr�)r�rJrrRrms rGrRzQueueHandlerTest.tearDown.rOric���|j�|�����|�tj|jj��|j�|�����|�tj|jj��|���}|j�|��|j���}|�	t|tj����|�
|j|jj��|�
|j|jf|df��dSr�)r�r�rnrr��Empty�
get_nowaitr�r�rBr�r�	LogRecordrYrEr*rW)rCr*r�s   rG�test_queue_handlerz#QueueHandlerTest.test_queue_handler2s������d�/�/�1�1�2�2�2����%�+�t�z�'<�=�=�=�����T�.�.�0�0�1�1�1����%�+�t�z�'<�=�=�=����!�!�������$�$�$��z�$�$�&�&�����
�4��):�;�;�<�<�<������D�O�$8�9�9�9����$�(�D�I�.��d��<�<�<�<�<ric���|���}tjtj��}d}|�|j||���}tj|j��}|j�	|��|j
�|��|j�
��}|�||j��|�||j��dS)Nz {name} -> {levelname}: {message})rE�	levelnamer�)rnrr�r�rrEr:r;r�r=r�r�r�r�rYr*r�)rCr*r��log_format_str�
formatted_msgr��
log_records       rG�test_formattingz QueueHandlerTest.test_formatting>s������!�!���(���9�9�	�;��&�-�-�4�9�8A�3�.�P�P�
��%�d�o�6�6�	��
�"�"�9�-�-�-������$�$�$��Z�*�*�,�,�
�����
��7�7�7�����
�(:�;�;�;�;�;ri�
QueueListenerz5logging.handlers.QueueListener required for this testc�8�ttj����}tj�|j|��}|���	|j�	|�
����|j�|�
����|j�|�
����|�
��n#|�
��wxYw|�|�tjd�����|�|�tjd�����|�|�tjd�����|���ttj����}|�tj��tj�|j|d���}|���	|j�	|�
����|j�|�
����|j�|�
����|�
��n#|�
��wxYw|�|�tjd�����|�|�tjd�����|�|�tjd	�����|���dS)
Nr{)r�r�r}r~T)�respect_handler_levelrr�r�)r
r�Matcherrr?r�r�rqr�r�rnr�r�r�rB�matchesr�r|rzrJr6r:)rCr��listeners   rG�test_queue_listenerz$QueueHandlerTest.test_queue_listenerKs����g�o�/�/�0�0���#�1�1�$�*�g�F�F��������	��O�#�#�D�$5�$5�$7�$7�8�8�8��O�!�!�$�"3�"3�"5�"5�6�6�6��O�$�$�T�%6�%6�%8�%8�9�9�9��M�M�O�O�O�O��H�M�M�O�O�O�O��������������M�M�N�N�N��������
�s��K�K�L�L�L��������0@�#��N�N�O�O�O��
�
�����g�o�/�/�0�0������)�*�*�*��#�1�1�$�*�g�HL�2�N�N��������	��O�#�#�D�$5�$5�$7�$7�8�8�8��O�!�!�$�"3�"3�"5�"5�6�6�6��O�$�$�T�%6�%6�%8�%8�9�9�9��M�M�O�O�O�O��H�M�M�O�O�O�O������������#��N�N�O�O�O�����������L�L�M�M�M��������0@�#��N�N�O�O�O��
�
�����s�BC4�4D
�8BK�K'c���tj�|j|j��}|���	ddznG#t$r:}|}|j�|�	��|���Yd}~nd}~wwxYw|j�
|�	��d���|���|�|j
�������d��d��|�|j
�������d��d��dS)Nrkr�r�T��
stack_info�	Traceback�Stack)rr?r�r�r9rq�ZeroDivisionErrorr�r�rnr�r�rYr5rWr�r�)rCr�r�excs    rG�&test_queue_listener_with_StreamHandlerz7QueueHandlerTest.test_queue_listener_with_StreamHandlernsW���#�1�1�$�*�d�n�M�M��������	I�
��E�E�E�� �	I�	I�	I��C��O�%�%�d�&7�&7�&9�&9�C�%�H�H�H�H�H�H�H�H�����	I����	
����d�/�/�1�1�d��C�C�C��
�
���������-�-�/�/�5�5�7�7�=�=�k�J�J�A�N�N�N������-�-�/�/�5�5�7�7�=�=�g�F�F��J�J�J�J�Js�A�
B
�0B�B
c���|j�|j��|j�|j��tj�|j	|j��}|�
��|j�d��|���|�
|j������d��dS)Nr�zque -> ERROR: error)r�r=r<r�rAr9rr?r�r�rqr�r�rYr5rWr�)rCr�s  rG�*test_queue_listener_with_multiple_handlersz;QueueHandlerTest.test_queue_listener_with_multiple_handlers~s���	
�
�"�"�4�#6�7�7�7���"�"�4�>�2�2�2��#�1�1�$�*�d�m�L�L������������g�&�&�&��
�
���������-�-�/�/�5�5�7�7�9N�O�O�O�O�OriN)rprqrrrVrHrRr�r�r��
skipUnlessrrr?r�r�r�rsrirGr�r�s0������3��2�2�2� � � �
=�
=�
=�<�<�<��X�����!1�?�C�C�P�R�R���R�R��B�X�����!1�?�C�C�P�R�R�K�K�R�R�K��X�����!1�?�C�C�P�R�R�	P�	P�R�R�	P�	P�	Prir�r�)�patchc���eZdZ	dZed���Zejej	j
d��d���Zejej	j
d��d���Zed���Z
d�Zd�Zd	S)
�QueueListenerTest�c��	tjd|z��}|�tj��tj�|��}|�|��tj�|��}|���|�	d��|�	d��|�	d��|�	d��|�	d��|�
��|�|��|���dS)Nztest_logger_with_id_%s�one�two�three�four�five)
rrr6r7r?r�rAr�rqr�r�rKrJ)�	log_queuer5r�r�r�s     rG�
setup_and_logzQueueListenerTest.setup_and_log�s��
�
�&�'?�%�'G�H�H�F��O�O�G�M�*�*�*��&�3�3�I�>�>�G����g�&�&�&��'�5�5�i�@�@�H��N�N�����K�K������K�K������K�K�� � � ��K�K������K�K������M�M�O�O�O�� � ��)�)�)��M�M�O�O�O�O�Orir9c��t|j��D]B}tj��}|�||����d|�����C|�|jd|jzd��dS�Nrer�z&correct number of handled log messages)r]�repeatr�r�r�rprY�
call_count�rC�mock_handlerXr�s    rG�#test_handle_called_with_queue_queuez5QueueListenerTest.test_handle_called_with_queue_queue�s����4�;�'�'�
H�
H��!�K�M�M�	��"�"�9��������A�A�.F�G�G�G�G����[�3�Q���_�E�
G�
G�
G�
G�
Gric�r�tj��t|j��D]j}t	j��}|�||����d|����|���|�	���k|�
|jd|jzd��dSr�)r�*skip_if_broken_multiprocessing_synchronizer]r��multiprocessingr�r�rprJr�rYr�r�s    rG� test_handle_called_with_mp_queuez2QueueListenerTest.test_handle_called_with_mp_queue�s���
�>�@�@�@��4�;�'�'�
(�
(��+�1�3�3�	��"�"�9��������A�A�.F�G�G�G����!�!�!��%�%�'�'�'�'����[�3�Q���_�E�
G�
G�
G�
G�
Gric#�fK�		|���V��#tj$rgcYSwxYwr�)r�r�r�)r�s rG�get_all_from_queuez$QueueListenerTest.get_all_from_queue�sS����
�1�#�.�.�0�0�0�0�0�1���;�
�
�
��	�	�	�
���s��0�0c���	tj��t|j��D]�}t	j��}|�||����d|����t|�	|����}|j
��|j��gtj
jjgg}|�||dd�|D��z����dS)Nrez&Found unexpected messages in queue: %sc�T�g|]%}t|tj��r|jn|��&Srs)r�rr�r*)rWr�s  rGrYzJQueueListenerTest.test_no_messages_in_queue_after_stop.<locals>.<listcomp>�sC��%<�%<�%<�01�/9��G�<M�.N�.N�&,�Q�U�U�*+�%<�%<�%<ri)rr�r]r�r�r�r�rp�listr�rJr�rr?r��	_sentinelr�)rCrXr�r�res     rG�$test_no_messages_in_queue_after_stopz6QueueListenerTest.test_no_messages_in_queue_after_stop�s��
�
�>�@�@�@��4�;�'�'�
>�
>��'�-�/�/���"�"�5�D�G�G�I�I�I�I�q�q�*A�B�B�B��T�4�4�U�;�;�<�<�����
�
�
�!��!�#�#�#���!1�!?�!I� J�K���
�
�e�X�F�%<�%<�5:�%<�%<�%<�=�>�>�>�>�
>�
>ric�H�tj��}tj�|��}|���|���|�t��5|�	��ddd��dS#1swxYwYdSr�)
r�r�rr?r�rqr�rrB�	task_done)rCr�r�s   rG�test_calls_task_done_after_stopz1QueueListenerTest.test_calls_task_done_after_stop�s�����
�
�I��'�5�5�i�@�@�H��N�N�����M�M�O�O�O��"�"�:�.�.�
&�
&��#�#�%�%�%�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&����
&�
&�
&�
&�
&�
&s�5B�B�BN)rprqrrr��staticmethodr�r�r�rr?r�r�r�r�r�r�rsrirGr�r��s�������	�
��	�	�	�
��	�.
���g�&�4�h�	?�	?�	G�	G�
@�	?�	G�
���g�&�4�h�	?�	?�
	G�
	G�
@�	?�
	G�
�	�	�
��	�	>�	>�	>�0	&�	&�	&�	&�	&rir�c��eZdZd�ZeZd�ZdS)�UTCc��tSr�)�ZERO�rC�dts  rG�	utcoffsetz
UTC.utcoffset�s���ric��dS)Nrrsrs  rG�tznamez
UTC.tzname�s���uriN)rprqrrr�dstr	rsrirGrr�s9����������C�����rirc��eZdZd�ZdS)�AssertErrorMessagec��	|jdg|�Ri|��dS#|$r.}|�|t|����Yd}~dSd}~wwxYw)Nrs)rrYrV)rCr�r�rWrzrs      rG�assert_error_messagez'AssertErrorMessage.assert_error_message�s}��	.��D��b�2�4�2�2�2�6�2�2�2�2�2���	.�	.�	.����W�c�!�f�f�-�-�-�-�-�-�-�-�-�����	.���s��A�#A�AN)rprqrrrrsrirGrr�s#������.�.�.�.�.rirc�R�eZdZd�Zd
d�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
dS)�
FormatterTestc	��dtjtj�ddd��dddddd�|_d	d	d
ii|_dS)Nzformatter.testr;�toz	dummy.extr�zMessage with %d %s)r��placeholders)rEr��pathname�linenor��funcr*rW�customi�)rr7r4r;r��common�variantsrms rGrHzFormatterTest.setUpsX��$��]�����V�T�;�?�?����'�'�	
�	
���
��$��
��
�
�
riNc��t|j��}|� |�|j|��t	j|��Sr�)r�rrMrrr�)rCrE�results   rG�
get_recordzFormatterTest.get_recordsA���d�k�"�"�����M�M�$�-��-�.�.�.��$�V�,�,�,ric���|���}tjd��}|�|�|��d��tjd��}|�t|j|��|�|�����tjd��}|�	|�����tjd��}|�	|�����tjd��}|�	|�����dS)Nz${%(message)s}z${Message with 2 placeholders}z
%(random)s�%(asctime)sz%(asctime)-15sz%(asctime)#15s�
rrr:rYrrrBr:�usesTimerB�rCr�r�s   rG�test_percentzFormatterTest.test_percents���O�O������.�/�/��������!���&F�G�G�G���l�+�+�����*�a�h��2�2�2���������&�&�&���m�,�,������
�
���%�%�%���.�/�/������
�
���%�%�%���.�/�/������
�
���%�%�%�%�%ric��|���}tjdd���}|�|�|��d��tjdd���}|�t|j|��tjdd���}|�|�����tjdd���}|�	|�����tjdd���}|�	|�����tjd	d���}|�	|�����dS)
Nz
$%{message}%$�{�r��$%Message with 2 placeholders%$z{random}z	{message}�	{asctime}z{asctime!s:15}z{asctime:15}rr!s   rG�test_braceszFormatterTest.test_braces,s;���O�O������o�S�9�9�9��������!���&G�H�H�H���j��4�4�4�����*�a�h��2�2�2���k��5�5�5����������&�&�&���k��5�5�5������
�
���%�%�%���.�c�:�:�:������
�
���%�%�%���n�C�8�8�8������
�
���%�%�%�%�%ric�L�|���}tjdd���}|�|�|��d��tjdd���}|�|�|��d��tjdd���}|�|�|��d��tjdd���}|�t|j|��|�|�����tjd	d���}|�	|�����tjd
d���}|�	|�����tjdd���}|�|�����tjdd���}|�	|�����dS)N�
${message}r�r%zMessage with 2 placeholdersz$messagez$$%${message}%$$r&z	${random}z
${asctime}z$asctimez${asctime}--rr!s   rG�test_dollarszFormatterTest.test_dollars<s����O�O������l�#�6�6�6��������!���&C�D�D�D���j��4�4�4��������!���&C�D�D�D���0��<�<�<��������!���&G�H�H�H���k��5�5�5�����*�a�h��2�2�2���������&�&�&���l�#�6�6�6������
�
���%�%�%���j��4�4�4������
�
���%�%�%���l�#�6�6�6����������&�&�&���n�C�8�8�8������
�
���%�%�%�%�%ric�h�tjd��}|�|jd��tjd��}|�|jd��tjd��}|�|jd��tjd��}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��tjd	d���}|�|jd	��tjd
d���}|�|jd
��tjdd���}|�|jd��tjdd���}|�|jd��tjd
d���}|�|jd
��tjdd���}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��tjdd���}|�|jd��|�t
tjd��|�t
tjd��|�t
tjd��|�t
tjd��|�t
tjd��|�t
tjd��|�t
tjd��|�t
tjd ��|�t
tjd!��|�t
d"tjd#d���|�t
d$tjd%d���|�t
d&��|�t
tjd'd���|�t
d(tjd)d���|�t
d*tjd+d���|�t
tjd,d���|�t
tjd-d���|�t
tjd.d���|�t
tjd/d���|�t
d0tjd1d���|�t
d2tjd3d���|�t
tjd4d���|�t
tjd5d���|�t
tjd6d���|�t
tjd7d���|�t
tjd8d���|�t
tjd9d���|�t
tjd:d���|�t
tjd;d���|�t
tjd<d���|�t
d=tjd>d���|�t
d=tjd?d���|�t
d=tjd@d���|�t
d$tjdd���|�t
tjd%d���|�t
d$tjdAd���|�t
tjdBd���dS)CNzM%(levelname)-15s - %(message) 5s - %(process)03d - %(module) - %(asctime)*.3sz1%(asctime)*s - %(asctime)*.3s - %(process)-34.33oz%(process)#+027.23Xz
%(foo)#.*gz5$%{message}%$ - {asctime!a:15} - {customfield['key']}r$r%z{process:.2f} - {custom.f:.4f}z{customfield!s:#<30}z{message!r}z{message!s}z{message!a}z{process!r:4.2}z8{process!s:<#30,.12f}- {custom:=+#30,.1d} - {module:^30}z{process!s:{w},.{p}}z{foo:12.{p}}z{foo:{w}.6}z{foo[0].bar[1].baz}z{foo[k1].bar[k2].baz}z{12[k1].bar[k2].baz}z${asctime} - $messager�z$bar $$z	$bar $$$$z%(asctime)Zz%(asctime)bz%(asctime)*z
%(asctime)*3sz%(asctime)_r'r*z
%(foo)#12.3*fz%(foo)0*.8*fz;invalid format: invalid field name/expression: 'name-thing'z{name-thing}zinvalid format: no fieldsrzinvalid conversion: 'Z'z{asctime!s:#30,15f}z7invalid format: expected ':' after conversion specifierz{asctime!aa:15}z%invalid format: bad specifier: '.2ff'z{process:.2ff}z
{process:.2Z}z{process!s:<##30,12g}z{process!s:<#30#,12g}z{process!s:{{w}},{{p}}}z1invalid format: expected '}' before end of stringz{processz7invalid format: Single '}' encountered in format stringzprocess}z{{foo!r:4.2}z
{{foo!r:4.2}}z	{foo/bar}z{foo:{{w}}.{{p}}}}z{foo!X:{{w}}.{{p}}}z{foo!a:random}z{foo!a:ran{dom}z{foo!a:ran{d}om}z
{foo.!a:d}z$invalid format: bare '$' not allowedz$bar $$$zbar $zfoo $.rTz	${asctime)rr:rY�_fmtrrBr�rCr�s  rG�test_format_validatez"FormatterTest.test_format_validateQs���
��m�n�n�������!p�q�q�q���Q�R�R�������!T�U�U�U���3�4�4�������!6�7�7�7���l�+�+��������.�.�.�
��U�]`�a�a�a�������!X�Y�Y�Y���>�c�J�J�J�������!A�B�B�B���4�C�@�@�@�������!7�8�8�8���m�3�7�7�7��������/�/�/���m�3�7�7�7��������/�/�/���m�3�7�7�7��������/�/�/���/�s�;�;�;�������!2�3�3�3���X�`c�d�d�d�������![�\�\�\���4�C�@�@�@�������!7�8�8�8���n�C�8�8�8��������0�0�0���m�3�7�7�7��������/�/�/���3�3�?�?�?�������!6�7�7�7���5�S�A�A�A�������!8�9�9�9���4�C�@�@�@�������!7�8�8�8�
��5�S�A�A�A�������!8�9�9�9���i�s�3�3�3��������+�+�+���k��5�5�5��������-�-�-�	
���*�g�&7��G�G�G����*�g�&7��G�G�G����*�g�&7��G�G�G����*�g�&7��I�I�I����*�g�&7��G�G�G����*�g�&7��E�E�E����*�g�&7��F�F�F����*�g�&7��I�I�I����*�g�&7��H�H�H�	
�!�!��I���~�S�	"�	
�	
�	
�	
�!�!��'���}�C�	"�	
�	
�	
�	
�!�!��%�	
�	
�	
�	
���*�g�&7�9N�VY��Z�Z�Z��!�!��E���0��	"�	
�	
�	
�	
�!�!��3���/�s�	"�	
�	
�	
�
	
���*�g�&7��PS��T�T�T����*�g�&7�9P�X[��\�\�\����*�g�&7�9P�X[��\�\�\����*�g�&7�9R�Z]��^�^�^��!�!��?���z��	"�	
�	
�	
�
	
�!�!��E���z��	"�	
�	
�	
�
	
���*�g�&7��s��S�S�S����*�g�&7��PS��T�T�T����*�g�&7��C��P�P�P����*�g�&7�9M�UX��Y�Y�Y����*�g�&7�9N�VY��Z�Z�Z����*�g�&7�9I�QT��U�U�U����*�g�&7�9J�RU��V�V�V����*�g�&7�9K�SV��W�W�W����*�g�&7��S��Q�Q�Q�	
�!�!��4���z��	"�	
�	
�	
�
	
�!�!��4���w�c�	"�	
�	
�	
�
	
�!�!��4���x�s�	"�	
�	
�	
�	
�!�!��'���{�#�	"�	
�	
�	
�
	
���*�g�&7��c��R�R�R�	
�!�!��'���u�C�	"�	
�	
�	
�
	
���*�g�&7��C��P�P�P�P�Pric��gd�}gd�}t||��D�]<\}}tj||ddi���}|���}|�|�|��d��|�d��}|�|�|��d��tj||���}|���}|�t|j|��tj||d	di���}|�d��}|�|�|��d����>dS)
N)z%(custom)s %(message)sz{custom} {message}z$custom $message)�%r$r�r�Default)r�r�z#Default Message with 2 placeholdersz 1234 Message with 2 placeholdersr%zNon-existing)r[rr:rrYrrrB)rC�fmts�stylesr�r�r�r�s       rG�test_defaults_parameterz%FormatterTest.test_defaults_parameter�sR��S�S�S�� �����d�F�+�+�	N�	N�J�C���!�#�U�h�	�=R�S�S�S�A����!�!�A����Q�X�X�a�[�[�*O�P�P�P�����)�)�A����Q�X�X�a�[�[�*L�M�M�M��!�#�U�3�3�3�A����!�!�A����j�!�(�A�6�6�6��!�#�U�n�i�=X�Y�Y�Y�A�����)�)�A����Q�X�X�a�[�[�*L�M�M�M�M�	N�	Nric�V�|�ttjddd��dS)N�x)rrBrr:rms rG�test_invalid_stylez FormatterTest.test_invalid_style�s'�����*�g�&7��t�S�I�I�I�I�Iric
�H�|���}tjdddddddt��}tj|�d�������|_d|_tj
d��}tj|_|�
|�|��d	��|�
|�|d
��d��|�|��|�
|jd	��dS)N��r\��rFr�{�%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r�datetime�utcr^�mktime�
astimezone�	timetuple�created�msecsrr:�gmtime�	converterrY�
formatTimer�asctime)rCr�rr�s    rG�	test_timezFormatterTest.test_time�s����O�O����
�
�t�Q��A�q�!�Q��
<�
<���K��
�
�d� 3� 3� =� =� ?� ?�@�@��	������7�8�8���k���������a���*C�D�D�D�������a��1�1�9�=�=�=�	������������$=�>�>�>�>�>ric
��Gd�dtj��}|���}tjddddddd	t��}tj|�d�������|_	|��}t
j
|_|�|�
|��d
��dS)Nc��eZdZdZdZdS)�DFormatterTest.test_default_msec_format_none.<locals>.NoMsecFormatterNz%d/%m/%Y %H:%M:%S)rprqrr�default_msec_format�default_time_formatrsrirG�NoMsecFormatterrM
s������"&��"5���rirPr:r\r;r<rFrr=z21/04/1993 08:03:00)rr:rr?r@r^rArBrCrDrFrGrYrH)rCrPr�rr�s     rG�test_default_msec_format_nonez+FormatterTest.test_default_msec_format_nones���	6�	6�	6�	6�	6�g�/�	6�	6�	6�
�O�O����
�
�t�Q��A�q�!�S�#�
>�
>���K��
�
�d� 3� 3� =� =� ?� ?�@�@��	��O�����k���������a���*?�@�@�@�@�@ric��tjddd���}td��D]]}tjd��tjdd|d	zzi��}|�|��}|�d
|���^dS)Nz!{asctime}.{msecs:03.0f} {message}r$z%Y-%m-%d %H:%M:%S)r�r�r�i�	g-C��6:?r*z
Message %drkz.1000)rr:r]r^r`r�r�assertNotIn)rCr�rXr�rgs     rG�test_issue_89047zFormatterTest.test_issue_89047s�����"E�S�Zm�n�n�n���t���	)�	)�A��J�v�����%�u�l�a�!�e�.D�&E�F�F�A�������A����W�a�(�(�(�(�		)�	)rir�)rprqrrrHrr"r(r+r/r5r8rJrQrTrsrirGrrs�������
�
�
�"-�-�-�-�
&�
&�
&�&�&�&� &�&�&�*TQ�TQ�TQ�lN�N�N�(J�J�J�?�?�?�
A�
A�
A�)�)�)�)�)rirc��eZdZd�Zd�ZdS)�TestBufferingFormatterc�&�dt|��zS)Nz[(%d)�rZ�rC�recordss  rG�formatHeaderz#TestBufferingFormatter.formatHeader"�����W���%�%ric�&�dt|��zS)Nz(%d)]rXrYs  rG�formatFooterz#TestBufferingFormatter.formatFooter%r\riN)rprqrrr[r^rsrirGrVrV!s2������&�&�&�&�&�&�&�&rirVc� �eZdZd�Zd�Zd�ZdS)�BufferingFormatterTestc�h�tjddi��tjddi��g|_dS)Nr*r�r�)rr�rZrms rGrHzBufferingFormatterTest.setUp)s3���!�5�%�.�1�1��!�5�%�.�1�1�
����ric���tj��}|�d|�g����|�d|�|j����dS)Nr�onetwo)r�BufferingFormatterrYrrZr.s  rG�test_defaultz#BufferingFormatterTest.test_default/sZ���&�(�(������Q�X�X�b�\�\�*�*�*�����1�8�8�D�L�#9�#9�:�:�:�:�:ric� �t��}|�d|�|j����t	jd��}t|��}|�d|�|j����dS)Nz[(2)onetwo(2)]z
<%(message)s>z[(2)<one><two>(2)])rVrYrrZrr:)rCr��lfs   rG�test_customz"BufferingFormatterTest.test_custom4sz��"�$�$�����)�1�8�8�D�L�+A�+A�B�B�B�
�
��
/�
/��"�2�&�&�����-�q�x�x���/E�/E�F�F�F�F�FriN)rprqrrrHrerhrsrirGr`r`(sF������
�
�
�;�;�;�
G�G�G�G�Grir`c��eZdZd�ZdS)�
ExceptionTestc��|j}t��}|�|��	td���#t	jdd���YnxYw|�|��|���|jd}|�	|j
�d����|�	|j
�d����|�	|j
�d����|�	|j
�d	����dS)
Nr��failedTr�rz#Traceback (most recent call last):
z!
RuntimeError: deliberate mistake�Stack (most recent call last):
z,logging.exception('failed', stack_info=True))r0�RecordingHandlerrAr�rr�rKrJrZrB�exc_textr�r@r�)rCr�rQs   rGr�zExceptionTest.test_formatting<s`���������	���Q����	9��3�4�4�4��	9���h�4�8�8�8�8�8�8����	�������	���	�	�	�
�I�a�L������
�-�-�/>�?�?�	@�	@�	@�����
�+�+�-A�B�B�	C�	C�	C������/�/�1>�?�?�	@�	@�	@������-�-�/?�@�@�	A�	A�	A�	A�	As	�;�AN)rprqrrr�rsrirGrjrj;s(������A�A�A�A�Arirjc��eZdZd�ZdS)�LastResortTestc�R�|j}|�|j��tj}tj}	t
j��5}|�d��|�	|�
��d��|�d��|�	|�
��d��ddd��n#1swxYwYdt_t
j��5}|�d��d}|�	|�
��|��ddd��n#1swxYwYt
j��5}|�d��|�	|�
��d��ddd��n#1swxYwYd|j_
dt_t
j��5}|�d��|�	|�
��d��ddd��n#1swxYwY|�|j��|t_|t_dS#|�|j��|t_|t_wxYw)NzThis should not appearrz
Final chance!zFinal chance!
z-No handlers could be found for logger "root"
F)r0rKr9r�
lastResortr�rr�r�rYrWr�r�emittedNoHandlerWarningrA)rCr��old_lastresort�old_raise_exceptionsr�r*s      rG�test_last_resortzLastResortTest.test_last_resortRsJ��������4�>�*�*�*� �+��&�6��	;��(�*�*�
G�f��
�
�3�4�4�4�� � ����!2�!2�B�7�7�7����_�-�-�-�� � ����!2�!2�4E�F�F�F�	
G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G����
G�
G�
G�
G�"&�G���(�*�*�
9�f����_�-�-�-�F��� � ����!2�!2�C�8�8�8�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9��(�*�*�
8�f����_�-�-�-�� � ����!2�!2�B�7�7�7�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8�
49�D�L�0�&+�G�#��(�*�*�
8�f����_�-�-�-�� � ����!2�!2�B�7�7�7�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8�
�O�O�D�N�+�+�+�!/�G��&:�G�#�#�#��
�O�O�D�N�+�+�+�!/�G��&:�G�#�:�:�:�:s��I2�A;C�	I2�C�I2�C�"I2�?AE�?I2�E�I2�E�I2�)>F3�'I2�3F7�7I2�:F7�;.I2�)>H3�'I2�3H7�7I2�:H7�;I2�24J&N)rprqrrrwrsrirGrqrqQs#������#;�#;�#;�#;�#;rirqc��eZdZd�Zd�ZdS)�FakeHandlerc
�\�dD](}t|||�|||�����)dS)N)r��flushrJr�)�setattr�record_call)rC�
identifier�calledrJs    rGr�zFakeHandler.__init__zsF��>�	P�	P�F��D�&�$�"2�"2�:�v�v�"N�"N�O�O�O�O�	P�	Pric��������fd�}|S)Nc�Z����d�������dS)Nz{} - {})rCr)rr~�method_names���rG�innerz&FakeHandler.record_call.<locals>.inners+����M�M�)�*�*�:�{�C�C�D�D�D�D�Drirs)rCr~r�rr�s ``` rGr}zFakeHandler.record_call~s4�����	E�	E�	E�	E�	E�	E�	E��riN)rprqrrr�r}rsrirGryryxs5������P�P�P�����riryc�$��eZdZ�fd�Zd�Z�xZS)rnc�V��tt|��j|i|��g|_dSr�)rrnr�rZ)rCrWrzr�s   �rGr�zRecordingHandler.__init__�s1���.����%�%�.��?��?�?�?�����ric�<�	|j�|��dSr�)rZrCr�s  rGr9zRecordingHandler.handle�s!��4�����F�#�#�#�#�#ri)rprqrrr�r9r�r�s@rGrnrn�sG������������$�$�$�$�$�$�$rirnc�z��eZdZ	�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Z�xZS)�ShutdownTestc���tt|�����g|_tj}|�ttd|��dS)Nr�)rr�rHrrr�r�r|)rC�raise_exceptionsr�s  �rGrHzShutdownTest.setUp�sO���
�l�D�!�!�'�'�)�)�)����"�2�������*;�=M�N�N�N�N�Nric����fd�}|S)Nc�������r�rs)r�s�rGr�z'ShutdownTest.raise_error.<locals>.inner�s����%�'�'�Mrirs)rCr�r�s ` rG�raise_errorzShutdownTest.raise_error�s!���	�	�	�	�	��ric�J�td|j��}td|j��}td|j��}ttjj|||g��}tjt|�����gd�}|�||j��dS)Nrrkr���handlerList)z2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - close�0 - release)	ryrr�rrqrrr�r�rY)rC�handler0�handler1�handler2r?res      rG�test_no_failurezShutdownTest.test_no_failure�s����q�$�+�.�.���q�$�+�.�.���q�$�+�.�.���w��*�X�x��,J�K�K����T�(�^�^�4�4�4�4�L�L�L��	
����4�;�/�/�/�/�/ric�>�td|j��}t|||�|����tj�|��g}t	jt|�����|�	d|jd��dS)Nrr�r�r))
ryrr|r�rrqrrr�r�rY)rCrJr�r�r?s     rG�_test_with_failure_in_methodz)ShutdownTest._test_with_failure_in_method�s����a���-�-������!1�!1�%�!8�!8�9�9�9��O�'�'��0�0�1����T�(�^�^�4�4�4�4�������B��8�8�8�8�8ric�<�|�dt��dS�Nr��r�rArms rG�test_with_ioerror_in_acquirez)ShutdownTest.test_with_ioerror_in_acquire�s���)�)�)�W�=�=�=�=�=ric�<�|�dt��dS�Nr{r�rms rG�test_with_ioerror_in_flushz'ShutdownTest.test_with_ioerror_in_flush�����)�)�'�7�;�;�;�;�;ric�<�|�dt��dS�NrJr�rms rG�test_with_ioerror_in_closez'ShutdownTest.test_with_ioerror_in_close�r�ric�<�|�dt��dSr��r�rBrms rG�test_with_valueerror_in_acquirez,ShutdownTest.test_with_valueerror_in_acquire�s���)�)�)�Z�@�@�@�@�@ric�<�|�dt��dSr�r�rms rG�test_with_valueerror_in_flushz*ShutdownTest.test_with_valueerror_in_flush�����)�)�'�:�>�>�>�>�>ric�<�|�dt��dSr�r�rms rG�test_with_valueerror_in_closez*ShutdownTest.test_with_valueerror_in_close�r�ric�T�dt_|�dt��dS)NFr��rr�r��
IndexErrorrms rG�.test_with_other_error_in_acquire_without_raisez;ShutdownTest.test_with_other_error_in_acquire_without_raise�s&��"'����)�)�)�Z�@�@�@�@�@ric�T�dt_|�dt��dS)NFr{r�rms rG�,test_with_other_error_in_flush_without_raisez9ShutdownTest.test_with_other_error_in_flush_without_raise��&��"'����)�)�'�:�>�>�>�>�>ric�T�dt_|�dt��dS)NFrJr�rms rG�,test_with_other_error_in_close_without_raisez9ShutdownTest.test_with_other_error_in_close_without_raise�r�ric�l�dt_|�t|jdt��dS)NTr��rr�rr�r�rms rG�+test_with_other_error_in_acquire_with_raisez8ShutdownTest.test_with_other_error_in_acquire_with_raise�s8��"&������*�d�&G�#�Z�	1�	1�	1�	1�	1ric�l�dt_|�t|jdt��dS)NTr{r�rms rG�)test_with_other_error_in_flush_with_raisez6ShutdownTest.test_with_other_error_in_flush_with_raise��8��"&������*�d�&G�!�:�	/�	/�	/�	/�	/ric�l�dt_|�t|jdt��dS)NTrJr�rms rG�)test_with_other_error_in_close_with_raisez6ShutdownTest.test_with_other_error_in_close_with_raise�r�ri)rprqrrrHr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�s@rGr�r��s'�������-�O�O�O�O�O����
0�0�0� 9�9�9�>�>�>�<�<�<�<�<�<�A�A�A�?�?�?�?�?�?�A�A�A�?�?�?�?�?�?�1�1�1�
/�/�/�
/�/�/�/�/�/�/rir�c�f�eZdZ	d�Zdd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�ZdS)�ModuleLevelMiscTestc��tjjj}|�|d��|�tj|��tjd��|�tjjjd��|�ttjd��Gd�d��}|�ttj|����tjd��tj��|�tjjjtj	��dS)Nr�S�
doesnotexistsc��eZdZdS)�;ModuleLevelMiscTest.test_disable.<locals>._NotAnIntOrStringNr�rsrirG�_NotAnIntOrStringr����������Drir��WARN)
rr�rrNrYr�rrBr�rz)rC�old_disabler�s   rG�test_disablez ModuleLevelMiscTest.test_disable�s���l�*�2������a�(�(�(�������5�5�5������������-�5�r�:�:�:����*�g�o��G�G�G�	�	�	�	�	�	�	�	�	
���)�W�_�6G�6G�6I�6I�J�J�J�������	����������-�5�w�7G�H�H�H�H�HriNc�~��g�tj|td�fd���t��}tj�|��t
t|��}|�||d|��n|d|��|�t|j	��d��|j	d}|�|�
��d|z��|�|n&t
t|�����}|�|j|��|��g��dS)N�basicConfigc�2����||f��Sr�r�)rN�kwrs  �rG�<lambda>z/ModuleLevelMiscTest._test_log.<locals>.<lambda>s���v�}�}�a��W�'=�'=�riztest me: %rrkr)
rr�rrnr�rAr,rYrZrZ�
getMessage�upperr�)rCrJr��	recording�
log_methodr��expected_levelrs       @rG�	_test_logzModuleLevelMiscTest._test_logs:������
�d�G�]�=�=�=�=�	?�	?�	?�%�&�&�	�����	�*�*�*��W�f�-�-�
����J�u�m�Y�7�7�7�7��J�}�i�0�0�0�����Y�.�/�/��3�3�3��"�1�%������*�*�,�,�m�i�.G�H�H�H�"'�"3�����&�,�,�.�.�9Y�9Y��������8�8�8�	
�����$�$�$�$�$ric�F�|�dtj��dS�Nr�)r�rr|rms rG�test_logzModuleLevelMiscTest.test_logs�����u�g�m�,�,�,�,�,ric�0�|�d��dS�Nr��r�rms rG�
test_debugzModuleLevelMiscTest.test_debug������w�����ric�0�|�d��dS�Nr�r�rms rG�	test_infozModuleLevelMiscTest.test_info������v�����ric�0�|�d��dS�Nr�r�rms rG�test_warningz ModuleLevelMiscTest.test_warning"������y�!�!�!�!�!ric�0�|�d��dS�Nr�r�rms rG�
test_errorzModuleLevelMiscTest.test_error%r�ric�0�|�d��dS�Nr�r�rms rG�
test_criticalz!ModuleLevelMiscTest.test_critical(������z�"�"�"�"�"ric��|�ttjt��Gd�dtj��}tj|��|�tj��|��tjtj��|�tj��tj��dS)Nc��eZdZdS)�;ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggerNr�rsrirGr�r�.r�rir�)rr�rr�r�r�rY�getLoggerClass)rCr�s  rG�test_set_logger_classz)ModuleLevelMiscTest.test_set_logger_class+s������)�W�%;�V�D�D�D�	�	�	�	�	�w�~�	�	�	�	��x�(�(�(�����/�1�1�8�<�<�<���w�~�.�.�.�����/�1�1�7�>�B�B�B�B�Bric�T��g�G�fd�dtj����}tj|��tjd��}|��dg��tj��}tj|��}|�|��	|�	tj
��|�d��|�|����
��d��|�d��|�d��|�	tj��|�d��|�|���d��|�|��|���tjtj��dS#|�|��|���tjtj��wxYw)Nc�2���eZdZdejf��fd�	Z�xZS)�@ModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLoggerr�c�v��t���||����d��dS)N�initialized)rr�rC)rCrEr�r�r�s   ��rGr�zIModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__<s5������ � ��u�-�-�-����}�-�-�-�-�-ri)rprqrrrr�r�r�)r�r�s@�rGr�r�;sJ��������$.�g�n�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.rir��just_some_loggerr��hellorr)rr�r�rrYr3r4r8rAr6r7r�rWr��truncater�r�rKrJr�)rCr�r�r5rQr�s     @rG�test_subclass_logger_cachez.ModuleLevelMiscTest.test_subclass_logger_cache7s������	.�	.�	.�	.�	.�	.�	.�w�-�/�/�	.�	.�	.�
	��x�(�(�(��"�#5�6�6������=�/�2�2�2�������!�&�)�)�����!����	3��O�O�G�M�*�*�*��L�L��!�!�!����V�_�_�.�.�4�4�6�6��@�@�@��O�O�A�����K�K��N�N�N��O�O�G�L�)�)�)��L�L��!�!�!����V�_�_�.�.��3�3�3�� � ��#�#�#�
�G�G�I�I�I��"�7�>�2�2�2�2�2��
� � ��#�#�#�
�G�G�I�I�I��"�7�>�2�2�2�2���s�!C4G�A	H'c���tjd��}td|��\}}}|���}|�d|��|�d|��dS)Na*
            import logging

            class A:
                def __del__(self):
                    try:
                        raise ValueError("some error")
                    except Exception:
                        logging.exception("exception in __del__")

            a = A()
        �-czexception in __del__zValueError: some error)rurvrrer��rC�code�rc�out�errs     rG�test_logging_at_shutdownz,ModuleLevelMiscTest.test_logging_at_shutdownVsl���� �
�
��(��d�3�3���C���j�j�l�l���
�
�,�c�2�2�2��
�
�.��4�4�4�4�4ric�v�tj}|�tj|��t	jd|�d���}t
d|��t|d���5}|�|�	���
��d��ddd��dS#1swxYwYdS)Na�
            import builtins
            import logging

            class A:
                def __del__(self):
                    logging.error("log in __del__")

            # basicConfig() opens the file, but logging.shutdown() closes
            # it at Python exit. When A.__del__() is called,
            # FileHandler._open() must be called again to re-open the file.
            logging.basicConfig(filename=z�, encoding="utf-8")

            a = A()

            # Simulate the Python finalization which removes the builtin
            # open() function.
            del builtins.open
        r�r%r}zERROR:root:log in __del__)r�TESTFNr�r5rurvrr�rYr`r�)rCr
r��fps    rG�test_logging_at_shutdown_openz1ModuleLevelMiscTest.test_logging_at_shutdown_openis���#�����	�(�(�3�3�3��� �+3� � � �
�
��&	��t�$�$�$�
�(�W�
-�
-�
-�	N�����R�W�W�Y�Y�-�-�/�/�1L�M�M�M�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N����	N�	N�	N�	N�	N�	Ns�&;B.�.B2�5B2c���tjd��}td|��\}}}|���}|�d|��|�|d��dS)Nz�
            import logging

            def rec():
                logging.error("foo")
                rec()

            rec()
        r�z#Cannot recover from stack overflow.rk)rurvrrerSrYr�s     rG�test_recursion_errorz(ModuleLevelMiscTest.test_recursion_error�so���� �
�
��-�T�4�8�8���C���j�j�l�l�����>��D�D�D�����Q�����ric�*�tj��}|�tj|��|�tj|��tj��}|�||��|�||��dSr�)r�getLevelNamesMappingrYr'�assertIsNot)rC�mapping�new_mappings   rG�test_get_level_names_mappingz0ModuleLevelMiscTest.test_get_level_names_mapping�s����.�0�0������-�w�7�7�7�����-�w�7�7�7��2�4�4������+�.�.�.�����+�.�.�.�.�.rir�)rprqrrr�r�r�r�r�r�r�r�r�r�r�rrrrsrirGr�r��s�������3�I�I�I�.%�%�%�%�0-�-�-� � � ����"�"�"� � � �#�#�#�
C�
C�
C�3�3�3�>5�5�5�&N�N�N�> � � � /�/�/�/�/rir�c�>�eZdZd�Zd�Zedd���Zd�Zd�ZdS)�
LogRecordTestc���tji��}t|��}|�|�d����|�|�d����dS)Nz<LogRecord: �>)rr�rVrBr�r@)rCr�rgs   rG�test_str_repzLogRecordTest.test_str_rep�s]���!�"�%�%����F�F��������^�4�4�5�5�5�����
�
�3���(�(�(�(�(ric��t��}tj��}|�|��ddi}tjd|��|�|jdj|��|�|jdj	d��|�
|��|���dS)N�less�morezless is %(less)srzless is more)rnrrrAr�r�rZrWrYr�rKrJ)rCrQr�rjs    rG�
test_dict_argzLogRecordTest.test_dict_arg�s������������	���Q����
�f�����*�A�.�.�.��
�
�a�i��l�'��+�+�+������1��-�~�>�>�>�	�������	���	�	�	�	�	riNc���tj}|t_	ddl}|���j}tjdd|��i��}t
jtj	dd��5tjdd|��i��}ddd��n#1swxYwY||j
|j
d�}|t_n#|t_wxYw|r|�|��dS|S)Nrr*�msg1_r��msg2_)�processName�r1.processName�r2.processName)r�logMultiprocessingr��current_processrEr�r�	swap_itemr0�modulesrr)	rsrr�prev_logMultiprocessing�mprE�r1�r2�resultss	         rG�_extract_logrecord_process_namez-LogRecordTest._extract_logrecord_process_name�sR��")�"<��%7��"�	A�(�(�(�(��%�%�'�'�,�D��&��}�s�}�}�'=�>�>�B��"�3�;�0A�4�H�H�
C�
C��*�E�=�3�=�=�+A�B�B��
C�
C�
C�
C�
C�
C�
C�
C�
C�
C�
C����
C�
C�
C�
C�)-�)+��)+����G�
*A�G�&�&��)@�G�&�@�@�@�@��	��I�I�g�������Ns0�AB>�0B�
B>�B�B>�B�B>�>Cc�r�tj��dtjv}	|�t
jd��d}tji��}|�|jd��|�	d|��}|�d|d��|�d|d��|�d|d��ddl
}|j��\}}|j|j	d	||f�
��}|�
��|���}|�d|d��|�|d|d��|�d|d��|���|rddl
}dSdS#|rddl
}wxYw)Nr�T�MainProcessrkrrrrr�ri)rr�r0rrYrrr�rr$r��Pipe�Processrqr��assertNotEqualr�)	rC�multiprocessing_imported�LOG_MULTI_PROCESSINGr�r#r��parent_conn�
child_connrMs	         rG�test_multiprocessingz"LogRecordTest.test_multiprocessing�s����:�<�<�<�#4���#C� � 	'����W�7��>�>�>�#'� ��%�b�)�)�A����Q�]�M�:�:�:��:�:�1�>R�S�S�G����]�G�M�,B�C�C�C����]�G�4D�,E�F�F�F����]�G�4D�,E�F�F�F�
#�"�"�"�&:�o�&:�&<�&<�#�K��'��'��;��-�z�;����A�
�G�G�I�I�I�!�&�&�(�(�G����
�w�}�/E�F�F�F����W�]�3�W�=M�5N�O�O�O����]�G�4D�,E�F�F�F�
�F�F�H�H�H�(�
'�&�&�&�&�&�&�
'�
'��'�
'�&�&�&�&�&�&�&�&s�FF.�.F6c��tji��}|j}||j��||j��||j��||j��tj}tj}tj	}	dt_dt_dt_	tji��}|j
}||j��||j��||j��||j��|t_|t_|t_	dS#|t_|t_|t_	wxYw)NF)rr��assertIsNotNonerh�
threadName�processr�
logThreads�logProcessesrr�)rCr��NOT_NONE�log_threads�
log_processes�log_multiprocessing�NONEs       rG�
test_optionalzLogRecordTest.test_optional�s7���!�"�%�%���'�������������������������������(���,�
�%�8��
	=�!&�G��#(�G� �).�G�&��%�b�)�)�A��$�D��D���N�N�N��D�������D���O�O�O��D������!,�G��#0�G� �)<�G�&�&�&��"-�G��#0�G� �)<�G�&�<�<�<�<s
�A?D&�&&Er�)	rprqrrrrrr$r.r:rsrirGr
r
�sq������)�)�)�	�	�	������\��0#'�#'�#'�J=�=�=�=�=rir
c����eZdZ	�fd�Z�fd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zdd�Zd�Zd�Zd�Zd�Zd�Zd�Z�xZS)�BasicConfigTestc�|��tt|�����tjj|_tj���|_tj	dd�|_
tjj|_|�
|j��gtj_dSr�)rr<rHrr�r?r!r"r#r$r%r�r2r�r�r�s �rGrHzBasicConfigTest.setUps����
�o�t�$�$�*�*�,�,�,���-��
�%�/�4�4�6�6���")�"6�q�q�q�"9���&-�l�&8��#������%�%�%� "�����ric����tjjdd�D]5}tj�|��|����6tt|�����dSr�)rr�r?rKrJrr<rR)rCrQr�s  �rGrRzBasicConfigTest.tearDownsg�����&�q�q�q�)�	�	�A��L�&�&�q�)�)�)�
�G�G�I�I�I�I�
�o�t�$�$�-�-�/�/�/�/�/ric�>�ttjd|j��tj���tj�|j��|jtj	dd�<tj�
|j��dS)Nr?)r|rr�r?r!rLrMr#r%r$r6r2rms rGr�zBasicConfigTest.cleanupsz�����j�$�-�8�8�8�����!�!�!��� � ��!4�5�5�5�"&�"9���Q�Q�Q������d�9�:�:�:�:�:ric�|�tj��|�ttjj��d��tjjd}|�|tj��|�|jtj
��|j}|�|jj
tj��|�|j��|�|jtj��|�tjj|j��dS)Nrkr)rr�rYrZr�r?r�r8r5r0r�r�r1r-�BASIC_FORMATr�r��PercentStyler�r2)rCr�r�s   rG�test_no_kwargszBasicConfigTest.test_no_kwargs$s��������	
����W�\�2�3�3�Q�7�7�7��,�'��*�����g�w�'<�=�=�=��������4�4�4��%�	�����)�.��0D�E�E�E����)�+�,�,�,����i�.��0D�E�E�E�	
�����+�T�-H�I�I�I�I�Iric�x�tj��5}tjtjd���tjd��tj�d��|�|�	���
��d��ddd��dS#1swxYwYdS)Nr$�r5r��Log an errorr�ERROR:root:Log an error�rr�rr�r0r�r�r�rYrWr�r�s  rG�test_strformatstylez#BasicConfigTest.test_strformatstyle8����
�
$�
&�
&�	+�&���s�z��=�=�=�=��M�.�)�)�)��J�O�O�A�������V�_�_�.�.�4�4�6�6�)�
+�
+�
+�		+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+�	+�	+��BB/�/B3�6B3c�x�tj��5}tjtjd���tjd��tj�d��|�|�	���
��d��ddd��dS#1swxYwYdS)Nr�rErFrrGrHr�s  rG�test_stringtemplatestylez(BasicConfigTest.test_stringtemplatestyle@rJrKc��d�}tjdd���|�ttjj��d��tjjd}|�|tj��tjddd���}|�|jj	|jj	��|�|jj
|jj
��|�|||d��dS)	Nc�~�|���|���tj|��dSr�r��r��h2rHs   rGr�z.BasicConfigTest.test_filename.<locals>.cleanupJ�-���H�H�J�J�J��H�H�J�J�J��I�b�M�M�M�M�Mri�test.logr%)r
r'rkrrNr})rr�rYrZr�r?r�rQr5�moderEr��rCr�r�res    rG�
test_filenamezBasicConfigTest.test_filenameHs���	�	�	�
	��Z�'�B�B�B�B�����W�\�2�3�3�Q�7�7�7��,�'��*�����g�w�':�;�;�;��&�z�3��I�I�I�������,�h�o�.B�C�C�C������,�h�o�.B�C�C�C������(�J�?�?�?�?�?ric��d�}tjdd���tjjd}tjdd��}|�|jj|jj��|�|||d��dS)Nc�~�|���|���tj|��dSr�r�rPs   rGr�z.BasicConfigTest.test_filemode.<locals>.cleanup\rRrirS�wb�r
�filemoder)	rr�r�r?rQrYr5rTr�rUs    rG�
test_filemodezBasicConfigTest.test_filemodeZs���	�	�	�
	��Z�$�?�?�?�?��,�'��*���&�z�4�8�8�������,�h�o�.B�C�C�C������(�J�?�?�?�?�?ric��tj��}|�|j��t	j|���|�ttjj	��d��tjj	d}|�
|tj��|�|j|��dS)Nr~rkr)
r3r4r�rJrr�rYrZr�r?r�r8r5)rCr5r�s   rG�test_streamzBasicConfigTest.test_streamhs�������������%�%�%���6�*�*�*�*�����W�\�2�3�3�Q�7�7�7��,�'��*�����g�w�'<�=�=�=�������0�0�0�0�0ric��tjd���tjjdj}|�|jjd��dS)Nz%(asctime)s - %(message)s)rr)rr�r�r?r�rYr1r-�rCr�s  rG�test_formatzBasicConfigTest.test_formatrsL����#>�?�?�?�?��L�)�!�,�6�	�����)�.�0K�L�L�L�L�Lric��tjd���tjjdj}|�|jd��dS)NrU)r�r)rr�r�r?r�rYr�r`s  rG�test_datefmtzBasicConfigTest.test_datefmtxsG����E�*�*�*�*��L�)�!�,�6�	�����*�E�2�2�2�2�2ric��tjd���tjjdj}|�|jtj��dS)Nr�r%r)rr�r�r?r�r�r1r2r`s  rG�
test_stylezBasicConfigTest.test_style~sJ����#�&�&�&�&��L�)�!�,�6�	����i�.��0K�L�L�L�L�Lric�Z�tjj}|�tjj|��tjd���|�tjjd��tjd���|�tjjd��dS)N�9)r��:)rr�r�r�r6r�rY)rC�	old_levels  rG�
test_levelzBasicConfigTest.test_level�s����L�&�	������-�y�9�9�9���"�%�%�%�%������+�R�0�0�0���"�%�%�%�%������+�R�0�0�0�0�0ric��|j}tj��g}tj}|t
tjd|���|t
tjd|���|t
tj||���|t
tjtj���tjdd���dS)NrS)r
r5)r
r?)r5r?)�loglevelrNrZ)rrr8r0r�rBr�r�)rCrr?r5s    rG�test_incompatiblez!BasicConfigTest.test_incompatible�s����(���)�+�+�,�������Z��!4�z�=C�	E�	E�	E�	E���Z��!4�z�?G�	I�	I�	I�	I���Z��!4�V�?G�	I�	I�	I�	I�	��Z��!4�w�|�L�L�L�L���T�C�8�8�8�8�8�8ric�R�tj��tjtj��tj��g}tj��}|d�|��tj|���|�|dtjj	d��|�|dtjj	d��|�|dtjj	d��|�
|dj��|�
|dj��|�|dj|��|�|dj|dj��dS)Nr�)r?rrk)rr8r0r�r:r=r�r�r�r?r0r�)rCr?r�s   rG�
test_handlerszBasicConfigTest.test_handlers�sL���!�#�#��!�#�*�-�-��!�#�#�
��

�������� � ��#�#�#���X�.�.�.�.��
�
�h�q�k�7�<�#8��#;�<�<�<��
�
�h�q�k�7�<�#8��#;�<�<�<��
�
�h�q�k�7�<�#8��#;�<�<�<����X�a�[�2�3�3�3����X�a�[�2�3�3�3��
�
�h�q�k�+�Q�/�/�/��
�
�h�q�k�+�X�a�[�-B�C�C�C�C�Cric���tj��}tj��}tj|��g}tj|��g}tjtj|���tjd��tjd��tjd��|�	ttjj��d��tjtj
|d���tjd��tjd��tjd��|�	ttjj��d��|�	|������d��|�	|������d	��dS)
Nr�r�r�r�rkT)r�r?�forcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r3r4rr8r�r�r�r�r�rYrZr�r?r�rWr�)rC�
old_string_io�
new_string_io�old_handlers�new_handlerss     rG�
test_forcezBasicConfigTest.test_force�s�����
�
�
���
�
�
��-�m�<�<�=���-�m�<�<�=����'�/�L�I�I�I�I���������V�����
�g��������W�\�2�3�3�Q�7�7�7���'�,��"&�	(�	(�	(�	(���������V�����
�g��������W�\�2�3�3�Q�7�7�7�����/�/�1�1�7�7�9�9�,�	.�	.�	.�����/�/�1�1�7�7�9�9�<�	>�	>�	>�	>�	>ric��	d}tjd|ddtj���|�t	tjj��d��tjjd}|�|tj��|�|j	|��tj
d��|���tdd�	��5}|�
�����}ddd��n#1swxYwYtjd��|�|d��dS#|���tdd�	��5}|�
�����}ddd��n#1swxYwYtjd��|�|d��wxYw)
Nr%rSr��%(message)s�r
r'�errorsrr�rkr�.The Øresund Bridge joins Copenhagen to Malmör}�rr�r7rYrZr�r?r�rQr'r�rJr�r`r�r4r��rCr'r�r�r�s     rG�
test_encodingzBasicConfigTest.test_encoding�s:��	O��H����h�'/�'4�G�M�
K�
K�
K�
K�
���S���!6�7�7��;�;�;��l�+�A�.�G��!�!�'�7�+>�?�?�?����W�-�x�8�8�8��M�J�K�K�K��M�M�O�O�O��j�7�3�3�3�
(�q��v�v�x�x�~�~�'�'��
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��I�j�!�!�!����T�M�
O�
O�
O�
O�
O��	
�M�M�O�O�O��j�7�3�3�3�
(�q��v�v�x�x�~�~�'�'��
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��I�j�!�!�!����T�M�
O�
O�
O�
O����B�B=E�$'D�D�D�&G�4'F'�G�'F+�+G�.F+�/.Gc��	d}tjd|ddtj���|�t	tjj��d��tjjd}|�|tj��|�|j	|��tj
d��|���tdd	�
��5}|�
�����}ddd��n#1swxYwYtjd��|�|d��dS#|���tdd	�
��5}|�
�����}ddd��n#1swxYwYtjd��|�|d��wxYw)Nr�rS�ignorerxryrkrr{r%r}z*The resund Bridge joins Copenhagen to Malmr|r}s     rG�test_encoding_errorsz$BasicConfigTest.test_encoding_errors�s��	Q��H����h�'/�'4�G�M�
K�
K�
K�
K�
���S���!6�7�7��;�;�;��l�+�A�.�G��!�!�'�7�+>�?�?�?����W�-�x�8�8�8��M�J�K�K�K��M�M�O�O�O��j�7�3�3�3�
(�q��v�v�x�x�~�~�'�'��
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��I�j�!�!�!����T�#O�P�P�P�P�P��	
�M�M�O�O�O��j�7�3�3�3�
(�q��v�v�x�x�~�~�'�'��
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��I�j�!�!�!����T�#O�P�P�P�P���rc���	d}tjd|dtj���|�t	tjj��d��tjjd}|�|tj��|�|j	|��|�|j
d��tjd��|���tdd	�
��5}|������}ddd��n#1swxYwYt!jd��|�|d��dS#|���tdd	�
��5}|������}ddd��n#1swxYwYt!jd��|�|d��wxYw)Nr�rSrx)r
r'rr�rkr�backslashreplaceu<😂: ☃️: The Øresund Bridge joins Copenhagen to Malmör%r}zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)rr�r7rYrZr�r?r�rQr'rzr�rJr�r`r�r4r�r}s     rG�test_encoding_errors_defaultz,BasicConfigTest.test_encoding_errors_default�sV��	K��H����h�'4�G�M�
K�
K�
K�
K�
���S���!6�7�7��;�;�;��l�+�A�.�G��!�!�'�7�+>�?�?�?����W�-�x�8�8�8����W�^�-?�@�@�@��M�X�Y�Y�Y��M�M�O�O�O��j�7�3�3�3�
(�q��v�v�x�x�~�~�'�'��
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��I�j�!�!�!����T�$J�
K�
K�
K�
K�
K��	
�M�M�O�O�O��j�7�3�3�3�
(�q��v�v�x�x�~�~�'�'��
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��I�j�!�!�!����T�$J�
K�
K�
K�
K���sB�CE(�>'D1�1D5�8D5�(&G7�'G�5G7�G�G7�G�	.G7c�t��	d}tjd|ddtj���|�t	tjj��d��tjjd}|�|tj��|�|j	|��|�
|j��g��fd�}||_tj
d��|����|�d	�d��|���t#dd
���5}|������}ddd��n#1swxYwYt)jd��|�|d��dS#|���t#dd
���5}|������}ddd��n#1swxYwYt)jd��|�|d��wxYw)
Nr�rSrxryrkrc�z��tj��\}}}��t|����dSr�)r0r�rCrV)r�rer�r�s   �rG�dummy_handle_errorzEBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_errors2����,�.�.���1�a����s�1�v�v�&�&�&�&�&rir{z:'ascii' codec can't encode character '\xd8' in position 4:r%r}r)rr�r7rYrZr�r?r�rQr'r�rzr�r�rBr�rJr�r`r�r4r�)rCr'r�r�r�r�r�s      @rG�test_encoding_errors_nonez)BasicConfigTest.test_encoding_errors_none�s����	(��H����h�'+�'4�G�M�
K�
K�
K�
K�
���S���!6�7�7��;�;�;��l�+�A�.�G��!�!�'�7�+>�?�?�?����W�-�x�8�8�8����g�n�-�-�-��G�
'�
'�
'�
'�
'�#5�G���M�J�K�K�K��O�O�G�$�$�$��M�M�=�>E�a�j�
J�
J�
J�
�M�M�O�O�O��j�7�3�3�3�
(�q��v�v�x�x�~�~�'�'��
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��I�j�!�!�!����T�3�'�'�'�'�'��
�M�M�O�O�O��j�7�3�3�3�
(�q��v�v�x�x�~�~�'�'��
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��I�j�!�!�!����T�3�'�'�'�'���sB�DF(�>'E1�1E5�8E5�(&H7�'H�5H7�H�H7�H�	.H7Nc�����g�tj����fd�}tj�td|��t	t|��}|�
||d��n|d�����difg��dS)Nc�������tjj}tj�d����tjj|����||f��dS)N�d)rr�r�r6r�rC)rNr�rir�old_basic_configrCs   ���rG�my_basic_configz2BasicConfigTest._test_log.<locals>.my_basic_config%sg����������*�I��L�!�!�#�&�&�&��O�O�G�L�1�9�=�=�=��M�M�1�b�'�"�"�"�"�"rir�ztest mers)rr�rr�r,rY)rCrJr�r�r�rr�s`    @@rGr�zBasicConfigTest._test_log s��������"�.��	#�	#�	#�	#�	#�	#�	#�	�
�d�G�]�O�D�D�D��W�f�-�-�
����J�u�i�(�(�(�(��J�y�!�!�!�	
����2�r�(��,�,�,�,�,ric�F�|�dtj��dSr�)r�rr�rms rGr�zBasicConfigTest.test_log7s�����u�g�o�.�.�.�.�.ric�0�|�d��dSr�r�rms rGr�zBasicConfigTest.test_debug:r�ric�0�|�d��dSr�r�rms rGr�zBasicConfigTest.test_info=r�ric�0�|�d��dSr�r�rms rGr�zBasicConfigTest.test_warning@r�ric�0�|�d��dSr�r�rms rGr�zBasicConfigTest.test_errorCr�ric�0�|�d��dSr�r�rms rGr�zBasicConfigTest.test_criticalFr�rir�)rprqrrrHrRr�rCrIrMrVr\r^rarcrerjrmrorvr~r�r�r�r�r�r�r�r�r�r�r�r�s@rGr<r<
s��������-�#�#�#�#�#�0�0�0�0�0�;�;�;�J�J�J�(+�+�+�+�+�+�@�@�@�$@�@�@�1�1�1�M�M�M�3�3�3�M�M�M�1�1�1�
9�
9�
9�D�D�D�">�>�>�*O�O�O�(Q�Q�Q�&K�K�K�((�(�(�D-�-�-�-�./�/�/� � � ����"�"�"� � � �#�#�#�#�#�#�#rir<c�B��eZdZ�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	�xZ
S)�LoggerAdapterTestc�@���tt|�����tjdd��t��|_tj|_|j�	|j��|�
|jj|j��|�
|jj���fd�}|�
|��|�
tj
��tj|jd���|_dS)Nc�*���tjdd�<dSr�)rr$)�old_handler_lists�rGr�z(LoggerAdapterTest.setUp.<locals>.cleanupUs���&6�G� ����#�#�#ri�r�r�)rr�rHrr$rnr�r�r�rAr�rKrJr�r��adapter)rCr�r�r�s  @�rGrHzLoggerAdapterTest.setUpKs�����
���&�&�,�,�.�.�.�"�/����2��)�+�+����l�������t�~�.�.�.������1�4�>�B�B�B������,�-�-�-�	7�	7�	7�	7�	7�	
���� � � �����(�)�)�)��,�D�K�t�L�L�L����ric��d}d}	ddzn9#t$r,}|}|j�||j��Yd}~nd}~wwxYw|�t|jj��d��|jjd}|�|jtj	��|�|j
|��|�|j|jf��|�|j|j
||jf��dS�Nztesting exception: %rrkr)r�r�r�r�rYrZrZr�rr|r*rWr�r��
__traceback__�rCr*r�rr�s     rG�test_exceptionz LoggerAdapterTest.test_exception\s&��%����	8�
��E�E�E�� �	8�	8�	8��C��L�"�"�3���7�7�7�7�7�7�7�7�����	8����	
����T�^�3�4�4�a�8�8�8���'��*���������7�7�7������S�)�)�)������t�~�&7�8�8�8�������-��c�.?�@�	B�	B�	B�	B�	B���
A�"=�Ac�L�	ddzn#t$r}|}Yd}~nd}~wwxYw|j�d|���|�t	|jj��d��|jjd}|�|j|j||j	f��dS)Nrkrz
exc_info testr�)
r�r�r�rYrZr�rZr�r�r�)rCrr�r�s    rG�test_exception_excinfoz(LoggerAdapterTest.test_exception_excinfoms���	�
��E�E�E�� �	�	�	��C�C�C�C�C�C�����	����	
�������=�=�=�����T�^�3�4�4�a�8�8�8���'��*��������-��c�.?�@�	B�	B�	B�	B�	Bs��
��c��d}|j�||j��|�t	|jj��d��|jjd}|�|jtj��|�|j	|��|�|j
|jf��dS)Nzcritical test! %rrkr)r�r�r�rYrZrZr�rrzr*rW)rCr*r�s   rGr�zLoggerAdapterTest.test_criticalzs���!������c�4�>�2�2�2�����T�^�3�4�4�a�8�8�8���'��*��������)9�:�:�:������S�)�)�)������t�~�&7�8�8�8�8�8ric��|jjjj}d|jjj_|�t
|jjjd|��|�|j�d����dS)N�!rN� )r�r�rrNr�r|r:�isEnabledFor�rCr�s  rG�test_is_enabled_forz%LoggerAdapterTest.test_is_enabled_for�ss���l�)�1�9��.0����#�+�������!4�!<�i�#�	%�	%�	%������2�2�2�6�6�7�7�7�7�7ric�`�|�|j�����|jjD]}|j�|���|�|j�����|�|j�����dSr�)rBr�r>r�r?rKr:r8s  rG�test_has_handlersz#LoggerAdapterTest.test_has_handlers�s��������0�0�2�2�3�3�3��{�+�	/�	/�G��K�%�%�g�.�.�.�.������0�0�2�2�3�3�3������1�1�3�3�4�4�4�4�4ric��Gd�dtj��}d}||jd���}||d���}d|_|�t|��t|����|�tj||j��|�t|jj
��d��|jj
d}|�|jtj��|�|jd|����|�|j
|jf��|j}|�|j|��|�|jj|��t!��}	||_|�|j|��|�|j|��|�|jj|��||_n#||_wxYw|�|j|��|�|j|��|�|jj|��dS)	Nc��eZdZdZd�ZdS)�.LoggerAdapterTest.test_nested.<locals>.Adapter�Adapterc��|j�d|��|fSra�r�)rCr*rzs   rGr2z6LoggerAdapterTest.test_nested.<locals>.Adapter.process�s���+�-�-��-�-�v�5�5riN)rprqrrr�r2rsrirGr�r��s(�������F�
6�
6�
6�
6�
6rir�zAdapters can be nested, yo.r��AdapterAdapterrkrzAdapter AdapterAdapter )rr�r�r�rYr�r�rzr�rZrZr�r*rWrr�r�)rCr�r*r��adapter_adapterr��orig_manager�temp_managers        rG�test_nestedzLoggerAdapterTest.test_nested�s2��	6�	6�	6�	6�	6�g�+�	6�	6�	6�,���'���D�9�9�9��!�'���=�=�=��!1�������g����_�(=�(=�>�>�>����G�,�c�4�>�B�B�B�����T�^�3�4�4�a�8�8�8���'��*��������)9�:�:�:������%D�s�%D�%D�E�E�E������t�~�&7�8�8�8�&�.���
�
�g�o�|�4�4�4��
�
�d�k�)�<�8�8�8��x�x��	3�&2�O�#��M�M�/�1�<�@�@�@��M�M�'�/�<�8�8�8��M�M�$�+�-�|�<�<�<�&2�O�#�#��l�O�#�2�2�2�2��
�
�o�-�|�<�<�<��
�
�g�o�|�4�4�4��
�
�d�k�)�<�8�8�8�8�8s
�AG0�0	G9)rprqrrrHr�r�r�r�r�r�r�r�s@rGr�r�Js��������M�M�M�M�M�"B�B�B�"B�B�B�9�9�9�8�8�8�5�5�5�9�9�9�9�9�9�9rir�c�~��eZdZ�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Z�xZS)�
LoggerTestc���tt|�����t��|_tjd���|_|j�|j��|�	|jj
|j��|�	|jj��|�	t
j��dS)N�blah�rE)
rr�rHrnr�rr�r�rAr�rKrJr�r�s �rGrHzLoggerTest.setUp�s����
�j�$���%�%�'�'�'�)�+�+����n�&�1�1�1�������t�~�.�.�.������1�4�>�B�B�B������,�-�-�-�����(�)�)�)�)�)ric��|�td|jjd��|�td|jjd��dS)Nz,Level not an integer or a valid string: Nonez.Level not an integer or a valid string: (0, 0))rr)rr�r�r6rms rG�test_set_invalid_levelz!LoggerTest.test_set_invalid_level�s^���!�!��E��K� �$�	(�	(�	(�	
�!�!��G��K� �&�	*�	*�	*�	*�	*ric��d}d}	ddzn9#t$r,}|}|j�||j��Yd}~nd}~wwxYw|�t|jj��d��|jjd}|�|jtj	��|�|j
|��|�|j|jf��|�|j|j
||jf��dSr�)r�r�r�r�rYrZrZr�rr|r*rWr�r�r�r�s     rGr�zLoggerTest.test_exception�s&��%����	7�
��E�E�E�� �	7�	7�	7��C��K�!�!�#�t�~�6�6�6�6�6�6�6�6�����	7����	
����T�^�3�4�4�a�8�8�8���'��*���������7�7�7������S�)�)�)������t�~�&7�8�8�8�������-��c�.?�@�	B�	B�	B�	B�	Br�c��tjtdd��5|�t|jjdd��ddd��dS#1swxYwYdS)Nr�Tr��test message)r�	swap_attrrrr�r�r�rms rG�!test_log_invalid_level_with_raisez,LoggerTest.test_log_invalid_level_with_raise�s���
�
�w�(9�4�
@�
@�	P�	P����i����$��O�O�O�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P����	P�	P�	P�	P�	P�	Ps�(A�A�Ac��tjtdd��5|j�dd��ddd��dS#1swxYwYdS)Nr�Fr�r�)rr�rr�r�rms rG�test_log_invalid_level_no_raisez*LoggerTest.test_log_invalid_level_no_raise�s���
�
�w�(9�5�
A�
A�	2�	2��K�O�O�D�.�1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2�	2�	2s�A�A	�A	c���g�tj|tjd�fd���|j�d���|�t���d��|�d�d��dS)N�print_stackc�R����|�����Sr�)rCrW)r�r{rs  �rGr�z=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>�s���f�m�m�D�M�M�O�O�&D�&D�riTr�rkrmr)rr�r�	tracebackr��
findCallerrYrZ)rCrs @rG� test_find_caller_with_stack_infoz+LoggerTest.test_find_caller_with_stack_info�s�������
�d�G�-�}�D�D�D�D�	F�	F�	F�	
����$��/�/�/�����V���a�(�(�(����;�V�A�Y�G�G�G�G�Gric������d�|jj���fd���fd���fd�}|jj}|��|�|djd��|dj}�dz
�|��|�|djd��|�|dj|��|dj}�dz
�|��|�|djd��|�|dj|��|dj}tj	��}|�
|j��tj�|��|�|djd��|�|j��|jj��dz
�|��|�|djd	��|�|dj|��dS)
Nrkc�"���d����dS)Nr�)�
stacklevelrs)�	the_level�triggers��rG�	innermostz>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermost�s����G�F�y�1�1�1�1�1�1ric������dSr�rs)r�s�rGr�z:LoggerTest.test_find_caller_with_stacklevel.<locals>.inner�s����I�K�K�K�K�Kric������dSr�rs)r�s�rG�outerz:LoggerTest.test_find_caller_with_stacklevel.<locals>.outer�s����E�G�G�G�G�Grir)r�r�r�� test_find_caller_with_stacklevel)r�r�r�rZrYrYrr�rrrArK)	rCr�rZrr0r�r�r�r�s	     @@@@rGr�z+LoggerTest.test_find_caller_with_stacklevel�s!�������	��+�%��	2�	2�	2�	2�	2�	2�	�	�	�	�	�	�	�	�	�	��.�(��
�����������-�{�;�;�;����#���Q��	�
�����������-�w�7�7�7����7�2�;�-�v�6�6�6����#���Q��	�
�����������-�w�7�7�7����7�2�;�-�v�6�6�6����#���'�)�)�����t�~�.�.�.��/��
�����������-�w�7�7�7��!�!�$�.�1�1�1��+�%���Q��	�
�����������-�/Q�R�R�R����7�2�;�-�v�6�6�6�6�6ric� �d}d}dx}x}x}x}x}x}}	tj|||||||||	�	�	}
dt|
j�����zD]5}|di}|�t|jj|||||||||	����6dS)N�	my record�
)r�rI�
some value�r��sinfo)	r�_logRecordFactoryr^�__dict__�keysrrWr��
makeRecord)
rCrEr�rH�lnor*rWr�rr��rvrsr�s
             rG�%test_make_record_with_extra_overwritez0LoggerTest.test_make_record_with_extra_overwrites�������:>�>��>�S�>�3�>��>��>�4�%�
�
&�t�U�B��S�$�'/��u�>�>��*�E�"�+�2B�2B�2D�2D�,E�,E�E�	8�	8�C��,�'�E����h���(>��e� �#�s�D�(�$)��
�
8�
8�
8�
8�	8�	8ric��d}d}dx}x}x}x}x}x}}	ddi}
|j�||||||||
|	��	�	}|�d|j��dS)Nr�r��	valid_keyr�r�)r�r�r�r�)rCrEr�rHr�r*rWr�rr�r�rs            rG�(test_make_record_with_extra_no_overwritez3LoggerTest.test_make_record_with_extra_no_overwrite s�������:>�>��>�S�>�3�>��>��>�4�%��l�+����'�'��e�R��c�4�(0��U�(�L�L���
�
�k�6�?�3�3�3�3�3ric��|�|j�����|jjD]}|j�|���|�|j�����dSr�)rBr�r>r?rKr:r8s  rGr�zLoggerTest.test_has_handlers)sw�������/�/�1�1�2�2�2��{�+�	/�	/�G��K�%�%�g�.�.�.�.������0�0�2�2�3�3�3�3�3ric��tjd��}d|_|�|�����dS)Nz
blah.childF)rrrMr:r>)rC�child_loggers  rG�test_has_handlers_no_propagatez)LoggerTest.test_has_handlers_no_propagate0s@���(��6�6��!&�������1�1�3�3�4�4�4�4�4ric���|jjj}d|jj_|�t|jjd|��|�|j�d����dS)N�rN�)r�rrNr�r|r:r�r�s  rGr�zLoggerTest.test_is_enabled_for5sc���k�)�1��&(����#�������!4�i��M�M�M������1�1�"�5�5�6�6�6�6�6ric�f�|jj}|jjj}d|j_d|jj_|�t
|jd|��|�t
|jjd|��|�|j�d����dS)NTr;rrNr�)r�rrrNr�r|r:r�)rC�old_disabledr�s   rG�#test_is_enabled_for_disabled_loggerz.LoggerTest.test_is_enabled_for_disabled_logger;s����{�+���k�)�1��#����&(����#�������j�,�G�G�G�������!4�i��M�M�M������1�1�"�5�5�6�6�6�6�6ric��tj��}|�|tj��|�|tjd����|�|tjd����|�|tjd����|�|tjd��j��|�|tjd��j��|�|tjd��j��|�|tjd����|�|tjd��j��dS)Nrr�rT�foo.bar�)rrr�r��parentr)rCr�s  rG�test_root_logger_aliasesz#LoggerTest.test_root_logger_aliasesGs4��� �"�"���
�
�d�G�L�)�)�)��
�
�d�G�-�d�3�3�4�4�4��
�
�d�G�-�b�1�1�2�2�2��
�
�d�G�-�f�5�5�6�6�6��
�
�d�G�-�e�4�4�9�:�:�:��
�
�d�G�-�i�8�8�=�>�>�>��
�
�d�G�-�e�4�4�;�<�<�<�����w�0��6�6�7�7�7�����w�0��;�;�B�C�C�C�C�Cric��|�ttjt��|�ttjd��dS)Nsfoo)rr�rr�anyrms rG�test_invalid_nameszLoggerTest.test_invalid_namesTs>�����)�W�%6��<�<�<����)�W�%6��?�?�?�?�?ric���ttjdz��D]Z}dD]U}tj|��}tj||��}tj|��}|�||���V�[dS)Nrk)rr�rTr�zbaz.bar)r]r��HIGHEST_PROTOCOLrrrrr�)rC�protorEr�rg�	unpickleds      rG�
test_picklingzLoggerTest.test_picklingXs����6�2�Q�6�7�7�	1�	1�E�A�
1�
1�� �*�4�0�0���L���/�/��"�L��O�O�	��
�
�i��0�0�0�0�	
1�	1�	1ric�
�|j}tjd��}tjd��}|�tj��|�|���tj��|�|ji��|�|�	tj����|�
|�	tj����|�|jtjdtjdi��|�|ji��|�|�	tj����|�|ji��|�|�	tj����|�|jtjdi��|�tj��|�|���tj��|�|ji��|�
|�	tj����|�tj
��|�|���tj��|�|ji��|�|ji��|�|ji��|�
|�	tj����|�|�	tj����|�
|�	tj����|�|�	tj����|�|�	tj����tj��|�|���tj��|�|ji��|�|ji��|�|ji��|�
|�	tj����|�
|�	tj����|�
|�	tj����dS)Nr�r�TF)r0rrr6r|rYr1�_cacherBr�r:r7rzr�rN)rCr�r.r/s    rG�test_cachingzLoggerTest.test_caching`s%������#�E�*�*���#�I�.�.��	
�
�
�g�m�$�$�$�����2�2�4�4�g�m�D�D�D�������,�,�,�	
����,�,�W�]�;�;�<�<�<�����-�-�g�m�<�<�=�=�=������'�-��w�}�e�)T�U�U�U������b�)�)�)�����,�,�W�]�;�;�<�<�<�	
�����b�)�)�)�����)�)�'�-�8�8�9�9�9������w�}�d�&;�<�<�<�	����)�*�*�*�����2�2�4�4�g�6F�G�G�G�������,�,�,�	
����-�-�g�m�<�<�=�=�=�	�����(�(�(�����2�2�4�4�g�6F�G�G�G�������,�,�,�������,�,�,������b�)�)�)�	
����-�-�g�m�<�<�=�=�=�����,�,�W�-=�>�>�?�?�?�����-�-�g�m�<�<�=�=�=�����,�,�W�-=�>�>�?�?�?�����)�)�'�-�8�8�9�9�9�	���������2�2�4�4�g�6F�G�G�G�������,�,�,�������,�,�,������b�)�)�)�	
����-�-�g�.>�?�?�@�@�@�����-�-�g�.>�?�?�@�@�@�����*�*�7�+;�<�<�=�=�=�=�=ri)rprqrrrHr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�s@rGr�r��s8�������*�*�*�*�*�*�*�*�B�B�B�"P�P�P�2�2�2�H�H�H�%7�%7�%7�N8�8�8�4�4�4�4�4�4�5�5�5�
7�7�7�
7�
7�
7�D�D�D�@�@�@�1�1�1�6>�6>�6>�6>�6>�6>�6>rir�c�(�eZdZ	d�Zd�Zd�Zd�ZdS)�BaseFileTestc��t�|��tjdd��\}|_tj|��g|_dS)Nrhztest_logging-2-)rrHr2r3rHr4rJ�rmfiles)rCrGs  rGrHzBaseFileTest.setUp�sE�����t�����&�v�/@�A�A���D�G�
����������ric���|jD]}tj|���tj�|j��rtj|j��t�|��dSr�)rr4r5r;r<rHrrR)rCrHs  rGrRzBaseFileTest.tearDown�sf���,�	�	�B��I�b�M�M�M�M�
�7�>�>�$�'�"�"�	��I�d�g�������$�����ric��	|�tj�|��d|z���|j�|��dS)NzLog file %r does not exist�r*)rBr4r;r<rrC)rCr
s  rG�
assertLogFilezBaseFileTest.assertLogFile�sW��A��������x�0�0�8�8�C�	�	E�	E�	E�����H�%�%�%�%�%ric
�p�tjdtjdd|���ddd��S)Nr[rMrk)rr�r7rnrms rG�next_reczBaseFileTest.next_rec�s9��� ��g�m�S�!�!%�!2�!2�!4�!4�d�D�$�H�H�	HriN)rprqrrrHrRrr	rsrirGrr�sX������7���� � � �&�&�&�H�H�H�H�Hrirc��eZdZd�Zd�ZdS)�FileHandlerTestc�*�tj|j��tj|jdd���}|�|j��|�tj�	|j����|�
tji����|�|j��|�
tj�	|j����|���dS)Nr%Tr&)r4r5rHrrQr�r5r:r;r<r9r�r0rBrJ)rC�fhs  rG�
test_delayzFileHandlerTest.test_delay�s���
�	�$�'����
�
 ���7�$�
G�
G�
G�����"�)�$�$�$����������0�0�1�1�1�
�	�	�'�'��+�+�,�,�,����R�Y�'�'�'��������t�w�/�/�0�0�0�
���
�
�
�
�
ric�P�tj|j��tj|jdd���}|�tjd����|�|�����|�	��|�|�����t|j��5}|�|����
��d��ddd��dS#1swxYwYdS)Nr%rM)r'rTrxr{)r4r5rHrrQr=r:rr	rJr�rYr`r�)rCr
rs   rG�%test_emit_after_closing_in_write_modez5FileHandlerTest.test_emit_after_closing_in_write_mode�s"��
�	�$�'����
�
 ���7��
E�
E�
E��
����)�-�8�8�9�9�9�
����
�
��� � � �
���
�
�
�
����
�
��� � � �
�$�'�]�]�	5�b����R�W�W�Y�Y�_�_�.�.��4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5s�;D�D�"DN)rprqrrrrrsrirGrr�s2���������	5�	5�	5�	5�	5rirc��eZdZejejd��d���Zd�Zd�Z	d�Z
d�Zej��d���Z
dS)	�RotatingFileHandlerTest�WASI does not have /dev/null.c��tj�|jdd���}|�|�d����|���tj�tjdd���}|�|�|�	������|���dS)Nr%r�r'�maxBytesrk)
rr?rRrHr:�shouldRolloverrJr4�devnullr	�rC�rhs  rG�test_should_not_rolloverz0RotatingFileHandlerTest.test_should_not_rollover�s����
�
1�
1���'�A�2�7�7������*�*�4�0�0�1�1�1�
���
�
�
��
�
1�
1��
�W�q�2�:�:������*�*�4�=�=�?�?�;�;�<�<�<�
���
�
�
�
�
ric���tj�|jdd���}|�|�|�������|���dS)Nr%rkr)rr?rRrHrBrr	rJrs  rG�test_should_rolloverz,RotatingFileHandlerTest.test_should_rollover�s[��
�
�
1�
1�$�'�G�VW�
1�
X�
X������)�)�$�-�-�/�/�:�:�;�;�;�
���
�
�
�
�
ric��tj�|jd���}|�|�����|�|j��|���dS)Nr%r})rr?rRrHrr	rrJrs  rG�test_file_createdz)RotatingFileHandlerTest.test_file_created�sb���
�
1�
1�$�'�G�
1�
L�
L��
����
�
��� � � ����4�7�#�#�#�
���
�
�
�
�
ric���d�}tj�|jddd���}||_|�|�����|�|j��|�|�����|�||jdz����|�|�����|�||jdz����|�tj
�||jdz������|���dS)	Nc��|dzS�N�.testrsr�s rG�namerz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namer�s���'�>�!rir%r�rk�r'�backupCountr�.1�.2�.3)
rr?rRrHr$rr	rr:r4r;r<rJ)rCr$rs   rG�test_rollover_filenamesz/RotatingFileHandlerTest.test_rollover_filenames�s1��	"�	"�	"�
�
�
1�
1��G�g�1�q�2�B�B�����
����
�
��� � � ����4�7�#�#�#�
����
�
��� � � ����5�5���4��0�0�1�1�1�
����
�
��� � � ����5�5���4��0�0�1�1�1����������d�g��n�(=�(=�>�>�?�?�?�
���
�
�
�
�
ric���Gd�dtjj��}||jddd���}|�|�|j��|jdz��|�|�����|�|j��|�|�����|�|�|jdz��d	z��|�	tj�|�|jdz������|�
��dS)
Nc��eZdZd�Zd�ZdS)�ZRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotatorc��|dzSr"rs)rCrEs  rGr$z`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namer�s���g�~�%ric�x�tj�|��rtj||dz��dSdS)N�.rotated)r4r;r<r�)rC�source�dests   rG�rotatorzbRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotator�s?���7�>�>�&�)�)�:��J�v�t�j�'8�9�9�9�9�9�:�:riN)rprqrrr$r3rsrirG�HandlerWithNamerAndRotatorr-�s2������
&�
&�
&�
:�
:�
:�
:�
:rir4r%r�rkr%r#r'r0)rr?rRrHrYr$rr	rr:r4r;r<rJ)rCr4rs   rG�test_namer_rotator_inheritancez6RotatingFileHandlerTest.test_namer_rotator_inheritance�s>��	:�	:�	:�	:�	:��)9�)M�	:�	:�	:�(�
'��G�g�1�q�B�B�B��������$�'�*�*�D�G�g�,=�>�>�>�
����
�
��� � � ����4�7�#�#�#�
����
�
��� � � ����2�8�8�D�G�d�N�3�3�j�@�A�A�A�������������4��(@�(@�A�A�B�B�B�
���
�
�
�
�
ric��d�}d�}tj�|jddd���}||_||_|���}|�|��|�|j��|���}|�|��||jdz��}|�|��tj
}t|d��5}|���}	tj|	��}
|�|
�d	��|j|z��ddd��n#1swxYwY|�|�����||jd
z��}|�|��t|d��5}|���}	tj|	��}
|�|
�d	��|j|z��ddd��n#1swxYwY|�|�����||jd
z��}t|d��5}|���}	tj|	��}
|�|
�d	��|j|z��ddd��n#1swxYwY|�tj�||jdz������|���dS)Nc��|dzS)Nz.gzrsr�s rGr$z3RotatingFileHandlerTest.test_rotator.<locals>.namer
s���%�<�ric�J�t|d��5}|���}tj|d��}t|d��5}|�|��ddd��n#1swxYwYddd��n#1swxYwYtj|��dS)N�rbrTrY)r�r`�zlib�compressr�r4r�)r1r2�sfr��
compressed�dfs      rGr3z5RotatingFileHandlerTest.test_rotator.<locals>.rotator
s���f�d�#�#�
)�r��w�w�y�y��!�]�4��3�3�
��$��%�%�)���H�H�Z�(�(�(�)�)�)�)�)�)�)�)�)�)�)����)�)�)�)�
)�
)�
)�
)�
)�
)�
)�
)�
)�
)�
)����
)�
)�
)�
)�

�I�f�����s5�:B�A-�!B�-A1	�1B�4A1	�5B�B�Br%r�rkr%r'r9r�r(r))rr?rRrHr3r$r	rrr4�linesepr�r`r:�
decompressrYrer*r:r;r<rJ)rCr$r3r�m1�m2rH�newliner�r=r�s           rG�test_rotatorz$RotatingFileHandlerTest.test_rotators���	 �	 �	 �	�	�	��
�
1�
1��G�g�1�q�2�B�B����
����
�]�]�_�_��
����������4�7�#�#�#�
�]�]�_�_��
�������
�U�4�7�T�>�
"�
"�����2�����*��
�"�d�^�^�	E�q������J��?�:�.�.�D����T�[�[��1�1�2�6�G�3C�D�D�D�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	����
�
��� � � �
�U�4�7�T�>�
"�
"�����2����
�"�d�^�^�	E�q������J��?�:�.�.�D����T�[�[��1�1�2�6�G�3C�D�D�D�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	����
�
��� � � �
�U�4�7�T�>�
"�
"��
�"�d�^�^�	E�q������J��?�:�.�.�D����T�[�[��1�1�2�6�G�3C�D�D�D�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	
���������d�g��n�(=�(=�>�>�?�?�?�
���
�
�
�
�
s9�-AE�E�E�=AH#�#H'�*H'�8AK�K"�%K"N)rprqrrr�r�r�is_wasirrrr*r5�
requires_zlibrDrsrirGrr�s��������X�_�W�_�&E�F�F���G�F�����
���
�
�
����&�W����*�*���*�*�*rirc�j�eZdZejejd��d���Zd�Zd�Z	d�Z
d�Zd�ZdS)	�TimedRotatingFileHandlerTestrc�,�tj�tjddd���}tjd��tjddi��}|�|�	|����|�
��dS)N�Sr%rk�r'r&皙�����?r*ztesting - device file)rr?rSr4rr^r`r�r:rrJ)rCr
r�s   rGrz5TimedRotatingFileHandlerTest.test_should_not_rollover6s����
�
6�
6��
�C�'�q�7�B�B���
�3�����!�5�*A�"B�C�C������*�*�1�-�-�.�.�.�
���
�
�
�
�
ric���tj�|jddd���}tjd��}|�|��tjddi��}|�|��|�|j��tj
d��tjdd	i��}|�|��|���d
}tj�
��}d}t|��D]t}|tj|���z
}	|j|	�d
��z�t"j����}|r|j����n�ud|z}
|�st"j�|j��\}��fd�t#j|��D��}t1d|�d��zt2j���t1d|zt2j���|D]}}
t1d|
z��t"j�||
��}t9|d��5}t1|�����ddd��n#1swxYwY�~|�||
���dS)NrJr%rkrKr>r*ztesting - initialrLztesting - after delayFi,��secondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondsc�>��g|]}|�����|��Srs)r�)rWr�rHs  �rGrYz>TimedRotatingFileHandlerTest.test_rollover.<locals>.<listcomp>as*���C�C�C�1�!�,�,�r�2B�2B�C�Q�C�C�Criz
Test time: %sz%Y-%m-%d %H-%M-%S�r{zThe only matching files are: %szContents of %s:r�r)rr?rSrHr:r=r�rrr^r`rJr?rr]�	timedelta�strftimer4r;r<rrCr��listdirrsr0r�r�r�r`rB)rCr
r�r!r"�foundr�GO_BACK�secs�prevr*�dn�filesr�r;�tfrHs                @rG�
test_rolloverz*TimedRotatingFileHandlerTest.test_rolloverAs����
�
�
6�
6����w�A�7�?�?���� 9�:�:��
�������
�
"�E�+>�#?�
@�
@��
����������4�7�#�#�#��
�3����
�
"�E�+B�#C�
D�
D��
�������
���
�
�
�����#�#�%�%�����'�N�N�	�	�D���+�D�9�9�9�9�D���4�=�=�)=�>�>�>�B��G�N�N�2�&�&�E��
���#�#�B�'�'�'���
�=�w�F���
	%��W�]�]�4�7�+�+�F�B��C�C�C�C��
�2���C�C�C�E��/�C�L�L�1D�$E�$E�E�C�J�W�W�W�W��3�e�;�#�*�M�M�M�M��
%�
%���'�!�+�,�,�,��w�|�|�B��*�*���$��_�_�%���"�'�'�)�)�$�$�$�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%������3��'�'�'�'�'s�5"J#�#J'	�*J'	c��|j}|ttjj|jddd���|ttjj|jddd���|ttjj|jddd���dS)N�Xr%Tr&�W�W7)rrBrr?rSrH)rCrs  rG�test_invalidz)TimedRotatingFileHandlerTest.test_invalidks����(����Z��!1�!J��W�c�G�4�	A�	A�	A�	A���Z��!1�!J��W�c�G�4�	A�	A�	A�	A���Z��!1�!J��W�d�W�D�	B�	B�	B�	B�	B�	Bric	��d}tjddd��}tj�|jddddd|���}	|�|��}|�||dz��|�|d	z��}|�||d
z��|���dS#|���wxYw)Nr�r%�MIDNIGHTrkT�r'�when�intervalr&r@�atTime��жi@�)	r?r^rr?rSrH�computeRolloverrYrJ)rC�currentTimerhrrds     rG�"test_compute_rollover_daily_attimez?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attimets�������r�1�a�(�(��
�
�
6�
6��G�g�J��PQ��V�7�%�%��	��'�'��4�4�F����V�[�<�%?�@�@�@��'�'��l�(B�C�C�F����V�[�<�%?�@�@�@��H�H�J�J�J�J�J��B�H�H�J�J�J�J���s
�AB:�:Cc
��ttj����}||dzz
}tjddd��}tj|��j}td��D�]f}tj�|j	dd|zddd|�	��}	||kr	d|z
|z}n||z
}|dz}|d
z
}||z
}|�
|��}||kr:tdtjz��tdt��z��|�||��||kr|d
z
}|�
|dz��}||kr:tdtjz��tdt��z��|�||��|�����O#|���wxYwdS)N�Qrcr�r%zW%drkTrerizfailed in timezone: %dzlocal vars: %si�:	rj)rIr^r?rF�tm_wdayr]rr?rSrHrkrs�timezone�localsrYrJ)	rCrl�todayrh�wday�dayrrerds	         rG�#test_compute_rollover_weekly_attimez@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attime�s����$�)�+�+�&�&���k�E�1�1����r�1�a�(�(���{�5�!�!�)����8�8�	�	�C��!�:�:���'����a�UV���;�)�)�B�
��#�:�:�!"�D��3��H�H� #�d�
�H��L�(���L�(���E�!���+�+�E�2�2���X�%�%��2�T�]�B�C�C�C��*�V�X�X�5�6�6�6�� � ���2�2�2��$�;�;�� 0�0�H��+�+�E�L�,@�A�A���X�%�%��2�T�]�B�C�C�C��*�V�X�X�5�6�6�6�� � ���2�2�2����
�
�
�
�����
�
�
�
����?	�	s
�DF6�6Gc�@�tjd���}|�tj|��g}t
j���}td��D]B}|�|�	d����|tj
d���z
}�Cd}g}g}|D]�}tj�
|d|z��}	tj�|	d	dd
d���}
|�|
��|�d
��r |D]}|�|�d|�������d�|
_|D]}|�|�d|�d������|D]K}tj�
||��}	t'|	d��5}
	ddd��n#1swxYwY�Lt)|��D�]S\}}||}
|
���}|�t/|��d��|�d
��rUd|z}	|D]L}tj�|��\}}|�|�|	�����M��|D]�}tj�|��\}}|�|�d����|�|�|dz��o)|t/|��dz���������UdS)Nr�r�rHz%Y-%m-%d_%H-%M-%Sr�rN)�a.bza.b.czd.ezd.e.fz%s.logrgrpT)rfrgr&r(ryz.log.c�4�|�dd��dzS)Nrhr)r�r�s rGr�zKTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.<lambda>�s��T�\�\�&�"�-E�-E��-N�rir�rhrYrFz%s.log.r�)r2�mkdtempr��shutil�rmtreer?rr]rCrSrRr4r;r�rr?rSr�r$r��	enumerate�getFilesToDeleterYrZr�rBr@�isdigit)rC�wd�timesrrX�prefixesrZ�rotatorsr�rMr3r�rHr��
candidatesrHrjs                 rG�test_compute_files_to_deletez9TimedRotatingFileHandlerTest.test_compute_files_to_delete�s���
�
�_�
5�
5�
5������
�r�*�*�*���
�
�
"�
"�
$�
$���r���	0�	0�A��L�L����%8�9�9�:�:�:��(�$�Q�/�/�/�/�B�B�3�������
	<�
	<�F�����R��F�!2�3�3�A��&�?�?���IJ�LM�FJ�@�L�L�G�
�O�O�G�$�$�$�� � ��'�'�
<��<�<�A��L�L������!:�;�;�;�;�<�!O� N��
��<�<�A��L�L�������!:�;�;�;�;�<��	�	�B�����R��$�$�A��a����
�!��
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��#�8�,�,�	C�	C�I�A�v��q�k�G� �1�1�3�3�J����S��_�_�a�0�0�0�� � ��'�'�

C���&��#�6�6�A��G�M�M�!�,�,�E�A�r��O�O�B�M�M�!�$4�$4�5�5�5�5�6�$�C�C�A��G�M�M�!�,�,�E�A�r��O�O�B�K�K��$7�$7�8�8�8��O�O�B�M�M�&�3�,�$?�$?�%B�$&�s�6�{�{�Q��$7�$?�$?�$A�$A�C�C�C�C�C�	C�	Cs� F.�.F2	�5F2	N)
rprqrrr�r�rrErr\rarmrwr�rsrirGrHrH5s��������X�_�W�_�&E�F�F���G�F��((�((�((�TB�B�B�
�
�
� &�&�&�P.C�.C�.C�.C�.CrirHc�P�tjdi|��tjd���zS)NrkrNrs)r?rR)r�s rGrWrW�s,����#�#��#�#�x�'9�!�'D�'D�'D�D�Dri)rJrk)�M�<)�Hi)�Dro)rdro�W0r\�)�days�hoursc��tj�|jd|ddd���}d}|�|��}||k�rh|dk�ra	|jrt
j|��}nt
j|��}|d}|d	}|d
}	tjj	|dz|zdz|	zz
}
||
z}td|�d
|j�d�tj���td|ztj���td|ztj���td|	ztj���td|
ztj���td|ztj���n5#t$r(}td|ztj���Yd}~nd}~wwxYw|�||��|���dS)Nr%rkrT)r'rfrgr&r@grdrFr\r�r�zt: z (�)rQzcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rr?rSrHrkr@r^rF�	localtime�	_MIDNIGHTrsr0r�rrrYrJ)
rCrf�exprrlrdr��currentHour�
currentMinute�
currentSecondr�rrs
             rG�test_compute_rolloverr��s��
�
�
6�
6��G�g�D�1�!�QU�7�W�W�����#�#�K�0�0���&�=�=��z�!�!�S��v�8� �K��4�4��� �N�;�7�7��"#�A�$�K�$%�a�D�M�$%�a�D�M��(�2�{�R�7G�7D�8E�HJ�7K�)�7*�+�A�)�1�_�F��E�!�!�!�R�V�V�V�4�3�:�F�F�F�F��+�k�9��
�K�K�K�K��-�
�=�C�J�O�O�O�O��-�
�=�C�J�O�O�O�O��'�A�+�C�J�7�7�7�7��,��/�c�j�A�A�A�A�A�� �S�S�S��<�q�@�s�z�R�R�R�R�R�R�R�R�R�����S��������f�%�%�%�
���
�
�
�
�
s�D*E<�<
F.�F)�)F.ztest_compute_rollover_%sz>win32evtlog/win32evtlogutil/pywintypes required for this test.c��eZdZd�ZdS)�NTEventLogHandlerTestc���d}tjd|��}tj|��}	tj�d��}n7#tj$r%}|jdkrtj
d����d}~wwxYwtjddi��}|�|��|�
��|�|tj|����tjtjz}d}d}	tj|||	��}
|
D],}|jdkr�t'j||��}|d	kr�*d
}d|	z}|�||���dS)
N�Application�test_loggingr�z#Insufficient privileges to run testr*zTest Log MessageFr�zTest Log Message
Tz3Record not found in event log, went back %d recordsr)�win32evtlog�OpenEventLog�GetNumberOfEventLogRecordsrr?�NTEventLogHandler�
pywintypesr��winerrorr��SkipTestr�r9rJ�
assertLess�EVENTLOG_BACKWARDS_READ�EVENTLOG_SEQUENTIAL_READ�ReadEventLog�
SourceName�win32evtlogutil�SafeFormatMessagerB)rC�logtype�elh�num_recsrQrr��flagsrUrV�eventsr*s            rGrAz NTEventLogHandlerTest.test_basicsz�����&�t�W�5�5���9�#�>�>��	�� �2�2�>�B�B�A�A����	�	�	��z�Q����'�(M�N�N�N������	����

�!�5�*<�"=�>�>��	�������	���	�	�	�����+�"H��"M�"M�N�N�N��3��4�5�������)�#�u�g�>�>���	�	�A��|�~�-�-��!�3�A�w�?�?�C��,�,�,���E��C�g�M������3��'�'�'�'�'s�A
�
B� A<�<BN)rprqrrrArsrirGr�r�s#������(�(�(�(�(rir�c��eZdZd�ZdS)�MiscTestCasec�F�hd�}tj|t|���dS)N>
r�r��Filtererrn�
RootLoggerr3�PlaceHolderrB�currentframer4�StrFormatStylerr2)�not_exported)r�check__all__r)rCr�s  rG�test__all__zMiscTestCase.test__all__1s3������
	��T�7��F�F�F�F�F�FriN)rprqrrr�rsrirGr�r�0s(������G�G�G�G�Grir�c�T�tjtjdd����dS)N�LC_ALLr)r��enterModuleContextr�run_with_localersrirG�setUpModuler�=s&����� 7��"� E� E�F�F�F�F�Fri�__main__r�)�r�logging.handlers�logging.configr�r�r"r?rOr�r3rvrr4r�rarTr|r�r�r0r2�test.support.script_helperrrr�r�test.supportrrrr	�test.support.logging_helperr
rurnr^r�r�rq�http.serverrr�urllib.parser
r�socketserverrrrr�import_deprecatedrrr�r�r�rar:�TestCaserrur��SILENTr��TERSE�EFFUSIVEr�r�	TALKATIVEr��
CHATTERBOX�BORINGr]r�r�r�r�r�r�rr�r�r8r�r�r�r�r�r�r�rrrr+r0r�r�r2rFr:rmrrr�rr�rrr&r+r9�IPV6_ENABLEDr=rCrlrr�r�r�r�r�r�r�r�r�r�r�r�r?r��
unittest.mockr�r�rRr�tzinforr@rrrdrVr`rjrqryr�rnr�r�r
r<r�r�rrrrHrWrfr�r�r|r�r�r�rp�mainrsrirG�<module>r�s:��"�
������������
�
�
�
�����������������
�
�
�
�	�	�	�	�	�	�	�	�����	�	�	�	�����
�
�
�
�	�	�	�	�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�����N�N�N�N�N�N�N�N�������"�"�"�"�"�"�&�&�&�&�&�&�)�)�)�)�)�)�(�(�(�(�(�(�3�3�3�3�3�3�������������������������:�:�:�:�:�:�:�:�+�+�+�+�+�+�+�+�D�D�D�D�D�D�D�D�D�D�D�D�-�?�,�Z�8�8��)��)�'�2�2��6�3�3�3�3�3�3�3�3�3�3�3�3�3���6�6�6�15�5�K�5�/�J�J�J�6����	��K�K�K�K���	�	�	��D�	����j'�j'�j'�j'�j'�x� �j'�j'�j'�ZUI�UI�UI�UI�UI��UI�UI�UI�n<%�<%�<%�<%�<%�h�<%�<%�<%�L�������������	��	��
����e�F�F�Q�J�'�'���(��*�	�'��*��*��)�
�+�
�+��,�
�(���+�+�+�+�+�g�n�+�+�+�:�:�:�:�:���:�:�:�V'�V'�V'�V'�V'��V'�V'�V'�rU2�U2�U2�U2�U2�(�U2�U2�U2�p1�1�1�1�1��1�1�1�#�#�#�#�#��-�#�#�#�
�
�
�
�
��
�
�
�'@�'@�'@�'@�'@��'@�'@�'@�XG;�G;�G;�G;�G;�U�%�G;�G;�G;�T0�0�0�0�0�6�0�0�0�d'�'�'�'�'�\�:�'�'�'�R1�1�1�1�1�L�"4�1�1�1�>-�-�-�-�-�L�"4�-�-�-�^�7�6�9���(�(�(�(�(�(�}�(�(�(�(�(�(�(�(��(�(�(�
!�� �"�"�,��,�.�.������h���/�.�#�"��@f5�f5�f5�f5�f5��f5�f5�f5�R-�-�-�-�-��*�-�-�-�^�^�^�^�^�X�^�^�^�B!�� �"�"�,��,�.�.�W+�W+�W+�W+�W+��W+�W+�/�.�#�"�W+�r������W�W�V�Y�/�/�1H�I�I�'�'�'�'�'�-�'�'�J�I�'� !�� �"�"�,��,�.�.�>:�>:�>:�>:�>:�(�>:�>:�/�.�#�"�>:�@���W�W�V�Y�/�/�1H�I�I�'�'�'�'�'�1�'�'�J�I�'� !�� �"�"�,��,�.�.�IB�IB�IB�IB�IB��IB�IB�/�.�#�"�IB�V���W�W�V�Y�/�/�1H�I�I�'�'�'�'�'�-�'�'�J�I�'� ���]�/�;�=�=�
6�
6�
6�
6�
6�-�
6�
6�=�=�
6�!�� �"�"�,��,�.�.�K �K �K �K �K �h�K �K �/�.�#�"�K �Z1�1�1�1�1��1�1�1�h.L�.L�.L�.L�.L�8�.L�.L�.L�b%K�%K�%K�%K�%K�8�%K�%K�%K�P.�.�.�.�
�
�
�
�
�
�
�
�#�#�#�	�	�	�	�	�G�)�	�	�	�S*�S*�S*�S*�S*�X�S*�S*�S*�j(9�9�9�9�9�(�9�9�9�.�����h����"	�	�	�	�	�w�(�	�	�	� � � � � �8� � � �F-��,�.�.�iP�iP�iP�iP�iP�x�iP�iP�/�.�iP�V�7�7��_�-�-�b&�����#�#�#�#�#�#�0��0�2�2�]&�]&�]&�]&�]&�H�]&�]&�3�2�]&�@�x��!���������(�/����
�c�e�e��.�.�.�.�.�.�.�.�Y)�Y)�Y)�Y)�Y)�H�%�'9�Y)�Y)�Y)�x&�&�&�&�&�W�7�&�&�&�G�G�G�G�G�X�.�G�G�G�&A�A�A�A�A�H�A�A�A�,$;�$;�$;�$;�$;�X�$;�$;�$;�N	�	�	�	�	�	�	�	�$�$�$�$�$�w�*�$�$�$�T/�T/�T/�T/�T/�8�T/�T/�T/�nx/�x/�x/�x/�x/�(�x/�x/�x/�vg=�g=�g=�g=�g=�H�g=�g=�g=�R}#�}#�}#�}#�}#�h�'�}#�}#�}#�@
i9�i9�i9�i9�i9��)�i9�i9�i9�X`>�`>�`>�`>�`>��-�`>�`>�`>�FH�H�H�H�H�8�H�H�H�45�5�5�5�5�l�5�5�5�,j�j�j�j�j�l�j�j�j�XeC�eC�eC�eC�eC�<�eC�eC�eC�PE�E�E��� �%�,����1�B�/�/�/�0�
�)d�)d�I�D�#�*.�3� � � � �B�G�(�*D�t�*K�Mb�c�c�c�c����[�"b�c�c� (� (� (� (� (�H� (� (�d�c� (�FG�G�G�G�G�8�$�G�G�G�G�G�G��z����H�M�O�O�O�O�O��s$�C$�$C2�1C2�6C;�;D�D