Your IP : 216.73.217.129


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-1.pyc



��Yf&L�,@s�
dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlmZddlmZddlZddlZddlZddlZddlZyvddlZddlZddlmZm Z ddl!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
r:YnXGdd	�d	ej/�Z0Gd
d�de0�Z1Gdd
�d
e0�Z2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<e=e<e3d�Z>e3de4de5de6de7de8de9de:d e;d!e<d"i
Z?Gd#d$�d$ej@�ZAGd%d&�d&ej@�ZBGd'd(�d(e0�ZCGd)d*�d*e0�ZDGd+d,�d,eE�ZFGd-d.�d.ejG�ZHGd/d0�d0e0�ZIeroGd1d2�d2e!jJ�ZKGd3d4�d4eE�ZLGd5d6�d6eLe�ZMGd7d8�d8eLe(�ZNGd9d:�d:eLe&�ZOePed;�roGd<d=�d=eN�ZQGd>d?�d?eO�ZRejSed@�GdAdB�dBe0��ZTGdCdD�dDe0�ZUGdEdF�dFejV�ZWGdGdH�dHe0�ZXejSed@�GdIdJ�dJe0��ZYdKdL�ZZejSePed;�dM�ejSed@�GdNdO�dOeY���Z[ejSed@�GdPdQ�dQe0��Z\ejSePed;�dM�ejSed@�GdRdS�dSe\���Z]ejSed@�GdTdU�dUe0��Z^ejSePed;�dM�ejSed@�GdVdW�dWe^���Z_ejSej`dX�ejSed@�GdYdZ�dZe^���ZaejSed@�Gd[d\�d\e0��ZbGd]d^�d^e0�ZcGd_d`�d`e0�ZdGdadb�dbe0�Zeddcdd�Zfdedf�ZgGdgdh�dhejG�ZhGdidj�dje0�ZiGdkdl�dle0�ZjGdmdn�dne0�ZkGdodp�dpejl�ZmGdqdr�dre0�ZnGdsdt�dte0�ZoePejpdu�r�ddlqZqddvlrmsZsGdwdx�dxe0�Ztejud�ZvGdydz�dzejw�Zxex�ZyGd{d|�d|ej/�ZzGd}d~�d~ej{�Z|Gdd��d�ej/�Z}Gd�d��d�e0�Z~Gd�d��d�e0�ZGd�d��d��Z�Gd�d��d�ej��Z�Gd�d��d�e0�Z�Gd�d��d�e0�Z�Gd�d��d�e0�Z�Gd�d��d�ej/�Z�Gd�d��d�ej/�Z�Gd�d��d�e0�Z�Gd�d��d�e0�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�	WejSe+d��Gd�d��d�e0��Z�ej�d�d��d�d���Z�e�d�kr�
e��dS)�zoTest harness for the logging module. Run all tests.

Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved.
�N)�assert_python_ok)�support)�
HTTPServer�BaseHTTPRequestHandler)�urlparse�parse_qs)�ThreadingUDPServer�DatagramRequestHandler�ThreadingTCPServer�StreamRequestHandlerc@s^eZdZdZdZdZdZdd�Zdd�Zd	d	d
d�Z	dd
�Z
d	S)�BaseTestzBase class for logging tests.z&%(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)zxSetup the default logging stream to an internal StringIO instance,
        so that we can examine log output as we want.N�disabledu«×»uĿÖG�zUnexpected handlers: %s)'�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_loggerZgetEffectiveLevel�original_logging_level�io�StringIO�stream�setLevel�DEBUG�
StreamHandler�	root_hdlr�	Formatter�
log_formatZroot_formatter�setFormatter�hasHandlers�handlers�AssertionError�
addHandler�
assertTrue)�selfZlogger_dictrr�nameZhlist�r4�6/opt/alt/python35/lib64/python3.5/test/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)zJRemove our logging stream, and restore the original logging
        level.rN)r%�closer!�
removeHandlerr)r.r&r"rrr�clear�updaterrrrrrrrrrrrr
r )r2�hrrr3r4r4r5�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)z�Match the collected log lines against the regular expression
        self.expected_log_pat, and compare the extracted group values to
        the expected_values list of tuples.z*Log line does not match expected pattern:
z'Remaining output at end of log stream:
N)r%�re�compile�expected_log_pat�getvalue�
splitlines�assertEqual�len�zip�search�fail�tuple�groups�read)	r2Zexpected_valuesr%�patZactual_lines�actual�expected�match�sr4r4r5�assert_log_lines�s	 zBaseTest.assert_log_linescCs|jd7_d|jS)zMGenerate a message consisting solely of an auto-incrementing
        integer.�z%d)�message_num)r2r4r4r5�next_message�szBaseTest.next_message)�__name__�
__module__�__qualname__�__doc__r+r?rQr6r<rOrRr4r4r4r5rFs(rc@s^eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�BuiltinLevelsTestz*Test builtin levels and their inheritance.cCs�|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)rRrrr&r]�
LoggerAdapterrcr'�logr[�error�warning�info�debugrO)r2�mrXrYrZr4r4r5�	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^)
rRrrr&rcr]rkr[rlrmrnrorO)r2rprY�INF_ERRr4r4r5�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)
rRrrr&rcr]rkr[rlrmrnrorO)r2rprYrsZ	INF_UNDEFZ
INF_ERR_UNDEFrwr4r4r5�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`)
rRrrr&rcrkZFATALrnrorO)r2rprYZ
GRANDCHILDZCHILDr4r4r5�test_nested_with_virtual_parents 	z1BuiltinLevelsTest.test_nested_with_virtual_parentcCs<|jtjd�tj�|jtjtj�d�dS)z&See issue #22386 for more information.rcN)rBr�getLevelNamerc)r2r4r4r5�test_regression_223862sz'BuiltinLevelsTest.test_regression_22386cCs�tjtjd�|jtjtjd�|jtjtj�d�|jtjtj�d�|jtjd�tj�dS)z&See issue #29220 for more information.rrc�NOTSETN)r�addLevelNamerc�
addCleanuprBr|r~)r2r4r4r5�test_regression_292207s
z'BuiltinLevelsTest.test_regression_29220N)
rSrTrUrVrqrtrxr{r}r�r4r4r4r5rW�s/#rWc@s:eZdZdZdd�Zdd�Zdd�ZdS)	�BasicFilterTestzTest the bundled Filter class.cCs�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.�	addFilterrrnrRrO�removeFilter)r2Zfilter_�handlerr��	spam_eggs�spam_eggs_fish�spam_bakedbeansr4r4r5�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)r3�split�join)�record�parts�prefixr4r4r5�
filterfunc_sz8BasicFilterTest.test_callable_filter.<locals>.filterfuncrr��	spam.eggs�spam.eggs.fishzspam.bakedbeansrcr^r_)r�rcr^)r�rcr_)	r!r.r�rrrnrRrOr�)r2r�r�r�r�r�r�r4r4r5�test_callable_filter[s 
z$BasicFilterTest.test_callable_filtercCs;tj�}tjddi�}|j|j|��dS)Nr3z	spam.eggs)rr��
makeLogRecordr1�filter)r2�f�rr4r4r5�test_empty_filterxsz!BasicFilterTest.test_empty_filterN)rSrTrUrVr�r�r�r4r4r4r5r�?sr��x�w�v�u�t�s�r�q�p�orP�Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	TalkativeZ	Garrulous�
Chatterbox�Boringc@s"eZdZdZdd�ZdS)�GarrulousFilterz)A filter which blocks garrulous messages.cCs
|jtkS)N)�levelno�	GARRULOUS)r2r�r4r4r5r��szGarrulousFilter.filterN)rSrTrUrVr�r4r4r4r5r��sr�c@s"eZdZdZdd�ZdS)�VerySpecificFilterz5A filter which blocks sociable and taciturn messages.cCs|jttgkS)N)r��SOCIABLE�TACITURN)r2r�r4r4r5r��szVerySpecificFilter.filterN)rSrTrUrVr�r4r4r4r5r��sr�c@sXeZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�CustomLevelsAndFiltersTestz@Test various filtering possibilities with custom logging levels.z^[\w.]+ -> (\w+): (\d+)$cCs>tj|�x*tj�D]\}}tj||�qWdS)N)rr6�my_logging_levels�itemsrr)r2�k�vr4r4r5r6�s
z CustomLevelsAndFiltersTest.setUpcCs+x$tD]}|j||j��qWdS)N)�LEVEL_RANGErkrR)r2�loggerZlvlr4r4r5�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�rO)r2r4r4r5�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�rOrr~)r2r4r4r5�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�rOr�r�)r2r�Zspecific_filterZgarrZfirst_linesr4r4r5�test_specific_filters�s<	
	
		z0CustomLevelsAndFiltersTest.test_specific_filtersN)
rSrTrUrVr?r6r�r�r�r�r4r4r4r5r��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�Handlerr3rB�assertRaises�NotImplementedError�emit)r2r;r4r4r5�	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�delayrP�msgZTestz/var/run/syslogz/dev/log�GET�POST�PUT�	localhostz/logr)r�r�)TF���r�r�r�)r�r�r�)�sys�platform�tempfile�mkstemp�osr7�unlinkrr.�WatchedFileHandler�dev�inorBr��handle�assertFalse�path�existsr1�
SysLogHandlerZfacilityZLOG_USERZ
unixsocket�OSErrorr��
ValueError�HTTPHandlerZBufferingHandlerZshouldFlush)
r2Zexisting�fd�fnr;r�r�r�Zsockname�methodr4r4r5�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�randomZrandint)ZfnameZtries�_)r2r4r5�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�r7�	threading�ThreadZdaemon�startrr.r�r*r,r�r�r�r�r��	Exception�printr�r�r�r�)r2r�Z	del_countZ	log_countr�r�r�Zremoverr;r�r�r�r4)r2r5�	test_raceJs<			

	





zHandlerTest.test_raceN)rSrTrUr�r��unittestZskipIfr�r3�
skipUnlessr�r�r4r4r4r5r�s6r�c@seZdZdd�ZdS)�	BadStreamcCstd��dS)Nzdeliberate mistake)�RuntimeError)r2�datar4r4r5�writezszBadStream.writeN)rSrTrUrr4r4r4r5rysrc@seZdZdd�ZdS)�TestStreamHandlercCs
||_dS)N)�error_record)r2r�r4r4r5�handleError~szTestStreamHandler.handleErrorN)rSrTrUrr4r4r4r5r}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�assertInr@rB)r2r;r�Z	old_raise�stderrr�r4r4r5�test_error_handling�s 	

	
!z%StreamHandlerTest.test_error_handlingN)rSrTrUr
r4r4r4r5r�src@sUeZdZdZdd�Zdd�Zdd�Zdd	�Zd
dd�Zd
S)
�TestSMTPServeraD
        This class implements a test SMTP server.

        :param addr: A (host, port) tuple which the server listens on.
                     You can specify a port value of zero: the server's
                     *port* attribute will hold the actual port number
                     used, which can be used in client connections.
        :param handler: A callable which will be called to process
                        incoming messages. The handler will be passed
                        the client address tuple, who the message is from,
                        a list of recipients and the message data.
        :param poll_interval: The interval, in seconds, used in the underlying
                              :func:`select` or :func:`poll` call by
                              :func:`asyncore.loop`.
        :param sockmap: A dictionary which will be used to hold
                        :class:`asyncore.dispatcher` instances used by
                        :func:`asyncore.loop`. This avoids changing the
                        :mod:`asyncore` module's global state.
        cCsWtjj||dd|dd�|jj�d|_||_d|_||_dS)N�mapZdecode_dataTrP)	�smtpd�
SMTPServer�__init__�socket�getsockname�port�_handler�_thread�
poll_interval)r2�addrr�r�sockmapr4r4r5r�s		zTestSMTPServer.__init__cCs|j||||�dS)ae
            Delegates to the handler passed in to the server's constructor.

            Typically, this will be a test case method.
            :param peer: The client (host, port) tuple.
            :param mailfrom: The address of the sender.
            :param rcpttos: The addresses of the recipients.
            :param data: The message.
            N)r)r2�peer�mailfrom�rcpttosrr4r4r5�process_message�s
zTestSMTPServer.process_messagecCsCtjd|jd|jf�|_}|jd�|j�dS)zO
            Start the server running on a separate daemon thread.
            r�r�TN)r�r��
serve_foreverrr�	setDaemonr�)r2�tr4r4r5r��s
zTestSMTPServer.startcCsHytj|d|j�Wn'tk
rC|js<|jr?�YnXdS)aB
            Run the :mod:`asyncore` loop until normal termination
            conditions arise.
            :param poll_interval: The interval, in seconds, used in the underlying
                                  :func:`select` or :func:`poll` call by
                                  :func:`asyncore.loop`.
            rN)�asyncoreZloopZ_mapr�Z	connectedZ	accepting)r2rr4r4r5r�s

zTestSMTPServer.serve_foreverNcCs'|j�|jj|�d|_dS)z�
            Stop the thread by closing the server instance.
            Wait for the server thread to terminate.

            :param timeout: How long to wait for the server thread
                            to terminate.
            N)r7rr�)r2�timeoutr4r4r5�stop�s
zTestSMTPServer.stop)	rSrTrUrVrrr�rr$r4r4r4r5r�s	rcsOeZdZdZdd�Zdd�Z�fdd�Zdd	d
�Z�S)�ControlMixina>
        This mixin is used to start a server on a separate thread, and
        shut it down programmatically. Request handling is simplified - instead
        of needing to derive a suitable RequestHandler subclass, you just
        provide a callable which will be passed each received request to be
        processed.

        :param handler: A handler callable which will be called with a
                        single parameter - the request - in order to
                        process the request. This handler is called on the
                        server thread, effectively meaning that requests are
                        processed serially. While not quite Web scale ;-),
                        this should be fine for testing applications.
        :param poll_interval: The polling interval in seconds.
        cCs.d|_||_||_tj�|_dS)N)rrrr��Event�ready)r2r�rr4r4r5r�s			zControlMixin.__init__cCsCtjd|jd|jf�|_}|jd�|j�dS)zQ
            Create a daemon thread to run the server, and start it.
            r�r�TN)r�r�rrrr r�)r2r!r4r4r5r�s
zControlMixin.startcs'|jj�tt|�j|�dS)zj
            Run the server. Set the ready flag before entering the
            service loop.
            N)r'�set�superr%r)r2r)�	__class__r4r5r
s
zControlMixin.serve_foreverNcCsM|j�|jdk	r2|jj|�d|_|j�|jj�dS)z�
            Tell the server thread to stop, and wait for it to do so.

            :param timeout: How long to wait for the server thread
                            to terminate.
            N)�shutdownrr��server_closer'r9)r2r#r4r4r5r$s
	
zControlMixin.stop)rSrTrUrVrr�rr$r4r4)r*r5r%�s
	r%c@s7eZdZdZddddd�Zdd�ZdS)	�TestHTTPServera�
        An HTTP server which is controllable using :class:`ControlMixin`.

        :param addr: A tuple with the IP address and port to listen on.
        :param handler: A handler callable which will be called with a
                        single parameter - the request - in order to
                        process the request.
        :param poll_interval: The polling interval in seconds.
        :param log: Pass ``True`` to enable log messages.
        g�?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)r2r3�defaultr4r4r5�__getattr__.szITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__cSs|jj|�dS)N)�serverr)r2r4r4r5r/3szMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_requestcs#�rt�|�j||�dS)N)r)�log_message)r2�formatr�)�DelegatingHTTPRequestHandlerr*rkr4r5r46szITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message)rSrTrUr2r/r4r4)r6rk)r*r5r6-sr6)rrrr%�sslctx)r2rr�rrkr7r4)r6rkr5r+s
zTestHTTPServer.__init__cCs�y:|jj�\}}|jr9|jj|dd�}Wn<tk
rx}ztjjd|��WYdd}~XnX||fS)NZserver_sideTzGot an error:
%s
)rZacceptr7Zwrap_socketr�r�rr)r2�sockr�er4r4r5�get_request>s	zTestHTTPServer.get_request)rSrTrUrVrr:r4r4r4r5r- s
r-cs@eZdZdZdZdddd�Z�fdd�Z�S)�
TestTCPServera�
        A TCP server which is controllable using :class:`ControlMixin`.

        :param addr: A tuple with the IP address and port to listen on.
        :param handler: A handler callable which will be called with a single
                        parameter - the request - in order to process the request.
        :param poll_interval: The polling interval in seconds.
        :bind_and_activate: If True (the default), binds the server and starts it
                            listening. If False, you need to call
                            :meth:`server_bind` and :meth:`server_activate` at
                            some later time before calling :meth:`start`, so that
                            the server will set up the socket and listen on it.
        Tg�?cCsCGdd�dt�}tj||||�tj|||�dS)Nc@seZdZdd�ZdS)z;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlercSs|jj|�dS)N)r3r)r2r4r4r5r�^szBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handleN)rSrTrUr�r4r4r4r5�DelegatingTCPRequestHandler\sr<)rr
rr%)r2rr�r�bind_and_activater<r4r4r5rZszTestTCPServer.__init__cs-tt|�j�|jj�d|_dS)NrP)r)r;�server_bindrrr)r2)r*r4r5r>dszTestTCPServer.server_bind)rSrTrUrVZallow_reuse_addressrr>r4r4)r*r5r;Is

	r;csLeZdZdZdddd�Z�fdd�Z�fdd	�Z�S)
�
TestUDPServerah
        A UDP server which is controllable using :class:`ControlMixin`.

        :param addr: A tuple with the IP address and port to listen on.
        :param handler: A handler callable which will be called with a
                        single parameter - the request - in order to
                        process the request.
        :param poll_interval: The polling interval for shutdown requests,
                              in seconds.
        :bind_and_activate: If True (the default), binds the server and
                            starts it listening. If False, you need to
                            call :meth:`server_bind` and
                            :meth:`server_activate` at some later time
                            before calling :meth:`start`, so that the server will
                            set up the socket and listen on it.
        g�?TcsRG�fdd�dt��tj||�|�tj|||�d|_dS)Ncs1eZdZdd�Z��fdd�Z�S)z;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlercSs|jj|�dS)N)r3r)r2r4r4r5r�}szBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handlecsT|jj�}|rPyt�|�j�Wn!tk
rO|jjsK�YnXdS)N)Zwfiler@r)�finishr�r3�_closed)r2r)�DelegatingUDPRequestHandlerr*r4r5r@�s
zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finish)rSrTrUr�r@r4)rB)r*r5rB{srBF)r	rrr%rA)r2rr�rr=r4)rBr5ryszTestUDPServer.__init__cs-tt|�j�|jj�d|_dS)NrP)r)r?r>rrr)r2)r*r4r5r>�szTestUDPServer.server_bindcs tt|�j�d|_dS)NT)r)r?r,rA)r2)r*r4r5r,�szTestUDPServer.server_close)rSrTrUrVrr>r,r4r4)r*r5r?hs
r?�AF_UNIXc@seZdZejZdS)�TestUnixStreamServerN)rSrTrUrrC�address_familyr4r4r4r5rD�srDc@seZdZejZdS)�TestUnixDatagramServerN)rSrTrUrrCrEr4r4r4r5rF�srFz!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 ✓rPz
Subject: Log
u

Hello ✓)rrZHOSTrr�rrr.ZSMTPHandler�TIMEOUTrBZtoaddrs�messagesr�r�r&�handledr��waitr$r1Zis_setrCr�endswithr7)
r2rr3rr;r�rrrrr4r4r5�
test_basic�s,	
	

zSMTPHandlerTest.test_basiccGs!|jj|�|jj�dS)N)rJ�appendrKr()r2r�r4r4r5r�szSMTPHandlerTest.process_messageN)rSrTrUrIrNrr4r4r4r5rG�srGc@s@eZdZdZdZdd�Zdd�Zdd�Zd	S)
�MemoryHandlerTestzTests for the MemoryHandler.z^[\w.]+ -> (\w+): (\d+)$cCsctj|�tjjdtj|j�|_tjd�|_	d|j	_
|j	j|j�dS)N�
Zmemr)rr6rr.Z
MemoryHandlerrar)�mem_hdlrr�
mem_logger�	propagater0)r2r4r4r5r6�s
zMemoryHandlerTest.setUpcCs|jj�tj|�dS)N)rRr7rr<)r2r4r4r5r<�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�ir4r4r5�
<listcomp>�s	z0MemoryHandlerTest.test_flush.<locals>.<listcomp>rQ)r'r\)rcr^)rar_)r�rU)rSrorRrOrnrmr�)r2�lines�nrYr4r4r5�
test_flush�s$

	


$zMemoryHandlerTest.test_flushN)rSrTrUrVr?r6r<r]r4r4r4r5rP�s
rPc@s"eZdZdZdd�ZdS)�ExceptionFormatterzA special exception formatter.cCsd|djS)Nz
Got a [%s]r)rS)r2Zeir4r4r5�formatException�sz"ExceptionFormatter.formatExceptionN)rSrTrUrVr_r4r4r4r5r^�sr^c@seZdZdZdZdZdZdZejdd�Z	ejdd	�Z
d
edZejdd
�ZdZ
dZdZdd�Zdd�Zdd�Zedd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'S)(�ConfigFileTestz5Reading logging config from a .ini-style config file.z^(\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)r2�conf�kwargs�filer4r4r5�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_stdoutrh�config0rrrnrRrlrO)r2�outputr�r4r4r5�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^)rrir#r$rarbrj�configparserZConfigParserZ	read_filerrcrdrrnrRrlrO)r2rkrg�cpr�r4r4r5�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^)	rrirhrrrnrRrlrO)r2rcrkr�r4r4r5�test_config1_oks
	zConfigFileTest.test_config1_okcCs|jt|j|j�dS)N)r�r�rh�config2)r2r4r4r5�test_config2_failuresz#ConfigFileTest.test_config2_failurecCs|jt|j|j�dS)N)r�r�rh�config3)r2r4r4r5�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]
)rrirh�config4rrr�	exceptionr��stdout�seekrBr@rO)r2rkr�r4r4r5�test_config4_oks

zConfigFileTest.test_config4_okcCs|jd|j�dS)Nrc)rp�config5)r2r4r4r5�test_config5_ok)szConfigFileTest.test_config5_okcCs|jd|j�dS)Nrc)rp�config6)r2r4r4r5�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)rrirh�config1arrrnrRrl�criticalrO�config7r�r
)r2rkr��
hyphenatedr4r4r5�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)rh�disable_testrrr�r
r1)r2r�r4r4r5�test_logger_disablingZsz$ConfigFileTest.test_logger_disablingN)rSrTrUrVr?rj�config1r~�replacerqrsrurzr|r�r�rhrlrorprrrtryr{r}r�r�r4r4r4r5r`�s0  *&+r`c@sdeZdZdZer$eZdZdd�Zdd�Z	dd	�Z
d
d�Zdd
�ZdS)�SocketHandlerTestzTest for SocketHandler objects.r�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)ztSet up a TCP server to receive log messages, and a SocketHandler
        pointing to that server's address and port.g{�G�z�?r�Nrr)rr6�server_class�address�
handle_socketr3r�r'rLrr.Z
SocketHandler�
isinstance�server_addressrGr�	sock_hdlr�
log_outputr!r8r0r�Z	SemaphorerK)r2r3�hclsr4r4r5r6ms


	zSocketHandlerTest.setUpcCsIz4|jjd�|jj|j�|jj�Wdtj|�XdS)zShutdown the TCP server.g@N)r3r$r!r8r�r7rr<)r2r4r4r5r<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�
)
Z
connectionZrecvrC�structZunpack�pickle�loadsrr�r�r�rK�release)r2�requestZconn�chunk�slen�objr�r4r4r5r��s	!zSocketHandlerTest.handle_socketcCsZtjd�}|jd�|jj�|jd�|jj�|j|jd�dS)NZtcpr��eggsz
spam
eggs
)rrrlrK�acquirerorBr�)r2r�r4r4r5�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
retryStartr3r$rr!rvrlr��
assertGreaterZ	retryTimer�)r2�nowr4r4r5�
test_noserver�s
zSocketHandlerTest.test_noserverN)r�r)
rSrTrUrVr�r;r�r�r6r<r�r�r�r4r4r4r5r�ds		r�cCs<tjdddd�\}}tj|�tj|�|S)Nr�Z
test_logging_�suffixz.sock)r�r�r�r7�remove)r�r�r4r4r5�_get_temp_domain_socket�s

r�zUnix sockets requiredc@sIeZdZdZer-eed�r-eZdd�Z	dd�Z
dS)�UnixSocketHandlerTestz)Test for SocketHandler with unix sockets.rCcCst�|_tj|�dS)N)r�r�r�r6)r2r4r4r5r6�szUnixSocketHandlerTest.setUpcCs!tj|�tj|j�dS)N)r�r<r�r�r�)r2r4r4r5r<�s
zUnixSocketHandlerTest.tearDownN)rSrTrUrVr��hasattrrrDr�r6r<r4r4r4r5r��s
r�c@sXeZdZdZer$eZd
Zdd�Zdd�Z	dd	�Z
d
d�ZdS)�DatagramHandlerTestzTest for DatagramHandler.r�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)zvSet up a UDP server to receive log messages, and a DatagramHandler
        pointing to that server's address and port.g{�G�z�?r�Nrr)rr6r�r��handle_datagramr3r�r'rLrr.ZDatagramHandlerr�r�rGrr�r�r!r8r0r�r&rK)r2r3r�r4r4r5r6�s


	zDatagramHandlerTest.setUpcCsIz4|jjd�|jj|j�|jj�Wdtj|�XdS)zShutdown the UDP server.g@N)r3r$r!r8r�r7rr<)r2r4r4r5r<�s
zDatagramHandlerTest.tearDowncCsptjdd�}|jt|�d�}tj|�}tj|�}|j|j	d7_|j
j�dS)Nz>Lrr�)r��pack�packetrCr�r�rr�r�r�rKr()r2r�r�r�r�r�r4r4r5r��sz#DatagramHandlerTest.handle_datagramcCsgtjd�}|jd�|jj�|jj�|jd�|jj�|j|jd�dS)NZudpr�r�z
spam
eggs
)rrrlrKrLr9rBr�)r2r�r4r4r5r��s




zDatagramHandlerTest.test_outputN)r�r)rSrTrUrVr�r?r�r�r6r<r�r�r4r4r4r5r��s	r�c@sIeZdZdZer-eed�r-eZdd�Z	dd�Z
dS)�UnixDatagramHandlerTestz,Test for DatagramHandler using Unix sockets.rCcCst�|_tj|�dS)N)r�r�r�r6)r2r4r4r5r6
szUnixDatagramHandlerTest.setUpcCs!tj|�tj|j�dS)N)r�r<r�r�r�)r2r4r4r5r<s
z UnixDatagramHandlerTest.tearDownN)rSrTrUrVr�r�rrFr�r6r<r4r4r4r5r�s
r�c@sXeZdZdZer$eZd
Zdd�Zdd�Z	dd	�Z
d
d�ZdS)�SysLogHandlerTestz!Test for SysLogHandler using UDP.r�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)ztSet up a UDP server to receive log messages, and a SysLogHandler
        pointing to that server's address and port.g{�G�z�?rrN)rr6r�r�r�r3r�r'rLrr.r�r�r�rGr�sl_hdlrr�r!r8r0r�r&rK)r2r3r�r4r4r5r6s


"	zSysLogHandlerTest.setUpcCsIz4|jjd�|jj|j�|jj�Wdtj|�XdS)zShutdown the UDP server.g@N)r3r$r!r8r�r7rr<)r2r4r4r5r<.s
zSysLogHandlerTest.tearDowncCs|j|_|jj�dS)N)r�r�rKr()r2r�r4r4r5r�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)rrrlrKrLrBr�r9r�Z
append_nul�ident)r2r�r4r4r5r�;s







zSysLogHandlerTest.test_outputN)r�r)rSrTrUrVr�r?r�r�r6r<r�r�r4r4r4r5r�s	r�c@sIeZdZdZer-eed�r-eZdd�Z	dd�Z
dS)�UnixSysLogHandlerTestz)Test for SysLogHandler with Unix sockets.rCcCst�|_tj|�dS)N)r�r�r�r6)r2r4r4r5r6UszUnixSysLogHandlerTest.setUpcCs!tj|�tj|j�dS)N)r�r<r�r�r�)r2r4r4r5r<Zs
zUnixSysLogHandlerTest.tearDownN)rSrTrUrVr�r�rrFr�r6r<r4r4r4r5r�Ls
r�z$IPv6 support required for this test.csFeZdZdZeZdZ�fdd�Z�fdd�Z�S)	�IPv6SysLogHandlerTestz&Test for SysLogHandler with IPv6 host.�::1rcs&tj|j_tt|�j�dS)N)rZAF_INET6r�rEr)r�r6)r2)r*r4r5r6hszIPv6SysLogHandlerTest.setUpcs&tj|j_tt|�j�dS)N)r�AF_INETr�rEr)r�r<)r2)r*r4r5r<lszIPv6SysLogHandlerTest.tearDown)r�r)	rSrTrUrVr?r�r�r6r<r4r4)r*r5r�^s
r�c@s:eZdZdZdd�Zdd�Zdd�ZdS)	�HTTPHandlerTestzTest for HTTPHandler.cCs tj|�tj�|_dS)ztSet up an HTTP server to receive log messages, and a HTTPHandler
        pointing to that server's address and port.N)rr6r�r&rK)r2r4r4r5r6ts
zHTTPHandlerTest.setUpc	Cs�|j|_t|j�|_|jdkrmy,t|jd�}|jj|�|_Wnd|_YnX|j	d�|j
�|jj�dS)Nr�zContent-Length��)
�commandrr��log_data�intZheadersZrfilerI�	post_dataZ
send_responseZend_headersrKr()r2r�Zrlenr4r4r5�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�?r7zlocalhost:%dz/frob�secure�contextZcredentials�foo�barr�r�uspämzutf-8r3ZfuncNamer�r�g@)FT)r�r)r�r�)r�r�)'rrr!r8r.�ssl�ImportErrorr�r��dirname�__file__r�Z
SSLContextZPROTOCOL_SSLv23Zload_cert_chainZcreate_default_contextr-r�r3r�r'rLZserver_portr�Zh_hdlrr�r0r�rKr9rlrBr�rZqueryr��decoder$r7)r2r�r!r�rr�r7�hereZlocalhost_certr�r3�hostZ
secure_clientr�r��dr4r4r5r��s\	





	



zHTTPHandlerTest.test_outputN)rSrTrUrVr6r�r�r4r4r4r5r�ps
r�c@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�
MemoryTestz*Test memory persistence of logger objects.cCstj|�i|_dS)z8Create a dict to remember potentially destroyed objects.N)rr6�
_survivors)r2r4r4r5r6�s
zMemoryTest.setUpcGsCx<|D]4}t|�t|�f}tj|�|j|<qWdS)zKWatch the given objects for survival, by creating weakrefs to
        them.N)�id�repr�weakref�refr�)r2r�r��keyr4r4r5�_watch_for_survival�s
zMemoryTest._watch_for_survivalcCs�tj�g}x?|jj�D].\\}}}|�dkr |j|�q W|r~|jdt|�dj|�f�dS)z;Assert that all objects watched for survival have survived.Nz;%d objects should have survived but have been destroyed: %sz, )�gcZcollectr�r�rOrFrCr�)r2ZdeadZid_�repr_r�r4r4r5�_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'rorRrOr�)r2r�r�r4r4r5�test_persistent_loggers�s


z"MemoryTest.test_persistent_loggersN)rSrTrUrVr6r�r�r�r4r4r4r5r��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�r7�FileHandlerr0rmr8�openrBrI�rstripr��isfiler�)r2rkr�r�rr�r�r4r4r5�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(r0rmr8r7r@rB)r2rk�messageZwriter_classr%�writerr�rNr4r4r5�test_encoding_cyrillic_unicode
s	

z+EncodingTest.test_encoding_cyrillic_unicodeN)rSrTrUr�r�r4r4r4r5r��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(rr0�warnr8r@r7r��find�showwarningrB)r2r%r;r�rNZa_filer4r4r5�
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�rPr)
r�r�rr�r�rrBr.r�r�rC�assertIsInstance�NullHandler)r2r�r4r4r5�test_warnings_no_handlers=s

z&WarningsTest.test_warnings_no_handlersN)rSrTrUr�r�r4r4r4r5r�#sr�cCstj||�S)N)rr*)r5�datefmtr4r4r5�
formatFuncKsr�cCs
tj�S)N)rr(r4r4r4r5�handlerFuncNsr�c@seZdZdS)�
CustomHandlerN)rSrTrUr4r4r4r5r�Qsr�c@sQeZdZdZdZddddddiid	d
ddd
dddddiidddd	d
giiZddddddiid	d
ddd
dddddiiddddd	d
giidddiiZddddddiid	d
ddd
dddddiiddddiidddd	d
giiZddddddiid	d
ddd
dddddiiddddd	d
giidddiiZddddddiid	d
ddd
dddddiiddddd	d
giidddiiZ	ddddddiid	d
ddd
dddddiiddddd	d
giidddiiZ
ddddddiid	d
ddd
dddddiiddddd	d
giidddiiZdddddedddiid	d
ddd
dddddiidddd	d
giiZddddde
ddiddedddid deddiid	d
ddd
dddddid!deiidddd	d
giiZddddddiid	d
ded"d
dddddiiddddd	d
giidddiiZddddddiid	d
ded"d
dddddd#d$iiddddd	d
giidddiiZddddddiid	d
ddd
dddddiidd%ddd	d
giidddiiZddd&d'ddddiid	d
ddd
dddddiidd(ddd	d
gid%iidddiiZddd&d)ddddiid	d
ddd
dddddiidd(ddd	d
gid%iidddiiZddddddiid	d
ddd
dddddiiddddd	d
giidddiiZddd*d)d	d
ddiidddd+iiiZddd*d)d	d
dd+iidddd+iiiZddddddiid,d-d.diid	d
ddd
dddddd,d-giiddddd,d-giidddd	d
giiZddd/dddiid0d
ddd
dddddiidd1d	d
d2iddddd	d
giidddiiZd/dddiid0d
ddd
dddddiidd1d	d
d2iddddd	d
giidddiiZdd3d/dddiid0d
ddd
dddddiidd1d	d
d2iddddd	d
giidddiiZddddddiid	d
ddd
dddddd4d5d6d7d8iiidddd	d
giiZdddd9dd:d;d<iid	d=ddddd
d9id>dd?d@dAd
d9dBd=ddiiddCddd	d>gdDdEiiiZdFdG�ZdHdI�Z edJdK�Z!dLdM�Z"dNdO�Z#dPdQ�Z$dRdS�Z%dTdU�Z&dVdW�Z'dXdY�Z(dZd[�Z)d\d]�Z*d^d_�Z+d`da�Z,dbdc�Z-ddde�Z.dfdg�Z/dhdi�Z0djdk�Z1dldm�Z2e3j4e5dn�dodpdq��Z6e3j4e5dr�dsdt��Z7e3j4e5dr�dudv��Z8e3j4e5dr�dwdx��Z9dydz�Z:d{d|�Z;doS)}�ConfigDictTestz)Reading logging config from a dictionary.z^(\w+) \+\+ (\w+)$�versionrPZ
formattersZform1r5z%(levelname)s ++ %(message)sr.�hand1�classzlogging.StreamHandler�	formatter�levelr~r%zext://sys.stdout�rootraZloggerszcompiler.parserr'zext://sys.stdboutZNTOSETZWRANINGZmisspelled_namez()z.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)sZform2z.formatFuncZform3Zhand2z.CustomHandlerrgzinvalid parameter namezcompiler.lexerr�F�compilerTZincrementalrc�filtersZfilt1r3Ztrue_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��mymodulerT�truecCstjj|�dS)N)rrcZ
dictConfig)r2rer4r4r5rh�	szConfigDictTest.apply_configcCstj��l}|j|j�tj�}|j|j��|j|j��|j	dgd|�|j	g�WdQRXdS)Nr]r^r%)r]r^)
rrirhrjrrrnrRrlrO)r2rkr�r4r4r5rl�	s	zConfigDictTest.test_config0_okcCs�tj��o}|j|�tjd�}|j|j��|j|j��|jddgd|�|jg�WdQRXdS)	Nzcompiler.parserrcr\r]r^r%)rcr\)r]r^)	rrirhrrrnrRrlrO)r2rcrkr�r4r4r5rp�	s
	zConfigDictTest.test_config1_okcCs|jt|j|j�dS)N)r�r�rhrq)r2r4r4r5rr�	sz#ConfigDictTest.test_config2_failurecCs|jt|j|j�dS)N)r�r�rh�config2a)r2r4r4r5�test_config2a_failure�	sz$ConfigDictTest.test_config2a_failurecCs|jt|j|j�dS)N)r�r�rh�config2b)r2r4r4r5�test_config2b_failure�	sz$ConfigDictTest.test_config2b_failurecCs|jt|j|j�dS)N)r�r�rhrs)r2r4r4r5rt�	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]
)
rrirhrurrrvr�rwrxrBr@rO)r2rkr4r4r5ry�	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]
)
rrirh�config4arrrvr�rwrxrBr@rO)r2rkr4r4r5�test_config4a_ok
s

zConfigDictTest.test_config4a_okcCs|jd|j�dS)Nrc)rprz)r2r4r4r5r{
szConfigDictTest.test_config5_okcCs|jt|j|j�dS)N)r�r�rhr|)r2r4r4r5�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`)
rrirhr�rrrnrRrlrOr�r1r
)r2rkr�r4r4r5r�"
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)
rrirhr�rrrnrRrlrO�config8r�r
)r2rkr�r4r4r5�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)rrirhr~rrrnrRrlrrO�config8ar�r
)r2rkr�r�r4r4r5�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_)rrirh�config9rrrnrRrO�config9a�config9b)r2rkr�r4r4r5�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.parserr�zcompiler.lexerzcompiler.parser.codegenrar\r]r`r%)rar\)r]r`)
rrirh�config10rrrmrRrlrO)r2rkr�r4r4r5�test_config_10_ok�
s	z ConfigDictTest.test_config_10_okcCs|j|j�dS)N)rp�config11)r2r4r4r5�test_config11_ok�
szConfigDictTest.test_config11_okcCs|jt|j|j�dS)N)r�r�rh�config12)r2r4r4r5�test_config12_failure�
sz$ConfigDictTest.test_config12_failurecCs|jt|j|j�dS)N)r�r�rh�config13)r2r4r4r5�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)Nr�r�z!
ZExclamationz
Exclamation!
)
rrirh�config14rrrBr�r�rmr1r@rM)r2rkr;r4r4r5�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)�encoderrcZlistenr�r'rLrr9rr�ZSOCK_STREAMZ
settimeoutZconnectr�r�rC�sendr7Z
stopListeningr�)r2�textZverifyr!rr8r�rNZ	sentsofar�leftZsentr4r4r5�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.parserr�zcompiler.lexerzcompiler.parser.codegenrar\r]r`r%)rar\)r]r`)rrir!�json�dumpsrrrrmrRrlrO)r2rkr�r4r4r5�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^)
rrir!rarbr`r�rrrnrRrlrO)r2rkr�r4r4r5�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)Nr4)�stuffr4r4r5�verify_failsz6ConfigDictTest.test_listen_verify.<locals>.verify_failcSs|ddd�S)NrPr�r4)r&r4r4r5�verify_reversesz9ConfigDictTest.test_listen_verify.<locals>.verify_reversezcompiler.parserr%rcr\r]r^rJz^[\w.]+ -> (\w+): (\d+)$r_r`rPrbrd)rcr\)r]r^)rcr_)r]r`)rcr\)r]r^r�)rcrb)r]rd)rcr\)r]r^)
rrrarbr`r�rrir!rnrRrlrO)r2r'r(r�Zto_sendrkr4r4r5�test_listen_verifysN	
				z!ConfigDictTest.test_listen_verifycCsY|j|j�tjd�jd}|j|jtj�|j|jj	tj
�dS)Nrr)rh�out_of_orderrrr.r�r�r�r��_style�StringTemplateStyle)r2r�r4r4r5�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)(NZatuplerPr��Zalist�a�b�cZadictr�r9r�Znest1�gr;rY�jZnest2r��lrpr\Znest3�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])rPr�r.�r;rY)r2r7r3)	rrcZBaseConfiguratorrBZconvert�popr��KeyErrorr�)r2r�Zbcr�r4r4r5�test_baseconfigHs$"zConfigDictTest.test_baseconfig)<rSrTrUrVr?rjr�r~rqrrrsrur^r�r�rrzr|r�rr
rrrrrrrrr*rhrlrprrrrrtryr	r{r
r�rrrrrrrrr�r�r�r!r$r%r)r-r:r4r4r4r5r�Ts*
	
		

							!+	?r�c@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)rO)r2r�r�r��exc_info�extra)�loggedr4r5�_logcsz;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log)rSrTrUr?r4)r>r4r5�MyLoggerbsr@r�zshould appear in loggedzshould not appear in logged)
r�Logger�Managerr��	TypeError�setLoggerClassr�rrmrB)r2r@�manr�r4)r>r5�test_manager_loggerclass_s


z$ManagerTest.test_manager_loggerclasscCs<tjd�}t�}|j|�|j|j|�dS)N)rrB�object�setLogRecordFactoryrBZlogRecordFactory)r2rErLr4r4r5�test_set_log_record_factoryos	
z'ManagerTest.test_set_log_record_factoryN)rSrTrUrFrIr4r4r4r5r;^sr;c@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)rrZgetChildr	)r2r��l1�l2Zc1Zc2Zc3r4r4r5�test_child_loggersvsz"ChildLoggerTest.test_child_loggersN)rSrTrUrOr4r4r4r5rJusrJc@seZdZdS)�DerivedLogRecordN)rSrTrUr4r4r4r5rP�srPc@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)r2rRr4r4r5r�sz;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__cSs>t|�}||jk	r:d||jf}t|��dS)Nz)Unexpected LogRecord type %s, expected %sT)�typerRrC)r2r�r!r�r4r4r5r��s
z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterN)rSrTrUrr�r4r4r4r5�CheckingFilter�srT)
rr�rr6rPr�r!r�ZgetLogRecordFactory�orig_factory)r2rTr4r4r5r6�s

zLogRecordFactoryTest.setUpcCs4|jj|j�tj|�tj|j�dS)N)r!r�r�rr<rrHrU)r2r4r4r5r<�s
zLogRecordFactoryTest.tearDowncCsV|jt|jj|j��tjt�|jj|j��|j	dg�dS)Nr�r]r^)r�r]r^)
r�rCr!rmrRrrHrPrlrO)r2r4r4r5�test_logrecord_class�s

z)LogRecordFactoryTest.test_logrecord_classN)rSrTrUr6r<rVr4r4r4r5rQ�srQc@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)NrPZqueFr�)rr6�queue�Queuerr.�QueueHandler�que_hdlrr�
que_loggerrTr&rar0)r2r4r4r5r6�s
zQueueHandlerTest.setUpcCs|jj�tj|�dS)N)r[r7rr<)r2r4r4r5r<�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)r\rorRr�rX�Empty�
get_nowaitrnrmr1r�r�	LogRecordrBr3r�r�)r2r�rr4r4r5�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.rarXr�r\rmrRrlrr$r1Zmatchesrar]r[r7r&r�)r2r��listenerr4r4r5�test_queue_listener�s2
"""
	
""z$QueueHandlerTest.test_queue_listenerN)
rSrTrUr?r6r<r`r�r�r�rr.rcr4r4r4r5rW�s	rWra)�patchc@s�eZdZdZdZedd��Zeje	j
jd�ej
dd���Zejeje	j
jd�ej
dd	����Zed
d��Zejej
dd
���ZdS)�QueueListenerTestz~
        Tests based on patch submitted for issue #27930. Ensure that
        QueueListener handles all log messages.
        �cCs�tjd|�}|jtj�tjj|�}|j|�tjj|�}|j�|j	d�|j	d�|j	d�|j	d�|j	d�|j
�|j|�|j�dS)z�
            Creates a logger with a QueueHandler that logs to a queue read by a
            QueueListener. Starts the listener, logs five messages, and stops
            the listener.
            ztest_logger_with_id_%s�one�twoZthreeZfourZfiveN)
rrr&r'r.rZr0rar�rnr$r8r7)�	log_queuer�r�r�rbr4r4r5�
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��repeatrXrYrjr�rB�
call_count)r2�mock_handlerYrir4r4r5�#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�rk�multiprocessingrYrjr�r7�join_threadrBrl)r2rmrYrir4r4r5� test_handle_called_with_mp_queues 
z2QueueListenerTest.test_handle_called_with_mp_queueccs6yx|j�VqWWntjk
r1gSYnXdS)N)r^rXr])rir4r4r5�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)a
            Five messages are logged then the QueueListener is stopped. This
            test then gets everything off the queue. Failure of this test
            indicates that messages were not registered on the queue until
            _after_ the QueueListener stopped.
            z%s_%sz&Found unexpected messages in queue: %scSs1g|]'}t|tj�r'|jn|�qSr4)r�rr_r�)rXrpr4r4r5rZ@s	zJQueueListenerTest.test_no_messages_in_queue_after_stop.<locals>.<listcomp>N)r�rkrorYrjr��listrrr7rprr.raZ	_sentinelr)r2rYrXr�rLr4r4r5�$test_no_messages_in_queue_after_stop,s	 

	z6QueueListenerTest.test_no_messages_in_queue_after_stopN)rSrTrUrVrk�staticmethodrjrdrGrr.rarZreap_threadsrnZrequires_multiprocessing_queuerqrrrtr4r4r4r5re�s
rec@s.eZdZdd�ZeZdd�ZdS)�UTCcCstS)N)�ZERO)r2�dtr4r4r5�	utcoffsetGsz
UTC.utcoffsetcCsdS)Nrvr4)r2rxr4r4r5�tznameLsz
UTC.tznameN)rSrTrUryZdstrzr4r4r4r5rvFsrvc@sgeZdZdd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�
FormatterTestcCs[dddtjdtjjddd�dd	d
ddddd
ddi|_i|_dS)Nr3zformatter.testr��pathnamer�Ztoz	dummy.ext�linenor�r<�funcr�zMessage with %d %sr�r��placeholders)r�r)rr'r�r�r��common�variants)r2r4r4r5r6Rs	zFormatterTest.setUpNcCs<t|j�}|dk	r/|j|j|�tj|�S)N)�dictr�r:r�rr�)r2r3�resultr4r4r5�
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*rBr5r�r9r��usesTimer1)r2r�r�r4r4r5�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*rBr5r�r9r�r�r1)r2r�r�r4r4r5�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$messager�rzMessage with 2 placeholdersz$$%${message}%$$z$%Message with 2 placeholders%$z	${random}z
${asctime}z	${asctimez$asctimer�)
r�rr*rBr5r�r9r�r�r1)r2r�r�r4r4r5�test_dollars�s zFormatterTest.test_dollarscCs |jttjddd�dS)N�x)r�r�rr*)r2r4r4r5�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���r.r�{z%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r��datetime�utcr�ZmktimeZ
astimezoneZ	timetupleZcreatedZmsecsrr*�gmtimeZ	converterrBZ
formatTimer5r�)r2r�rxr�r4r4r5�	test_time�s$!	
zFormatterTest.test_time)
rSrTrUr6r�r�r�r�r�r�r4r4r4r5r{Qsr{c@s(eZdZdd�Zdd�ZdS)�TestBufferingFormattercCsdt|�S)Nz[(%d))rC)r2�recordsr4r4r5�formatHeader�sz#TestBufferingFormatter.formatHeadercCsdt|�S)Nz(%d)])rC)r2r�r4r4r5�formatFooter�sz#TestBufferingFormatter.formatFooterN)rSrTrUr�r�r4r4r4r5r��sr�c@s4eZdZdd�Zdd�Zdd�ZdS)�BufferingFormatterTestcCs1tjddi�tjddi�g|_dS)Nr�rgrh)rr�r�)r2r4r4r5r6�szBufferingFormatterTest.setUpcCsEtj�}|jd|jg��|jd|j|j��dS)NrZonetwo)r�BufferingFormatterrBr5r�)r2r�r4r4r5�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�rBr5r�rr*)r2r�Zlfr4r4r5�test_custom�s
	z"BufferingFormatterTest.test_customN)rSrTrUr6r�r�r4r4r4r5r��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!�RecordingHandlerr0rrrvr8r7r�r1Zexc_textr.rMr�)r2r�r;r4r4r5�test_formatting�s		



zExceptionTest.test_formattingN)rSrTrUr�r4r4r4r5r��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!r8r)rZ
lastResortrrr
rorBr@rmrZemittedNoHandlerWarningr0)r2r�Zold_lastresortZold_raise_exceptionsrr�r4r4r5�test_last_resort�s4			

	

	
!	zLastResortTest.test_last_resortN)rSrTrUr�r4r4r4r5r��sr�c@s(eZdZdd�Zdd�ZdS)�FakeHandlercCs4x-dD]%}t|||j|||��qWdS)Nr��flushr7r�)r�r�r7r�)�setattr�record_call)r2�
identifier�calledr�r4r4r5r
s
zFakeHandler.__init__cs���fdd�}|S)Ncs�jdj����dS)Nz{} - {})rOr5r4)r�r��method_namer4r5�inner
sz&FakeHandler.record_call.<locals>.innerr4)r2r�r�r�r�r4)r�r�r�r5r�
szFakeHandler.record_callN)rSrTrUrr�r4r4r4r5r�
sr�cs.eZdZ�fdd�Zdd�Z�S)r�cs&tt|�j||�g|_dS)N)r)r�rr�)r2r�rf)r*r4r5r
szRecordingHandler.__init__cCs|jj|�dS)z&Keep track of all the emitted records.N)r�rO)r2r�r4r4r5r�
szRecordingHandler.handle)rSrTrUrr�r4r4)r*r5r�

sr�cs�eZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Z�S)"�ShutdownTestz#Test suite for the shutdown method.cs?tt|�j�g|_tj}|jttd|�dS)Nr)r)r�r6r�rrr�r�)r2Zraise_exceptions)r*r4r5r6
s		zShutdownTest.setUpcs�fdd�}|S)Ncs
���dS)Nr4r4)rlr4r5r�$
sz'ShutdownTest.raise_error.<locals>.innerr4)r2rlr�r4)rlr5�raise_error#
szShutdownTest.raise_errorcCs�td|j�}td|j�}td|j�}ttjj|||g�}tjdt|��ddddd	d
ddd
dddg}|j||j�dS)NrrPr��handlerListz2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - closez0 - release)	r�r�rrr�r�r+rsrB)r2Zhandler0Zhandler1Zhandler2r.rLr4r4r5�test_no_failure(
szShutdownTest.test_no_failurecCsqtd|j�}t|||j|��tjj|�g}tjdt|��|j	d|jd�dS)Nrr�z0 - releaserPr�)
r�r�r�r�rr�r�r+rsrB)r2r�rlr�r.r4r4r5�_test_with_failure_in_method8
s
z)ShutdownTest._test_with_failure_in_methodcCs|jdt�dS)Nr�)r�r�)r2r4r4r5�test_with_ioerror_in_acquireA
sz)ShutdownTest.test_with_ioerror_in_acquirecCs|jdt�dS)Nr�)r�r�)r2r4r4r5�test_with_ioerror_in_flushD
sz'ShutdownTest.test_with_ioerror_in_flushcCs|jdt�dS)Nr7)r�r�)r2r4r4r5�test_with_ioerror_in_closeG
sz'ShutdownTest.test_with_ioerror_in_closecCs|jdt�dS)Nr�)r�r�)r2r4r4r5�test_with_valueerror_in_acquireJ
sz,ShutdownTest.test_with_valueerror_in_acquirecCs|jdt�dS)Nr�)r�r�)r2r4r4r5�test_with_valueerror_in_flushM
sz*ShutdownTest.test_with_valueerror_in_flushcCs|jdt�dS)Nr7)r�r�)r2r4r4r5�test_with_valueerror_in_closeP
sz*ShutdownTest.test_with_valueerror_in_closecCsdt_|jdt�dS)NFr�)rrr��
IndexError)r2r4r4r5�.test_with_other_error_in_acquire_without_raiseS
s	z;ShutdownTest.test_with_other_error_in_acquire_without_raisecCsdt_|jdt�dS)NFr�)rrr�r�)r2r4r4r5�,test_with_other_error_in_flush_without_raiseW
s	z9ShutdownTest.test_with_other_error_in_flush_without_raisecCsdt_|jdt�dS)NFr7)rrr�r�)r2r4r4r5�,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�)r2r4r4r5�+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�)r2r4r4r5�)test_with_other_error_in_flush_with_raised
s	z6ShutdownTest.test_with_other_error_in_flush_with_raisecCs&dt_|jt|jdt�dS)NTr7)rrr�r�r�)r2r4r4r5�)test_with_other_error_in_close_with_raisei
s	z6ShutdownTest.test_with_other_error_in_close_with_raise)rSrTrUrVr6r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r4r4)r*r5r�
s"	r�c@s�eZdZdZdd�Zddd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Ze
jdd��ZdS)�ModuleLevelMiscTestz)Test suite for some module level methods.cCs\tjjj}|j|d�|jtj|�tjd�|jtjjjd�dS)Nr�S)rr�r�disablerBr�)r2�old_disabler4r4r5�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)rO)r/�kw)r�r4r5�<lambda>
sz/ModuleLevelMiscTest._test_log.<locals>.<lambda>ztest me: %rrPr)
rrdrr�r�r0rrBrCr�Z
getMessage�upperr�)r2r�r��	recording�
log_methodr�Zexpected_levelr4)r�r5�	_test_log|
s	

'zModuleLevelMiscTest._test_logcCs|jdtj�dS)Nrk)r�rr])r2r4r4r5�test_log�
szModuleLevelMiscTest.test_logcCs|jd�dS)Nro)r�)r2r4r4r5�
test_debug�
szModuleLevelMiscTest.test_debugcCs|jd�dS)Nrn)r�)r2r4r4r5�	test_info�
szModuleLevelMiscTest.test_infocCs|jd�dS)Nrm)r�)r2r4r4r5�test_warning�
sz ModuleLevelMiscTest.test_warningcCs|jd�dS)Nrl)r�)r2r4r4r5�
test_error�
szModuleLevelMiscTest.test_errorcCs|jd�dS)Nr)r�)r2r4r4r5�
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)rSrTrUr4r4r4r5r@�
sr@)r�rCrrDrGrArBZgetLoggerClass)r2r@r4r4r5�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)r2�code�rc�out�errr4r4r5�test_logging_at_shutdown�
s

z,ModuleLevelMiscTest.test_logging_at_shutdown)rSrTrUrVr�r�r�r�r�r�r�r�r�rZrequires_type_collectingr�r4r4r4r5r�o
s	r�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
LogRecordTestcCsKtji�}t|�}|j|jd��|j|jd��dS)Nz<LogRecord: �>)rr�rWr1r.rM)r2r�rNr4r4r5�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�rrr0rmr	r�r�rBr�r8r7)r2r;r�r�r4r4r5�
test_dict_arg�
s	

zLogRecordTest.test_dict_argcCsvtji�}|j|jd�y;ddl}tji�}|j|j|j�j�Wntk
rqYnXdS)NZMainProcessr)rr�rB�processNameroZcurrent_processr3r�)r2r�Zmpr4r4r5�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�ZthreadZ
threadNameZprocessr�Z
logThreadsZlogProcessesZlogMultiprocessing�assertIsNone)r2r�ZNOT_NONEZlog_threadsZ
log_processesZlog_multiprocessingZNONEr4r4r5�
test_optional�
s.	



							


		zLogRecordTest.test_optionalN)rSrTrUr�r�r�r�r4r4r4r5r��
s
r�cs-eZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Z�S)/�BasicConfigTestz#Test suite for logging.basicConfig.csytt|�j�tjj|_tjj�|_tj	dd�|_
tjj|_|j
|j�gtj_dS)N)r)r�r6rr�r.rrrrrr�r"r��cleanup)r2)r*r4r5r6szBasicConfigTest.setUpcsRx8tjjdd�D] }tjj|�|j�qWtt|�j�dS)N)rr�r.r8r7r)r�r<)r2r;)r*r4r5r<	szBasicConfigTest.tearDowncCs_ttjd|j�tjj�tjj|j�|jtj	dd�<|j
tj_dS)Nr.)r�rr�r.rr9r:rrrr"r�)r2r4r4r5r�s

zBasicConfigTest.cleanupcCs�tj�|jttjj�d�tjjd}|j|tj�|j|jt	j
�|j}|j|jj
tj�|j|j�|j|jtj�|jtjj|j�dS)NrPr)rr�rBrCr�r.r�r(r%r�rr�r+�_fmtZBASIC_FORMATr�r�ZPercentStyler�r")r2r�r�r4r4r5�test_no_kwargss
	zBasicConfigTest.test_no_kwargscCsltj��Y}tjdtjdd�tjd�tjjd�|j|j	�j
�d�WdQRXdS)Nr%r�r�zLog an errorrzERROR:root:Log an error)rrirr�r�rwrlrxrBr@�strip)r2rkr4r4r5�test_strformatstyle*s
z#BasicConfigTest.test_strformatstylecCsltj��Y}tjdtjdd�tjd�tjjd�|j|j	�j
�d�WdQRXdS)Nr%r�rzLog an errorrzERROR:root:Log an error)rrirr�r�rwrlrxrBr@r�)r2rkr4r4r5�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)r7r�r�)�h1�h2r�r4r4r5r�<s

z.BasicConfigTest.test_filename.<locals>.cleanup�filenameztest.logrPrr/)rr�rBrCr�r.r�r�r%�moder3r�)r2r�r�rLr4r4r5�
test_filename:szBasicConfigTest.test_filenamecCszdd�}tjdddd�tjjd}tjdd�}|j|jj|jj�|j|||d�dS)NcSs%|j�|j�tj|�dS)N)r7r�r�)r�r�r�r4r4r5r�Ns

z.BasicConfigTest.test_filemode.<locals>.cleanupr�ztest.log�filemode�wbr)	rr�r�r.r�rBr%r�r�)r2r�r�rLr4r4r5�
test_filemodeLszBasicConfigTest.test_filemodecCs�tj�}|j|j�tjd|�|jttjj	�d�tjj	d}|j
|tj�|j|j|�dS)Nr%rPr)
r#r$r�r7rr�rBrCr�r.r�r(r%)r2r%r�r4r4r5�test_streamZszBasicConfigTest.test_streamcCs=tjdd�tjjdj}|j|jjd�dS)Nr5r�r)rr�r�r.r�rBr+r�)r2r�r4r4r5�test_formatdszBasicConfigTest.test_formatcCs:tjdd�tjjdj}|j|jd�dS)Nr�r�r)rr�r�r.r�rBr�)r2r�r4r4r5�test_datefmtjszBasicConfigTest.test_datefmtcCs=tjdd�tjjdj}|j|jtj�dS)Nr�rr)rr�r�r.r�r�r+r,)r2r�r4r4r5�
test_stylepszBasicConfigTest.test_stylecCsrtjj}|jtjj|�tjdd�|jtjjd�tjdd�|jtjjd�dS)Nr��9�:)rr�r�r�r&r�rB)r2�	old_levelr4r4r5�
test_levelvszBasicConfigTest.test_levelcCs�|j}tj�g}tj}|ttjddd|�|ttjddd|�|ttjd|d|�|ttjdtj�tjdddd�dS)Nr�ztest.logr%r.Zloglevelr�r/)r�rr(r�rr�r�rc)r2r�r.r%r4r4r5�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.rrP)rr(r�rwr*r,r�r	r�r.r�r�)r2r.r�r4r4r5�
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�rO)r/r�r�)r��old_basic_configr2r4r5�my_basic_config�s
z2BasicConfigTest._test_log.<locals>.my_basic_configr�ztest me)rr�rrdrrB)r2r�r�r�r�r4)r�r�r2r5r��s	
zBasicConfigTest._test_logcCs|jdtj�dS)Nrk)r�rra)r2r4r4r5r��szBasicConfigTest.test_logcCs|jd�dS)Nro)r�)r2r4r4r5r��szBasicConfigTest.test_debugcCs|jd�dS)Nrn)r�)r2r4r4r5r��szBasicConfigTest.test_infocCs|jd�dS)Nrm)r�)r2r4r4r5r��szBasicConfigTest.test_warningcCs|jd�dS)Nrl)r�)r2r4r4r5r��szBasicConfigTest.test_errorcCs|jd�dS)Nr)r�)r2r4r4r5r��szBasicConfigTest.test_critical)rSrTrUrVr6r<r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r4r4)r*r5r��
s.	

r�cs^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)rrr4)�old_handler_listr4r5r��sz(LoggerAdapterTest.setUp.<locals>.cleanupr�r=)r)r�r6rrr�r�r�r�r0r�r8r7r+rj�adapter)r2r�)r*)r�r5r6�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: %rrPr)�ZeroDivisionErrorr�rvr�rBrCr�r�rr]r�r�r<r*�
__traceback__)r2r��excr9r�r4r4r5�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)NrPrz
exc_info testr<)
r�r�rvrBrCr�r�r<r*r�)r2r9r�r�r4r4r5�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! %rrPr)r�rr�rBrCr�r�rr[r�r�)r2r�r�r4r4r5r��szLoggerAdapterTest.test_criticalcCs`|jjjj}d|jjj_|jt|jjjd|�|j|jjd��dS)N�!r�� )r�r�rr�r�r�r��isEnabledFor)r2r�r4r4r5�test_is_enabled_fors
z%LoggerAdapterTest.test_is_enabled_forcCsm|j|jj��x$|jjD]}|jj|�q#W|j|jj��|j|jj��dS)N)r1r�r-r�r.r8r�)r2r�r4r4r5�test_has_handlerss
z#LoggerAdapterTest.test_has_handlers)	rSrTrUr6r�rr�rrr4r4)r*r5r��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)Nr3Zblah)
r)rr6r�r�rrAr�r0r�r8r7r+)r2)r*r4r5r6szLoggerTest.setUpcCs |jt|jjt��dS)N)r�rCr�r&rG)r2r4r4r5�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: %rrPr)r�r�rvr�rBrCr�r�rr]r�r�r<r*r�)r2r�r�r9r�r4r4r5r�$s)zLoggerTest.test_exceptioncCs=tjtdd��!|jt|jjdd�WdQRXdS)NrTrhztest message)r�	swap_attrrr�rCr�rk)r2r4r4r5�!test_log_invalid_level_with_raise5sz,LoggerTest.test_log_invalid_level_with_raisec
Cs4tjtdd��|jjdd�WdQRXdS)NrFrhztest message)rrrr�rk)r2r4r4r5�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)rOr@)r�rg)r�r4r5r�@sz=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>r�TrPzStack (most recent call last):
r)rrdr�	tracebackr�Z
findCallerrBrC)r2r4)r�r5� 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 valuer=�sinfo)r�r�)	rZ_logRecordFactoryrG�__dict__�keysr�r9r��
makeRecord)
r2r3r�r��lnor�r�r<r~r�rvr�r=r4r4r5�%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 recordrZ	valid_keyz
some valuer=r)r�rrr)r2r3r�r�rr�r�r<r~rr=r�r4r4r5�(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)r1r�r-r.r8r�)r2r�r4r4r5r]szLoggerTest.test_has_handlerscCs/tjd�}d|_|j|j��dS)Nz
blah.childF)rrrTr�r-)r2Zchild_loggerr4r4r5�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�r)r2r�r4r4r5riszLoggerTest.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)r2r�r4r4r5�test_root_logger_aliasesosz#LoggerTest.test_root_logger_aliasescCs0|jttjt�|jttjd�dS)Nsfoo)r�rCrr�any)r2r4r4r5�test_invalid_names{szLoggerTest.test_invalid_names)rSrTrUr6rr�r	r
r
rrrrrrrr4r4)r*r5rs	

	rc@s:eZdZdZdd�Zdd�Zdd�ZdS)	�BaseFileTestz1Base class for handler tests that write log filescCsBtj|�tjdd�\}|_tj|�g|_dS)Nz.logztest_logging-2-)rr6r�r�r�r�r7�rmfiles)r2r�r4r4r5r6�s

zBaseFileTest.setUpcCsWx|jD]}tj|�q
Wtjj|j�rFtj|j�tj|�dS)N)r r�r�r�r�r�rr<)r2r�r4r4r5r<�s
zBaseFileTest.tearDowncCs7|jtjj|�dd|�|jj|�dS)z7Assert a log file is there and register it for deletionr�zLog file %r does not existN)r1r�r�r�r rO)r2r�r4r4r5�
assertLogFile�szBaseFileTest.assertLogFileN)rSrTrUrVr6r<r!r4r4r4r5r�src@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�r�r%r�r�r�r�r�r�r1r7)r2�fhr4r4r5�
test_delay�szFileHandlerTest.test_delayN)rSrTrUr$r4r4r4r5r"�sr"c@saeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zej	dd��Z
d
S)�RotatingFileHandlerTestc	Cs+tjdtjdd|j�ddd�S)Nr\r6rP)rr_r'rR)r2r4r4r5�next_rec�sz RotatingFileHandlerTest.next_reccCs?tjj|jdd�}|j|jd��|j�dS)N�maxBytesr)rr.�RotatingFileHandlerr�r��shouldRolloverr7)r2�rhr4r4r5�test_should_not_rollover�sz0RotatingFileHandlerTest.test_should_not_rollovercCsEtjj|jdd�}|j|j|j���|j�dS)Nr'rP)rr.r(r�r1r)r&r7)r2r*r4r4r5�test_should_rollover�sz,RotatingFileHandlerTest.test_should_rollovercCsFtjj|j�}|j|j��|j|j�|j�dS)N)rr.r(r�r�r&r!r7)r2r*r4r4r5�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.testr4)r3r4r4r5�namer�sz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namer�backupCountr�r'rPz.1z.2z.3)
rr.r(r�r.r�r&r!r�r�r�r�r7)r2r.r*r4r4r5�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.gzr4)r3r4r4r5r.�sz3RotatingFileHandlerTest.test_rotator.<locals>.namercSsnt|d��K}|j�}tj|d�}t|d��}|j|�WdQRXWdQRXtj|�dS)N�rbrVr�)r�rI�zlib�compressrr�r�)�source�destZsfr�
compressedZdfr4r4r5�rotator�sz5RotatingFileHandlerTest.test_rotator.<locals>.rotatorr/r�r'rPz.1r1�asciiz.2z.3)rr.r(r�r7r.r&r�r!r��linesepr�rIr2Z
decompressrBr�r�r�r�r�r7)r2r.r7r*�m1�m2r��newliner�r6rr4r4r5�test_rotator�sB			


	'
''&z$RotatingFileHandlerTest.test_rotatorN)rSrTrUr&r+r,r-r0rZ
requires_zlibr=r4r4r4r5r%�sr%c@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�Sr/rPz%(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|�qSr4)r.)rXr�)r�r4r5rZs	z>TimedRotatingFileHandlerTest.test_rollover.<locals>.<listcomp>z
Test time: %sz%Y-%m-%d %H-%M-%SrgzThe only matching files are: %szContents of %s:r�i,)rr.�TimedRotatingFileHandlerr�r*r,r�r�r!r�r�r7r�r�r��	timedeltaZstrftimer�r�r�r rOr��listdirr�r�rr�r�rIr1)r2r#ZfmtZr1Zr2�foundr��GO_BACK�secs�prevr�Zdn�filesr�r�Ztfr4)r�r5�
test_rollover�sB	





" 
z*TimedRotatingFileHandlerTest.test_rollovercCss|j}|ttjj|jddd�|ttjj|jddd�|ttjj|jddd�dS)N�Xr�T�WZW7)r�r�rr.rBr�)r2r�r4r4r5�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�intervalrPr/r�T�atTimer@r�$i�i��iiжipi@�)	r�r�rr.rBr��computeRolloverrBr7)r2�currentTimerRr*rKr4r4r5�"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�QrNr�rOzW%drQrPr/r�TrR�r@zfailed in timezone: %dzlocal vars: %sri�i�Qi�i���i`'i�:	iiж)r�r�r�r�Ztm_wdayr�rr.rBr�rTr�Ztimezone�localsrBr7)	r2rUZtodayrRZwdayZdayr*rLrKr4r4r5�#test_compute_rollover_weekly_attime;s8	%	




z@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attimeN)rSrTrUrJrMrVr[r4r4r4r5r>�s*	r>cKstj|�tjdd�S)NrArP)r�rC)r�r4r4r5rGdsrGr?�Mr@�H�DrXrPZW0Zdaysr�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)NrOrQrPr/rr�TgrPr.r�rr@z
t: %s (%s)rgzcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rr.rBr�rTr�r�r�Z	localtimeZ	_MIDNIGHTr�r�rr�r<rBr7)r2rO�expr*rUrKr!ZcurrentHourZ
currentMinuteZ
currentSecondr�r�r4r4r5�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�
pywintypesrlZwinerrorr�ZSkipTestr�r�r7Z
assertLessZEVENTLOG_BACKWARDS_READZEVENTLOG_SEQUENTIAL_READZReadEventLogZ
SourceName�win32evtlogutilZSafeFormatMessager1)r2ZlogtypeZelhZnum_recsr;r9r��flagsrErFZeventsr�r4r4r5rN�s8




z NTEventLogHandlerTest.test_basicN)rSrTrUrNr4r4r4r5ra�sra�LC_ALLrc&Cs�tttttttttt	t
ttt
ttttttttttttttttttt t!t"t#t$t%g&}t&t'j(d�r�|j)t*�t+j,|�dS)Nra)-rWr�r�r�rPr`r�r�r�r�r�r�r;r{r�rrQrJrWr�r�r�r�rrGr"r%r�r�r�r�r�r�rar>r�r�r�r�rr.rOrerZrun_unittest)Ztestsr4r4r5�	test_main�s			
rg�__main__)�rVrZlogging.handlersZlogging.configr�rmr�r�r#r�r"r�rXr�r=rr�r�r�Ztest.support.script_helperrr�rrar�r�r�r�r�r"Zhttp.serverrrrZurllib.parserrZsocketserverrr	r
rr�rbrdrcr2ZTestCaserrWr�ZSILENTr�ZTERSEZEFFUSIVEr�r�Z	TALKATIVEr�Z
CHATTERBOXZBORINGr�r�r�r�r�r�r�r�rGrr(rrrrr%r-r;r?r�rDrFr�rGrPr*r^r`r�r�r�r�r�r�r�ZIPV6_ENABLEDr�r�r�r�r�r�r�r�r�r;rJr_rPrQrWr.roZ
unittest.mockrdrerCrwZtzinforvr�r{r�r�r�r�r�r�r�r�r�r�r�r�r�rrr"r%r>rGrOr_r`r�raZrun_with_localergrSr4r4r4r5�<module>sH&
(

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