Your IP : 216.73.216.196


Current Path : /opt/alt/python310/lib64/python3.10/test/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/test/__pycache__/test_logging.cpython-310.opt-2.pyc

o

0�iQ�@s�	ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZddlmZddlmZddlmZddlm Z ddl!Z!ddl"Z"ddl#Z#ddl$Z$ddl%Z%ddl&Z&dd	l'm(Z(m)Z)dd
l*m+Z+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1e%�2��e%�3de4�ddl5Z5ddl6Z6Wd�n1s�wYzddl7Z7ddl8Z8ddl9Z9Wne:y�dZ7Z8Z9Ynwzddl;Z;Wn
e:�yYnwGd
d�de$j<�Z=Gdd�de=�Z>Gdd�de=�Z?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIeJeIe@d�ZKe@deAdeBd eCd!eDd"eEd#eFd$eGd%eHd&eId'i
ZLGd(d)�d)ejM�ZNGd*d+�d+ejM�ZOGd,d-�d-e=�ZPGd.d/�d/e=�ZQGd0d1�d1eR�ZSGd2d3�d3ejT�ZUGd4d5�d5eR�ZVGd6d7�d7e=�ZWGd8d9�d9e6jX�ZYGd:d;�d;eR�ZZGd<d=�d=eZe(�Z[Gd>d?�d?eZe0�Z\Gd@dA�dAeZe.�Z]e^edB��r�GdCdD�dDe\�Z_GdEdF�dFe]�Z`GdGdH�dHe=�ZaGdIdJ�dJe=�ZbGdKdL�dLejc�ZdGdMdN�dNe=�ZeGdOdP�dPe=�ZfdQdR�Zge$�he^edB�dS�GdTdU�dUef��ZiGdVdW�dWe=�Zje$�he^edB�dS�GdXdY�dYej��ZkGdZd[�d[e=�Zle$�he^edB�dS�Gd\d]�d]el��Zme$�hejnd^�Gd_d`�d`el��ZoGdadb�dbe=�ZpGdcdd�dde=�ZqGdedf�dfe=�ZrGdgdh�dhe=�Zsd�didj�ZtGdkdl�dl�Zudmdn�ZvGdodp�dpejT�ZwGdqdr�dre=�ZxGdsdt�dte=�ZyGdudv�dve=�ZzGdwdx�dxej{�Z|Gdydz�dze=�Z}Gd{d|�d|e=�Z~e^ejd}��r�ddl�Z�dd~l�m�Z�Gdd��d�e=�Z�e��d�Z�Gd�d��d�ej��Z�e��Z�Gd�d��d��Z�Gd�d��d�e$j<e��Z�Gd�d��d�ej��Z�Gd�d��d�e$j<�Z�Gd�d��d�e=�Z�Gd�d��d�e=�Z�Gd�d��d��Z�Gd�d��d�ej��Z�Gd�d��d�e=�Z�Gd�d��d�e=�Z�Gd�d��d�e=�Z�Gd�d��d�e$j<�Z�Gd�d��d�e$j<�Z�Gd�d��d�e=e��Z�Gd�d��d�e=�Z�Gd�d��d�e��Z�Gd�d��d�e��Z�Gd�d��d�e��Z�d�d��Z�d�d�d�d�d�d�e�d�d�d��ffD]\Z�Z�e�e�fd�d��Z�e�e�d�e�e���q�e$�he7d��Gd�d��d�e=��Z�Gd�d��d�e$j<�Z�d�d��Z�e�d�k�r�e$���dSdS)��N)�assert_python_ok�assert_python_failure)�support)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper)�TestHandler)�
HTTPServer�BaseHTTPRequestHandler)�urlparse�parse_qs)�ThreadingUDPServer�DatagramRequestHandler�ThreadingTCPServer�StreamRequestHandler�ignorec@s<eZdZ	dZdZdZdd�Zdd�Zd
d	d
�Zdd�Z	dS)�BaseTestz&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$rcCs�	t��|_t��jj}t��z;tj�	�|_
tjdd�|_|�	�|_
}tj�	�|_tj�	�|_i|_}|D]}t||dd�||<q9Wt��nt��wt�d�|_t�d�|_t�d�|_|j��|_t��|_|j�tj�t�|j�|_ t�!|j"�|_#|j �$|j#�|j�%�r�|jj&|jj&}t'd|��|j�%�r�|jj&|jj&}t'd|��|j�(|j �|�)|j�%��|�)|j�%��dS)N�disabledu«×»uĿÖG�zUnexpected handlers: %s)*rZthreading_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)�selfZlogger_dictr!r&�nameZhlist�r@�8/opt/alt/python310/lib64/python3.10/test/test_logging.py�setUpVsF


��


zBaseTest.setUpcCs@	|j��|j�|j�|jjr%|jjd}|j�|�|��|jjs|j�|j�t�	�z^tj
��tj
�|j
�tj��tj�|j�tj��tj�|j�|jtjdd�<t��j}d|_|j}|��|�|j�|j}|jD]}||dur�|||j|_qxWt��nt��w|��tj|j�dS)Nr) r0�closer+�
removeHandlerr4r:r1r-rrr$�clear�updater%r"r#rrr rrr�disablerr!r&rr(Z
doCleanupsrZthreading_cleanupr)r>�hrrr&r?r@r@rA�tearDown�s@
�




��zBaseTest.tearDownNc	Cs�	|p|j}t�|p|j�}|����}|�t|�t|��t||�D]\}}|�	|�}|s5|�
d|�|�t|���|�q#|�
�}|rO|�
d|�dSdS)Nz*Log line does not match expected pattern:
z'Remaining output at end of log stream:
)r0�re�compile�expected_log_pat�getvalue�
splitlines�assertEqual�len�zip�search�fail�tuple�groups�read)	r>Zexpected_valuesr0�patZactual_lines�actual�expected�match�sr@r@rA�assert_log_lines�s 

��zBaseTest.assert_log_linescCs	|jd7_d|jS)N�z%d)�message_num�r>r@r@rA�next_message�s
zBaseTest.next_message�NN)
�__name__�
__module__�__qualname__r6rLr^rBrIr\r`r@r@r@rArNs*
"rc@sFeZdZ	dd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�BuiltinLevelsTestcCs"|j}t�d�}|�tj�t�t�d�i�}|�tj�t�d�}|�tj�|�tj	|��|�
|��|�tj	|��|�
|��|�|��|�|��|�tj	|��|�
|��|�|��|�|��|�
|��|�|��|�|��|�
|��|�
|��|�gd��dS)N�ERR�INF�DEB))rf�CRITICAL�1)rf�ERROR�2)rgri�3)rgrk�4)rg�WARNING�5)rg�INFO�6)rhri�7)rhrk�8)rhro�9)rhrq�10)rhr2�11)r`rrr1rk�
LoggerAdapterrqr2�logri�error�warning�info�debugr\)r>�mrfrgrhr@r@rA�	test_flat�s.

zBuiltinLevelsTest.test_flatcCs�|j}t�d�}|�tj�t�d�}|�tj�|�tj|��|�|��|�	|��|�
|��|�|��|�ddg�dS)Nrg�INF.ERR)r�rirj)r�rkrl�
r`rrr1rqrkryrirzr{r|r}r\)r>r~rg�INF_ERRr@r@rA�test_nested_explicit�s


�z&BuiltinLevelsTest.test_nested_explicitcCs�|j}t�d�}|�tj�t�d�}|�tj�t�d�}t�d�}t�d�}|�tj|��|�|��|�	|��|�
|��|�tj|��|�|��|�|��|�	|��|�
|��|�|��|�gd��dS)Nrgr��	INF.UNDEF�
INF.ERR.UNDEF�UNDEF))r�rirj)r�rkrl)r�rorm)r�rqrn)r�rirp)r�rkrrr�)r>r~rgr�Z	INF_UNDEFZ
INF_ERR_UNDEFr�r@r@rA�test_nested_inheriteds&




z'BuiltinLevelsTest.test_nested_inheritedcCs�|j}t�d�}t�d�}t�d�}|�tj�|�tj|��|�|��|�tj|��|�|��|�|��|�|��|�	gd��dS)Nrg�INF.BADPARENT.UNDEF�
INF.BADPARENT))r�rirj)r�rqrl)r�rirm)r�rqrn)
r`rrr1rqry�FATALr|r}r\)r>r~rgZ
GRANDCHILDZCHILDr@r@rA�test_nested_with_virtual_parent's


z1BuiltinLevelsTest.test_nested_with_virtual_parentcCs.	|�t�d�tj�|�t�tj�d�dS)Nrq)rOr�getLevelNamerqr_r@r@rA�test_regression_22386Asz'BuiltinLevelsTest.test_regression_22386cCst�d�}|�|tj�dS)Nr�)rr�rOr�)r>Zfatalr@r@rA�test_issue27935F�
z!BuiltinLevelsTest.test_issue27935cCsb	t�tjd�|�tjtjd�|�t�tj�d�|�t�tj�d�|�t�d�tj�dS)Nrrq�NOTSET)r�addLevelNamerq�
addCleanuprOr�r�r_r@r@rA�test_regression_29220Jsz'BuiltinLevelsTest.test_regression_29220N)
rbrcrdrr�r�r�r�r�r�r@r@r@rAre�s/#rec@�&eZdZ	dd�Zdd�Zdd�ZdS)�BasicFilterTestc	Cs�t�d�}|jjd}zD|�|�t�d�}t�d�}t�d�}t�d�}|�|���|�|���|�|���|�|���|�ddg�W|�	|�dS|�	|�w)N�	spam.eggsr�spam�spam.eggs.fish�spam.bakedbeans�r�rqrl�r�rqrm)
r�Filterr+r:�	addFilterrr|r`r\�removeFilter)r>Zfilter_�handlerr��	spam_eggs�spam_eggs_fish�spam_bakedbeansr@r@rA�test_filterVs"





�zBasicFilterTest.test_filterc	Cs�dd�}|jjd}zD|�|�t�d�}t�d�}t�d�}t�d�}|�|���|�|���|�|���|�|���|�dd	g�W|�|�dS|�|�w)
NcSs&|j�d�}d�|dd��}|dkS)N�.�r�)r?�split�join)�record�parts�prefixr@r@rA�
filterfuncrsz8BasicFilterTest.test_callable_filter.<locals>.filterfuncrr�r�r�r�r�r�)	r+r:r�rrr|r`r\r�)r>r�r�r�r�r�r�r@r@rA�test_callable_filterns"




�z$BasicFilterTest.test_callable_filtercCs*t��}t�ddi�}|�|�|��dS)Nr?r�)rr��
makeLogRecordr=�filter)r>�f�rr@r@rA�test_empty_filter�sz!BasicFilterTest.test_empty_filterN)rbrcrdr�r�r�r@r@r@rAr�Rs
r��x�w�v�u�t�s�r�q�p�or]�Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	TalkativeZ	Garrulous�
Chatterbox�Boringc@�eZdZ	dd�ZdS)�GarrulousFiltercCs
|jtkS�N)�levelno�	GARRULOUS�r>r�r@r@rAr���
zGarrulousFilter.filterN�rbrcrdr�r@r@r@rAr���r�c@r�)�VerySpecificFiltercCs|jttfvSr�)r��SOCIABLE�TACITURNr�r@r@rAr���zVerySpecificFilter.filterNr�r@r@r@rAr��r�r�c@�:eZdZ	dZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�CustomLevelsAndFiltersTest�^[\w.]+ -> (\w+): (\d+)$cCs,t�|�t��D]
\}}t�||�q	dSr�)rrB�my_logging_levels�itemsrr�)r>�k�vr@r@rArB�s
�z CustomLevelsAndFiltersTest.setUpcCstD]
}|�||���qdSr�)�LEVEL_RANGEryr`)r>�loggerZlvlr@r@rA�log_at_all_levels�s�z,CustomLevelsAndFiltersTest.log_at_all_levelscCs*|j�t�|�|j�|�gd��dS)N)�r�rp�r�rr�r�rs�r�rt�r�ru�r�rv)r+r1�VERBOSEr�r\r_r@r@rA�test_logger_filter�sz-CustomLevelsAndFiltersTest.test_logger_filterc	Cs^|jjd�t�z|�|j�|�gd��W|jjd�tj�dS|jjd�tj�w)Nr)r�r�r�r�r�)r+r:r1r�r�r\rr�r_r@r@rA�test_handler_filter�s
.z.CustomLevelsAndFiltersTest.test_handler_filterc	Cs�|jjd}d}t�}|�|�z7|�|j�gd�}|�|�t�}|j�|�|�|j�|�|gd��W|rA|j�|�|�|�dS|rP|j�|�|�|�w)Nr)	)r�rj)r�rl)r�rnr�r�r�r�r�r�))r�rw)r�Z12)r�Z14)r�Z15)r�Z17)r�Z18)r�Z20)r+r:r�r�r�r\r�r�)r>r�Zspecific_filterZgarrZfirst_linesr@r@rA�test_specific_filters�s$

�z0CustomLevelsAndFiltersTest.test_specific_filtersN)	rbrcrdrLrBr�r�r�r�r@r@r@rAr��sr�c@sZeZdZdd�Zdd�Zdd�Ze�ej	dkd�d	d
��Z
e�eed�d�d
d��ZdS)�HandlerTestcCsDt��}d|_|�|jd�d|_|�|jd�|�t|jd�dS)N�genericZanothergeneric)r�Handlerr?rO�assertRaises�NotImplementedError�emit�r>rHr@r@rA�	test_nameszHandlerTest.test_namec
Cs�tjdvr�dD]t}t��\}}t�|�|st�|�tjj	|ddd�}|rb|j
|j}}|�|d�|�|d�t�
ddi�}|�|�t�|�|�tj�|��|�|�|�tj�|��n|�|j
d�|�|jd�|��|r{t�|�qtjd	kr�d
}nd}ztj�|�}|�|j|j�|�|j�|��Wn	ty�YnwdD]}	|	d
kr�|�ttjjdd|	�q�tj�dd|	�}|��q�tj�d�}t�
i�}|�|�|��|��tj�d�}|�|�|��|��dS)N�Zlinux�darwin)TF�utf-8T��encoding�delay����msgZTestr�z/var/run/syslogz/dev/log)�GET�POST�PUTr��	localhostz/logrr])�sys�platform�tempfile�mkstemp�osrC�unlinkrr:�WatchedFileHandler�dev�inorOr��handle�assertFalse�path�existsr=�
SysLogHandlerZfacilityZLOG_USERZ
unixsocket�OSErrorr��
ValueError�HTTPHandlerZBufferingHandlerZshouldFlush)
r>Zexisting�fd�fnrHrrr�Zsockname�methodr@r@rA�test_builtin_handlers's`






�
��

z!HandlerTest.test_builtin_handlerscCs�	t��\}}t�|�t�|�t�|�}tj|dfftj	j
|dfftj	j|dfff}tj
dvr<|tj	j|dfff7}|D]\}}||ddi�}|�tj�|��|��t�|�q>dS)N�w�arHr�r�r�)r�r�r�rCr��pathlibZPathr�FileHandlerr:�RotatingFileHandler�TimedRotatingFileHandlerr�r�rr=rr)r>rrZpfn�cases�cls�argsrHr@r@rA�test_path_objects]s"


�
�zHandlerTest.test_path_objects�ntz/WatchedFileHandler not appropriate for Windows.c
sD�fdd�}d}d}d�_d�_dD]�}t�dd�\}}t�|�tj|||fd�}d|_|�	�t
jj|d	|d
�}t
�
d�}	|�|	�zFt|�D],}
t�d�t
�d
di�}zt���_|�|�WqItyutd�j�jf��wW|��|��tj�|�r�t�|�q|��|��tj�|�r�t�|�wwdS)Nc	sTt|�D]#}zt�|�t���_Wn	tyYnwt�dt�dd��qdS)Ng����Mbp?r�)	�ranger�r��time�
deletion_timer�sleep�randomZrandint)ZfnameZtries�_r_r@rA�remove_loopws
��z*HandlerTest.test_race.<locals>.remove_loopi��FT�.logztest_logging-3-��targetrTr�r�z'%(asctime)s: %(levelname)s: %(message)s�{�G�zt?r�ZtestingzDeleted at %s, opened at %s)Zhandle_timerr�r�r�rC�	threading�Thread�daemon�startrr:rr5r8rrrr�r�	Exception�printr�rrr�)r>r!Z	del_countZ	log_countr�rrZremoverrHr�r r�r@r_rA�	test_racetsR	




����
����zHandlerTest.test_race�forkzTest requires os.fork().c	s(	Gdd�dtj�}|�ttj�d�|��|��jjj�d�_	|�
ttj�d�|�
ttj�d�t�d�}|�
��|�tj�t���t������fdd�}tj|d	d
�}|�����t��}|dkr~z
|�d�Wt�d�dSt�d�w|�d����|��tj|dd
�dS)Nc�$eZdZ�fdd�Zdd�Z�ZS)zAHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandlercs&t���tjtdddd�d�|_dS)Nz	/dev/nullZwtr��r��r0)�super�__init__rr3�open�sub_handlerr_��	__class__r@rAr3�s
�zJHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__cSs4|j��z|j�|�W|j��dS|j��wr�)r5�acquirer��releaser�r@r@rAr��s
zFHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit�rbrcrdr3r��
__classcell__r@r@r6rA�_OurHandler�sr<rz*because we need at least one for this testr]� test_post_fork_child_no_deadlockcsTt��z ���z�����d�W���n���wWt��dSt��w)N��?)rrr8�set�waitr9r(r@�Z+fork_happened__release_locks_and_end_threadZlocks_held__ready_to_forkZrefed_hr@rA�lock_holder_thread_fn�s
zKHandlerTest.test_post_fork_child_no_deadlock.<locals>.lock_holder_thread_fnz,test_post_fork_child_no_deadlock lock holder)r%r?z#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)Zexitcode)rr�rOrPrr�r5r0rCr?�
assertGreaterZ_at_fork_reinit_lock_weaksetrr<r1r2r'�Eventr(r*r@r�r.r|�_exitr?r�rZwait_process)r>r<Ztest_loggerrBZlock_holder_thread�pidr@rArAr=�s:


�
z,HandlerTest.test_post_fork_child_no_deadlockN)
rbrcrdr�rr�unittestZskipIfr�r?r-�hasattrr=r@r@r@rAr�s6
0r�c@�eZdZdd�ZdS)�	BadStreamcCstd��)N�deliberate mistake)�RuntimeError�r>�datar@r@rA�write��zBadStream.writeN)rbrcrdrOr@r@r@rArJ��rJc@rI)�TestStreamHandlercC�
||_dSr�)�error_recordr�r@r@rA�handleError�r�zTestStreamHandler.handleErrorN)rbrcrdrUr@r@r@rArR�rQrRc@seZdZejZdZdS)�StreamWithIntNamer�N)rbrcrdrr��levelr?r@r@r@rArV�srVc@�$eZdZdd�Zdd�Zdd�ZdS)�StreamHandlerTestcCs�tt��}t�i�}tj}ze|�|�|�|j|�t�t��}t	�
��}|�|�d}|�||���Wd�n1s>wYdt_t	�
��}|�|�|�
d|���Wd�n1sbwYW|t_dSW|t_dS|t_w)Nz"
RuntimeError: deliberate mistake
Fr)rRrJrr��raiseExceptionsr�assertIsrTr3r�captured_stderr�assertInrMrO)r>rHr�Z	old_raise�stderrr�r@r@rA�test_error_handling�s(




�

�
�z%StreamHandlerTest.test_error_handlingcCsX	t��}t��}|�|�}|�|tj�|�|�}|�||�|�|�}|�|�dSr�)	rr3r.r/Z	setStreamr[r�r^�assertIsNone)r>rHr0�oldrXr@r@rA�test_stream_settings


z%StreamHandlerTest.test_stream_settingcCs t�t��}|�t|�d�dS)Nz<StreamHandler 2 (NOTSET)>)rr3rVrO�reprr�r@r@rA�'test_can_represent_stream_with_int_name"sz9StreamHandlerTest.test_can_represent_stream_with_int_nameN)rbrcrdr_rbrdr@r@r@rArY�srYc@s6eZdZ	dd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�TestSMTPServercCsBtjj||d|dd�|j��d|_||_d|_d|_||_	dS)NT)�mapZdecode_datar]F)
�smtpd�
SMTPServerr3�socket�getsockname�port�_handler�_thread�_quit�
poll_interval)r>�addrr�ro�sockmapr@r@rAr3>s�
zTestSMTPServer.__init__cCs	|�||||�dSr�)rl)r>�peer�mailfrom�rcpttosrNr@r@rA�process_messageGs	zTestSMTPServer.process_messagecC�.	tj|j|jfd�|_}d|_|��dS�Nr$T�r'r(�
serve_foreverrormr)r*�r>�tr@r@rAr*S��zTestSMTPServer.startcCs(	|jstj||jdd�|jrdSdS)Nr])rf�count)rn�asyncoreZloop�_map�r>ror@r@rAry\s�zTestSMTPServer.serve_forevercCs6	d|_t�|j�d|_|��tj|jdd�dS)NT)rfZ
ignore_all)rnr�join_threadrmrCr~Z	close_allrr_r@r@rA�stopgszTestSMTPServer.stopN)rbrcrdr3rur*ryr�r@r@r@rAre)s		recs6eZdZ	dd�Zdd�Z�fdd�Zdd�Z�ZS)	�ControlMixincCs d|_||_||_t��|_dSr�)rmrorlr'rD�ready)r>r�ror@r@rAr3�szControlMixin.__init__cCrvrwrxrzr@r@rAr*�r|zControlMixin.startcs 	|j��tt|��|�dSr�)r�r?r2r�ryr�r6r@rAry�s
zControlMixin.serve_forevercCs<	|��|jdurt�|j�d|_|��|j��dSr�)�shutdownrmrr��server_closer�rEr_r@r@rAr��s
zControlMixin.stop)rbrcrdr3r*ryr�r;r@r@r6rAr�ss	r�c@s$eZdZ			ddd�Zdd�ZdS)	�TestHTTPServerr>FNcs<G��fdd�dt��t�||��t�|||�||_dS)Ncs2eZdZddd�Zdd�Z���fdd�Z�ZS)	z=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandlerNcSs|�d�r|jSt|��)NZdo_)�
startswith�process_request�AttributeError)r>r?�defaultr@r@rA�__getattr__�s
zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__cS�|j�|�dSr���serverrlr_r@r@rAr���zMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_requestcs$�rt�|�j|g|�R�dSdSr�)r2�log_message)r>�formatr)�DelegatingHTTPRequestHandlerr7ryr@rAr��s����zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_messager�)rbrcrdr�r�r�r;r@�r�ryr6rAr��s
r�)rr
r3r��sslctx)r>rpr�roryr�r@r�rAr3�s

zTestHTTPServer.__init__c
Csdz|j��\}}|jr|jj|dd�}W||fSW||fSty1}z	tj�d|��d}~ww)NT)Zserver_sidezGot an error:
%s
)riZacceptr�Zwrap_socketrr�r^rO)r>�sockrp�er@r@rA�get_request�s����zTestHTTPServer.get_request)r>FN)rbrcrdr3r�r@r@r@rAr��s

�r�cs0eZdZ	dZ		ddd�Z�fdd�Z�ZS)�
TestTCPServerTr>cCs2Gdd�dt�}t�||||�t�|||�dS)Nc@rI)z;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlercSr�r�r�r_r@r@rAr�r�zBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handleN)rbrcrdrr@r@r@rA�DelegatingTCPRequestHandler��r�)rrr3r�)r>rpr�ro�bind_and_activater�r@r@rAr3�s

�zTestTCPServer.__init__c�"tt|���|j��d|_dS�Nr])r2r��server_bindrirjrkr_r6r@rAr���zTestTCPServer.server_bind�r>T)rbrcrdZallow_reuse_addressr3r�r;r@r@r6rAr��s
�
r�cs8eZdZ			d	dd�Z�fdd�Z�fdd�Z�ZS)
�
TestUDPServerr>Tcs<G�fdd�dt��t�||�|�t�|||�d|_dS)Ncs&eZdZdd�Z��fdd�Z�ZS)z;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlercSr�r�r�r_r@r@rArr�zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handlecsF|j��}|r!z
t�|���WdSty |jjs�YdSwdSr�)ZwfilerMr2�finishrr��_closedrM)�DelegatingUDPRequestHandlerr7r@rAr�s
���zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finish)rbrcrdrr�r;r@�r�r6rAr�sr�F)rrr3r�r�)r>rpr�ror�r@r�rAr3�s�
zTestUDPServer.__init__cr�r�)r2r�r�rirjrkr_r6r@rAr�r�zTestUDPServer.server_bindcstt|���d|_dS)NT)r2r�r�r�r_r6r@rAr�s
zTestUDPServer.server_closer�)rbrcrdr3r�r�r;r@r@r6rAr��s
�r��AF_UNIXc@�eZdZejZdS)�TestUnixStreamServerN�rbrcrdrir��address_familyr@r@r@rAr��
r�c@r�)�TestUnixDatagramServerNr�r@r@r@rAr� r�r�c@s"eZdZejZdd�Zdd�ZdS)�SMTPHandlerTestc
Cs
i}ttjdf|jd|�}|��tj|jf}tjj|ddd|j	d�}|�
|jdg�g|_t�
ddi�}t��|_|�|�|j�|j	�|��|�|j���|�
t|j�d	�|jd\}}}}	|�
|d�|�
|dg�|�d
|	�|�|	�d��|��dS)Nr���MbP?�meZyouZLog)Ztimeoutr�u	Hello ✓r]z
Subject: Log
u

Hello ✓)rerZHOSTrur*rkrr:ZSMTPHandler�TIMEOUTrOZtoaddrs�messagesr�r'rD�handledrr@r�r=Zis_setrPr]�endswithrC)
r>rqr�rprHr�rrrsrtrNr@r@rA�
test_basic)s0��

zSMTPHandlerTest.test_basiccGs|j�|�|j��dSr�)r��appendr�r?)r>rr@r@rAruAszSMTPHandlerTest.process_messageN)rbrcrdrZLONG_TIMEOUTr�r�rur@r@r@rAr�%sr�c@r�)
�MemoryHandlerTestr�cCsFt�|�tj�dtj|j�|_t�d�|_	d|j	_
|j	�|j�dS)N�
Zmemr)rrBrr:�
MemoryHandlerror4�mem_hdlrr�
mem_logger�	propagater<r_r@r@rArBLs
�zMemoryHandlerTest.setUpcC�|j��t�|�dSr�)r�rCrrIr_r@r@rArIT�
zMemoryHandlerTest.tearDowncCs�|j�|���|�g�|j�|���|�g�|j�|���gd�}|�|�dD]1}td�D]
}|j�|���q3|�|�|j�|���|dd�t||d�D�}|�|�q-|j�|���|�|�dS)N)�r2rj�rqrl)rorm)r��	cSsg|]}dt|�f�qS)r2)�str)�.0�ir@r@rA�
<listcomp>nsz0MemoryHandlerTest.test_flush.<locals>.<listcomp>r�)r�r}r`r\r|r{r)r>�lines�nr�r@r@rA�
test_flushXs 



zMemoryHandlerTest.test_flushcCs�	|j�|���|�g�|j�|���|�g�|j�|j�|j��ddg}|�|�tj	�
dtj|jd�|_|j�
|j�|j�|���|�|�|j�|���|�|�|j�|j�|j��|�|�dS)Nr�r�r�F)r�r}r`r\r|rDr�rCrr:r�ror4r<)r>r�r@r@rA�test_flush_on_closets.


�
�


z%MemoryHandlerTest.test_flush_on_closec
Cs�Gdd�d�}||j�}z,|j�|�td�D]}t�d�|j�d�|j�d�qW|jD]}t	�
|�q/dS|jD]}t	�
|�q<w)Nc@rX)zZMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandlercSs||_g|_dSr�)r��threads)r>r�r@r@rAr3�s
zcMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.__init__cSs|j�d�dSr�)r��	setTargetr_r@r@rA�removeTarget�r�zgMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.removeTargetcSs&tj|jd�}|j�|�|��dS)N)r%)r'r(r�r�r�r*)r>r��threadr@r@rAr�szaMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handleN)rbrcrdr3r�rr@r@r@rA�MockRaceConditionHandler�sr�r�r&znot flushedZflushed)r�r�rrrr�r|r{r�rr�)r>r�r%r r�r@r@rA�&test_race_between_set_target_and_flush�s


�
��z8MemoryHandlerTest.test_race_between_set_target_and_flushN)	rbrcrdrLrBrIr�r�r�r@r@r@rAr�Esr�c@r�)�ExceptionFormattercCsd|djS)Nz
Got a [%s]r)rb)r>Zeir@r@rA�formatException�r�z"ExceptionFormatter.formatExceptionN)rbrcrdr�r@r@r@rAr��sr�c@s�eZdZ	ejZdZdZdZdZe�	dd�Z
e�	dd�Zd	ed
Ze�	dd�Z
d
ZdZdZdZdd�Zdd�Zdd�Zefdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-S).�ConfigFileTest�^(\w+) \+\+ (\w+)$aN
    [loggers]
    keys=root

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=

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

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

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

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=NOTSET
    handlers=hand1

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

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

    [handlers]
    keys=hand1, hand2

    [formatters]
    keys=form1, form2

    [logger_root]
    level=WARNING
    handlers=

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

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

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

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

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

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

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

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

    [handlers]
    keys=file

    [formatters]
    keys=

    [logger_root]
    level=DEBUG
    handlers=file

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

    [handlers]
    keys=screen

    [formatters]
    keys=

    [logger_root]
    level=DEBUG
    handlers=screen

    [handler_screen]
    level=DEBUG
    class=StreamHandler
    args=(sys.stdout,)
    formatter=
    cKs,t�t�|��}tjj|fddi|��dS)Nr�r�)r.r/�textwrap�dedentr�config�
fileConfig)r>�conf�kwargs�filer@r@rA�apply_config�szConfigFileTest.apply_configcC�xt���.}|�|j�t��}|�|���|�|���|j	dg|d�|�	g�Wd�dS1s5wYdS�N�rkrlr1�
r�captured_stdoutr��config0rrr|r`rzr\�r>�outputr�r@r@rA�test_config0_ok��
��"�zConfigFileTest.test_config0_okcCs�t���@}t�t�|j��}t��}|�	|�t
j�|�t
�
�}|�|���|�|���|jdg|d�|�g�Wd�dS1sGwYdSr�)rr�r.r/r�r�r��configparserZConfigParserZ	read_filerr�r�rr|r`rzr\)r>r�r�Zcpr�r@r@rA�test_config0_using_cp_ok�s

��"�z'ConfigFileTest.test_config0_using_cp_okcC�zt���/}|�|�t�d�}|�|���|�|���|jddg|d�|�g�Wd�dS1s6wYdS�N�compiler.parser�rqrjr�r1�	rr�r�rrr|r`rzr\�r>r�r�r�r@r@rA�test_config1_ok��


��"�zConfigFileTest.test_config1_okcC�|�t|j|j�dSr��r�r+r��config2r_r@r@rA�test_config2_failure��z#ConfigFileTest.test_config2_failurecCr�r��r�r+r��config3r_r@r@rA�test_config3_failure�r�z#ConfigFileTest.test_config3_failurec	Cs�t���8}|�|j�t��}zt��ty t�d�Ynwtj	�
d�|�|��d�|�
g�Wd�dS1s?wYdS�Nzjust testingrz-ERROR:root:just testing
Got a [RuntimeError]
)rr�r��config4rrrL�	exceptionr��stdout�seekrOrMr\r�r@r@rA�test_config4_ok�s
�
�"�zConfigFileTest.test_config4_okcC�|j|jd�dS�N)r��r��config5r_r@r@rA�test_config5_ok��zConfigFileTest.test_config5_okcCr�r)r��config6r_r@r@rA�test_config6_okrzConfigFileTest.test_config6_okcC�Jt���;}|�|j�t�d�}t�d�}|�|���|�|���|�	|���|j
gd�|d�|�
g�Wd�n1sBwYt���P}|�|j�t�d�}|�|j
�|�|���|�|���t�d�}|�|���|�|���|�	|���|j
gd�|d�|�
g�Wd�dS1s�wYdS�Nr�zcompiler-hyphenated)r�r�)rirmr1�compiler.lexer))rqrn)rkrp)rqrr)rkrs)rr�r��config1arrr|r`rz�criticalr\�config7rr�r>r�r�Z
hyphenatedr@r@rA�test_config7_ok�6



��



�"�zConfigFileTest.test_config7_okcCs�dd�}|���1t�dd�\}}t�|�tjdkr!|�dd�}|jj|d�}|�	|�|�	|�Wd�n1s<wYt
jjd	}|�
|||�dS)
NcS�|��t�|�dSr��rCr��remove��h1rr@r@rA�cleanup1�z/ConfigFileTest.test_config8_ok.<locals>.cleanupr#�test_logging-X-r�\z\\)r�r)�check_no_resource_warningr�r�r�rCr?�replace�config8r�r�r�rootr:r�)r>rrrrr�r@r@rA�test_config8_ok/s



�zConfigFileTest.test_config8_okcCsZ|�|j�t�d�}|�|j�|�|j�|�|j�|j|jdd�|�|j�dS)NZsome_pristine_loggerF)�disable_existing_loggers)r��disable_testrrrrr=�r>r�r@r@rA�test_logger_disablingFs
z$ConfigFileTest.test_logger_disablingcCs*d}|�|�|�t��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�rOrrr:r?)r>Ztest_configr@r@rA�test_config_set_handler_namesOs
z,ConfigFileTest.test_config_set_handler_namescCs�	t�d���}tjddd�\}}z*t�||�d��t�|�t	j
j|dtddd	d
ddd
�id�d�Wt�
|�dSt�
|�w)Nat
            [formatters]
            keys=default

            [formatter_default]

            [handlers]
            keys=console

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

            [loggers]
            keys=root

            [logger_root]
            formatter=default
            handlers=console
            �
test_logging_z.ini�r��suffix�asciir�r]Fr�z5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)r��datefmt�class)�versionr�
formatters)r��defaults)r�r��stripr�r�r�rO�encoderCrr�r��dictr�)r>Zinirrr@r@rA�!test_defaults_do_no_interpolationgs.�
����z0ConfigFileTest.test_defaults_do_no_interpolationN) rbrcrdrrrLr��config1r
rr�r�r�rrrrrr�r�r�r�r�r�r�rrrrr!r#r0r@r@r@rAr��sB  ��*&+	r�c@s>eZdZ	eZdZdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dS)
�SocketHandlerTest�r�rc
Cs�	t�|�d|_|_|_z|�|j|jd�|_}|��Wnt	y7}z
||_WYd}~dSd}~ww|j
��tj
j}t|jt�rO|d|j�|_n||jd�|_d|_|j�|jj
d�|j�|j�t�d�|_dS�N�{�G�z�?r�rr)rrBr��	sock_hdlr�server_exception�server_class�address�
handle_socketr*rr�r@rr:Z
SocketHandler�
isinstance�server_addressrTrk�
log_outputr+rDr<r'Z	Semaphorer��r>r�r�Zhclsr@r@rArB�s,

���
zSocketHandlerTest.setUpc	Cs^	z'|jr|j�|j�|j��|jr!|j��Wt�|�dSWt�|�dSt�|�wr�)r6r+rDrCr�r�rrIr_r@r@rArI�s
�zSocketHandlerTest.tearDowncCs�|j}	|�d�}t|�dkrdSt�d|�d}|�|�}t|�|kr5||�|t|��}t|�|ks$t�|�}t�|�}|j	|j
d7_	|j��q)NTr�>Lr�
)
Z
connection�recvrP�structZunpack�pickle�loadsrr�r=r�r�r9)r>�request�conn�chunk�slen�objr�r@r@rAr:�s

�


�zSocketHandlerTest.handle_socketcCsV|jr	|�|j�t�d�}|�d�|j��|�d�|j��|�|j	d�dS)NZtcpr��eggs�
spam
eggs
)
r7�skipTestrrrzr�r8r}rOr=r r@r@rA�test_output�s




zSocketHandlerTest.test_outputcCs�|jr	|�|j�d|j_|j��ztd��ty%|j�d�Ynw|j�	d�t
�
�}|�|jj|�t
�
|jj|d�|j�	d�dS)Ng@zDeliberate mistakez
Never sentzNever sent, eitherr�zNor this)r7rLr6Z
retryStartr�r�rLr+r�rzrrCZ	retryTimer)r>�nowr@r@rA�
test_noserver�s
�zSocketHandlerTest.test_noserverN)rbrcrdr�r8r9rBrIr:rMrOr@r@r@rAr2�sr2cCs*tjddd�\}}t�|�t�|�|S)Nr$z.sockr%)r�r�r�rCr)rrr@r@rA�_get_temp_domain_socket�s

rPzUnix sockets requiredc@�,eZdZ	eed�reZdd�Zdd�ZdS)�UnixSocketHandlerTestr�cC�t�|_t�|�dSr�)rPr9r2rBr_r@r@rArB��zUnixSocketHandlerTest.setUpcC�t�|�t�|j�dSr�)r2rIrr�r9r_r@r@rArI�
zUnixSocketHandlerTest.tearDownN)	rbrcrdrHrir�r8rBrIr@r@r@rArR��
rRc@�6eZdZ	eZdZdd�Zdd�Zdd�Zdd	�Z	d
S)�DatagramHandlerTestr3c
Cs�	t�|�d|_|_|_z|�|j|jd�|_}|��Wnt	y7}z
||_WYd}~dSd}~ww|j
��tj
j}t|jt�rO|d|j�|_n||jd�|_d|_|j�|jj
d�|j�|j�t��|_dSr4)rrBr�r6r7r8r9�handle_datagramr*rr�r@rr:ZDatagramHandlerr;r<rTrkr=r+rDr<r'rDr�r>r@r@rArB
s,

���
zDatagramHandlerTest.setUpc	C�^	z'|jr
|j��|jr!|j�|j�|j��Wt�|�dSWt�|�dSt�|�wr�)r�r�r6r+rDrCrrIr_r@r@rArI'�
�zDatagramHandlerTest.tearDowncCsTt�dd�}|jt|�d�}t�|�}t�|�}|j|j	d7_|j
��dS)Nr?rr@)rB�pack�packetrPrCrDrr�r=r�r�r?)r>rErHr^rIr�r@r@rArZ2s

z#DatagramHandlerTest.handle_datagramcCs`|jr	|�|j�t�d�}|�d�|j��|j��|�d�|j��|�|j	d�dS)NZudpr�rJrK)
r7rLrrrzr�r@rErOr=r r@r@rArM:s





zDatagramHandlerTest.test_outputN�
rbrcrdr�r8r9rBrIrZrMr@r@r@rArYsrYc@rQ)�UnixDatagramHandlerTestr�cCrSr�)rPr9rYrBr_r@r@rArBNrTzUnixDatagramHandlerTest.setUpcCrUr�)rYrIrr�r9r_r@r@rArISrVz UnixDatagramHandlerTest.tearDownN�	rbrcrdrHrir�r8rBrIr@r@r@rAr`FrWr`c@rX)�SysLogHandlerTestr3c
Cs�	t�|�d|_|_|_z|�|j|jd�|_}|��Wnt	y7}z
||_WYd}~dSd}~ww|j
��tj
j}t|jt�rS||jd|jf�|_n||j�|_d|_|j�|jj
d�|j�|j�t��|_dS)Nr5r�)rrBr��sl_hdlrr7r8r9rZr*rr�r@rr:rr;r<rTrkr=r+rDr<r'rDr�r>r@r@rArB^s,

���
zSysLogHandlerTest.setUpc	Cr[r�)r�r�rdr+rDrCrrIr_r@r@rArIxr\zSysLogHandlerTest.tearDowncCs|j|_|j��dSr�)r^r=r�r?)r>rEr@r@rArZ�rz!SysLogHandlerTest.handle_datagramcCs�|jr	|�|j�t�d�}|�d�|j��|�|jd�|j�	�d|j
_|�d�|j��|�|jd�|j�	�d|j
_|�d�|j��|�|jd�dS)NZslh�späms
<11>spämFs	<11>spämuhäm-s<11>häm-späm)
r7rLrrrzr�r@rOr=rErdZ
append_nul�identr r@r@rArM�s 








zSysLogHandlerTest.test_outputNr_r@r@r@rArbWsrbc@rQ)�UnixSysLogHandlerTestr�cCrSr�)rPr9rbrBr_r@r@rArB�rTzUnixSysLogHandlerTest.setUpcCrUr�)rbrIrr�r9r_r@r@rArI�rVzUnixSysLogHandlerTest.tearDownNrar@r@r@rArg�rWrgz$IPv6 support required for this test.cs2eZdZ	eZdZ�fdd�Z�fdd�Z�ZS)�IPv6SysLogHandlerTest)z::1rc�tj|j_tt|���dSr�)riZAF_INET6r8r�r2rhrBr_r6r@rArB�r�zIPv6SysLogHandlerTest.setUpcrir�)ri�AF_INETr8r�r2rhrIr_r6r@rArI�r�zIPv6SysLogHandlerTest.tearDown)	rbrcrdr�r8r9rBrIr;r@r@r6rArh�srhc@r�)�HTTPHandlerTestcCs	t�|�t��|_dSr�)rrBr'rDr�r_r@r@rArB�s
zHTTPHandlerTest.setUpcCsn|j|_t|j�|_|jdkr'zt|jd�}|j�|�|_Wnd|_Y|�	d�|�
�|j��dS)Nr�zContent-Length��)
�commandrr�log_data�intZheadersZrfilerV�	post_dataZ
send_responseZend_headersr�r?)r>rEZrlenr@r@rA�handle_request�s

zHTTPHandlerTest.handle_requestc	Cs�t�d�}|j}|�|jjd�dD]�}d}|rJzddl}Wnty*d}Yn$wtj�	t
�}tj�|d�}|�|j
�}|�|�|j|d�}	nd}d}	t||jd|d�|_}
|
��|
j��d	|
j}|ok|}tjj|d
||	dd�|_d|_|�|j�d
D]T}
|
|j_|j��d}|�|�|j��|�|jjd
�|�|j |
�|
dkr�t!|jj"�}nt!|j#�$d��}|�|ddg�|�|ddg�|�|d|g�q�|j�%�|j�|j�|j�&�qdS)NZhttprr"r3zkeycert.pem)Zcafiler5)r�zlocalhost:%dz/frob)�foo�bar)�secure�contextZcredentials)r�r�rer�r�r?�funcNamerMr�)'rrr+rDr:�ssl�ImportErrorr�r�dirname�__file__r�Z
SSLContextZPROTOCOL_TLS_SERVERZload_cert_chainZcreate_default_contextr�rqr�r*r�r@Zserver_portr
Zh_hdlrrnr<r
r�rErzrOrmr
Zqueryrp�decoder�rC)r>r�r+rtrprwr��hereZlocalhost_certrur�ZhostZ
secure_clientr
r��dr@r@rArM�sd
�
�


�



�zHTTPHandlerTest.test_outputN)rbrcrdrBrqrMr@r@r@rArk�s

rkc@�.eZdZ	dd�Zdd�Zdd�Zdd�Zd	S)
�
MemoryTestcCs	t�|�i|_dSr�)rrB�
_survivorsr_r@r@rArB
s

zMemoryTest.setUpcGs0	|D]}t|�t|�f}t�|�|j|<qdSr�)�idrc�weakref�refr�)r>rrI�keyr@r@rA�_watch_for_survivals
�zMemoryTest._watch_for_survivalcCsb	t��g}|j��D]\\}}}|�dur|�|�q|r/|�dt|�d�|�f�dSdS)Nz;%d objects should have survived but have been destroyed: %sz, )�gcZcollectr�r�r�rSrPr�)r>ZdeadZid_�repr_r�r@r@rA�_assertTruesurvivals

�
��zMemoryTest._assertTruesurvivalcCs�|j�tj�t�d�}|�|�|�tj�|j�|���|�|���|�	dg�~|�
�t�d�}|�|���|�	ddg�dS)Nrr)rrr2rl)rrr2rm)r+r1rrqrr�r2r}r`r\r�)r>rrrsr@r@rA�test_persistent_loggers%s"

�

�z"MemoryTest.test_persistent_loggersN)rbrcrdrBr�r�r�r@r@r@rAr	src@�eZdZdd�Zdd�ZdS)�EncodingTestc	Cs�t�d�}t�dd�\}}t�|�d}zStj|dd�}|�|�z|�|�W|�	|�|��n
|�	|�|��wt
|dd�}z|�|���
�|�W|��n|��wWtj�|�rft�|�dSdStj�|�rtt�|�ww)N�testr#ztest_logging-1-ufoo€r�r0)rrr�r�r�rCrr<r{rDr4rOrV�rstripr�isfiler)r>ryrrrNr�r�r@r@rA�test_encoding_plain_file>s,





�
��z%EncodingTest.test_encoding_plain_filec	Cs�t�d�}d}t�d�}d|_t��}||d�}t�|�}|�|�z|�	|�W|�
|�|��n
|�
|�|��w|��}|�
|d�dS)Nr�uдо свидания�cp1251�stricts�� �������
)rr�codecs�	getwriterr�r.�BytesIOr3r<r{rDrCrMrO)r>ry�messageZwriter_classr0�writerr�r[r@r@rA�test_encoding_cyrillic_unicodeXs 







�
z+EncodingTest.test_encoding_cyrillic_unicodeN)rbrcrdr�r�r@r@r@rAr�=sr�c@r�)�WarningsTestc	Cs�t���ft�d�|�tjd�tjdtd�t��}t�	|�}t�
d�}|�|�t�d�|�
|�|��}|��|�|�d�d�t��}t�d	td
d|d�|��}|��|�|d
�Wd�dS1smwYdS)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�UserWarningr.r/r3rr<�warnrDrMrCrC�find�showwarningrO)r>r0rHr�r[Za_filer@r@rA�
test_warningsps.






��"�zWarningsTest.test_warningscCs�t���<t�d�|�tjd�t�d�}|�|jg�t�dt	dd�|�t
|j�d�|�|jdtj�Wd�dS1sCwYdS)	NTFr�r�r�r�r]r)
r�r�rr�r�rrOr:r�r�rP�assertIsInstance�NullHandlerr r@r@rA�test_warnings_no_handlers�s


"�z&WarningsTest.test_warnings_no_handlersN)rbrcrdr�r�r@r@r@rAr�nsr�cCst�||�Sr�)rr5)r�r(r@r@rA�
formatFunc��r�c@seZdZddd�ZdS)�myCustomFormatterNcC�dSr�r@)r>�fmtr(r@r@rAr3��zmyCustomFormatter.__init__r�)rbrcrdr3r@r@r@rAr��sr�cCst��Sr�)rr3r@r@r@rA�handlerFunc�rPr�c@�eZdZdS)�
CustomHandlerN�rbrcrdr@r@r@rAr���r�c
@s
eZdZ	ejZdZddddiiddddd	d
�iddgd�d
�Zddddiiddddd	d
�idddgd�iddid�Zddddiiddddd	d
�idddiiddgd�d�Zddddiidddddd
�idddgd�iddid�Z	ddddiiddddd	d
�idddgd�iddid�Z
ddddiiddddd	d
�idddgd�iddid�Zddddiiddddd	d
�idddgd�iddid�Zddeddd�iddddd	d
�iddgd�d
�Z
dedd�eddd�edd�d�dddd	d
�deid�ddgd�d
�Zddddiidedddd	d
�idddgd�iddid�Zddddiidedddd	dd�idddgd�iddid�Zddddiiddddd	d
�id ddgd�iddid�Zdd!dddiiddddd	d
�iddgd�id"�ddid#�Zdd$dddiiddddd	d
�iddgd�id"�ddid#�Zddddiiddddd	d
�idddgd�iddid�Zdd$dddiiddd%iid&�Zdd$ddd%iiddd%iid&�Zddddiid'd(diiddddd	d'gd)�iddd'gd*�iddgd�d+�Zddddiiddddd	d
�id,dd-idddgd�iddid.�Zdddiiddddd	d
�id,dd-idddgd�iddid/�Zd0dddiiddddd	d
�id,dd-idddgd�iddid.�Zddddiiddddd	d1d2d3�d4�iddgd�d
�Zdd5d6d7d8�iddd5d9�d:d;d5d<dd=�d>�d?dd@gdAdB�idC�Zddeddd!dD�iddddd	d
�idEddgdAdB�idC�Z ddeddd!dF�iddddd	d
�idEddgdAdB�idC�Z!ddedGdd!dF�iddddd	d
�idEddgdAdB�idC�Z"ddedd!dD�iddddd	d
�idEddgdAdB�idC�Z#dHdI�Z$dJdK�Z%efdLdM�Z&dNdO�Z'dPdQ�Z(dRdS�Z)dTdU�Z*dVdW�Z+dXdY�Z,dZd[�Z-d\d]�Z.d^d_�Z/d`da�Z0dbdc�Z1ddde�Z2dfdg�Z3dhdi�Z4djdk�Z5dldm�Z6dndo�Z7dpdq�Z8d�dsdt�Z9dudv�Z:dwdx�Z;dydz�Z<d{d|�Z=d}d~�Z>dd��Z?d�d��Z@d�d��ZAd�d��ZBd�d��ZCd�d��ZDd�d��ZEd�d��ZFdrS)��ConfigDictTestr�r]�form1r�z%(levelname)s ++ %(message)sr"�logging.StreamHandlerr�zext://sys.stdout)r)�	formatterrWr0ro�rWr:)r*r+r:rr�r2rW)r*r+r:�loggersrzext://sys.stdboutZNTOSETZWRANINGZmisspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)�()r�z.formatFunc)r�Zform2Zform3r�)r"Zhand2z.CustomHandlerzinvalid parameter name)r)r�rWr0rur	F)�compilerr	)r*rr+r:r�rTrq)r*Zincrementalr:r�Zfilt1r?)r)r�rWr0�filters)rWr�)r*r+r�r:r�rzcfg://true_formatterszcfg://handler_configs[hand1])r*�true_formatters�handler_configsr+r:r�r)r�r�r+r:r�rr�rs�!
)rr�
terminator)r)r�rWr0r��mySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s�$)r��style)r)rWr�zlogging.handlers.MemoryHandler��
fileGlobal)r)Zcapacityr�r%rW)r��bufferGlobal�mymoduler��true)rWr:r�)r*r+r:r�)r�r��validate�my_test_logger_custom_formatter)r)r�r�z.myCustomFormattercCstj�|�dSr�)rr�Z
dictConfig)r>r�r@r@rAr��r�zConfigDictTest.apply_configcCr�r�r�r�r@r@rAr��r�zConfigDictTest.test_config0_okcCr�r�r�r�r@r@rAr��r�zConfigDictTest.test_config1_okcCr�r�r�r_r@r@rAr��r�z#ConfigDictTest.test_config2_failurecCr�r�)r�r+r��config2ar_r@r@rA�test_config2a_failure�r�z$ConfigDictTest.test_config2a_failurecCr�r�)r�r+r��config2br_r@r@rA�test_config2b_failure�r�z$ConfigDictTest.test_config2b_failurecCr�r�r�r_r@r@rAr��r�z#ConfigDictTest.test_config3_failurec	C�t���4}|�|j�zt��tyt�d�Ynwtj�	d�|�
|��d�|�g�Wd�dS1s;wYdSr�)
rr�r�r�rLrr�r�r�r�rOrMr\�r>r�r@r@rAr���
�
�"�zConfigDictTest.test_config4_okc	Cr�r�)
rr�r��config4arLrr�r�r�r�rOrMr\r�r@r@rA�test_config4a_ok�r�zConfigDictTest.test_config4a_okcCr�rrr_r@r@rAr�rzConfigDictTest.test_config5_okcCr�r�)r�r+r�rr_r@r@rA�test_config6_failure��z#ConfigDictTest.test_config6_failurecCst���/}|�|j�t�d�}|�|���|�|���|j	ddg|d�|�	g�Wd�n1s6wYt���;}|�|j
�t�d�}|�|j�t�d�}|�|���|�|���|j	ddg|d�|�	g�Wd�dS1s}wYdS)Nr�r�r�r1r	�rqrm�rkrn)
rr�r�r1rrr|r`rzr\rr=rr�r@r@rAr�s8

���


��"�zConfigDictTest.test_config7_okcCs$t���/}|�|j�t�d�}|�|���|�|���|j	ddg|d�|�	g�Wd�n1s6wYt���I}|�|j
�t�d�}|�|j�|�|���|�|���t�d�}|�|���|�|���|j	gd�|d�|�	g�Wd�dS1s�wYdS)Nr�r�r�r1r	)r�r��rqrp�rkrr)
rr�r�r1rrr|r`rzr\rrrr�r@r@rA�test_config_8_ok�s6

���



�"�zConfigDictTest.test_config_8_okcCrr)rr�r�r
rrr|r`rzrr\�config8arrr
r@r@rA�test_config_8a_okrz ConfigDictTest.test_config_8a_okcCs�t���K}|�|j�t�d�}|�|���|jg|d�|�|j	�|�|���|jg|d�|�|j
�|�|���|jdg|d�Wd�dS1sRwYdS)Nr�r1r�)rr�r��config9rrr|r`r\�config9a�config9br�r@r@rA�test_config_9_okGs 

��"�zConfigDictTest.test_config_9_okcCs�t���H}|�|j�t�d�}|�|���t�d�}|�|���t�d�}|�|���t�d�}|�|���|j	ddg|d�Wd�dS1sOwYdS�Nr�r�r	zcompiler.parser.codegen)rorjr�r1)
rr�r��config10rrr{r`rzr\r�r@r@rA�test_config_10_okYs"




��"�z ConfigDictTest.test_config_10_okcCs|�|j�dSr�)r��config11r_r@r@rA�test_config11_oklr�zConfigDictTest.test_config11_okcCr�r�)r�r+r��config12r_r@r@rA�test_config12_failureor�z$ConfigDictTest.test_config12_failurecCr�r�)r�r+r��config13r_r@r@rA�test_config13_failurerr�z$ConfigDictTest.test_config13_failurecCs~t���1}|�|j�tjd}|�|jd�|�|jd�t�	d�|�
|���d��Wd�dS1s8wYdS)Nr"rsr�ZExclamationz
Exclamation!
)
rr�r��config14rrrOrrr�r{r=rMr�)r>r�rHr@r@rA�test_config14_okus


"�zConfigDictTest.test_config14_okcCs�dd�}|���.t�dd�\}}t�|�ddd|dd	�id
dgid�}|�|�|�|�Wd�n1s9wYtjjd}|�	|||�dS)
NcSrr�rrr@r@rAr�rz0ConfigDictTest.test_config15_ok.<locals>.cleanupr#rr]r�zlogging.FileHandlerr�)r)�filenamer�r:�r*r:rr)
rr�r�r�rCr�rrr:r�)r>rrrr�r�r@r@rA�test_config15_ok~s&

����
�zConfigDictTest.test_config15_okNc	Cs
|�d�}tj�d|�}|��|j��|j}|j��zVt	�	t	j
t	j�}|�d�|�
d|f�t�dt|��}||}d}t|�}	|	dkr]|�||d��}
||
7}|	|
8}	|	dksH|��W|j�d�tj��t�|�dS|j�d�tj��t�|�w)Nr�rg@r�r?)r.rr�Zlistenr*r�r@rkrErirjZSOCK_STREAMZ
settimeoutZconnectrBr]rP�sendrCZ
stopListeningrr�)r>�textZverifyr{rkr�rHr[Z	sentsofar�leftZsentr@r@rA�setup_via_listener�s4



�

�
z!ConfigDictTest.setup_via_listenercCs�t���K}|�t�|j��t�d�}|�|�	��t�d�}|�|�	��t�d�}|�|�	��t�d�}|�
|�	��|jddg|d�Wd�dS1sRwYdSr�)rr�r��json�dumpsr�rrr{r`rzr\r�r@r@rA�test_listen_config_10_ok�s"




��"�z'ConfigDictTest.test_listen_config_10_okcCs�t���3}|�t�tj��t�d�}|�	|�
��|�|�
��|jddg|d�|�g�Wd�dS1s:wYdSr�)
rr�r�r�r�r�r1rrr|r`rzr\r�r@r@rA�test_listen_config_1_ok�s

��"�z&ConfigDictTest.test_listen_config_1_okcCs�dd�}dd�}t�d�}t�tj�}t���}|�||�|�	|�
��|�|�
��Wd�n1s6wY|jg|d�|jddgd	d
�t��� }|�|�t�d�}|�	|�
��|�|�
��Wd�n1srwY|jddg|d�|jddgd	d
�t���&}|�|ddd
�|�t�d�}|�	|�
��|�|�
��Wd�n1s�wY|jddg|d�|jddgd	d
�dS)NcSr�r�r@�Zstuffr@r@rA�verify_fail�r�z6ConfigDictTest.test_listen_verify.<locals>.verify_failcSs|ddd�S)Nr�r@r�r@r@rA�verify_reverse�r�z9ConfigDictTest.test_listen_verify.<locals>.verify_reverser�r1r�r�r�)rWr�r�r�r�r�)
rrr�r�r�r1rr�r�r|r`rzr\)r>r�r�r�Zto_sendr�r@r@rA�test_listen_verify�sh

���


�����

����
�z!ConfigDictTest.test_listen_verifycCr�r�)r�r	r��out_of_orderr_r@r@rA�test_out_of_order
r�z ConfigDictTest.test_out_of_ordercCs\t�|j�}d|ddd<|�|�t�d�jd}|�|jtj	�|�|j
jtj�dS)Nz-${asctime} (${name}) ${levelname}: ${message}r+r�r�r�r)
rZdeepcopyr�r�rrr:r�r%r�r��_style�StringTemplateStyle�r>r�r�r@r@rA�#test_out_of_order_with_dollar_style
s

�z2ConfigDictTest.test_out_of_order_with_dollar_stylecC�.|�|j�t�d�jd}|�|jt�dS�Nr�r)r��custom_formatter_class_validaterrr:r�r�r��r>r�r@r@rA�)test_custom_formatter_class_with_validate$
�z8ConfigDictTest.test_custom_formatter_class_with_validatecCrr)r�� custom_formatter_class_validate2rrr:r�r�r�rr@r@rA�*test_custom_formatter_class_with_validate2)
rz9ConfigDictTest.test_custom_formatter_class_with_validate2cCsF|j��}d|ddd<|�|�t�d�jd}|�|jt�dS)Nr�r+r�r�r�r)	rrr�rrr:r�r�r�rr@r@rA�9test_custom_formatter_class_with_validate2_with_wrong_fmt.
s


zHConfigDictTest.test_custom_formatter_class_with_validate2_with_wrong_fmtcCr�r�)r�r	r�� custom_formatter_class_validate3r_r@r@rA�*test_custom_formatter_class_with_validate37
r�z9ConfigDictTest.test_custom_formatter_class_with_validate3cCr�r�)r�r	r��custom_formatter_with_functionr_r@r@rA�,test_custom_formatter_function_with_validate:
r�z;ConfigDictTest.test_custom_formatter_function_with_validatecCs�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)r]r��)r�b�cr�r)r}r�)�g)rHr��jr��lr~r�)�ozcfg://alist�p)ZatupleZalistZadictZnest1Znest2Znest3zcfg://atuple[1]r�zcfg://alist[1]rzcfg://nest1[1][0]rHzcfg://nest2[1][1]z
cfg://adict.dzcfg://adict[f]zcfg://nest3r]zcfg://nosuchzcfg://!zcfg://adict[2])	rr�ZBaseConfiguratorrOZconvert�popr��KeyErrorr	)r>r}Zbcr�r@r@rA�test_baseconfig=
s&�
zConfigDictTest.test_baseconfigcs�ddlm�G�fdd�dtj�}�dddg�}|dd	gd
�}dd||d
�iddgd�d�}t���}|�|�t�d�Wd�n1sGwY|�|�	�d�dS)Nr��
namedtuplecs*eZdZ��fdd�Z�fdd�Z�ZS)z1ConfigDictTest.test_namedtuple.<locals>.MyHandlercst�j|i|��||_dSr�)r2r3�resource)r>rrr�)r7rr@rAr3X
s
z:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__cs$|jd|jj��7_t��|�S�N� )r�r�typer2r�r�r6r@rAr�\
sz6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emitr:r@rr6rA�	MyHandlerW
sr!�Resourcer �labelsZmy_typer)r r#r]Z	myhandler)r�rrqr�r�zsome logzsome log my_type
)
�collectionsrrr3rr\r�r|rOrM)r>r!r"rr�r^r@rrA�test_namedtupleS
s"	��
�


�zConfigDictTest.test_namedtuplecCs�dddddd�idddgd�id	�}t�d�}|�|j�|�|�|�|j�|�d
di�|�|j�|d=|�|�|�|j�dS)Nr]FZconsoler2r�)rWr)rr�)r*rr:r�r*r)rrrrr�r=)r>r�r�r@r@rA�
test_90195r
s,�����


zConfigDictTest.test_90195r�)GrbrcrdrrrLr�r1r
r�r�r�r�r�r�r�r�r�rrrrr�r�r�r�r�r�r�r�r�r�rr	rrr�r�r�r�r�r�r�r�r�rr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
rr
rrr%r&r@r@r@rAr��s�����	������	��������	��������	��������	��������	��������	��������	�����������#����	��������
��������	��������
��	������
��	������	��������������������
����#���������!������������������ �����
����������!����	�������	�������	�������	���!+	
>
	r�c@r�)�ManagerTestcsng�G�fdd�dtj�}t�d�}|�t|jt�|�|�|�d�}|�d�t�d�|�	�dg�dS)NcseZdZd�fdd�	ZdS)z6ManagerTest.test_manager_loggerclass.<locals>.MyLoggerNcs��|�dSr��r�)r>rWr�r�exc_info�extra�Zloggedr@rA�_log�
r�z;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._logra)rbrcrdr,r@r+r@rA�MyLogger�
sr-r�zshould appear in loggedzshould not appear in logged)
r�Logger�Managerr��	TypeError�setLoggerClassrorr{rO)r>r-�manr�r@r+rA�test_manager_loggerclass�
s




z$ManagerTest.test_manager_loggerclasscCs,t�d�}t�}|�|�|�|j|�dSr�)rr/�object�setLogRecordFactoryrOZlogRecordFactory)r>r2rYr@r@rA�test_set_log_record_factory�
s

z'ManagerTest.test_set_log_record_factoryN)rbrcrdr3r6r@r@r@rAr'�
sr'c@rI)�ChildLoggerTestcCs�t��}t�d�}t�d�}|�d�}|�d�}|�|t�d��|�|t�d��|�d�}|�d�}|�d�}|�|t�d��|�|t�d��|�||�dS)	N�abczdef.ghiZxyzzuvw.xyz�defZghi�abc.defzabc.def.ghi)rrZgetChildr[)r>r��l1�l2Zc1Zc2Zc3r@r@rA�test_child_loggers�
s






z"ChildLoggerTest.test_child_loggersN)rbrcrdr=r@r@r@rAr7�
rQr7c@r�)�DerivedLogRecordNr�r@r@r@rAr>�
r�r>c@rX)�LogRecordFactoryTestcCsBGdd�dtj�}t�|�|t�|_|j�|j�t��|_	dS)Nc@r�)z2LogRecordFactoryTest.setUp.<locals>.CheckingFiltercSrSr�)r)r>rr@r@rAr3�
r�z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__cSs,t|�}||jurd||jf}t|��dS)Nz)Unexpected LogRecord type %s, expected %sT)r rr0)r>r�r{r�r@r@rAr��
s
�z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterN)rbrcrdr3r�r@r@r@rA�CheckingFilter�
�r@)
rr�rrBr>r�r+r�ZgetLogRecordFactory�orig_factory)r>r@r@r@rArB�
s


zLogRecordFactoryTest.setUpcCs(|j�|j�t�|�t�|j�dSr�)r+r�r�rrIrr5rBr_r@r@rArI�
s
zLogRecordFactoryTest.tearDowncCs@|�t|jj|���t�t�|j�|���|�	dg�dS)N)rrkrl)
r�r0r+r{r`rr5r>rzr\r_r@r@rA�test_logrecord_class�
s�

�z)LogRecordFactoryTest.test_logrecord_classN)rbrcrdrBrIrCr@r@r@rAr?�
sr?c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Ze�	e
ejd
�d�dd
��Z
e�	e
ejd
�d�dd��Ze�	e
ejd
�d�dd��ZdS)�QueueHandlerTestr�cCs`t�|�t�d�|_tj�|j�|_d|_t�	d�|_
d|j
_|j
�tj
�|j
�|j�dS)Nr�ZqueF)rrB�queue�Queuerr:�QueueHandler�que_hdlrr?r�
que_loggerr�r1ror<r_r@r@rArB�
s
zQueueHandlerTest.setUpcCr�r�)rHrCrrIr_r@r@rArI�
r�zQueueHandlerTest.tearDowncCs�|j�|���|�tj|jj�|j�|���|�tj|jj�|��}|j�|�|j��}|�	t
|tj��|�
|j|jj�|�
|j|jf|df�dSr�)rIr}r`r�rE�Empty�
get_nowaitr|r{r=r;r�	LogRecordrOr?r�r)r>r�rNr@r@rA�test_queue_handler�
s
z#QueueHandlerTest.test_queue_handlercCsx|��}t�tj�}d}|j|j||d�}t�|j�}|j�	|�|j
�|�|j�
�}|�||j�|�||j�dS)Nz {name} -> {levelname}: {message})r?�	levelnamer�)r`rr�ror�r?r5r6rHr8rIr{rErKrOr�r�)r>r�rNZlog_format_strZ
formatted_msgr�Z
log_recordr@r@rA�test_formatting�
s�
z QueueHandlerTest.test_formatting�
QueueListenerz5logging.handlers.QueueListener required for this testcCs�tt���}tj�|j|�}|��z|j�	|�
��|j�|�
��|j�|�
��W|�
�n|�
�w|�|jtjdd��|�|jtjdd��|�|jtjdd��|��tt���}|�tj�tjj|j|dd�}|��z|j�	|�
��|j�|�
��|j�|�
��W|�
�n|�
�w|�|jtjdd��|�|jtjdd��|�|jtjd	d��|��dS)
Nrj)r�r�rlrmT)Zrespect_handler_levelrnrprr)r	rZMatcherrr:rPrEr*rIr{r`rzrr�r=ZmatchesrorkrirCr1r)r>r��listenerr@r@rA�test_queue_listener	s6�z$QueueHandlerTest.test_queue_listenerc
Cs�tj�|j|j�}|��zddWnty1}z|}|jj|�	�|d�WYd}~nd}~ww|jj
|�	�dd�|��|�|j
�����d�d�|�|j
�����d�d�dS)Nr]r�r)T��
stack_infoZ	TracebackZStack)rr:rPrEr4r*�ZeroDivisionErrorrIr�r`rzr�rOr0rMr-r})r>rQr��excr@r@rA�&test_queue_listener_with_StreamHandler,s �� z7QueueHandlerTest.test_queue_listener_with_StreamHandlercCsd|j�|j�|j�|j�tj�|j	|j�}|�
�|j�d�|��|�
|j����d�dS)Nrzzque -> ERROR: error)rHr8r7rIr<r4rr:rPrEr*rzr�rOr0rMr-)r>rQr@r@rA�*test_queue_listener_with_multiple_handlers<sz;QueueHandlerTest.test_queue_listener_with_multiple_handlersN)rbrcrdrLrBrIrMrOrG�
skipUnlessrHrr:rRrXrYr@r@r@rArD�
s$

�
!�
�rDrP)�patchc@sjeZdZ	dZedd��Ze�ej	j
d�dd��Ze�ej	j
d�dd��Zed	d
��Z
dd�Zd
d�ZdS)�QueueListenerTest�cCs�	t�d|�}|�tj�tj�|�}|�|�tj�|�}|��|�	d�|�	d�|�	d�|�	d�|�	d�|�
�|�|�|��dS)Nztest_logger_with_id_%s�one�twoZthreeZfourZfive)
rrr1r2r:rGr<rPr*r|r�rDrC)�	log_queuerfr�r�rQr@r@rA�
setup_and_logUs






zQueueListenerTest.setup_and_logrcCsJt|j�D]}t��}|�|d|��|f�q|�|jd|jd�dS�N�%s_%sr�z&correct number of handled log messages)r�repeatrErFrar�rO�
call_count�r>Zmock_handler�r`r@r@rA�#test_handle_called_with_queue_queuems�z5QueueListenerTest.test_handle_called_with_queue_queuecCsbt��t|j�D]}t��}|�|d|��|f�|��|�	�q	|�
|jd|jd�dSrb)r�*skip_if_broken_multiprocessing_synchronizerrd�multiprocessingrFrar�rCr�rOrerfr@r@rA� test_handle_called_with_mp_queueus
�z2QueueListenerTest.test_handle_called_with_mp_queueccs*�z	|��VqtjygYSwr�)rKrErJ)r`r@r@rA�get_all_from_queue�s�
��z$QueueListenerTest.get_all_from_queuecCs�	t��t|j�D]7}t��}|�|d|��|f�t|�	|��}|�
�|��gtj
jjgg}|�||ddd�|D��q
dS)Nrcz&Found unexpected messages in queue: %scSs"g|]
}t|tj�r
|jn|�qSr@)r;rrLr�)r�r~r@r@rAr��s
��zJQueueListenerTest.test_no_messages_in_queue_after_stop.<locals>.<listcomp>)rrhrrdrirFrar��listrkrCr�rr:rP�	_sentinelr])r>r�rEr�rYr@r@rA�$test_no_messages_in_queue_after_stop�s"����z6QueueListenerTest.test_no_messages_in_queue_after_stopcCs\t��}tj�|�}|��|��|�t��
|�	�Wd�dS1s'wYdSr�)
rErFrr:rPr*r�r�r	Z	task_done)r>r`rQr@r@rA�test_calls_task_done_after_stop�s
"�z1QueueListenerTest.test_calls_task_done_after_stopN)rbrcrdrd�staticmethodrar[r4rr:rPrgrjrkrnror@r@r@rAr\Ms



r\c@s eZdZdd�ZeZdd�ZdS)�UTCcCstSr�)�ZERO�r>�dtr@r@rA�	utcoffset�r�z
UTC.utcoffsetcCsdS)Nrqr@rsr@r@rA�tzname�r�z
UTC.tznameN)rbrcrdruZdstrvr@r@r@rArq�srqc@rI)�AssertErrorMessagec
OsVz|jdg|�Ri|��WdS|y*}z|�|t|��WYd}~dSd}~ww)Nr@)r�rOr�)r>r�r�rr�r�r@r@rA�assert_error_message�s��z'AssertErrorMessage.assert_error_messageN)rbrcrdrxr@r@r@rArw�r�rwc@sfeZdZdd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�
FormatterTestc	Cs8dtjtj�ddd�dddddd�|_d	d	d
ii|_dS)Nzformatter.testr�toz	dummy.extr�zMessage with %d %s)r�Zplaceholders)r?rW�pathname�linenor)�funcr�r�customi�)rr2r�rr��common�variantsr_r@r@rArB�s��
�zFormatterTest.setUpNcCs,t|j�}|dur|�|j|�t�|�Sr�)r/rrFr�rr�)r>r?�resultr@r@rA�
get_record�s

zFormatterTest.get_recordcCs�|��}t�d�}|�|�|�d�t�d�}|�t|j|�|�|���t�d�}|�	|���t�d�}|�	|���t�d�}|�	|���dS)Nz${%(message)s}z${Message with 2 placeholders}z
%(random)s�%(asctime)sz%(asctime)-15sz%(asctime)#15s�
r�rr5rOr�r�r	rZusesTimer=�r>r�r�r@r@rA�test_percent�s




zFormatterTest.test_percentcCs�|��}tjddd�}|�|�|�d�tjddd�}|�t|j|�tjddd�}|�|���tjddd�}|�	|���tjddd�}|�	|���tjd	dd�}|�	|���dS)
Nz
$%{message}%$�{�r��$%Message with 2 placeholders%$z{random}z	{message}�	{asctime}z{asctime!s:15}z{asctime:15}r�r�r@r@rA�test_braces�szFormatterTest.test_bracescCs|��}tjddd�}|�|�|�d�tjddd�}|�|�|�d�tjddd�}|�|�|�d�tjddd�}|�t|j|�|�|���tjd	dd�}|�	|���tjd
dd�}|�	|���tjddd�}|�|���tjddd�}|�	|���dS)N�
${message}r�r�zMessage with 2 placeholdersz$messagez$$%${message}%$$r�z	${random}z
${asctime}z$asctimez${asctime}--r�r�r@r@rA�test_dollars�s$zFormatterTest.test_dollarscCst�d�}|�|jd�t�d�}|�|jd�t�d�}|�|jd�t�d�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�tjd	dd�}|�|jd	�tjd
dd�}|�|jd
�tjddd�}|�|jd�tjddd�}|�|jd�tjd
dd�}|�|jd
�tjddd�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�tjddd�}|�|jd�|�ttjd�|�ttjd�|�ttjd�|�ttjd�|�ttjd�|�ttjd�|�ttjd�|�ttjd �|�ttjd!�|jtd"tjd#dd�|jtd$tjd%dd�|�td&�|jttjd'dd�|jtd(tjd)dd�|jtd*tjd+dd�|jttjd,dd�|jttjd-dd�|jttjd.dd�|jttjd/dd�|jtd0tjd1dd�|jtd2tjd3dd�|jttjd4dd�|jttjd5dd�|jttjd6dd�|jttjd7dd�|jttjd8dd�|jttjd9dd�|jttjd:dd�|jttjd;dd�|jttjd<dd�|jtd=tjd>dd�|jtd=tjd?dd�|jtd=tjd@dd�|jtd$tjddd�|jttjd%dd�|jtd$tjdAdd�|jttjdBdd�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 fieldsr�zinvalid 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 $.rrz	${asctime)rr5rO�_fmtr�r	rx�r>r�r@r@rA�test_format_validates�



������������z"FormatterTest.test_format_validatecCs�gd�}gd�}t||�D]T\}}tj||ddid�}|��}|�|�|�d�|�d�}|�|�|�d�tj||d�}|��}|�t|j|�tj||d	did�}|�d�}|�|�|�d�q
dS)
N)z%(custom)s %(message)sz{custom} {message}z$custom $message)�%r�r�r~ZDefault)r�r,z#Default Message with 2 placeholdersz 1234 Message with 2 placeholdersr�zNon-existing)rQrr5r�rOr�r�r	)r>ZfmtsZstylesr�r�r�r�r@r@rA�test_defaults_parameter�s

�z%FormatterTest.test_defaults_parametercCs|�ttjddd�dS)N�x)r�r	rr5r_r@r@rA�test_invalid_style�sz FormatterTest.test_invalid_stylec
Cs�|��}t�dddddddt�}t�|�d����|_d|_t	�
d�}tj|_|�
|�|�d	�|�
|�|d
�d�|�|�|�
|jd	�dS)N��r��rr�{�%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r��datetime�utcr�mktime�
astimezone�	timetuple�createdZmsecsrr5�gmtime�	converterrO�
formatTimer��asctime)r>r�rtr�r@r@rA�	test_time�s

zFormatterTest.test_timec
CslGdd�dtj�}|��}t�ddddddd	t�}t�|�d����|_	|�}tj
|_|�|�
|�d
�dS)Nc@seZdZdZdZdS)zDFormatterTest.test_default_msec_format_none.<locals>.NoMsecFormatterNz%d/%m/%Y %H:%M:%S)rbrcrdZdefault_msec_formatZdefault_time_formatr@r@r@rA�NoMsecFormatter�sr�r�rr�r�rrr�z21/04/1993 08:03:00)rr5r�r�r�rr�r�r�r�r�r�rOr�)r>r�r�rtr�r@r@rA�test_default_msec_format_none�sz+FormatterTest.test_default_msec_format_nonecCsXtjdddd�}td�D]}t�d�t�dd|d	i�}|�|�}|�d
|�q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 %dr]z.1000)rr5rrrr�r��assertNotIn)r>r�r�r�r[r@r@rA�test_issue_89047�s

�zFormatterTest.test_issue_89047r�)rbrcrdrBr�r�r�r�r�r�r�r�r�r�r@r@r@rAry�s
ryc@r�)�TestBufferingFormattercC�dt|�S)Nz[(%d)�rP�r>�recordsr@r@rA�formatHeader�r�z#TestBufferingFormatter.formatHeadercCr�)Nz(%d)]r�r�r@r@rA�formatFooter�r�z#TestBufferingFormatter.formatFooterN)rbrcrdr�r�r@r@r@rAr��rAr�c@rX)�BufferingFormatterTestcCs"t�ddi�t�ddi�g|_dS)Nr�r^r_)rr�r�r_r@r@rArB�s
�zBufferingFormatterTest.setUpcCs2t��}|�d|�g��|�d|�|j��dS)NrZonetwo)r�BufferingFormatterrOr�r�r�r@r@rA�test_default�sz#BufferingFormatterTest.test_defaultcCsDt�}|�d|�|j��t�d�}t|�}|�d|�|j��dS)Nz[(2)onetwo(2)]z
<%(message)s>z[(2)<one><two>(2)])r�rOr�r�rr5)r>r�Zlfr@r@rA�test_custom�s

z"BufferingFormatterTest.test_customN)rbrcrdrBr�r�r@r@r@rAr��sr�c@rI)�
ExceptionTestcCs�|j}t�}|�|�ztd��tjddd�Y|�|�|��|jd}|�	|j
�d��|�	|j
�d��|�	|j
�d��|�	|j
�d	��dS)
NrKZfailedTrTrz#Traceback (most recent call last):
z!
RuntimeError: deliberate mistake�Stack (most recent call last):
z,logging.exception('failed', stack_info=True))r+�RecordingHandlerr<rLrr�rDrCr�r=Zexc_textr�r�rU)r>r�rHr@r@rArO�s


zExceptionTest.test_formattingN)rbrcrdrOr@r@r@rAr��rQr�c@rI)�LastResortTestc	Cs�|j}|�|j�tj}tj}z�t���"}|�d�|�	|�
�d�|�d�|�	|�
�d�Wd�n1s9wYdt_t���}|�d�d}|�	|�
�|�Wd�n1s_wYt���}|�d�|�	|�
�d�Wd�n1s�wYd|j_
dt_t���}|�d�|�	|�
�d�Wd�n1s�wYW|�|j�|t_|t_dSW|�|j�|t_|t_dS|�|j�|t_|t_w)NzThis should not appearrz
Final chance!zFinal chance!
z-No handlers could be found for logger "root"
F)r+rDr4rZ
lastResortrZrr\r}rOrMr{rZemittedNoHandlerWarningr<)r>rZold_lastresortZold_raise_exceptionsr^r�r@r@rA�test_last_resortsJ


�

�

�

�
�
�zLastResortTest.test_last_resortN)rbrcrdr�r@r@r@rAr�rQr�c@r�)�FakeHandlerc	Cs$dD]
}t|||�|||��qdS)N)r8�flushrCr9)�setattr�record_call)r>�
identifier�calledr
r@r@rAr37s�zFakeHandler.__init__cs���fdd�}|S)Ncs��d�����dS)Nz{} - {})r�r�r@�r�r��method_namer@rA�inner<r�z&FakeHandler.record_call.<locals>.innerr@)r>r�r�r�r�r@r�rAr�;szFakeHandler.record_callN)rbrcrdr3r�r@r@r@rAr�5sr�cr/)r�cs tt|�j|i|��g|_dSr�)r2r�r3r�)r>rr�r6r@rAr3Cs
zRecordingHandler.__init__cCs	|j�|�dSr�)r�r�r�r@r@rArGszRecordingHandler.handle)rbrcrdr3rr;r@r@r6rAr�Asr�cs�eZdZ	�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Z�ZS)!�ShutdownTestcs.tt|���g|_tj}|�ttd|�dS)NrZ)r2r�rBr�rrZr�r�)r>Zraise_exceptionsr6r@rArBPszShutdownTest.setUpcs�fdd�}|S)Ncs���r�r@r@�rzr@rAr�Xsz'ShutdownTest.raise_error.<locals>.innerr@)r>rzr�r@r�rA�raise_errorWszShutdownTest.raise_errorcCsbtd|j�}td|j�}td|j�}ttjj|||g�}tjt|�d�gd�}|�||j�dS)Nrr]r��ZhandlerList)z2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - close�0 - release)	r�r�rfrr�r�r�rlrO)r>Zhandler0Zhandler1Zhandler2r:rYr@r@rA�test_no_failure\szShutdownTest.test_no_failurecCsRtd|j�}t|||�|��tj�|�g}tjt|�d�|�	d|jd�dS)Nrr�r�r�)
r�r�r�r�rr�r�r�rlrO)r>r
rzr�r:r@r@rA�_test_with_failure_in_methodls
z)ShutdownTest._test_with_failure_in_methodcC�|�dt�dS�Nr8�r�rr_r@r@rA�test_with_ioerror_in_acquireur�z)ShutdownTest.test_with_ioerror_in_acquirecCr��Nr�r�r_r@r@rA�test_with_ioerror_in_flushxr�z'ShutdownTest.test_with_ioerror_in_flushcCr��NrCr�r_r@r@rA�test_with_ioerror_in_close{r�z'ShutdownTest.test_with_ioerror_in_closecCr�r��r�r	r_r@r@rA�test_with_valueerror_in_acquire~r�z,ShutdownTest.test_with_valueerror_in_acquirecCr�r�r�r_r@r@rA�test_with_valueerror_in_flush�r�z*ShutdownTest.test_with_valueerror_in_flushcCr�r�r�r_r@r@rA�test_with_valueerror_in_close�r�z*ShutdownTest.test_with_valueerror_in_closecC�dt_|�dt�dS)NFr8�rrZr��
IndexErrorr_r@r@rA�.test_with_other_error_in_acquire_without_raise��z;ShutdownTest.test_with_other_error_in_acquire_without_raisecCr�)NFr�r�r_r@r@rA�,test_with_other_error_in_flush_without_raise�r�z9ShutdownTest.test_with_other_error_in_flush_without_raisecCr�)NFrCr�r_r@r@rA�,test_with_other_error_in_close_without_raise�r�z9ShutdownTest.test_with_other_error_in_close_without_raisecC�dt_|�t|jdt�dS)NTr8�rrZr�r�r�r_r@r@rA�+test_with_other_error_in_acquire_with_raise��
�z8ShutdownTest.test_with_other_error_in_acquire_with_raisecCr�)NTr�r�r_r@r@rA�)test_with_other_error_in_flush_with_raise�r�z6ShutdownTest.test_with_other_error_in_flush_with_raisecCr�)NTrCr�r_r@r@rA�)test_with_other_error_in_close_with_raise�r�z6ShutdownTest.test_with_other_error_in_close_with_raise)rbrcrdrBr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r;r@r@r6rAr�Ls$	r�c@sxeZdZ	dd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�ModuleLevelMiscTestcCs�tjjj}|�|d�|�tj|�t�d�|�tjjjd�|�ttjd�Gdd�d�}|�ttj|��t�d�t��|�tjjjtj	�dS)Nr�SZ
doesnotexistsc@r�)z;ModuleLevelMiscTest.test_disable.<locals>._NotAnIntOrStringNr�r@r@r@rA�_NotAnIntOrString�r�r�ZWARN)
rrrrGrOr�r�r	r0ri)r>�old_disabler�r@r@rA�test_disable�s


z ModuleLevelMiscTest.test_disableNcs�g�t�|td�fdd��t�}tj�|�tt|�}|dur'||d|�n|d|�|�t|j	�d�|j	d}|�|�
�d|�|durJ|ntt|���}|�|j|�|��g�dS)N�basicConfigcs��||f�Sr�r()r�kw�r�r@rA�<lambda>��z/ModuleLevelMiscTest._test_log.<locals>.<lambda>ztest me: %rr]r)
rr[rr�rr<r'rOrPr�Z
getMessage�upperr�)r>r
rW�	recording�
log_methodr�Zexpected_levelr@r�rA�	_test_log�s 

�


zModuleLevelMiscTest._test_logcC�|�dtj�dS�Nry)r�rrkr_r@r@rA�test_log�rzModuleLevelMiscTest.test_logcC�|�d�dS�Nr}�r�r_r@r@rA�
test_debug�r�zModuleLevelMiscTest.test_debugcCr��Nr|r�r_r@r@rA�	test_info�r�zModuleLevelMiscTest.test_infocCr��Nr{r�r_r@r@rA�test_warning�r�z ModuleLevelMiscTest.test_warningcCr��Nrzr�r_r@r@rA�
test_error�r�zModuleLevelMiscTest.test_errorcCr��Nrr�r_r@r@rA�
test_critical�r�z!ModuleLevelMiscTest.test_criticalcCs^|�ttjt�Gdd�dtj�}t�|�|�t��|�t�tj�|�t��tj�dS)Nc@r�)z;ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggerNr�r@r@r@rAr-�r�r-)r�r0rr1r4r.rO�getLoggerClass)r>r-r@r@rA�test_set_logger_class�s
z)ModuleLevelMiscTest.test_set_logger_classc	sg�G�fdd�dt���}t�|�t�d�}|��dg�t��}t�|�}|�|�zD|�	tj
�|�d�|�|���
�d�|�d�|�d�|�	tj�|�d�|�|��d�W|�|�|��t�tj�dS|�|�|��t�tj�w)Ncs&eZdZdejf��fdd�	Z�ZS)z@ModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLoggerr-cst��||���d�dS)N�initialized)r2r3r�)r>r?rW)r7r�r@rAr3�szIModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__)rbrcrdrr�r3r;r@�r�r6rAr-�sr-Zjust_some_loggerrZhellorr)rr�r1rrOr.r/r3r<r1r2r}rMr-�truncater�rqrDrCr.)r>r-r�r0rHr@rrA�test_subclass_logger_cache�s.









�z.ModuleLevelMiscTest.test_subclass_logger_cachecCs>t�d�}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)r�r�rr{r]�r>�codeZrc�out�errr@r@rA�test_logging_at_shutdowns

z,ModuleLevelMiscTest.test_logging_at_shutdowncCsvtj}|�tj|�t�d|�d��}td|�t|dd��}|�|�	��
�d�Wd�dS1s4wYdS)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
        rr�r0zERROR:root:log in __del__)rZTESTFNr�r�r�r�rr4rOrVr�)r>r�r�fpr@r@rA�test_logging_at_shutdown_open&s
�
"�z1ModuleLevelMiscTest.test_logging_at_shutdown_opencCs>t�d�}td|�\}}}|��}|�d|�|�|d�dS)Nz�
            import logging

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

            rec()
        rz#Cannot recover from stack overflow.r])r�r�rr{r�rOrr@r@rA�test_recursion_errorEs

	z(ModuleLevelMiscTest.test_recursion_errorr�)rbrcrdr�r�r�r�r�r�r�r�rrr
rr
r@r@r@rAr��s
r�c@s:eZdZdd�Zdd�Zeddd��Zdd	�Zd
d�ZdS)
�
LogRecordTestcCs6t�i�}t|�}|�|�d��|�|�d��dS)Nz<LogRecord: �>)rr�r�r=r�r�)r>r�r[r@r@rA�test_str_repWs
zLogRecordTest.test_str_repcCsjt�}t��}|�|�ddi}t�d|�|�|jdj|�|�|jdj	d�|�
|�|��dS)NZlessZmorezless is %(less)srzless is more)r�rrr<r{r[r�rrOr�rDrC)r>rHr�r}r@r@rA�
test_dict_arg]s

zLogRecordTest.test_dict_argNc	Cs�tj}|t_zBddl}|��j}t�dd|��i�}t�tj	dd��t�dd|��i�}Wd�n1s7wY||j
|j
d�}W|t_n|t_w|rV|�|�dS|S)Nrr�Zmsg1_riZmsg2_)�processName�r1.processName�r2.processName)r�logMultiprocessingriZcurrent_processr?r�rZ	swap_itemr��modulesrr�)	r�rrFZprev_logMultiprocessingZmpr?�r1�r2�resultsr@r@rA�_extract_logrecord_process_namehs"
��z-LogRecordTest._extract_logrecord_process_namec	Csdtjv}zy|�tjd�d}t�i�}|�|jd�|�d|�}|�d|d�|�d|d�|�d|d�ddl}|�	�\}}|j
|jd	||fd
�}|��|��}|�
d|d�|�|d|d�|�d|d�|��W|r}ddl}dSdS|r�ddl}w)NriTZMainProcessr]rrrrr�r$)r�rrOrrr�rrriZPipeZProcessr*rAZassertNotEqualr�)	r>Zmultiprocessing_importedZLOG_MULTI_PROCESSINGr�rriZparent_connZ
child_connrr@r@rA�test_multiprocessing�s4

�
�
z"LogRecordTest.test_multiprocessingcCs�t�i�}|j}||j�||j�||j�||j�tj}tj}tj	}z1dt_dt_dt_	t�i�}|j
}||j�||j�||j�||j�W|t_|t_|t_	dS|t_|t_|t_	w)NF)rr��assertIsNotNoner�Z
threadName�processr�
logThreads�logProcessesrr`)r>r�ZNOT_NONEZlog_threadsZ
log_processesZlog_multiprocessingZNONEr@r@rA�
test_optional�s2









�zLogRecordTest.test_optionalr�)	rbrcrdrrrprrr r@r@r@rArVs$rcs�eZdZ	�fdd�Z�fdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd8d*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Z�ZS)9�BasicConfigTestcsVtt|���tjj|_tj��|_tj	dd�|_
tjj|_|�
|j�gtj_dSr�)r2r!rBrrr:rrrrr rWr-r�rr_r6r@rArB�s

zBasicConfigTest.setUpcs<tjjdd�D]}tj�|�|��qtt|���dSr�)rrr:rDrCr2r!rIr�r6r@rArI�s
zBasicConfigTest.tearDowncCsJttjd|j�tj��tj�|j�|jtj	dd�<tj�
|j�dS)Nr:)r�rrr:rrErFrr rr1r-r_r@r@rAr�s

zBasicConfigTest.cleanupcCs�t��|�ttjj�d�tjjd}|�|tj�|�|jt	j
�|j}|�|jj
tj�|�|j�|�|jtj�|�tjj|j�dS)Nr]r)rr�rOrPrr:r�r3r0r�r^r�r�r�ZBASIC_FORMATr`r(�PercentStylerWr-)r>r�r�r@r@rA�test_no_kwargs�szBasicConfigTest.test_no_kwargscC�ht���&}tjtjdd�t�d�tj�d�|�|�	��
�d�Wd�dS1s-wYdS)Nr��r0r��Log an errorr�ERROR:root:Log an error�rr�rr�r�r�rzr�rOrMr-r�r@r@rA�test_strformatstyle��

�"�z#BasicConfigTest.test_strformatstylecCr$)Nr�r%r&rr'r(r�r@r@rA�test_stringtemplatestyle�r*z(BasicConfigTest.test_stringtemplatestylecCs�dd�}tjddd�|�ttjj�d�tjjd}|�|tj�tjdddd	�}|�|jj	|jj	�|�|jj
|jj
�|�|||d�dS)
NcS�|��|��t�|�dSr�r�rZh2rr@r@rAr��z.BasicConfigTest.test_filename.<locals>.cleanup�test.logr�)r�r�r]rrr0)rr�rOrPrr:r�rr0�moder?r��r>rr�rYr@r@rA�
test_filename�szBasicConfigTest.test_filenamecCsVdd�}tjddd�tjjd}t�dd�}|�|jj|jj�|�|||d�dS)NcSr,r�rr-r@r@rArr.z.BasicConfigTest.test_filemode.<locals>.cleanupr/�wb�r��filemoder)	rr�rr:rrOr0r0r�r1r@r@rA�
test_filemodeszBasicConfigTest.test_filemodecCs`t��}|�|j�tj|d�|�ttjj	�d�tjj	d}|�
|tj�|�|j|�dS)Nr1r]r)
r.r/r�rCrr�rOrPrr:r�r3r0)r>r0r�r@r@rA�test_streamszBasicConfigTest.test_streamcCs.tjdd�tjjdj}|�|jjd�dS)Nz%(asctime)s - %(message)s)r�r)rr�rr:r�rOr�r��r>r�r@r@rA�test_format&�zBasicConfigTest.test_formatcCs,tjdd�tjjdj}|�|jd�dS)Nrs)r(r)rr�rr:r�rOr(r8r@r@rA�test_datefmt,szBasicConfigTest.test_datefmtcCs.tjdd�tjjdj}|�|jtj�dS)Nr�r�r)rr�rr:r�r�r�rr8r@r@rA�
test_style2r:zBasicConfigTest.test_stylecCsTtjj}|�tjj|�tjdd�|�tjjd�tjdd�|�tjjd�dS)N�9)rW�:)rrrWr�r1r�rO)r>�	old_levelr@r@rA�
test_level8szBasicConfigTest.test_levelcCsp|j}t��g}tj}|ttjd|d�|ttjd|d�|ttj||d�|ttjtjd�tjddd�dS)Nr/)r�r0)r�r:)r0r:)Zloglevelrr4)r�rr3r�r^r	r�rq)r>r�r:r0r@r@rA�test_incompatibleBs

�
�
�z!BasicConfigTest.test_incompatiblecCs�t��t�tj�t��g}t��}|d�|�tj|d�|�|dtjj	d�|�|dtjj	d�|�|dtjj	d�|�
|dj�|�
|dj�|�|dj|�|�|dj|dj�dS)Nr�)r:rr])rr3r�r�r5r8r�r[rr:rr�)r>r:r�r@r@rA�
test_handlersQs
�zBasicConfigTest.test_handlerscCs�t��}t��}t�|�g}t�|�g}tjtj|d�t�d�t�d�t�d�|�	t
tjj�d�tjtj
|dd�t�d�t�d�t�d�|�	t
tjj�d�|�	|����d�|�	|����d	�dS)
Nr�r�r|r}r]T)rWr:ZforcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r.r/rr3r�ror{r|r}rOrPrr:rqrMr-)r>Z
old_string_ioZ
new_string_ioZold_handlersZnew_handlersr@r@rA�
test_forcebs,



�


��zBasicConfigTest.test_forcecCsz^d}tjd|ddtjd�|�ttjj�d�tjjd}|�|tj�|�|j	|�t�
d�W|��tddd	��}|�
���}Wd�n1sMwYt�d�|�|d�dS|��tddd	��}|�
���}Wd�n1szwYt�d�|�|d�w)
Nr�r/r��%(message)s�r�r��errorsr�rWr]r�.The Øresund Bridge joins Copenhagen to Malmör0�rr�r2rOrPrr:r�rr�r}rCr4rVr-r�r�r>r�r�r�rNr@r@rA�
test_encodingws6��
���
�zBasicConfigTest.test_encodingcCsz^d}tjd|ddtjd�|�ttjj�d�tjjd}|�|tj�|�|j	|�t�
d�W|��tdd	d
��}|�
���}Wd�n1sMwYt�d�|�|d�dS|��tdd	d
��}|�
���}Wd�n1szwYt�d�|�|d�w)Nr'r/rrDrEr]rrGr�r0z*The resund Bridge joins Copenhagen to MalmrHrIr@r@rA�test_encoding_errors�s.��
��
z$BasicConfigTest.test_encoding_errorscCs"zdd}tjd|dtjd�|�ttjj�d�tjjd}|�|tj�|�|j	|�|�|j
d�t�d�W|��t
dd	d
��}|����}Wd�n1sSwYt�d�|�|d�dS|��t
dd	d
��}|����}Wd�n1s�wYt�d�|�|d�w)Nr'r/rD)r�r�r�rWr]r�backslashreplaceu<😂: ☃️: The Øresund Bridge joins Copenhagen to Malmör�r0zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)rr�r2rOrPrr:r�rr�rFr}rCr4rVr-r�rrIr@r@rA�test_encoding_errors_default�s.��
��
z,BasicConfigTest.test_encoding_errors_defaultcsRz|d}tjd|ddtjd�|�ttjj�d�tjjd}|�|tj�|�|j	|�|�
|j�g��fdd�}||_t�
d	�|���|�d
�d�W|��tddd��}|����}Wd�n1skwYt�d�|�|d
�dS|��tddd��}|����}Wd�n1s�wYt�d�|�|d
�w)Nr'r/rDrEr]rcs t��\}}}��t|��dSr�)r�r)r�r�)r�r r�rr@rA�dummy_handle_error�szEBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_errorrGz:'ascii' codec can't encode character '\xd8' in position 4:r�r0r)rr�r2rOrPrr:r�rr�r`rFrUr}r=r]rCr4rVr-r�r)r>r�r�rNr�rNr@rrA�test_encoding_errors_none�s>�

��
��
z)BasicConfigTest.test_encoding_errors_noneNcsfg�tj����fdd�}t��td|�tt|�}|dur$||d�n|d����difg�dS)Ncs<��tjj}tj�d���tjj|���||f�dS)N�d)rrrWr1r�r�)rr�r?�r�Zold_basic_configr>r@rA�my_basic_config�s
z2BasicConfigTest._test_log.<locals>.my_basic_configr�ztest mer@)rr�rr[r'rO)r>r
rWrRr�r@rQrAr��s
zBasicConfigTest._test_logcCr�r�)r�rror_r@r@rAr��rzBasicConfigTest.test_logcCr�r�r�r_r@r@rAr��r�zBasicConfigTest.test_debugcCr�r�r�r_r@r@rAr��r�zBasicConfigTest.test_infocCr�r�r�r_r@r@rAr��r�zBasicConfigTest.test_warningcCr�r�r�r_r@r@rAr��r�zBasicConfigTest.test_errorcCr�r�r�r_r@r@rAr��r�zBasicConfigTest.test_criticalr�)rbrcrdrBrIrr#r)r+r2r6r7r9r;r<r@rArBrCrJrKrMrOr�r�r�r�r�r�r�r;r@r@r6rAr!�s:	


"r!csLeZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	�Z
S)�LoggerAdapterTestcs�tt|���tjdd��t�|_tj|_|j�	|j�|�
|jj|j�|�
|jj��fdd�}|�
|�|�
tj
�tj|jdd�|_dS)Ncs�tjdd�<dSr�)rrr@�Zold_handler_listr@rAr	rz(LoggerAdapterTest.setUp.<locals>.cleanup�r�r*)r2rSrBrrr�r�rr�r<r�rDrCr�rx�adapter)r>rr6rTrArB�s
zLoggerAdapterTest.setUpc
C�d}d}zddWnty&}z|}|j�||j�WYd}~nd}~ww|�t|jj�d�|jjd}|�|jtj	�|�|j
|�|�|j|jf�|�|j|j
||jf�dS�Nztesting exception: %rr]r)rVrVr�r�rOrPr�r�rrkr�rr)r7�
__traceback__�r>r�rWr�r�r@r@rA�test_exception�"���z LoggerAdapterTest.test_exceptionc
Cs�zddWnty}z|}WYd}~nd}~ww|jjd|d�|�t|jj�d�|jjd}|�|j|j||j	f�dS)Nr]rz
exc_info testrS)
rVrVr�rOrPr�r�r)r7rY)r>r�rWr�r@r@rA�test_exception_excinfo!s���z(LoggerAdapterTest.test_exception_excinfocCshd}|j�||j�|�t|jj�d�|jjd}|�|jtj�|�|j	|�|�|j
|jf�dS)Nzcritical test! %rr]r)rVrr�rOrPr�r�rrir�r)r>r�r�r@r@rAr�.szLoggerAdapterTest.test_criticalcCsD|jjjj}d|jjj_|�t|jjjd|�|�|j�d��dS)N�!rG� )rVr�rrGr�r�r�isEnabledFor�r>r�r@r@rA�test_is_enabled_for8s�z%LoggerAdapterTest.test_is_enabled_forcCsN|�|j���|jjD]}|j�|�q|�|j���|�|j���dSr�)r=rVr9r�r:rDrrr@r@rA�test_has_handlers?s
z#LoggerAdapterTest.test_has_handlerscCsRGdd�dtj�}d}||jdd�}||dd�}d|_|�t|�t|��|�tj||j�|�t	|jj
�d�|jj
d}|�|jtj�|�|jd|���|�|j
|jf�|j}|�|j|�|�|jj|�t�}z||_|�|j|�|�|j|�|�|jj|�W||_n||_w|�|j|�|�|j|�|�|jj|�dS)	Nc@seZdZdZdd�ZdS)z.LoggerAdapterTest.test_nested.<locals>.Adapter�AdaptercSs|j�d|��|fSr�r�)r>r�r�r@r@rArL�z6LoggerAdapterTest.test_nested.<locals>.Adapter.processN)rbrcrdr�rr@r@r@rArdIsrdzAdapters can be nested, yo.rUZAdapterAdapterr]rzAdapter AdapterAdapter )rrxr�r�rOrcryrir�rPr�r�r�rrr[r4)r>rdr�rVZadapter_adapterr�Zorig_managerZtemp_managerr@r@rA�test_nestedHs2zLoggerAdapterTest.test_nested)rbrcrdrBr[r]r�rbrcrgr;r@r@r6rArS�s

	rScs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Z�ZS)#�
LoggerTestcsbtt|���t�|_tjdd�|_|j�|j�|�	|jj
|j�|�	|jj�|�	tj�dS)NZblah�r?)
r2rhrBr�r�rr.r�r<r�rDrCr�r_r6r@rArBlszLoggerTest.setUpcCs,|�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)rxr0r�r1r_r@r@rA�test_set_invalid_levelus��z!LoggerTest.test_set_invalid_levelc
CrWrX)rVr�r�r�rOrPr�r�rrkr�rr)r7rYrZr@r@rAr[}r\zLoggerTest.test_exceptioncCsHt�tdd��|�t|jjdd�Wd�dS1swYdS)NrZTrv�test message)r�	swap_attrrr�r0r�ryr_r@r@rA�!test_log_invalid_level_with_raise�s"�z,LoggerTest.test_log_invalid_level_with_raisecCsBt�tdd��|j�dd�Wd�dS1swYdS)NrZFrvrk)rrlrr�ryr_r@r@rA�test_log_invalid_level_no_raise�s"�z*LoggerTest.test_log_invalid_level_no_raisecsPg�t�|tjd�fdd��|jjdd�|�t��d�|�d�d�dS)	N�print_stackcs��|���Sr�)r�rM)r�r�r�r@rAr��r�z=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>TrTr]r�r)rr[r�	tracebackr�Z
findCallerrOrPr_r@r�rA� test_find_caller_with_stack_info�s
�z+LoggerTest.test_find_caller_with_stack_infocsd���fdd���fdd���fdd�}�jj}|���|djd	�|dj}�d7�|���|djd
���|dj|�|dj}�d7�|���|djd���|dj|�|dj}�d7�|���|djd���|dj|�dS)
Nr]cs�jjd�d�dS)Nr�)�
stacklevel)r�r{r@)r>�	the_levelr@rA�	innermost�rfz>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermostc�
��dSr�r@r@)rtr@rAr��r�z:LoggerTest.test_find_caller_with_stacklevel.<locals>.innercrur�r@r@)r�r@rA�outer�r�z:LoggerTest.test_find_caller_with_stacklevel.<locals>.outerr�rtr�rv� test_find_caller_with_stacklevel)r�r�rOrvr|rC)r>rvr�r|r@)r�rtr>rsrArw�s,


z+LoggerTest.test_find_caller_with_stacklevelc
Cs�d}d}d}}}}}}}	t�|||||||||	�	}
dt|
j���D]}|di}|jt|jj|||||||||	d�q(dS)N�	my record�
)r�r��
some value�r*�sinfo)	rZ_logRecordFactoryrT�__dict__�keysr�rr��
makeRecord)
r>r?rWr�lnor�rr)r}r|Zrvr�r*r@r@rA�%test_make_record_with_extra_overwrite�s�
��z0LoggerTest.test_make_record_with_extra_overwritecCs\d}d}d}}}}}}}	ddi}
|jj||||||||
|	d�	}|�d|j�dS)NrxryZ	valid_keyrzr{)r�rr]r})r>r?rWrr�r�rr)r}r|r*r�r@r@rA�(test_make_record_with_extra_no_overwrite�s�z3LoggerTest.test_make_record_with_extra_no_overwritecCs>|�|j���|jjD]}|j�|�q|�|j���dSr�)r=r�r9r:rDrrr@r@rArc�szLoggerTest.test_has_handlerscCs"t�d�}d|_|�|���dS)Nz
blah.childF)rrr�rr9)r>Zchild_loggerr@r@rA�test_has_handlers_no_propagate�s
z)LoggerTest.test_has_handlers_no_propagatecCs>|jjj}d|jj_|�t|jjd|�|�|j�d��dS)N�rG�)r�rrGr�r�rr`rar@r@rArb�s

zLoggerTest.test_is_enabled_forcCs`|jj}|jjj}d|j_d|jj_|�t|jd|�|�t|jjd|�|�|j�d��dS)NTr�rrGr�)r�rrrGr�r�rr`)r>Zold_disabledr�r@r@rA�#test_is_enabled_for_disabled_logger�s

z.LoggerTest.test_is_enabled_for_disabled_loggercCs�t��}|�|tj�|�|t�d��|�|t�d��|�|t�d��|�|t�d�j�|�|t�d�j�|�|t�d�j�|�|t�d��|�|t�d�j�dS)Nrrrr�foo.bar�)rrr[r�parentZassertIsNot)r>rr@r@rA�test_root_logger_aliases�sz#LoggerTest.test_root_logger_aliasescCs$|�ttjt�|�ttjd�dS)Nsfoo)r�r0rr�anyr_r@r@rA�test_invalid_namesszLoggerTest.test_invalid_namescCsNttjd�D]}dD]}t�|�}t�||�}t�|�}|�||�qqdS)Nr])rrrrr�zbaz.bar)rrCZHIGHEST_PROTOCOLrrr�rDr[)r>�protor?r�r[Z	unpickledr@r@rA�
test_picklings

��zLoggerTest.test_picklingcCs6|j}t�d�}t�d�}|�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��t��|�|��tj�|�|ji�|�|ji�|�|ji�|�
|�	tj��|�
|�	tj��|�
|�	tj��dS)Nr8r:TF)r+rrr1rkrOr,�_cacher=r`rr2rir�rG)r>rr)r*r@r@rA�test_cachingsH

zLoggerTest.test_caching)rbrcrdrBrjr[rmrnrqrwr�r�rcr�rbr�r�r�r�r�r;r@r@r6rArhjs$	

	
rhc@r~)
�BaseFileTestcCs0t�|�t�dd�\}|_t�|�g|_dS)Nr#ztest_logging-2-)rrBr�r�rr�rC�rmfiles)r>rr@r@rArBHs


zBaseFileTest.setUpcCs>|jD]}t�|�qtj�|j�rt�|j�t�|�dSr�)r�r�r�rrrrrI)r>rr@r@rArINs

zBaseFileTest.tearDowncCs,	|jtj�|�d|d�|j�|�dS)NzLog file %r does not exist�r�)r=r�rrr�r�)r>r�r@r@rA�
assertLogFileUs
�zBaseFileTest.assertLogFilec
Cst�dtjdd|��ddd�S)Nr�rr])rrLr2r`r_r@r@rA�next_rec[s�zBaseFileTest.next_recN)rbrcrdrBrIr�r�r@r@r@rAr�Esr�c@r�)�FileHandlerTestcCszt�|j�tj|jddd�}|�|j�|�tj�	|j��|�
t�i��|�|j�|�
tj�	|j��|��dS)Nr�Tr�)r�r�rrrr`r0rrrrr�rr=rC)r>�fhr@r@rA�
test_delay`szFileHandlerTest.test_delaycCs�t�|j�tj|jddd�}|�t�d��|�|���|�	�|�|���t
|j��}|�|���
�d�Wd�dS1sDwYdS)Nr�r)r�r0rDrj)r�r�rrrr8r5r�r�rCr4rOrVr-)r>r�rr@r@rA�%test_emit_after_closing_in_write_modejs"�z5FileHandlerTest.test_emit_after_closing_in_write_modeN)rbrcrdr�r�r@r@r@rAr�_s
r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Ze�	�dd��Z
d
S)�RotatingFileHandlerTestcCs`tjj|jddd�}|�|�d��|��tjjtjddd�}|�|�|�	���|��dS)Nr�r�r��maxBytesr])
rr:rrr�shouldRolloverrCr��devnullr��r>�rhr@r@rA�test_should_not_rollovervs��z0RotatingFileHandlerTest.test_should_not_rollovercCs4tjj|jddd�}|�|�|����|��dS)Nr�r]r�)rr:rrr=r�r�rCr�r@r@rA�test_should_rollover�sz,RotatingFileHandlerTest.test_should_rollovercCs8tjj|jdd�}|�|���|�|j�|��dS)Nr�r0)rr:rrr�r�r�rCr�r@r@rA�test_file_created�sz)RotatingFileHandlerTest.test_file_createdcCs�dd�}tjj|jdddd�}||_|�|���|�|j�|�|���|�||jd��|�|���|�||jd��|�t	j
�||jd	���|��dS)
NcS�|dS�N�.testr@rir@r@rA�namer�rPz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namerr�r�r]�r��backupCountr��.1�.2�.3)
rr:rrr�r�r�r�rr�rrrC)r>r�r�r@r@rA�test_rollover_filenames�s
�z/RotatingFileHandlerTest.test_rollover_filenamescCs�Gdd�dtjj�}||jdddd�}|�|�|j�|jd�|�|���|�|j�|�|���|�|�|jd�d	�|�	t
j�|�|jd���|�
�dS)
Nc@r�)zZRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotatorcSs|dSr�r@)r>r?r@r@rAr��rPz`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namercSs$tj�|�rt�||d�dSdS)N�.rotated)r�rrr)r>�source�destr@r@rA�rotator�s�zbRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotatorN)rbrcrdr�r�r@r@r@rA�HandlerWithNamerAndRotator�rAr�r�r�r]r�r�r�r�)rr:rrrOr�r�r�r�rr�rrrC)r>r�r�r@r@rA�test_namer_rotator_inheritance�s
�z6RotatingFileHandlerTest.test_namer_rotator_inheritancecCs�dd�}dd�}tjj|jdddd�}||_||_|��}|�|�|�|j�|��}|�|�||jd	�}|�|�t	j
}t|d
��}|��}	t
�|	�}
|�|
�d�|j|�Wd�n1sewY|�|���||jd�}|�|�t|d
��}|��}	t
�|	�}
|�|
�d�|j|�Wd�n1s�wY|�|���||jd�}t|d
��}|��}	t
�|	�}
|�|
�d�|j|�Wd�n1s�wY|�t	j�||jd
���|��dS)NcSr�)Nz.gzr@rir@r@rAr��rPz3RotatingFileHandlerTest.test_rotator.<locals>.namerc	Ss�t|d��,}|��}t�|d�}t|d��
}|�|�Wd�n1s%wYWd�n1s4wYt�|�dS)N�rbr�r3)r4rV�zlib�compressrOr�r)r�r�ZsfrN�
compressedZdfr@r@rAr��s���z5RotatingFileHandlerTest.test_rotator.<locals>.rotatorr�r�r]r�r�r�r'r�r�)rr:rrr�r�r�r�r�r��linesepr4rVr��
decompressrOr{r�rrrrC)r>r�r�r�Zm1Zm2r�newliner�r�rNr@r@rA�test_rotator�sJ
�



�

�
�z$RotatingFileHandlerTest.test_rotatorN)rbrcrdr�r�r�r�r�rZ
requires_zlibr�r@r@r@rAr�usr�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TimedRotatingFileHandlerTestcCsJtjjtjdddd�}t�d�t�ddi�}|�|�	|��|�
�dS)N�Sr�r]�r�r�皙�����?r�ztesting - device file)rr:rr�r�rrr�rr�rC)r>r�r�r@r@rAr��s
�
z5TimedRotatingFileHandlerTest.test_should_not_rolloverc	s�tjj|jdddd�}t�d�}|�|�t�ddi�}|�|�|�|j�t	�
d�t�dd	i�}|�|�|��d
}tj�
�}d}t|�D]"}|tj|d�}	|j|	�d
��tj���}|rk|j���nqId|}
|s�tj�|j�\}��fdd�t�|�D�}td|�d�tjd�td|tjd�|D]*}
td|
�tj�||
�}t|d��}t|���Wd�n1s�wYq�|j||
d�dS)Nr�r�r]r�r�r�ztesting - initialr�ztesting - after delayFi,�Zsecondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondscsg|]	}|���r|�qSr@)r�)r�r��rr@rAr�sz>TimedRotatingFileHandlerTest.test_rollover.<locals>.<listcomp>z
Test time: %sz%Y-%m-%d %H-%M-%S�r�zThe only matching files are: %szContents of %s:r�r�)rr:rrr5r8r�r�r�rrrCr�rNr�	timedelta�strftimer�rrr�r�r��listdirr,r�r^r�r4rVr=)r>r�r�rr�foundrN�GO_BACK�secs�prevr�Zdn�filesr�rZtfr@r�rA�
test_rollover�sJ
�





���z*TimedRotatingFileHandlerTest.test_rollovercCsX|j}|ttjj|jdddd�|ttjj|jdddd�|ttjj|jdddd�dS)N�Xr�Tr��WZW7)r�r	rr:rr)r>r�r@r@rA�test_invalids

�

�


�z)TimedRotatingFileHandlerTest.test_invalidc	Cs�d}t�ddd�}tjj|jddddd|d�}z#|�|�}|�||d�|�|d	�}|�||d
�W|��dS|��w)Nr�r��MIDNIGHTr]T�r��when�intervalr�r��atTime��жi@�)	r�rrr:rr�computeRolloverrOrC)r>�currentTimer�r�rXr@r@rA�"test_compute_rollover_daily_attimes�
z?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attimec	
Cs8tt���}||d}t�ddd�}t�|�j}td�D]|}tjj|j	dd|ddd|d	�}ze||kr;d||}n||}|d9}|d
7}||7}|�
|�}||krbtdtj�tdt
��|�||�||krp|d
7}|�
|d�}||kr�tdtj�tdt
��|�||�W|��q|��wdS)N�Qr�r�r�zW%dr]Tr�r�zfailed in timezone: %dzlocal vars: %si�:	r�)rorr�r��tm_wdayrrr:rrr�r,�timezone�localsrOrC)	r>r�Ztodayr�ZwdayZdayr�rYrXr@r@rA�#test_compute_rollover_weekly_attime.s<�
�z@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attimec	Cs�tjdd�}|�tj|�g}tj��}td�D]}|�|�	d��|tj
dd�7}qd}g}g}|D]B}tj�
|d|�}	tjj|	d	dd
dd�}
|�|
�|�d
�rb|D]}|�d||f�qUq3dd�|
_|D]}|�d||f�qiq3|D]}tj�
||�}	t|	d��}
Wd�n1s�wYqxt|�D]\\}}||}
|
��}|�t|�d�|�d
�r�d|}	|D]}tj�|�\}}|�|�|	��q�q�|D]&}tj�|�\}}|�|�d��|�|�|d�o�|t|�d���q�q�dS)Nr$rer�z%Y-%m-%d_%H-%M-%Sr�r�)�a.bza.b.czd.ezd.e.fz%s.logr[r�T)r�r�r�r�r�z	%s.log.%scSs|�dd�dS)Nr#r)rrir@r@rAr�mszKTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.<lambda>z	%s.%s.logr3rz%s.log.r#r�r�)r�Zmkdtempr��shutilZrmtreer�rNrr�r�r�r�rr�rr:rr�r�r4�	enumerateZgetFilesToDeleterOrPr�r=r��isdigit)r>Zwd�timesrtr��prefixesr�Zrotatorsr�rr�r{rr�Z
candidatesrr}r@r@rA�test_compute_files_to_deleteVsd

�

�
���
����z9TimedRotatingFileHandlerTest.test_compute_files_to_deleteN)	rbrcrdr�r�r�r�r�r�r@r@r@rAr��s
*	(r�cKstjdi|��tjdd�S)Nr]r�r@)r�r�)r�r@r@rAr��sr�)r�r])�M�<)�Hi)�Dr�)r�r�ZW0r�)ZdaysZhoursc

CsVtjj|jd|dddd�}d}|�|�}||kr�|dkr�zg|jr&t�|�}nt�|�}|d}|d	}|d
}	tjj	|d|d|	}
||
}t
d||jftjd
�t
d|tjd
�t
d|tjd
�t
d|	tjd
�t
d|
tjd
�t
d|tjd
�Wnt
y�}zt
d|tjd
�WYd}~nd}~ww|�||�|��dS)Nr�r]rT)r�r�r�r�r�gr�rrr�r�z
t: %s (%s)r�zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rr:rrr�r�rr��	localtimeZ	_MIDNIGHTr,r�r^r+rOrC)
r>r��expr�r�rXr{ZcurrentHourZ
currentMinuteZ
currentSecondr�r�r�r@r@rA�test_compute_rollover�sD�

�����r�ztest_compute_rollover_%sz>win32evtlog/win32evtlogutil/pywintypes required for this test.c@rI)�NTEventLogHandlerTestc
Cs�d}t�d|�}t�|�}ztj�d�}Wntjy-}z|jdkr(t	�
d���d}~wwt�ddi�}|�|�|�
�|�|t�|��tjtjB}d}d}	t�|||	�}
|
D]}|jdkrbqZt�||�}|d	krmqZd
}d|	}|j||d�dS)
NZApplicationZtest_loggingr�z#Insufficient privileges to run testr�zTest Log MessageFrPzTest Log Message
Tz3Record not found in event log, went back %d recordsr�)�win32evtlogZOpenEventLogZGetNumberOfEventLogRecordsrr:ZNTEventLogHandler�
pywintypesrzZwinerrorrGZSkipTestr�rrCZ
assertLessZEVENTLOG_BACKWARDS_READZEVENTLOG_SEQUENTIAL_READZReadEventLogZ
SourceName�win32evtlogutilZSafeFormatMessager=)r>ZlogtypeZelhZnum_recsrHr�r��flagsr�r�Zeventsr�r@r@rAr��s>


��
�
z NTEventLogHandlerTest.test_basicN)rbrcrdr�r@r@r@rAr��r�r�c@rI)�MiscTestCasecCshd�}tj|t|d�dS)N>
Zcurrentframer'rZFiltererr"ZStrFormatStylerrrrr/ZPlaceHolderZ
RootLogger)�not_exported)rZcheck__all__r)r>r�r@r@rA�test__all__�szMiscTestCase.test__all__N)rbrcrdr�r@r@r@rAr��rQr�cCs*t�dd�}|��t�|jddd�dS)N�LC_ALLr)rZrun_with_locale�	__enter__rGZaddModuleCleanup�__exit__)�cmr@r@rA�setUpModule�sr��__main__r�)�rZlogging.handlersZlogging.configr�r�rr�rrCr.r�r�r�rErrJr�rirBr�r�Ztest.support.script_helperrrr�rZtest.supportrrrrZtest.support.logging_helperr	r�r'rrGr�r�Zhttp.serverr
rZurllib.parserr
Zsocketserverrrrrr��simplefilter�DeprecationWarningr~rgr�r�r�rxr�ZTestCaserrer�ZSILENTr�ZTERSEZEFFUSIVEr�r�Z	TALKATIVEr�Z
CHATTERBOXZBORINGrr�r�r�r�r�r�r�r4rJr3rRrVrYrhrer�r�r�r�rHr�r�r�r�r5r�r�r2rPrZrRrYr`rbrgZIPV6_ENABLEDrhrkrr�r�r�r�r�r�r�r'r7rLr>r?rDr:riZ
unittest.mockr[r\r�rrZtzinforqr�rwryr�r�r�r�r�r�r�r�r�r�rr!rSrhr�r�r�r�r�r�r�r�r�r�r�r�rb�mainr@r@r@rA�<module>sz

���mF�
YT,J2)/ hdY@C�M41
(v#k
`	'W4hBl\k(�!
#
�