HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/test/__pycache__/test_logging.cpython-310.opt-2.pyc
o

�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@�./usr/local/lib/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>�fatalr@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��linux�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�rrCr�pathlib�Pathr�FileHandlerr:�RotatingFileHandler�TimedRotatingFileHandlerr�r�rr=rr)r>r
rZpfn�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�)	�rangerr�time�
deletion_timer
�sleep�random�randint)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_timer r�r�rrC�	threading�Thread�daemon�startrr:rr5r8rrr!r�r�	Exception�printr�rrr)r>r%Z	del_countZ	log_countr�r
rZremoverrHr�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@rAr7�s
�zJHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__cSs4|j��z|j�|�W|j��dS|j��wr�)r9�acquirer��releaser�r@r@rAr��s
zFHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit�rbrcrdr7r��
__classcell__r@r@r:rA�_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��?)rrr<�set�waitr=r(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/)�exitcode)rr�rOrPrr�r9r0rCr?�
assertGreater�_at_fork_reinit_lock_weaksetrr<r1r2r+�Eventr,r.rDrr2r|�_exitrCr�rZwait_process)r>r@Ztest_loggerrFZlock_holder_thread�pidr@rErArA�s:


�
z,HandlerTest.test_post_fork_child_no_deadlockN)
rbrcrdr�rr�unittestZskipIfrr?r1�hasattrrAr@r@r@rAr�s6
0r�c@�eZdZdd�ZdS)�	BadStreamcCstd��)N�deliberate mistake)�RuntimeError�r>�datar@r@rA�write��zBadStream.writeN)rbrcrdrUr@r@r@rArP��rPc@rO)�TestStreamHandlercC�
||_dSr�)�error_recordr�r@r@rA�handleError�r�zTestStreamHandler.handleErrorN)rbrcrdr[r@r@r@rArX�rWrXc@seZdZejZdZdS)�StreamWithIntNamer�N)rbrcrdrr��levelr?r@r@r@rAr\�sr\c@�$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)rXrPrr��raiseExceptionsr�assertIsrZr3r�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/�	setStreamrar�rd�assertIsNone)r>rHr0�oldrXr@r@rA�test_stream_settings


z%StreamHandlerTest.test_stream_settingcCs t�t��}|�t|�d�dS)Nz<StreamHandler 2 (NOTSET)>)rr3r\rO�reprr�r@r@rA�'test_can_represent_stream_with_int_name"sz9StreamHandlerTest.test_can_represent_stream_with_int_nameN)rbrcrdrerirkr@r@r@rAr_�sr_c@s6eZdZ	dd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�TestSMTPServercCsBtjj||d|dd�|j��d|_||_d|_d|_||_	dS)NT)�mapZdecode_datar]F)
�smtpd�
SMTPServerr7�socket�getsockname�port�_handler�_thread�_quit�
poll_interval)r>�addrr�rv�sockmapr@r@rAr7>s�
zTestSMTPServer.__init__cCs	|�||||�dSr�)rs)r>�peer�mailfrom�rcpttosrTr@r@rA�process_messageGs	zTestSMTPServer.process_messagecC�.	tj|j|jfd�|_}d|_|��dS�Nr(T�r+r,�
serve_foreverrvrtr-r.�r>�tr@r@rAr.S��zTestSMTPServer.startcCs(	|jstj||jdd�|jrdSdS)Nr])rm�count)ru�asyncoreZloop�_map�r>rvr@r@rAr�\s�zTestSMTPServer.serve_forevercCs6	d|_t�|j�d|_|��tj|jdd�dS)NT)rmZ
ignore_all)rur�join_threadrtrCr�Z	close_allr�r_r@r@rA�stopgszTestSMTPServer.stopN)rbrcrdr7r|r.r�r�r@r@r@rArl)s		rlcs6eZdZ	dd�Zdd�Z�fdd�Zdd�Z�ZS)	�ControlMixincCs d|_||_||_t��|_dSr�)rtrvrsr+rJ�ready)r>r�rvr@r@rAr7�szControlMixin.__init__cCr}r~rr�r@r@rAr.�r�zControlMixin.startcs 	|j��tt|��|�dSr�)r�rCr6r�r�r�r:r@rAr��s
zControlMixin.serve_forevercCs<	|��|jdurt�|j�d|_|��|j��dSr�)�shutdownrtrr��server_closer�rEr_r@r@rAr��s
zControlMixin.stop)rbrcrdr7r.r�r�r?r@r@r:rAr�ss	r�c@s$eZdZ			ddd�Zdd�ZdS)	�TestHTTPServerrBFNcs<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���serverrsr_r@r@rAr���zMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_requestcs$�rt�|�j|g|�R�dSdSr�)r6�log_message)r>�formatr)�DelegatingHTTPRequestHandlerr;ryr@rAr��s����zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_messager�)rbrcrdr�r�r�r?r@�r�ryr:rAr��s
r�)rr
r7r��sslctx)r>rwr�rvryr�r@r�rAr7�s

zTestHTTPServer.__init__c
Csdz|j��\}}|jr|jj|dd�}W||fSW||fSty1}z	tj�d|��d}~ww)NT)Zserver_sidezGot an error:
%s
)rp�acceptr�Zwrap_socketr
r�rdrU)r>�sockrw�er@r@rA�get_request�s����zTestHTTPServer.get_request)rBFN)rbrcrdr7r�r@r@r@rAr��s

�r�cs0eZdZ	dZ		ddd�Z�fdd�Z�ZS)�
TestTCPServerTrBcCs2Gdd�dt�}t�||||�t�|||�dS)Nc@rO)z;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlercSr�r�r�r_r@r@rAr�r�zBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handleN)rbrcrdrr@r@r@rA�DelegatingTCPRequestHandler��r�)rrr7r�)r>rwr�rv�bind_and_activater�r@r@rAr7�s

�zTestTCPServer.__init__c�"tt|���|j��d|_dS�Nr])r6r��server_bindrprqrrr_r:r@rAr���zTestTCPServer.server_bind�rBT)rbrcrdZallow_reuse_addressr7r�r?r@r@r:rAr��s
�
r�cs8eZdZ			d	dd�Z�fdd�Z�fdd�Z�ZS)
�
TestUDPServerrBTcs<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�)ZwfilerMr6�finishr
r��_closedrS)�DelegatingUDPRequestHandlerr;r@rAr�s
���zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finish)rbrcrdrr�r?r@�r�r:rAr�sr�F)rrr7r�r�)r>rwr�rvr�r@r�rAr7�s�
zTestUDPServer.__init__cr�r�)r6r�r�rprqrrr_r:r@rAr�r�zTestUDPServer.server_bindcstt|���d|_dS)NT)r6r�r�r�r_r:r@rAr�s
zTestUDPServer.server_closer�)rbrcrdr7r�r�r?r@r@r:rAr��s
�r��AF_UNIXc@�eZdZejZdS)�TestUnixStreamServerN�rbrcrdrpr��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)�timeoutr�u	Hello ✓r]z
Subject: Log
u

Hello ✓)rlrZHOSTr|r.rrrr:ZSMTPHandler�TIMEOUTrOZtoaddrs�messagesr�r+rJ�handledrrDr�r=�is_setrPrc�endswithrC)
r>rxr�rwrHr�ryrzr{rTr@r@rA�
test_basic)s0��

zSMTPHandlerTest.test_basiccGs|j�|�|j��dSr�)r��appendr�rC)r>rr@r@rAr|AszSMTPHandlerTest.process_messageN)rbrcrdrZLONG_TIMEOUTr�r�r|r@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@r^)zZMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandlercSs||_g|_dSr�)r��threads)r>r�r@r@rAr7�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)rbrcrdr7r�rr@r@r@rA�MockRaceConditionHandler�sr�r�r*znot flushedZflushed)r�r�rrr!r�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>�eir@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�rkrlr5�
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��configparser�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�r5�	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�rz#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��config4rrrR�	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_okcCrr)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�)rirmr5�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��h1rr@r@rA�cleanup1�z/ConfigFileTest.test_config8_ok.<locals>.cleanupr'�test_logging-X-r�\z\\)r�r)�check_no_resource_warningr�r�rrCr?�replace�config8r�r�r�rootr:r�)r>r!r
rr'r�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�rrU�encoderCrr�r��dictr)r>Zinir
rr@r@rA�!test_defaults_do_no_interpolationgs.�
����z0ConfigFileTest.test_defaults_do_no_interpolationN) rbrcrdrr%rLr��config1rr&r�rrrrrr'r+r�r�r�r�rrr
rrrr)r-r/r<r@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.r
r�rDrr:Z
SocketHandler�
isinstance�server_addressrTrr�
log_outputr+rDr<r+�	Semaphorer��r>r�r�Zhclsr@r@rArB�s,

���
zSocketHandlerTest.setUpc	Cs^	z'|jr|j�|j�|j��|jr!|j��Wt�|�dSWt�|�dSt�|�wr�)rBr+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�
)
�
connection�recvrP�struct�unpack�pickle�loadsrr�rIr�r�r=)r>�request�conn�chunk�slen�objr�r@r@rArF�s

�


�zSocketHandlerTest.handle_socketcCsV|jr	|�|j�t�d�}|�d�|j��|�d�|j��|�|j	d�dS)NZtcpr��eggs�
spam
eggs
)
rC�skipTestrrrzr�r<r}rOrIr,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)rCr[rBZ
retryStartr�r�rRr+rrzrrHZ	retryTimer!)r>�nowr@r@rA�
test_noserver�s
�zSocketHandlerTest.test_noserverN)rbrcrdr�rDrErBrIrFr\r^r@r@r@rAr>�sr>cCs*tjddd�\}}t�|�t�|�|S)Nr0z.sockr1)r�r�rrCr)r
rr@r@rA�_get_temp_domain_socket�s

r_zUnix sockets requiredc@�,eZdZ	eed�reZdd�Zdd�ZdS)�UnixSocketHandlerTestr�cC�t�|_t�|�dSr�)r_rEr>rBr_r@r@rArB��zUnixSocketHandlerTest.setUpcC�t�|�t�|j�dSr�)r>rIrrrEr_r@r@rArI�
zUnixSocketHandlerTest.tearDownN)	rbrcrdrNrpr�rDrBrIr@r@r@rAra��
rac@�6eZdZ	eZdZdd�Zdd�Zdd�Zdd	�Z	d
S)�DatagramHandlerTestr?c
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��|_dSr@)rrBr�rBrCrDrE�handle_datagramr.r
r�rDrr:ZDatagramHandlerrGrHrTrrrIr+rDr<r+rJr�rKr@r@rArB
s,

���
zDatagramHandlerTest.setUpc	C�^	z'|jr
|j��|jr!|j�|j�|j��Wt�|�dSWt�|�dSt�|�wr�)r�r�rBr+rDrCrrIr_r@r@rArI'�
�zDatagramHandlerTest.tearDowncCsTt�dd�}|jt|�d�}t�|�}t�|�}|j|j	d7_|j
��dS)NrLrrM)rP�pack�packetrPrRrSrr�rIr�r�rC)r>rTrWrmrXr�r@r@rAri2s

z#DatagramHandlerTest.handle_datagramcCs`|jr	|�|j�t�d�}|�d�|j��|j��|�d�|j��|�|j	d�dS)NZudpr�rYrZ)
rCr[rrrzr�rDrErOrIr,r@r@rAr\:s





zDatagramHandlerTest.test_outputN�
rbrcrdr�rDrErBrIrir\r@r@r@rArhsrhc@r`)�UnixDatagramHandlerTestr�cCrbr�)r_rErhrBr_r@r@rArBNrczUnixDatagramHandlerTest.setUpcCrdr�)rhrIrrrEr_r@r@rArISrez UnixDatagramHandlerTest.tearDownN�	rbrcrdrNrpr�rDrBrIr@r@r@rAroFrfroc@rg)�SysLogHandlerTestr?c
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)NrAr�)rrBr��sl_hdlrrCrDrErir.r
r�rDrr:r	rGrHrTrrrIr+rDr<r+rJr�rKr@r@rArB^s,

���
zSysLogHandlerTest.setUpc	Crjr�)r�r�rsr+rDrCrrIr_r@r@rArIxrkzSysLogHandlerTest.tearDowncCs|j|_|j��dSr�)rmrIr�rC)r>rTr@r@rAri�r"z!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)
rCr[rrrzr�rDrOrIrErsZ
append_nul�identr,r@r@rAr\�s 








zSysLogHandlerTest.test_outputNrnr@r@r@rArqWsrqc@r`)�UnixSysLogHandlerTestr�cCrbr�)r_rErqrBr_r@r@rArB�rczUnixSysLogHandlerTest.setUpcCrdr�)rqrIrrrEr_r@r@rArI�rezUnixSysLogHandlerTest.tearDownNrpr@r@r@rArv�rfrvz$IPv6 support required for this test.cs2eZdZ	eZdZ�fdd�Z�fdd�Z�ZS)�IPv6SysLogHandlerTest)z::1rc�tj|j_tt|���dSr�)rp�AF_INET6rDr�r6rwrBr_r:r@rArB�r�zIPv6SysLogHandlerTest.setUpcrxr�)rp�AF_INETrDr�r6rwrIr_r:r@rArI�r�zIPv6SysLogHandlerTest.tearDown)	rbrcrdr�rDrErBrIr?r@r@r:rArw�srwc@r�)�HTTPHandlerTestcCs	t�|�t��|_dSr�)rrBr+rJr�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�rC)r>rTZrlenr@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)N�httprr&r?zkeycert.pem)ZcafilerA)r�zlocalhost:%dz/frob)�foo�bar)�secure�contextZcredentials)r�r�rtr�r�r?�funcNamer\r�)'rrr+rDr:�ssl�ImportErrorrr�dirname�__file__r�Z
SSLContextZPROTOCOL_TLS_SERVERZload_cert_chainZcreate_default_contextr�r�r�r.r�rDZserver_portrZh_hdlrr~r<rr�rErzrOr}r
�queryr��decoder�rC)r>r�r+r�rwr�r��hereZlocalhost_certr�r��hostZ
secure_clientrr��dr@r@rAr\�sd
�
�


�



�zHTTPHandlerTest.test_outputN)rbrcrdrBr�r\r@r@r@rAr{�s

r{c@�.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�)�idrj�weakref�refr�)r>rrX�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)Nr�)r�r2rl)r�r2rm)r+r1rrqrr�r2r}r`r\r�)r>r�r�r@r@rA�test_persistent_loggers%s"

�

�z"MemoryTest.test_persistent_loggersN)rbrcrdrBr�r�r�r@r@r@rAr�	sr�c@�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�r4)rrr�r�rrCrr<r{rDr8rOrV�rstripr�isfiler)r>ryr
rrTr�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<�warnrDrMrCrH�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�r4r@r@rA�
formatFunc��r�c@seZdZddd�ZdS)�myCustomFormatterNcC�dSr�r@)r>�fmtr4r@r@rAr7��zmyCustomFormatter.__init__r�)rbrcrdr7r@r@r@rAr��sr�cCst��Sr�)rr3r@r@r@rA�handlerFunc�rVr�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)r5�	formatterr]r0ro�r]r:)r6r7r:r(r�r2r])r6r7r:�loggersr(zext://sys.stdboutZNTOSETZWRANINGZmisspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)�()r�z.formatFunc)r�Zform2Zform3r�)r.Zhand2z.CustomHandlerzinvalid parameter name)r5r�r]r0rurF)�compilerr)r6r*r7r:r�r(Trq)r6Zincrementalr:r�Zfilt1r?)r5r�r]r0�filters)r]r�)r6r7r�r:r�r(zcfg://true_formatterszcfg://handler_configs[hand1])r6�true_formatters�handler_configsr7r:r�r()r�r�r7r:r�r(r�r��!
)r��
terminator)r5r�r]r0r��mySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s�$)r��style)r5r]r�zlogging.handlers.MemoryHandler��
fileGlobal)r5Zcapacityr�r)r])r��bufferGlobal�mymoduler��true)r]r:r�)r6r7r:r�)r�r��validate�my_test_logger_custom_formatter)r5r�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�rz#ConfigDictTest.test_config2_failurecCr�r�)r�r/r��config2ar_r@r@rA�test_config2a_failure�rz$ConfigDictTest.test_config2a_failurecCr�r�)r�r/r��config2br_r@r@rA�test_config2b_failure�rz$ConfigDictTest.test_config2b_failurecCr�r�rr_r@r@rAr�rz#ConfigDictTest.test_config3_failurec	C�t���4}|�|j�zt��tyt�d�Ynwtj�	d�|�
|��d�|�g�Wd�dS1s;wYdSr)
rr�r�rrRrrr�rr	rOrMr\�r>r�r@r@rAr
��
�
�"�zConfigDictTest.test_config4_okc	Cr�r)
rr�r��config4arRrrr�rr	rOrMr\r�r@r@rA�test_config4a_ok�r�zConfigDictTest.test_config4a_okcCrrr
r_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�r5r�rqrm�rkrn)
rr�r�r=rrr|r`rzr\rr=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�r5r)r�r��rqrp�rkrr)
rr�r�r=rrr|r`rzr\r'rrr�r@r@rA�test_config_8_ok�s6

���



�"�zConfigDictTest.test_config_8_okcCrr)rr�r�rrrr|r`rzrr\�config8arrrr@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�r5r�)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�rzcompiler.parser.codegen)rorjr�r5)
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.r�r�ZExclamationz
Exclamation!
)
rr�r��config14rrrOr�r�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!�r"z0ConfigDictTest.test_config15_ok.<locals>.cleanupr'r#r]r�zlogging.FileHandlerr�)r5�filenamer�r:�r6r:r(r)
r%r�r�rrCr�rr(r:r�)r>r!r
rr�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�rL)r:rr��listenr.r�rDrrrErprz�SOCK_STREAM�
settimeout�connectrPrlrP�sendrCZ
stopListeningrr�)r>�textZverifyr�rrr�rWr[Z	sentsofar�left�sentr@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�r=rrr|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@��stuffr@r@rA�verify_fail�r�z6ConfigDictTest.test_listen_verify.<locals>.verify_failcSs|ddd�S)Nr�r@rr@r@rA�verify_reverse�r�z9ConfigDictTest.test_listen_verify.<locals>.verify_reverser�r5r�r�r�)rWr�r�r�r�r�)
rrr�r�r�r=rr�rr|r`rzr\)r>rrr�Zto_sendr�r@r@rA�test_listen_verify�sh

���


�����

����
�z!ConfigDictTest.test_listen_verifycCr�r�)r�rr��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}r7r�r�r�r)
r�deepcopyrr�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�r r@r@rA�*test_custom_formatter_class_with_validate2)
r"z9ConfigDictTest.test_custom_formatter_class_with_validate2cCsF|j��}d|ddd<|�|�t�d�jd}|�|jt�dS)Nr�r7r�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�rr�� custom_formatter_class_validate3r_r@r@rA�*test_custom_formatter_class_with_validate37
r�z9ConfigDictTest.test_custom_formatter_class_with_validate3cCr�r�)r�rr��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]r+zcfg://nest1[1][0]rHzcfg://nest2[1][1]z
cfg://adict.dzcfg://adict[f]zcfg://nest3r]zcfg://nosuchzcfg://!zcfg://adict[2])	rr�ZBaseConfiguratorrO�convert�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�)r6r7�resource)r>r8rr�)r;r7r@rAr7X
s
z:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__cs$|jd|jj��7_t��|�S�N� )r�r8�typer6r�r�r:r@rAr�\
sz6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emitr>r@r6r:rA�	MyHandlerW
sr<�Resourcer;�labelsZmy_typer)r;r>r]Z	myhandler)r�r8rqr�rzsome logzsome log my_type
)
�collectionsr7rr3rrbr�r|rOrM)r>r<r=r8r�rdr@r6rA�test_namedtupleS
s"	��
�


�zConfigDictTest.test_namedtuplecCs�dddddd�idddgd�id	�}t�d�}|�|j�|�|�|�|j�|�d
di�|�|j�|d=|�|�|�|j�dS)Nr]FZconsoler2r�)r]r5rr�)r6r*r:r�r6r*)rrrrr�r=)r>r�r�r@r@rA�
test_90195r
s,�����


zConfigDictTest.test_90195r�)Grbrcrdrr%rLr�r=rr�r�r�rrr�r�r�r�rrrr'r�r�r�r�r�r�r�r�r�rrr#r&r(r�r�r�rr�r�rr
r�rr�rr�r�r�r�r�r�r�rrrrrrrrr!r$r%r'r)r5r@rAr@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>r]r�r�exc_info�extra�Zloggedr@rA�_log�
r�z;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._logra)rbrcrdrGr@rFr@rA�MyLogger�
srHr�zshould appear in loggedzshould not appear in logged)
r�Logger�Managerr��	TypeError�setLoggerClassrrr{rO)r>rH�manr�r@rFrA�test_manager_loggerclass�
s




z$ManagerTest.test_manager_loggerclasscCs,t�d�}t�}|�|�|�|j|�dSr�)rrJ�object�setLogRecordFactoryrO�logRecordFactory)r>rMrYr@r@rA�test_set_log_record_factory�
s

z'ManagerTest.test_set_log_record_factoryN)rbrcrdrNrRr@r@r@rArB�
srBc@rO)�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)rr�getChildra)r>r��l1�l2�c1�c2Zc3r@r@rA�test_child_loggers�
s






z"ChildLoggerTest.test_child_loggersN)rbrcrdr\r@r@r@rArS�
rWrSc@r�)�DerivedLogRecordNr�r@r@r@rAr]�
r�r]c@r^)�LogRecordFactoryTestcCsBGdd�dtj�}t�|�|t�|_|j�|j�t��|_	dS)Nc@r�)z2LogRecordFactoryTest.setUp.<locals>.CheckingFiltercSrYr�)r)r>rr@r@rAr7�
r�z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__cSs,t|�}||jurd||jf}t|��dS)Nz)Unexpected LogRecord type %s, expected %sT)r;rrK)r>r�r�r�r@r@rAr��
s
�z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterN)rbrcrdr7r�r@r@r@rA�CheckingFilter�
�r_)
rr�rrBr]r�r+r��getLogRecordFactory�orig_factory)r>r_r@r@rArB�
s


zLogRecordFactoryTest.setUpcCs(|j�|j�t�|�t�|j�dSr�)r+r�r�rrIrrPrbr_r@r@rArI�
s
zLogRecordFactoryTest.tearDowncCs@|�t|jj|���t�t�|j�|���|�	dg�dS)N)r(rkrl)
r�rKr+r{r`rrPr]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=rGr�	LogRecordrOr?r�r)r>r�rTr@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=�matchesrorkrirCr1r)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�rDT��
stack_infoZ	TracebackZStack)rr:rprer4r.�ZeroDivisionErrorrirr`rzr�rOr0rMr9r�)r>rrr��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�rOr0rMr9)r>rrr@r@rA�*test_queue_listener_with_multiple_handlers<sz;QueueHandlerTest.test_queue_listener_with_multiple_handlersN)rbrcrdrLrBrIrmrorM�
skipUnlessrNrr:rsryrzr@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_queuerur�r�rrr@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�repeatrerfr�r�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�dSr�)r�*skip_if_broken_multiprocessing_synchronizerr��multiprocessingrfr�r�rCr�rOr�r�r@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)Nr�z&Found unexpected messages in queue: %scSs"g|]
}t|tj�r
|jn|�qSr@)rGrrlr�)r�r~r@r@rAr��s
��zJQueueListenerTest.test_no_messages_in_queue_after_stop.<locals>.<listcomp>)rr�rr�r�rfr�r��listr�rCr�rr:rp�	_sentinelrc)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�	task_done)r>r�rrr@r@rA�test_calls_task_done_after_stop�s
"�z1QueueListenerTest.test_calls_task_done_after_stopN)rbrcrdr��staticmethodr�r|rOrr:rpr�r�r�r�r�r@r@r@rAr}Ms



r}c@s eZdZdd�ZeZdd�ZdS)�UTCcCstSr�)�ZERO�r>�dtr@r@rA�	utcoffset�r�z
UTC.utcoffsetcCsdS)Nr�r@r�r@r@rA�tzname�r�z
UTC.tznameN)rbrcrdr��dstr�r@r@r@rAr��sr�c@rO)�AssertErrorMessagec
OsVz|jdg|�Ri|��WdS|y*}z|�|t|��WYd}~dSd}~ww)Nr@)r�rOr�)r>rr�rr�r�r@r@rA�assert_error_message�s��z'AssertErrorMessage.assert_error_messageN)rbrcrdr�r@r@r@rAr��r�r�c@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?r]�pathname�linenorD�funcr�r�customi�)rr2rrr��common�variantsr_r@r@rArB�s��
�zFormatterTest.setUpNcCs,t|j�}|dur|�|j|�t�|�Sr�)r;r�rFr�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�rr�usesTimer=�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 $.r�z	${asctime)rr5rO�_fmtr�rr��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�r8z#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�rrr5r_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��r*r�{�%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r��datetime�utcr�mktime�
astimezone�	timetuple�created�msecsrr5�gmtime�	converterrO�
formatTimer��asctime)r>r�r�r�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)rbrcrd�default_msec_format�default_time_formatr@r@r@rA�NoMsecFormatter�sr�r�rr�r�r*rr�z21/04/1993 08:03:00)rr5r�r�r�rr�r�r�r�r�r�rOr�)r>r�r�r�r�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�r4i�	g-C��6:?r�z
Message %dr]z.1000)rr5rrr!r�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@rAr��s
r�c@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��r`r�c@r^)�BufferingFormatterTestcCs"t�ddi�t�ddi�g|_dS)Nr�rr�)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@rO)�
ExceptionTestcCs�|j}t�}|�|�ztd��tjddd�Y|�|�|��|jd}|�	|j
�d��|�	|j
�d��|�	|j
�d��|�	|j
�d	��dS)
NrQZfailedTrurz#Traceback (most recent call last):
z!
RuntimeError: deliberate mistake�Stack (most recent call last):
z,logging.exception('failed', stack_info=True))r+�RecordingHandlerr<rRrrrDrCr�r=�exc_textr�r�rv)r>r�rHr@r@rAro�s


zExceptionTest.test_formattingN)rbrcrdror@r@r@rAr��rWr�c@rO)�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+rDr4r�
lastResortr`rrbr}rOrMr{r�emittedNoHandlerWarningr<)r>r(Zold_lastresortZold_raise_exceptionsrdr�r@r@rA�test_last_resortsJ


�

�

�

�
�
�zLastResortTest.test_last_resortN)rbrcrdr�r@r@r@rAr�rWr�c@r�)�FakeHandlerc	Cs$dD]
}t|||�|||��qdS)N)r<�flushrCr=)�setattr�record_call)r>�
identifier�calledrr@r@rAr77s�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)rbrcrdr7r�r@r@r@rAr�5sr�cr3)r�cs tt|�j|i|��g|_dSr�)r6r�r7r�)r>rr�r:r@rAr7Cs
zRecordingHandler.__init__cCs	|j�|�dSr�)r�r�r�r@r@rArGszRecordingHandler.handle)rbrcrdr7rr?r@r@r:rAr�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)Nr`)r6r�rBr�rr`r�r�)r>Zraise_exceptionsr:r@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���handlerList)z2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - close�0 - release)	r�r�rmrr�r�r�r�rO)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�r�rO)r>rrzr�r:r@r@rA�_test_with_failure_in_methodls
z)ShutdownTest._test_with_failure_in_methodcC�|�dt�dS�Nr<�r�r
r_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�rr_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)NFr<�rr`r��
IndexErrorr_r@r@rA�.test_with_other_error_in_acquire_without_raise��z;ShutdownTest.test_with_other_error_in_acquire_without_raisecCr)NFr�rr_r@r@rA�,test_with_other_error_in_flush_without_raise�rz9ShutdownTest.test_with_other_error_in_flush_without_raisecCr)NFrCrr_r@r@rA�,test_with_other_error_in_close_without_raise�rz9ShutdownTest.test_with_other_error_in_close_without_raisecC�dt_|�t|jdt�dS)NTr<�rr`r�rr�r_r@r@rA�+test_with_other_error_in_acquire_with_raise��
�z8ShutdownTest.test_with_other_error_in_acquire_with_raisecCr)NTr�rr_r@r@rA�)test_with_other_error_in_flush_with_raise�r
z6ShutdownTest.test_with_other_error_in_flush_with_raisecCr)NTrCrr_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�rrrr	rrr?r@r@r:rAr�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�WARN)
rr(rrGrOr�r�rrKri)r>�old_disablerr@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�rC)r�kw�r�r@rA�<lambda>��z/ModuleLevelMiscTest._test_log.<locals>.<lambda>ztest me: %rr]r)
rr|rr�r(r<r'rOrPr��
getMessage�upperr�)r>rr]�	recording�
log_methodr�Zexpected_levelr@rrA�	_test_log�s 

�


zModuleLevelMiscTest._test_logcC�|�dtj�dS�Nry)rrrkr_r@r@rA�test_log�rzModuleLevelMiscTest.test_logcC�|�d�dS�Nr}�rr_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@rArH�r�rH)r�rKrrLrOrIrO�getLoggerClass)r>rHr@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>.MyLoggerrHcst��||���d�dS)N�initialized)r6r7r�)r>r?r])r;r�r@rAr7�szIModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__)rbrcrdrr�r7r?r@�r�r:rArH�srHZjust_some_loggerr.Zhellorr)rr,rLrrOr.r/r3r<r1r2r}rMr9�truncater	rqrDrCrI)r>rHr�r0rHr@r/rA�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�rc�r>�code�rc�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
        r2r�r4zERROR:root:log in __del__)rZTESTFNr�rr�r�rr8rOrVr�)r>rr4�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()
        r2z#Cannot recover from stack overflow.r])r�r�rr�r�rOr3r@r@rA�test_recursion_errorEs

	z(ModuleLevelMiscTest.test_recursion_errorr�)rbrcrdrrrr#r%r'r)r+r-r1r8r: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{rar�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_r�Zmsg2_)�processName�r1.processName�r2.processName)r�logMultiprocessingr��current_processr?r�rZ	swap_itemr��modulesr@r)	r�rCrUZprev_logMultiprocessing�mpr?�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)Nr�T�MainProcessr]r@rArBrr�r()r�rErOrrCr�r@rJr��Pipe�Processr.rOZassertNotEqualr�)	r>Zmultiprocessing_importedZLOG_MULTI_PROCESSINGr�rIr�Zparent_connZ
child_connr1r@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��
threadName�processr@�
logThreads�logProcessesrCrg)r>r�ZNOT_NONEZlog_threadsZ
log_processesZlog_multiprocessing�NONEr@r@rA�
test_optional�s2









�zLogRecordTest.test_optionalr�)	rbrcrdr>r?r�rJrNrUr@r@r@rAr<Vs$r<cs�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�)r6rVrBrr(r:rrrrr r]r-r�r!r_r:r@rArB�s

zBasicConfigTest.setUpcs<tjjdd�D]}tj�|�|��qtt|���dSr�)rr(r:rDrCr6rVrIr�r:r@rArI�s
zBasicConfigTest.tearDowncCsJttjd|j�tj��tj�|j�|jtj	dd�<tj�
|j�dS)Nr:)r�rr(r: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)rrrOrPr(r:r�r3r0r�rdr�rr��BASIC_FORMATrgr4�PercentStyler]r-)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�rrr�rrzr	rOrMr9r�r@r@rA�test_strformatstyle��

�"�z#BasicConfigTest.test_strformatstylecCrZ)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�r Zh2rr@r@rAr!��z.BasicConfigTest.test_filename.<locals>.cleanup�test.logr�)rr�r]rrr4)rrrOrPr(r:r�rr0�moder?r��r>r!r�rYr@r@rA�
test_filename�szBasicConfigTest.test_filenamecCsVdd�}tjddd�tjjd}t�dd�}|�|jj|jj�|�|||d�dS)NcSrbr�rrcr@r@rAr!rdz.BasicConfigTest.test_filemode.<locals>.cleanupre�wb�r�filemoder)	rrr(r:rrOr0rfr�rgr@r@rA�
test_filemodeszBasicConfigTest.test_filemodecCs`t��}|�|j�tj|d�|�ttjj	�d�tjj	d}|�
|tj�|�|j|�dS)Nr5r]r)
r.r/r�rCrrrOrPr(r:r�r3r0)r>r0r�r@r@rA�test_streamszBasicConfigTest.test_streamcCs.tjdd�tjjdj}|�|jjd�dS)Nz%(asctime)s - %(message)s)r�r)rrr(r:r�rOrr��r>r�r@r@rA�test_format&�zBasicConfigTest.test_formatcCs,tjdd�tjjdj}|�|jd�dS)Nr�)r4r)rrr(r:r�rOr4rnr@r@rA�test_datefmt,szBasicConfigTest.test_datefmtcCs.tjdd�tjjdj}|�|jtj�dS)Nr�r�r)rrr(r:r�r�rrrnr@r@rA�
test_style2rpzBasicConfigTest.test_stylecCsTtjj}|�tjj|�tjdd�|�tjjd�tjdd�|�tjjd�dS)N�9)r]�:)rr(r]r�r1rrO)r>�	old_levelr@r@rA�
test_level8szBasicConfigTest.test_levelcCsp|j}t��g}tj}|ttjd|d�|ttjd|d�|ttj||d�|ttjtjd�tjddd�dS)Nre)rr0)rr:)r0r:)Zloglevelrrj)r�rr3r�rdrrrq)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�rr5r8rrar(r:rOr�)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)r]r:�forcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r.r/rr3rror{r|r}rOrPr(r:rqrMr9)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�rer��%(message)s�rr��errorsr�r]r]r�.The Øresund Bridge joins Copenhagen to Malmör4�rrr2rOrPr(r:r�rr�r}rCr8rVr9rr�r>r�r�r�rTr@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)Nr3rerr{r|r]rr~r�r4z*The resund Bridge joins Copenhagen to Malmrr�r@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)Nr3rer{)rr�r�r]r]r�backslashreplaceu<😂: ☃️: The Øresund Bridge joins Copenhagen to Malmör�r4zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)rrr2rOrPr(r:r�rr�r}r}rCr8rVr9rrr�r@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)Nr3rer{r|r]rcs t��\}}}��t|��dSr�)r�rDr�r�)r�r$r�r/r@rA�dummy_handle_error�szEBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_errorr~z:'ascii' codec can't encode character '\xd8' in position 4:r�r4r)rrr2rOrPr(r:r�rr�rgr}r[r}r=rcrCr8rVr9rr)r>r�r�r�r�rTr@r/rA�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)rr(r]r1r�r�)rrru�r�Zold_basic_configr>r@rA�my_basic_config�s
z2BasicConfigTest._test_log.<locals>.my_basic_configrztest mer@)rrrr|r'rO)r>rr]r�rr@r�rAr�s
zBasicConfigTest._test_logcCrr)rrror_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�)rbrcrdrBrIr!rYr_rarhrlrmrorqrrrvrwrxrzr�r�r�r�rrr#r%r'r)r+r?r@r@r:rArV�s:	


"rVcsLeZdZ�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�rE)r6r�rBrrr�rr(r�r<r�rDrCr�rx�adapter)r>r!r:r�rArB�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)rwr�rrrOrPr�r�rrkr�rrDr;�
__traceback__�r>r�rxr�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 testrt)
rwr�rrOrPrr�rDr;r�)r>r�rxr�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)r�rrrOrPr�r�rrir�r)r>r�r�r@r@rAr+.szLoggerAdapterTest.test_criticalcCsD|jjjj}d|jjj_|�t|jjjd|�|�|j�d��dS)N�!rG� )r�r�rrGr�r�r�isEnabledFor�r>rr@r@rA�test_is_enabled_for8s�z%LoggerAdapterTest.test_is_enabled_forcCsN|�|j���|jjD]}|j�|�q|�|j���|�|j���dSr�)r=r�r9r�r:rDrr r@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|��|fSr9�r�)r>r�r�r@r@rArQL�z6LoggerAdapterTest.test_nested.<locals>.Adapter.processN)rbrcrdr�rQr@r@r@rAr�Isr�zAdapters can be nested, yo.r�ZAdapterAdapterr]rzAdapter AdapterAdapter )rrxr�r�rOrjryrirrPr�r�r�rrrarO)r>r�r�r�Zadapter_adapterr�Zorig_managerZtemp_managerr@r@rA�test_nestedHs2zLoggerAdapterTest.test_nested)rbrcrdrBr�r�r+r�r�r�r?r@r@r:rAr��s

	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 �Zd!d"�Z�ZS)#�
LoggerTestcsbtt|���t�|_tjdd�|_|j�|j�|�	|jj
|j�|�	|jj�|�	tj�dS)NZblah�r?)
r6r�rBr�rrrIr�r<r�rDrCr�r_r:r@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)r�rKr�r1r_r@r@rA�test_set_invalid_levelus��z!LoggerTest.test_set_invalid_levelc
Cr�r�)rwr�rrrOrPr�r�rrkr�rrDr;r�r�r@r@rAr�}r�zLoggerTest.test_exceptioncCsHt�tdd��|�t|jjdd�Wd�dS1swYdS)Nr`Trv�test message)r�	swap_attrrr�rKr�ryr_r@r@rA�!test_log_invalid_level_with_raise�s"�z,LoggerTest.test_log_invalid_level_with_raisecCsBt�tdd��|j�dd�Wd�dS1swYdS)Nr`Frvr�)rr�rr�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�rr@rAr�rz=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>Trur]r�r)rr|r�	tracebackr��
findCallerrOrPr_r@rrA� 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�r�z>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermostc�
��dSr�r@r@)r�r@rAr��r�z:LoggerTest.test_find_caller_with_stacklevel.<locals>.innercr�r�r@r@)r�r@rA�outer�r�z:LoggerTest.test_find_caller_with_stacklevel.<locals>.outerr�r�r�r�� test_find_caller_with_stacklevel)rr�rOr�r�rH)r>r�r�r�r@)r�r�r>r�rAr��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�rE�sinfo)	r�_logRecordFactoryrT�__dict__�keysr�r4r��
makeRecord)
r>r?r]r�lnor�rrDr�r��rvr�rEr@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)Nr�r�Z	valid_keyr�r�)r�r�rcr�)r>r?r]rr�r�rrDr�r�rEr�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:rDrr r@r@rAr��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�r�r@r@rAr��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_disabledrr@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)Nrr(r��foo.bar�)rrrar(�parentZassertIsNot)r>r(r@r@rA�test_root_logger_aliases�sz#LoggerTest.test_root_logger_aliasescCs$|�ttjt�|�ttjd�dS)Nsfoo)r�rKrr�anyr_r@r@rA�test_invalid_namesszLoggerTest.test_invalid_namescCsNttjd�D]}dD]}t�|�}t�||�}t�|�}|�||�qqdS)Nr])rr(r�r�zbaz.bar)rrR�HIGHEST_PROTOCOLrrrrSra)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)NrTrVTF)r+rrr1rkrOr,�_cacher=r�rr2rir�rG)r>r(r)r*r@r@rA�test_cachingsH

zLoggerTest.test_caching)rbrcrdrBr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r?r@r@r:rAr�js$	

	
r�c@r�)
�BaseFileTestcCs0t�|�t�dd�\}|_t�|�g|_dS)Nr'ztest_logging-2-)rrBr�r�rrrC�rmfiles)r>r
r@r@rArBHs


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

zBaseFileTest.tearDowncCs,	|jtj�|�d|d�|j�|�dS)NzLog file %r does not exist�r�)r=rrrr�r�)r>rr@r@rA�
assertLogFileUs
�zBaseFileTest.assertLogFilec
Cst�dtjdd|��ddd�S)Nr�r1r])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�)rrrrrrgr0rrrrr�rOr=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�rfr{rj)rrrrrr8r5r�r�rCr8rOrVr9)r>r�r9r@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:rrr�shouldRolloverrCr�devnullr��r>�rhr@r@rA�test_should_not_rollovervs��z0RotatingFileHandlerTest.test_should_not_rollovercCs4tjj|jddd�}|�|�|����|��dS)Nr�r]r�)rr:rrr=r�r�rCr�r@r@rA�test_should_rollover�sz,RotatingFileHandlerTest.test_should_rollovercCs8tjj|jdd�}|�|���|�|j�|��dS)Nr�r4)rr:rrr�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@r�r@r@rA�namer�rVz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namerr�r�r]�r��backupCountr��.1�.2�.3)
rr:rrr�r�r�r�rrrrrC)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��rVz`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namercSs$tj�|�rt�||d�dSdS)N�.rotated)rrrr&)r>�source�destr@r@rA�rotator�s�zbRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotatorN)rbrcrdr�r�r@r@r@rA�HandlerWithNamerAndRotator�r`r�r�r�r]r�r�r�r�)rr:rrrOr�r�r�r�rrrrrC)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@r�r@r@rAr��rVz3RotatingFileHandlerTest.test_rotator.<locals>.namerc	Ss�t|d��,}|��}t�|d�}t|d��
}|�|�Wd�n1s%wYWd�n1s4wYt�|�dS)N�rbr�ri)r8rV�zlib�compressrUrr)r�r�ZsfrT�
compressed�dfr@r@rAr��s���z5RotatingFileHandlerTest.test_rotator.<locals>.rotatorr�r�r]r�r�r�r3r�r�)rr:rrr�r�r�r�r�r�linesepr8rVr��
decompressrOr�r�rrrrC)r>r�r�r�Zm1Zm2r�newliner�r�rTr@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:rrr�rr!r�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��rr@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:rrr5r8r�r�r�rr!rCr�r]r�	timedelta�strftimerrrr�r�r��listdirr0r�rdr�r8rVr=)r>r�r�rGrH�foundr]�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�rrr: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>�currentTimerr�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�Qrr�r�zW%dr]Tr
rzfailed in timezone: %dzlocal vars: %si�:	r)rrr�r��tm_wdayrrr:rrrr0�timezone�localsrOrC)	r>rZtodayrZwdayZdayr�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)Nr0r�r�z%Y-%m-%d_%H-%M-%Sr�r�)�a.bza.b.czd.ezd.e.fz%s.logr[rT)rrr�r�rz	%s.log.%scSs|�dd�dS)Nr'r)r&r�r@r@rArmszKTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.<lambda>z	%s.%s.logrir*z%s.log.r'r�r�)r��mkdtempr��shutil�rmtreer�r]rr�rr�rrr�rr:rr�r�r8�	enumerateZgetFilesToDeleterOrPr�r=r��isdigit)r>Zwd�timesr�r��prefixesrZrotatorsr�r1r�r�rr�Z
candidatesr,r�r@r@rA�test_compute_files_to_deleteVsd

�

�
���
����z9TimedRotatingFileHandlerTest.test_compute_files_to_deleteN)	rbrcrdr�rr
rrr$r@r@r@rAr��s
*	(r�cKstjdi|��tjdd�S)Nr]r�r@)r�r�)rr@r@rAr�sr)r�r])�M�<)�Hi)�Dr)rrZW0r�)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�rrr�r�grr*rr�r&z
t: %s (%s)r�zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rr:rrrr�rr��	localtimeZ	_MIDNIGHTr0r�rdr/rOrC)
r>r�expr�rrXr�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@rO)�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 MessageFr�zTest Log Message
Tz3Record not found in event log, went back %d recordsr�)�win32evtlogZOpenEventLogZGetNumberOfEventLogRecordsrr:ZNTEventLogHandler�
pywintypesrz�winerrorrMZSkipTestr�rrCZ
assertLessZEVENTLOG_BACKWARDS_READZEVENTLOG_SEQUENTIAL_READZReadEventLogZ
SourceName�win32evtlogutilZSafeFormatMessager=)r>ZlogtypeZelhZnum_recsrHr�r��flagsrr�eventsr�r@r@rAr��s>


��
�
z NTEventLogHandlerTest.test_basicN)rbrcrdr�r@r@r@rAr-�r�r-c@rO)�MiscTestCasecCshd�}tj|t|d�dS)N>
�StrFormatStyler(rCrXr+�PlaceHolderrR�currentframe�
RootLoggerrJrSr�Filterer)�not_exported)rZcheck__all__r)r>r:r@r@rA�test__all__�szMiscTestCase.test__all__N)rbrcrdr;r@r@r@rAr4�rWr4cCs*t�dd�}|��t�|jddd�dS)N�LC_ALLr)rZrun_with_locale�	__enter__rMZaddModuleCleanup�__exit__)�cmr@r@rA�setUpModule�sr@�__main__r�)�rZlogging.handlersZlogging.configr�r�rr�rrRr.r�r
rrer"rJrrprPr�r�Ztest.support.script_helperrrr�rZtest.supportrrrrZtest.support.logging_helperr	r�r+rrMr�r�Zhttp.serverr
r�urllib.parserr
�socketserverrrrrr��simplefilter�DeprecationWarningr�rnr.r1r/r�r�ZTestCaserrer�ZSILENTr�ZTERSEZEFFUSIVEr�r�Z	TALKATIVEr�Z
CHATTERBOXZBORINGrr�r�r�r�r�r�r�rOrPr3rXr\r_rorlr�r�r�r�rNr�r�r�r�r5r�r�r>r_r{rarhrorqrvZIPV6_ENABLEDrwr{r�r�r�r�r�r�r�r�rBrSrlr]r^rdr:r�Z
unittest.mockr|r}r�r�Ztzinfor�r�r�r�r�r�r�r�r�r�r�r�r�r
r<rVr�r�r�r�r�r�rrr+r,r�r-r4r@rb�mainr@r@r@rA�<module>sz

���mF�
YT,J2)/ hdY@C�M41
(v#k
`	'W4hBl\k(�!
#
�