403Webshell
Server IP : 118.27.122.248  /  Your IP : 216.73.216.15
Web Server : Apache
System : Linux web0264.sh.tyo1 4.18.0-553.79.1.lve.el7h.x86_64 #1 SMP Wed Oct 15 16:34:46 UTC 2025 x86_64
User : c9415830 ( 11735)
PHP Version : 8.4.17
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python36/lib64/python3.6/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python36/lib64/python3.6/test/__pycache__/test_logging.cpython-36.pyc
3

�w2_�j�,@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlmZddlmZddlZddlZddlZddlZddlZyTddlZddlZddlm Z m!Z!ddl"Z"ddl#m$Z$m%Z%ddl&m'Z'm(Z(m)Z)m*Z*Wne+k
�rJdZYnXyddl,Z,ddl-Z-ddl.Z.Wn"e+k
�r�dZ,Z-Z.YnXyddl/Z/Wne+k
�r�YnXGdd	�d	ej0�Z1Gd
d�de1�Z2Gdd
�d
e1�Z3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=e>e=e4d�Z?e4de5de6de7de8de9de:de;d e<d!e=d"i
Z@Gd#d$�d$ejA�ZBGd%d&�d&ejA�ZCGd'd(�d(e1�ZDGd)d*�d*e1�ZEGd+d,�d,eF�ZGGd-d.�d.ejH�ZIGd/d0�d0e1�ZJe�rDGd1d2�d2e"jK�ZLGd3d4�d4eF�ZMGd5d6�d6eMe �ZNGd7d8�d8eMe)�ZOGd9d:�d:eMe'�ZPeQed;��rDGd<d=�d=eO�ZRGd>d?�d?eP�ZSejTed@�GdAdB�dBe1��ZUGdCdD�dDe1�ZVGdEdF�dFejW�ZXGdGdH�dHe1�ZYejTed@�GdIdJ�dJe1��ZZdKdL�Z[ejTeQed;�dM�ejTed@�GdNdO�dOeZ���Z\ejTed@�GdPdQ�dQe1��Z]ejTeQed;�dM�ejTed@�GdRdS�dSe]���Z^ejTed@�GdTdU�dUe1��Z_ejTeQed;�dM�ejTed@�GdVdW�dWe_���Z`ejTejadX�ejTed@�GdYdZ�dZe_���ZbejTed@�Gd[d\�d\e1��ZcGd]d^�d^e1�ZdGd_d`�d`e1�ZeGdadb�dbe1�Zfd�dcdd�Zgdedf�ZhGdgdh�dhejH�ZiGdidj�dje1�ZjGdkdl�dle1�ZkGdmdn�dne1�ZlGdodp�dpejm�ZnGdqdr�dre1�ZoGdsdt�dte1�ZpeQejqdu��r�ddlrZrddvlsmtZtGdwdx�dxe1�Zuejvd�ZwGdydz�dzejx�Zyey�ZzGd{d|�d|ej0�Z{Gd}d~�d~ej|�Z}Gdd��d�ej0�Z~Gd�d��d�e1�ZGd�d��d�e1�Z�Gd�d��d��Z�Gd�d��d�ej��Z�Gd�d��d�e1�Z�Gd�d��d�e1�Z�Gd�d��d�e1�Z�Gd�d��d�ej0�Z�Gd�d��d�ej0�Z�Gd�d��d�e1�Z�Gd�d��d�e1�Z�Gd�d��d�e��Z�Gd�d��d�e��Z�Gd�d��d�e��Z�d�d��Z�xHd�d�d�d�d�d�e�d�d�d��ffD](\Z�Z�e�e�fd�d��Z�e�e�d�e�e���qWejTe,d��Gd�d��d�e1��Z�Gd�d��d�ej0�Z�ej�d�d��d�d���Z�e�d�k�r�e��dS)�zoTest harness for the logging module. Run all tests.

Copyright (C) 2001-2017 Vinay Sajip. All Rights Reserved.
�N)�assert_python_ok)�support)�
HTTPServer�BaseHTTPRequestHandler)�urlparse�parse_qs)�ThreadingUDPServer�DatagramRequestHandler�ThreadingTCPServer�StreamRequestHandlerc@s>eZdZdZdZdZdZdd�Zdd�Zdd
d�Z	dd
�Z
d	S)�BaseTestzBase class for logging tests.z&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$rcCs�tj�jj}tj�zrtjj�|_tjdd�|_	|j�|_
}tjj�|_tj
j�|_i|_}x |D]}t||dd�||<qhWWdtj�Xtjd�|_tjd�|_tjd�|_|jj�|_tj�|_|jjtj�tj|j�|_tj|j�|_ |jj!|j �|jj"��r,|jj#|jj#}t$d|��|jj"��rT|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/python36/lib64/python3.6/test/test_logging.py�setUpOs>



zBaseTest.setUpc
Cs|jj�|jj|j�x,|jjrD|jjd}|jj|�|j�qW|jj|j�tj	�z�tj
j�tj
j|j
�tjj�tjj|j�tjj�tjj|j�|jtjdd�<tj�jj}|j�|j|j�|j}x*|jD] }||dk	r�|||j|_q�WWdtj�XdS)zJRemove our logging stream, and restore the original logging
        level.rN)r%�closer!�
removeHandlerr)r.r&r"rrr�clear�updaterrrrrrrrrrrrr
r )r2�hrrr3r4r4r5�tearDownws0




zBaseTest.tearDownNc	Cs�|p|j}tj|p|j�}|j�j�}|jt|�t|��xFt||�D]8\}}|j	|�}|sj|j
d|�|jt|j��|�qFW|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)NN)�__name__�
__module__�__qualname__�__doc__r+r?rQr6r<rOrRr4r4r4r5rGs(
rc@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�BuiltinLevelsTestz*Test builtin levels and their inheritance.cCs4|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	Cs�|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&rcrk�FATALrnrorO)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_223863sz'BuiltinLevelsTest.test_regression_22386cCstjd�}|j|tj�dS)Nr{)rr}rBr{)r2Zfatalr4r4r5�test_issue279358s
z!BuiltinLevelsTest.test_issue27935cCs`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_29220<s
z'BuiltinLevelsTest.test_regression_29220N)rSrTrUrVrqrtrxr|r~rr�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_filterHs 





zBasicFilterTest.test_filtercCs�dd�}|jjd}z||j|�tjd�}tjd�}tjd�}tjd�}|j|j��|j|j��|j|j��|j|j��|jddg�Wd|j|�XdS)
NcSs&|jjd�}dj|dd��}|dkS)N�.�z	spam.eggs)r3�split�join)�record�parts�prefixr4r4r5�
filterfuncdsz8BasicFilterTest.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_filter}sz!BasicFilterTest.test_empty_filterN)rSrTrUrVr�r�r�r4r4r4r5r�Dsr��x�w�v�u�t�s�r�q�p�orP�Silent�Taciturn�Terse�Effusive�Sociable�Verbose�	TalkativeZ	Garrulous�
Chatterbox�Boringc@seZdZdZdd�ZdS)�GarrulousFilterz)A filter which blocks garrulous messages.cCs
|jtkS)N)�levelno�	GARRULOUS)r2r�r4r4r5r��szGarrulousFilter.filterN)rSrTrUrVr�r4r4r4r5r��sr�c@seZdZdZdd�ZdS)�VerySpecificFilterz5A filter which blocks sociable and taciturn messages.cCs|jttgkS)N)r��SOCIABLE�TACITURN)r2r�r4r4r5r��szVerySpecificFilter.filterN)rSrTrUrVr�r4r4r4r5r��sr�c@s<eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�CustomLevelsAndFiltersTestz@Test various filtering possibilities with custom logging levels.z^[\w.]+ -> (\w+): (\d+)$cCs0tj|�x tj�D]\}}tj||�qWdS)N)rr6�my_logging_levels�itemsrr�)r2�k�vr4r4r5r6�s
z CustomLevelsAndFiltersTest.setUpcCs"xtD]}|j||j��qWdS)N)�LEVEL_RANGErkrR)r2�loggerZlvlr4r4r5�log_at_all_levels�s
z,CustomLevelsAndFiltersTest.log_at_all_levelscCs2|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�sz-CustomLevelsAndFiltersTest.test_logger_filterc
CsR|jjdjt�z$|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�sz.CustomLevelsAndFiltersTest.test_handler_filtercCs�|jjd}d}t�}|j|�zj|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��sr�c@sJeZdZdd�Zdd�Zdd�Zejej	dkd�ej
ed	�d
d���ZdS)
�HandlerTestcCsDtj�}d|_|j|jd�d|_|j|jd�|jt|jd�dS)NZgenericZanothergeneric)r�Handlerr3rB�assertRaises�NotImplementedError�emit)r2r;r4r4r5�	test_nameszHandlerTest.test_namec
Cstjdk�r`�x�dD]�}tj�\}}tj|�|s<tj|�tjj	|dd�}|r�|j
|j}}|j|d�|j|d�tj
ddi�}|j|�tj|�|jtjj|��|j|�|jtjj|��n|j|j
d�|j|jd�|j�|rtj|�qWtjdk�rd	}nd
}y4tjj|�}|j|j|j�|j|j�|j�Wntk
�r^YnXxHdD]@}	|	d
k�r�|jttjjdd|	�ntjjdd|	�}|j��qfWtjjd�}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_handlerscCs�tj�\}}tj|�tj|�tj|�}tj|dfftj	j
|dfftj	j|dfff}tj
dkrv|tj	j|dfff7}x<|D]4\}}||�}|jtjj|��|j�tj|�q|WdS)zs
        Test that Path objects are accepted as filename arguments to handlers.

        See Issue #27493.
        �w�ar;r�r�N)r�r�)r�r�r�r7r��pathlibZPathr�FileHandlerr.�RotatingFileHandler�TimedRotatingFileHandlerr�r�r�r1r�r�)r2r�r�ZpfnZcases�cls�argsr;r4r4r5�test_path_objectsOs



zHandlerTest.test_path_objects�ntz/WatchedFileHandler not appropriate for Windows.z!Threading required for this test.cs2�fdd�}d}d}d�_d�_�x
dD�]}tjdd�\}}tj|�tj|||fd�}d|_|j	�t
jj||d	�}t
j
d
�}	|j|	�zrxlt|�D]`}
tjd�t
jdd
i�}ytj��_|j|�Wq�tk
r�td�j�jf��Yq�Xq�WWd|j�|j�tjj|��r(tj|�Xq(WdS)NcsZxTt|�D]H}ytj|�tj��_Wntk
r:YnXtjdtjdd��q
WdS)Ng����Mbp?r�)	�ranger�r��time�
deletion_timer��sleep�randomZrandint)ZfnameZtries�_)r2r4r5�remove_loopjs
z*HandlerTest.test_race.<locals>.remove_loopi�FTz.logztest_logging-3-)�targetr�)r�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�)r2rZ	del_countZ	log_countr�r�r�Zremoverr;r�r�r�r4)r2r5�	test_racefs<	




zHandlerTest.test_raceN)
rSrTrUr�r�r��unittestZskipIfr�r3�
skipUnlessrrr4r4r4r5r�s
6r�c@seZdZdd�ZdS)�	BadStreamcCstd��dS)Nzdeliberate mistake)�RuntimeError)r2�datar4r4r5�write�szBadStream.writeN)rSrTrUr
r4r4r4r5r
�sr
c@seZdZdd�ZdS)�TestStreamHandlercCs
||_dS)N)�error_record)r2r�r4r4r5�handleError�szTestStreamHandler.handleErrorN)rSrTrUrr4r4r4r5r�src@seZdZdd�ZdS)�StreamHandlerTestcCs�tt��}tji�}tj}z�|j|�|j|j|�tjt��}t	j
��$}|j|�d}|j||j��WdQRXdt_t	j
�� }|j|�|j
d|j��WdQRXWd|t_XdS)Nz"
RuntimeError: deliberate mistake
Fr)rr
rr��raiseExceptionsr��assertIsrr(r�captured_stderr�assertInr@rB)r2r;r�Z	old_raise�stderrr�r4r4r5�test_error_handling�s 






z%StreamHandlerTest.test_error_handlingN)rSrTrUrr4r4r4r5r�src@s:eZdZdZdd�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.
        cCs<tjj||d|dd�|jj�d|_||_d|_||_dS)NT)�mapZdecode_datarP)	�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�rcpttosrr4r4r5�process_message�s
zTestSMTPServer.process_messagecCs0tj|j|jfd�|_}|jd�|j�dS)zO
            Start the server running on a separate daemon thread.
            )rr�TN)rr�
serve_foreverr"r!�	setDaemonr)r2�tr4r4r5r�s
zTestSMTPServer.startcCs<ytj||jd�Wn"tk
r6|js0|jr2�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)�asyncoreZloop�_mapr�Z	connectedZ	accepting)r2r"r4r4r5r)�s
zTestSMTPServer.serve_foreverNcCs.|j�|jj|�tj|jdd�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.
            T)rZ
ignore_allN)r7r!r�r,Z	close_allr-)r2�timeoutr4r4r5�stop�szTestSMTPServer.stop)N)	rSrTrUrVrr(rr)r/r4r4r4r5r�s	rcs:eZdZdZdd�Zdd�Z�fdd�Zdd	d
�Z�ZS)�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)r!r"r r�Event�ready)r2r�r"r4r4r5rszControlMixin.__init__cCs0tj|j|jfd�|_}|jd�|j�dS)zQ
            Create a daemon thread to run the server, and start it.
            )rr�TN)rrr)r"r!r*r)r2r+r4r4r5rs
zControlMixin.startcs|jj�tt|�j|�dS)zj
            Run the server. Set the ready flag before entering the
            service loop.
            N)r2�set�superr0r))r2r")�	__class__r4r5r)'s
zControlMixin.serve_foreverNcCs:|j�|jdk	r$|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)�shutdownr!r��server_closer2r9)r2r.r4r4r5r//s
zControlMixin.stop)N)	rSrTrUrVrrr)r/�
__classcell__r4r4)r5r5r0s
	r0c@s"eZdZdZd	dd�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.
        ��?FNcs<G��fdd�dt��tj||��tj|||�||_dS)Ncs2eZdZddd�Zdd�Z���fdd�Z�ZS)	z=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandlerNcSs|jd�r|jSt|��dS)NZdo_)�
startswith�process_request�AttributeError)r2r3�defaultr4r4r5�__getattr__Ks
zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__cSs|jj|�dS)N)�serverr )r2r4r4r5r<PszMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_requestcs�rt�|�j|f|��dS)N)r4�log_message)r2�formatr�)�DelegatingHTTPRequestHandlerr5rkr4r5rASszITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message)N)rSrTrUr?r<rAr8r4)rCrk)r5r5rCJs
rC)rrrr0�sslctx)r2r#r�r"rkrDr4)rCrkr5rHs
zTestHTTPServer.__init__cCsfy(|jj�\}}|jr&|jj|dd�}Wn4tk
r\}ztjjd|��WYdd}~XnX||fS)NT)Zserver_sidezGot an error:
%s
)rZacceptrDZwrap_socketr�r�rr
)r2�sockr#�er4r4r5�get_request[szTestHTTPServer.get_request)r:FN)rSrTrUrVrrGr4r4r4r5r9=s

r9cs2eZdZdZdZdZddd�Z�fdd�Z�ZS)	�
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.
        T��?cCs2Gdd�dt�}tj||||�tj|||�dS)Nc@seZdZdd�ZdS)z;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlercSs|jj|�dS)N)r@r )r2r4r4r5r�|szBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handleN)rSrTrUr�r4r4r4r5�DelegatingTCPRequestHandlerzsrJ)rr
rr0)r2r#r�r"�bind_and_activaterJr4r4r5rxs
zTestTCPServer.__init__cs"tt|�j�|jj�d|_dS)NrP)r4rH�server_bindrrr)r2)r5r4r5rL�szTestTCPServer.server_bind)rIT)	rSrTrUrVZallow_reuse_address�_block_on_closerrLr8r4r4)r5r5rHfs

	rHcs:eZdZdZdZd
dd�Z�fdd�Z�fdd	�Z�ZS)�
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.
        T��?cs<G�fdd�dt��tj||�|�tj|||�d|_dS)Ncs&eZdZdd�Z��fdd�Z�ZS)z;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlercSs|jj|�dS)N)r@r )r2r4r4r5r��szBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handlecsD|jj�}|r@yt�|�j�Wntk
r>|jjs:�YnXdS)N)Zwfiler@r4�finishr�r@�_closed)r2r)�DelegatingUDPRequestHandlerr5r4r5rP�s
zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finish)rSrTrUr�rPr8r4)rR)r5r5rR�srRF)r	rrr0rQ)r2r#r�r"rKr4)rRr5r�szTestUDPServer.__init__cs"tt|�j�|jj�d|_dS)NrP)r4rNrLrrr)r2)r5r4r5rL�szTestUDPServer.server_bindcstt|�j�d|_dS)NT)r4rNr7rQ)r2)r5r4r5r7�szTestUDPServer.server_close)rOT)	rSrTrUrVrMrrLr7r8r4r4)r5r5rN�s
rN�AF_UNIXc@seZdZejZdS)�TestUnixStreamServerN)rSrTrUrrS�address_familyr4r4r4r5rT�srTc@seZdZejZdS)�TestUnixDatagramServerN)rSrTrUrrSrUr4r4r4r5rV�srVz!Threading required for this test.c@s eZdZdZdd�Zdd�ZdS)�SMTPHandlerTestgN@c
Cs
i}ttjdf|jd|�}|j�tj|jf}tjj|ddd|j	d�}|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?�meZyouZLog)r.r�u	Hello ✓rPz
Subject: Log
u

Hello ✓)rrZHOSTr(rrrr.ZSMTPHandler�TIMEOUTrBZtoaddrs�messagesr�rr1�handledr��waitr/r1Zis_setrCr�endswithr7)
r2r$r@r#r;r�r%r&r'rr4r4r5�
test_basic�s,


zSMTPHandlerTest.test_basiccGs|jj|�|jj�dS)N)rZ�appendr[r3)r2r�r4r4r5r(�szSMTPHandlerTest.process_messageN)rSrTrUrYr^r(r4r4r4r5rW�srWc@s4eZdZdZdZdd�Zdd�Zdd�Zd	d
�ZdS)�MemoryHandlerTestzTests for the MemoryHandler.z^[\w.]+ -> (\w+): (\d+)$cCsFtj|�tjjdtj|j�|_tjd�|_	d|j	_
|j	j|j�dS)N�
Zmemr)rr6rr.�
MemoryHandlerrar)�mem_hdlrr�
mem_logger�	propagater0)r2r4r4r5r6�s

zMemoryHandlerTest.setUpcCs|jj�tj|�dS)N)rcr7rr<)r2r4r4r5r<�s
zMemoryHandlerTest.tearDowncCs�|jj|j��|jg�|jj|j��|jg�|jj|j��d
ddg}|j|�xndD]f}x td	�D]}|jj|j��qlW|j|�|jj|j��|d
d�t||d�D�}|j|�q^W|jj|j��|j|�dS)Nr'r\rcr^rar_r���	cSsg|]}dt|�f�qS)r')�str)�.0�ir4r4r5�
<listcomp>
sz0MemoryHandlerTest.test_flush.<locals>.<listcomp>ra)r'r\)rcr^)rar_)r�rf)rdrorRrOrnrmr�)r2�lines�nrjr4r4r5�
test_flush�s$




zMemoryHandlerTest.test_flushcCs�|jj|j��|jg�|jj|j��|jg�|jj|j�|jj�dd	g}|j|�tj	j
dtj|jd�|_|jj
|j�|jj|j��|j|�|jj|j��|j|�|jj|j�|jj�|j|�dS)
zO
        Test that the flush-on-close configuration works as expected.
        r'r\rcr^raFN)r'r\)rcr^)rdrorRrOrnr8rcr7rr.rbrar)r0)r2rlr4r4r5�test_flush_on_closes(






z%MemoryHandlerTest.test_flush_on_closeN)	rSrTrUrVr?r6r<rnror4r4r4r5r`�sr`c@seZdZdZdd�ZdS)�ExceptionFormatterzA special exception formatter.cCsd|djS)Nz
Got a [%s]r)rS)r2Zeir4r4r5�formatException1sz"ExceptionFormatter.formatExceptionN)rSrTrUrVrqr4r4r4r5rp/srpc@s�eZdZdZejZdZdZdZdZ	ej
dd�Zej
dd	�Zd
edZ
ej
dd
�ZdZdZdZdZdd�Zdd�Zdd�Zefdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�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=file

    [formatters]
    keys=

    [logger_root]
    level=DEBUG
    handlers=file

    [handler_file]
    class=FileHandler
    level=DEBUG
    args=("{tempfile}",)
    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|f|�dS)N)r#r$�textwrap�dedentr�config�
fileConfig)r2�conf�kwargs�filer4r4r5�apply_config4szConfigFileTest.apply_configcCsbtj��P}|j|j�tj�}|j|j��|j|j��|j	dg|d�|j	g�WdQRXdS)Nr]r^)r%)r]r^)
r�captured_stdoutrz�config0rrrnrRrlrO)r2�outputr�r4r4r5�test_config0_ok8s
zConfigFileTest.test_config0_okcCs�tj��t}tjtj|j��}tj�}|j	|�t
jj|�t
j
�}|j|j��|j|j��|jdg|d�|jg�WdQRXdS)Nr]r^)r%)r]r^)rr{r#r$rsrtr|�configparserZConfigParserZ	read_filerrurvrrnrRrlrO)r2r}ryZcpr�r4r4r5�test_config0_using_cp_okGs

z'ConfigFileTest.test_config0_using_cp_okcCsdtj��R}|j|�tjd�}|j|j��|j|j��|jddg|d�|jg�WdQRXdS)	Nzcompiler.parserrcr\r]r^)r%)rcr\)r]r^)	rr{rzrrrnrRrlrO)r2rur}r�r4r4r5�test_config1_okYs


zConfigFileTest.test_config1_okcCs|jt|j|j�dS)N)r�rrz�config2)r2r4r4r5�test_config2_failurehsz#ConfigFileTest.test_config2_failurecCs|jt|j|j�dS)N)r�rrz�config3)r2r4r4r5�test_config3_failurelsz#ConfigFileTest.test_config3_failurecCs|tj��j}|j|j�tj�}y
t��Wntk
rFtjd�YnXtj	j
d�|j|j�d�|j
g�WdQRXdS)Nzjust testingrz-ERROR:root:just testing
Got a [RuntimeError]
)rr{rz�config4rrr�	exceptionr��stdout�seekrBr@rO)r2r}r�r4r4r5�test_config4_okps


zConfigFileTest.test_config4_okcCs|j|jd�dS)N)ru)r��config5)r2r4r4r5�test_config5_okszConfigFileTest.test_config5_okcCs|j|jd�dS)N)ru)r��config6)r2r4r4r5�test_config6_ok�szConfigFileTest.test_config6_okcCs&tj��n}|j|j�tjd�}tjd�}|j|j��|j|j��|j	|j��|j
dddg|d	�|j
g�WdQRXtj���}|j|j�tjd�}|j|j
�|j|j��|j|j��tjd
�}|j|j��|j|j��|j	|j��|j
ddddg|d	�|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)rr{rz�config1arrrnrRrl�criticalrO�config7r�r
)r2r}r��
hyphenatedr4r4r5�test_config7_ok�s<





zConfigFileTest.test_config7_okcCs�dd�}|j��Xtjdd�\}}tj|�tjdkrB|jdd�}|jj|d�}|j	|�|j	|�WdQRXt
jjd	}|j
|||�dS)
NcSs|j�tj|�dS)N)r7r��remove)�h1r�r4r4r5�cleanup�sz/ConfigFileTest.test_config8_ok.<locals>.cleanupz.logztest_logging-X-r��\z\\)r�r)�check_no_resource_warningr�r�r�r7r3�replace�config8rBrzr�rootr.r�)r2r�r�r�r�r�r4r4r5�test_config8_ok�s



zConfigFileTest.test_config8_okcCsZ|j|j�tjd�}|j|j�|j|j�|j|j�|j|jdd�|j|j�dS)NZsome_pristine_loggerF)�disable_existing_loggers)rz�disable_testrrr�r
r1)r2r�r4r4r5�test_logger_disabling�s
z$ConfigFileTest.test_logger_disablingN)rSrTrUrVrr�r?r|�config1r�r�r�r�r�r�r�r�r�r�rzr~r�r�r�r�r�r�r�r�r�r�r4r4r4r5rr5s6  *&+rrc@sDeZdZdZereZdZdd�Zdd�Z	dd	�Z
d
d�Zdd
�ZdS)�SocketHandlerTestzTest for SocketHandler objects.r�rcCs�tj|�d|_|_|_y$|j|j|jd�|_}|j�Wn&t	k
rf}z
||_dSd}~XnX|j
j�tj
j}t|jt�r�|d|j�|_n||jd�|_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.Ng{�G�z�?r�rr)rr6r@�	sock_hdlr�server_exception�server_class�address�
handle_socketrr�r2r\rr.Z
SocketHandler�
isinstance�server_addressrGr�
log_outputr!r8r0rZ	Semaphorer[)r2r@rF�hclsr4r4r5r6�s$

zSocketHandlerTest.setUpcCsFz4|jr |jj|j�|jj�|jr2|jjd�Wdtj|�XdS)zShutdown the TCP server.g@N)r�r!r8r7r@r/rr<)r2r4r4r5r<�s
zSocketHandlerTest.tearDowncCs�|j}x�|jd�}t|�dkr Ptjd|�d}|j|�}x&t|�|kr`||j|t|��}q<Wtj|�}tj|�}|j	|j
d7_	|jj�qWdS)Nr�z>Lr�
)
Z
connectionZrecvrC�structZunpack�pickle�loadsrr�r�r�r[�release)r2�requestZconn�chunk�slen�objr�r4r4r5r��s



zSocketHandlerTest.handle_socketcCsV|jr|j|j�tjd�}|jd�|jj�|jd�|jj�|j|j	d�dS)NZtcpr��eggsz
spam
eggs
)
r��skipTestrrrlr[�acquirerorBr�)r2r�r4r4r5�test_outputs




zSocketHandlerTest.test_outputcCs�|jr|j|j�d|j_|jjd�ytd��Wn tk
rR|jjd�YnX|jj	d�t
j
�}|j|jj|�t
j
|jj|d�|jj	d�dS)Ng@g@zDeliberate mistakez
Never sentzNever sent, eitherg����MbP?zNor this)r�r�r�Z
retryStartr@r/rr!r�rlr��
assertGreaterZ	retryTimer�)r2�nowr4r4r5�
test_noserverszSocketHandlerTest.test_noserverN)r�r)
rSrTrUrVrrHr�r�r6r<r�r�r�r4r4r4r5r��sr�cCs*tjddd�\}}tj|�tj|�|S)NZ
test_logging_z.sock)r��suffix)r�r�r�r7r�)r�r�r4r4r5�_get_temp_domain_socket,s

r�zUnix sockets requiredc@s2eZdZdZereed�reZdd�Z	dd�Z
dS)�UnixSocketHandlerTestz)Test for SocketHandler with unix sockets.rScCst�|_tj|�dS)N)r�r�r�r6)r2r4r4r5r6=szUnixSocketHandlerTest.setUpcCstj|�tj|j�dS)N)r�r<rr�r�)r2r4r4r5r<Bs
zUnixSocketHandlerTest.tearDownN)rSrTrUrVr�hasattrrrTr�r6r<r4r4r4r5r�4s
r�c@s<eZdZdZereZd
Zdd�Zdd�Z	dd	�Z
d
d�ZdS)�DatagramHandlerTestzTest for DatagramHandler.r�rcCs�tj|�d|_|_|_y$|j|j|jd�|_}|j�Wn&t	k
rf}z
||_dSd}~XnX|j
j�tj
j}t|jt�r�|d|j�|_n||jd�|_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.Ng{�G�z�?r�rr)rr6r@r�r�r�r��handle_datagramrr�r2r\rr.ZDatagramHandlerr�r�rGrr�r!r8r0rr1r[)r2r@rFr�r4r4r5r6Os$

zDatagramHandlerTest.setUpcCsFz4|jr|jjd�|jr2|jj|j�|jj�Wdtj|�XdS)zShutdown the UDP server.g@N)r@r/r�r!r8r7rr<)r2r4r4r5r<iszDatagramHandlerTest.tearDowncCsTtjdd�}|jt|�d�}tj|�}tj|�}|j|j	d7_|j
j�dS)Nz>Lrr�)r��pack�packetrCr�r�rr�r�r�r[r3)r2r�r�r�r�r�r4r4r5r�ts

z#DatagramHandlerTest.handle_datagramcCs`|jr|j|j�tjd�}|jd�|jj�|jj�|jd�|jj�|j|j	d�dS)NZudpr�r�z
spam
eggs
)
r�r�rrrlr[r\r9rBr�)r2r�r4r4r5r�|s





zDatagramHandlerTest.test_outputN)r�r)rSrTrUrVrrNr�r�r6r<r�r�r4r4r4r5r�Fsr�c@s2eZdZdZereed�reZdd�Z	dd�Z
dS)�UnixDatagramHandlerTestz,Test for DatagramHandler using Unix sockets.rScCst�|_tj|�dS)N)r�r�r�r6)r2r4r4r5r6�szUnixDatagramHandlerTest.setUpcCstj|�tj|j�dS)N)r�r<rr�r�)r2r4r4r5r<�s
z UnixDatagramHandlerTest.tearDownN)rSrTrUrVrr�rrVr�r6r<r4r4r4r5r��s
r�c@s<eZdZdZereZd
Zdd�Zdd�Z	dd	�Z
d
d�ZdS)�SysLogHandlerTestz!Test for SysLogHandler using UDP.r�rcCs�tj|�d|_|_|_y$|j|j|jd�|_}|j�Wn&t	k
rf}z
||_dSd}~XnX|j
j�tj
j}t|jt�r�||jd|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.Ng{�G�z�?rr)rr6r@�sl_hdlrr�r�r�r�rr�r2r\rr.r�r�r�rGrr�r!r8r0rr1r[)r2r@rFr�r4r4r5r6�s$

zSysLogHandlerTest.setUpcCsFz4|jr|jjd�|jr2|jj|j�|jj�Wdtj|�XdS)zShutdown the server.g@N)r@r/r�r!r8r7rr<)r2r4r4r5r<�szSysLogHandlerTest.tearDowncCs|j|_|jj�dS)N)r�r�r[r3)r2r�r4r4r5r��sz!SysLogHandlerTest.handle_datagramcCs�|jr|j|j�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)
r�r�rrrlr[r\rBr�r9r�Z
append_nul�ident)r2r�r4r4r5r��s 








zSysLogHandlerTest.test_outputN)r�r)rSrTrUrVrrNr�r�r6r<r�r�r4r4r4r5r��sr�c@s2eZdZdZereed�reZdd�Z	dd�Z
dS)�UnixSysLogHandlerTestz)Test for SysLogHandler with Unix sockets.rScCst�|_tj|�dS)N)r�r�r�r6)r2r4r4r5r6�szUnixSysLogHandlerTest.setUpcCstj|�tj|j�dS)N)r�r<rr�r�)r2r4r4r5r<�s
zUnixSysLogHandlerTest.tearDownN)rSrTrUrVrr�rrVr�r6r<r4r4r4r5r��s
r�z$IPv6 support required for this test.cs4eZdZdZeZdZ�fdd�Z�fdd�Z�Z	S)	�IPv6SysLogHandlerTestz&Test for SysLogHandler with IPv6 host.�::1rcstj|j_tt|�j�dS)N)rZAF_INET6r�rUr4r�r6)r2)r5r4r5r6�s
zIPv6SysLogHandlerTest.setUpcstj|j_tt|�j�dS)N)r�AF_INETr�rUr4r�r<)r2)r5r4r5r<�s
zIPv6SysLogHandlerTest.tearDown)r�r)
rSrTrUrVrNr�r�r6r<r8r4r4)r5r5r��s
r�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�HTTPHandlerTestzTest for HTTPHandler.cCstj|�tj�|_dS)ztSet up an HTTP server to receive log messages, and a HTTPHandler
        pointing to that server's address and port.N)rr6rr1r[)r2r4r4r5r6s
zHTTPHandlerTest.setUpc	Csr|j|_t|j�|_|jdkrRy t|jd�}|jj|�|_Wnd|_YnX|j	d�|j
�|jj�dS)Nr�zContent-Length��)
�commandrr��log_data�intZheadersZrfilerI�	post_dataZ
send_responseZend_headersr[r3)r2r�Zrlenr4r4r5�handle_request
s

zHTTPHandlerTest.handle_requestcCs�tjd�}|j}|j|jjd��x�dD�]�}d}|r�yddl}Wntk
r\d}Yq�Xtjj	t
�}tjj|d�}|j|j
�}|j|�|j|d�}	nd}d}	t||jd|d	�|_}
|
j�|
jj�d
|
j}|o�|}tjj|d||	dd�|_d|_|j|j�x�dD]�}
|
|j_|jj�d}|j|�|jj�|j|jjd�|j|j |
�|
dk�rtt!|jj"�}nt!|j#j$d��}|j|ddg�|j|ddg�|j|d|g��qW|jj%d�|jj|j�|jj&�q*WdS)NZhttprFTr�zkeycert.pem)Zcafileg{�G�z�?)rDzlocalhost:%dz/frob�foo�bar)�secure�contextZcredentialsr�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_contextr9r�r@rr2r\Zserver_portr�Zh_hdlrr�r0r�r[r9rlrBr�rZqueryr��decoder/r7)r2r�r!r�r#r�rD�hereZlocalhost_certr�r@�hostZ
secure_clientr�r��dr4r4r5r�s\











zHTTPHandlerTest.test_outputN)rSrTrUrVr6r�r�r4r4r4r5r�s
r�c@s0eZdZdZdd�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)r2r4r4r5r6Us
zMemoryTest.setUpcGs2x,|D]$}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_survivalZs
zMemoryTest._watch_for_survivalcCs`tj�g}x.|jj�D] \\}}}|�dkr|j|�qW|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�r_rFrCr�)r2ZdeadZid_�repr_r�r4r4r5�_assertTruesurvivalas
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_loggersms


z"MemoryTest.test_persistent_loggersN)rSrTrUrVr6r�r�r�r4r4r4r5r�Qs
r�c@seZdZdd�Zdd�ZdS)�EncodingTestcCs�tjd�}tjdd�\}}tj|�d}zptj|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€zutf-8)�encoding)rrr�r�r�r7r�r0rmr8�openrBrI�rstripr��isfiler�)r2rkr�r�rr�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��sr�c@seZdZdd�Zdd�ZdS)�WarningsTestcCs�tj���tjd�|jtjd�tjdtd�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��ltjd�|jtjd�tjd�}|j|jg�tjdt	dd�|jt
|j�d�|j|jdtj�WdQRXdS)	NTFzpy.warningsr�zdummy.pyr�rPr)
r�r�rrr�rrBr.rrrC�assertIsInstance�NullHandler)r2r�r4r4r5�test_warnings_no_handlers�s


z&WarningsTest.test_warnings_no_handlersN)rSrTrUrr	r4r4r4r5r��sr�cCstj||�S)N)rr*)rB�datefmtr4r4r5�
formatFunc�srcCstj�S)N)rr(r4r4r4r5�handlerFunc�src@seZdZdS)�
CustomHandlerN)rSrTrUr4r4r4r5r
�sr
c
@seZdZdZejZdZddddiidddd	d
d�iddgd
�d�Zddddiidddd	d
d�idddgd
�iddid�Zddddiidddd	d
d�idddiiddgd
�d�Z	ddddiidddd	dd�idddgd
�iddid�Z
ddddiiddddd
d�idddgd
�iddid�Zddddiidddd	d
d�idddgd
�iddid�Zddddiidddd	d
d�idddgd
�iddid�Z
ddeddd�idddd	d
d�id	dgd
�d�Zdedd�eddd�edd�d�ddd	d
d�deid�d	dgd
�d�Zddddiideddd	d
d�idddgd
�iddid�Zddddiideddd	d
dd �idddgd
�iddid�Zddddiidddd	d
d�id!ddgd
�iddid�Zdd"dddiidddd	d
d�iddgd
�id#�ddid$�Zdd%dddiidddd	d
d�iddgd
�id#�ddid$�Zddddiiddddd
d�idddgd
�idd	id�Zdd%dddiiddd&iid'�Zdd%ddd&iiddd&iid'�Zddddiid(d)diidddd	d
d(gd*�iddd(gd+�iddgd
�d,�Zddddiidddd	d
d�id-dd.idddgd
�iddid/�Zdddiidddd	d
d�id-dd.idddgd
�iddid0�Zd1dddiidddd	d
d�id-dd.idddgd
�iddid/�Zddddiidddd	d
d2d3d4�d5�iddgd
�d�Zdd6d7d8d9�iddd6d:�d;d<d6d=dd>�d?�d@ddAgdBdC�idD�Z dEdF�Z!dGdH�Z"efdIdJ�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�Z0dedf�Z1dgdh�Z2didj�Z3dkdl�Z4dmdn�Z5e6j7e8do�d~dqdr��Z9e6j7e8ds�dtdu��Z:e6j7e8ds�dvdw��Z;e6j7e8ds�dxdy��Z<dzd{�Z=d|d}�Z>dpS)�ConfigDictTestz)Reading logging config from a dictionary.z^(\w+) \+\+ (\w+)$rP�form1rBz%(levelname)s ++ %(message)s�hand1zlogging.StreamHandlerr�zext://sys.stdout)�class�	formatter�levelr%ra)rr.)�version�
formattersr.r�zcompiler.parserr'r)rrr.�loggersr�zext://sys.stdboutZNTOSETZWRANINGZmisspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)z()rBz.formatFunc)rZform2Zform3z())rZhand2z.CustomHandlerzinvalid parameter name)rrrr%rgzcompiler.lexerF)�compilerzcompiler.lexer)rr�rr.rr�Trc)rZincrementalr.rZfilt1r3)rrrr%�filters)rr)rrrr.rr�zcfg://true_formatterszcfg://handler_configs[hand1])r�true_formatters�handler_configsrr.rr�)rrrr.rr�r�r�z!
)r��
terminator)rrrr%r�ZmySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s�$)rB�style)rrrzlogging.handlers.MemoryHandler��
fileGlobal)rZcapacityrrr)r�bufferGlobal�mymoduler �true)rr.re)rrr.rcCstjj|�dS)N)rruZ
dictConfig)r2rwr4r4r5rza
szConfigDictTest.apply_configcCsbtj��P}|j|j�tj�}|j|j��|j|j��|j	dg|d�|j	g�WdQRXdS)Nr]r^)r%)r]r^)
rr{rzr|rrrnrRrlrO)r2r}r�r4r4r5r~d
s
zConfigDictTest.test_config0_okcCsdtj��R}|j|�tjd�}|j|j��|j|j��|jddg|d�|jg�WdQRXdS)	Nzcompiler.parserrcr\r]r^)r%)rcr\)r]r^)	rr{rzrrrnrRrlrO)r2rur}r�r4r4r5r�s
s


zConfigDictTest.test_config1_okcCs|jt|j|j�dS)N)r�rrzr�)r2r4r4r5r��
sz#ConfigDictTest.test_config2_failurecCs|jt|j|j�dS)N)r�rrz�config2a)r2r4r4r5�test_config2a_failure�
sz$ConfigDictTest.test_config2a_failurecCs|jt|j|j�dS)N)r�rrz�config2b)r2r4r4r5�test_config2b_failure�
sz$ConfigDictTest.test_config2b_failurecCs|jt|j|j�dS)N)r�rrzr�)r2r4r4r5r��
sz#ConfigDictTest.test_config3_failurecCsttj��b}|j|j�y
t��Wntk
r>tjd�YnXtjj	d�|j
|j�d�|jg�WdQRXdS)Nzjust testingrz-ERROR:root:just testing
Got a [RuntimeError]
)
rr{rzr�rrr�r�r�r�rBr@rO)r2r}r4r4r5r��
s


zConfigDictTest.test_config4_okcCsttj��b}|j|j�y
t��Wntk
r>tjd�YnXtjj	d�|j
|j�d�|jg�WdQRXdS)Nzjust testingrz-ERROR:root:just testing
Got a [RuntimeError]
)
rr{rz�config4arrr�r�r�r�rBr@rO)r2r}r4r4r5�test_config4a_ok�
s


zConfigDictTest.test_config4a_okcCs|j|jd�dS)N)ru)r�r�)r2r4r4r5r��
szConfigDictTest.test_config5_okcCs|jt|j|j�dS)N)r�rrzr�)r2r4r4r5�test_config6_failure�
sz#ConfigDictTest.test_config6_failurecCs�tj��T}|j|j�tjd�}|j|j��|j|j��|j	d
dg|d�|j	g�WdQRXtj��j}|j|j
�tjd�}|j|j�tjd�}|j|j��|j|j��|j	dd
g|d�|j	g�WdQRXdS)Nzcompiler.parserrcr\r]r^)r%zcompiler.lexerr_r`)rcr\)r]r^)rcr_)r]r`)
rr{rzr�rrrnrRrlrOr�r1r
)r2r}r�r4r4r5r��
s,




zConfigDictTest.test_config7_okcCs�tj��T}|j|j�tjd�}|j|j��|j|j��|j	dd
g|d�|j	g�WdQRXtj���}|j|j
�tjd�}|j|j�|j|j��|j|j��tjd�}|j|j��|j|j��|j	ddddg|d�|j	g�WdQRXdS)Nzcompiler.parserrcr\r]r^)r%zcompiler.lexerr_r`rbrd)rcr\)r]r^)rcr_)r]r`)rcrb)r]rd)
rr{rzr�rrrnrRrlrOr�r�r
)r2r}r�r4r4r5�test_config_8_ok�
s4




zConfigDictTest.test_config_8_okcCs&tj��n}|j|j�tjd�}tjd�}|j|j��|j|j��|j	|j��|j
dddg|d	�|j
g�WdQRXtj���}|j|j�tjd�}|j|j
�|j|j��|j|j��tjd
�}|j|j��|j|j��|j	|j��|j
ddddg|d	�|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)rr{rzr�rrrnrRrlr�rO�config8ar�r
)r2r}r�r�r4r4r5�test_config_8a_ok�
s<





z ConfigDictTest.test_config_8a_okcCs�tj���}|j|j�tjd�}|j|j��|jg|d�|j|j	�|j|j��|jg|d�|j|j
�|j|j��|jdg|d�WdQRXdS)Nzcompiler.parser)r%rcr_)rcr_)rr{rz�config9rrrnrRrO�config9a�config9b)r2r}r�r4r4r5�test_config_9_oks

zConfigDictTest.test_config_9_okcCs�tj���}|j|j�tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��tjd�}|j|j��|j	d
dg|d	�WdQRXdS)Nzcompiler.parserrzcompiler.lexerzcompiler.parser.codegenrar\r]r`)r%)rar\)r]r`)
rr{rz�config10rrrmrRrlrO)r2r}r�r4r4r5�test_config_10_ok1s




z ConfigDictTest.test_config_10_okcCs|j|j�dS)N)r��config11)r2r4r4r5�test_config11_okDszConfigDictTest.test_config11_okcCs|jt|j|j�dS)N)r�rrz�config12)r2r4r4r5�test_config12_failureGsz$ConfigDictTest.test_config12_failurecCs|jt|j|j�dS)N)r�rrz�config13)r2r4r4r5�test_config13_failureJsz$ConfigDictTest.test_config13_failurec
Cshtj��V}|j|j�tjd}|j|jd�|j|jd�tj	d�|j
|j�jd��WdQRXdS)Nrr�z!
ZExclamationz
Exclamation!
)
rr{rz�config14rrrBr�rrmr1r@r])r2r}r;r4r4r5�test_config14_okMs


zConfigDictTest.test_config14_okcCs�dd�}|j��Ptjdd�\}}tj|�ddd|d�id	dgid
�}|j|�|j|�WdQRXtjjd}|j	|||�dS)NcSs|j�tj|�dS)N)r7r�r�)r�r�r4r4r5r�Xsz0ConfigDictTest.test_config15_ok.<locals>.cleanupz.logztest_logging-X-rPryzlogging.FileHandler)r�filenamer.)rr.r�r)
r�r�r�r�r7rzrr�r.r�)r2r�r�r�rur�r4r4r5�test_config15_okVs


zConfigDictTest.test_config15_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)�encoderruZlistenrr2r\rr9rr�ZSOCK_STREAMZ
settimeoutZconnectr�r�rC�sendr7Z
stopListeningr�)r2�textZverifyr+rrEr�rNZ	sentsofar�leftZsentr4r4r5�setup_via_listenerss,





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
dg|d	�WdQRXdS)Nzcompiler.parserrzcompiler.lexerzcompiler.parser.codegenrar\r]r`)r%)rar\)r]r`)rr{rA�json�dumpsr1rrrmrRrlrO)r2r}r�r4r4r5�test_listen_config_10_ok�s




z'ConfigDictTest.test_listen_config_10_okcCsltj��Z}|jtjtj��tjd�}|j	|j
��|j|j
��|jddg|d�|jg�WdQRXdS)	Nzcompiler.parserrcr\r]r^)r%)rcr\)r]r^)
rr{rArsrtrrr�rrrnrRrlrO)r2r}r�r4r4r5�test_listen_config_1_ok�s

z&ConfigDictTest.test_listen_config_1_okcCsbdd�}dd�}tjd�}tjtj�}tj��.}|j||�|j	|j
��|j|j
��WdQRX|jg|d�|jddgdd�tj��6}|j|�tjd�}|j	|j
��|j|j
��WdQRX|jddg|d�|jddgdd�tj��B}|j|ddd�|�tjd�}|j	|j
��|j|j
��WdQRX|jddg|d�|jddgdd�dS)NcSsdS)Nr4)�stuffr4r4r5�verify_fail�sz6ConfigDictTest.test_listen_verify.<locals>.verify_failcSs|ddd�S)NrPr�r4)rFr4r4r5�verify_reverse�sz9ConfigDictTest.test_listen_verify.<locals>.verify_reversezcompiler.parser)r%rcr\r]r^z^[\w.]+ -> (\w+): (\d+)$)rJr_r`rPrbrd)rcr\)r]r^)rcr_)r]r`)rcr\)r]r^r�)rcrb)r]rd)rcr\)r]r^)
rrrsrtrrr�rr{rArnrRrlrO)r2rGrHr�Zto_sendr}r4r4r5�test_listen_verify�sN






z!ConfigDictTest.test_listen_verifycCsB|j|j�tjd�jd}|j|jtj�|j|jj	tj
�dS)Nr!r)rz�out_of_orderrrr.rrr�r�_style�StringTemplateStyle)r2r�r4r4r5�test_out_of_order�s

z ConfigDictTest.test_out_of_ordercCs�ddddgddd�d!d
ddgdgdddgd�}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)"NrPr��r��b�crF)r�r��gr;rj�jr��lrprm�ozcfg://alist�p)ZatupleZalistZadictZnest1Znest2Znest3zcfg://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�rN�r;rj)rQrVrR)	rruZBaseConfiguratorrBZconvert�popr��KeyErrorr�)r2r�Zbcr�r4r4r5�test_baseconfig�s$
zConfigDictTest.test_baseconfig)N)?rSrTrUrVrr�r?r|r�r�r�r#r%r�r�rprrr'r�r�r�r�r+r-r.r/r1r3r5r7r9rJrzr~r�r�r$r&r�r�r(r�r)r�r*r,r0r2r4r6r8r:r<rr	rrArDrErIrMrYr4r4r4r5r�sl
















!+	
?rc@seZdZdd�Zdd�ZdS)�ManagerTestcsng�G�fdd�dtj�}tjd�}|jt|jt�|j|�|jd�}|jd�tjd�|j	�dg�dS)NcseZdZd�fdd�	ZdS)z6ManagerTest.test_manager_loggerclass.<locals>.MyLoggerNcs�j|�dS)N)r_)r2rr�r��exc_info�extra)�loggedr4r5�_logsz;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log)NN)rSrTrUr^r4)r]r4r5�MyLoggersr_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)rra�object�setLogRecordFactoryrBZlogRecordFactory)r2rdrLr4r4r5�test_set_log_record_factory s

z'ManagerTest.test_set_log_record_factoryN)rSrTrUrerhr4r4r4r5rZsrZc@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_loggers's






z"ChildLoggerTest.test_child_loggersN)rSrTrUrnr4r4r4r5ri&sric@seZdZdS)�DerivedLogRecordN)rSrTrUr4r4r4r5ro7sroc@s$eZdZdd�Zdd�Zdd�ZdS)�LogRecordFactoryTestcCsBGdd�dtj�}tj|�|t�|_|jj|j�tj�|_	dS)Nc@seZdZdd�Zdd�ZdS)z2LogRecordFactoryTest.setUp.<locals>.CheckingFiltercSs
||_dS)N)r�)r2r�r4r4r5r>sz;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__cSs,t|�}||jk	r(d||jf}t|��dS)Nz)Unexpected LogRecord type %s, expected %sT)�typer�rb)r2r�r+r�r4r4r5r�As

z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterN)rSrTrUrr�r4r4r4r5�CheckingFilter=srr)
rr�rr6ror�r!r�ZgetLogRecordFactory�orig_factory)r2rrr4r4r5r6<s


zLogRecordFactoryTest.setUpcCs(|jj|j�tj|�tj|j�dS)N)r!r�r�rr<rrgrs)r2r4r4r5r<Ns
zLogRecordFactoryTest.tearDowncCs@|jt|jj|j��tjt�|jj|j��|j	dg�dS)Nr�r]r^)r�r]r^)
r�rbr!rmrRrrgrorlrO)r2r4r4r5�test_logrecord_classSs

z)LogRecordFactoryTest.test_logrecord_classN)rSrTrUr6r<rtr4r4r4r5rp:srpc@sDeZdZdZdd�Zdd�Zdd�Zeje	e
jd�d	�d
d��ZdS)
�QueueHandlerTestz^[\w.]+ -> (\w+): (\d+)$cCsZtj|�tjd�|_tjj|j�|_tjd�|_	d|j	_
|j	jtj�|j	j
|j�dS)NrPZqueFr�)rr6�queue�Queuerr.�QueueHandler�que_hdlrr�
que_loggerrer&rar0)r2r4r4r5r6as
zQueueHandlerTest.setUpcCs|jj�tj|�dS)N)ryr7rr<)r2r4r4r5r<j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)rzrorRr�rv�Empty�
get_nowaitrnrmr1r�r�	LogRecordrBr3r�r�)r2r�rr4r4r5�test_queue_handlerns
z#QueueHandlerTest.test_queue_handler�
QueueListenerz5logging.handlers.QueueListener required for this testcCsltjtj��}tjj|j|�}|j�z4|jj	|j
��|jj|j
��|jj|j
��Wd|j
�X|j|jtjdd��|j|jtjdd��|j|jtjdd��|j�tjtj��}|jtj�tjj|j|dd�}|j�z4|jj	|j
��|jj|j
��|jj|j
��Wd|j
�X|j|jtjdd��|j|jtjdd��|j|jtjd	d��dS)
Nr\)r�r�r^r_T)Zrespect_handler_levelr`rbrd)rZTestHandlerZMatcherrr.rrvrrzrmrRrlr�r/r1Zmatchesrar]r[r7r&r�)r2r��listenerr4r4r5�test_queue_listenerzs2

z$QueueHandlerTest.test_queue_listenerN)
rSrTrUr?r6r<r~rr	r�rr.r�r4r4r4r5ru]s	rur)�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.rxr0rrrnr/r8r7)�	log_queuer�r�r�r�r4r4r5�
setup_and_log�s






zQueueListenerTest.setup_and_logr�cCsNx2t|j�D]$}tj�}|j|d|j�|f�qW|j|jd|jd�dS)Nz%s_%srz&correct number of handled log messages)r��repeatrvrwr�r�rB�
call_count)r2�mock_handlerjr�r4r4r5�#test_handle_called_with_queue_queue�s
z5QueueListenerTest.test_handle_called_with_queue_queuecCs^xBt|j�D]4}tj�}|j|d|j�|f�|j�|j�qW|j|j	d|jd�dS)Nz%s_%srz&correct number of handled log messages)
r�r��multiprocessingrwr�r�r7�join_threadrBr�)r2r�rjr�r4r4r5� test_handle_called_with_mp_queue�sz2QueueListenerTest.test_handle_called_with_mp_queueccs0yx|j�VqWWntjk
r*gSXdS)N)r|rvr{)r�r4r4r5�get_all_from_queue�s
z$QueueListenerTest.get_all_from_queuecCs�x|t|j�D]n}tj�}|j|d|j�|f�t|j|��}|j�|j	�gt
jjj
gg}|j||ddd�|D��qWdS)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: %scSs"g|]}t|tj�r|jn|�qSr4)r�rr}r�)rirpr4r4r5rk�szJQueueListenerTest.test_no_messages_in_queue_after_stop.<locals>.<listcomp>N)r�r�r�rwr�r��listr�r7r�rr.rZ	_sentinelr)r2rjrvr�rLr4r4r5�$test_no_messages_in_queue_after_stop�s	z6QueueListenerTest.test_no_messages_in_queue_after_stopN)rSrTrUrVr��staticmethodr�r�rfrr.rrZreap_threadsr�Zrequires_multiprocessing_queuer�r�r�r4r4r4r5r��s
r�c@s eZdZdd�ZeZdd�ZdS)�UTCcCstS)N)�ZERO)r2�dtr4r4r5�	utcoffset�sz
UTC.utcoffsetcCsdS)Nr�r4)r2r�r4r4r5�tzname�sz
UTC.tznameN)rSrTrUr��dstr�r4r4r4r5r��sr�c@sFeZdZdd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�
FormatterTestc	Cs0dtjtjjddd�ddddd
d	�|_i|_dS)Nzformatter.testr�Ztoz	dummy.extr�zMessage with %d %sr��placeholders)r3r�pathname�linenor[�funcr�r�)r�r�)rr'r�r�r��common�variants)r2r4r4r5r6
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*rBrBr�rXr��usesTimer1)r2r�r�r4r4r5�test_percent
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}%$�{)rz$%Message with 2 placeholders%$z{random}z	{asctime}z{asctime!s:15}z{asctime:15}r�)
r�rr*rBrBr�rXr�r�r1)r2r�r�r4r4r5�test_braces&
szFormatterTest.test_bracescCs�|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*rBrBr�rXr�r�r1)r2r�r�r4r4r5�test_dollars7
s zFormatterTest.test_dollarscCs|jttjddd�dS)N�x)r�r�rr*)r2r4r4r5�test_invalid_styleJ
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���rNr�{z%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r��datetime�utcr�ZmktimeZ
astimezoneZ	timetupleZcreatedZmsecsrr*�gmtimeZ	converterrBZ
formatTimerBr�)r2r�r�r�r4r4r5�	test_timeM
s

zFormatterTest.test_time)N)
rSrTrUr6r�r�r�r�r�r�r4r4r4r5r�
s
r�c@seZdZdd�Zdd�ZdS)�TestBufferingFormattercCsdt|�S)Nz[(%d))rC)r2�recordsr4r4r5�formatHeader\
sz#TestBufferingFormatter.formatHeadercCsdt|�S)Nz(%d)])rC)r2r�r4r4r5�formatFooter_
sz#TestBufferingFormatter.formatFooterN)rSrTrUr�r�r4r4r4r5r�[
sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�BufferingFormatterTestcCs"tjddi�tjddi�g|_dS)Nr�r�r�)rr�r�)r2r4r4r5r6c
szBufferingFormatterTest.setUpcCs2tj�}|jd|jg��|jd|j|j��dS)NrZonetwo)r�BufferingFormatterrBrBr�)r2r�r4r4r5�test_defaulti
sz#BufferingFormatterTest.test_defaultcCsDt�}|jd|j|j��tjd�}t|�}|jd|j|j��dS)Nz[(2)onetwo(2)]z
<%(message)s>z[(2)<one><two>(2)])r�rBrBr�rr*)r2r�Zlfr4r4r5�test_customn
s

z"BufferingFormatterTest.test_customN)rSrTrUr6r�r�r4r4r4r5r�b
sr�c@seZdZdd�ZdS)�
ExceptionTestc
Cs�|j}t�}|j|�ytd��Wntjddd�YnX|j|�|j�|jd}|j	|j
jd��|j	|j
jd��|j	|j
jd��|j	|j
jd	��dS)
Nzdeliberate mistakeZfailedT)�
stack_inforz#Traceback (most recent call last):
z!
RuntimeError: deliberate mistakezStack (most recent call last):
z,logging.exception('failed', stack_info=True))r!�RecordingHandlerr0rrr�r8r7r�r1Zexc_textr;r]r�)r2r�r;r4r4r5�test_formattingv
s


zExceptionTest.test_formattingN)rSrTrUr�r4r4r4r5r�u
sr�c@seZdZdd�ZdS)�LastResortTestc%Cs,|j}|j|j�tj}tj}z�tj��:}|jd�|j	|j
�d�|jd�|j	|j
�d�WdQRXdt_tj��$}|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
lastResortrrrrorBr@rmrZemittedNoHandlerWarningr0)r2r�Zold_lastresortZold_raise_exceptionsrr�r4r4r5�test_last_resort�
s4








zLastResortTest.test_last_resortN)rSrTrUr�r4r4r4r5r��
sr�c@seZdZdd�Zdd�ZdS)�FakeHandlercCs(x"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{} - {})r_rBr4)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��
sr�cs$eZdZ�fdd�Zdd�Z�ZS)r�cstt|�j||�g|_dS)N)r4r�rr�)r2r�rx)r5r4r5r�
szRecordingHandler.__init__cCs|jj|�dS)z&Keep track of all the emitted records.N)r�r_)r2r�r4r4r5r��
szRecordingHandler.handle)rSrTrUrr�r8r4r4)r5r5r��
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�ZS)"�ShutdownTestz#Test suite for the shutdown method.cs.tt|�j�g|_tj}|jttd|�dS)Nr)r4r�r6r�rrr�r�)r2Zraise_exceptions)r5r4r5r6�
szShutdownTest.setUpcs�fdd�}|S)Ncs
���dS)Nr4r4)rlr4r5r��
sz'ShutdownTest.raise_error.<locals>.innerr4)r2rlr�r4)rlr5�raise_error�
szShutdownTest.raise_errorcCsvtd|j�}td|j�}td|j�}ttjj|||g�}tjt|�d�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�r6r�rB)r2Zhandler0Zhandler1Zhandler2r.rLr4r4r5�test_no_failure�
szShutdownTest.test_no_failurecCsRtd|j�}t|||j|��tjj|�g}tjt|�d�|j	d|jd�dS)Nr)r�z0 - releaserPr�)
r�r�r�r�rr�r�r6r�rB)r2r�rlr�r.r4r4r5�_test_with_failure_in_method�
s
z)ShutdownTest._test_with_failure_in_methodcCs|jdt�dS)Nr�)r�r�)r2r4r4r5�test_with_ioerror_in_acquire�
sz)ShutdownTest.test_with_ioerror_in_acquirecCs|jdt�dS)Nr�)r�r�)r2r4r4r5�test_with_ioerror_in_flush�
sz'ShutdownTest.test_with_ioerror_in_flushcCs|jdt�dS)Nr7)r�r�)r2r4r4r5�test_with_ioerror_in_close�
sz'ShutdownTest.test_with_ioerror_in_closecCs|jdt�dS)Nr�)r�r�)r2r4r4r5�test_with_valueerror_in_acquire�
sz,ShutdownTest.test_with_valueerror_in_acquirecCs|jdt�dS)Nr�)r�r�)r2r4r4r5�test_with_valueerror_in_flush�
sz*ShutdownTest.test_with_valueerror_in_flushcCs|jdt�dS)Nr7)r�r�)r2r4r4r5�test_with_valueerror_in_closesz*ShutdownTest.test_with_valueerror_in_closecCsdt_|jdt�dS)NFr�)rrr��
IndexError)r2r4r4r5�.test_with_other_error_in_acquire_without_raisesz;ShutdownTest.test_with_other_error_in_acquire_without_raisecCsdt_|jdt�dS)NFr�)rrr�r�)r2r4r4r5�,test_with_other_error_in_flush_without_raisesz9ShutdownTest.test_with_other_error_in_flush_without_raisecCsdt_|jdt�dS)NFr7)rrr�r�)r2r4r4r5�,test_with_other_error_in_close_without_raisesz9ShutdownTest.test_with_other_error_in_close_without_raisecCsdt_|jt|jdt�dS)NTr�)rrr�r�r�)r2r4r4r5�+test_with_other_error_in_acquire_with_raises
z8ShutdownTest.test_with_other_error_in_acquire_with_raisecCsdt_|jt|jdt�dS)NTr�)rrr�r�r�)r2r4r4r5�)test_with_other_error_in_flush_with_raises
z6ShutdownTest.test_with_other_error_in_flush_with_raisecCsdt_|jt|jdt�dS)NTr7)rrr�r�r�)r2r4r4r5�)test_with_other_error_in_close_with_raises
z6ShutdownTest.test_with_other_error_in_close_with_raise)rSrTrUrVr6r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r8r4r4)r5r5r��
s"	r�c@sheZdZdZdd�Zddd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Ze
jdd��ZdS)�ModuleLevelMiscTestz)Test suite for some module level methods.cCsDtjjj}|j|d�|jtj|�tjd�|jtjjjd�dS)Nr�S)rr�r�disablerBr�)r2�old_disabler4r4r5�test_disable$s


z ModuleLevelMiscTest.test_disableNcs�g�tj|td�fdd��t�}tjj|�tt|�}|dk	rN||d|�n
|d|�|jt|j	�d�|j	d}|j|j
�d|�|dk	r�|ntt|j��}|j|j|�|j�g�dS)N�basicConfigcs�j||f�S)N)r_)r��kw)r�r4r5�<lambda>0sz/ModuleLevelMiscTest._test_log.<locals>.<lambda>ztest me: %rrPr)
rr�rr�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_logEszModuleLevelMiscTest.test_logcCs|jd�dS)Nro)r�)r2r4r4r5�
test_debugHszModuleLevelMiscTest.test_debugcCs|jd�dS)Nrn)r�)r2r4r4r5�	test_infoKszModuleLevelMiscTest.test_infocCs|jd�dS)Nrm)r�)r2r4r4r5�test_warningNsz ModuleLevelMiscTest.test_warningcCs|jd�dS)Nrl)r�)r2r4r4r5�
test_errorQszModuleLevelMiscTest.test_errorcCs|jd�dS)Nr�)r�)r2r4r4r5�
test_criticalTsz!ModuleLevelMiscTest.test_criticalcCs^|jttjt�Gdd�dtj�}tj|�|jtj�|�tjtj�|jtj�tj�dS)Nc@seZdZdS)z;ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggerN)rSrTrUr4r4r4r5r_Zsr_)r�rbrrcrfr`rBZgetLoggerClass)r2r_r4r4r5�test_set_logger_classWs
z)ModuleLevelMiscTest.test_set_logger_classcCs8d}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�codeZrc�out�errr4r4r5�test_logging_at_shutdowncs

z,ModuleLevelMiscTest.test_logging_at_shutdown)N)rSrTrUrVr�r�r�r�r�r�r�r�r�rZrequires_type_collectingr�r4r4r4r5r� s	
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
LogRecordTestcCs6tji�}t|�}|j|jd��|j|jd��dS)Nz<LogRecord: �>)rr�rhr1r;r])r2r�rNr4r4r5�test_str_repxs
zLogRecordTest.test_str_repcCsjt�}tj�}|j|�ddi}tjd|�|j|jdj|�|j|jdj	d�|j
|�|j�dS)NZlessZmorezless is %(less)srzless is more)r�rrr0rmrr�r�rBr�r8r7)r2r;r�r�r4r4r5�
test_dict_arg~s

zLogRecordTest.test_dict_argcCs\tji�}|j|jd�y*ddl}tji�}|j|j|j�j�Wntk
rVYnXdS)NZMainProcessr)rr�rB�processNamer�Zcurrent_processr3r�)r2r�Zmpr4r4r5�test_multiprocessing�s

z"LogRecordTest.test_multiprocessingcCs�tji�}|j}tr(||j�||j�||j�||j�tj}tj	}tj
}zNdt_dt_	dt_
tji�}|j}||j�||j�||j�||j�Wd|t_|t_	|t_
XdS)NF)rr��assertIsNotNonerZthreadZ
threadName�processr��
logThreads�logProcesses�logMultiprocessing�assertIsNone)r2r�ZNOT_NONEZlog_threadsZ
log_processesZlog_multiprocessingZNONEr4r4r5�
test_optional�s.








zLogRecordTest.test_optionalN)rSrTrUr�r�r�r�r4r4r4r5r�ws
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�ZS)0�BasicConfigTestz#Test suite for logging.basicConfig.csVtt|�j�tjj|_tjj�|_tj	dd�|_
tjj|_|j
|j�gtj_dS)N)r4r�r6rr�r.rrrrrrr"r�r�)r2)r5r4r5r6�s

zBasicConfigTest.setUpcs@x,tjjdd�D]}tjj|�|j�qWtt|�j�dS)N)rr�r.r8r7r4r�r<)r2r;)r5r4r5r<�szBasicConfigTest.tearDowncCsFttjd|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.rr(r%r�rrrK�_fmtZBASIC_FORMATr�r
�PercentStylerr")r2r�rr4r4r5�test_no_kwargs�szBasicConfigTest.test_no_kwargscCsRtj��@}tjtjdd�tjd�tjjd�|j|j	�j
�d�WdQRXdS)Nr�)r%rzLog an errorrzERROR:root:Log an error)rr{rr�r�r�rlr�rBr@�strip)r2r}r4r4r5�test_strformatstyle�s

z#BasicConfigTest.test_strformatstylecCsRtj��@}tjtjdd�tjd�tjjd�|j|j	�j
�d�WdQRXdS)Nr)r%rzLog an errorrzERROR:root:Log an error)rr{rr�r�r�rlr�rBr@r)r2r}r4r4r5�test_stringtemplatestyle�s

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�)r��h2r�r4r4r5r��sz.BasicConfigTest.test_filename.<locals>.cleanupztest.log)r;rPrr�)rr�rBrCr�r.rr�r%�moder3r�)r2r�r�rLr4r4r5�
test_filename�szBasicConfigTest.test_filenamecCsVdd�}tjddd�tjjd}tjdd�}|j|jj|jj�|j|||d�dS)NcSs|j�|j�tj|�dS)N)r7r�r�)r�rr�r4r4r5r��sz.BasicConfigTest.test_filemode.<locals>.cleanupztest.log�wb)r;�filemoder)	rr�r�r.r�rBr%rr�)r2r�r�rLr4r4r5�
test_filemode�szBasicConfigTest.test_filemodecCs`tj�}|j|j�tj|d�|jttjj	�d�tjj	d}|j
|tj�|j|j|�dS)N)r%rPr)
r#r$r�r7rr�rBrCr�r.rr(r%)r2r%r�r4r4r5�test_streamszBasicConfigTest.test_streamcCs.tjdd�tjjdj}|j|jjd�dS)Nr�)rBr)rr�r�r.rrBrKr)r2rr4r4r5�test_formatszBasicConfigTest.test_formatcCs,tjdd�tjjdj}|j|jd�dS)Nr�)r
r)rr�r�r.rrBr
)r2rr4r4r5�test_datefmtszBasicConfigTest.test_datefmtcCs.tjdd�tjjdj}|j|jtj�dS)Nr)rr)rr�r�r.rrrKrL)r2rr4r4r5�
test_style!szBasicConfigTest.test_stylecCsTtjj}|jtjj|�tjdd�|jtjjd�tjdd�|jtjjd�dS)N�9)r�:)rr�rr�r&r�rB)r2�	old_levelr4r4r5�
test_level'szBasicConfigTest.test_levelcCsp|j}tj�g}tj}|ttjd|d�|ttjd|d�|ttj||d�|ttjtjd�tjddd�dS)Nztest.log)r;r%)r;r.)r%r.)Zloglevelr�)r;r
)r�rr(r�rr�r�rc)r2r�r.r%r4r4r5�test_incompatible1s



z!BasicConfigTest.test_incompatiblecCs�tj�tjtj�tj�g}tj�}|dj|�tj|d�|j|dtjj	d�|j|dtjj	d�|j|dtjj	d�|j
|dj�|j
|dj�|j|dj|�|j|dj|dj�dS)Nr�)r.rrP)rr(r�r�r*r,r�rr�r.r�r)r2r.r�r4r4r5�
test_handlers@s

zBasicConfigTest.test_handlersNcsfg�tj����fdd�}tj�td|�tt|�}|dk	rH||d�n|d��j�fifg�dS)Ncs<��tjj}tjjd��jtjj|��j||f�dS)N�d)rr�rr&r�r_)r�r�r)r��old_basic_configr2r4r5�my_basic_configVs
z2BasicConfigTest._test_log.<locals>.my_basic_configr�ztest me)rr�rr�rrB)r2r�rrr�r4)r�rr2r5r�Qs
zBasicConfigTest._test_logcCs|jdtj�dS)Nrk)r�rra)r2r4r4r5r�hszBasicConfigTest.test_logcCs|jd�dS)Nro)r�)r2r4r4r5r�kszBasicConfigTest.test_debugcCs|jd�dS)Nrn)r�)r2r4r4r5r�nszBasicConfigTest.test_infocCs|jd�dS)Nrm)r�)r2r4r4r5r�qszBasicConfigTest.test_warningcCs|jd�dS)Nrl)r�)r2r4r4r5r�tszBasicConfigTest.test_errorcCs|jd�dS)Nr�)r�)r2r4r4r5r�wszBasicConfigTest.test_critical)N)rSrTrUrVr6r<r�rrrrrrr
rrrrrr�r�r�r�r�r�r�r8r4r4)r5r5r��s.	


r�csLeZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	�Z
S)�LoggerAdapterTestcs�tt|�j�tjdd��t�|_tj|_|jj	|j�|j
|jj|j�|j
|jj��fdd�}|j
|�|j
tj
�tj|jdd�|_dS)Ncs�tjdd�<dS)N)rrr4)�old_handler_listr4r5r��sz(LoggerAdapterTest.setUp.<locals>.cleanup)r�r\)r4rr6rrr�r�r�r�r0r�r8r7r6rj�adapter)r2r�)r5)rr5r6|s
zLoggerAdapterTest.setUpcCs�d}d}yddWn6tk
rJ}z|}|jj||j�WYdd}~XnX|jt|jj�d�|jjd}|j|jtj	�|j|j
|�|j|j|jf�|j|j|j
||jf�dS)Nztesting exception: %rrPr)�ZeroDivisionErrorrr�r�rBrCr�r�rr]r�r�r[r5�
__traceback__)r2r��excrFr�r4r4r5�test_exception�s"z LoggerAdapterTest.test_exceptioncCs�yddWn&tk
r2}z
|}WYdd}~XnX|jjd|d�|jt|jj�d�|jjd}|j|j|j||j	f�dS)NrPrz
exc_info test)r[)
rrr�rBrCr�r�r[r5r)r2rFrr�r4r4r5�test_exception_excinfo�sz(LoggerAdapterTest.test_exception_excinfocCshd}|jj||j�|jt|jj�d�|jjd}|j|jtj�|j|j	|�|j|j
|jf�dS)Nzcritical test! %rrPr)rr�r�rBrCr�r�rr[r�r�)r2r�r�r4r4r5r��szLoggerAdapterTest.test_criticalcCsD|jjjj}d|jjj_|jt|jjjd|�|j|jjd��dS)N�!r�� )rr�rr�r�r�r��isEnabledFor)r2r�r4r4r5�test_is_enabled_for�s
z%LoggerAdapterTest.test_is_enabled_forcCsR|j|jj��x|jjD]}|jj|�qW|j|jj��|j|jj��dS)N)r1rr-r�r.r8r�)r2r�r4r4r5�test_has_handlers�s
z#LoggerAdapterTest.test_has_handlerscCsLGdd�dtj�}d}||jdd�}||dd�}d|_|jt|�t|��|jtj||j�|jt	|jj
�d�|jj
d}|j|jtj�|j|jd|���|j|j
|jf�|j}|j|j|�|j|jj|�t�}z6||_|j|j|�|j|j|�|j|jj|�Wd||_X|j|j|�|j|j|�|j|jj|�dS)	Nc@seZdZdZdd�ZdS)z.LoggerAdapterTest.test_nested.<locals>.Adapter�AdaptercSs|j�d|��|fS)N� )r�)r2r�rxr4r4r5r��sz6LoggerAdapterTest.test_nested.<locals>.Adapter.processN)rSrTrUr�r�r4r4r4r5r&�sr&zAdapters can be nested, yo.)r�r\ZAdapterAdapterrPrzAdapter AdapterAdapter )rrjr�r�rBr�rkr[r�rCr�r�r�r�rrrf)r2r&r�rZadapter_adapterr�Zorig_managerZtemp_managerr4r4r5�test_nested�s2zLoggerAdapterTest.test_nested)rSrTrUr6rr r�r$r%r(r8r4r4)r5r5r{s

	rcs|eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Z�ZS)�
LoggerTestcsbtt|�j�t�|_tjdd�|_|jj|j�|j	|jj
|j�|j	|jj�|j	tj�dS)NZblah)r3)
r4r)r6r�r�rr`r�r0r�r8r7r6)r2)r5r4r5r6�szLoggerTest.setUpcCs|jt|jjt��dS)N)r�rbr�r&rf)r2r4r4r5�test_set_invalid_level�sz!LoggerTest.test_set_invalid_levelcCs�d}d}yddWn6tk
rJ}z|}|jj||j�WYdd}~XnX|jt|jj�d�|jjd}|j|jtj	�|j|j
|�|j|j|jf�|j|j|j
||jf�dS)Nztesting exception: %rrPr)rr�r�r�rBrCr�r�rr]r�r�r[r5r)r2r�rrFr�r4r4r5r�s"zLoggerTest.test_exceptioncCs2tjtdd��|jt|jjdd�WdQRXdS)NrTrhztest message)r�	swap_attrrr�rbr�rk)r2r4r4r5�!test_log_invalid_level_with_raisesz,LoggerTest.test_log_invalid_level_with_raisec
Cs,tjtdd��|jjdd�WdQRXdS)NrFrhztest message)rr+rr�rk)r2r4r4r5�test_log_invalid_level_no_raise
sz*LoggerTest.test_log_invalid_level_no_raisecsPg�tj|tjd�fdd��|jjdd�|jt��d�|jd�d�dS)	N�print_stackcs�j|j��S)N)r_r@)r�ry)r�r4r5r�sz=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>T)r�rPzStack (most recent call last):
r)rr�r�	tracebackr�Z
findCallerrBrC)r2r4)r�r5� test_find_caller_with_stack_infosz+LoggerTest.test_find_caller_with_stack_infoc
Cs�d}d}d}}}}}}}	tj|||||||||	�	}
xFdt|
jj��D]0}|di}|jt|jj|||||||||	d�qRWdS)Nz	my record�
r�r�z
some value)r\�sinfo)r�r�)	rZ_logRecordFactoryrG�__dict__�keysr�rXr��
makeRecord)
r2r3rr��lnor�r�r[r�r2�rvr�r\r4r4r5�%test_make_record_with_extra_overwrites

z0LoggerTest.test_make_record_with_extra_overwritecCs\d}d}d}}}}}}}	ddi}
|jj||||||||
|	d�	}|jd|j�dS)Nz	my recordr1Z	valid_keyz
some value)r\r2)r�r5rr3)r2r3rr�r6r�r�r[r�r2r\r�r4r4r5�(test_make_record_with_extra_no_overwrite%sz3LoggerTest.test_make_record_with_extra_no_overwritecCsB|j|jj��x|jjD]}|jj|�qW|j|jj��dS)N)r1r�r-r.r8r�)r2r�r4r4r5r%.szLoggerTest.test_has_handlerscCs"tjd�}d|_|j|j��dS)Nz
blah.childF)rrrer�r-)r2Zchild_loggerr4r4r5�test_has_handlers_no_propagate5s
z)LoggerTest.test_has_handlers_no_propagatecCs>|jjj}d|jj_|jt|jjd|�|j|jjd��dS)N�r��)r�rr�r�r�r�r#)r2r�r4r4r5r$:s

zLoggerTest.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�)rrrr��parentZassertIsNot)r2r�r4r4r5�test_root_logger_aliases@sz#LoggerTest.test_root_logger_aliasescCs$|jttjt�|jttjd�dS)Nsfoo)r�rbrr�any)r2r4r4r5�test_invalid_namesLszLoggerTest.test_invalid_names)rSrTrUr6r*rr,r-r0r8r9r%r:r$r?rAr8r4r4)r5r5r)�s	

	r)c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�BaseFileTestz1Base class for handler tests that write log filescCs0tj|�tjdd�\}|_tj|�g|_dS)Nz.logztest_logging-2-)rr6r�r�r�r�r7�rmfiles)r2r�r4r4r5r6Ts

zBaseFileTest.setUpcCsBx|jD]}tj|�qWtjj|j�r4tj|j�tj|�dS)N)rCr�r�r�r�r�rr<)r2r�r4r4r5r<Zs
zBaseFileTest.tearDowncCs*|jtjj|�d|d�|jj|�dS)z7Assert a log file is there and register it for deletionzLog file %r does not exist)r�N)r1r�r�r�rCr_)r2r;r4r4r5�
assertLogFileaszBaseFileTest.assertLogFileN)rSrTrUrVr6r<rDr4r4r4r5rBQsrBc@seZdZdd�ZdS)�FileHandlerTestcCsxtj|j�tj|jdd�}|j|j�|jtjj	|j��|j
tji��|j|j�|j
tjj	|j��|j�dS)NT)r�)r�r�r�rr�r�r%r�r�r�r�r�r�r1r7)r2�fhr4r4r5�
test_delayiszFileHandlerTest.test_delayN)rSrTrUrGr4r4r4r5rEhsrEc@sBeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zej	dd��Z
d
S)�RotatingFileHandlerTestc	Cstjdtjdd|j�ddd�S)NrmrUrP)rr}r'rR)r2r4r4r5�next_rectsz RotatingFileHandlerTest.next_reccCs.tjj|jdd�}|j|jd��|j�dS)Nr)�maxBytes)rr.r�r�r��shouldRolloverr7)r2�rhr4r4r5�test_should_not_rolloverxsz0RotatingFileHandlerTest.test_should_not_rollovercCs2tjj|jdd�}|j|j|j���|j�dS)NrP)rJ)rr.r�r�r1rKrIr7)r2rLr4r4r5�test_should_rollover~sz,RotatingFileHandlerTest.test_should_rollovercCs4tjj|j�}|j|j��|j|j�|j�dS)N)rr.r�r�r�rIrDr7)r2rLr4r4r5�test_file_created�sz)RotatingFileHandlerTest.test_file_createdcCs�dd�}tjj|jddd�}||_|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>.namerr�rP)�backupCountrJz.1z.2z.3)
rr.r�r�rPr�rIrDr�r�r�r�r7)r2rPrLr4r4r5�test_rollover_filenames�sz/RotatingFileHandlerTest.test_rollover_filenamescCs�dd�}dd�}tjj|jddd�}||_||_|j�}|j|�|j|j�|j�}|j|�||jd�}|j|�t	j
}t|d	��0}|j�}	t
j|	�}
|j|
jd
�|j|�WdQRX|j|j��||jd�}|j|�t|d	��0}|j�}	t
j|	�}
|j|
jd
�|j|�WdQRX|j|j��||jd�}t|d	��0}|j�}	t
j|	�}
|j|
jd
�|j|�WdQRX|jt	jj||jd���|j�dS)
NcSs|dS)Nz.gzr4)r3r4r4r5rP�sz3RotatingFileHandlerTest.test_rotator.<locals>.namercSsXt|d��:}|j�}tj|d�}t|d��}|j|�WdQRXWdQRXtj|�dS)N�rbrgr	)r�rI�zlib�compressr
r�r�)�source�destZsfr�
compressedZdfr4r4r5�rotator�sz5RotatingFileHandlerTest.test_rotator.<locals>.rotatorr�rP)rQrJz.1rS�asciiz.2z.3)rr.r�r�rYrPrIr�rDr��linesepr�rIrTZ
decompressrBr�r�r�r�r�r7)r2rPrYrL�m1�m2r��newliner�rXrr4r4r5�test_rotator�sB



"

"
"z$RotatingFileHandlerTest.test_rotatorN)rSrTrUrIrMrNrOrRrZ
requires_zlibr_r4r4r4r5rHssrHc@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}xNt|�D]B}|tj|d�}	|j|	jd
��tjj��}|r�|jj��Pq�Wd|}
|�s�tjj|j�\}��fdd�tj|�D�}td|jd�tjd�td|tjd�xJ|D]B}
td|
�tjj||
�}t|d��}t|j��WdQRX�q@W|j||
d�dS)N�SrP)rQz%(asctime)s %(message)sr�ztesting - initialg�������?ztesting - after delayFr�<)�secondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondscsg|]}|j��r|�qSr4)r;)rir�)r�r4r5rk�sz>TimedRotatingFileHandlerTest.test_rollover.<locals>.<listcomp>z
Test time: %sz%Y-%m-%d %H-%M-%S)ryzThe only matching files are: %szContents of %s:r�)r�i,)rr.r�r�r*r,r�r�rDr�r�r7r�r�r��	timedeltaZstrftimer�r�r�rCr_r��listdirrr�rr�r�rIr1)r2rFZfmtZr1Zr2�foundr��GO_BACK�secs�prevr�Zdn�filesr�r�Ztfr4)r�r5�
test_rollover�sB






z*TimedRotatingFileHandlerTest.test_rollovercCsR|j}|ttjj|jddd�|ttjj|jddd�|ttjj|jddd�dS)N�XT)r��WZW7)r�r�rr.r�r�)r2r�r4r4r5�test_invalid�s


z)TimedRotatingFileHandlerTest.test_invalidcCsxd}tjddd�}tjj|jdddd|d�}z<|j|�}|j||d�|j|d
�}|j||d�Wd|j�XdS)Nr��MIDNIGHTrPT)�when�intervalrQr��atTimerbr1�$i�i��iiжipi@�)	r�r�rr.r�r��computeRolloverrBr7)r2�currentTimersrLrKr4r4r5�"test_compute_rollover_daily_attime�s
z?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attimec	Cs<ttj��}||d}tjddd�}tj|�j}�xtd�D�]�}tjj|j	d|ddd|d�}z�||krzd||}n||}|d9}|d7}||7}|j
|�}||kr�tdtj�tdt
��|j||�||k�r�|d7}|j
|d�}||k�rtdtj�tdt
��|j||�Wd|j�Xq>WdS)Ni�Qror�zW%drPT)rqrrrQr�rs�rbzfailed in timezone: %dzlocal vars: %sr1i�i�Qi�i���i`'i�:	iiж)r�r�r�r�Ztm_wdayr�rr.r�r�rurZtimezone�localsrBr7)	r2rvZtodayrsZwdayZdayrLrLrKr4r4r5�#test_compute_rollover_weekly_attimes8


z@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attimeN)rSrTrUrkrnrwr|r4r4r4r5r`�s*	r`cKstjf|�tjdd�S)NrP)rc)r�rd)r�r4r4r5rh5srhra�Mrb�H�DryrpZW0r�)ZdaysZhourscCsRtjj|j|dddd�}d}|j|�}||k�r:|dk�r:y�|jrNtj|�}n
tj|�}|d}|d}|d	}	tjj	|d
|d
|	}
||
}t
d||jftjd�t
d
|tjd�t
d|tjd�t
d|	tjd�t
d|
tjd�t
d|tjd�Wn0t
k
�r8t
dtj�dtjd�YnX|j||�|j�dS)NrPrT)rqrrrQr�grprNr�rrbz
t: %s (%s))ryzcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)rr.r�r�rur�r�r�Z	localtimeZ	_MIDNIGHTrr�rrr[rBr7)r2rq�exprLrvrKr+ZcurrentHourZ
currentMinuteZ
currentSecondr�r�r4r4r5�test_compute_rollover@s6



 r�ztest_compute_rollover_%sz>win32evtlog/win32evtlogutil/pywintypes required for this test.c@seZdZdd�ZdS)�NTEventLogHandlerTestcCs
d}tjd|�}tj|�}ytjjd�}Wn:tjk
rd}z|jdkrRt	j
d���WYdd}~XnXtjddi�}|j|�|j
�|j|tj|��tjtjB}d}d}	tj|||	�}
x4|
D],}|jdkr�q�tj||�}|d	kr�q�d
}Pq�Wd|	}|j||d�dS)
NZApplicationZtest_loggingrz#Insufficient privileges to run testr�zTest Log MessageFrzTest Log Message
Tz3Record not found in event log, went back %d records)r�)�win32evtlogZOpenEventLogZGetNumberOfEventLogRecordsrr.ZNTEventLogHandler�
pywintypesrlZwinerrorrZSkipTestr�r�r7Z
assertLessZEVENTLOG_BACKWARDS_READZEVENTLOG_SEQUENTIAL_READZReadEventLogZ
SourceName�win32evtlogutilZSafeFormatMessager1)r2ZlogtypeZelhZnum_recsr;rFr��flagsrfrgZeventsr�r4r4r5r^fs8





z NTEventLogHandlerTest.test_basicN)rSrTrUr^r4r4r4r5r�dsr�c@seZdZdd�ZdS)�MiscTestCasec
Cs2ddddddddd	d
ddd
h
}tj|t|d�dS)Nr�r�r�ZcurrentframerZStrFormatStylerLZFiltererZPlaceHolderraZ
RootLoggerr�r)�	blacklist)rZcheck__all__r)r2r�r4r4r5�test__all__�szMiscTestCase.test__all__N)rSrTrUr�r4r4r4r5r��sr��LC_ALLrc'Csvtttttttttt	t
ttt
ttttttttttttttttttt t!t"t#t$t%t&g'}t't(j)d�rh|j*t+�t,j-|�dS)Nr).rWr�r�r�r`rrr�r�r�r�r�rrZr�r�rrprirur�r�r�rr)rWrErHr�r�r�r�r�r�r�r`r�r�r�r�r�rr.r_r�rZrun_unittest)Ztestsr4r4r5�	test_main�s
r��__main__)N)rarP)r}rb�)r~r�i�Q)rr�i�Q)rpr�)�rVrZlogging.handlersZlogging.configr�rr�r�r�r#r�rBr�rvr�r=rr�r�r�Ztest.support.script_helperrr�rrsr�rr�r�rr,Zhttp.serverrrrZurllib.parserrZsocketserverrr	r
rr�r�r�r�rTZTestCaserrWr�ZSILENTr�ZTERSEZEFFUSIVEr�r�Z	TALKATIVEr�Z
CHATTERBOXZBORINGr�r�r�r�r�r�r�r�rfr
r(rrrrr0r9rHrNr�rTrVr	rWr`r*rprrr�r�r�r�r�r�r�ZIPV6_ENABLEDr�r�r�r�r�rrr
rrZrir}rorprur.r�Z
unittest.mockr�r�rdr�Ztzinfor�r�r�r�r�r�r�r�r�rr�r�r�r�r�rr)rBrErHr`rhrqr�r�r�r�r�Zrun_with_localer�rSr4r4r4r5�<module>s^
fFYP5) 1 NZ
A
D

M41(
0#?U
	Y'WW6OljTn!#



Youez - 2016 - github.com/yon3zu
LinuXploit