Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_logging.cpython-35.opt-2.pyc



���]&L�,@s~
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlmZddlmZddlZddlZddlZddlZddlZyvddlZddlZddlmZmZddl Z ddl!m"Z"m#Z#ddl$m%Z%m&Z&m'Z'm(Z(Wne)k
r�dZYnXy(ddl*Z*ddl+Z+ddl,Z,Wn e)k
rdZ*Z+Z,YnXyddl-Z-Wne)k
r4YnXGdd�dej.�Z/Gd	d
�d
e/�Z0Gdd�de/�Z1d
Z2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;e<e;e2d�Z=e2de3de4de5de6de7de8de9de:d e;d!i
Z>Gd"d#�d#ej?�Z@Gd$d%�d%ej?�ZAGd&d'�d'e/�ZBGd(d)�d)e/�ZCGd*d+�d+eD�ZEGd,d-�d-ejF�ZGGd.d/�d/e/�ZHeriGd0d1�d1e jI�ZJGd2d3�d3eD�ZKGd4d5�d5eKe�ZLGd6d7�d7eKe'�ZMGd8d9�d9eKe%�ZNeOed:�riGd;d<�d<eM�ZPGd=d>�d>eN�ZQejRed?�Gd@dA�dAe/��ZSGdBdC�dCe/�ZTGdDdE�dEejU�ZVGdFdG�dGe/�ZWejRed?�GdHdI�dIe/��ZXdJdK�ZYejReOed:�dL�ejRed?�GdMdN�dNeX���ZZejRed?�GdOdP�dPe/��Z[ejReOed:�dL�ejRed?�GdQdR�dRe[���Z\ejRed?�GdSdT�dTe/��Z]ejReOed:�dL�ejRed?�GdUdV�dVe]���Z^ejRej_dW�ejRed?�GdXdY�dYe]���Z`ejRed?�GdZd[�d[e/��ZaGd\d]�d]e/�ZbGd^d_�d_e/�ZcGd`da�dae/�Zdddbdc�Zeddde�ZfGdfdg�dgejF�ZgGdhdi�die/�ZhGdjdk�dke/�ZiGdldm�dme/�ZjGdndo�doejk�ZlGdpdq�dqe/�ZmGdrds�dse/�ZneOejodt�r�ddlpZpddulqmrZrGdvdw�dwe/�Zsejtd�ZuGdxdy�dyejv�Zwew�ZxGdzd{�d{ej.�ZyGd|d}�d}ejz�Z{Gd~d�dej.�Z|Gd�d��d�e/�Z}Gd�d��d�e/�Z~Gd�d��d��ZGd�d��d�ej��Z�Gd�d��d�e/�Z�Gd�d��d�e/�Z�Gd�d��d�e/�Z�Gd�d��d�ej.�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��Z�Gd�d��d�e��Z�d�d��Z�x�d�dfd�d�fd�d�d�fd�d�d�d�fd�d�d�d�fd�e�d�d�d�d��ffD]2\Z�Z�e�e�d�d��Z�e�e�d�e�e��q�	WejRe*d��Gd�d��d�e/��Z�ej�d�d��d�d���Z�e�d�krz
e��dS)��N)�assert_python_ok)�support)�
HTTPServer�BaseHTTPRequestHandler)�urlparse�parse_qs)�ThreadingUDPServer�DatagramRequestHandler�ThreadingTCPServer�StreamRequestHandlerc@sXeZdZdZdZdZdd�Zdd�Zddd	d
�Zdd�Z	dS)
�BaseTestz&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$rcCstj�jj}tj�z�tjj�|_tjdd�|_	|j�|_
}tjj�|_tj
j�|_i|_}x(|D] }t||dd�||<q�WWdtj�Xtjd�|_tjd�|_tjd�|_|jj�|_tj�|_|jjtj�tj|j�|_tj|j�|_ |jj!|j �|jj"�r�|jj#|jj#}t$d|��|jj"�r�|jj#|jj#}t$d|��|jj%|j�|j&|jj"��|j&|jj"��dS)N�disabledu«×»uĿÖG�zUnexpected handlers: %s)'�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�_releaseLockZlogger1Zlogger2�root_logger�getEffectiveLevel�original_logging_level�io�StringIO�stream�setLevel�DEBUG�
StreamHandler�	root_hdlr�	Formatter�
log_formatZroot_formatter�setFormatter�hasHandlers�handlers�AssertionError�
addHandler�
assertTrue)�selfZlogger_dictrr�nameZhlist�r5�1/opt/alt/python35/lib64/python3.5/test_logging.py�setUpNs>



zBaseTest.setUpc
Css|jj�|jj|j�x:|jjr\|jjd}|jj|�|j�q#W|jj|j�tj	�z�tj
j�tj
j|j
�tjj�tjj|j�tjj�tjj|j�|jtjdd�<tj�jj}|j�|j|j�|j}x5|jD]*}||dk	r2|||j|_q2WWdtj�XdS)Nr)r&�closer!�
removeHandlerr*r/r'r#rrr�clear�updaterrrrrrrrrrrrr
r )r3�hrrr4r5r5r6�tearDownvs0





	zBaseTest.tearDownNc	Cs�|p|j}tj|p!|j�}|j�j�}|jt|�t|��x_t||�D]N\}}|j	|�}|s�|j
d|�|jt|j��|�qeW|j
�}|r�|j
d|�dS)Nz*Log line does not match expected pattern:
z'Remaining output at end of log stream:
)r&�re�compile�expected_log_pat�getvalue�
splitlines�assertEqual�len�zip�search�fail�tuple�groups�read)	r3Zexpected_valuesr&�patZactual_lines�actual�expected�match�sr5r5r6�assert_log_lines�s	 zBaseTest.assert_log_linescCs|jd7_d|jS)N�z%d)�message_num)r3r5r5r6�next_message�szBaseTest.next_message)
�__name__�
__module__�__qualname__r,r@rRr7r=rPrSr5r5r5r6rFs(rc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�BuiltinLevelsTestcCs�|j}tjd�}|jtj�tjtjd�i�}|jtj�tjd�}|jtj�|jtj	|��|j
|��|jtj	|��|j
|��|j|��|j|��|jtj	|��|j
|��|j|��|j|��|j
|��|j|��|j|��|j
|��|j
|��|jdddddddddddg�dS)N�ERR�INF�DEB�CRITICAL�1�ERROR�2�3�4�WARNING�5�INFO�6�7�8�9�10r(�11)rXr[r\)rXr]r^)rYr[r_)rYr]r`)rYrarb)rYrcrd)rZr[re)rZr]rf)rZrarg)rZrcrh)rZr(ri)rSrrr'r]�
LoggerAdapterrcr(�logr[�error�warning�info�debugrP)r3�mrXrYrZr5r5r6�	test_flat�sD	zBuiltinLevelsTest.test_flatcCs�|j}tjd�}|jtj�tjd�}|jtj�|jtj|��|j|��|j	|��|j
|��|j|��|jddg�dS)	NrY�INF.ERRr[r\r]r^)rrr[r\)rrr]r^)
rSrrr'rcr]rkr[rlrmrnrorP)r3rprY�INF_ERRr5r5r6�test_nested_explicit�s	z&BuiltinLevelsTest.test_nested_explicitc	CsC|j}tjd�}|jtj�tjd�}|jtj�tjd�}tjd�}tjd�}|jtj|��|j|��|j	|��|j
|��|jtj|��|j|��|j|��|j	|��|j
|��|j|��|jddddddg�dS)NrYzINF.ERR�	INF.UNDEF�
INF.ERR.UNDEF�UNDEFr[r\r]r^rar_rcr`rbrd)rur[r\)rur]r^)rurar_)rurcr`)rvr[rb)rvr]rd)
rSrrr'rcr]rkr[rlrmrnrorP)r3rprYrsZ	INF_UNDEFZ
INF_ERR_UNDEFrwr5r5r6�test_nested_inherited�s2	z'BuiltinLevelsTest.test_nested_inheritedcCs�|j}tjd�}tjd�}tjd�}|jtj�|jtj|��|j|��|jtj|��|j|��|j|��|j|��|j	d
ddd
g�dS)NrY�INF.BADPARENT.UNDEF�
INF.BADPARENTr[r\rcr^r_r`)ryr[r\)ryrcr^)rzr[r_)rzrcr`)
rSrrr'rcrk�FATALrnrorP)r3rprYZ
GRANDCHILDZCHILDr5r5r6�test_nested_with_virtual_parents 	z1BuiltinLevelsTest.test_nested_with_virtual_parentcCs<|jtjd�tj�|jtjtj�d�dS)Nrc)rCr�getLevelNamerc)r3r5r5r6�test_regression_223862sz'BuiltinLevelsTest.test_regression_22386cCs�tjtjd�|jtjtjd�|jtjtj�d�|jtjtj�d�|jtjd�tj�dS)Nrrc�NOTSET)r�addLevelNamerc�
addCleanuprCr}r)r3r5r5r6�test_regression_292207s
z'BuiltinLevelsTest.test_regression_29220N)	rTrUrVrqrtrxr|r~r�r5r5r5r6rW�s/#rWc@s4eZdZdd�Zdd�Zdd�ZdS)�BasicFilterTestcCs�tjd�}|jjd}z�|j|�tjd�}tjd�}tjd�}tjd�}|j|j��|j|j��|j|j��|j|j��|jd	d
g�Wd|j	|�XdS)N�	spam.eggsr�spam�spam.eggs.fishzspam.bakedbeansrcr^r_)r�rcr^)r�rcr_)
r�Filterr!r/�	addFilterrrnrSrP�removeFilter)r3Zfilter_�handlerr��	spam_eggs�spam_eggs_fish�spam_bakedbeansr5r5r6�test_filterCs 
zBasicFilterTest.test_filtercCs�dd�}|jjd}z�|j|�tjd�}tjd�}tjd�}tjd�}|j|j��|j|j��|j|j��|j|j��|jddg�Wd|j|�XdS)
NcSs5|jjd�}dj|dd��}|dkS)N�.�z	spam.eggs)r4�split�join)�record�parts�prefixr5r5r6�
filterfunc_sz8BasicFilterTest.test_callable_filter.<locals>.filterfuncrr��	spam.eggs�spam.eggs.fishzspam.bakedbeansrcr^r_)r�rcr^)r�rcr_)	r!r/r�rrrnrSrPr�)r3r�r�r�r�r�r�r5r5r6�test_callable_filter[s 
z$BasicFilterTest.test_callable_filtercCs;tj�}tjddi�}|j|j|��dS)Nr4z	spam.eggs)rr��
makeLogRecordr2�filter)r3�f�rr5r5r6�test_empty_filterxsz!BasicFilterTest.test_empty_filterN)rTrUrVr�r�r�r5r5r5r6r�?sr��x�w�v�u�t�s�r�q�p�orQ�Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	TalkativeZ	Garrulous�
Chatterbox�Boringc@seZdZdd�ZdS)�GarrulousFiltercCs
|jtkS)N)�levelno�	GARRULOUS)r3r�r5r5r6r��szGarrulousFilter.filterN)rTrUrVr�r5r5r5r6r��sr�c@seZdZdd�ZdS)�VerySpecificFiltercCs|jttgkS)N)r��SOCIABLE�TACITURN)r3r�r5r5r6r��szVerySpecificFilter.filterN)rTrUrVr�r5r5r5r6r��sr�c@sReZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�CustomLevelsAndFiltersTestz^[\w.]+ -> (\w+): (\d+)$cCs>tj|�x*tj�D]\}}tj||�qWdS)N)rr7�my_logging_levels�itemsrr�)r3�k�vr5r5r6r7�s
z CustomLevelsAndFiltersTest.setUpcCs+x$tD]}|j||j��qWdS)N)�LEVEL_RANGErkrS)r3�loggerZlvlr5r5r6�log_at_all_levels�s
z,CustomLevelsAndFiltersTest.log_at_all_levelscCsC|jjt�|j|j�|jd
dddddg�dS)Nr�rbr�rdr�rer�rfr�rgr�rh)r�rb)r�rd)r�re)r�rf)r�rg)r�rh)r!r'�VERBOSEr�rP)r3r5r5r6�test_logger_filter�sz-CustomLevelsAndFiltersTest.test_logger_filterc
Csi|jjdjt�z0|j|j�|jdd
dddg�Wd|jjdjtj�XdS)Nrr�rdr�rer�rfr�rgr�rh)r�rd)r�re)r�rf)r�rg)r�rh)r!r/r'r�r�rPrr)r3r5r5r6�test_handler_filter�sz.CustomLevelsAndFiltersTest.test_handler_filtercCs�|jjd}d}t�}|j|�z�|j|j�dddddd d!d"d#g	}|j|�t�}|jj|�|j|j�|j|d$d%d&d'd(d)d*g�Wd|r�|jj|�|j|�XdS)+Nrr�r\r�r^r�r`r�rbr�rdr�rer�rfr�rgr�rhri�12�14�15�17�18�20)r�r\)r�r^)r�r`)r�rb)r�rd)r�re)r�rf)r�rg)r�rh)r�ri)r�r�)r�r�)r�r�)r�r�)r�r�)r�r�)r!r/r�r�r�rPr�r�)r3r�Zspecific_filterZgarrZfirst_linesr5r5r6�test_specific_filters�s<	
	
		z0CustomLevelsAndFiltersTest.test_specific_filtersN)	rTrUrVr@r7r�r�r�r�r5r5r5r6r��sr�c@saeZdZdd�Zdd�Zejejdkd�ej	e
d�dd	���Zd
S)�HandlerTestcCs^tj�}d|_|j|jd�d|_|j|jd�|jt|jd�dS)NZgenericZanothergeneric)r�Handlerr4rC�assertRaises�NotImplementedError�emit)r3r<r5r5r6�	test_names		zHandlerTest.test_namec
Cs�tjdkr�xEdD]=}tj�\}}tj|�|sNtj|�tjj	|dd�}|r|j
|j}}|j|d�|j|d�tj
ddi�}|j|�tj|�|jtjj|��|j|�|jtjj|��n&|j|j
d�|j|jd�|j�|rtj|�qWtjdkrod	}nd
}yFtjj|�}|j|j|j�|j|j�|j�Wntk
r�YnXx^dD]V}	|	d
kr|jttjjdd|	�q�tjjdd|	�}|j�q�Wtjjd�}tj
i�}|j|j|��|j�tjjd�}|j|j|��|j�dS)N�linux�darwinTF�delayrQ�msgZTestz/var/run/syslogz/dev/log�GET�POST�PUT�	localhostz/logr)r�r�)TF���r�r�r�)r�r�r�)�sys�platform�tempfile�mkstemp�osr8�unlinkrr/�WatchedFileHandler�dev�inorCr��handle�assertFalse�path�existsr2�
SysLogHandlerZfacilityZLOG_USERZ
unixsocket�OSErrorr��
ValueError�HTTPHandlerZBufferingHandlerZshouldFlush)
r3Zexisting�fd�fnr<r�r�r�Zsockname�methodr5r5r6�test_builtin_handlerssZ






	


z!HandlerTest.test_builtin_handlers�ntz/WatchedFileHandler not appropriate for Windows.z!Threading required for this test.cs��fdd�}d}d}d�_d�_x^dD]V}tjdd�\}}tj|�tjd|d	||f�}d|_|j	�t
jj|d
|�}t
j
d�}	|j|	�z�x�t|�D]z}
tjd�t
jd
di�}y tj��_|j|�Wq�tk
rPtd�j�jf��Yq�Xq�WWd|j�|j�tjj|�r�tj|�Xq7WdS)Ncsmxft|�D]X}y tj|�tj��_Wntk
rGYnXtjdtjdd��q
WdS)Ng����Mbp?r�)	�ranger�r��time�
deletion_timer��sleep�random�randint)ZfnameZtries�_)r3r5r6�remove_loopNs

z*HandlerTest.test_race.<locals>.remove_loopi�FTz.logztest_logging-3-�target�argsr�z'%(asctime)s: %(levelname)s: %(message)sg{�G�zt?r�ZtestingzDeleted at %s, opened at %s)FT)Zhandle_timer�r�r�r�r8�	threading�Thread�daemon�startrr/r�r+r-r�r�r�r�r��	Exception�printr�r�r�r�)r3r�Z	del_countZ	log_countr�r�r�Zremoverr<r�r�r�r5)r3r6�	test_raceJs<			

	





zHandlerTest.test_raceN)rTrUrVr�r��unittestZskipIfr�r4�
skipUnlessr�rr5r5r5r6r�s6r�c@seZdZdd�ZdS)�	BadStreamcCstd��dS)Nzdeliberate mistake)�RuntimeError)r3�datar5r5r6�writezszBadStream.writeN)rTrUrVrr5r5r5r6rysrc@seZdZdd�ZdS)�TestStreamHandlercCs
||_dS)N)�error_record)r3r�r5r5r6�handleError~szTestStreamHandler.handleErrorN)rTrUrVr	r5r5r5r6r}src@seZdZdd�ZdS)�StreamHandlerTestcCs�tt��}tji�}tj}z�|j|�|j|j|�tjt��}t	j
��0}|j|�d}|j||j��WdQRXdt_t	j
��*}|j|�|j
d|j��WdQRXWd|t_XdS)Nz"
RuntimeError: deliberate mistake
Fr)rrrr��raiseExceptionsr��assertIsrr)r�captured_stderr�assertInrArC)r3r<r�Z	old_raise�stderrr�r5r5r6�test_error_handling�s 	

	
!z%StreamHandlerTest.test_error_handlingN)rTrUrVrr5r5r5r6r
�sr
c@sOeZdZdd�Zdd�Zdd�Zdd�Zd	d
d�Zd	S)�TestSMTPServercCsWtjj||dd|dd�|jj�d|_||_d|_||_dS)N�mapZdecode_dataTrQ)	�smtpd�
SMTPServer�__init__�socket�getsockname�port�_handler�_thread�
poll_interval)r3�addrr�r�sockmapr5r5r6r�s		zTestSMTPServer.__init__cCs|j||||�dS)N)r)r3�peer�mailfrom�rcpttosrr5r5r6�process_message�s
zTestSMTPServer.process_messagecCsCtjd|jd|jf�|_}|jd�|j�dS)Nr�r�T)r�r��
serve_foreverrr�	setDaemonr�)r3�tr5r5r6r��s
zTestSMTPServer.startcCsHytj|d|j�Wn'tk
rC|js<|jr?�YnXdS)Nr)�asyncoreZloop�_mapr�Z	connectedZ	accepting)r3rr5r5r6r"�s

zTestSMTPServer.serve_foreverNcCs'|j�|jj|�d|_dS)N)r8rr�)r3�timeoutr5r5r6�stop�s
zTestSMTPServer.stop)rTrUrVrr!r�r"r(r5r5r5r6r�s
	rcsIeZdZdd�Zdd�Z�fdd�Zddd	�Z�S)
�ControlMixincCs.d|_||_||_tj�|_dS)N)rrrr��Event�ready)r3r�rr5r5r6r�s			zControlMixin.__init__cCsCtjd|jd|jf�|_}|jd�|j�dS)Nr�r�T)r�r�r"rrr#r�)r3r$r5r5r6r�s
zControlMixin.startcs'|jj�tt|�j|�dS)N)r+�set�superr)r")r3r)�	__class__r5r6r"
s
zControlMixin.serve_foreverNcCsM|j�|jdk	r2|jj|�d|_|j�|jj�dS)N)�shutdownrr��server_closer+r:)r3r'r5r5r6r(s
	
zControlMixin.stop)rTrUrVrr�r"r(r5r5)r.r6r)�s	r)c@s1eZdZddddd�Zdd�ZdS)�TestHTTPServerg�?FNcsRG��fdd�dt��tj||��tj|||�||_dS)NcsCeZdZddd�Zdd�Z���fdd�Z�S)z=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandlerNcSs&|jd�r|jSt|��dS)NZdo_)�
startswith�process_request�AttributeError)r3r4�defaultr5r5r6�__getattr__.szITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__cSs|jj|�dS)N)�serverr)r3r5r5r6r33szMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_requestcs#�rt�|�j||�dS)N)r-�log_message)r3�formatr�)�DelegatingHTTPRequestHandlerr.rkr5r6r86szITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message)rTrUrVr6r3r8r5)r:rk)r.r6r:-sr:)rrrr)�sslctx)r3rr�rrkr;r5)r:rkr6r+s
zTestHTTPServer.__init__cCs�y:|jj�\}}|jr9|jj|dd�}Wn<tk
rx}ztjjd|��WYdd}~XnX||fS)NZserver_sideTzGot an error:
%s
)r�acceptr;Zwrap_socketr�r�rr)r3�sockr�er5r5r6�get_request>s	zTestHTTPServer.get_request)rTrUrVrr?r5r5r5r6r1 sr1cs:eZdZdZdddd�Z�fdd�Z�S)�
TestTCPServerTg�?cCsCGdd�dt�}tj||||�tj|||�dS)Nc@seZdZdd�ZdS)z;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlercSs|jj|�dS)N)r7r)r3r5r5r6r�^szBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handleN)rTrUrVr�r5r5r5r6�DelegatingTCPRequestHandler\srA)rr
rr))r3rr�r�bind_and_activaterAr5r5r6rZszTestTCPServer.__init__cs-tt|�j�|jj�d|_dS)NrQ)r-r@�server_bindrrr)r3)r.r5r6rCdszTestTCPServer.server_bind)rTrUrVZallow_reuse_addressrrCr5r5)r.r6r@Is	r@csFeZdZdddd�Z�fdd�Z�fdd�Z�S)	�
TestUDPServerg�?TcsRG�fdd�dt��tj||�|�tj|||�d|_dS)Ncs1eZdZdd�Z��fdd�Z�S)z;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlercSs|jj|�dS)N)r7r)r3r5r5r6r�}szBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handlecsT|jj�}|rPyt�|�j�Wn!tk
rO|jjsK�YnXdS)N)ZwfilerAr-�finishr�r7�_closed)r3r)�DelegatingUDPRequestHandlerr.r5r6rE�s
zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finish)rTrUrVr�rEr5)rG)r.r6rG{srGF)r	rrr)rF)r3rr�rrBr5)rGr6ryszTestUDPServer.__init__cs-tt|�j�|jj�d|_dS)NrQ)r-rDrCrrr)r3)r.r5r6rC�szTestUDPServer.server_bindcs tt|�j�d|_dS)NT)r-rDr0rF)r3)r.r5r6r0�szTestUDPServer.server_close)rTrUrVrrCr0r5r5)r.r6rDhsrD�AF_UNIXc@seZdZejZdS)�TestUnixStreamServerN)rTrUrVrrH�address_familyr5r5r5r6rI�srIc@seZdZejZdS)�TestUnixDatagramServerN)rTrUrVrrHrJr5r5r5r6rK�srKz!Threading required for this test.c@s.eZdZdZdd�Zdd�ZdS)�SMTPHandlerTestg @c
Cssi}ttjdf|jd|�}|j�tj|jf}tjj|dddd|j	�}|j
|jdg�g|_tj
ddi�}tj�|_|j|�|jj|j	�|j�|j|jj��|j
t|j�d	�|jd\}}}}	|j
|d�|j
|dg�|jd
|	�|j|	jd��|j�dS)Nrg����MbP?�meZyouZLogr'r�u	Hello ✓rQz
Subject: Log
u

Hello ✓)rrZHOSTr!r�rrr/ZSMTPHandler�TIMEOUTrCZtoaddrs�messagesr�r�r*�handledr��waitr(r2�is_setrDr�endswithr8)
r3rr7rr<r�rrr rr5r5r6�
test_basic�s,	
	

zSMTPHandlerTest.test_basiccGs!|jj|�|jj�dS)N)rO�appendrPr,)r3r�r5r5r6r!�szSMTPHandlerTest.process_messageN)rTrUrVrNrTr!r5r5r5r6rL�srLc@s:eZdZdZdd�Zdd�Zdd�ZdS)	�MemoryHandlerTestz^[\w.]+ -> (\w+): (\d+)$cCsctj|�tjjdtj|j�|_tjd�|_	d|j	_
|j	j|j�dS)N�
Zmemr)rr7rr/Z
MemoryHandlerrar*�mem_hdlrr�
mem_logger�	propagater1)r3r5r5r6r7�s
zMemoryHandlerTest.setUpcCs|jj�tj|�dS)N)rXr8rr=)r3r5r5r6r=�s
zMemoryHandlerTest.tearDowncCs1|jj|j��|jg�|jj|j��|jg�|jj|j��d
ddg}|j|�x�dD]�}x*td	�D]}|jj|j��q�W|j|�|jj|j��|d
d�t||d�D�}|j|�qW|jj|j��|j|�dS)Nr(r\rcr^rar_r���	cSs"g|]}dt|�f�qS)r()�str)�.0�ir5r5r6�
<listcomp>�s	z0MemoryHandlerTest.test_flush.<locals>.<listcomp>rW)r(r\)rcr^)rar_)r�r[)rYrorSrPrnrmr�)r3�lines�nr_r5r5r6�
test_flush�s$

	


$zMemoryHandlerTest.test_flushN)rTrUrVr@r7r=rcr5r5r5r6rV�srVc@seZdZdd�ZdS)�ExceptionFormattercCsd|djS)Nz
Got a [%s]r)rT)r3�eir5r5r6�formatException�sz"ExceptionFormatter.formatExceptionN)rTrUrVrfr5r5r5r6rd�srdc@seZdZdZdZdZdZejdd�Zejdd�Z	d	ed
Z
ejdd�Zd
ZdZ
dZdd�Zdd�Zdd�Zedd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&S)'�ConfigFileTestz^(\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
    args=(sys.stdout,)

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    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/tjtj|��}tjj||�dS)N)r$r%�textwrap�dedentr�config�
fileConfig)r3�conf�kwargs�filer5r5r6�apply_config�szConfigFileTest.apply_configcCstj��l}|j|j�tj�}|j|j��|j|j��|j	dgd|�|j	g�WdQRXdS)Nr]r^r&)r]r^)
r�captured_stdoutro�config0rrrnrSrlrP)r3�outputr�r5r5r6�test_config0_ok�s	zConfigFileTest.test_config0_okcCs�tj���}tjtj|j��}tj�}|j	|�t
jj|�t
j
�}|j|j��|j|j��|jdgd|�|jg�WdQRXdS)Nr]r^r&)r]r^)rrpr$r%rhrirq�configparser�ConfigParserZ	read_filerrjrkrrnrSrlrP)r3rrrn�cpr�r5r5r6�test_config0_using_cp_ok�s
	z'ConfigFileTest.test_config0_using_cp_okcCs�tj��o}|j|�tjd�}|j|j��|j|j��|jddgd|�|jg�WdQRXdS)	Nzcompiler.parserrcr\r]r^r&)rcr\)r]r^)	rrprorrrnrSrlrP)r3rjrrr�r5r5r6�test_config1_oks
	zConfigFileTest.test_config1_okcCs|jt|j|j�dS)N)r�r�ro�config2)r3r5r5r6�test_config2_failuresz#ConfigFileTest.test_config2_failurecCs|jt|j|j�dS)N)r�r�ro�config3)r3r5r5r6�test_config3_failuresz#ConfigFileTest.test_config3_failurecCs�tj���}|j|j�tj�}y
t��Wntk
rYtjd�YnXtj	j
d�|j|j�d�|j
g�WdQRXdS)Nzjust testingrz-ERROR:root:just testing
Got a [RuntimeError]
)rrpro�config4rrr�	exceptionr��stdout�seekrCrArP)r3rrr�r5r5r6�test_config4_oks

zConfigFileTest.test_config4_okcCs|jd|j�dS)Nrj)rx�config5)r3r5r5r6�test_config5_ok)szConfigFileTest.test_config5_okcCs|jd|j�dS)Nrj)rx�config6)r3r5r5r6�test_config6_ok,szConfigFileTest.test_config6_okcCs�tj���}|j|j�tjd�}tjd�}|j|j��|j|j��|j	|j��|j
dddgd	|�|j
g�WdQRXtj���}|j|j�tjd�}|j|j
�|j|j��|j|j��tjd
�}|j|j��|j|j��|j	|j��|j
ddddgd	|�|j
g�WdQRXdS)Nzcompiler.parserzcompiler-hyphenatedrcr\r]r^r[r_r&zcompiler.lexerr`rbrdre)rcr\)r]r^)r[r_)rcr`)r]rb)rcrd)r]re)rrpro�config1arrrnrSrl�criticalrP�config7r�r
)r3rrr��
hyphenatedr5r5r6�test_config7_ok/s<		zConfigFileTest.test_config7_okcCsy|j|j�tjd�}|j|j�|j|j�|j|j�|j|jdd�|j|j�dS)NZsome_pristine_logger�disable_existing_loggersF)ro�disable_testrrr�r
r2)r3r�r5r5r6�test_logger_disablingZsz$ConfigFileTest.test_logger_disablingN)rTrUrVr@rq�config1r��replaceryr{r}r�r�r�r�rorsrwrxrzr|r�r�r�r�r�r5r5r5r6rg�s.  *&+rgc@s^eZdZereZdZdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
S)�SocketHandlerTestr�rcCs�tj|�|j|j|jd�|_}|j�|jj�t	j
j}t|j
t�r||d|j�|_n||j
d�|_d|_|jj|jj
d�|jj|j�tjd�|_dS)Ng{�G�z�?r�rr)rr7�server_class�address�
handle_socketr7r�r+rQrr/Z
SocketHandler�
isinstance�server_addressrHr�	sock_hdlr�
log_outputr!r9r1r��	SemaphorerP)r3r7�hclsr5r5r6r7ms


	zSocketHandlerTest.setUpcCsIz4|jjd�|jj|j�|jj�Wdtj|�XdS)Ng@)r7r(r!r9r�r8rr=)r3r5r5r6r=s
zSocketHandlerTest.tearDowncCs�|j}x�|jd�}t|�dkr.Ptjd|�d}|j|�}x3t|�|kr�||j|t|��}qVWtj|�}tj|�}|j	|j
d7_	|jj�qWdS)Nr�z>Lr�
)
�
connection�recvrD�struct�unpack�pickle�loadsrr�r�r�rP�release)r3�request�conn�chunk�slen�objr�r5r5r6r��s	!zSocketHandlerTest.handle_socketcCsZtjd�}|jd�|jj�|jd�|jj�|j|jd�dS)NZtcpr��eggsz
spam
eggs
)rrrlrP�acquirerorCr�)r3r�r5r5r6�test_output�s



zSocketHandlerTest.test_outputcCs�d|j_|jjd�ytd��Wn"tk
rP|jjd�YnX|jjd�tj�}|j	|jj
|�tj|jj
|d�|jjd�dS)Ng@g@zDeliberate mistakez
Never sentzNever sent, eitherg����MbP?zNor this)r�Z
retryStartr7r(rr!r~rlr��
assertGreaterZ	retryTimer�)r3�nowr5r5r6�
test_noserver�s
zSocketHandlerTest.test_noserverN)r�r)rTrUrVr�r@r�r�r7r=r�r�r�r5r5r5r6r�ds		r�cCs<tjdddd�\}}tj|�tj|�|S)Nr�Z
test_logging_�suffixz.sock)r�r�r�r8�remove)r�r�r5r5r6�_get_temp_domain_socket�s

r�zUnix sockets requiredc@sCeZdZer'eed�r'eZdd�Zdd�Z	dS)�UnixSocketHandlerTestrHcCst�|_tj|�dS)N)r�r�r�r7)r3r5r5r6r7�szUnixSocketHandlerTest.setUpcCs!tj|�tj|j�dS)N)r�r=r�r�r�)r3r5r5r6r=�s
zUnixSocketHandlerTest.tearDownN)
rTrUrVr��hasattrrrIr�r7r=r5r5r5r6r��sr�c@sReZdZereZdZdd�Zdd�Zdd�Z	d	d
�Z
dS)
�DatagramHandlerTestr�rcCs�tj|�|j|j|jd�|_}|j�|jj�t	j
j}t|j
t�r||d|j�|_n||j
d�|_d|_|jj|jj
d�|jj|j�tj�|_dS)Ng{�G�z�?r�rr)rr7r�r��handle_datagramr7r�r+rQrr/ZDatagramHandlerr�r�rHrr�r�r!r9r1r�r*rP)r3r7r�r5r5r6r7�s


	zDatagramHandlerTest.setUpcCsIz4|jjd�|jj|j�|jj�Wdtj|�XdS)Ng@)r7r(r!r9r�r8rr=)r3r5r5r6r=�s
zDatagramHandlerTest.tearDowncCsptjdd�}|jt|�d�}tj|�}tj|�}|j|j	d7_|j
j�dS)Nz>Lrr�)r��pack�packetrDr�r�rr�r�r�rPr,)r3r�r�r�r�r�r5r5r6r��sz#DatagramHandlerTest.handle_datagramcCsgtjd�}|jd�|jj�|jj�|jd�|jj�|j|jd�dS)NZudpr�r�z
spam
eggs
)rrrlrPrQr:rCr�)r3r�r5r5r6r��s




zDatagramHandlerTest.test_outputN)r�r)rTrUrVr�rDr�r�r7r=r�r�r5r5r5r6r��s	r�c@sCeZdZer'eed�r'eZdd�Zdd�Z	dS)�UnixDatagramHandlerTestrHcCst�|_tj|�dS)N)r�r�r�r7)r3r5r5r6r7
szUnixDatagramHandlerTest.setUpcCs!tj|�tj|j�dS)N)r�r=r�r�r�)r3r5r5r6r=s
z UnixDatagramHandlerTest.tearDownN)
rTrUrVr�r�rrKr�r7r=r5r5r5r6r�sr�c@sReZdZereZdZdd�Zdd�Zdd�Z	d	d
�Z
dS)
�SysLogHandlerTestr�rcCs�tj|�|j|j|jd�|_}|j�|jj�t	j
j}t|j
t�r�||j
d|jf�|_n||j
�|_d|_|jj|jj
d�|jj|j�tj�|_dS)Ng{�G�z�?rr)rr7r�r�r�r7r�r+rQrr/r�r�r�rHr�sl_hdlrr�r!r9r1r�r*rP)r3r7r�r5r5r6r7s


"	zSysLogHandlerTest.setUpcCsIz4|jjd�|jj|j�|jj�Wdtj|�XdS)Ng@)r7r(r!r9r�r8rr=)r3r5r5r6r=.s
zSysLogHandlerTest.tearDowncCs|j|_|jj�dS)N)r�r�rPr,)r3r�r5r5r6r�7sz!SysLogHandlerTest.handle_datagramcCs�tjd�}|jd�|jj�|j|jd�|jj�d|j_	|jd�|jj�|j|jd�|jj�d|j_
|jd�|jj�|j|jd�dS)NZslhuspäms
<11>spämFs	<11>spämuhäm-s<11>häm-späm)rrrlrPrQrCr�r:r�Z
append_nul�ident)r3r�r5r5r6r�;s







zSysLogHandlerTest.test_outputN)r�r)rTrUrVr�rDr�r�r7r=r�r�r5r5r5r6r�s	r�c@sCeZdZer'eed�r'eZdd�Zdd�Z	dS)�UnixSysLogHandlerTestrHcCst�|_tj|�dS)N)r�r�r�r7)r3r5r5r6r7UszUnixSysLogHandlerTest.setUpcCs!tj|�tj|j�dS)N)r�r=r�r�r�)r3r5r5r6r=Zs
zUnixSysLogHandlerTest.tearDownN)
rTrUrVr�r�rrKr�r7r=r5r5r5r6r�Lsr�z$IPv6 support required for this test.cs@eZdZeZdZ�fdd�Z�fdd�Z�S)�IPv6SysLogHandlerTest�::1rcs&tj|j_tt|�j�dS)N)r�AF_INET6r�rJr-r�r7)r3)r.r5r6r7hszIPv6SysLogHandlerTest.setUpcs&tj|j_tt|�j�dS)N)r�AF_INETr�rJr-r�r=)r3)r.r5r6r=lszIPv6SysLogHandlerTest.tearDown)r�r)rTrUrVrDr�r�r7r=r5r5)r.r6r�^sr�c@s4eZdZdd�Zdd�Zdd�ZdS)�HTTPHandlerTestcCs tj|�tj�|_dS)N)rr7r�r*rP)r3r5r5r6r7ts
zHTTPHandlerTest.setUpc	Cs�|j|_t|j�|_|jdkrmy,t|jd�}|jj|�|_Wnd|_YnX|j	d�|j
�|jj�dS)Nr�zContent-Length��)
�commandrr��log_data�intZheadersZrfilerJ�	post_dataZ
send_responseZend_headersrPr,)r3r�Zrlenr5r5r6�handle_requestzs

zHTTPHandlerTest.handle_requestcCs�tjd�}|j}|j|jjd�xbdD]Z}d}|r�yddl}Wntk
rrd}Yq�Xtjj	t
�}tjj|d�}|j|j
�}|j|�|jd|�}	nd}d}	t||jdd	|�|_}
|
j�|
jj�d
|
j}|o)|}tjj|dd|d
|	dd�|_d|_|j|j�x�dD]�}
|
|j_|jj�d}|j|�|jj�|j|jjd�|j|j |
�|
dkr�t!|jj"�}nt!|j#j$d��}|j|ddg�|j|ddg�|j|d|g�qvW|jj%d�|jj|j�|jj&�q6WdS)NZhttprFTr�zkeycert.pemZcafileg{�G�z�?r;zlocalhost:%dz/frob�secure�contextZcredentials�foo�barr�r�uspämzutf-8r4�funcNamer�r�g@)FT)r�r)r�r�)r�r�)'rrr!r9r/�ssl�ImportErrorr�r��dirname�__file__r�Z
SSLContextZPROTOCOL_SSLv23Zload_cert_chainZcreate_default_contextr1r�r7r�r+rQZserver_portr�Zh_hdlrr�r1r�rPr:rlrCr�rZqueryr��decoder(r8)r3r�r!r�rr�r;�hereZlocalhost_certr�r7�hostZ
secure_clientr�r��dr5r5r6r��s\	





	



zHTTPHandlerTest.test_outputN)rTrUrVr7r�r�r5r5r5r6r�ps
r�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
MemoryTestcCstj|�i|_dS)N)rr7�
_survivors)r3r5r5r6r7�s
zMemoryTest.setUpcGsCx<|D]4}t|�t|�f}tj|�|j|<qWdS)N)�id�repr�weakref�refr�)r3r�r��keyr5r5r6�_watch_for_survival�s
zMemoryTest._watch_for_survivalcCs�tj�g}x?|jj�D].\\}}}|�dkr |j|�q W|r~|jdt|�dj|�f�dS)Nz;%d objects should have survived but have been destroyed: %sz, )�gcZcollectr�r�rUrGrDr�)r3ZdeadZid_�repr_r�r5r5r6�_assertTruesurvival�s
"	zMemoryTest._assertTruesurvivalcCs�|jjtj�tjd�}|j|�|jtj�|jj|j��|j|j��|j	dg�~|j
�tjd�}|j|j��|j	ddg�dS)Nr�r(r^r_)r�r(r^)r�r(r^)r�r(r_)r!r'rrcrr�r(rorSrPr�)r3r�r�r5r5r6�test_persistent_loggers�s


z"MemoryTest.test_persistent_loggersN)rTrUrVr7r�r�r�r5r5r5r6r��sr�c@s(eZdZdd�Zdd�ZdS)�EncodingTestcCs�tjd�}tjdd�\}}tj|�d}z�tj|dd�}|j|�z|j|�Wd|j	|�|j�Xt
|dd�}z |j|j�j
�|�Wd|j�XWdtjj|�r�tj|�XdS)N�testz.logztest_logging-1-ufoo€�encodingzutf-8)rrr�r�r�r8�FileHandlerr1rmr9�openrCrJ�rstripr��isfiler�)r3rkr�r�rr�r�r5r5r6�test_encoding_plain_file�s"


 z%EncodingTest.test_encoding_plain_filecCs�tjd�}d}tjd�}d|_tj�}||d�}tj|�}|j|�z|j	|�Wd|j
|�|j�X|j�}|j
|d�dS)Nr�uдо свидания�cp1251�stricts�� �������
)rr�codecs�	getwriterr�r$�BytesIOr)r1rmr9r8rArC)r3rk�messageZwriter_classr&�writerr�rOr5r5r6�test_encoding_cyrillic_unicode
s	

z+EncodingTest.test_encoding_cyrillic_unicodeN)rTrUrVr�r�r5r5r5r6r��sr�c@s(eZdZdd�Zdd�ZdS)�WarningsTestcCstj��tjd�|jtjd�tjddt�tj�}tj	|�}tj
d�}|j|�tjd�|j
|�|j�}|j�|j|jd�d�tj�}tjd	td
d|d�|j�}|j�|j|d
�WdQRXdS)NTF�always�categoryzpy.warningszI'm warning you...z UserWarning: I'm warning you...
r�Explicitzdummy.py�*z
Dummy linez0dummy.py:42: UserWarning: Explicit
  Dummy line
)�warnings�catch_warningsr�captureWarningsr��filterwarnings�UserWarningr$r%r)rr1�warnr9rAr8r��find�showwarningrC)r3r&r<r�rOZa_filer5r5r6�
test_warnings%s(







	zWarningsTest.test_warningscCs�tj���tjd�|jtjd�tjd�}|j|jg�tjdt	dd�|jt
|j�d�|j|jdtj�WdQRXdS)	NTFzpy.warningsr�zdummy.pyr�rQr)
r�r�rr�r�rrCr/r�r�rD�assertIsInstance�NullHandler)r3r�r5r5r6�test_warnings_no_handlers=s

z&WarningsTest.test_warnings_no_handlersN)rTrUrVr�r�r5r5r5r6r�#sr�cCstj||�S)N)rr+)r9�datefmtr5r5r6�
formatFuncKsrcCs
tj�S)N)rr)r5r5r5r6�handlerFuncNsrc@seZdZdS)�
CustomHandlerN)rTrUrVr5r5r5r6rQsrc@sKeZdZdZddddddiidd	d
dddd
dddiidd
ddd	giiZddddddiidd	d
dddd
dddiiddd
ddd	giidd
diiZddddddiidd	d
dddd
dddiiddd
diidd
ddd	giiZddddddiidd	d
dddd
dddiiddd
ddd	giidd
diiZddddddiidd	d
dddd
dddiiddd
ddd	giidd
diiZddddddiidd	d
dddd
dddiiddd
ddd	giidd
diiZ	ddddddiidd	d
dddd
dddiiddd
ddd	giidd
diiZ
dddddedddiidd	d
dddd
dddiidd
ddd	giiZdddddeddiddedddidde
ddiidd	d
dddd
dddid deiidd
ddd	giiZddddddiidd	d
ed!ddd
dddiiddd
ddd	giidd
diiZddddddiidd	d
ed!ddd
dddd"d#iiddd
ddd	giidd
diiZddddddiidd	d
dddd
dddiidd$d
ddd	giidd
diiZddd%d&ddddiidd	d
dddd
dddiidd'd
ddd	gid$iidd
diiZddd%d(ddddiidd	d
dddd
dddiidd'd
ddd	gid$iidd
diiZddddddiidd	d
dddd
dddiiddd
ddd	giidd
diiZddd)d(dd	d
diiddd
d*iiiZddd)d(dd	d
d*iiddd
d*iiiZddddddiid+d,d-diidd	d
dddd
dddd+d,giiddd
dd+d,giidd
ddd	giiZddd.dddiid/d	d
dddd
dddiidd0dd	d1iddd
ddd	giidd
diiZd.dddiid/d	d
dddd
dddiidd0dd	d1iddd
ddd	giidd
diiZdd2d.dddiid/d	d
dddd
dddiidd0dd	d1iddd
ddd	giidd
diiZddddddiidd	d
dddd
dddd3d4d5d6d7iiidd
ddd	giiZdddd8dd9d:d;iidd<d
dd
ddd8id=d
d>d?d@dd8dAd<d
diiddBd
ddd=gdCdDiiiZdEdF�ZdGdH�ZedIdJ�Z dKdL�Z!dMdN�Z"dOdP�Z#dQdR�Z$dSdT�Z%dUdV�Z&dWdX�Z'dYdZ�Z(d[d\�Z)d]d^�Z*d_d`�Z+dadb�Z,dcdd�Z-dedf�Z.dgdh�Z/didj�Z0dkdl�Z1e2j3e4dm�dndodp��Z5e2j3e4dq�drds��Z6e2j3e4dq�dtdu��Z7e2j3e4dq�dvdw��Z8dxdy�Z9dzd{�Z:dnS)|�ConfigDictTestz^(\w+) \+\+ (\w+)$�versionrQZ
formattersZform1r9z%(levelname)s ++ %(message)sr/�hand1�classzlogging.StreamHandler�	formatter�levelrr&zext://sys.stdout�rootraZloggerszcompiler.parserr(zext://sys.stdboutZNTOSETZWRANINGZmisspelled_namez()z.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)sZform2z.formatFuncZform3Zhand2z.CustomHandlerrgzinvalid parameter namezcompiler.lexerr�F�compilerTZincrementalrc�filtersZfilt1r4Ztrue_formattersZhandler_configszcfg://true_formatterszcfg://handler_configs[hand1]r�r�r�r��
terminatorz!
ZmySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s�style�$Z
fileGlobalZbufferGlobalzlogging.handlers.MemoryHandlerZcapacity�r��mymodulerZ�truecCstjj|�dS)N)rrjZ
dictConfig)r3rlr5r5r6ro�	szConfigDictTest.apply_configcCstj��l}|j|j�tj�}|j|j��|j|j��|j	dgd|�|j	g�WdQRXdS)Nr]r^r&)r]r^)
rrprorqrrrnrSrlrP)r3rrr�r5r5r6rs�	s	zConfigDictTest.test_config0_okcCs�tj��o}|j|�tjd�}|j|j��|j|j��|jddgd|�|jg�WdQRXdS)	Nzcompiler.parserrcr\r]r^r&)rcr\)r]r^)	rrprorrrnrSrlrP)r3rjrrr�r5r5r6rx�	s
	zConfigDictTest.test_config1_okcCs|jt|j|j�dS)N)r�r�rory)r3r5r5r6rz�	sz#ConfigDictTest.test_config2_failurecCs|jt|j|j�dS)N)r�r�ro�config2a)r3r5r5r6�test_config2a_failure�	sz$ConfigDictTest.test_config2a_failurecCs|jt|j|j�dS)N)r�r�ro�config2b)r3r5r5r6�test_config2b_failure�	sz$ConfigDictTest.test_config2b_failurecCs|jt|j|j�dS)N)r�r�ror{)r3r5r5r6r|�	sz#ConfigDictTest.test_config3_failurecCs�tj��y}|j|j�y
t��Wntk
rMtjd�YnXtjj	d�|j
|j�d�|jg�WdQRXdS)Nzjust testingrz-ERROR:root:just testing
Got a [RuntimeError]
)
rrpror}rrr~r�rr�rCrArP)r3rrr5r5r6r��	s

zConfigDictTest.test_config4_okcCs�tj��y}|j|j�y
t��Wntk
rMtjd�YnXtjj	d�|j
|j�d�|jg�WdQRXdS)Nzjust testingrz-ERROR:root:just testing
Got a [RuntimeError]
)
rrpro�config4arrr~r�rr�rCrArP)r3rrr5r5r6�test_config4a_ok
s

zConfigDictTest.test_config4a_okcCs|jd|j�dS)Nrj)rxr�)r3r5r5r6r�
szConfigDictTest.test_config5_okcCs|jt|j|j�dS)N)r�r�ror�)r3r5r5r6�test_config6_failure
sz#ConfigDictTest.test_config6_failurecCs%tj��r}|j|j�tjd�}|j|j��|j|j��|j	d
dgd|�|j	g�WdQRXtj���}|j|j
�tjd�}|j|j�tjd�}|j|j��|j|j��|j	dd
gd|�|j	g�WdQRXdS)Nzcompiler.parserrcr\r]r^r&zcompiler.lexerr_r`)rcr\)r]r^)rcr_)r]r`)
rrpror�rrrnrSrlrPr�r2r
)r3rrr�r5r5r6r�"
s,		zConfigDictTest.test_config7_okcCsQtj��r}|j|j�tjd�}|j|j��|j|j��|j	dd
gd|�|j	g�WdQRXtj���}|j|j
�tjd�}|j|j�|j|j��|j|j��tjd�}|j|j��|j|j��|j	ddddgd|�|j	g�WdQRXdS)Nzcompiler.parserrcr\r]r^r&zcompiler.lexerr_r`rbrd)rcr\)r]r^)rcr_)r]r`)rcrb)r]rd)
rrpror�rrrnrSrlrP�config8r�r
)r3rrr�r5r5r6�test_config_8_ok?
s4		zConfigDictTest.test_config_8_okcCs�tj���}|j|j�tjd�}tjd�}|j|j��|j|j��|j	|j��|j
dddgd	|�|j
g�WdQRXtj���}|j|j�tjd�}|j|j
�|j|j��|j|j��tjd
�}|j|j��|j|j��|j	|j��|j
ddddgd	|�|j
g�WdQRXdS)Nzcompiler.parserzcompiler-hyphenatedrcr\r]r^r[r_r&zcompiler.lexerr`rbrdre)rcr\)r]r^)r[r_)rcr`)r]rb)rcrd)r]re)rrpror�rrrnrSrlr�rP�config8ar�r
)r3rrr�r�r5r5r6�test_config_8a_ok`
s<		z ConfigDictTest.test_config_8a_okcCs�tj���}|j|j�tjd�}|j|j��|jgd|�|j|j	�|j|j��|jgd|�|j|j
�|j|j��|jdgd|�WdQRXdS)Nzcompiler.parserr&rcr_)rcr_)rrpro�config9rrrnrSrP�config9a�config9b)r3rrr�r5r5r6�test_config_9_ok�
s	zConfigDictTest.test_config_9_okcCs�tj���}|j|j�tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��|j	d
dgd	|�WdQRXdS)Nzcompiler.parserrzcompiler.lexerzcompiler.parser.codegenrar\r]r`r&)rar\)r]r`)
rrpro�config10rrrmrSrlrP)r3rrr�r5r5r6�test_config_10_ok�
s	z ConfigDictTest.test_config_10_okcCs|j|j�dS)N)rx�config11)r3r5r5r6�test_config11_ok�
szConfigDictTest.test_config11_okcCs|jt|j|j�dS)N)r�r�ro�config12)r3r5r5r6�test_config12_failure�
sz$ConfigDictTest.test_config12_failurecCs|jt|j|j�dS)N)r�r�ro�config13)r3r5r5r6�test_config13_failure�
sz$ConfigDictTest.test_config13_failurec
Cs�tj��s}|j|j�tjd}|j|jd�|j|jd�tj	d�|j
|j�jd��WdQRXdS)Nrr�z!
ZExclamationz
Exclamation!
)
rrpro�config14rrrCr�r
rmr2rArS)r3rrr<r5r5r6�test_config14_ok�
s

zConfigDictTest.test_config14_okz listen() needs threading to workNcCs=|jd�}tjjd|�}|j�|jj�|j}|jj�z�t	j	t	j
t	j�}|jd�|j
d|f�tjdt|��}||}d}t|�}	x=|	dkr�|j||d��}
||
7}|	|
8}	q�W|j�Wd|jjd�tjj�|jd�XdS)Nzutf-8rg@r�z>L)�encoderrj�listenr�r+rQrr:rr��SOCK_STREAM�
settimeout�connectr�r�rD�sendr8Z
stopListeningr�)r3�textZverifyr$rr=r�rOZ	sentsofar�left�sentr5r5r6�setup_via_listener�
s,

	




z!ConfigDictTest.setup_via_listenerz!Threading required for this test.cCs�tj���}|jtj|j��tjd�}|j|j	��tjd�}|j|j	��tjd�}|j|j	��tjd�}|j
|j	��|jd
dgd	|�WdQRXdS)Nzcompiler.parserrzcompiler.lexerzcompiler.parser.codegenrar\r]r`r&)rar\)r]r`)rrpr5�json�dumpsr"rrrmrSrlrP)r3rrr�r5r5r6�test_listen_config_10_ok�
s	z'ConfigDictTest.test_listen_config_10_okcCs�tj��{}|jtjtj��tjd�}|j	|j
��|j|j
��|jddgd|�|jg�WdQRXdS)	Nzcompiler.parserrcr\r]r^r&)rcr\)r]r^)
rrpr5rhrirgr�rrrnrSrlrP)r3rrr�r5r5r6�test_listen_config_1_ok�
s	z&ConfigDictTest.test_listen_config_1_okcCs�dd�}dd�}tjd�}tjtj�}tj��=}|j||�|j	|j
��|j|j
��WdQRX|jgd|�|jddgdd�tj��I}|j|�tjd�}|j	|j
��|j|j
��WdQRX|jddgd|�|jddgdd�tj��Y}|j|ddd�|�tjd�}|j	|j
��|j|j
��WdQRX|jddgd|�|jddgdd�dS)NcSsdS)Nr5)�stuffr5r5r6�verify_failsz6ConfigDictTest.test_listen_verify.<locals>.verify_failcSs|ddd�S)NrQr�r5)r:r5r5r6�verify_reversesz9ConfigDictTest.test_listen_verify.<locals>.verify_reversezcompiler.parserr&rcr\r]r^rKz^[\w.]+ -> (\w+): (\d+)$r_r`rQrbrd)rcr\)r]r^)rcr_)r]r`)rcr\)r]r^r�)rcrb)r]rd)rcr\)r]r^)
rrrhrirgr�rrpr5rnrSrlrP)r3r;r<r�Zto_sendrrr5r5r6�test_listen_verifysN	
				z!ConfigDictTest.test_listen_verifycCsY|j|j�tjd�jd}|j|jtj�|j|jj	tj
�dS)Nrr)ro�out_of_orderrrr/r�r�r�r�_style�StringTemplateStyle)r3r�r5r5r6�test_out_of_orderAs
z ConfigDictTest.test_out_of_ordercCsvdd%ddddgd	d
dddid
d'ddddgdgddddgi}tjj|�}|j|jd�d�|j|jd�d�|j|jd�d�|j|jd�d�|j|jd�d�|j|jd �d�|jd!�}|j|jd�dddg�|jt|jd"�|jt|jd#�|jt|jd$�dS)(NZatuplerQr��Zalist�a�b�cZadictr�r>r�Znest1�gr<r_�jZnest2r��lrprbZnest3�ozcfg://alist�pzcfg://atuple[1]zcfg://alist[1]zcfg://nest1[1][0]zcfg://nest2[1][1]z
cfg://adict.dzcfg://adict[f]zcfg://nest3zcfg://nosuchzcfg://!zcfg://adict[2])rQr�rB�r<r_)rFrKrG)	rrjZBaseConfiguratorrC�convert�popr��KeyErrorr�)r3r�Zbcr�r5r5r6�test_baseconfigHs$"zConfigDictTest.test_baseconfig);rTrUrVr@rqr�r�ryrrr{r}rdrrrr�r�r�rrrrr r"r$r&r(r*r>rorsrxrzrrr|r�rr�rr�rrr!r#r%r'r)r+rrr�r5r8r9r=rArOr5r5r5r6rTs(
	
		

							!+	?rc@s(eZdZdd�Zdd�ZdS)�ManagerTestcs�g�G�fdd�dtj�}tjd�}|jt|jt�|j|�|jd�}|jd�tjd�|j	�dg�dS)Ncs(eZdZdd�fdd�ZdS)z6ManagerTest.test_manager_loggerclass.<locals>.MyLoggerNcs�j|�dS)N)rU)r3r	r�r��exc_info�extra)�loggedr5r6�_logcsz;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log)rTrUrVrTr5)rSr5r6�MyLoggerbsrUr�zshould appear in loggedzshould not appear in logged)
r�Logger�Managerr��	TypeError�setLoggerClassr�rrmrC)r3rU�manr�r5)rSr6�test_manager_loggerclass_s


z$ManagerTest.test_manager_loggerclasscCs<tjd�}t�}|j|�|j|j|�dS)N)rrW�object�setLogRecordFactoryrC�logRecordFactory)r3rZrMr5r5r6�test_set_log_record_factoryos	
z'ManagerTest.test_set_log_record_factoryN)rTrUrVr[r_r5r5r5r6rP^srPc@seZdZdd�ZdS)�ChildLoggerTestcCs�tj�}tjd�}tjd�}|jd�}|jd�}|j|tjd��|j|tjd��|jd�}|jd�}|jd�}|j|tjd��|j|tjd��|j||�dS)	N�abczdef.ghiZxyzzuvw.xyz�defZghizabc.defzabc.def.ghi)rr�getChildr)r3r��l1�l2�c1�c2Zc3r5r5r6�test_child_loggersvsz"ChildLoggerTest.test_child_loggersN)rTrUrVrhr5r5r5r6r`usr`c@seZdZdS)�DerivedLogRecordN)rTrUrVr5r5r5r6ri�sric@s4eZdZdd�Zdd�Zdd�ZdS)�LogRecordFactoryTestcCs[Gdd�dtj�}tj|�|t�|_|jj|j�tj�|_	dS)Nc@s(eZdZdd�Zdd�ZdS)z2LogRecordFactoryTest.setUp.<locals>.CheckingFiltercSs
||_dS)N)�cls)r3rkr5r5r6r�sz;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__cSs>t|�}||jk	r:d||jf}t|��dS)Nz)Unexpected LogRecord type %s, expected %sT)�typerkrX)r3r�r$r�r5r5r6r��s
z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterN)rTrUrVrr�r5r5r5r6�CheckingFilter�srm)
rr�rr7rir�r!r��getLogRecordFactory�orig_factory)r3rmr5r5r6r7�s

zLogRecordFactoryTest.setUpcCs4|jj|j�tj|�tj|j�dS)N)r!r�r�rr=rr]ro)r3r5r5r6r=�s
zLogRecordFactoryTest.tearDowncCsV|jt|jj|j��tjt�|jj|j��|j	dg�dS)Nr
r]r^)r
r]r^)
r�rXr!rmrSrr]rirlrP)r3r5r5r6�test_logrecord_class�s

z)LogRecordFactoryTest.test_logrecord_classN)rTrUrVr7r=rpr5r5r5r6rj�srjc@sdeZdZdZdd�Zdd�Zdd�Zeje	e
jd�d	�d
d��ZdS)
�QueueHandlerTestz^[\w.]+ -> (\w+): (\d+)$cCstj|�tjd�|_tjj|j�|_tjd�|_	d|j	_
|j	jtj�|j	j
|j�dS)NrQZqueFr�)rr7�queue�Queuerr/�QueueHandler�que_hdlrr�
que_loggerrZr'rar1)r3r5r5r6r7�s
zQueueHandlerTest.setUpcCs|jj�tj|�dS)N)rur8rr=)r3r5r5r6r=�s
zQueueHandlerTest.tearDowncCs�|jj|j��|jtj|jj�|jj|j��|jtj|jj�|j�}|jj|�|jj�}|j	t
|tj��|j
|j|jj�|j
|j|jf|df�dS)N)rvrorSr�rr�Empty�
get_nowaitrnrmr2r�r�	LogRecordrCr4r�r�)r3r�rr5r5r6�test_queue_handler�sz#QueueHandlerTest.test_queue_handler�
QueueListenerz5logging.handlers.QueueListener required for this testcCstjtj��}tjj|j|�}|j�zF|jj	|j
��|jj|j
��|jj|j
��Wd|j
�X|j|jdtjdd��|j|jdtjdd��|j|jdtjdd��|j�tjtj��}|jtj�tjj|j|dd�}|j�zF|jj	|j
��|jj|j
��|jj|j
��Wd|j
�X|j|jdtjdd��|j|jdtjdd	��|j|jdtjdd
��dS)Nr�r�r\r^r_Zrespect_handler_levelTr`rbrd)rZTestHandlerZMatcherrr/r{rrr�rvrmrSrlr�r(r2�matchesrar]r[r8r'r�)r3r��listenerr5r5r6�test_queue_listener�s2
"""
	
""z$QueueHandlerTest.test_queue_listenerN)
rTrUrVr@r7r=rzrrr�rr/r~r5r5r5r6rq�s	rqr{)�patchc@s�eZdZdZedd��Zejej	j
d�ejdd���Z
ejejej	j
d�ejdd����Zed	d
��Zejejdd���Zd
S)�QueueListenerTest�cCs�tjd|�}|jtj�tjj|�}|j|�tjj|�}|j�|j	d�|j	d�|j	d�|j	d�|j	d�|j
�|j|�|j�dS)Nztest_logger_with_id_%s�one�twoZthreeZfourZfive)
rrr'r(r/rtr1r{r�rnr(r9r8)�	log_queuer�r�r�r}r5r5r6�
setup_and_log�s








zQueueListenerTest.setup_and_logr�cCsgxCt|j�D]2}tj�}|j|d|j�|f�qW|j|jd|jd�dS)Nz%s_%srz&correct number of handled log messages)r��repeatrrrsr�r�rC�
call_count)r3�mock_handler_r�r5r5r6�#test_handle_called_with_queue_queues
$z5QueueListenerTest.test_handle_called_with_queue_queuecCs{xWt|j�D]F}tj�}|j|d|j�|f�|j�|j�qW|j|j	d|jd�dS)Nz%s_%srz&correct number of handled log messages)
r�r��multiprocessingrsr�r�r8�join_threadrCr�)r3r�r_r�r5r5r6� test_handle_called_with_mp_queues 
z2QueueListenerTest.test_handle_called_with_mp_queueccs6yx|j�VqWWntjk
r1gSYnXdS)N)rxrrrw)r�r5r5r6�get_all_from_queue$s
z$QueueListenerTest.get_all_from_queuecCs�x�t|j�D]�}tj�}|j|d|j�|f�t|j|��}|j�|j	�gt
jjj
gg}|j||ddd�|D��qWdS)Nz%s_%sz&Found unexpected messages in queue: %scSs1g|]'}t|tj�r'|jn|�qSr5)r�rryr�)r^rpr5r5r6r`@s	zJQueueListenerTest.test_no_messages_in_queue_after_stop.<locals>.<listcomp>)r�r�r�rsr�r��listr�r8r�rr/r{�	_sentinelr)r3r_rrr�rMr5r5r6�$test_no_messages_in_queue_after_stop,s	 

	z6QueueListenerTest.test_no_messages_in_queue_after_stopN)rTrUrVr��staticmethodr�rr\rr/r{rZreap_threadsr�Zrequires_multiprocessing_queuer�r�r�r5r5r5r6r��s
r�c@s.eZdZdd�ZeZdd�ZdS)�UTCcCstS)N)�ZERO)r3�dtr5r5r6�	utcoffsetGsz
UTC.utcoffsetcCsdS)Nr�r5)r3r�r5r5r6�tznameLsz
UTC.tznameN)rTrUrVr��dstr�r5r5r5r6r�Fsr�c@sgeZdZdd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�
FormatterTestcCs[dddtjdtjjddd�dd	d
ddddd
ddi|_i|_dS)Nr4zformatter.testr	�pathnamer�Ztoz	dummy.ext�linenor�rQ�funcr�zMessage with %d %sr�r��placeholders)r�r�)rr(r�r�r��common�variants)r3r5r5r6r7Rs	zFormatterTest.setUpNcCs<t|j�}|dk	r/|j|j|�tj|�S)N)�dictr�r;r�rr�)r3r4�resultr5r5r6�
get_record`szFormatterTest.get_recordcCs�|j�}tjd�}|j|j|�d�tjd�}|jt|j|�|j|j��tjd�}|j	|j��tjd�}|j	|j��tjd�}|j|j��dS)Nz${%(message)s}z${Message with 2 placeholders}z
%(random)sz%(asctime)sz%(asctime)-15s�asctime)
r�rr+rCr9r�rNr��usesTimer2)r3r�r�r5r5r6�test_percentfszFormatterTest.test_percentcCs|j�}tjddd�}|j|j|�d�tjddd�}|jt|j|�|j|j��tjddd�}|j	|j��tjddd�}|j	|j��tjddd�}|j	|j��tjd	dd�}|j|j��dS)
Nz
$%{message}%$r�{z$%Message with 2 placeholders%$z{random}z	{asctime}z{asctime!s:15}z{asctime:15}r�)
r�rr+rCr9r�rNr�r�r2)r3r�r�r5r5r6�test_bracesuszFormatterTest.test_bracescCsJ|j�}tjddd�}|j|j|�d�tjddd�}|j|j|�d�tjddd�}|jt|j|�|j|j��tjddd�}|j	|j��tjd	dd�}|j|j��tjd
dd�}|j	|j��tjddd�}|j|j��dS)Nz$messagerrzMessage with 2 placeholdersz$$%${message}%$$z$%Message with 2 placeholders%$z	${random}z
${asctime}z	${asctimez$asctimer�)
r�rr+rCr9r�rNr�r�r2)r3r�r�r5r5r6�test_dollars�s zFormatterTest.test_dollarscCs |jttjddd�dS)N�x)r�r�rr+)r3r5r5r6�test_invalid_style�sz FormatterTest.test_invalid_stylec	Cs�|j�}tjdddddddt�}tj|jd�j��|_d|_t	j
d�}tj|_|j
|j|�d	�|j
|j|d
�d�|j|�|j
|jd	�dS)Ni�r���rBr�{z%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r��datetime�utcr��mktimeZ
astimezoneZ	timetuple�created�msecsrr+�gmtime�	converterrC�
formatTimer9r�)r3r�r�r�r5r5r6�	test_time�s$!	
zFormatterTest.test_time)
rTrUrVr7r�r�r�r�r�r�r5r5r5r6r�Qsr�c@s(eZdZdd�Zdd�ZdS)�TestBufferingFormattercCsdt|�S)Nz[(%d))rD)r3�recordsr5r5r6�formatHeader�sz#TestBufferingFormatter.formatHeadercCsdt|�S)Nz(%d)])rD)r3r�r5r5r6�formatFooter�sz#TestBufferingFormatter.formatFooterN)rTrUrVr�r�r5r5r5r6r��sr�c@s4eZdZdd�Zdd�Zdd�ZdS)�BufferingFormatterTestcCs1tjddi�tjddi�g|_dS)Nr�r�r�)rr�r�)r3r5r5r6r7�szBufferingFormatterTest.setUpcCsEtj�}|jd|jg��|jd|j|j��dS)NrZonetwo)r�BufferingFormatterrCr9r�)r3r�r5r5r6�test_default�sz#BufferingFormatterTest.test_defaultcCs`t�}|jd|j|j��tjd�}t|�}|jd|j|j��dS)Nz[(2)onetwo(2)]z
<%(message)s>z[(2)<one><two>(2)])r�rCr9r�rr+)r3r�Zlfr5r5r6�test_custom�s
	z"BufferingFormatterTest.test_customN)rTrUrVr7r�r�r5r5r5r6r��sr�c@seZdZdd�ZdS)�
ExceptionTestc
Cs�|j}t�}|j|�ytd��Wntjddd�YnX|j|�|j�|jd}|j	|j
jd��|j	|j
jd��|j	|j
jd��|j	|j
jd	��dS)
Nzdeliberate mistakeZfailed�
stack_infoTrz#Traceback (most recent call last):
z!
RuntimeError: deliberate mistakezStack (most recent call last):
z,logging.exception('failed', stack_info=True))r!�RecordingHandlerr1rrr~r9r8r�r2�exc_textr2rSr�)r3r�r<r5r5r6�test_formatting�s		



zExceptionTest.test_formattingN)rTrUrVr�r5r5r5r6r��sr�c@seZdZdd�ZdS)�LastResortTestc%Cs�|j}|j|j�tj}tj}z/tj��M}|jd�|j	|j
�d�|jd�|j	|j
�d�WdQRXdt_tj��0}|jd�d}|j	|j
�|�WdQRXtj��*}|jd�|j	|j
�d�WdQRXd|j_
dt_tj��*}|jd�|j	|j
�d�WdQRXWd|j|j�|t_|t_XdS)NzThis should not appearrz
Final chance!zFinal chance!
z-No handlers could be found for logger "root"
F)r!r9r*r�
lastResortrrr
rorCrArmr�emittedNoHandlerWarningr1)r3r
Zold_lastresortZold_raise_exceptionsrr�r5r5r6�test_last_resort�s4			

	

	
!	zLastResortTest.test_last_resortN)rTrUrVr�r5r5r5r6r��sr�c@s(eZdZdd�Zdd�ZdS)�FakeHandlercCs4x-dD]%}t|||j|||��qWdS)Nr��flushr8r�)r�r�r8r�)�setattr�record_call)r3�
identifier�calledr�r5r5r6r
s
zFakeHandler.__init__cs���fdd�}|S)Ncs�jdj����dS)Nz{} - {})rUr9r5)r�r��method_namer5r6�inner
sz&FakeHandler.record_call.<locals>.innerr5)r3r�r�r�r�r5)r�r�r�r6r�
szFakeHandler.record_callN)rTrUrVrr�r5r5r5r6r�
sr�cs.eZdZ�fdd�Zdd�Z�S)r�cs&tt|�j||�g|_dS)N)r-r�rr�)r3r�rm)r.r5r6r
szRecordingHandler.__init__cCs|jj|�dS)N)r�rU)r3r�r5r5r6r�
szRecordingHandler.handle)rTrUrVrr�r5r5)r.r6r�

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 �Z�S)!�ShutdownTestcs?tt|�j�g|_tj}|jttd|�dS)Nr)r-r�r7r�rrr�r�)r3Zraise_exceptions)r.r5r6r7
s		zShutdownTest.setUpcs�fdd�}|S)Ncs
���dS)Nr5r5)rlr5r6r�$
sz'ShutdownTest.raise_error.<locals>.innerr5)r3rlr�r5)rlr6�raise_error#
szShutdownTest.raise_errorcCs�td|j�}td|j�}td|j�}ttjj|||g�}tjdt|��ddddd	d
ddd
dddg}|j||j�dS)NrrQr��handlerListz2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - closez0 - release)	r�r�rrr�r�r/r�rC)r3Zhandler0Zhandler1Zhandler2r/rMr5r5r6�test_no_failure(
szShutdownTest.test_no_failurecCsqtd|j�}t|||j|��tjj|�g}tjdt|��|j	d|jd�dS)Nrr�z0 - releaserQr�)
r�r�r�r�rr�r�r/r�rC)r3r�rlr�r/r5r5r6�_test_with_failure_in_method8
s
z)ShutdownTest._test_with_failure_in_methodcCs|jdt�dS)Nr�)r�r�)r3r5r5r6�test_with_ioerror_in_acquireA
sz)ShutdownTest.test_with_ioerror_in_acquirecCs|jdt�dS)Nr�)r�r�)r3r5r5r6�test_with_ioerror_in_flushD
sz'ShutdownTest.test_with_ioerror_in_flushcCs|jdt�dS)Nr8)r�r�)r3r5r5r6�test_with_ioerror_in_closeG
sz'ShutdownTest.test_with_ioerror_in_closecCs|jdt�dS)Nr�)r�r�)r3r5r5r6�test_with_valueerror_in_acquireJ
sz,ShutdownTest.test_with_valueerror_in_acquirecCs|jdt�dS)Nr�)r�r�)r3r5r5r6�test_with_valueerror_in_flushM
sz*ShutdownTest.test_with_valueerror_in_flushcCs|jdt�dS)Nr8)r�r�)r3r5r5r6�test_with_valueerror_in_closeP
sz*ShutdownTest.test_with_valueerror_in_closecCsdt_|jdt�dS)NFr�)rrr��
IndexError)r3r5r5r6�.test_with_other_error_in_acquire_without_raiseS
s	z;ShutdownTest.test_with_other_error_in_acquire_without_raisecCsdt_|jdt�dS)NFr�)rrr�r�)r3r5r5r6�,test_with_other_error_in_flush_without_raiseW
s	z9ShutdownTest.test_with_other_error_in_flush_without_raisecCsdt_|jdt�dS)NFr8)rrr�r�)r3r5r5r6�,test_with_other_error_in_close_without_raise[
s	z9ShutdownTest.test_with_other_error_in_close_without_raisecCs&dt_|jt|jdt�dS)NTr�)rrr�r�r�)r3r5r5r6�+test_with_other_error_in_acquire_with_raise_
s	z8ShutdownTest.test_with_other_error_in_acquire_with_raisecCs&dt_|jt|jdt�dS)NTr�)rrr�r�r�)r3r5r5r6�)test_with_other_error_in_flush_with_raised
s	z6ShutdownTest.test_with_other_error_in_flush_with_raisecCs&dt_|jt|jdt�dS)NTr8)rrr�r�r�)r3r5r5r6�)test_with_other_error_in_close_with_raisei
s	z6ShutdownTest.test_with_other_error_in_close_with_raise)rTrUrVr7r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r5r5)r.r6r�
s 	r�c@s�eZdZdd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zej
dd��ZdS)�ModuleLevelMiscTestcCs\tjjj}|j|d�|jtj|�tjd�|jtjjjd�dS)Nr�S)rr
r�disablerCr�)r3�old_disabler5r5r6�test_disables
s

z ModuleLevelMiscTest.test_disableNcs
g�tj|td�fdd��t�}tjj|�tt|�}|dk	ro||d|�n
|d|�|jt|j	�d�|j	d}|j|j
�d|�|dk	r�|ntt|j��}|j|j|�|j�g�dS)N�basicConfigcs�j||f�S)N)rU)rC�kw)r�r5r6�<lambda>
sz/ModuleLevelMiscTest._test_log.<locals>.<lambda>ztest me: %rrQr)
rrrr�r
r1rrCrDr��
getMessage�upperr�)r3r�r	�	recording�
log_methodr�Zexpected_levelr5)r�r6�	_test_log|
s	

'zModuleLevelMiscTest._test_logcCs|jdtj�dS)Nrk)r�rr])r3r5r5r6�test_log�
szModuleLevelMiscTest.test_logcCs|jd�dS)Nro)r�)r3r5r5r6�
test_debug�
szModuleLevelMiscTest.test_debugcCs|jd�dS)Nrn)r�)r3r5r5r6�	test_info�
szModuleLevelMiscTest.test_infocCs|jd�dS)Nrm)r�)r3r5r5r6�test_warning�
sz ModuleLevelMiscTest.test_warningcCs|jd�dS)Nrl)r�)r3r5r5r6�
test_error�
szModuleLevelMiscTest.test_errorcCs|jd�dS)Nr�)r�)r3r5r5r6�
test_critical�
sz!ModuleLevelMiscTest.test_criticalcCs|jttjt�Gdd�dtj�}tj|�|jtj�|�tjtj�|jtj�tj�dS)Nc@seZdZdS)z;ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggerN)rTrUrVr5r5r5r6rU�
srU)r�rXrrYr\rVrC�getLoggerClass)r3rUr5r5r6�test_set_logger_class�
s
z)ModuleLevelMiscTest.test_set_logger_classcCsNd}td|�\}}}|j�}|jd|�|jd|�dS)Na&if 1:
            import logging

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

            a = A()z-czexception in __del__zValueError: some error)rr�r)r3�code�rc�out�errr5r5r6�test_logging_at_shutdown�
s

z,ModuleLevelMiscTest.test_logging_at_shutdown)rTrUrVr�r�r�r�r�r�r�r�r�rZrequires_type_collectingr�r5r5r5r6r�o
s	r�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
LogRecordTestcCsKtji�}t|�}|j|jd��|j|jd��dS)Nz<LogRecord: �>)rr�r]r2r2rS)r3r�rOr5r5r6�test_str_rep�
szLogRecordTest.test_str_repcCs�t�}tj�}|j|�ddi}tjd|�|j|jdj|�|j|jdj	d�|j
|�|j�dS)NZlessZmorezless is %(less)srzless is more)r�rrr1rmrr�r�rCr�r9r8)r3r<r�r�r5r5r6�
test_dict_arg�
s	

zLogRecordTest.test_dict_argcCsvtji�}|j|jd�y;ddl}tji�}|j|j|j�j�Wntk
rqYnXdS)N�MainProcessr)rr�rC�processNamer��current_processr4r�)r3r��mpr5r5r6�test_multiprocessing�
s 
z"LogRecordTest.test_multiprocessingcCs�tji�}|j}tr8||j�||j�||j�||j�tj}tj	}tj
}zkdt_dt_	dt_
tji�}|j}||j�||j�||j�||j�Wd|t_|t_	|t_
XdS)NF)rr��assertIsNotNoner��thread�
threadName�processr�
logThreads�logProcesses�logMultiprocessing�assertIsNone)r3r�ZNOT_NONEZlog_threadsZ
log_processesZlog_multiprocessing�NONEr5r5r6�
test_optional�
s.	



							


		zLogRecordTest.test_optionalN)rTrUrVr�r�rr
r5r5r5r6r��
s
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 d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Z�S).�BasicConfigTestcsytt|�j�tjj|_tjj�|_tj	dd�|_
tjj|_|j
|j�gtj_dS)N)r-rr7rr
r/rrrrrr	r#r��cleanup)r3)r.r5r6r7szBasicConfigTest.setUpcsRx8tjjdd�D] }tjj|�|j�qWtt|�j�dS)N)rr
r/r9r8r-rr=)r3r<)r.r5r6r=	szBasicConfigTest.tearDowncCs_ttjd|j�tjj�tjj|j�|jtj	dd�<|j
tj_dS)Nr/)r�rr
r/rr:r;rrrr#r	)r3r5r5r6rs

zBasicConfigTest.cleanupcCs�tj�|jttjj�d�tjjd}|j|tj�|j|jt	j
�|j}|j|jj
tj�|j|j�|j|jtj�|jtjj|j�dS)NrQr)rr�rCrDr
r/r�r)r&r�rrr?�_fmt�BASIC_FORMATrr�PercentStyler	r#)r3r�rr5r5r6�test_no_kwargss
	zBasicConfigTest.test_no_kwargscCsltj��Y}tjdtjdd�tjd�tjjd�|j|j	�j
�d�WdQRXdS)Nr&rr�zLog an errorrzERROR:root:Log an error)rrprr�r�rrlr�rCrA�strip)r3rrr5r5r6�test_strformatstyle*s
z#BasicConfigTest.test_strformatstylecCsltj��Y}tjdtjdd�tjd�tjjd�|j|j	�j
�d�WdQRXdS)Nr&rrzLog an errorrzERROR:root:Log an error)rrprr�r�rrlr�rCrAr)r3rrr5r5r6�test_stringtemplatestyle2s
z(BasicConfigTest.test_stringtemplatestylecCs�dd�}tjdd�|jttjj�d�tjjd}|j|tj�tjdd�}|j|jj	|jj	�|j|jj
|jj
�|j|||d�dS)NcSs%|j�|j�tj|�dS)N)r8r�r�)�h1�h2r�r5r5r6r<s

z.BasicConfigTest.test_filename.<locals>.cleanup�filenameztest.logrQrrC)rr�rCrDr
r/r�r�r&�moder4r�)r3rr�rMr5r5r6�
test_filename:szBasicConfigTest.test_filenamecCszdd�}tjdddd�tjjd}tjdd�}|j|jj|jj�|j|||d�dS)NcSs%|j�|j�tj|�dS)N)r8r�r�)rrr�r5r5r6rNs

z.BasicConfigTest.test_filemode.<locals>.cleanuprztest.log�filemode�wbr)	rr�r
r/r�rCr&rr�)r3rr�rMr5r5r6�
test_filemodeLszBasicConfigTest.test_filemodecCs�tj�}|j|j�tjd|�|jttjj	�d�tjj	d}|j
|tj�|j|j|�dS)Nr&rQr)
r$r%r�r8rr�rCrDr
r/r�r)r&)r3r&r�r5r5r6�test_streamZszBasicConfigTest.test_streamcCs=tjdd�tjjdj}|j|jjd�dS)Nr9r�r)rr�r
r/rrCr?r)r3rr5r5r6�test_formatdszBasicConfigTest.test_formatcCs:tjdd�tjjdj}|j|jd�dS)Nrr�r)rr�r
r/rrCr)r3rr5r5r6�test_datefmtjszBasicConfigTest.test_datefmtcCs=tjdd�tjjdj}|j|jtj�dS)Nrrr)rr�r
r/rr�r?r@)r3rr5r5r6�
test_stylepszBasicConfigTest.test_stylecCsrtjj}|jtjj|�tjdd�|jtjjd�tjdd�|jtjjd�dS)Nr	�9�:)rr
r	r�r'r�rC)r3�	old_levelr5r5r6�
test_levelvszBasicConfigTest.test_levelcCs�|j}tj�g}tj}|ttjddd|�|ttjddd|�|ttjd|d|�|ttjdtj�tjdddd�dS)Nrztest.logr&r/ZloglevelrrC)r�rr)r�rr�r�rc)r3r�r/r&r5r5r6�test_incompatible�s		z!BasicConfigTest.test_incompatiblecCstj�tjtj�tj�g}tj�}|dj|�tjd|�|j|dtjj	d�|j|dtjj	d�|j|dtjj	d�|j
|dj�|j
|dj�|j|dj|�|j|dj|dj�dS)Nr�r/rrQ)rr)r�rr+r-r�rr
r/rr)r3r/r�r5r5r6�
test_handlers�s	zBasicConfigTest.test_handlersNcs�g�tj����fdd�}tj�td|�tt|�}|dk	rh||d�n
|d��j�fifg�dS)NcsP��tjj}tjjd��jtjj|��j||f�dS)N�d)rr
r	r'r�rU)rCr�r%)r��old_basic_configr3r5r6�my_basic_config�s
z2BasicConfigTest._test_log.<locals>.my_basic_configr�ztest me)rr�rrrrC)r3r�r	r+r�r5)r�r*r3r6r��s	
zBasicConfigTest._test_logcCs|jdtj�dS)Nrk)r�rra)r3r5r5r6r��szBasicConfigTest.test_logcCs|jd�dS)Nro)r�)r3r5r5r6r��szBasicConfigTest.test_debugcCs|jd�dS)Nrn)r�)r3r5r5r6r��szBasicConfigTest.test_infocCs|jd�dS)Nrm)r�)r3r5r5r6r��szBasicConfigTest.test_warningcCs|jd�dS)Nrl)r�)r3r5r5r6r��szBasicConfigTest.test_errorcCs|jd�dS)Nr�)r�)r3r5r5r6r��szBasicConfigTest.test_critical)rTrUrVr7r=rrrrrrrr r!r"r&r'r(r�r�r�r�r�r�r�r5r5)r.r6r�
s,	

rcs^eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Z�S)
�LoggerAdapterTestcs�tt|�j�tjdd��t�|_tj|_|jj	|j�|j
|jj|j�|j
|jj��fdd�}|j
|�|j
tj
�tjd|jdd�|_dS)Ncs�tjdd�<dS)N)rrr5)�old_handler_listr5r6r�sz(LoggerAdapterTest.setUp.<locals>.cleanupr�rR)r-r,r7rrr�r�r
r�r1r�r9r8r/rj�adapter)r3r)r.)r-r6r7�s
zLoggerAdapterTest.setUpcCs�d}d}yddWnAtk
r[}z!|}|jj||j�WYdd}~XnX|jt|jj�d�|jjd}|j|jtj	�|j|j
|�|j|j|jf�|j|j|j
||jf�dS)Nztesting exception: %rrQr)�ZeroDivisionErrorr.r~r�rCrDr�r�rr]r�r�rQr.�
__traceback__)r3r��excr>r�r5r5r6�test_exception�s)z LoggerAdapterTest.test_exceptioncCs�yddWn+tk
r9}z|}WYdd}~XnX|jjdd|�|jt|jj�d�|jjd}|j|j|j||j	f�dS)NrQrz
exc_info testrQ)
r/r.r~rCrDr�r�rQr.r0)r3r>r1r�r5r5r6�test_exception_excinfo�sz(LoggerAdapterTest.test_exception_excinfocCs�d}|jj||j�|jt|jj�d�|jjd}|j|jtj�|j|j	|�|j|j
|jf�dS)Nzcritical test! %rrQr)r.r�r�rCrDr�r�rr[r�r�)r3r�r�r5r5r6r��szLoggerAdapterTest.test_criticalcCs`|jjjj}d|jjj_|jt|jjjd|�|j|jjd��dS)N�!r�� )r.r�rr�r�r�r��isEnabledFor)r3r�r5r5r6�test_is_enabled_fors
z%LoggerAdapterTest.test_is_enabled_forcCsm|j|jj��x$|jjD]}|jj|�q#W|j|jj��|j|jj��dS)N)r2r.r.r�r/r9r�)r3r�r5r5r6�test_has_handlerss
z#LoggerAdapterTest.test_has_handlers)	rTrUrVr7r2r3r�r7r8r5r5)r.r6r,�s

r,cs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Z�S)�
LoggerTestcs�tt|�j�t�|_tjdd�|_|jj|j�|j	|jj
|j�|j	|jj�|j	tj�dS)Nr4Zblah)
r-r9r7r�r�rrVr�r1r�r9r8r/)r3)r.r5r6r7szLoggerTest.setUpcCs |jt|jjt��dS)N)r�rXr�r'r\)r3r5r5r6�test_set_invalid_level!sz!LoggerTest.test_set_invalid_levelcCs�d}d}yddWnAtk
r[}z!|}|jj||j�WYdd}~XnX|jt|jj�d�|jjd}|j|jtj	�|j|j
|�|j|j|jf�|j|j|j
||jf�dS)Nztesting exception: %rrQr)r/r�r~r�rCrDr�r�rr]r�r�rQr.r0)r3r�r1r>r�r5r5r6r2$s)zLoggerTest.test_exceptioncCs=tjtdd��!|jt|jjdd�WdQRXdS)NrTrhztest message)r�	swap_attrrr�rXr�rk)r3r5r5r6�!test_log_invalid_level_with_raise5sz,LoggerTest.test_log_invalid_level_with_raisec
Cs4tjtdd��|jjdd�WdQRXdS)NrFrhztest message)rr;rr�rk)r3r5r5r6�test_log_invalid_level_no_raise9sz*LoggerTest.test_log_invalid_level_no_raisecslg�tj|tjd�fdd��|jjdd�|jt��d�|jd�d�dS)	N�print_stackcs�j|j��S)N)rUrA)r�rn)r�r5r6r�@sz=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>r�TrQzStack (most recent call last):
r)rrr�	tracebackr��
findCallerrCrD)r3r5)r�r6� test_find_caller_with_stack_info=sz+LoggerTest.test_find_caller_with_stack_infoc
Cs�d}d}d}}}}}}}	tj|||||||||	�	}
xddt|
jj��D]I}|di}|jt|jj|||||||d|d|	�	qkWdS)	Nz	my record�
r�r�z
some valuerR�sinfo)r�r�)	r�_logRecordFactoryrH�__dict__�keysr�rNr��
makeRecord)
r3r4r	r��lnor�r�rQr�rC�rvr�rRr5r5r6�%test_make_record_with_extra_overwriteGs z0LoggerTest.test_make_record_with_extra_overwritecCs}d}d}d}}}}}}}	ddi}
|jj|||||||d|
d|	�}|jd|j�dS)Nz	my recordrBZ	valid_keyz
some valuerRrC)r�rGrrE)r3r4r	r�rHr�r�rQr�rCrRr�r5r5r6�(test_make_record_with_extra_no_overwriteTsz3LoggerTest.test_make_record_with_extra_no_overwritecCsW|j|jj��x$|jjD]}|jj|�q#W|j|jj��dS)N)r2r�r.r/r9r�)r3r�r5r5r6r8]szLoggerTest.test_has_handlerscCs/tjd�}d|_|j|j��dS)Nz
blah.childF)rrrZr�r.)r3Zchild_loggerr5r5r6�test_has_handlers_no_propagateds	z)LoggerTest.test_has_handlers_no_propagatecCsW|jjj}d|jj_|jt|jjd|�|j|jjd��dS)N�r��)r�rr�r�r�r�r6)r3r�r5r5r6r7iszLoggerTest.test_is_enabled_forcCs�tj�}|j|tj�|j|tjd��|j|tjd��|j|tjd�j�|j|tjd�j�|j|tjd�j�|j|tjd��|j|tjd�j�dS)Nrr�zfoo.bar�)rrrr
�parentZassertIsNot)r3r
r5r5r6�test_root_logger_aliasesosz#LoggerTest.test_root_logger_aliasescCs0|jttjt�|jttjd�dS)Nsfoo)r�rXrr�any)r3r5r5r6�test_invalid_names{szLoggerTest.test_invalid_names)rTrUrVr7r:r2r<r=rArJrKr8rLr7rQrSr5r5)r.r6r9s	

	r9c@s4eZdZdd�Zdd�Zdd�ZdS)�BaseFileTestcCsBtj|�tjdd�\}|_tj|�g|_dS)Nz.logztest_logging-2-)rr7r�r�r�r�r8�rmfiles)r3r�r5r5r6r7�s

zBaseFileTest.setUpcCsWx|jD]}tj|�q
Wtjj|j�rFtj|j�tj|�dS)N)rUr�r�r�r�r�rr=)r3r�r5r5r6r=�s
zBaseFileTest.tearDowncCs7|jtjj|�dd|�|jj|�dS)Nr�zLog file %r does not exist)r2r�r�r�rUrU)r3rr5r5r6�
assertLogFile�szBaseFileTest.assertLogFileN)rTrUrVr7r=rVr5r5r5r6rT�srTc@seZdZdd�ZdS)�FileHandlerTestcCs�tj|j�tj|jdd�}|j|j�|jtjj	|j��|j
tji��|j|j�|j
tjj	|j��|j�dS)Nr�T)r�r�r�rr�rr&r�r�r�r�r�rr2r8)r3�fhr5r5r6�
test_delay�szFileHandlerTest.test_delayN)rTrUrVrYr5r5r5r6rW�srWc@saeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zej	dd��Z
d
S)�RotatingFileHandlerTestc	Cs+tjdtjdd|j�ddd�S)NrbrJrQ)rryr(rS)r3r5r5r6�next_rec�sz RotatingFileHandlerTest.next_reccCs?tjj|jdd�}|j|jd��|j�dS)N�maxBytesr)rr/�RotatingFileHandlerr�r��shouldRolloverr8)r3�rhr5r5r6�test_should_not_rollover�sz0RotatingFileHandlerTest.test_should_not_rollovercCsEtjj|jdd�}|j|j|j���|j�dS)Nr\rQ)rr/r]r�r2r^r[r8)r3r_r5r5r6�test_should_rollover�sz,RotatingFileHandlerTest.test_should_rollovercCsFtjj|j�}|j|j��|j|j�|j�dS)N)rr/r]r�r�r[rVr8)r3r_r5r5r6�test_file_created�sz)RotatingFileHandlerTest.test_file_createdcCs�dd�}tjj|jdddd�}||_|j|j��|j|j�|j|j��|j||jd��|j|j��|j||jd��|jt	j
j||jd	���|j�dS)
NcSs|dS)Nz.testr5)r4r5r5r6�namer�sz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namer�backupCountr�r\rQz.1z.2z.3)
rr/r]r�rcr�r[rVr�r�r�r�r8)r3rcr_r5r5r6�test_rollover_filenames�s		&z/RotatingFileHandlerTest.test_rollover_filenamescCs?dd�}dd�}tjj|jdddd�}||_||_|j�}|j|�|j|j�|j�}|j|�||jd	�}|j|�t	j
}t|d
��B}|j�}	t
j|	�}
|j|
jd�|j|�WdQRX|j|j��||jd�}|j|�t|d
��B}|j�}	t
j|	�}
|j|
jd�|j|�WdQRX|j|j��||jd�}t|d
��B}|j�}	t
j|	�}
|j|
jd�|j|�WdQRX|jt	jj||jd
���|j�dS)NcSs|dS)Nz.gzr5)r4r5r5r6rc�sz3RotatingFileHandlerTest.test_rotator.<locals>.namercSsnt|d��K}|j�}tj|d�}t|d��}|j|�WdQRXWdQRXtj|�dS)N�rbr\r)r�rJ�zlib�compressrr�r�)�source�destZsfr�
compressed�dfr5r5r6�rotator�sz5RotatingFileHandlerTest.test_rotator.<locals>.rotatorrdr�r\rQz.1rf�asciiz.2z.3)rr/r]r�rmrcr[r�rVr��linesepr�rJrg�
decompressrCr�r�r�r�r�r8)r3rcrmr_�m1�m2r��newliner�rkrr5r5r6�test_rotator�sB			


	'
''&z$RotatingFileHandlerTest.test_rotatorN)rTrUrVr[r`rarbrerZ
requires_zlibrtr5r5r5r6rZ�srZc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TimedRotatingFileHandlerTestc
s$tjj|jddd�}tjd�}|j|�tjddi�}|j|�|j|j�t	j
d�tjddi�}|j|�|j�d	}tjj
�}d}xit|�D][}|tjd|�}	|j|	jd
��tjj��}|r�|jj��Pq�Wd|}
|s
tjj|j�\}��fdd�tj|�D�}td|jd�dtj�td|dtj�xZ|D]R}
td|
�tjj||
�}t|d��}t|j��WdQRXq�W|j|d|
�dS)N�SrdrQz%(asctime)s %(message)sr�ztesting - initialg�������?ztesting - after delayFr�<�secondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondscs%g|]}|j��r|�qSr5)r2)r^r�)r�r5r6r`s	z>TimedRotatingFileHandlerTest.test_rollover.<locals>.<listcomp>z
Test time: %sz%Y-%m-%d %H-%M-%SrnzThe only matching files are: %szContents of %s:r�i,)rr/�TimedRotatingFileHandlerr�r+r-r�r�rVr�r�r8r�r�r��	timedelta�strftimer�r�r�rUrUr��listdirr�r�rr�r�rJr2)r3rX�fmtZr1Zr2�foundr��GO_BACK�secs�prevr�Zdn�filesr�r�Ztfr5)r�r6�
test_rollover�sB	





" 
z*TimedRotatingFileHandlerTest.test_rollovercCss|j}|ttjj|jddd�|ttjj|jddd�|ttjj|jddd�dS)N�Xr�T�WZW7)r�r�rr/ryr�)r3r�r5r5r6�test_invalid"s	z)TimedRotatingFileHandlerTest.test_invalidcCs�d}tjddd�}tjj|jdddddddd	d
|�}zN|j|�}|j||d�|j|d�}|j||d�Wd|j�XdS)Nr��when�MIDNIGHT�intervalrQrdr�T�atTimerwrB�$i�i��iiжipi@�)	r�r�rr/ryr��computeRolloverrCr8)r3�currentTimer�r_rLr5r5r6�"test_compute_rollover_daily_attime+s	!	z?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attimec	
Cs�ttj��}||d}tjddd�}tj|�j}xVtd�D]H}tjj|j	dd|ddd	dd
dd|�}z�||kr�d||}n
||}|d9}|d7}||7}|j
|�}||krtdtj�tdt
��|j||�||kr<|d7}|j
|d�}||kr}tdtj�tdt
��|j||�Wd|j�XqTWdS)Ni�Qr�r�r�zW%dr�rQrdr�Tr��rwzfailed in timezone: %dzlocal vars: %srBi�i�Qi�i���i`'i�:	iiж)r�r�r�r��tm_wdayr�rr/ryr�r�r��timezone�localsrCr8)	r3r�Ztodayr�ZwdayZdayr_rMrLr5r5r6�#test_compute_rollover_weekly_attime;s8	%	




z@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attimeN)rTrUrVr�r�r�r�r5r5r5r6ru�s*	rucKstj|�tjdd�S)NrxrQ)r�rz)r�r5r5r6r�dsr�rv�Mrw�H�Dr�r�ZW0Zdaysr�ZhourscCs�tjj|jd|dddddd�}d}|j|�}||kr�|d	kr�y	|jrxtj|�}ntj|�}|d
}|d}|d}	tjj	|d
|d
|	}
||
}t
d||jfdtj�t
d|dtj�t
d|dtj�t
d|	dtj�t
d|
dtj�t
d|dtj�Wn3t
k
r�t
dtj�ddtj�YnX|j||�|j�dS)Nr�r�rQrdrr�Tgr�rBr�rrwz
t: %s (%s)rnzcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rr/ryr�r�r�r�r��	localtimeZ	_MIDNIGHTr�r�rr�rQrCr8)r3r��expr_r�rLr$ZcurrentHourZ
currentMinuteZ
currentSecondr�r�r5r5r6�test_compute_rolloveros6	$	



 
&r�ztest_compute_rollover_%sz>win32evtlog/win32evtlogutil/pywintypes required for this test.c@seZdZdd�ZdS)�NTEventLogHandlerTestcCskd}tjd|�}tj|�}ytjjd�}WnItjk
r�}z&|jdkrst	j
d���WYdd}~XnXtjddi�}|j|�|j
�|j|tj|��tjtjB}d}d}	tj|||	�}
xH|
D]@}|jdkrqtj||�}|d	kr?qd
}PqWd|	}|j|d|�dS)NZApplicationZtest_loggingrz#Insufficient privileges to run testr�zTest Log MessageFr)zTest Log Message
Tz3Record not found in event log, went back %d records)�win32evtlogZOpenEventLogZGetNumberOfEventLogRecordsrr/ZNTEventLogHandler�
pywintypesrl�winerrorrZSkipTestr�r�r8Z
assertLessZEVENTLOG_BACKWARDS_READZEVENTLOG_SEQUENTIAL_READZReadEventLogZ
SourceName�win32evtlogutilZSafeFormatMessager2)r3ZlogtypeZelhZnum_recsr<r>r��flagsr~r�eventsr�r5r5r6rT�s8




z NTEventLogHandlerTest.test_basicN)rTrUrVrTr5r5r5r6r��sr��LC_ALLrc&Cs�tttttttttt	t
ttt
ttttttttttttttttttt t!t"t#t$t%g&}t&t'j(d�r�|j)t*�t+j,|�dS)Nr{)-rWr�r�r�rVrgr�r�r�r�r�rrPr�r�r
rjr`rqr�r�rr,r9rLrWrZr�r�r�r�r�r�r�rur�r�r�r�rr/rUr�rZrun_unittest)Ztestsr5r5r6�	test_main�s			
r��__main__)�rZlogging.handlersZlogging.configr�rtr�r�r$r�r6r�rrr�r>rr�r�r�Ztest.support.script_helperrr�rrhr�rr�r�r�r%Zhttp.serverrrrZurllib.parserr�socketserverrr	r
rr�r�r�r�rgZTestCaserrWr�ZSILENTr�ZTERSEZEFFUSIVEr�r�Z	TALKATIVEr�Z
CHATTERBOXZBORINGr�r�r�r�r�r�r�r�r\rr)rr
rrr)r1r@rDr�rIrKrrLrVr+rdrgr�r�r�r�r�r�r�ZIPV6_ENABLEDr�r�r�r�r�rrrrrPr`ryrirjrqr/r�Z
unittest.mockrr�rzr�Ztzinfor�r�r�r�r�r�r�r�r�r�r�r�r�r�rr,r9rTrWrZrur�r�r�r�r�r�Zrun_with_localer�rTr5r5r5r6�<module>sF&
(

f�FYnO5)/0�pL58M41(����#?U		Y'WW6�LjTn	
(!%