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

�Keo��b�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZddlmZddlmZddlmZdd	l m!Z!ddl"Z"ddl#Z#ddl$Z$ddl%Z%ddl&Z&ddl'Z'dd
l(m)Z)m*Z*ddl+m,Z,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2ej3d
��Z4ej3d��Z5	ddl6Z6ddl7Z7ddl8Z8n#e9$r	dxZ6xZ7Z8YnwxYw	ddl:Z:n#e9$rYnwxYwGd�de%j;��Z<Gd�de<��Z=Gd�de<��Z>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHeIeHe?dz��ZJe?d e@d!eAd"eBd#eCd$eDd%eEd&eFd'eGd(eHd)i
ZKGd*�d+ejL��ZMGd,�d-ejL��ZNGd.�d/e<��ZOGd0�d1e<��ZPGd2�d3eQ��ZRGd4�d5ejS��ZTGd6�d7eQ��ZUGd8�d9e<��ZVGd:�d;e5jW��ZXGd<�d=eQ��ZYGd>�d?eYe)��ZZGd@�dAeYe1��Z[GdB�dCeYe/��Z\e]edD��rGdE�dFe[��Z^GdG�dHe\��Z_ej`��eja��GdI�dJe<������ZbGdK�dLe<��ZcGdM�dNejd��ZeGdO�dPe<��Zfej`��eja��GdQ�dRe<������ZgdS�Zhe%jie]edD��dT��GdU�dVeg����Zjej`��eja��GdW�dXe<������Zke%jie]edD��dT��GdY�dZek����Zlej`��eja��Gd[�d\e<������Zme%jie]edD��dT��Gd]�d^em����Zne%jiejod_��Gd`�daem����Zpej`��eja��Gdb�dce<������ZqGdd�dee<��ZrGdf�dge<��ZsGdh�die<��Ztd�dj�ZuGdk�dl��Zvdm�ZwGdn�doejS��ZxGdp�dqe<��ZyGdr�dse<��ZzGdt�due<��Z{Gdv�dwej|��Z}Gdx�dye<��Z~eja��Gdz�d{e<����Ze]ej�d|��r-ddl�Z�dd}l�m�Z�eja��Gd~�de<����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%jie6d���Gd��d�e<����Z�Gd��d�e%j;��Z�d��Z�e�d�kre%j���dSdS)�zoTest harness for the logging module. Run all tests.

Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved.
�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�8�eZdZdZdZdZdZd�Zd�Zd
d�Z	d	�Z
dS)�BaseTestzBase class for logging tests.z&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$rc�z�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)zxSetup the default logging stream to an internal StringIO instance,
        so that we can examine log output as we want.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���/�>�@�@����'�)�)�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$�$D9c��|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)zJRemove our logging stream, and restore the original logging
        level.rN) 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�s0��	
���������&�&�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�N�|p|j}tj|p|j��}|������}|�t|��t|����t||��D]i\}}|�	|��}|s|�
d|z��|�t|�����|���j|�
��}|r|�
d|z��dSdS)z�Match the collected log lines against the regular expression
        self.expected_log_pat, and compare the extracted group values to
        the expected_values list of tuples.z*Log line does not match expected pattern:
z'Remaining output at end of log stream:
N)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�6�|xjdz
c_d|jzS)zMGenerate a message consisting solely of an auto-incrementing
        integer.�z%d)�message_num�rCs rG�next_messagezBaseTest.next_message�s&��	
���A�����d�&�&�&ri�NN)�__name__�
__module__�__qualname__�__doc__r;rVrlrHrRrhrn�rirGrrOst������'�'�9�J�4���K�(4�(4�(4�T A� A� A�DF�F�F�F�$'�'�'�'�'rirc�<�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	S)
�BuiltinLevelsTestz*Test builtin levels and their inheritance.c�B�|j}tjd��}|�tj��tjtjd��i��}|�tj��tjd��}|�tj��|�tj	|����|�
|����|�tj	|����|�
|����|�|����|�|����|�tj	|����|�
|����|�|����|�|����|�
|����|�|����|�|����|�
|����|�
|����|�gd���dS)N�ERR�INF�DEB))rx�CRITICAL�1)rx�ERROR�2)ryr{�3)ryr}�4)ry�WARNING�5)ry�INFO�6)rzr{�7)rzr}�8)rzr��9)rzr��10)rzr7�11)rnrrr6r}�
LoggerAdapterr�r7�logr{�error�warning�info�debugrh)rC�mrxryrzs     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)Nry�INF.ERR)r�r{r|)r�r}r~�
rnrrr6r�r}r�r{r�r�r�r�rh)rCr�ry�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)Nryr��	INF.UNDEF�
INF.ERR.UNDEF�UNDEF))r�r{r|)r�r}r~)r�r�r)r�r�r�)r�r{r�)r�r}r�r�)rCr�ryr��	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)Nry�INF.BADPARENT.UNDEF�
INF.BADPARENT))r�r{r|)r�r�r~)r�r{r)r�r�r�)
rnrrr6r�r��FATALr�r�rh)rCr�ry�
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)z&See issue #22386 for more information.r�N)rYr�getLevelNamer�rms rG�test_regression_22386z'BuiltinLevelsTest.test_regression_22386BsN������-�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)z&See issue #29220 for more information.rr��NOTSETN)r�addLevelNamer��
addCleanuprYr�r�rms rG�test_regression_29220z'BuiltinLevelsTest.test_regression_29220Ks�����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)rprqrrrsr�r�r�r�r�r�r�rtrirGrvrv�s�������4�4�-�-�-�^���.!�!�!�F���4E�E�E�
/�/�/�I�I�I�I�Irirvc�$�eZdZdZd�Zd�Zd�ZdS)�BasicFilterTestzTest the bundled Filter class.c���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)rprqrrrsr�r�r�rtrirGr�r�SsG������(�(�*�*�*�0-�-�-�:%�%�%�%�%rir��x�w�v�u�t�s�r�q�p�ork�Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	Talkative�	Garrulous�
Chatterbox�Boringc��eZdZdZd�ZdS)�GarrulousFilterz)A filter which blocks garrulous messages.c�"�|jtkS�N)�levelno�	GARRULOUS�rCr�s  rGr�zGarrulousFilter.filter�s���~��*�*riN�rprqrrrsr�rtrirGr�r��s)������3�3�+�+�+�+�+rir�c��eZdZdZd�ZdS)�VerySpecificFilterz5A filter which blocks sociable and taciturn messages.c�,�|jttfvSr�)r��SOCIABLE�TACITURNr�s  rGr�zVerySpecificFilter.filter�s���~�h��%9�9�9riNr�rtrirGr�r��s)������?�?�:�:�:�:�:rir�c�4�eZdZdZdZd�Zd�Zd�Zd�Zd�Z	dS)	�CustomLevelsAndFiltersTestz@Test various filtering possibilities with custom logging levels.�^[\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�VERBOSErrhrms 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�rrhrr�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�r�rrrrrr))r�r�)r��12)r��14)r��15)r��17)r��18)r��20)r0r?r�r�rrhr�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)
rprqrrrsrVrHrr	rrrtrirGr�r��sp������J�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�fnrQr8r9r��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)zs
        Test that Path objects are accepted as filename arguments to handlers.

        See Issue #27493.
        �w�arQr#r(r&N)r3r4r5rJr6�pathlib�Pathr�FileHandlerr?�RotatingFileHandler�TimedRotatingFileHandlerr1r2r7rBr<r=)rCrHrI�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�)	�ranger5r6�time�
deletion_timerB�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-��targetrXTr&r'z'%(asctime)s: %(levelname)s: %(message)s�{�G�zt?r+�testingzDeleted at z, opened at )�handle_timer`r3r4r5rJ�	threading�Thread�daemon�startrr?r7r:r=r^r_rar�r:�	Exception�printr�r<r=r6)rCrg�	del_count�	log_countr)rHrI�removerrQr�rfr�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��d
S#t+jd��wxYw|�d������|���t7j|d���d
S)z>Ensure child logging locks are not held; bpo-6721 & bpo-36533.c�$��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�_OurHandlerr{�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)rkrEz#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)�exitcodeN)rrrYrZr!r�r�r5rJrE�
assertGreater�_at_fork_reinit_lock_weaksetrrAr6r7ro�Eventrprrr�r5�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�s.�����	/�	/�	/�	/�	/�'�/�	/�	/�	/�	
����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!rLrY�unittest�skipIfr5rEr�
is_emscriptenr�requires_working_threadingrx�
requires_forkr�rtrirGrrs�������=�=�=�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�rtrirGr�r��s#������1�1�1�1�1rir�c��eZdZd�ZdS)�TestStreamHandlerc��||_dSr�)�error_recordr�s  rG�handleErrorzTestStreamHandler.handleError�s��"����riN)rprqrrr�rtrirGr�r��s#������#�#�#�#�#rir�c� �eZdZejZdZdS)�StreamWithIntNamer�N)rprqrrrr��levelrErtrirGr�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��raiseExceptionsr:�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�f�tj��}tj��}|�|��}|�|tj��|�|��}|�||��|�|��}|�|��dS)z3
        Test setting the handler's stream
        N)	rr8r3r4�	setStreamr�r1r��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�reprr s  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�rtrirGr�r�sF������0�0�0�,"�"�"�@�@�@�@�@rir�c�0�eZdZdZd�Zd�Zd�Zd�Zd�ZdS)�TestSMTPServera
    This class implements a test SMTP server.

    :param addr: A (host, port) tuple which the server listens on.
                 You can specify a port value of zero: the server's
                 *port* attribute will hold the actual port number
                 used, which can be used in client connections.
    :param handler: A callable which will be called to process
                    incoming messages. The handler will be passed
                    the client address tuple, who the message is from,
                    a list of recipients and the message data.
    :param poll_interval: The interval, in seconds, used in the underlying
                          :func:`select` or :func:`poll` call by
                          :func:`asyncore.loop`.
    :param sockmap: A dictionary which will be used to hold
                    :class:`asyncore.dispatcher` instances used by
                    :func:`asyncore.loop`. This avoids changing the
                    :mod:`asyncore` module's global state.
    c���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�6�|�||||��dS)aI
        Delegates to the handler passed in to the server's constructor.

        Typically, this will be a test case method.
        :param peer: The client (host, port) tuple.
        :param mailfrom: The address of the sender.
        :param rcpttos: The addresses of the recipients.
        :param data: The message.
        N)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)zG
        Start the server running on a separate daemon thread.
        rjTN�rorp�
serve_foreverr�r�rqrr�rC�ts  rGrrzTestSMTPServer.startY�N��%�+�4�3E�26�2D�1F�H�H�H�	H���q����	���	�	�	�	�	ric�j�|js+t�||jd���|j�)dSdS)a*
        Run the :mod:`asyncore` loop until normal termination
        conditions arise.
        :param poll_interval: The interval, in seconds, used in the underlying
                              :func:`select` or :func:`poll` call by
                              :func:`asyncore.loop`.
        rk)r��countN)r�r�loop�_map)rCr�s  rGr�zTestSMTPServer.serve_foreverbsN���*�	A��M�M�-�T�Y�a�M�@�@�@��*�	A�	A�	A�	A�	Aric��d|_tj|j��d|_|���t
�|jd���dS)zr
        Stop the thread by closing the server instance.
        Wait for the server thread to terminate.
        TN)r��
ignore_all)r�r�join_threadr�rJr�	close_allr�rms rG�stopzTestSMTPServer.stopmsS��
��
��$�T�\�2�2�2�����
�
�������t�y�T��:�:�:�:�:riN)	rprqrrrsr�r�rrr�r�rtrirGr�r�/sl��������(+�+�+�
5�
5�
5����	A�	A�	A�	;�	;�	;�	;�	;rir�c�4��eZdZdZd�Zd�Z�fd�Zd�Z�xZS)�ControlMixina

    This mixin is used to start a server on a separate thread, and
    shut it down programmatically. Request handling is simplified - instead
    of needing to derive a suitable RequestHandler subclass, you just
    provide a callable which will be passed each received request to be
    processed.

    :param handler: A handler callable which will be called with a
                    single parameter - the request - in order to
                    process the request. This handler is called on the
                    server thread, effectively meaning that requests are
                    processed serially. While not quite web scale ;-),
                    this should be fine for testing applications.
    :param poll_interval: The polling interval in seconds.
    c�`�d|_||_||_tj��|_dSr�)r�r�r�ror��ready)rCr�r�s   rGr�zControlMixin.__init__�s+�����*�����
��_�&�&��
�
�
ric��tj|j|jf���x|_}d|_|���dS)zI
        Create a daemon thread to run the server, and start it.
        rjTNr�r�s  rGrrzControlMixin.start�r�ric���|j���tt|���|��dS)z^
        Run the server. Set the ready flag before entering the
        service loop.
        N)r�r�r�r�r�)rCr�r�s  �rGr�zControlMixin.serve_forever�s;���
	
�
������
�l�D�!�!�/�/�
�>�>�>�>�>ric���|���|j� tj|j��d|_|���|j���dS)zK
        Tell the server thread to stop, and wait for it to do so.
        N)�shutdownr�rr��server_closer�rLrms rGr�zControlMixin.stop�s_��	
�
�
�����<�#��(���6�6�6��D�L��������
�������ri)	rprqrrrsr�rrr�r�r�r�s@rGr�r�yso���������'�'�'����?�?�?�?�?�	�	�	�	�	�	�	rir�c�$�eZdZdZ		dd�Zd�ZdS)�TestHTTPServera�
    An HTTP server which is controllable using :class:`ControlMixin`.

    :param addr: A tuple with the IP address and port to listen on.
    :param handler: A handler callable which will be called with a
                    single parameter - the request - in order to
                    process the request.
    :param poll_interval: The polling interval in seconds.
    :param log: Pass ``True`` to enable log messages.
    r�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�formatrX�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_socketrBr1r�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)rprqrrrsr�r
rtrirGr�r��sI������	�	�58�#'�����&	�	�	�	�	rir�c�2��eZdZdZdZ		dd�Z�fd�Z�xZS)�
TestTCPServera�
    A TCP server which is controllable using :class:`ControlMixin`.

    :param addr: A tuple with the IP address and port to listen on.
    :param handler: A handler callable which will be called with a single
                    parameter - the request - in order to process the request.
    :param poll_interval: The polling interval in seconds.
    :bind_and_activate: If True (the default), binds the server and starts it
                        listening. If False, you need to call
                        :meth:`server_bind` and :meth:`server_activate` at
                        some later time before calling :meth:`start`, so that
                        the server will set up the socket and listen on it.
    Tr�c��Gd�dt��}tj||||��t�|||��dS)Nc��eZdZd�ZdS)�;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlerc�:�|j�|��dSr�r�rms rGr:zBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handle�rriN)rprqrrr:rtrirG�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)r�r�server_bindr�r�r�r�s �rGrzTestTCPServer.server_bind��=���
�m�T�"�"�.�.�0�0�0��K�+�+�-�-�a�0��	�	�	ri�r�T)rprqrrrs�allow_reuse_addressr�rr�r�s@rGrr�sd�����������47�#'�<�<�<�<�1�1�1�1�1�1�1�1�1rirc�8��eZdZdZ		dd�Z�fd�Z�fd�Z�xZS)�
TestUDPServera0
    A UDP server which is controllable using :class:`ControlMixin`.

    :param addr: A tuple with the IP address and port to listen on.
    :param handler: A handler callable which will be called with a
                    single parameter - the request - in order to
                    process the request.
    :param poll_interval: The polling interval for shutdown requests,
                          in seconds.
    :bind_and_activate: If True (the default), binds the server and
                        starts it listening. If False, you need to
                        call :meth:`server_bind` and
                        :meth:`server_activate` at some later time
                        before calling :meth:`start`, so that the server will
                        set up the socket and listen on it.
    r�Tc���G�fd�dt���tj||�|��t�|||��d|_dS)Nc�(���eZdZd�Z��fd�Z�xZS)�;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlerc�:�|j�|��dSr�r�rms rGr:zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handlerric����|j���}|rC	t�|�����dS#t$r|jjs�YdSwxYwdSr�)�wfilerWr��finishrBr�_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)rprqrrr:r$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)r�rrr�r�r�r�s �rGrzTestUDPServer.server_bindrric�d��tt|�����d|_dS)NT)r�rr�r%r�s �rGr�zTestUDPServer.server_closes*���
�m�T�"�"�/�/�1�1�1�����rir)rprqrrrsr�rr�r�r�s@rGrr�sw��������� 58�#'�����,1�1�1�1�1���������rir�AF_UNIXc��eZdZejZdS)�TestUnixStreamServerN�rprqrrr�r)�address_familyrtrirGr+r+#�����������rir+c��eZdZejZdS)�TestUnixDatagramServerNr,rtrirGr0r0&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�rrr�rr?�SMTPHandler�TIMEOUTrY�toaddrs�messagesr�ror��handledr:r�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�)rCrXs  rGr�zSMTPHandlerTest.process_messageIs2���
���T�"�"�"���������riN)rprqrrr�LONG_TIMEOUTr;rAr�rtrirGr2r2+s<�������"�G����0����rir2c�^�eZdZdZdZd�Zd�Zd�Zd�Ze	j
��d���ZdS)	�MemoryHandlerTestzTests for the MemoryHandler.r�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)zO
        Test that the flush-on-close configuration works as expected.
        rQrRrHFN)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)rk)rorprfrcrCrr)rCr+�threads   rGr:zaMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handle�s?��"�)��1B�C�C�C����#�#�F�+�+�+��������riN)rprqrrr�rfr:rtrirG�MockRaceConditionHandlerra�sA������
"�
"�
"�
.�
.�
.�
�
�
�
�
ririrHrlznot flushed�flushed)rKrer^r_rarLr�r�rcrr�)rCrirkrfrhs     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)rprqrrrsrVrHrRr\r^rr�rkrtrirGrFrFMs�������&�&�3��2�2�2� � � �%�%�%�8%�%�%�<1��0�2�2�5�5�3�2�5�5�5rirFc��eZdZdZd�ZdS)�ExceptionFormatterzA special exception formatter.c�"�d|djzS)Nz
Got a [%s]r)rp)rC�eis  rG�formatExceptionz"ExceptionFormatter.formatException�s���b��e�n�,�,riN)rprqrrrsrprtrirGrmrm�s)������(�(�-�-�-�-�-rirmc�,�eZdZdZejZdZdZdZdZ	e�
dd��Ze�
dd	��Zd
ezdzZ
e�
dd
��ZdZdZdZdZd�Zd�Zd�Zefd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d S)!�ConfigFileTestz5Reading logging config from a .ini-style config file.�^(\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��rrsr|�config2rms rG�test_config2_failurez#ConfigFileTest.test_config2_failure��%�����)�T�%6���E�E�E�E�Eric�R�|�t|j|j��dSr��rrsr|�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��	exceptionr1�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)r{rr�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��rJr5�remove��h1rIs  rG�cleanupz/ConfigFileTest.test_config8_ok.<locals>.cleanup:� ���H�H�J�J�J��I�b�M�M�M�M�Mriri�test_logging-X-rZ�\z\\)r3r)�check_no_resource_warningr3r4r5rJrE�replace�config8rr|r�rootr?r�)rCr�rHrIr�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)z.bpo-33802 defaults should not get interpolatedat
            [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(�defaultsN)rurv�stripr3r4r5r��encoderJrrwrx�dictr6)rC�inirHrIs    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)!rprqrrrsr	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�rtrirGrrrr�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�8�eZdZdZeZdZd�Zd�Zd�Z	d�Z
d�ZdS)	�SocketHandlerTestzTest for SocketHandler objects.�r0rc���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)ztSet up a TCP server to receive log messages, and a SocketHandler
        pointing to that server's address and port.N�{�G�z�?r0rr)rrHr�	sock_hdlr�server_exception�server_class�address�
handle_socketrrrBr�r�rr?�
SocketHandler�
isinstance�server_addressr^r��
log_outputr0rKrAro�	Semaphorer>�rCrr�hclss    rGrHzSocketHandlerTest.setUp�s^��	���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
�8B�B
c�8�	|jr8|j�|j��|j���|jr|j���t�|��dS#t�|��wxYw)zShutdown the TCP server.N)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��	retryTimera)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)rprqrrrsrr�r�rHrRr�r
rrtrirGr�r��sq������*�)� �L��G�.�.�.�4	$�	$�	$�
#�
#�
#�	:�	:�	:�+�+�+�+�+rir�c��tjdd���\}}tj|��tj|��|S)Nr�z.sockr�)r3r4r5rJr�)rHrIs  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�:�eZdZdZeed��reZd�Zd�Z	dS)�UnixSocketHandlerTestz)Test for SocketHandler with unix sockets.r)c�`�t��|_t�|��dSr�)rr�r�rHrms rGrHzUnixSocketHandlerTest.setUp�)��.�0�0�������%�%�%�%�%ric�l�t�|��tj|j��dSr�)r�rRrr6r�rms rGrRzUnixSocketHandlerTest.tearDown
�/���"�"�4�(�(�(�����&�&�&�&�&riN)
rprqrrrs�hasattrr�r+r�rHrRrtrirGrrsS������4�3��w�v�y�!�!�,�+��&�&�&�
'�'�'�'�'rirc�2�eZdZdZeZdZd�Zd�Zd�Z	d�Z
dS)�DatagramHandlerTestzTest for DatagramHandler.r�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��|_dS)zvSet up a UDP server to receive log messages, and a DatagramHandler
        pointing to that server's address and port.Nr�r0rr)rrHrr�r�r�r��handle_datagramrrrBr�r�rr?�DatagramHandlerr�r�r^r�r�r0rKrAror�r>r�s    rGrHzDatagramHandlerTest.setUps[��	���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�8�	|jr|j���|jr8|j�|j��|j���t�|��dS#t�|��wxYw)zShutdown the UDP server.N)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�r�rr�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  rGr
zDatagramHandlerTest.test_outputGs���� �	1��M�M�$�/�0�0�0��"�5�)�)�����V���������������������V����������������.�9�9�9�9�9riN)rprqrrrsrr�r�rHrRrr
rtrirGrrsb������$�#� �L��G�)�)�)�4	$�	$�	$����
:�
:�
:�
:�
:rirc�:�eZdZdZeed��reZd�Zd�Z	dS)�UnixDatagramHandlerTestz,Test for DatagramHandler using Unix sockets.r)c�`�t��|_t�|��dSr�)rr�rrHrms rGrHzUnixDatagramHandlerTest.setUp[s)��.�0�0����!�!�$�'�'�'�'�'ric�l�t�|��tj|j��dSr�)rrRrr6r�rms rGrRz UnixDatagramHandlerTest.tearDown`s/���$�$�T�*�*�*�����&�&�&�&�&riN�
rprqrrrsrr�r0r�rHrRrtrirGr%r%SsS������7�6��w�v�y�!�!�.�-��(�(�(�
'�'�'�'�'rir%c�8�eZdZdZeZdZd�Zd�Zd�Z	d�Z
d�ZdS)	�SysLogHandlerTestz!Test for SysLogHandler using UDP.r�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)ztSet up a UDP server to receive log messages, and a SysLogHandler
        pointing to that server's address and port.Nr�rri)rrHr�sl_hdlrr�r�r�rrrrBr�r�rr?r>r�r�r^r�r�r0rKrAror�r>r�s    rGrHzSysLogHandlerTest.setUpmsd��	���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�8�	|jr|j���|jr8|j�|j��|j���t�|��dS#t�|��wxYw)zShutdown the server.N)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  rGr
zSysLogHandlerTest.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)Nr0r1g�������?r2)
rrr,rJr>rLr�r�rYr�r�s  rG�test_udp_reconnectionz'SysLogHandlerTest.test_udp_reconnection�s����"�5�)�)�������������������Y��������#���������*@�A�A�A�A�AriN)rprqrrrsrr�r�rHrRrr
r6rtrirGr*r*dsy������,�+� �L��G�)�)�)�4	$�	$�	$����I�I�I�&B�B�B�B�Brir*c�:�eZdZdZeed��reZd�Zd�Z	dS)�UnixSysLogHandlerTestz)Test for SysLogHandler with Unix sockets.r)c�`�t��|_t�|��dSr�)rr�r*rHrms rGrHzUnixSysLogHandlerTest.setUp�rric�l�t�|��tj|j��dSr�)r*rRrr6r�rms rGrRzUnixSysLogHandlerTest.tearDown�rriNr(rtrirGr8r8�sS������4�3��w�v�y�!�!�.�-��&�&�&�
'�'�'�'�'rir8z$IPv6 support required for this test.c�4��eZdZdZeZdZ�fd�Z�fd�Z�xZ	S)�IPv6SysLogHandlerTestz&Test for SysLogHandler with IPv6 host.)z::1rc���tj|j_t	t
|�����dSr�)r��AF_INET6r�r-r�r<rHr�s �rGrHzIPv6SysLogHandlerTest.setUp�s3���+1�?���(�
�#�T�*�*�0�0�2�2�2�2�2ric���tj|j_t	t
|�����dSr�)r��AF_INETr�r-r�r<rRr�s �rGrRzIPv6SysLogHandlerTest.tearDown�s3���+1�>���(�
�#�T�*�*�3�3�5�5�5�5�5ri)
rprqrrrsrr�r�rHrRr�r�s@rGr<r<�sc�������1�0� �L��G�3�3�3�3�3�6�6�6�6�6�6�6�6�6rir<c�$�eZdZdZd�Zd�Zd�ZdS)�HTTPHandlerTestzTest for HTTPHandler.c�j�t�|��tj��|_dS)ztSet up an HTTP server to receive log messages, and a HTTPHandler
        pointing to that server's address and port.N)rrHror�r>rms rGrHzHTTPHandlerTest.setUp�s)��	���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�httprrhr�zkeycert.pem)�cafiler�)rzlocalhost:%dz/frob)�foo�bar)�secure�context�credentials)r-r.r1r-r&rE�funcNamer
r+)'rrr0rKr?�sslr5r<�dirname�__file__r��
SSLContext�PROTOCOL_TLS_SERVER�load_cert_chain�create_default_context�ImportErrorr�rOrrrr�r��server_portrD�h_hdlrrGrArKr>rLr�rYrFr�queryrK�decoder�rJ)rCr�r0rUr�rY�here�localhost_certrrVr�host�
secure_clientrKr+�ds                rGr
zHTTPHandlerTest.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)rprqrrrsrHrOr
rtrirGrBrB�sI������ ��)�)�)����5 �5 �5 �5 �5 rirBc�*�eZdZdZd�Zd�Zd�Zd�ZdS)�
MemoryTestz*Test memory persistence of logger objects.c�H�t�|��i|_dS)z8Create a dict to remember potentially destroyed objects.N)rrH�
_survivorsrms rGrHzMemoryTest.setUp&s�����t��������ric��|D]<}t|��t|��f}tj|��|j|<�=dS)zKWatch the given objects for survival, by creating weakrefs to
        them.N)�idr��weakref�refrm)rCrXr�keys    rG�_watch_for_survivalzMemoryTest._watch_for_survival+sL���	4�	4�C��S�'�'�4��9�9�$�C�#*�;�s�#3�#3�D�O�C� � �	4�	4ric�.�tj��g}|j���D]'\\}}}|���|�|���(|r<|�dt
|��d�|��fz��dSdS)z;Assert that all objects watched for survival have survived.Nz;%d objects should have survived but have been destroyed: %sz, )�gc�collectrmr�rCr]rZr�)rC�dead�id_�repr_rqs     rG�_assertTruesurvivalzMemoryTest._assertTruesurvival2s���	�
������!%��!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)NrS)rSr7r~)rSr7r)r0r6rr�rrsr7r�rnrhrz)rCrSrTs   rG�test_persistent_loggersz"MemoryTest.test_persistent_loggers>s(��	
��!�!�'�,�/�/�/����&�&��� � ��%�%�%����W�]�#�#�#�����t�0�0�2�2�3�3�3��	�	�$�#�#�%�%�&�&�&����!�
�	�	�	�
�� � �"�"�"����&�&���	�	�$�#�#�%�%�&�&�&����!�!�
�	�	�	�	�	riN)rprqrrrsrHrsrzr|rtrirGrkrk"sY������4�4����
4�4�4�
N�
N�
N�����rirkc��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�testriztest_logging-1-ufoo€r&r~)rrr3r4r5rJrRrAr�rKr�rYr`�rstripr<�isfiler�)rCr�rHrIr�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�rtrirGr~r~Vs7���������4L�L�L�L�Lrir~c��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�rtrirGr�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�rt)rC�fmtr�s   rGr�zmyCustomFormatter.__init__�s���rir�)rprqrrr�rtrirGr�r��s(������
�
�
�
�
�
rir�c�(�tj��Sr�)rr8rtrirG�handlerFuncr��s��� �"�"�"ric��eZdZdS)�
CustomHandlerN�rprqrrrtrirGr�r����������Drir�c
�t�eZdZdZejZdZddddiidddd	d
d�iddgd
�d�Zddddiidddd	d
d�idddgd
�iddid�Zddddiidddd	d
d�idddiiddgd
�d�Z	ddddiidddd	dd�idddgd
�iddid�Z
ddddiiddddd
d�idddgd
�iddid�Zddddiidddd	d
d�idddgd
�iddid�Zddddiidddd	d
d�idddgd
�iddid�Z
ddedzdd�idddd	d
d�id	dgd
�d�Zdedd�edzdd�edd�d�ddd	d
d�deid�d	dgd
�d�Zddddiidedzdd	d
d�idddgd
�iddid�Zddddiidedzdd	d
dd �idddgd
�iddid�Zddddiidddd	d
d�id!ddgd
�iddid�Zdd"dddiidddd	d
d�iddgd
�id#�ddid$�Zdd%dddiidddd	d
d�iddgd
�id#�ddid$�Zddddiiddddd
d�idddgd
�idd	id�Zdd%dddiiddd&iid'�Zdd%ddd&iiddd&iid'�Zddddiid(d)diidddd	d
d(gd*�iddd(gd+�iddgd
�d,�Zddddiidddd	d
d�id-dd.idddgd
�iddid/�Zdddiidddd	d
d�id-dd.idddgd
�iddid0�Zd1dddiidddd	d
d�id-dd.idddgd
�iddid/�Zddddiidddd	d
d2d3d4�d5�iddgd
�d�Zdd6d7d8d9�iddd6d:�d;d<d6d=dd>�d?�d@ddAgdBdC�idD�Z ddedzdd"dE�idddd	d
d�idFddgdBdC�idD�Z!ddedzdd"dG�idddd	d
d�idFddgdBdC�idD�Z"ddedHzdd"dG�idddd	d
d�idFddgdBdC�idD�Z#ddedd"dE�idddd	d
d�idFddgdBdC�idD�Z$dI�Z%dJ�Z&efdK�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\�Z8d]�Z9dqd_�Z:e;j<��d`���Z=e;j<��da���Z>e;j<��db���Z?dc�Z@dd�ZAde�ZBdf�ZCdg�ZDdh�ZEdi�ZFdj�ZGdk�ZHdl�ZIdm�ZJdn�ZKdo�ZLdp�ZMd^S)r�ConfigDictTestz)Reading logging config from a dictionary.rsrk�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�rT�!
)rS�
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�rkr�)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�)rrsr|�config2arms rG�test_config2a_failurez$ConfigDictTest.test_config2a_failure��%�����)�T�%6��
�F�F�F�F�Fric�R�|�t|j|j��dSr�)rrsr|�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�r1r�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�r1r�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�)rrsr|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�rrr��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�rrr�)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�rr�)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�)rrsr|�config12rms rG�test_config12_failurez$ConfigDictTest.test_config12_failure��%�����)�T�%6��
�F�F�F�F�Fric�R�|�t|j|j��dSr�)rrsr|�config13rms rG�test_config13_failurez$ConfigDictTest.test_config13_failure�rric��tj��5}|�|j��tjd}|�|jd��|�|jd��t	j	d��|�
|����d����ddd��dS#1swxYwYdS)Nr�rTr��Exclamationz
Exclamation!
)
rr�r|�config14rr!rYrSr�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�ririr�rkr{zlogging.FileHandlerr&)r��filenamer(r?�r�r?r�r)
r�r3r4r5rJr|rr�r?r�)rCr�rHrIrwr�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@r0r�)r�rrw�listenrrr�r�r�rLr�r@�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�rt��stuffs rG�verify_failz6ConfigDictTest.test_listen_verify.<locals>.verify_fail�s���4ric��|ddd�S)Nr*rtr$s rG�verify_reversez9ConfigDictTest.test_listen_verify.<locals>.verify_reverse�s�����2��;�rir�rr�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�)rrCr|�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�rkrr��_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��dSr5)r|� custom_formatter_class_validate2rrr?r�r�rmr7s  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)	r6r"r|rrr?r�r�rmr2s   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�)rrCr|� 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�)rrCr|�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��)rO�b�crrE)rir�)�g)rQrX�jr��lr�r[)�ozcfg://alist�p)�atuple�alist�adict�nest1�nest2�nest3zcfg://atuple[1]r�zcfg://alist[1]rFzcfg://nest1[1][0]rQzcfg://nest2[1][1]z
cfg://adict.dzcfg://adict[f]zcfg://nest3rkzcfg://nosuchzcfg://!zcfg://adict[2])	rrw�BaseConfiguratorrY�convert�popr�KeyErrorrC)rCri�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�)r�r��resource)rCr^rXrzr�rZs    ��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^�typer�r)rCr�r�s  �rGrz6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emitx
s7����
�
�6�$�-�"4�6�6�6�
�
��w�w�|�|�F�+�+�+rir�)r�rZs@�rG�	MyHandlerr\s
sW��������
5�
5�
5�
5�
5�
5�
,�
,�
,�
,�
,�
,�
,�
,�
,rirc�Resourcerb�labels�my_typerO)rbrerk�	myhandler)r�r^r�r�r
zsome logzsome log my_type
)
�collectionsrZrr8rr�r|r�rYrW)rCrcrdr^rwr�rZs      @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��d�}|�dd|gd�d���tj��jd|usJ�gtj��_dS)Nc��dSrrt)rfs rGr�zAConfigDictTest.test_config_callable_filter_works.<locals>.filter_�
s���1rirkr7r��r�r�r�r|rrr��rCr�s  rG�!test_config_callable_filter_worksz0ConfigDictTest.test_config_callable_filter_works�
s}��	�	�	�����G��	�"J�"J�
�
�	�	�	�� �"�"�*�1�-��8�8�8�8�&(�����#�#�#ric���tjd��}|�dd|gd�d���tj��jd|usJ�gtj��_dS)Nr�rkr7r�rlr)rr�r|rr�rns  rG�test_config_filter_worksz'ConfigDictTest.test_config_filter_works�
s}���.��-�-������G��	�"J�"J�
�
�	�	�	�� �"�"�*�1�-��8�8�8�8�&(�����#�#�#ric���Gd�d��}|��}|�dd|gd�d���tj��jd|usJ�gtj��_dS)Nc��eZdZd�ZdS)�BConfigDictTest.test_config_filter_method_works.<locals>.FakeFilterc��dSrrt)rCrfs  rGr�zIConfigDictTest.test_config_filter_method_works.<locals>.FakeFilter.filter�
s���qriN)rprqrrr�rtrirG�
FakeFilterrt�
s#������
�
�
�
�
rirvrkr7r�rlrrm)rCrvr�s   rG�test_config_filter_method_worksz.ConfigDictTest.test_config_filter_method_works�
s���	�	�	�	�	�	�	�	��*�,�,������G��	�"J�"J�
�
�	�	�	�� �"�"�*�1�-��8�8�8�8�&(�����#�#�#ric	��Gd�d��}dd|��fD]*}|�t|jdd|gd�d����+dS)Nc��eZdZdS)�;ConfigDictTest.test_invalid_type_raises.<locals>.NotAFilterNr�rtrirG�
NotAFilterrz�
s�������rir{rkr7r�rl)rrCr|)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�rOr�)r�r�r?r�r�r�)rrr;rr|rB)rCrwr�s   rG�
test_90195zConfigDictTest.test_90195�
s���(-��$�4�����$�!*�����
�
�� �"�3�'�'�������)�)�)����&�!�!�!������)�)�)����9�a�.�)�)�)������(�(�(��-�.����&�!�!�!������)�)�)�)�)rir�)Nrprqrrrsr	r�rVr�r�r�r�r�r�r�r�rmr�r�r�r�r�r�r�r�r�r�r�r�r�rrrr,r6r:r?rBr|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr	rrr�requires_working_socketrr!r*r-r3r8r;r=r@rCrXrirorqrwr|rrtrirGr�r��s�������3�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+rX�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�setLoggerClassrHrr�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�rtrirGr�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�rtrirGr�r��
s#������
�
�
�
�
rir�c��eZdZdS)�DerivedLogRecordNr�rtrirGr�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�)rW)rCrWs  rGr�z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__s
������ric�n�t|��}||jurd|�d|j��}t|���dS)NzUnexpected LogRecord type z, expected T)rbrWr�)rCr�r�r+s    rGr�z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filtersC����L�L���D�H�$�$�$�IJ��� �H�H�&�C�#�C�.�.�(��triN)rprqrrr�r�rtrirG�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�rtrirGr�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+rX)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~rT)�respect_handler_levelr�r�r�)r
r�Matcherrr?r�r�rrr�r�rnr�r�r�rB�matchesr�r}r{rJr6r;)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�r9rr�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�rrr�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�rtrirGr�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���eZdZdZdZed���Zeje	j
jd��d���Zeje	j
jd��d���Z
ed���Zd�Zd	�Zd
S)�QueueListenerTestz~
        Tests based on patch submitted for issue #27930. Ensure that
        QueueListener handles all log messages.
        �c��tjd|z��}|�tj��tj�|��}|�|��tj�|��}|���|�	d��|�	d��|�	d��|�	d��|�	d��|�
��|�|��|���dS)z�
            Creates a logger with a QueueHandler that logs to a queue read by a
            QueueListener. Starts the listener, logs five messages, and stops
            the listener.
            ztest_logger_with_id_%s�one�two�three�four�fiveN)
rrr6r7r?r�rAr�rrr�r�rKrJ)�	log_queuer4r�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�Orir:c��t|j��D]B}tj��}|�||����d|�����C|�|jd|jzd��dS�Nrfr�z&correct number of handled log messages)r^�repeatr�r�r�rorY�
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�rorJr�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)a
            Five messages are logged then the QueueListener is stopped. This
            test then gets everything off the queue. Failure of this test
            indicates that messages were not registered on the queue until
            _after_ the QueueListener stopped.
            rfz&Found unexpected messages in queue: %sc�T�g|]%}t|tj��r|jn|��&Srt)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�*+�%<�%<�%<riN)rr�r^r�r�r�r�ro�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�rrr�rrC�	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)rprqrrrsr��staticmethodr�r�r�rr?r�r�r�r�r�r�rtrirGr�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)Nrrtrs  rG�tznamez
UTC.tzname�s���uriN)rprqrrr�dstrrtrirGrr�s9����������C�����rirc��eZdZd�ZdS)�AssertErrorMessagec��	|jdg|�Ri|��dS#|$r.}|�|t|����Yd}~dSd}~wwxYw)Nrt)rrYrV)rCr�r�rXrzr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)rprqrrr
rtrirGrr�s#������.�.�.�.�.rirc�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+rX�customi�)rr7r5r<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:rYrrrCr;�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 $.rSz	${asctime)rr:rY�_fmtrrCr
�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:rrYrrrC)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)rrCrr: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]��rEr�{�%(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_formatrtrirG�NoMsecFormatterrL
s������"&��"5���rirOr9r]r:r;rErr<z21/04/1993 08:03:00)rr:rr>r?r_r@rArBrCrErFrYrG)rCrOr�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_rar�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.r4r7rIrPrSrtrirGrrs�������
�
�
�"-�-�-�-�
&�
&�
&�&�&�&� &�&�&�*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)]rWrXs  rG�formatFooterz#TestBufferingFormatter.formatFooter%r[riN)rprqrrrZr]rtrirGrUrU!s2������&�&�&�&�&�&�&�&rirUc� �eZdZd�Zd�Zd�ZdS)�BufferingFormatterTestc�h�tjddi��tjddi��g|_dS)Nr+r�r�)rr�rYrms rGrHzBufferingFormatterTest.setUp)s3���!�5�%�.�1�1��!�5�%�.�1�1�
����ric���tj��}|�d|�g����|�d|�|j����dS)Nr�onetwo)r�BufferingFormatterrYrrYr-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)])rUrYrrYrr:)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)rprqrrrHrdrgrtrirGr_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�rKrJrYrB�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�rtrirGriri;s(������A�A�A�A�Ariric��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)rprqrrrvrtrirGrprpQs#������#;�#;�#;�#;�#;rirpc��eZdZd�Zd�ZdS)�FakeHandlerc
�\�dD](}t|||�|||�����)dS)N)r��flushrJr�)�setattr�record_call)rC�
identifier�calledrKs    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)r~r}�method_names���rG�innerz&FakeHandler.record_call.<locals>.inners+����M�M�)�*�*�:�{�C�C�D�D�D�D�Drirt)rCr}r�r~r�s ``` rGr|zFakeHandler.record_call~s4�����	E�	E�	E�	E�	E�	E�	E��riN)rprqrrr�r|rtrirGrxrxxs5������P�P�P�����rirxc�$��eZdZ�fd�Zd�Z�xZS)rmc�V��tt|��j|i|��g|_dSr�)r�rmr�rY)rCrXrzr�s   �rGr�zRecordingHandler.__init__�s1���.����%�%�.��?��?�?�?�����ric�:�|j�|��dS)z&Keep track of all the emitted records.N)rYrCr�s  rGr:zRecordingHandler.handle�s������F�#�#�#�#�#ri)rprqrrr�r:r�r�s@rGrmrm�sG������������$�$�$�$�$�$�$rirmc�|��eZdZdZ�fd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Z�xZS)�ShutdownTestz#Test suite for the shutdown method.c���tt|�����g|_tj}|�ttd|��dS)Nr�)r�r�rHr~rr�r�r{)rC�raise_exceptionsr�s  �rGrHzShutdownTest.setUp�sO���
�l�D�!�!�'�'�)�)�)����"�2�������*;�=M�N�N�N�N�Nric����fd�}|S)Nc�������r�rt)r�s�rGr�z'ShutdownTest.raise_error.<locals>.inner�s����%�'�'�Mrirt)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)	rxr~r�rrprqr�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*)
rxr~r{r�rrprqr�r�rY)rCrKr�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�rBrms rG�test_with_ioerror_in_acquirez)ShutdownTest.test_with_ioerror_in_acquire�s���)�)�)�W�=�=�=�=�=ric�<�|�dt��dS�Nrzr�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�rCrms 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)NFrzr�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)NTrzr�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)rprqrrrsrHr�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�h�eZdZdZd�Zdd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�ZdS)�ModuleLevelMiscTestz)Test suite for some module level methods.c��tjjj}|�|d��|�tj|��tjd��|�tjjjd��|�ttjd��Gd�d��}|�ttj|����tjd��tj��|�tjjjtj	��dS)Nr�S�
doesnotexistsc��eZdZdS)�;ModuleLevelMiscTest.test_disable.<locals>._NotAnIntOrStringNr�rtrirG�_NotAnIntOrStringr����������Drir��WARN)
rr�rrNrYr�rrCr�r{)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�)rO�kwr~s  �rG�<lambda>z/ModuleLevelMiscTest._test_log.<locals>.<lambda>s���v�}�}�a��W�'=�'=�riztest me: %rrkr)
rr�rrmr�rAr,rYrZrY�
getMessage�upperr�)rCrKr��	recording�
log_methodr��expected_levelr~s       @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�rtrirGr�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)r�r�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)rurvrrdr��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�r6rurvrr�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)rurvrrdrRrYr�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�)rprqrrrsr�r�r�r�r�r�r�r�r�r�r�rrr
rtrirGr�r��s�������3�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)rmrrrAr�r�rYrXrYr�rKrJ)rCrQr�ris    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_itemr1�modulesrr)	rrrr�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�rj)rr�r1rrYrrr�rr#r��Pipe�Processrrr��assertNotEqualr�)	rC�multiprocessing_imported�LOG_MULTI_PROCESSINGr�r"r��parent_conn�
child_connrLs	         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�)	rprqrrrrr�r#r-r9rtrirGrr�sq������)�)�)�	�	�	������\��0#'�#'�#'�J=�=�=�=�=rirc����eZdZdZ�fd�Z�fd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zdd�Zd�Zd�Zd�Zd�Zd�Zd�Z�xZS)�BasicConfigTestz#Test suite for logging.basicConfig.c�|��tt|�����tjj|_tj���|_tj	dd�|_
tjj|_|�
|j��gtj_dSr�)r�r;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?rKrJr�r;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�r8r5r1r�r�r0r,�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�r1r�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�rDrErrFrGr�s  rG�test_stringtemplatestylez(BasicConfigTest.test_stringtemplatestyle@rIrJc��d�}tjdd���|�ttjj��d��tjjd}|�|tj��tjddd���}|�|jj	|jj	��|�|jj
|jj
��|�|||d��dS)	Nc�~�|���|���tj|��dSr�r��r��h2rIs   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(rkrrOr~)rr�rYrZr�r?r�rRr5�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�rOs   rGr�z.BasicConfigTest.test_filemode.<locals>.cleanup\rQrirR�wb�r�filemoder)	rr�r�r?rRrYr5rSr�rTs    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)Nrrkr)
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�rYr0r,�rCr�s  rG�test_formatzBasicConfigTest.test_formatrsL����#>�?�?�?�?��L�)�!�,�6�	�����)�.�0K�L�L�L�L�Lric��tjd���tjjdj}|�|jd��dS)NrT)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�r0r1r_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)NrR)rr5)rr?)r5r?)�loglevelrOrY)rrr8r1r�rCr�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)rr8r1r�r:r=r�r�r�r?r/r�)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&rRr��%(message)s�rr(�errorsrr�rkr�.The Øresund Bridge joins Copenhagen to Malmör~�rr�r7rYrZr�r?r�rRr(r�rJr�r`r�r5r��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�rR�ignorerwrxrkrrzr&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���r~c���	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�rRrw)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�rRr(ryr�rJr�r`r�r5r�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�rRrwrxrkrc�z��tj��\}}}��t|����dSr�)r1r�rCrV)r�rfr�r�s   �rG�dummy_handle_errorzEBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_errors2����,�.�.���1�a����s�1�v�v�&�&�&�&�&rirzz:'ascii' codec can't encode character '\xd8' in position 4:r&r~r)rr�r7rYrZr�r?r�rRr(r�ryr�r�rBr�rJr�r`r�r5r�)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)rOr�rhr~�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 mert)rr�rr�r,rY)rCrKr�r�r�r~r�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�) rprqrrrsrHrRr�rBrHrLrUr[r]r`rbrdrirlrnrur}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�)r�r�rHrr$rmr�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�rYrZrYr�rr}r+rXr�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�rYr�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�rYrZrYr�rr{r+rX)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;r7s  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|��|fSr`�r�)rCr+rzs   rGr1z6LoggerAdapterTest.test_nested.<locals>.Adapter.process�s���+�-�-��-�-�v�5�5riN)rprqrrr�r1rtrirGr�r��s(�������F�
6�
6�
6�
6�
6rir�zAdapters can be nested, yo.r��AdapterAdapterrkrzAdapter AdapterAdapter )rr�r�r�rYr�r�r{r�rZrYr�r+rXrr�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)
r�r�rHrmr�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)r
r�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�rYrZrYr�rr}r+rXr�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{r~s  �rGr�z=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>�s���f�m�m�D�M�M�O�O�&D�&D�riTr�rkrlr)rr�r�	tracebackr��
findCallerrYrZ)rCr~s @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�)�
stacklevelrt)�	the_level�triggers��rG�	innermostz>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermost�s����G�F�y�1�1�1�1�1�1ric������dSr�rt)r�s�rGr�z:LoggerTest.test_find_caller_with_stacklevel.<locals>.inner�s����I�K�K�K�K�Kric������dSr�rt)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�rYrYrXrr�rrrArK)	rCr�rYrr0r�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�rH�
some value�r��sinfo)	r�_logRecordFactoryr^�__dict__�keysrrVr��
makeRecord)
rCrEr�rI�lnor+rXr�rr��rvrrr�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�rIr�r+rXr�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;r7s  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�rS�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�rSr�zbaz.bar)r^r��HIGHEST_PROTOCOLrrrr�r�)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;r7r{r�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�*�eZdZdZd�Zd�Zd�Zd�ZdS)�BaseFileTestz1Base class for handler tests that write log filesc��t�|��tjdd��\}|_tj|��g|_dS)Nriztest_logging-2-)rrHr3r4rIr5rJ�rmfiles)rCrHs  rGrHzBaseFileTest.setUp�sE�����t�����&�v�/@�A�A���D�G�
����������ric���|jD]}tj|���tj�|j��rtj|j��t�|��dSr�)rr5r6r<r=rIrrR)rCrIs  rGrRzBaseFileTest.tearDown�sf���,�	�	�B��I�b�M�M�M�M�
�7�>�>�$�'�"�"�	��I�d�g�������$�����ric��|�tj�|��d|z���|j�|��dS)z7Assert a log file is there and register it for deletionzLog file %r does not exist�r+N)rBr5r<r=rrC)rCrs  rG�
assertLogFilezBaseFileTest.assertLogFile�sT���������x�0�0�8�8�C�	�	E�	E�	E�����H�%�%�%�%�%ric
�p�tjdtjdd|���ddd��S)Nr[rLrk)rr�r7rnrms rG�next_reczBaseFileTest.next_rec�s9��� ��g�m�S�!�!%�!2�!2�!4�!4�d�D�$�H�H�	HriN)rprqrrrsrHrRrrrtrirGrr�s[������7�7���� � � �&�&�&�H�H�H�H�Hrirc��eZdZd�Zd�ZdS)�FileHandlerTestc�*�tj|j��tj|jdd���}|�|j��|�tj�	|j����|�
tji����|�|j��|�
tj�	|j����|���dS)Nr&Tr')r5r6rIrrRr�r5r;r<r=r:r�r/rBrJ)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&rN)r(rSrwr|)r5r6rIrrRr=r:rrrJr�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)rprqrrr
rrtrirGr
r
�s2���������	5�	5�	5�	5�	5rir
c��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?rSrIr;�shouldRolloverrJr5�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?rSrIrBrrrJrs  rG�test_should_rolloverz,RotatingFileHandlerTest.test_should_rollover�s[��
�
�
1�
1�$�'�G�VW�
1�
X�
X������)�)�$�-�-�/�/�:�:�;�;�;�
���
�
�
�
�
ric��tj�|jd���}|�|�����|�|j��|���dS)Nr&r~)rr?rSrIrrrrJrs  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�.testrtr�s rG�namerz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namer�s���'�>�!rir&r�rk�r(�backupCountr�.1�.2�.3)
rr?rSrIr#rrrr;r5r<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!rt)rCrEs  rGr#z`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namer�s���g�~�%ric�x�tj�|��rtj||dz��dSdS)N�.rotated)r5r<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#r2rtrirG�HandlerWithNamerAndRotatorr,�s2������
&�
&�
&�
:�
:�
:�
:�
:rir3r&r�rkr$r"r&r/)rr?rSrIrYr#rrrr;r5r<r=rJ)rCr3rs   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.gzrtr�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�rbrTrX)r�r`�zlib�compressr�r5r�)r0r1�sfr��
compressed�dfs      rGr2z5RotatingFileHandlerTest.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&r8r�r'r()rr?rSrIr2r#rrrr5�linesepr�r`r9�
decompressrYrdr+r;r<r=rJ)rCr#r2r�m1�m2rI�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)r4�
requires_zlibrCrtrirGrr�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?rTr5rr_rar�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)NrIr&rkrJr=r+ztesting - initialrKztesting - after delayFi,��secondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondsc�>��g|]}|�����|��Srt)r�)rWr�rIs  �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?rTrIr:r=r�rrr_rarJr>rr^�	timedelta�strftimer5r<r=rrCr��listdirrtr1r�r�r�r`rB)rCrr�r r!�foundr�GO_BACK�secs�prevr+�dn�filesr�r<�tfrIs                @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)rrCrr?rTrI)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?rTrI�computeRolloverrYrJ)rC�currentTimergrrds     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�Qrbr�r&zW%drkTrdrhzfailed in timezone: %dzlocal vars: %si�:	ri)rHr_r>rE�tm_wdayr^rr?rTrIrjrt�timezone�localsrYrJ)	rCrk�todayrg�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�rM)�a.bza.b.czd.ezd.e.fz%s.logrgroT)rerfr%r)rxz.log.c�4�|�dd��dzS)Nrir)r�r�s rGr�zKTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.<lambda>�s��T�\�\�&�"�-E�-E��-N�rir�rirXrEz%s.log.r�)r3�mkdtempr��shutil�rmtreer>rr^rCrRrQr5r<r�rr?rTr�r#r��	enumerate�getFilesToDeleterYrZr�rBr@�isdigit)rC�wd�timesrrX�prefixesrY�rotatorsr�rLr2r�rIr��
candidatesrGris                 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�rrDrr[r`rlrvr�rtrirGrGrG5s��������X�_�W�_�&E�F�F���G�F��((�((�((�TB�B�B�
�
�
� &�&�&�P.C�.C�.C�.C�.CrirGc�P�tjdi|��tjd���zS)NrkrMrt)r>rQ)r�s rGrVrV�s,����#�#��#�#�x�'9�!�'D�'D�'D�D�Dri)rIrk)�M�<)�Hi)�Drn)rcrn�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(rerfr%r?grcrEr]r�r�zt: z (�)rPzcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rr?rTrIrjr?r_rE�	localtime�	_MIDNIGHTrtr1r�rsrYrJ)
rCre�exprrkrdr��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�r:rJ�
assertLess�EVENTLOG_BACKWARDS_READ�EVENTLOG_SEQUENTIAL_READ�ReadEventLog�
SourceName�win32evtlogutil�SafeFormatMessagerB)rC�logtype�elh�num_recsrQrr��flagsrTrU�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)rprqrrrArtrirGr�r�s#������(�(�(�(�(rir�c��eZdZd�ZdS)�MiscTestCasec�F�hd�}tj|t|���dS)N>
r�r��Filtererro�
RootLoggerr2�PlaceHolderrA�currentframer3�StrFormatStylerr1)�not_exported)r�check__all__r)rCr�s  rG�test__all__zMiscTestCase.test__all__1s3������
	��T�7��F�F�F�F�F�FriN)rprqrrr�rtrirGr�r�0s(������G�G�G�G�Grir�c�T�tjtjdd����dS)N�LC_ALLr)r��enterModuleContextr�run_with_localertrirG�setUpModuler�=s&����� 7��"� E� E�F�F�F�F�Fri�__main__r�)�rsr�logging.handlers�logging.configr�r�r"r>rPr�r3rurr5r�rbrTr{r�r�r1r3�test.support.script_helperrrr�r�test.supportrrrr	�test.support.logging_helperr
ruror_r�r�rp�http.serverrr�urllib.parser
r�socketserverrrrr�import_deprecatedrrr�r�r�r`r9�TestCaserrvr��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*r8�IPV6_ENABLEDr<rBrkr~r�r�r�r�r�r�r�r�r�r�r�r�r?r��
unittest.mockr�r�rQr�tzinforr?rrrcrUr_rirprxr�rmr�r�rr;r�r�rr
rrGrVrer�r�r{r�r�r�rp�mainrtrirG�<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%�%C3�2C3�7C<�<D�D