B
    2*™\Yš ã               @   sü  d dl Z d dlZ d dlZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm Z m!Z! d dl"Z"d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* yd dl+Z+d dl,Z,d dl-Z-W n" e.k
rn   d Z+ Z,Z-Y nX yd dl/Z/W n e.k
r’   Y nX G dd„ dej0ƒZ1G d	d
„ d
e1ƒZ2G dd„ de1ƒZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=e>e=e4d ƒZ?e4de5de6de7de8de9de:de;de<d e=d!i
Z@G d"d#„ d#e jAƒZBG d$d%„ d%e jAƒZCG d&d'„ d'e1ƒZDG d(d)„ d)e1ƒZEG d*d+„ d+eFƒZGG d,d-„ d-e jHƒZIG d.d/„ d/e1ƒZJG d0d1„ d1e"jKƒZLG d2d3„ d3eFƒZMG d4d5„ d5eMe ƒZNG d6d7„ d7eMe)ƒZOG d8d9„ d9eMe'ƒZPeQed:ƒr"G d;d<„ d<eOƒZRG d=d>„ d>ePƒZSG d?d@„ d@e1ƒZTG dAdB„ dBe1ƒZUG dCdD„ dDe jVƒZWG dEdF„ dFe1ƒZXG dGdH„ dHe1ƒZYdIdJ„ ZZe [eQed:ƒdK¡G dLdM„ dMeYƒƒZ\G dNdO„ dOe1ƒZ]e [eQed:ƒdK¡G dPdQ„ dQe]ƒƒZ^G dRdS„ dSe1ƒZ_e [eQed:ƒdK¡G dTdU„ dUe_ƒƒZ`e [ejadV¡G dWdX„ dXe_ƒƒZbG dYdZ„ dZe1ƒZcG d[d\„ d\e1ƒZdG d]d^„ d^e1ƒZeG d_d`„ d`e1ƒZfd³dadb„Zgdcdd„ ZhG dedf„ dfe jHƒZiG dgdh„ dhe1ƒZjG didj„ dje1ƒZkG dkdl„ dle1ƒZlG dmdn„ dne jmƒZnG dodp„ dpe1ƒZoG dqdr„ dre1ƒZpeQe jqdsƒrd dlrZrd dtlsmtZt G dudv„ dve1ƒZue vd ¡ZwG dwdx„ dxejxƒZyeyƒ ZzG dydz„ dzej0ƒZ{G d{d|„ d|e j|ƒZ}G d}d~„ d~ej0ƒZ~G dd€„ d€e1ƒZG dd‚„ d‚e1ƒZ€G dƒd„„ d„ƒZG d…d†„ d†e j‚ƒZƒG d‡dˆ„ dˆe1ƒZ„G d‰dŠ„ dŠe1ƒZ…G d‹dŒ„ dŒe1ƒZ†G ddŽ„ dŽej0ƒZ‡G dd„ dej0ƒZˆG d‘d’„ d’e1ƒZ‰G d“d”„ d”e1ƒZŠG d•d–„ d–eŠƒZ‹G d—d˜„ d˜eŠƒZŒG d™dš„ dšeŠƒZd›dœ„ ZŽxHddždŸd d¡d¢eŽd£d¤d¥ffD ](\ZZeefd¦d§„Z‘e’ed¨e e‘ƒ qzW e [e+d©¡G dªd«„ d«e1ƒƒZ“G d¬d­„ d­ej0ƒZ”e •d®d¯¡d°d±„ ƒZ–e—d²krøe–ƒ  dS )´é    N)Úassert_python_ok)Úsupport)Ú
HTTPServerÚBaseHTTPRequestHandler)ÚurlparseÚparse_qs)ÚThreadingUDPServerÚDatagramRequestHandlerÚThreadingTCPServerÚStreamRequestHandlerc               @   s:   e Zd ZdZdZdZdd„ Zdd„ Zdd	d
„Zdd„ Z	dS )ÚBaseTestz&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$r   c             C   s  t  ¡ | _t ¡ jj}t ¡  zrtj 	¡ | _
tjd d … | _| 	¡  | _}tj 	¡ | _tj 	¡ | _i  | _}x |D ]}t|| dd ƒ||< qrW W d t ¡  X t d¡| _t d¡| _t d¡| _| j ¡ | _t ¡ | _| j tj¡ t | j¡| _ t !| j"¡| _#| j  $| j#¡ | j %¡ r6| jj&| jj& }t'd| ƒ‚| j %¡ r^| jj&| jj& }t'd| ƒ‚| j (| j ¡ |  )| j %¡ ¡ |  )| j %¡ ¡ d S )NÚdisabledu   Â«Ã—Â»u   Ä¿Ã–GÚ zUnexpected handlers: %s)*r   Zthreading_setupÚ_threading_keyÚloggingÚ	getLoggerÚmanagerÚ
loggerDictÚ_acquireLockÚ	_handlersÚcopyÚsaved_handlersÚ_handlerListÚsaved_handler_listÚsaved_loggersÚ_nameToLevelÚsaved_name_to_levelÚ_levelToNameÚsaved_level_to_nameÚlogger_statesÚgetattrÚ_releaseLockÚlogger1Úlogger2Úroot_loggerÚgetEffectiveLevelÚoriginal_logging_levelÚioÚStringIOÚstreamÚsetLevelÚDEBUGÚStreamHandlerÚ	root_hdlrÚ	FormatterÚ
log_formatZroot_formatterÚsetFormatterÚhasHandlersÚhandlersÚAssertionErrorÚ
addHandlerÚ
assertTrue)ÚselfZlogger_dictr   r   ÚnameZhlist© r8   ú<C:\ALexclude\prg\programme\Python37\Lib\test\test_logging.pyÚsetUpM   s@    




zBaseTest.setUpc             C   s8  | j  ¡  | j | j¡ x,| jjrD| jjd }| j |¡ | ¡  qW | j | j¡ t 	¡  z¸tj
 ¡  tj
 | j¡ tj ¡  tj | j¡ tj ¡  tj | j¡ | jtjd d …< t ¡ j}d|_|j}| ¡  | | j¡ | j}x*| jD ] }|| d k	rî|| | j| _qîW W d t ¡  X |  ¡  tj| jŽ  d S )Nr   ) r)   Úcloser$   ÚremoveHandlerr-   r2   r*   r&   r   r   r   ÚclearÚupdater   r   r   r   r   r   r   r   r   Údisabler   r   r   r   r!   Z
doCleanupsr   Zthreading_cleanupr   )r6   Úhr   r   r   r7   r8   r8   r9   ÚtearDownw   s8    






zBaseTest.tearDownNc       	      C   s    |p| j }t |p| j¡}| ¡  ¡ }|  t|ƒt|ƒ¡ xFt||ƒD ]8\}}| 	|¡}|sj|  
d| ¡ |  t| ¡ ƒ|¡ qFW | ¡ }|rœ|  
d| ¡ d S )Nz*Log line does not match expected pattern:
z'Remaining output at end of log stream:
)r)   ÚreÚcompileÚexpected_log_patÚgetvalueÚ
splitlinesÚassertEqualÚlenÚzipÚsearchÚfailÚtupleÚgroupsÚread)	r6   Zexpected_valuesr)   ÚpatZactual_linesÚactualÚexpectedÚmatchÚsr8   r8   r9   Úassert_log_lines™   s    

zBaseTest.assert_log_linesc             C   s   |  j d7  _ d| j  S )Né   z%d)Úmessage_num)r6   r8   r8   r9   Únext_message«   s    zBaseTest.next_message)NN)
Ú__name__Ú
__module__Ú__qualname__r/   rD   rV   r:   rA   rT   rW   r8   r8   r8   r9   r   E   s   *"
r   c               @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ ZdS )ÚBuiltinLevelsTestc             C   s4  | j }t d¡}| tj¡ t t d¡i ¡}| tj¡ t d¡}| tj¡ | tj	|ƒ ¡ | 
|ƒ ¡ | tj	|ƒ ¡ | 
|ƒ ¡ | |ƒ ¡ | |ƒ ¡ | tj	|ƒ ¡ | 
|ƒ ¡ | |ƒ ¡ | |ƒ ¡ | |ƒ ¡ | |ƒ ¡ | |ƒ ¡ | |ƒ ¡ | |ƒ ¡ |  dddddd	d
ddddg¡ d S )NÚERRÚINFÚDEB)r\   ÚCRITICALÚ1)r\   ÚERRORÚ2)r]   r_   Ú3)r]   ra   Ú4)r]   ÚWARNINGÚ5)r]   ÚINFOÚ6)r^   r_   Ú7)r^   ra   Ú8)r^   re   Ú9)r^   rg   Ú10)r^   r+   Ú11)rW   r   r   r*   ra   ÚLoggerAdapterrg   r+   Úlogr_   ÚerrorÚwarningÚinfoÚdebugrT   )r6   Úmr\   r]   r^   r8   r8   r9   Ú	test_flatµ   sD    

zBuiltinLevelsTest.test_flatc             C   s„   | j }t d¡}| tj¡ t d¡}| tj¡ | tj|ƒ ¡ | |ƒ ¡ | 	|ƒ ¡ | 
|ƒ ¡ | |ƒ ¡ |  ddg¡ d S )Nr]   zINF.ERR)zINF.ERRr_   r`   )zINF.ERRra   rb   )rW   r   r   r*   rg   ra   ro   r_   rp   rq   rr   rs   rT   )r6   rt   r]   ÚINF_ERRr8   r8   r9   Útest_nested_explicitä   s    

z&BuiltinLevelsTest.test_nested_explicitc             C   sê   | j }t d¡}| tj¡ t d¡}| tj¡ t d¡}t d¡}t d¡}| tj|ƒ ¡ | |ƒ ¡ | 	|ƒ ¡ | 
|ƒ ¡ | tj|ƒ ¡ | |ƒ ¡ | |ƒ ¡ | 	|ƒ ¡ | 
|ƒ ¡ | |ƒ ¡ |  dddd	d
dg¡ d S )Nr]   zINF.ERRz	INF.UNDEFzINF.ERR.UNDEFÚUNDEF)z	INF.UNDEFr_   r`   )z	INF.UNDEFra   rb   )z	INF.UNDEFre   rc   )z	INF.UNDEFrg   rd   )zINF.ERR.UNDEFr_   rf   )zINF.ERR.UNDEFra   rh   )rW   r   r   r*   rg   ra   ro   r_   rp   rq   rr   rs   rT   )r6   rt   r]   rv   Z	INF_UNDEFZINF_ERR_UNDEFrx   r8   r8   r9   Útest_nested_inheritedû   s2    




z'BuiltinLevelsTest.test_nested_inheritedc             C   s–   | j }t d¡}t d¡}t d¡}| tj¡ | tj|ƒ ¡ | |ƒ ¡ | tj|ƒ ¡ | |ƒ ¡ | |ƒ ¡ | |ƒ ¡ |  	ddddg¡ d S )Nr]   zINF.BADPARENT.UNDEFzINF.BADPARENT)zINF.BADPARENT.UNDEFr_   r`   )zINF.BADPARENT.UNDEFrg   rb   )zINF.BADPARENTr_   rc   )zINF.BADPARENTrg   rd   )
rW   r   r   r*   rg   ro   ÚFATALrr   rs   rT   )r6   rt   r]   Z
GRANDCHILDZCHILDr8   r8   r9   Útest_nested_with_virtual_parent  s     


z1BuiltinLevelsTest.test_nested_with_virtual_parentc             C   s,   |   t d¡tj¡ |   t tj¡d¡ d S )Nrg   )rG   r   ÚgetLevelNamerg   )r6   r8   r8   r9   Útest_regression_223868  s    z'BuiltinLevelsTest.test_regression_22386c             C   s8   t  t jd¡ |  t jt jd¡ |  t  t j¡d¡ d S )Nr   rg   )r   ÚaddLevelNamerg   Ú
addCleanuprG   r|   )r6   r8   r8   r9   Útest_regression_29220=  s    z'BuiltinLevelsTest.test_regression_29220c             C   s   t  d¡}|  |t j¡ d S )Nrz   )r   r|   rG   rz   )r6   Zfatalr8   r8   r9   Útest_issue27935C  s    
z!BuiltinLevelsTest.test_issue27935c             C   s`   t  t jd¡ |  t jt jd¡ |  t  t j¡d¡ |  t  t j¡d¡ |  t  d¡t j¡ d S )Nr   rg   ÚNOTSET)r   r~   rg   r   rG   r|   r‚   )r6   r8   r8   r9   r€   G  s
    N)
rX   rY   rZ   ru   rw   ry   r{   r}   r€   r   r8   r8   r8   r9   r[   ²   s   /#r[   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBasicFilterTestc          	   C   s¤   t  d¡}| jjd }z|| |¡ t  d¡}t  d¡}t  d¡}t  d¡}| |  ¡ ¡ | |  ¡ ¡ | |  ¡ ¡ | |  ¡ ¡ |  ddg¡ W d | 	|¡ X d S )Nz	spam.eggsr   Úspamzspam.eggs.fishzspam.bakedbeans)z	spam.eggsrg   rb   )zspam.eggs.fishrg   rc   )
r   ÚFilterr$   r2   Ú	addFilterr   rr   rW   rT   ÚremoveFilter)r6   Zfilter_Úhandlerr„   Ú	spam_eggsÚspam_eggs_fishÚspam_bakedbeansr8   r8   r9   Útest_filterS  s     





zBasicFilterTest.test_filterc          	   C   s¢   dd„ }| j jd }z|| |¡ t d¡}t d¡}t d¡}t d¡}| |  ¡ ¡ | |  ¡ ¡ | |  ¡ ¡ | |  ¡ ¡ |  dd	g¡ W d | |¡ X d S )
Nc             S   s&   | j  d¡}d |d d… ¡}|dkS )NÚ.é   z	spam.eggs)r7   ÚsplitÚjoin)ÚrecordÚpartsÚprefixr8   r8   r9   Ú
filterfunco  s    z8BasicFilterTest.test_callable_filter.<locals>.filterfuncr   r„   z	spam.eggszspam.eggs.fishzspam.bakedbeans)z	spam.eggsrg   rb   )zspam.eggs.fishrg   rc   )	r$   r2   r†   r   r   rr   rW   rT   r‡   )r6   r”   rˆ   r„   r‰   rŠ   r‹   r8   r8   r9   Útest_callable_filterk  s     




z$BasicFilterTest.test_callable_filterc             C   s*   t  ¡ }t  ddi¡}|  | |¡¡ d S )Nr7   z	spam.eggs)r   r…   ÚmakeLogRecordr5   Úfilter)r6   ÚfÚrr8   r8   r9   Útest_empty_filterˆ  s    z!BasicFilterTest.test_empty_filterN)rX   rY   rZ   rŒ   r•   rš   r8   r8   r8   r9   rƒ   O  s   rƒ   éx   éw   év   éu   ét   és   ér   éq   ép   éo   rU   ÚSilentÚTaciturnÚTerseÚEffusiveÚSociableÚVerboseÚ	TalkativeZ	GarrulousÚ
ChatterboxÚBoringc               @   s   e Zd Zdd„ ZdS )ÚGarrulousFilterc             C   s
   |j tkS )N)ÚlevelnoÚ	GARRULOUS)r6   r‘   r8   r8   r9   r—   ·  s    zGarrulousFilter.filterN)rX   rY   rZ   r—   r8   r8   r8   r9   r®   ³  s   r®   c               @   s   e Zd Zdd„ ZdS )ÚVerySpecificFilterc             C   s   |j ttgkS )N)r¯   ÚSOCIABLEÚTACITURN)r6   r‘   r8   r8   r9   r—   ¾  s    zVerySpecificFilter.filterN)rX   rY   rZ   r—   r8   r8   r8   r9   r±   º  s   r±   c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚCustomLevelsAndFiltersTestz^[\w.]+ -> (\w+): (\d+)$c             C   s0   t  | ¡ x t ¡ D ]\}}t ||¡ qW d S )N)r   r:   Úmy_logging_levelsÚitemsr   r~   )r6   ÚkÚvr8   r8   r9   r:   É  s    
z CustomLevelsAndFiltersTest.setUpc             C   s"   xt D ]}| ||  ¡ ¡ qW d S )N)ÚLEVEL_RANGEro   rW   )r6   ÚloggerZlvlr8   r8   r9   Úlog_at_all_levelsÎ  s    
z,CustomLevelsAndFiltersTest.log_at_all_levelsc             C   s2   | j  t¡ |  | j ¡ |  ddddddg¡ d S )N)rª   rf   )r©   rh   )r¨   ri   )r§   rj   )r¦   rk   )r¥   rl   )r$   r*   ÚVERBOSEr»   rT   )r6   r8   r8   r9   Útest_logger_filterÒ  s    z-CustomLevelsAndFiltersTest.test_logger_filterc          	   C   sR   | j jd  t¡ z$|  | j ¡ |  dddddg¡ W d | j jd  tj¡ X d S )Nr   )r©   rh   )r¨   ri   )r§   rj   )r¦   rk   )r¥   rl   )r$   r2   r*   r²   r»   rT   r   r‚   )r6   r8   r8   r9   Útest_handler_filterà  s    z.CustomLevelsAndFiltersTest.test_handler_filterc          
   C   s¬   | j jd }d }tƒ }| |¡ zj|  | j ¡ dddddddd	d
g	}|  |¡ tƒ }| j  |¡ |  | j ¡ |  |dddddddg ¡ W d |rœ| j  |¡ | |¡ X d S )Nr   )r­   r`   )r¬   rb   )r«   rd   )rª   rf   )r©   rh   )r¨   ri   )r§   rj   )r¦   rk   )r¥   rl   )r­   rm   )r¬   Z12)r«   Z14)rª   Z15)r¨   Z17)r§   Z18)r¥   Z20)r$   r2   r®   r†   r»   rT   r±   r‡   )r6   rˆ   Zspecific_filterZgarrZfirst_linesr8   r8   r9   Útest_specific_filtersð  s<    

z0CustomLevelsAndFiltersTest.test_specific_filtersN)	rX   rY   rZ   rD   r:   r»   r½   r¾   r¿   r8   r8   r8   r9   r´   Â  s   r´   c               @   sZ   e Zd Zdd„ Zdd„ Zdd„ Ze ej	dkd¡d	d
„ ƒZ
e eedƒ d¡dd„ ƒZdS )ÚHandlerTestc             C   sD   t  ¡ }d|_|  |jd¡ d|_|  |jd¡ |  t|jd ¡ d S )NÚgenericZanothergeneric)r   ÚHandlerr7   rG   ÚassertRaisesÚNotImplementedErrorÚemit)r6   r@   r8   r8   r9   Ú	test_name  s    zHandlerTest.test_namec       
      C   sþ  t jdkr^xîdD ]æ}t ¡ \}}t |¡ |s:t |¡ tjj	|dd}|rÆ|j
|j }}|  |d¡ |  |d¡ t ddi¡}| |¡ t |¡ |  tj |¡¡ | |¡ |  tj |¡¡ n|  |j
d¡ |  |jd¡ | ¡  |rt |¡ qW t jdkrd	}nd
}y4tj |¡}|  |j|j¡ |  |j¡ | ¡  W n tk
r\   Y nX xHdD ]@}	|	dkrŠ|  ttjjdd|	¡ ntj dd|	¡}| ¡  qdW tj d¡}t i ¡}|  | |¡¡ | ¡  tj d¡}|  | |¡¡ | ¡  d S )N)ÚlinuxÚdarwin)TFT)ÚdelayéÿÿÿÿÚmsgZTestrÈ   z/var/run/syslogz/dev/log)ÚGETÚPOSTÚPUTrÎ   Ú	localhostz/logr   rU   )ÚsysÚplatformÚtempfileÚmkstempÚosr;   Úunlinkr   r2   ÚWatchedFileHandlerÚdevÚinorG   r–   ÚhandleÚassertFalseÚpathÚexistsr5   ÚSysLogHandlerZfacilityZLOG_USERZ
unixsocketÚOSErrorrÃ   Ú
ValueErrorÚHTTPHandlerZBufferingHandlerZshouldFlush)
r6   ZexistingÚfdÚfnr@   r×   rØ   r™   ZsocknameÚmethodr8   r8   r9   Útest_builtin_handlers$  sZ    








z!HandlerTest.test_builtin_handlersc             C   s¸   t  ¡ \}}t |¡ t |¡ t |¡}tj|dfftj	j
|dfftj	j|dfff}tjdkrv|tj	j|dfff7 }x<|D ]4\}}||Ž }|  tj |¡¡ | ¡  t |¡ q|W d S )NÚwÚar@   )rÇ   rÈ   )rÒ   rÓ   rÔ   r;   rÕ   ÚpathlibZPathr   ÚFileHandlerr2   ÚRotatingFileHandlerÚTimedRotatingFileHandlerrÐ   rÑ   rÖ   r5   rÛ   rÜ   )r6   rá   râ   ZpfnZcasesÚclsÚargsr@   r8   r8   r9   Útest_path_objectsZ  s    



zHandlerTest.test_path_objectsÚntz/WatchedFileHandler not appropriate for Windows.c          
      s2  ‡ fdd„}d}d}d ˆ _ d ˆ _x
dD ] }t dd¡\}}t |¡ tj|||fd}d|_| 	¡  t
jj||d	}t
 d
¡}	| |	¡ zrxlt|ƒD ]`}
t d¡ t
 ddi¡}yt ¡ ˆ _ | |¡ W q˜ tk
rö   tdˆ jˆ j f ƒ ‚ Y q˜X q˜W W d | ¡  | ¡  tj |¡r(t |¡ X q(W d S )Nc          	      sZ   xTt |ƒD ]H}yt | ¡ t ¡ ˆ _W n tk
r:   Y nX t dt dd¡ ¡ q
W d S )Ngü©ñÒMbp?r   é   )	ÚrangerÔ   rÕ   ÚtimeÚdeletion_timerÞ   ÚsleepÚrandomZrandint)ZfnameZtriesÚ_)r6   r8   r9   Úremove_loopt  s    
z*HandlerTest.test_race.<locals>.remove_loopiô  )FTz.logztest_logging-3-)Útargetrì   T)rÉ   z'%(asctime)s: %(levelname)s: %(message)sg{®Gázt?rË   ZtestingzDeleted at %s, opened at %s)Zhandle_timerò   rÒ   rÓ   rÔ   r;   Ú	threadingÚThreadZdaemonÚstartr   r2   rÖ   r.   r0   rð   rñ   ró   r–   rÙ   Ú	ExceptionÚprintr   rÛ   rÜ   rÕ   )r6   rö   Z	del_countZ	log_countrÉ   rá   râ   Zremoverr@   r˜   rõ   r™   r8   )r6   r9   Ú	test_raceq  s<    	




zHandlerTest.test_raceÚforkzTest requires os.fork().c                s   t  ¡ ‰dˆ_|  tt jƒd¡ t ¡ ‰t ¡ ‰ ‡ ‡‡fdd„}tj|dd}| 	¡  ˆ 
¡  t ¡ }|dkr„t  d¡ t d¡ n˜ˆ  ¡  | ¡  t ¡ }x<t |tj¡\}}||krºP t ¡ | dkrÌP t d	¡ qžW ||krt |tj¡ t |d¡\}}|  d
¡ | j|ddd d S )Nz*because we need at least one for this testr   c                  sF   t  ¡  z.ˆ ¡  zˆ ¡  ˆ  d¡ W d ˆ ¡  X W d t  ¡  X d S )Ng      à?)r   r   ÚacquireÚsetÚwaitÚreleaser!   r8   )Ú+fork_happened__release_locks_and_end_threadÚlocks_held__ready_to_forkÚrefed_hr8   r9   Úlock_holder_thread_fn¬  s    zKHandlerTest.test_post_fork_child_no_deadlock.<locals>.lock_holder_thread_fnz,test_post_fork_child_no_deadlock lock holder)r÷   r7   z#Child process did not deadlock. \o/é   gš™™™™™©?zchild process deadlocked.zchild process error)rË   )r   rÂ   r7   ÚassertGreaterrH   r   rø   ÚEventrù   rú   r  rÔ   rþ   rp   Ú_exitr   r   rñ   Z	monotonicÚwaitpidZWNOHANGró   ÚkillÚsignalZSIGKILLrK   rG   )r6   r  Zlock_holder_threadZpidZ
start_timeZ
waited_pidÚstatusr8   )r  r  r  r9   Ú test_post_fork_child_no_deadlock¢  s<    


z,HandlerTest.test_post_fork_child_no_deadlockN)rX   rY   rZ   rÆ   rä   rí   ÚunittestZskipIfrÔ   r7   rý   Úhasattrr  r8   r8   r8   r9   rÀ     s
   61rÀ   c               @   s   e Zd Zdd„ ZdS )Ú	BadStreamc             C   s   t dƒ‚d S )Nzdeliberate mistake)ÚRuntimeError)r6   Údatar8   r8   r9   Úwriteâ  s    zBadStream.writeN)rX   rY   rZ   r  r8   r8   r8   r9   r  á  s   r  c               @   s   e Zd Zdd„ ZdS )ÚTestStreamHandlerc             C   s
   || _ d S )N)Úerror_record)r6   r‘   r8   r8   r9   ÚhandleErroræ  s    zTestStreamHandler.handleErrorN)rX   rY   rZ   r  r8   r8   r8   r9   r  å  s   r  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚStreamHandlerTestc          	   C   s¶   t tƒ ƒ}t i ¡}tj}zŽ| |¡ |  |j|¡ t tƒ ¡}t	 
¡ $}| |¡ d}|  || ¡ ¡ W d Q R X dt_t	 
¡  }| |¡ |  d| ¡ ¡ W d Q R X W d |t_X d S )Nz"
RuntimeError: deliberate mistake
Fr   )r  r  r   r–   ÚraiseExceptionsrÙ   ÚassertIsr  r,   r   Úcaptured_stderrÚassertInrE   rG   )r6   r@   r™   Z	old_raiseÚstderrrË   r8   r8   r9   Útest_error_handlingê  s     






z%StreamHandlerTest.test_error_handlingc             C   sV   t  ¡ }t ¡ }| |¡}|  |tj¡ | |¡}|  ||¡ | |¡}|  |¡ d S )N)	r   r,   r'   r(   Z	setStreamr  rÐ   r  ÚassertIsNone)r6   r@   r)   ÚoldrP   r8   r8   r9   Útest_stream_setting   s    


z%StreamHandlerTest.test_stream_settingN)rX   rY   rZ   r  r"  r8   r8   r8   r9   r  é  s   r  c               @   s6   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zd	S )ÚTestSMTPServerc             C   s<   t jj| |d |dd | j ¡ d | _|| _d | _|| _d S )NT)ÚmapZdecode_datarU   )	ÚsmtpdÚ
SMTPServerÚ__init__ÚsocketÚgetsocknameÚportÚ_handlerÚ_threadÚpoll_interval)r6   Úaddrrˆ   r-  Úsockmapr8   r8   r9   r'  &  s    zTestSMTPServer.__init__c             C   s   |   ||||¡ d S )N)r+  )r6   ÚpeerÚmailfromÚrcpttosr  r8   r8   r9   Úprocess_message.  s    
zTestSMTPServer.process_messagec             C   s0   t j| j| jfd | _}| d¡ | ¡  d S )N)r÷   rì   T)rø   rù   Úserve_foreverr-  r,  Ú	setDaemonrú   )r6   Útr8   r8   r9   rú   :  s    
zTestSMTPServer.startc             C   s   t j|| jd d S )N)r$  )ÚasyncoreZloopÚ_map)r6   r-  r8   r8   r9   r4  C  s    zTestSMTPServer.serve_foreverNc             C   s0   |   ¡  t | j|¡ d | _tj| jdd d S )NT)r$  Z
ignore_all)r;   r   Újoin_threadr,  r7  Z	close_allr8  )r6   Útimeoutr8   r8   r9   ÚstopM  s    zTestSMTPServer.stop)N)rX   rY   rZ   r'  r3  rú   r4  r;  r8   r8   r8   r9   r#    s
   	
r#  c                   s6   e Zd Zdd„ Zdd„ Z‡ fdd„Zd
dd	„Z‡  ZS )ÚControlMixinc             C   s    d | _ || _|| _t ¡ | _d S )N)r,  r-  r+  rø   r	  Úready)r6   rˆ   r-  r8   r8   r9   r'  k  s    zControlMixin.__init__c             C   s0   t j| j| jfd | _}| d¡ | ¡  d S )N)r÷   rì   T)rø   rù   r4  r-  r,  r5  rú   )r6   r6  r8   r8   r9   rú   q  s    
zControlMixin.startc                s   | j  ¡  tt| ƒ |¡ d S )N)r=  r   Úsuperr<  r4  )r6   r-  )Ú	__class__r8   r9   r4  z  s    
zControlMixin.serve_foreverNc             C   s<   |   ¡  | jd k	r&t | j|¡ d | _|  ¡  | j ¡  d S )N)Úshutdownr,  r   r9  Úserver_closer=  r=   )r6   r:  r8   r8   r9   r;  ‚  s    
zControlMixin.stop)N)rX   rY   rZ   r'  rú   r4  r;  Ú__classcell__r8   r8   )r?  r9   r<  [  s   	r<  c               @   s   e Zd Zddd„Zdd„ ZdS )	ÚTestHTTPServerç      à?FNc                s<   G ‡ ‡fdd„dt ƒ‰ t | |ˆ ¡ t | ||¡ || _d S )Nc                   s2   e Zd Zddd„Zdd„ Z‡‡ ‡fdd„Z‡  ZS )	z=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandlerNc             S   s   |  d¡r| jS t|ƒ‚d S )NZdo_)Ú
startswithÚprocess_requestÚAttributeError)r6   r7   Údefaultr8   r8   r9   Ú__getattr__ž  s    
zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__c             S   s   | j  | ¡ d S )N)Úserverr+  )r6   r8   r8   r9   rF  £  s    zMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_requestc                s   ˆrt ˆ | ƒj|f|žŽ  d S )N)r>  Úlog_message)r6   Úformatrì   )ÚDelegatingHTTPRequestHandlerr?  ro   r8   r9   rK  ¦  s    zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message)N)rX   rY   rZ   rI  rF  rK  rB  r8   )rM  ro   )r?  r9   rM    s   
rM  )r   r   r'  r<  Ússlctx)r6   r.  rˆ   r-  ro   rN  r8   )rM  ro   r9   r'  ›  s    zTestHTTPServer.__init__c          
   C   sf   y(| j  ¡ \}}| jr&| jj|dd}W n4 tk
r\ } ztj d| ¡ ‚ W d d }~X Y nX ||fS )NT)Zserver_sidezGot an error:
%s
)r(  ZacceptrN  Zwrap_socketrÞ   rÐ   r  r  )r6   Úsockr.  Úer8   r8   r9   Úget_request®  s    zTestHTTPServer.get_request)rD  FN)rX   rY   rZ   r'  rQ  r8   r8   r8   r9   rC    s    
rC  c                   s*   e Zd ZdZddd„Z‡ fdd„Z‡  ZS )ÚTestTCPServerTç      à?c             C   s2   G dd„ dt ƒ}t | |||¡ t | ||¡ d S )Nc               @   s   e Zd Zdd„ ZdS )z;TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlerc             S   s   | j  | ¡ d S )N)rJ  r+  )r6   r8   r8   r9   rÙ   Î  s    zBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handleN)rX   rY   rZ   rÙ   r8   r8   r8   r9   ÚDelegatingTCPRequestHandlerÌ  s   rT  )r   r
   r'  r<  )r6   r.  rˆ   r-  Úbind_and_activaterT  r8   r8   r9   r'  Ê  s    
zTestTCPServer.__init__c                s"   t t| ƒ ¡  | j ¡ d | _d S )NrU   )r>  rR  Úserver_bindr(  r)  r*  )r6   )r?  r8   r9   rV  Ô  s    zTestTCPServer.server_bind)rS  T)rX   rY   rZ   Zallow_reuse_addressr'  rV  rB  r8   r8   )r?  r9   rR  ¹  s    
	rR  c                   s2   e Zd Zd	dd„Z‡ fdd„Z‡ fdd„Z‡  ZS )
ÚTestUDPServerç      à?Tc                s<   G ‡ fdd„dt ƒ‰ t | |ˆ |¡ t | ||¡ d| _d S )Nc                   s&   e Zd Zdd„ Z‡‡ fdd„Z‡  ZS )z;TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlerc             S   s   | j  | ¡ d S )N)rJ  r+  )r6   r8   r8   r9   rÙ   í  s    zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handlec                sD   | j  ¡ }|r@ytˆ | ƒ ¡  W n tk
r>   | jjs:‚ Y nX d S )N)ZwfilerE   r>  ÚfinishrÞ   rJ  Ú_closed)r6   r  )ÚDelegatingUDPRequestHandlerr?  r8   r9   rY  ð  s    
zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finish)rX   rY   rZ   rÙ   rY  rB  r8   )r[  )r?  r9   r[  ë  s   r[  F)r	   r   r'  r<  rZ  )r6   r.  rˆ   r-  rU  r8   )r[  r9   r'  é  s    zTestUDPServer.__init__c                s"   t t| ƒ ¡  | j ¡ d | _d S )NrU   )r>  rW  rV  r(  r)  r*  )r6   )r?  r8   r9   rV  ÿ  s    zTestUDPServer.server_bindc                s   t t| ƒ ¡  d| _d S )NT)r>  rW  rA  rZ  )r6   )r?  r8   r9   rA    s    zTestUDPServer.server_close)rX  T)rX   rY   rZ   r'  rV  rA  rB  r8   r8   )r?  r9   rW  Ø  s    
rW  ÚAF_UNIXc               @   s   e Zd ZejZdS )ÚTestUnixStreamServerN)rX   rY   rZ   r(  r\  Úaddress_familyr8   r8   r8   r9   r]    s   r]  c               @   s   e Zd ZejZdS )ÚTestUnixDatagramServerN)rX   rY   rZ   r(  r\  r^  r8   r8   r8   r9   r_    s   r_  c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚSMTPHandlerTestg      N@c       
      C   s
  i }t tjdf| jd|ƒ}| ¡  tj|jf}tjj|ddd| j	d}|  
|jdg¡ g | _t ddi¡}t ¡ | _| |¡ | j | j	¡ | ¡  |  | j ¡ ¡ |  
t| jƒd	¡ | jd \}}}}	|  
|d¡ |  
|dg¡ |  d
|	¡ |  |	 d¡¡ | ¡  d S )Nr   gü©ñÒMbP?ÚmeZyouZLog)r:  rË   u	   Hello âœ“rU   z
Subject: Log
u   

Hello âœ“)r#  r   ZHOSTr3  rú   r*  r   r2   ZSMTPHandlerÚTIMEOUTrG   ZtoaddrsÚmessagesr–   rø   r	  ÚhandledrÙ   r  r;  r5   Zis_setrH   r  Úendswithr;   )
r6   r/  rJ  r.  r@   r™   r0  r1  r2  r  r8   r8   r9   Ú
test_basic  s,    


zSMTPHandlerTest.test_basicc             G   s   | j  |¡ | j ¡  d S )N)rc  Úappendrd  r   )r6   rì   r8   r8   r9   r3  ,  s    zSMTPHandlerTest.process_messageN)rX   rY   rZ   rb  rf  r3  r8   r8   r8   r9   r`    s   r`  c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚMemoryHandlerTestz^[\w.]+ -> (\w+): (\d+)$c             C   sF   t  | ¡ tj dtj| j¡| _t d¡| _	d| j	_
| j	 | j¡ d S )Né
   Zmemr   )r   r:   r   r2   ÚMemoryHandlerre   r-   Úmem_hdlrr   Ú
mem_loggerÚ	propagater4   )r6   r8   r8   r9   r:   7  s    

zMemoryHandlerTest.setUpc             C   s   | j  ¡  t | ¡ d S )N)rk  r;   r   rA   )r6   r8   r8   r9   rA   ?  s    
zMemoryHandlerTest.tearDownc             C   sæ   | j  |  ¡ ¡ |  g ¡ | j  |  ¡ ¡ |  g ¡ | j  |  ¡ ¡ dddg}|  |¡ xndD ]f}x tdƒD ]}| j  |  ¡ ¡ qlW |  |¡ | j  |  ¡ ¡ |dd„ t||d ƒD ƒ }|  |¡ q^W | j  |  ¡ ¡ |  |¡ d S )	N)r+   r`   )rg   rb   )re   rc   )rï   é   é	   c             S   s   g | ]}d t |ƒf‘qS )r+   )Ústr)Ú.0Úir8   r8   r9   ú
<listcomp>Y  s    z0MemoryHandlerTest.test_flush.<locals>.<listcomp>ri  )rl  rs   rW   rT   rr   rq   rð   )r6   ÚlinesÚnrr  r8   r8   r9   Ú
test_flushC  s$    




zMemoryHandlerTest.test_flushc             C   sÞ   | j  |  ¡ ¡ |  g ¡ | j  |  ¡ ¡ |  g ¡ | j  | j¡ | j ¡  ddg}|  |¡ tj	 
dtj| jd¡| _| j  | j¡ | j  |  ¡ ¡ |  |¡ | j  |  ¡ ¡ |  |¡ | j  | j¡ | j ¡  |  |¡ d S )N)r+   r`   )rg   rb   ri  F)rl  rs   rW   rT   rr   r<   rk  r;   r   r2   rj  re   r-   r4   )r6   rt  r8   r8   r9   Útest_flush_on_close_  s(    






z%MemoryHandlerTest.test_flush_on_closeN)rX   rY   rZ   rD   r:   rA   rv  rw  r8   r8   r8   r9   rh  0  s
   rh  c               @   s   e Zd Zdd„ ZdS )ÚExceptionFormatterc             C   s   d|d j  S )Nz
Got a [%s]r   )rX   )r6   Zeir8   r8   r9   ÚformatException€  s    z"ExceptionFormatter.formatExceptionN)rX   rY   rZ   ry  r8   r8   r8   r9   rx  ~  s   rx  c               @   sÎ   e Zd ZejZdZdZdZdZe 	dd¡Z
e 	dd¡Zd	e  d
 Ze 	dd¡ZdZdZdZdZdd„ Zdd„ Zdd„ Zefdd„Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+S ),ÚConfigFileTestz^(\w+) \+\+ (\w+)$aN  
    [loggers]
    keys=root

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=

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

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

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

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

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    z
sys.stdoutz
sys.stboutzformatter=form1zformatter=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=
    zclass=StreamHandlerzclass=logging.StreamHandlerag  
    [loggers]
    keys=root,parser

    [handlers]
    keys=hand1, hand2

    [formatters]
    keys=form1, form2

    [logger_root]
    level=WARNING
    handlers=

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

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

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

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

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

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

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

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    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=
    c             K   s$   t  t |¡¡}tjj|f|Ž d S )N)r'   r(   ÚtextwrapÚdedentr   ÚconfigÚ
fileConfig)r6   ÚconfÚkwargsÚfiler8   r8   r9   Úapply_configƒ  s    zConfigFileTest.apply_configc          	   C   sb   t  ¡ P}|  | j¡ t ¡ }| |  ¡ ¡ | |  ¡ ¡ | j	dg|d |  	g ¡ W d Q R X d S )N)ra   rb   )r)   )
r   Úcaptured_stdoutr‚  Úconfig0r   r   rr   rW   rp   rT   )r6   Úoutputrº   r8   r8   r9   Útest_config0_ok‡  s    
zConfigFileTest.test_config0_okc          	   C   s†   t  ¡ t}t t | j¡¡}t ¡ }| 	|¡ t
j |¡ t
 ¡ }| |  ¡ ¡ | |  ¡ ¡ | jdg|d |  g ¡ W d Q R X d S )N)ra   rb   )r)   )r   rƒ  r'   r(   r{  r|  r„  ÚconfigparserZConfigParserZ	read_filer   r}  r~  r   rr   rW   rp   rT   )r6   r…  r  Zcprº   r8   r8   r9   Útest_config0_using_cp_ok–  s    

z'ConfigFileTest.test_config0_using_cp_okc          	   C   sd   t  ¡ R}|  |¡ t d¡}| |  ¡ ¡ | |  ¡ ¡ | jddg|d |  g ¡ W d Q R X d S )Nzcompiler.parser)rg   r`   )ra   rb   )r)   )	r   rƒ  r‚  r   r   rr   rW   rp   rT   )r6   r}  r…  rº   r8   r8   r9   Útest_config1_ok¨  s    


zConfigFileTest.test_config1_okc             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  Úconfig2)r6   r8   r8   r9   Útest_config2_failure·  s    z#ConfigFileTest.test_config2_failurec             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  Úconfig3)r6   r8   r8   r9   Útest_config3_failure»  s    z#ConfigFileTest.test_config3_failurec          	   C   s|   t  ¡ j}|  | j¡ t ¡ }y
tƒ ‚W n tk
rF   t d¡ Y nX tj	 
d¡ |  | ¡ d¡ |  g ¡ W d Q R X d S )Nzjust testingr   z-ERROR:root:just testing
Got a [RuntimeError]
)r   rƒ  r‚  Úconfig4r   r   r  Ú	exceptionrÐ   ÚstdoutÚseekrG   rE   rT   )r6   r…  rº   r8   r8   r9   Útest_config4_ok¿  s    


zConfigFileTest.test_config4_okc             C   s   | j | jd d S )N)r}  )r‰  Úconfig5)r6   r8   r8   r9   Útest_config5_okÎ  s    zConfigFileTest.test_config5_okc             C   s   | j | jd d S )N)r}  )r‰  Úconfig6)r6   r8   r8   r9   Útest_config6_okÑ  s    zConfigFileTest.test_config6_okc          	   C   s&  t  ¡ n}|  | j¡ t d¡}t d¡}| |  ¡ ¡ | |  ¡ ¡ | 	|  ¡ ¡ | j
dddg|d |  
g ¡ W d Q R X t  ¡ ˜}|  | j¡ t d¡}|  |j¡ | |  ¡ ¡ | |  ¡ ¡ t d¡}| |  ¡ ¡ | |  ¡ ¡ | 	|  ¡ ¡ | j
dd	d
dg|d |  
g ¡ W d Q R X d S )Nzcompiler.parserzcompiler-hyphenated)rg   r`   )ra   rb   )r_   rc   )r)   zcompiler.lexer)rg   rd   )ra   rf   )rg   rh   )ra   ri   )r   rƒ  r‚  Úconfig1ar   r   rr   rW   rp   ÚcriticalrT   Úconfig7rÚ   r   )r6   r…  rº   Ú
hyphenatedr8   r8   r9   Útest_config7_okÔ  s<    





zConfigFileTest.test_config7_okc          	   C   sŒ   dd„ }|   ¡ X t dd¡\}}t |¡ tjdkrB| dd¡}| jj|d}|  	|¡ |  	|¡ W d Q R X t
jjd	 }|  |||¡ d S )
Nc             S   s   |   ¡  t |¡ d S )N)r;   rÔ   Úremove)Úh1râ   r8   r8   r9   Úcleanup  s    z/ConfigFileTest.test_config8_ok.<locals>.cleanupz.logztest_logging-X-rî   ú\z\\)rÒ   r   )Úcheck_no_resource_warningrÒ   rÓ   rÔ   r;   r7   ÚreplaceÚconfig8rL  r‚  r   Úrootr2   r   )r6   rž  rá   râ   r¢  rˆ   r8   r8   r9   Útest_config8_okÿ  s    



zConfigFileTest.test_config8_okc             C   sZ   |   | j¡ t d¡}|  |j¡ |   | j¡ |  |j¡ | j | jdd |  |j¡ d S )NZsome_pristine_loggerF)Údisable_existing_loggers)r‚  Údisable_testr   r   rÚ   r   r5   )r6   rº   r8   r8   r9   Útest_logger_disabling  s    
z$ConfigFileTest.test_logger_disablingc          
   C   sx   t  d¡ ¡ }tjddd\}}zFt || d¡¡ t |¡ t	j
j|tdddd	d
ddœidd W d t |¡ X d S )Nat  
            [formatters]
            keys=default

            [formatter_default]

            [handlers]
            keys=console

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

            [loggers]
            keys=root

            [logger_root]
            formatter=default
            handlers=console
            Útest_logging_z.ini)r“   ÚsuffixÚasciirU   FrÁ   z5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)rL  ÚdatefmtÚclass)Úversionr¥  Ú
formatters)Údefaults)r{  r|  ÚstriprÒ   rÓ   rÔ   r  Úencoder;   r   r}  r~  ÚdictrÕ   )r6   Zinirá   râ   r8   r8   r9   Ú!test_defaults_do_no_interpolation  s     

z0ConfigFileTest.test_defaults_do_no_interpolationN)rX   rY   rZ   r   r   rD   r„  Úconfig1r—  r¡  rŠ  rŒ  rŽ  r“  r•  r™  r¢  r¦  r‚  r†  rˆ  r‰  r‹  r  r’  r”  r–  r›  r¤  r§  r³  r8   r8   r8   r9   rz  „  s6     *&+	rz  c               @   s<   e Zd ZeZdZdd„ Zdd„ Zdd„ Zdd	„ Z	d
d„ Z
dS )ÚSocketHandlerTest)rÏ   r   c          
   C   sÞ   t  | ¡ d  | _ | _| _y$|  | j| jd¡ | _}| ¡  W n( t	k
rh } z
|| _d S d }~X Y nX |j
 ¡  tjj}t|jtƒr˜|d|jƒ| _n||jd ƒ| _d| _| j | jjd ¡ | j | j¡ t d¡| _d S )Ng{®Gáz„?rÏ   r   r   )r   r:   rJ  Ú	sock_hdlrÚserver_exceptionÚserver_classÚaddressÚhandle_socketrú   rÞ   r=  r  r   r2   ZSocketHandlerÚ
isinstanceÚserver_addressrL   r*  Ú
log_outputr$   r<   r4   rø   Z	Semaphorerd  )r6   rJ  rP  Úhclsr8   r8   r9   r:   R  s$    

zSocketHandlerTest.setUpc          	   C   sF   z4| j r | j | j ¡ | j  ¡  | jr2| j d¡ W d t | ¡ X d S )Ng       @)r¶  r$   r<   r;   rJ  r;  r   rA   )r6   r8   r8   r9   rA   l  s    
zSocketHandlerTest.tearDownc             C   sœ   |j }x| d¡}t|ƒdk r P t d|¡d }| |¡}x&t|ƒ|k r`|| |t|ƒ ¡ }q<W t |¡}t |¡}|  j	|j
d 7  _	| j ¡  qW d S )Nrï   z>Lr   Ú
)Z
connectionZrecvrH   ÚstructÚunpackÚpickleÚloadsr   r–   r½  rË   rd  r  )r6   ÚrequestZconnÚchunkÚslenÚobjr‘   r8   r8   r9   rº  w  s    



zSocketHandlerTest.handle_socketc             C   sV   | j r|  | j ¡ t d¡}| d¡ | j ¡  | d¡ | j ¡  |  | j	d¡ d S )NZtcpr„   Úeggsz
spam
eggs
)
r·  ÚskipTestr   r   rp   rd  rÿ   rs   rG   r½  )r6   rº   r8   r8   r9   Útest_output†  s    




zSocketHandlerTest.test_outputc             C   sž   | j r|  | j ¡ d| j_| j d¡ ytdƒ‚W n  tk
rR   | j d¡ Y nX | j 	d¡ t
 
¡ }|  | jj|¡ t
 | jj| d ¡ | j 	d¡ d S )Ng      @g       @zDeliberate mistakez
Never sentzNever sent, eithergü©ñÒMbP?zNor this)r·  rÉ  r¶  Z
retryStartrJ  r;  r  r$   r  rp   rñ   r  Z	retryTimeró   )r6   Únowr8   r8   r9   Útest_noserver‘  s    zSocketHandlerTest.test_noserverN)rX   rY   rZ   rR  r¸  r¹  r:   rA   rº  rÊ  rÌ  r8   r8   r8   r9   rµ  K  s   rµ  c              C   s*   t jddd\} }t | ¡ t |¡ |S )Nr¨  z.sock)r“   r©  )rÒ   rÓ   rÔ   r;   rœ  )rá   râ   r8   r8   r9   Ú_get_temp_domain_socket¤  s    

rÍ  zUnix sockets requiredc               @   s*   e Zd ZeedƒreZdd„ Zdd„ ZdS )ÚUnixSocketHandlerTestr\  c             C   s   t ƒ | _t | ¡ d S )N)rÍ  r¹  rµ  r:   )r6   r8   r8   r9   r:   ´  s    zUnixSocketHandlerTest.setUpc             C   s   t  | ¡ t | j¡ d S )N)rµ  rA   r   rÕ   r¹  )r6   r8   r8   r9   rA   ¹  s    
zUnixSocketHandlerTest.tearDownN)	rX   rY   rZ   r  r(  r]  r¸  r:   rA   r8   r8   r8   r9   rÎ  ¬  s   
rÎ  c               @   s4   e Zd ZeZdZdd„ Zdd„ Zdd„ Zdd	„ Z	d
S )ÚDatagramHandlerTest)rÏ   r   c          
   C   sÜ   t  | ¡ d  | _ | _| _y$|  | j| jd¡ | _}| ¡  W n( t	k
rh } z
|| _d S d }~X Y nX |j
 ¡  tjj}t|jtƒr˜|d|jƒ| _n||jd ƒ| _d| _| j | jjd ¡ | j | j¡ t ¡ | _d S )Ng{®Gáz„?rÏ   r   r   )r   r:   rJ  r¶  r·  r¸  r¹  Úhandle_datagramrú   rÞ   r=  r  r   r2   ZDatagramHandlerr»  r¼  rL   r*  r½  r$   r<   r4   rø   r	  rd  )r6   rJ  rP  r¾  r8   r8   r9   r:   Ä  s$    

zDatagramHandlerTest.setUpc          	   C   sF   z4| j r| j  d¡ | jr2| j | j¡ | j ¡  W d t | ¡ X d S )Ng       @)rJ  r;  r¶  r$   r<   r;   r   rA   )r6   r8   r8   r9   rA   Þ  s    zDatagramHandlerTest.tearDownc             C   sT   t  dd¡}|jt|ƒd … }t |¡}t |¡}|  j|j	d 7  _| j
 ¡  d S )Nz>Lr   r¿  )rÀ  ÚpackÚpacketrH   rÂ  rÃ  r   r–   r½  rË   rd  r   )r6   rÄ  rÆ  rÒ  rÇ  r‘   r8   r8   r9   rÐ  é  s    

z#DatagramHandlerTest.handle_datagramc             C   s`   | j r|  | j ¡ t d¡}| d¡ | j ¡  | j ¡  | d¡ | j ¡  |  | j	d¡ d S )NZudpr„   rÈ  z
spam
eggs
)
r·  rÉ  r   r   rp   rd  r  r=   rG   r½  )r6   rº   r8   r8   r9   rÊ  ñ  s    





zDatagramHandlerTest.test_outputN)
rX   rY   rZ   rW  r¸  r¹  r:   rA   rÐ  rÊ  r8   r8   r8   r9   rÏ  ½  s   rÏ  c               @   s*   e Zd ZeedƒreZdd„ Zdd„ ZdS )ÚUnixDatagramHandlerTestr\  c             C   s   t ƒ | _t | ¡ d S )N)rÍ  r¹  rÏ  r:   )r6   r8   r8   r9   r:     s    zUnixDatagramHandlerTest.setUpc             C   s   t  | ¡ t | j¡ d S )N)rÏ  rA   r   rÕ   r¹  )r6   r8   r8   r9   rA   
  s    
z UnixDatagramHandlerTest.tearDownN)	rX   rY   rZ   r  r(  r_  r¸  r:   rA   r8   r8   r8   r9   rÓ  ý  s   
rÓ  c               @   s4   e Zd ZeZdZdd„ Zdd„ Zdd„ Zdd	„ Z	d
S )ÚSysLogHandlerTest)rÏ   r   c          
   C   sâ   t  | ¡ d  | _ | _| _y$|  | j| jd¡ | _}| ¡  W n( t	k
rh } z
|| _d S d }~X Y nX |j
 ¡  tjj}t|jtƒr ||jd |jfƒ| _n||jƒ| _d| _| j | jjd ¡ | j | j¡ t ¡ | _d S )Ng{®Gáz„?r   r   )r   r:   rJ  Úsl_hdlrr·  r¸  r¹  rÐ  rú   rÞ   r=  r  r   r2   rÝ   r»  r¼  rL   r*  r½  r$   r<   r4   rø   r	  rd  )r6   rJ  rP  r¾  r8   r8   r9   r:     s$    

zSysLogHandlerTest.setUpc          	   C   sF   z4| j r| j  d¡ | jr2| j | j¡ | j ¡  W d t | ¡ X d S )Ng       @)rJ  r;  rÕ  r$   r<   r;   r   rA   )r6   r8   r8   r9   rA   /  s    zSysLogHandlerTest.tearDownc             C   s   |j | _| j ¡  d S )N)rÒ  r½  rd  r   )r6   rÄ  r8   r8   r9   rÐ  :  s    z!SysLogHandlerTest.handle_datagramc             C   sª   | j r|  | j ¡ t d¡}| d¡ | j ¡  |  | jd¡ | j 	¡  d| j
_| d¡ | j ¡  |  | jd¡ | j 	¡  d| j
_| d¡ | j ¡  |  | jd¡ d S )NZslhu   spÃ¤ms
   <11>spÃ¤m Fs	   <11>spÃ¤mu   hÃ¤m-s   <11>hÃ¤m-spÃ¤m)r·  rÉ  r   r   rp   rd  r  rG   r½  r=   rÕ  Z
append_nulÚident)r6   rº   r8   r8   r9   rÊ  >  s     








zSysLogHandlerTest.test_outputN)
rX   rY   rZ   rW  r¸  r¹  r:   rA   rÐ  rÊ  r8   r8   r8   r9   rÔ    s   rÔ  c               @   s*   e Zd ZeedƒreZdd„ Zdd„ ZdS )ÚUnixSysLogHandlerTestr\  c             C   s   t ƒ | _t | ¡ d S )N)rÍ  r¹  rÔ  r:   )r6   r8   r8   r9   r:   Y  s    zUnixSysLogHandlerTest.setUpc             C   s   t  | ¡ t | j¡ d S )N)rÔ  rA   r   rÕ   r¹  )r6   r8   r8   r9   rA   ^  s    
zUnixSysLogHandlerTest.tearDownN)	rX   rY   rZ   r  r(  r_  r¸  r:   rA   r8   r8   r8   r9   r×  Q  s   
r×  z$IPv6 support required for this test.c                   s0   e Zd ZeZdZ‡ fdd„Z‡ fdd„Z‡  ZS )ÚIPv6SysLogHandlerTest)z::1r   c                s   t j| j_tt| ƒ ¡  d S )N)r(  ZAF_INET6r¸  r^  r>  rØ  r:   )r6   )r?  r8   r9   r:   k  s    
zIPv6SysLogHandlerTest.setUpc                s   t j| j_tt| ƒ ¡  d S )N)r(  ÚAF_INETr¸  r^  r>  rØ  rA   )r6   )r?  r8   r9   rA   o  s    
zIPv6SysLogHandlerTest.tearDown)	rX   rY   rZ   rW  r¸  r¹  r:   rA   rB  r8   r8   )r?  r9   rØ  b  s   rØ  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚHTTPHandlerTestc             C   s   t  | ¡ t ¡ | _d S )N)r   r:   rø   r	  rd  )r6   r8   r8   r9   r:   v  s    
zHTTPHandlerTest.setUpc             C   sr   |j | _ t|jƒ| _| j dkrRy t|jd ƒ}|j |¡| _W n   d | _Y nX | 	d¡ | 
¡  | j ¡  d S )NrÍ   zContent-LengthéÈ   )Úcommandr   rÛ   Úlog_dataÚintZheadersZrfilerN   Ú	post_dataZsend_responseZend_headersrd  r   )r6   rÄ  Zrlenr8   r8   r9   Úhandle_request|  s    

zHTTPHandlerTest.handle_requestc          	   C   sì  t  d¡}| j}| | jjd ¡ xÂdD ]¸}d}|rœydd l}W n tk
r\   d }Y q¤X tj 	t
¡}tj |d¡}| |j¡}| |¡ |j|d}	nd }d }	t|| jd|d | _}
|
 ¡  |
j ¡  d	|
j }|oÞ|}t jj|d
||	dd| _d | _| | j¡ x´dD ]¬}|| j_| j ¡  d}| |¡ | j ¡  |  | jjd
¡ |  | j |¡ |dkrtt!| jj"ƒ}nt!| j# $d¡ƒ}|  |d dg¡ |  |d dg¡ |  |d |g¡ qW | j %d¡ | j | j¡ | j &¡  q*W d S )NZhttpr   )FT)rÏ   r   zkeycert.pem)Zcafileg{®Gáz„?)rN  zlocalhost:%dz/frob)ÚfooÚbar)ÚsecureÚcontextZcredentials)rÌ   rÍ   u   spÃ¤mrÌ   zutf-8r7   ZfuncNamerÊ  rË   g       @)'r   r   r$   r<   r2   ÚsslÚImportErrorrÔ   rÛ   ÚdirnameÚ__file__r   Z
SSLContextZPROTOCOL_TLS_SERVERZload_cert_chainZcreate_default_contextrC  rà  rJ  rú   r=  r  Zserver_portrà   Zh_hdlrrÝ  r4   rã   rd  r=   rp   rG   rÜ  r   Zqueryrß  Údecoder;  r;   )r6   rº   r$   rã  r.  rå  rN  ÚhereZlocalhost_certrä  rJ  ZhostZsecure_clientrã   rË   Údr8   r8   r9   rÊ  ‰  s\    











zHTTPHandlerTest.test_outputN)rX   rY   rZ   r:   rà  rÊ  r8   r8   r8   r9   rÚ  s  s   rÚ  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
MemoryTestc             C   s   t  | ¡ i | _d S )N)r   r:   Ú
_survivors)r6   r8   r8   r9   r:   Ä  s    
zMemoryTest.setUpc             G   s2   x,|D ]$}t |ƒt|ƒf}t |¡| j|< qW d S )N)ÚidÚreprÚweakrefÚrefrí  )r6   rì   rÇ  Úkeyr8   r8   r9   Ú_watch_for_survivalÉ  s    
zMemoryTest._watch_for_survivalc             C   s`   t  ¡  g }x.| j ¡ D ] \\}}}|ƒ d kr| |¡ qW |r\|  dt|ƒd |¡f ¡ d S )Nz;%d objects should have survived but have been destroyed: %sz, )ÚgcZcollectrí  r¶   rg  rK   rH   r   )r6   ZdeadZid_Úrepr_rñ  r8   r8   r9   Ú_assertTruesurvivalÐ  s    
zMemoryTest._assertTruesurvivalc             C   sŒ   | j  tj¡ t d¡}|  |¡ | tj¡ | j  |  ¡ ¡ | |  ¡ ¡ |  	dg¡ ~|  
¡  t d¡}| |  ¡ ¡ |  	ddg¡ d S )Nrá  )rá  r+   rb   )rá  r+   rc   )r$   r*   r   rg   r   ró  r+   rs   rW   rT   rö  )r6   rá  râ  r8   r8   r9   Útest_persistent_loggersÜ  s    


z"MemoryTest.test_persistent_loggersN)rX   rY   rZ   r:   ró  rö  r÷  r8   r8   r8   r9   rì  À  s   rì  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚEncodingTestc          	   C   s¶   t  d¡}t dd¡\}}t |¡ d}zpt j|dd}| |¡ z| |¡ W d | 	|¡ | ¡  X t
|dd}z|  | ¡  ¡ |¡ W d | ¡  X W d tj |¡r°t |¡ X d S )NÚtestz.logztest_logging-1-u   fooÂ€zutf-8)Úencoding)r   r   rÒ   rÓ   rÔ   r;   rè   r4   rq   r<   ÚopenrG   rN   ÚrstriprÛ   Úisfilerœ  )r6   ro   rá   râ   r  rˆ   r˜   r8   r8   r9   Útest_encoding_plain_fileõ  s"    




z%EncodingTest.test_encoding_plain_filec          	   C   s€   t  d¡}d}t d¡}d|_t ¡ }||dƒ}t  |¡}| |¡ z| 	|¡ W d | 
|¡ | ¡  X | ¡ }|  |d¡ d S )Nrù  u   Ð´Ð¾ ÑÐ²Ð¸Ð´Ð°Ð½Ð¸ÑÚcp1251Ústricts   äî ñâèäàíèÿ
)r   r   ÚcodecsÚ	getwriterrú  r'   ÚBytesIOr,   r4   rq   r<   r;   rE   rG   )r6   ro   ÚmessageZwriter_classr)   Úwriterrˆ   rS   r8   r8   r9   Útest_encoding_cyrillic_unicode  s    






z+EncodingTest.test_encoding_cyrillic_unicodeN)rX   rY   rZ   rþ  r  r8   r8   r8   r9   rø  ô  s   rø  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚWarningsTestc          	   C   sÒ   t  ¡ À t d¡ |  tjd¡ t jdtd t ¡ }t 	|¡}t 
d¡}| |¡ t  d¡ | |¡ | ¡ }| ¡  |  | d¡d¡ t ¡ }t  d	td
d|d¡ | ¡ }| ¡  |  |d¡ W d Q R X d S )NTFÚalways)Úcategoryzpy.warningszI'm warning you...z UserWarning: I'm warning you...
r   ÚExplicitzdummy.pyé*   z
Dummy linez0dummy.py:42: UserWarning: Explicit
  Dummy line
)ÚwarningsÚcatch_warningsr   ÚcaptureWarningsr   ÚfilterwarningsÚUserWarningr'   r(   r,   r   r4   Úwarnr<   rE   r;   r  ÚfindÚshowwarningrG   )r6   r)   r@   rº   rS   Za_filer8   r8   r9   Útest_warnings'  s(    






zWarningsTest.test_warningsc          	   C   s~   t  ¡ l t d¡ |  tjd¡ t d¡}|  |jg ¡ t  dt	dd¡ |  t
|jƒd¡ |  |jd tj¡ W d Q R X d S )	NTFzpy.warningsr
  zdummy.pyr  rU   r   )r  r  r   r  r   r   rG   r2   r  r  rH   ÚassertIsInstanceÚNullHandler)r6   rº   r8   r8   r9   Útest_warnings_no_handlers?  s    


z&WarningsTest.test_warnings_no_handlersN)rX   rY   rZ   r  r  r8   r8   r8   r9   r  %  s   r  c             C   s   t  | |¡S )N)r   r.   )rL  r«  r8   r8   r9   Ú
formatFuncM  s    r  c               C   s   t  ¡ S )N)r   r,   r8   r8   r8   r9   ÚhandlerFuncP  s    r  c               @   s   e Zd ZdS )ÚCustomHandlerN)rX   rY   rZ   r8   r8   r8   r9   r  S  s   r  c            
   @   sä  e Zd ZejZdZddddiiddddd	d
œiddgdœdœZddddiiddddd	d
œidddgdœiddidœZddddiiddddd	d
œidddiiddgdœdœZddddiidddddd
œidddgdœiddidœZ	ddddiiddddd	d
œidddgdœiddidœZ
ddddiiddddd	d
œidddgdœiddidœZddddiiddddd	d
œidddgdœiddidœZdde d ddœiddddd	d
œiddgdœdœZdeddœe d ddœeddœdœdddd	d
œdeidœddgdœdœZddddiide d ddd	d
œidddgdœiddidœZddddiide d ddd	ddœidddgdœiddidœZddddiiddddd	d
œid ddgdœiddidœZdd!dddiiddddd	d
œiddgdœi d"œddid#œZdd$dddiiddddd	d
œiddgdœi d"œddid#œZddddiiddddd	d
œidddgdœiddidœZdd$dddiiddd%iid&œZdd$ddd%iiddd%iid&œZddddiid'd(diiddddd	d'gd)œiddd'gd*œiddgdœd+œZddddiiddddd	d
œid,dd-idddgdœiddid.œZdddiiddddd	d
œid,dd-idddgdœiddid/œZd0dddiiddddd	d
œid,dd-idddgdœiddid.œZddddiiddddd	d1d2d3œd4œiddgdœdœZdd5d6d7d8œiddd5d9œd:d;d5d<dd=œd>œd?dd@gdAdBœidCœZdDdE„ Z dFdG„ Z!efdHdI„Z"dJdK„ 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„ Z0dfdg„ Z1dhdi„ Z2djdk„ Z3dldm„ Z4d{dodp„Z5dqdr„ Z6dsdt„ Z7dudv„ Z8dwdx„ Z9dydz„ Z:dnS )|ÚConfigDictTestz^(\w+) \+\+ (\w+)$rU   Úform1rL  z%(levelname)s ++ %(message)sÚhand1zlogging.StreamHandlerr‚   zext://sys.stdout)r¬  Ú	formatterÚlevelr)   re   )r  r2   )r­  r®  r2   r£  zcompiler.parserr+   r  )r­  r®  r2   Úloggersr£  zext://sys.stdboutZNTOSETZWRANINGZmisspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)z()rL  z.formatFunc)r  Zform2Zform3z())r  Zhand2z.CustomHandlerzinvalid parameter name)r¬  r  r  r)   rk   zcompiler.lexerF)Úcompilerzcompiler.lexer)r­  r¥  r®  r2   r   r£  Trg   )r­  Zincrementalr2   r   Zfilt1r7   )r¬  r  r  r)   Úfilters)r  r"  )r­  r®  r"  r2   r   r£  zcfg://true_formatterszcfg://handler_configs[hand1])r­  Útrue_formattersÚhandler_configsr®  r2   r   r£  )r#  r$  r®  r2   r   r£  rŽ   râ  z!
)rá  Ú
terminator)r¬  r  r  r)   r   ZmySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)sú$)rL  Ústyle)r¬  r  r  zlogging.handlers.MemoryHandleré   Ú
fileGlobal)r¬  Zcapacityr  r÷   r  )r)  ÚbufferGlobalÚmymoduler*  Útrue)r  r2   rm  )r­  r®  r2   r   c             C   s   t j |¡ d S )N)r   r}  Z
dictConfig)r6   r  r8   r8   r9   r‚  Ð
  s    zConfigDictTest.apply_configc          	   C   sb   t  ¡ P}|  | j¡ t ¡ }| |  ¡ ¡ | |  ¡ ¡ | j	dg|d |  	g ¡ W d Q R X d S )N)ra   rb   )r)   )
r   rƒ  r‚  r„  r   r   rr   rW   rp   rT   )r6   r…  rº   r8   r8   r9   r†  Ó
  s    
zConfigDictTest.test_config0_okc          	   C   sd   t  ¡ R}|  |¡ t d¡}| |  ¡ ¡ | |  ¡ ¡ | jddg|d |  g ¡ W d Q R X d S )Nzcompiler.parser)rg   r`   )ra   rb   )r)   )	r   rƒ  r‚  r   r   rr   rW   rp   rT   )r6   r}  r…  rº   r8   r8   r9   r‰  â
  s    


zConfigDictTest.test_config1_okc             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  rŠ  )r6   r8   r8   r9   r‹  ñ
  s    z#ConfigDictTest.test_config2_failurec             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  Úconfig2a)r6   r8   r8   r9   Útest_config2a_failureõ
  s    z$ConfigDictTest.test_config2a_failurec             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  Úconfig2b)r6   r8   r8   r9   Útest_config2b_failureù
  s    z$ConfigDictTest.test_config2b_failurec             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  rŒ  )r6   r8   r8   r9   r  ý
  s    z#ConfigDictTest.test_config3_failurec          	   C   st   t  ¡ b}|  | j¡ y
tƒ ‚W n tk
r>   t d¡ Y nX tj 	d¡ |  
| ¡ d¡ |  g ¡ W d Q R X d S )Nzjust testingr   z-ERROR:root:just testing
Got a [RuntimeError]
)r   rƒ  r‚  rŽ  r  r   r  rÐ   r  r‘  rG   rE   rT   )r6   r…  r8   r8   r9   r’    s    


zConfigDictTest.test_config4_okc          	   C   st   t  ¡ b}|  | j¡ y
tƒ ‚W n tk
r>   t d¡ Y nX tj 	d¡ |  
| ¡ d¡ |  g ¡ W d Q R X d S )Nzjust testingr   z-ERROR:root:just testing
Got a [RuntimeError]
)r   rƒ  r‚  Úconfig4ar  r   r  rÐ   r  r‘  rG   rE   rT   )r6   r…  r8   r8   r9   Útest_config4a_ok  s    


zConfigDictTest.test_config4a_okc             C   s   | j | jd d S )N)r}  )r‰  r“  )r6   r8   r8   r9   r”    s    zConfigDictTest.test_config5_okc             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  r•  )r6   r8   r8   r9   Útest_config6_failure"  s    z#ConfigDictTest.test_config6_failurec          	   C   sÞ   t  ¡ T}|  | j¡ t d¡}| |  ¡ ¡ | |  ¡ ¡ | j	ddg|d |  	g ¡ W d Q R X t  ¡ j}|  | j
¡ t d¡}|  |j¡ t d¡}| |  ¡ ¡ | |  ¡ ¡ | j	ddg|d |  	g ¡ W d Q R X d S )Nzcompiler.parser)rg   r`   )ra   rb   )r)   zcompiler.lexer)rg   rc   )ra   rd   )r   rƒ  r‚  r´  r   r   rr   rW   rp   rT   r™  r5   r   )r6   r…  rº   r8   r8   r9   r›  %  s,    




zConfigDictTest.test_config7_okc          	   C   sþ   t  ¡ T}|  | j¡ t d¡}| |  ¡ ¡ | |  ¡ ¡ | j	ddg|d |  	g ¡ W d Q R X t  ¡ Š}|  | j
¡ t d¡}|  |j¡ | |  ¡ ¡ | |  ¡ ¡ t d¡}| |  ¡ ¡ | |  ¡ ¡ | j	dddd	g|d |  	g ¡ W d Q R X d S )
Nzcompiler.parser)rg   r`   )ra   rb   )r)   zcompiler.lexer)rg   rc   )ra   rd   )rg   rf   )ra   rh   )r   rƒ  r‚  r´  r   r   rr   rW   rp   rT   r¢  rÚ   r   )r6   r…  rº   r8   r8   r9   Útest_config_8_okB  s4    




zConfigDictTest.test_config_8_okc          	   C   s&  t  ¡ n}|  | j¡ t d¡}t d¡}| |  ¡ ¡ | |  ¡ ¡ | 	|  ¡ ¡ | j
dddg|d |  
g ¡ W d Q R X t  ¡ ˜}|  | j¡ t d¡}|  |j¡ | |  ¡ ¡ | |  ¡ ¡ t d¡}| |  ¡ ¡ | |  ¡ ¡ | 	|  ¡ ¡ | j
dd	d
dg|d |  
g ¡ W d Q R X d S )Nzcompiler.parserzcompiler-hyphenated)rg   r`   )ra   rb   )r_   rc   )r)   zcompiler.lexer)rg   rd   )ra   rf   )rg   rh   )ra   ri   )r   rƒ  r‚  r—  r   r   rr   rW   rp   r˜  rT   Úconfig8arÚ   r   )r6   r…  rº   rš  r8   r8   r9   Útest_config_8a_okc  s<    





z ConfigDictTest.test_config_8a_okc          	   C   sœ   t  ¡ Š}|  | j¡ t d¡}| |  ¡ ¡ | jg |d |  | j	¡ | |  ¡ ¡ | jg |d |  | j
¡ | |  ¡ ¡ | jdg|d W d Q R X d S )Nzcompiler.parser)r)   )rg   rc   )r   rƒ  r‚  Úconfig9r   r   rr   rW   rT   Úconfig9aÚconfig9b)r6   r…  rº   r8   r8   r9   Útest_config_9_okŽ  s    

zConfigDictTest.test_config_9_okc          	   C   s–   t  ¡ „}|  | j¡ t d¡}| |  ¡ ¡ t d¡}| |  ¡ ¡ t d¡}| |  ¡ ¡ t d¡}| |  ¡ ¡ | j	ddg|d W d Q R X d S )Nzcompiler.parserr!  zcompiler.lexerzcompiler.parser.codegen)re   r`   )ra   rd   )r)   )
r   rƒ  r‚  Úconfig10r   r   rq   rW   rp   rT   )r6   r…  rº   r8   r8   r9   Útest_config_10_ok   s    




z ConfigDictTest.test_config_10_okc             C   s   |   | j¡ d S )N)r‰  Úconfig11)r6   r8   r8   r9   Útest_config11_ok³  s    zConfigDictTest.test_config11_okc             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  Úconfig12)r6   r8   r8   r9   Útest_config12_failure¶  s    z$ConfigDictTest.test_config12_failurec             C   s   |   t| j| j¡ d S )N)rÃ   rû   r‚  Úconfig13)r6   r8   r8   r9   Útest_config13_failure¹  s    z$ConfigDictTest.test_config13_failurec          	   C   sh   t  ¡ V}|  | j¡ tjd }|  |jd¡ |  |jd¡ t 	d¡ |  
| ¡  d¡¡ W d Q R X d S )Nr  râ  z!
ZExclamationzExclamation!
)r   rƒ  r‚  Úconfig14r   r   rG   rá  r%  rq   r5   rE   re  )r6   r…  r@   r8   r8   r9   Útest_config14_ok¼  s    


zConfigDictTest.test_config14_okc          	   C   s„   dd„ }|   ¡ P t dd¡\}}t |¡ ddd|dœid	dgid
œ}|  |¡ |  |¡ W d Q R X tjjd }|  	|||¡ d S )Nc             S   s   |   ¡  t |¡ d S )N)r;   rÔ   rœ  )r  râ   r8   r8   r9   rž  Ç  s    z0ConfigDictTest.test_config15_ok.<locals>.cleanupz.logztest_logging-X-rU   r  zlogging.FileHandler)r¬  Úfilenamer2   )r­  r2   r£  r   )
r   rÒ   rÓ   rÔ   r;   r‚  r   r£  r2   r   )r6   rž  rá   râ   r}  rˆ   r8   r8   r9   Útest_config15_okÅ  s    


zConfigDictTest.test_config15_okNc          
   C   sì   |  d¡}tj d|¡}| ¡  |j ¡  |j}|j ¡  zˆt	 	t	j
t	j¡}| d¡ | d|f¡ t dt|ƒ¡}|| }d}t|ƒ}	x.|	dkr¶| ||d … ¡}
||
7 }|	|
8 }	qŠW | ¡  W d |j d¡ tj ¡  t |d¡ X d S )Nzutf-8r   g       @rÏ   z>L)r±  r   r}  Zlistenrú   r=  r  r*  r=   r(  rÙ  ZSOCK_STREAMZ
settimeoutZconnectrÀ  rÑ  rH   Úsendr;   ZstopListeningr   r9  )r6   ÚtextZverifyr6  r*  rO  rÆ  rS   Z	sentsofarÚleftZsentr8   r8   r9   Úsetup_via_listenerâ  s,    





z!ConfigDictTest.setup_via_listenerc          	   C   sœ   t  ¡ Š}|  t | j¡¡ t d¡}| |  	¡ ¡ t d¡}| |  	¡ ¡ t d¡}| |  	¡ ¡ t d¡}| 
|  	¡ ¡ | jddg|d W d Q R X d S )Nzcompiler.parserr!  zcompiler.lexerzcompiler.parser.codegen)re   r`   )ra   rd   )r)   )r   rƒ  rJ  ÚjsonÚdumpsr;  r   r   rq   rW   rp   rT   )r6   r…  rº   r8   r8   r9   Útest_listen_config_10_okþ  s    




z'ConfigDictTest.test_listen_config_10_okc          	   C   sl   t  ¡ Z}|  t tj¡¡ t d¡}| 	|  
¡ ¡ | |  
¡ ¡ | jddg|d |  g ¡ W d Q R X d S )Nzcompiler.parser)rg   r`   )ra   rb   )r)   )r   rƒ  rJ  r{  r|  rz  r´  r   r   rr   rW   rp   rT   )r6   r…  rº   r8   r8   r9   Útest_listen_config_1_ok  s    

z&ConfigDictTest.test_listen_config_1_okc          	   C   sb  dd„ }dd„ }t  d¡}t tj¡}t ¡ .}|  ||¡ | 	|  
¡ ¡ | |  
¡ ¡ W d Q R X | jg |d | jddgd	d
 t ¡ 6}|  |¡ t  d¡}| 	|  
¡ ¡ | |  
¡ ¡ W d Q R X | jddg|d | jddgd	d
 t ¡ B}|  |d d d… |¡ t  d¡}| 	|  
¡ ¡ | |  
¡ ¡ W d Q R X | jddg|d | jddgd	d
 d S )Nc             S   s   d S )Nr8   )Ústuffr8   r8   r9   Úverify_fail!  s    z6ConfigDictTest.test_listen_verify.<locals>.verify_failc             S   s   | d d d… S )NrÊ   r8   )rO  r8   r8   r9   Úverify_reverse$  s    z9ConfigDictTest.test_listen_verify.<locals>.verify_reversezcompiler.parser)r)   )rg   r`   )ra   rb   z^[\w.]+ -> (\w+): (\d+)$)rO   )rg   rc   )ra   rd   rÊ   )rg   rf   )ra   rh   )r   r   r{  r|  rz  r´  r   rƒ  rJ  rr   rW   rp   rT   )r6   rP  rQ  rº   Zto_sendr…  r8   r8   r9   Útest_listen_verify  sN    






z!ConfigDictTest.test_listen_verifyc             C   sB   |   | j¡ t d¡jd }|  |jtj¡ |  |jj	tj
¡ d S )Nr+  r   )r‚  Úout_of_orderr   r   r2   r  r÷   rÂ   r  Ú_styleÚStringTemplateStyle)r6   rˆ   r8   r8   r9   Útest_out_of_order]  s
    
z ConfigDictTest.test_out_of_orderc             C   sü   ddddgdddœdd	d
dgdgdddgdœ}t j |¡}|  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ | d¡}|  | d¡dddg¡ |  t|jd¡ |  t|jd¡ |  t|jd¡ d S )N)rU   rŽ   é   ræ   ÚbÚcrP  rW  )rë  r˜   )Úg)r@   rr  Újr·   Úlrt   ru  Úozcfg://alistÚp)ZatupleZalistZadictZnest1Znest2Znest3zcfg://atuple[1]rŽ   zcfg://alist[1]zcfg://nest1[1][0]r@   zcfg://nest2[1][1]zcfg://adict.dzcfg://adict[f]zcfg://nest3rU   zcfg://nosuchzcfg://!zcfg://adict[2])	r   r}  ZBaseConfiguratorrG   ZconvertÚpoprÃ   ÚKeyErrorrß   )r6   rë  Zbcr¸   r8   r8   r9   Útest_baseconfigd  s$    
zConfigDictTest.test_baseconfig)N);rX   rY   rZ   r   r   rD   r„  r´  r—  rŠ  r-  r/  rŒ  rŽ  rx  r  r  r1  r“  r•  r™  r¢  r5  r7  r8  r9  r;  r=  r?  rA  rC  rS  r‚  r†  r‰  r‹  r.  r0  r  r’  r2  r”  r3  r›  r4  r6  r:  r<  r>  r@  rB  rD  rF  rJ  rM  rN  rR  rV  ra  r8   r8   r8   r9   r  V  sh  
















!+	
>r  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚManagerTestc                sn   g ‰ G ‡ fdd„dt jƒ}t  d ¡}|  t|jt¡ | |¡ | d¡}| d¡ t  d¡ |  	ˆ dg¡ d S )Nc                   s   e Zd Zd‡ fdd„	ZdS )z6ManagerTest.test_manager_loggerclass.<locals>.MyLoggerNc                s   ˆ   |¡ d S )N)rg  )r6   r  rË   rì   Úexc_infoÚextra)Úloggedr8   r9   Ú_log  s    z;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log)NN)rX   rY   rZ   rf  r8   )re  r8   r9   ÚMyLogger~  s   rg  rù  zshould appear in loggedzshould not appear in logged)
r   ÚLoggerÚManagerrÃ   Ú	TypeErrorÚsetLoggerClassrÞ  r   rq   rG   )r6   rg  Úmanrº   r8   )re  r9   Útest_manager_loggerclass{  s    




z$ManagerTest.test_manager_loggerclassc             C   s,   t  d ¡}tƒ }| |¡ |  |j|¡ d S )N)r   ri  ÚobjectÚsetLogRecordFactoryrG   ZlogRecordFactory)r6   rl  rQ   r8   r8   r9   Útest_set_log_record_factory‹  s    

z'ManagerTest.test_set_log_record_factoryN)rX   rY   rZ   rm  rp  r8   r8   r8   r9   rb  z  s   rb  c               @   s   e Zd Zdd„ ZdS )ÚChildLoggerTestc             C   s¦   t  ¡ }t  d¡}t  d¡}| d¡}| d¡}|  |t  d¡¡ |  |t  d¡¡ | d¡}| d¡}| d¡}|  |t  d¡¡ |  |t  d¡¡ |  ||¡ d S )	NÚabczdef.ghiZxyzzuvw.xyzÚdefZghizabc.defzabc.def.ghi)r   r   ZgetChildr  )r6   r™   Úl1Úl2Zc1Zc2Zc3r8   r8   r9   Útest_child_loggers’  s    






z"ChildLoggerTest.test_child_loggersN)rX   rY   rZ   rv  r8   r8   r8   r9   rq  ‘  s   rq  c               @   s   e Zd ZdS )ÚDerivedLogRecordN)rX   rY   rZ   r8   r8   r8   r9   rw  ¢  s   rw  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚLogRecordFactoryTestc             C   sB   G dd„ dt jƒ}t | ¡ |tƒ| _| j | j¡ t  ¡ | _	d S )Nc               @   s   e Zd Zdd„ Zdd„ ZdS )z2LogRecordFactoryTest.setUp.<locals>.CheckingFilterc             S   s
   || _ d S )N)rë   )r6   rë   r8   r8   r9   r'  ©  s    z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__c             S   s,   t |ƒ}|| jk	r(d|| jf }t|ƒ‚dS )Nz)Unexpected LogRecord type %s, expected %sT)Útyperë   rj  )r6   r‘   r6  rË   r8   r8   r9   r—   ¬  s    

z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterN)rX   rY   rZ   r'  r—   r8   r8   r8   r9   ÚCheckingFilter¨  s   rz  )
r   r…   r   r:   rw  r—   r$   r†   ZgetLogRecordFactoryÚorig_factory)r6   rz  r8   r8   r9   r:   §  s
    

zLogRecordFactoryTest.setUpc             C   s(   | j  | j¡ t | ¡ t | j¡ d S )N)r$   r‡   r—   r   rA   r   ro  r{  )r6   r8   r8   r9   rA   ¹  s    
zLogRecordFactoryTest.tearDownc             C   s@   |   t| jj|  ¡ ¡ t t¡ | j |  ¡ ¡ |  	dg¡ d S )N)r£  ra   rb   )
rÃ   rj  r$   rq   rW   r   ro  rw  rp   rT   )r6   r8   r8   r9   Útest_logrecord_class¾  s    

z)LogRecordFactoryTest.test_logrecord_classN)rX   rY   rZ   r:   rA   r|  r8   r8   r8   r9   rx  ¥  s   rx  c               @   sh   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Ze 	e
ejd
ƒd¡dd„ ƒZe 	e
ejd
ƒd¡dd„ ƒZdS )ÚQueueHandlerTestz^[\w.]+ -> (\w+): (\d+)$c             C   s`   t  | ¡ t d¡| _tj | j¡| _d| _t 	d¡| _
d| j
_| j
 tj¡ | j
 | j¡ d S )NrÊ   ZqueF)r   r:   ÚqueueÚQueuer   r2   ÚQueueHandlerÚque_hdlrr7   r   Ú
que_loggerrm  r*   re   r4   )r6   r8   r8   r9   r:   Ì  s    
zQueueHandlerTest.setUpc             C   s   | j  ¡  t | ¡ d S )N)r  r;   r   rA   )r6   r8   r8   r9   rA   Ö  s    
zQueueHandlerTest.tearDownc             C   s¢   | j  |  ¡ ¡ |  tj| jj¡ | j  |  ¡ ¡ |  tj| jj¡ |  ¡ }| j  |¡ | j ¡ }|  	t
|tjƒ¡ |  |j| j j¡ |  |j|jf|d f¡ d S )N)r‚  rs   rW   rÃ   r~  ÚEmptyÚ
get_nowaitrr   rq   r5   r»  r   Ú	LogRecordrG   r7   rË   rì   )r6   rË   r  r8   r8   r9   Útest_queue_handlerÚ  s    
z#QueueHandlerTest.test_queue_handlerc             C   sx   |   ¡ }t tj¡}d}|j| j||d}t | j¡}| j 	|¡ | j
 |¡ | j ¡ }|  ||j¡ |  ||j¡ d S )Nz {name} -> {levelname}: {message})r7   Ú	levelnamer  )rW   r   r|   re   rL  r7   r.   r/   r  r0   r‚  rq   r~  r„  rG   rË   r  )r6   rË   r‡  Zlog_format_strZformatted_msgr  Z
log_recordr8   r8   r9   Útest_formattingæ  s    

z QueueHandlerTest.test_formattingÚQueueListenerz5logging.handlers.QueueListener required for this testc             C   st  t  t  ¡ ¡}tj | j|¡}| ¡  z4| j 	|  
¡ ¡ | j |  
¡ ¡ | j |  
¡ ¡ W d | ¡  X |  |jtjdd¡ |  |jtjdd¡ |  |jtjdd¡ | ¡  t  t  ¡ ¡}| tj¡ tjj| j|dd}| ¡  z4| j 	|  
¡ ¡ | j |  
¡ ¡ | j |  
¡ ¡ W d | ¡  X |  |jtjdd¡ |  |jtjdd¡ |  |jtjd	d¡ | ¡  d S )
Nr`   )r¯   r  rb   rc   T)Zrespect_handler_levelrd   rf   rh   )r   ZTestHandlerZMatcherr   r2   r‰  r~  rú   r‚  rq   rW   rp   r˜  r;  r5   Úmatchesre   ra   r_   r;   r*   rÚ   )r6   rˆ   Úlistenerr8   r8   r9   Útest_queue_listeneró  s4    

z$QueueHandlerTest.test_queue_listenerc          
   C   sŠ   t j | j| j¡}| ¡  ydd  W n: tk
r` } z|}| jj|  	¡ |d W d d }~X Y nX | 
¡  |  | j ¡  ¡  d¡d¡ d S )NrU   r   )rc  Z	Traceback)r   r2   r‰  r~  r-   rú   ÚZeroDivisionErrorr‚  r  rW   r;  rG   r)   rE   r°  Úcount)r6   r‹  rP  Úexcr8   r8   r9   Ú&test_queue_listener_with_StreamHandler  s    &z7QueueHandlerTest.test_queue_listener_with_StreamHandlerN)rX   rY   rZ   rD   r:   rA   r†  rˆ  r  Ú
skipUnlessr  r   r2   rŒ  r  r8   r8   r8   r9   r}  È  s   
"r}  r‰  )Úpatchc               @   s`   e Zd ZdZedd„ ƒZe ej	j
d¡dd„ ƒZe ej	j
d¡dd„ ƒZed	d
„ ƒZdd„ ZdS )ÚQueueListenerTesté   c             C   s”   t  d| ¡}| t j¡ t j | ¡}| |¡ t j | ¡}| ¡  | 	d¡ | 	d¡ | 	d¡ | 	d¡ | 	d¡ | 
¡  | |¡ | ¡  d S )Nztest_logger_with_id_%sÚoneÚtwoZthreeZfourZfive)r   r   r*   r+   r2   r€  r4   r‰  rú   rr   r;  r<   r;   )Ú	log_queuerÖ  rº   rˆ   r‹  r8   r8   r9   Úsetup_and_log0  s    






zQueueListenerTest.setup_and_logrÙ   c             C   sN   x2t | jƒD ]$}t ¡ }|  |d|  ¡ |f ¡ qW |  |jd| j d¡ d S )Nz%s_%sr(  z&correct number of handled log messages)rð   Úrepeatr~  r  r˜  rî  rG   Ú
call_count)r6   Úmock_handlerr  r—  r8   r8   r9   Ú#test_handle_called_with_queue_queueH  s
    z5QueueListenerTest.test_handle_called_with_queue_queuec             C   sh   t  d¡ xBt| jƒD ]4}t ¡ }|  |d|  ¡ |f ¡ | ¡  | 	¡  qW |  
|jd| j d¡ d S )Nzmultiprocessing.synchronizez%s_%sr(  z&correct number of handled log messages)r   Úimport_modulerð   r™  Úmultiprocessingr  r˜  rî  r;   r9  rG   rš  )r6   r›  rr  r—  r8   r8   r9   Ú test_handle_called_with_mp_queueP  s    
z2QueueListenerTest.test_handle_called_with_mp_queuec             c   s0   yx|   ¡ V  qW W n tjk
r*   g S X d S )N)r„  r~  rƒ  )r—  r8   r8   r9   Úget_all_from_queue]  s
    z$QueueListenerTest.get_all_from_queuec             C   sŒ   t  d¡ x|t| jƒD ]n}t ¡ }|  |d|  ¡ |f ¡ t|  	|¡ƒ}| 
¡  | ¡  g tjjjgg}|  ||ddd„ |D ƒ ¡ qW d S )Nzmultiprocessing.synchronizez%s_%sz&Found unexpected messages in queue: %sc             S   s"   g | ]}t |tjƒr|jn|‘qS r8   )r»  r   r…  rË   )rq  rt   r8   r8   r9   rs  z  s   zJQueueListenerTest.test_no_messages_in_queue_after_stop.<locals>.<listcomp>)r   r  rð   r™  rž  r  r˜  rî  Úlistr   r;   r9  r   r2   r‰  Z	_sentinelr  )r6   rr  r~  r¶   rQ   r8   r8   r9   Ú$test_no_messages_in_queue_after_stope  s    	
z6QueueListenerTest.test_no_messages_in_queue_after_stopN)rX   rY   rZ   r™  Ústaticmethodr˜  r’  rn  r   r2   r‰  rœ  rŸ  r   r¢  r8   r8   r8   r9   r“  (  s   r“  c               @   s    e Zd Zdd„ ZeZdd„ ZdS )ÚUTCc             C   s   t S )N)ÚZERO)r6   Údtr8   r8   r9   Ú	utcoffset  s    zUTC.utcoffsetc             C   s   dS )Nr¤  r8   )r6   r¦  r8   r8   r9   Útzname†  s    z
UTC.tznameN)rX   rY   rZ   r§  Údstr¨  r8   r8   r8   r9   r¤  €  s   r¤  c               @   sF   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚFormatterTestc          	   C   s0   dt jtj ddd¡dd d dddœ| _i | _d S )	Nzformatter.testrÛ   Útoz	dummy.extr  zMessage with %d %s)rŽ   Zplaceholders)r7   r  ÚpathnameÚlinenorc  ÚfuncrË   rì   )r   r+   rÔ   rÛ   r   ÚcommonÚvariants)r6   r8   r8   r9   r:   Œ  s    
zFormatterTest.setUpNc             C   s,   t | jƒ}|d k	r"| | j| ¡ t |¡S )N)r²  r¯  r>   r°  r   r–   )r6   r7   Úresultr8   r8   r9   Ú
get_recordš  s    
zFormatterTest.get_recordc             C   s˜   |   ¡ }t d¡}|  | |¡d¡ t d¡}|  t|j|¡ |  | ¡ ¡ t d¡}|  	| ¡ ¡ t d¡}|  	| ¡ ¡ t d¡}|  | ¡ ¡ d S )Nz${%(message)s}z${Message with 2 placeholders}z
%(random)sz%(asctime)sz%(asctime)-15sÚasctime)
r²  r   r.   rG   rL  rÃ   r`  rÚ   ÚusesTimer5   )r6   r™   r˜   r8   r8   r9   Útest_percent   s    




zFormatterTest.test_percentc             C   sÈ   |   ¡ }tjddd}|  | |¡d¡ tjddd}|  t|j|¡ |  | ¡ ¡ tjddd}|  	| ¡ ¡ tjddd}|  	| ¡ ¡ tjddd}|  	| ¡ ¡ tjd	dd}|  | ¡ ¡ d S )
Nz$%{message}%$Ú{)r'  z$%Message with 2 placeholders%$z{random}z	{asctime}z{asctime!s:15}z{asctime:15}r³  )
r²  r   r.   rG   rL  rÃ   r`  rÚ   r´  r5   )r6   r™   r˜   r8   r8   r9   Útest_braces¯  s    zFormatterTest.test_bracesc             C   sè   |   ¡ }tjddd}|  | |¡d¡ tjddd}|  | |¡d¡ tjddd}|  t|j|¡ |  | ¡ ¡ tjddd}|  	| ¡ ¡ tjd	dd}|  | ¡ ¡ tjd
dd}|  	| ¡ ¡ tjddd}|  | ¡ ¡ d S )Nz$messager&  )r'  zMessage with 2 placeholdersz$$%${message}%$$z$%Message with 2 placeholders%$z	${random}z
${asctime}z	${asctimez$asctimer³  )
r²  r   r.   rG   rL  rÃ   r`  rÚ   r´  r5   )r6   r™   r˜   r8   r8   r9   Útest_dollarsÀ  s     zFormatterTest.test_dollarsc             C   s   |   ttjd d d¡ d S )NÚx)rÃ   rß   r   r.   )r6   r8   r8   r9   Útest_invalid_styleÓ  s    z FormatterTest.test_invalid_stylec          
   C   s   |   ¡ }t dddddddt¡}t | d ¡ ¡ ¡|_d|_t	 
d¡}tj|_|  | |¡d	¡ |  | |d
¡d¡ | |¡ |  |jd	¡ d S )NiÉ  rï   é   é   rW  r   é{   z%(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r²  ÚdatetimeÚutcrñ   ZmktimeZ
astimezoneZ	timetupleZcreatedZmsecsr   r.   ÚgmtimeZ	converterrG   Z
formatTimerL  r³  )r6   r™   r¦  r˜   r8   r8   r9   Ú	test_timeÖ  s    

zFormatterTest.test_time)N)
rX   rY   rZ   r:   r²  rµ  r·  r¸  rº  rÁ  r8   r8   r8   r9   rª  ‹  s   
rª  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestBufferingFormatterc             C   s   dt |ƒ S )Nz[(%d))rH   )r6   Úrecordsr8   r8   r9   ÚformatHeaderå  s    z#TestBufferingFormatter.formatHeaderc             C   s   dt |ƒ S )Nz(%d)])rH   )r6   rÃ  r8   r8   r9   ÚformatFooterè  s    z#TestBufferingFormatter.formatFooterN)rX   rY   rZ   rÄ  rÅ  r8   r8   r8   r9   rÂ  ä  s   rÂ  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBufferingFormatterTestc             C   s"   t  ddi¡t  ddi¡g| _d S )NrË   r•  r–  )r   r–   rÃ  )r6   r8   r8   r9   r:   ì  s    zBufferingFormatterTest.setUpc             C   s2   t  ¡ }|  d| g ¡¡ |  d| | j¡¡ d S )Nr   Zonetwo)r   ÚBufferingFormatterrG   rL  rÃ  )r6   r˜   r8   r8   r9   Útest_defaultò  s    z#BufferingFormatterTest.test_defaultc             C   sD   t ƒ }|  d| | j¡¡ t d¡}t |ƒ}|  d| | j¡¡ d S )Nz[(2)onetwo(2)]z<%(message)s>z[(2)<one><two>(2)])rÂ  rG   rL  rÃ  r   r.   )r6   r˜   Zlfr8   r8   r9   Útest_custom÷  s
    
z"BufferingFormatterTest.test_customN)rX   rY   rZ   r:   rÈ  rÉ  r8   r8   r8   r9   rÆ  ë  s   rÆ  c               @   s   e Zd Zdd„ ZdS )ÚExceptionTestc             C   s¦   | j }tƒ }| |¡ ytdƒ‚W n   tjddd Y nX | |¡ | ¡  |jd }|  	|j
 d¡¡ |  	|j
 d¡¡ |  	|j d¡¡ |  	|j d	¡¡ d S )
Nzdeliberate mistakeZfailedT)Ú
stack_infor   z#Traceback (most recent call last):
z!
RuntimeError: deliberate mistakezStack (most recent call last):
z,logging.exception('failed', stack_info=True))r$   ÚRecordingHandlerr4   r  r   r  r<   r;   rÃ  r5   Zexc_textrE  re  rË  )r6   r™   r@   r8   r8   r9   rˆ  ÿ  s    


zExceptionTest.test_formattingN)rX   rY   rZ   rˆ  r8   r8   r8   r9   rÊ  þ  s   rÊ  c               @   s   e Zd Zdd„ ZdS )ÚLastResortTestc          	   C   s,  | j }| | j¡ tj}tj}zît ¡ :}| d¡ |  	| 
¡ d¡ | d¡ |  	| 
¡ d¡ W d Q R X d t_t ¡ $}| d¡ d}|  	| 
¡ |¡ W d Q R X t ¡  }| d¡ |  	| 
¡ d¡ W d Q R X d|j_dt_t ¡  }| d¡ |  	| 
¡ d¡ W d Q R X W d | | j¡ |t_|t_X d S )NzThis should not appearr   zFinal chance!zFinal chance!
z-No handlers could be found for logger "root"
F)r$   r<   r-   r   Z
lastResortr  r   r  rs   rG   rE   rq   r   ZemittedNoHandlerWarningr4   )r6   r£  Zold_lastresortZold_raise_exceptionsr  rË   r8   r8   r9   Útest_last_resort  s4    








zLastResortTest.test_last_resortN)rX   rY   rZ   rÎ  r8   r8   r8   r9   rÍ    s   rÍ  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚFakeHandlerc          	   C   s(   x"dD ]}t | ||  |||¡ƒ qW d S )N)rÿ   Úflushr;   r  )ÚsetattrÚrecord_call)r6   Ú
identifierÚcalledrã   r8   r8   r9   r'  =  s    
zFakeHandler.__init__c                s   ‡ ‡‡fdd„}|S )Nc                  s   ˆ   d ˆˆ¡¡ d S )Nz{} - {})rg  rL  r8   )rÔ  rÓ  Úmethod_namer8   r9   ÚinnerB  s    z&FakeHandler.record_call.<locals>.innerr8   )r6   rÓ  rÕ  rÔ  rÖ  r8   )rÔ  rÓ  rÕ  r9   rÒ  A  s    zFakeHandler.record_callN)rX   rY   rZ   r'  rÒ  r8   r8   r8   r9   rÏ  ;  s   rÏ  c                   s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )rÌ  c                s   t t| ƒj||Ž g | _d S )N)r>  rÌ  r'  rÃ  )r6   rì   r€  )r?  r8   r9   r'  I  s    zRecordingHandler.__init__c             C   s   | j  |¡ d S )N)rÃ  rg  )r6   r‘   r8   r8   r9   rÙ   M  s    zRecordingHandler.handle)rX   rY   rZ   r'  rÙ   rB  r8   r8   )r?  r9   rÌ  G  s   rÌ  c                   s”   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Z‡  ZS )!ÚShutdownTestc                s.   t t| ƒ ¡  g | _tj}|  ttd|¡ d S )Nr  )r>  r×  r:   rÔ  r   r  r   rÑ  )r6   Zraise_exceptions)r?  r8   r9   r:   V  s    zShutdownTest.setUpc                s   ‡ fdd„}|S )Nc                  s
   ˆ ƒ ‚d S )Nr8   r8   )rp   r8   r9   rÖ  ^  s    z'ShutdownTest.raise_error.<locals>.innerr8   )r6   rp   rÖ  r8   )rp   r9   Úraise_error]  s    zShutdownTest.raise_errorc             C   sv   t d| jƒ}t d| jƒ}t d| jƒ}ttjj|||gƒ}tjt|ƒd ddddd	d
ddddddg}|  || j¡ d S )Nr   rU   rŽ   )ÚhandlerListz2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - closez0 - release)	rÏ  rÔ  r$  r   rð  rñ  r@  r¡  rG   )r6   Zhandler0Zhandler1Zhandler2r2   rQ   r8   r8   r9   Útest_no_failureb  s    zShutdownTest.test_no_failurec             C   sR   t d| jƒ}t|||  |¡ƒ tj |¡g}tjt|ƒd |  	d| jd ¡ d S )Nr   )rÙ  z0 - releaserÊ   )
rÏ  rÔ  rÑ  rØ  r   rð  rñ  r@  r¡  rG   )r6   rã   rp   rˆ   r2   r8   r8   r9   Ú_test_with_failure_in_methodr  s
    z)ShutdownTest._test_with_failure_in_methodc             C   s   |   dt¡ d S )Nrÿ   )rÛ  rÞ   )r6   r8   r8   r9   Útest_with_ioerror_in_acquire{  s    z)ShutdownTest.test_with_ioerror_in_acquirec             C   s   |   dt¡ d S )NrÐ  )rÛ  rÞ   )r6   r8   r8   r9   Útest_with_ioerror_in_flush~  s    z'ShutdownTest.test_with_ioerror_in_flushc             C   s   |   dt¡ d S )Nr;   )rÛ  rÞ   )r6   r8   r8   r9   Útest_with_ioerror_in_close  s    z'ShutdownTest.test_with_ioerror_in_closec             C   s   |   dt¡ d S )Nrÿ   )rÛ  rß   )r6   r8   r8   r9   Útest_with_valueerror_in_acquire„  s    z,ShutdownTest.test_with_valueerror_in_acquirec             C   s   |   dt¡ d S )NrÐ  )rÛ  rß   )r6   r8   r8   r9   Útest_with_valueerror_in_flush‡  s    z*ShutdownTest.test_with_valueerror_in_flushc             C   s   |   dt¡ d S )Nr;   )rÛ  rß   )r6   r8   r8   r9   Útest_with_valueerror_in_closeŠ  s    z*ShutdownTest.test_with_valueerror_in_closec             C   s   dt _|  dt¡ d S )NFrÿ   )r   r  rÛ  Ú
IndexError)r6   r8   r8   r9   Ú.test_with_other_error_in_acquire_without_raise  s    z;ShutdownTest.test_with_other_error_in_acquire_without_raisec             C   s   dt _|  dt¡ d S )NFrÐ  )r   r  rÛ  râ  )r6   r8   r8   r9   Ú,test_with_other_error_in_flush_without_raise‘  s    z9ShutdownTest.test_with_other_error_in_flush_without_raisec             C   s   dt _|  dt¡ d S )NFr;   )r   r  rÛ  râ  )r6   r8   r8   r9   Ú,test_with_other_error_in_close_without_raise•  s    z9ShutdownTest.test_with_other_error_in_close_without_raisec             C   s   dt _|  t| jdt¡ d S )NTrÿ   )r   r  rÃ   râ  rÛ  )r6   r8   r8   r9   Ú+test_with_other_error_in_acquire_with_raise™  s    
z8ShutdownTest.test_with_other_error_in_acquire_with_raisec             C   s   dt _|  t| jdt¡ d S )NTrÐ  )r   r  rÃ   râ  rÛ  )r6   r8   r8   r9   Ú)test_with_other_error_in_flush_with_raisež  s    
z6ShutdownTest.test_with_other_error_in_flush_with_raisec             C   s   dt _|  t| jdt¡ d S )NTr;   )r   r  rÃ   râ  rÛ  )r6   r8   r8   r9   Ú)test_with_other_error_in_close_with_raise£  s    
z6ShutdownTest.test_with_other_error_in_close_with_raise)rX   rY   rZ   r:   rØ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  rã  rä  rå  ræ  rç  rè  rB  r8   r8   )r?  r9   r×  R  s    	r×  c               @   sd   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zejdd„ ƒZdS )ÚModuleLevelMiscTestc             C   s`   t jjj}|  |d¡ |  t j|¡ t  d¡ |  t jjjd¡ t  ¡  |  t jjjt j¡ d S )Nr   éS   )r   r£  r   r?   rG   r   r_   )r6   Úold_disabler8   r8   r9   Útest_disable­  s    

z ModuleLevelMiscTest.test_disableNc                sÀ   g ‰ t  | td‡ fdd„¡ tƒ }tj |¡ tt|ƒ}|d k	rN||d|ƒ n
|d|ƒ |  t|j	ƒd¡ |j	d }|  | 
¡ d| ¡ |d k	r”|ntt| ¡ ƒ}|  |j|¡ |  ˆ g ¡ d S )NÚbasicConfigc                 s   ˆ   | |f¡S )N)rg  )ræ   Úkw)rÔ  r8   r9   Ú<lambda>¾  ó    z/ModuleLevelMiscTest._test_log.<locals>.<lambda>ztest me: %rrU   r   )r   r’  r   rÌ  r£  r4   r    rG   rH   rÃ  Z
getMessageÚupperr¯   )r6   rã   r  Ú	recordingÚ
log_methodr‘   Zexpected_levelr8   )rÔ  r9   Ú	_test_log»  s    



zModuleLevelMiscTest._test_logc             C   s   |   dtj¡ d S )Nro   )rô  r   ra   )r6   r8   r8   r9   Útest_logÓ  s    zModuleLevelMiscTest.test_logc             C   s   |   d¡ d S )Nrs   )rô  )r6   r8   r8   r9   Ú
test_debugÖ  s    zModuleLevelMiscTest.test_debugc             C   s   |   d¡ d S )Nrr   )rô  )r6   r8   r8   r9   Ú	test_infoÙ  s    zModuleLevelMiscTest.test_infoc             C   s   |   d¡ d S )Nrq   )rô  )r6   r8   r8   r9   Útest_warningÜ  s    z ModuleLevelMiscTest.test_warningc             C   s   |   d¡ d S )Nrp   )rô  )r6   r8   r8   r9   Ú
test_errorß  s    zModuleLevelMiscTest.test_errorc             C   s   |   d¡ d S )Nr˜  )rô  )r6   r8   r8   r9   Útest_criticalâ  s    z!ModuleLevelMiscTest.test_criticalc             C   s^   |   ttjt¡ G dd„ dtjƒ}t |¡ |  t ¡ |¡ t tj¡ |  t ¡ tj¡ d S )Nc               @   s   e Zd ZdS )z;ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggerN)rX   rY   rZ   r8   r8   r8   r9   rg  è  s   rg  )rÃ   rj  r   rk  rn  rh  rG   ZgetLoggerClass)r6   rg  r8   r8   r9   Útest_set_logger_classå  s    
z)ModuleLevelMiscTest.test_set_logger_classc             C   s8   d}t d|ƒ\}}}| ¡ }|  d|¡ |  d|¡ d S )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-czexception in __del__zValueError: some error)r   ré  r  )r6   ÚcodeZrcÚoutÚerrr8   r8   r9   Útest_logging_at_shutdownñ  s
    z,ModuleLevelMiscTest.test_logging_at_shutdown)N)rX   rY   rZ   rì  rô  rõ  rö  r÷  rø  rù  rú  rû  r   Zrequires_type_collectingrÿ  r8   r8   r8   r9   ré  ©  s   
ré  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚLogRecordTestc             C   s6   t  i ¡}t|ƒ}|  | d¡¡ |  | d¡¡ d S )Nz<LogRecord: ú>)r   r–   rp  r5   rE  re  )r6   r™   rS   r8   r8   r9   Útest_str_rep  s    
zLogRecordTest.test_str_repc             C   sj   t ƒ }t ¡ }| |¡ ddi}t d|¡ |  |jd j|¡ |  |jd j	d¡ | 
|¡ | ¡  d S )NZlessZmorezless is %(less)sr   zless is more)rÌ  r   r   r4   rq   r  rÃ  rì   rG   r  r<   r;   )r6   r@   r™   rë  r8   r8   r9   Útest_dict_arg  s    

zLogRecordTest.test_dict_argc             C   s\   t  i ¡}|  |jd¡ y*dd l}t  i ¡}|  |j| ¡ j¡ W n tk
rV   Y nX d S )NZMainProcessr   )r   r–   rG   ÚprocessNamerž  Zcurrent_processr7   ræ  )r6   r™   Zmpr8   r8   r9   Útest_multiprocessing  s    

z"LogRecordTest.test_multiprocessingc             C   s²   t  i ¡}| j}||jƒ ||jƒ ||jƒ ||jƒ t j}t j}t j	}zNdt _dt _dt _	t  i ¡}| j
}||jƒ ||jƒ ||jƒ ||jƒ W d |t _|t _|t _	X d S )NF)r   r–   ÚassertIsNotNoneZthreadZ
threadNameÚprocessr  Ú
logThreadsÚlogProcessesÚlogMultiprocessingr   )r6   r™   ZNOT_NONEZlog_threadsZlog_processesZlog_multiprocessingZNONEr8   r8   r9   Útest_optional!  s,    








zLogRecordTest.test_optionalN)rX   rY   rZ   r  r  r  r  r8   r8   r8   r9   r     s   
r   c                   sÊ   e Zd Z‡ fdd„Z‡ fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd.d d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Z‡  ZS )/ÚBasicConfigTestc                sV   t t| ƒ ¡  tjj| _tj ¡ | _tj	d d … | _
tjj| _|  | j¡ g tj_d S )N)r>  r  r:   r   r£  r2   r   r   r   r   r   r  r&   r   rž  )r6   )r?  r8   r9   r:   >  s    

zBasicConfigTest.setUpc                s@   x,t jjd d … D ]}t j |¡ | ¡  qW tt| ƒ ¡  d S )N)r   r£  r2   r<   r;   r>  r  rA   )r6   r@   )r?  r8   r9   rA   G  s    zBasicConfigTest.tearDownc             C   sF   t tjd| jƒ tj ¡  tj | j¡ | jtj	d d …< | j
tj_d S )Nr2   )rÑ  r   r£  r2   r   r=   r>   r   r   r   r&   r  )r6   r8   r8   r9   rž  M  s
    
zBasicConfigTest.cleanupc             C   s   t  ¡  |  tt jjƒd¡ t jjd }|  |t j¡ |  |jt	j
¡ |j}|  |jjt j¡ |  |j¡ |  |jt j¡ |  t jj| j¡ d S )NrU   r   )r   rí  rG   rH   r£  r2   r  r,   r)   rÐ   r  r  rT  Ú_fmtZBASIC_FORMATr   r«  ÚPercentStyler  r&   )r6   rˆ   r  r8   r8   r9   Útest_no_kwargsT  s    zBasicConfigTest.test_no_kwargsc          	   C   sR   t  ¡ @}tjtjdd t d¡ tj d¡ |  | 	¡  
¡ d¡ W d Q R X d S )Nr¶  )r)   r'  zLog an errorr   zERROR:root:Log an error)r   rƒ  r   rí  rÐ   r  rp   r‘  rG   rE   r°  )r6   r…  r8   r8   r9   Útest_strformatstyleh  s    

z#BasicConfigTest.test_strformatstylec          	   C   sR   t  ¡ @}tjtjdd t d¡ tj d¡ |  | 	¡  
¡ d¡ W d Q R X d S )Nr&  )r)   r'  zLog an errorr   zERROR:root:Log an error)r   rƒ  r   rí  rÐ   r  rp   r‘  rG   rE   r°  )r6   r…  r8   r8   r9   Útest_stringtemplatestylep  s    

z(BasicConfigTest.test_stringtemplatestylec             C   sŠ   dd„ }t jdd |  tt jjƒd¡ t jjd }|  |t j¡ t  dd¡}|  |jj	|jj	¡ |  |jj
|jj
¡ |  |||d¡ d S )Nc             S   s   |   ¡  |  ¡  t |¡ d S )N)r;   rÔ   rœ  )r  Úh2râ   r8   r8   r9   rž  z  s    z.BasicConfigTest.test_filename.<locals>.cleanupztest.log)rE  rU   r   ræ   )r   rí  rG   rH   r£  r2   r  rè   r)   Úmoder7   r   )r6   rž  rˆ   rQ   r8   r8   r9   Útest_filenamex  s    zBasicConfigTest.test_filenamec             C   sV   dd„ }t jddd t jjd }t  dd¡}|  |jj|jj¡ |  |||d¡ d S )Nc             S   s   |   ¡  |  ¡  t |¡ d S )N)r;   rÔ   rœ  )r  r  râ   r8   r8   r9   rž  Œ  s    z.BasicConfigTest.test_filemode.<locals>.cleanupztest.logÚwb)rE  Úfilemoder   )	r   rí  r£  r2   rè   rG   r)   r  r   )r6   rž  rˆ   rQ   r8   r8   r9   Útest_filemodeŠ  s    zBasicConfigTest.test_filemodec             C   s`   t  ¡ }|  |j¡ tj|d |  ttjj	ƒd¡ tjj	d }|  
|tj¡ |  |j|¡ d S )N)r)   rU   r   )r'   r(   r   r;   r   rí  rG   rH   r£  r2   r  r,   r)   )r6   r)   rˆ   r8   r8   r9   Útest_stream˜  s    zBasicConfigTest.test_streamc             C   s.   t jdd t jjd j}|  |jjd¡ d S )Nrá  )rL  r   )r   rí  r£  r2   r  rG   rT  r  )r6   r  r8   r8   r9   Útest_format¢  s    zBasicConfigTest.test_formatc             C   s,   t jdd t jjd j}|  |jd¡ d S )Nrâ  )r«  r   )r   rí  r£  r2   r  rG   r«  )r6   r  r8   r8   r9   Útest_datefmt¨  s    zBasicConfigTest.test_datefmtc             C   s.   t jdd t jjd j}|  |jt j¡ d S )Nr&  )r'  r   )r   rí  r£  r2   r  r  rT  rU  )r6   r  r8   r8   r9   Ú
test_style®  s    zBasicConfigTest.test_stylec             C   sT   t jj}|  t jj|¡ t jdd |  t jjd¡ t jdd |  t jjd¡ d S )Né9   )r  é:   )r   r£  r  r   r*   rí  rG   )r6   Ú	old_levelr8   r8   r9   Ú
test_level´  s    zBasicConfigTest.test_levelc             C   sp   | j }t ¡ g}tj}|ttjd|d |ttjd|d |ttj||d |ttjtjd tjd dd d S )Nztest.log)rE  r)   )rE  r2   )r)   r2   )Zloglevelræ   )rE  r  )rÃ   r   r,   rÐ   r  rß   rí  rg   )r6   rÃ   r2   r)   r8   r8   r9   Útest_incompatible¾  s    



z!BasicConfigTest.test_incompatiblec             C   sÒ   t  ¡ t  tj¡t  ¡ g}t  ¡ }|d  |¡ t j|d |  |d t jj	d ¡ |  |d t jj	d ¡ |  |d t jj	d ¡ |  
|d j¡ |  
|d j¡ |  |d j|¡ |  |d j|d j¡ d S )NrŽ   )r2   r   rU   )r   r,   rÐ   r  r.   r0   rí  r  r£  r2   r  r  )r6   r2   r˜   r8   r8   r9   Útest_handlersÍ  s    

zBasicConfigTest.test_handlersNc                sf   g ‰ t j‰‡ ‡‡fdd„}t ˆt d|¡ tt |ƒ}|d k	rH||dƒ n|dƒ ˆ ˆ di fg¡ d S )Nc                 s<   ˆƒ  t jj}t j d¡ ˆ t jj|¡ ˆ  | |f¡ d S )Néd   )r   r£  r  r*   r   rg  )ræ   rî  r  )rÔ  Úold_basic_configr6   r8   r9   Úmy_basic_configã  s
    z2BasicConfigTest._test_log.<locals>.my_basic_configrí  ztest mer8   )r   rí  r   r’  r    rG   )r6   rã   r  r$  ró  r8   )rÔ  r#  r6   r9   rô  Þ  s    
zBasicConfigTest._test_logc             C   s   |   dtj¡ d S )Nro   )rô  r   re   )r6   r8   r8   r9   rõ  õ  s    zBasicConfigTest.test_logc             C   s   |   d¡ d S )Nrs   )rô  )r6   r8   r8   r9   rö  ø  s    zBasicConfigTest.test_debugc             C   s   |   d¡ d S )Nrr   )rô  )r6   r8   r8   r9   r÷  û  s    zBasicConfigTest.test_infoc             C   s   |   d¡ d S )Nrq   )rô  )r6   r8   r8   r9   rø  þ  s    zBasicConfigTest.test_warningc             C   s   |   d¡ d S )Nrp   )rô  )r6   r8   r8   r9   rù    s    zBasicConfigTest.test_errorc             C   s   |   d¡ d S )Nr˜  )rô  )r6   r8   r8   r9   rú    s    zBasicConfigTest.test_critical)N)rX   rY   rZ   r:   rA   rž  r  r  r  r  r  r  r  r  r  r  r   r!  rô  rõ  rö  r÷  rø  rù  rú  rB  r8   r8   )r?  r9   r  :  s,   	


r  c                   sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚLoggerAdapterTestc                s’   t t| ƒ ¡  tjd d … ‰ tƒ | _tj| _| j 	| j¡ |  
| jj| j¡ |  
| jj¡ ‡ fdd„}|  
|¡ |  
tj¡ tj| jd d| _d S )Nc                  s   ˆ t jd d …< d S )N)r   r   r8   )Úold_handler_listr8   r9   rž    s    z(LoggerAdapterTest.setUp.<locals>.cleanup)rº   rd  )r>  r%  r:   r   r   rÌ  rò  r£  rº   r4   r   r<   r;   r@  rn   Úadapter)r6   rž  )r?  )r&  r9   r:   	  s    
zLoggerAdapterTest.setUpc          
   C   s¸   d}d }ydd  W n6 t k
rJ } z|}| j || j¡ W d d }~X Y nX |  t| jjƒd¡ | jjd }|  |jtj	¡ |  |j
|¡ |  |j| jf¡ |  |j|j||jf¡ d S )Nztesting exception: %rrU   r   )r  r'  r  rò  rG   rH   rÃ  r¯   r   ra   rË   rì   rc  r?  Ú__traceback__)r6   rË   r  rP  r‘   r8   r8   r9   Útest_exception  s    "z LoggerAdapterTest.test_exceptionc          
   C   s€   ydd  W n& t k
r2 } z|}W d d }~X Y nX | jjd|d |  t| jjƒd¡ | jjd }|  |j|j||j	f¡ d S )NrU   r   zexc_info test)rc  )
r  r'  r  rG   rH   rò  rÃ  rc  r?  r(  )r6   rP  r  r‘   r8   r8   r9   Útest_exception_excinfo+  s    z(LoggerAdapterTest.test_exception_excinfoc             C   sh   d}| j  || j¡ |  t| jjƒd¡ | jjd }|  |jtj¡ |  |j	|¡ |  |j
| jf¡ d S )Nzcritical test! %rrU   r   )r'  r˜  rò  rG   rH   rÃ  r¯   r   r_   rË   rì   )r6   rË   r‘   r8   r8   r9   rú  8  s    zLoggerAdapterTest.test_criticalc             C   sD   | j jjj}d| j jj_|  t| j jjd|¡ |  | j  d¡¡ d S )Né!   r?   é    )r'  rº   r   r?   r   rÑ  rÚ   ÚisEnabledFor)r6   rë  r8   r8   r9   Útest_is_enabled_forB  s
    z%LoggerAdapterTest.test_is_enabled_forc             C   sR   |   | j ¡ ¡ x| jjD ]}| j |¡ qW |  | j ¡ ¡ |  | j ¡ ¡ d S )N)r5   r'  r1   rº   r2   r<   rÚ   )r6   rˆ   r8   r8   r9   Útest_has_handlersI  s
    z#LoggerAdapterTest.test_has_handlersc             C   sL  G dd„ dt jƒ}d}|| jd d}||d d}d|_|  t|ƒt|ƒ¡ | t j|| j¡ |  t	| jj
ƒd¡ | jj
d }|  |jt j¡ |  |jd|› ¡ |  |j| jf¡ |j}|  |j|¡ |  | jj|¡ tƒ }z6||_|  |j|¡ |  |j|¡ |  | jj|¡ W d ||_X |  |j|¡ |  |j|¡ |  | jj|¡ d S )	Nc               @   s   e Zd ZdZdd„ ZdS )z.LoggerAdapterTest.test_nested.<locals>.AdapterÚAdapterc             S   s   | j › d|› |fS )Nú )r“   )r6   rË   r€  r8   r8   r9   r  V  s    z6LoggerAdapterTest.test_nested.<locals>.Adapter.processN)rX   rY   rZ   r“   r  r8   r8   r8   r9   r0  S  s   r0  zAdapters can be nested, yo.)rº   rd  ZAdapterAdapterrU   r   zAdapter AdapterAdapter )r   rn   rº   r“   rG   rï  ro   r_   rò  rH   rÃ  r¯   rË   rì   r   r  rn  )r6   r0  rË   r'  Zadapter_adapterr‘   Zorig_managerZtemp_managerr8   r8   r9   Útest_nestedR  s2    zLoggerAdapterTest.test_nested)rX   rY   rZ   r:   r)  r*  rú  r.  r/  r2  rB  r8   r8   )r?  r9   r%    s   
	r%  c                   sŒ   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )Ú
LoggerTestc                sb   t t| ƒ ¡  tƒ | _tjdd| _| j | j¡ |  	| jj
| j¡ |  	| jj¡ |  	tj¡ d S )NZblah)r7   )r>  r3  r:   rÌ  rò  r   rh  rº   r4   r   r<   r;   r@  )r6   )r?  r8   r9   r:   v  s    zLoggerTest.setUpc             C   s   |   t| jjtƒ ¡ d S )N)rÃ   rj  rº   r*   rn  )r6   r8   r8   r9   Útest_set_invalid_level  s    z!LoggerTest.test_set_invalid_levelc          
   C   s¸   d}d }ydd  W n6 t k
rJ } z|}| j || j¡ W d d }~X Y nX |  t| jjƒd¡ | jjd }|  |jtj	¡ |  |j
|¡ |  |j| jf¡ |  |j|j||jf¡ d S )Nztesting exception: %rrU   r   )r  rº   r  rò  rG   rH   rÃ  r¯   r   ra   rË   rì   rc  r?  r(  )r6   rË   r  rP  r‘   r8   r8   r9   r)  ‚  s    "zLoggerTest.test_exceptionc          	   C   s2   t  tdd¡ |  t| jjdd¡ W d Q R X d S )Nr  Trl   ztest message)r   Ú	swap_attrr   rÃ   rj  rº   ro   )r6   r8   r8   r9   Ú!test_log_invalid_level_with_raise“  s    z,LoggerTest.test_log_invalid_level_with_raisec          	   C   s,   t  tdd¡ | j dd¡ W d Q R X d S )Nr  Frl   ztest message)r   r5  r   rº   ro   )r6   r8   r8   r9   Útest_log_invalid_level_no_raise—  s    z*LoggerTest.test_log_invalid_level_no_raisec                sP   g ‰ t  | tjd‡ fdd„¡ | jjdd |  tˆ ƒd¡ |  dˆ d ¡ d S )	NÚprint_stackc                s   ˆ   | ¡ ¡S )N)rg  rE   )r˜   r  )rÔ  r8   r9   rï  ž  rð  z=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>T)rË  rU   zStack (most recent call last):
r   )r   r’  r   Ú	tracebackrº   Z
findCallerrG   rH   )r6   r8   )rÔ  r9   Ú test_find_caller_with_stack_info›  s    z+LoggerTest.test_find_caller_with_stack_infoc             C   sŠ   d}d}d  } } } } } }}	t  |||||||||	¡	}
xFdt|
j ¡ ƒ D ]0}|di}| jt| jj|||||||||	d qRW d S )Nz	my recordé   )r  r³  z
some value)rd  Úsinfo)	r   Z_logRecordFactoryrL   Ú__dict__ÚkeysrÃ   r`  rº   Ú
makeRecord)r6   r7   r  râ   ÚlnorË   rì   rc  r®  r<  Úrvrò  rd  r8   r8   r9   Ú%test_make_record_with_extra_overwrite¥  s    

z0LoggerTest.test_make_record_with_extra_overwritec             C   s\   d}d}d  } } } } } }}	ddi}
| j j||||||||
|	d	}|  d|j¡ d S )Nz	my recordr;  Z	valid_keyz
some value)rd  r<  )rº   r?  r  r=  )r6   r7   r  râ   r@  rË   rì   rc  r®  r<  rd  r±  r8   r8   r9   Ú(test_make_record_with_extra_no_overwrite²  s    z3LoggerTest.test_make_record_with_extra_no_overwritec             C   sB   |   | j ¡ ¡ x| jjD ]}| j |¡ qW |  | j ¡ ¡ d S )N)r5   rº   r1   r2   r<   rÚ   )r6   rˆ   r8   r8   r9   r/  »  s    zLoggerTest.test_has_handlersc             C   s"   t  d¡}d|_|  | ¡ ¡ d S )Nz
blah.childF)r   r   rm  rÚ   r1   )r6   Zchild_loggerr8   r8   r9   Útest_has_handlers_no_propagateÂ  s    
z)LoggerTest.test_has_handlers_no_propagatec             C   s>   | j jj}d| j j_|  t| j jd|¡ |  | j  d¡¡ d S )Né   r?   é   )rº   r   r?   r   rÑ  rÚ   r-  )r6   rë  r8   r8   r9   r.  Ç  s    

zLoggerTest.test_is_enabled_forc             C   s    t  ¡ }|  |t j¡ |  |t  d ¡¡ |  |t  d¡¡ |  |t  d¡j¡ |  |t  d¡j¡ |  |t  d¡j¡ |  |t  d¡¡ |  |t  d¡j¡ d S )Nr   rá  zfoo.barú )r   r   r  r£  ÚparentZassertIsNot)r6   r£  r8   r8   r9   Útest_root_logger_aliasesÍ  s    z#LoggerTest.test_root_logger_aliasesc             C   s$   |   ttjt¡ |   ttjd¡ d S )Ns   foo)rÃ   rj  r   r   Úany)r6   r8   r8   r9   Útest_invalid_namesÙ  s    zLoggerTest.test_invalid_namesc             C   sV   xPt tjd ƒD ]>}x8dD ]0}t |¡}t ||¡}t |¡}|  ||¡ qW qW d S )NrU   )r   r£  rá  zfoo.barzbaz.bar)rð   rÂ  ZHIGHEST_PROTOCOLr   r   rL  rÃ  r  )r6   Úprotor7   rº   rS   Z	unpickledr8   r8   r9   Útest_picklingÝ  s    


zLoggerTest.test_picklingc             C   s6  | j }t d¡}t d¡}| tj¡ |  | ¡ tj¡ |  |ji ¡ |  | 	tj¡¡ |  
| 	tj¡¡ |  |jtjdtjdi¡ |  |ji ¡ |  | 	tj¡¡ |  |ji ¡ |  | 	tj¡¡ |  |jtjdi¡ | tj¡ |  | ¡ tj¡ |  |ji ¡ |  
| 	tj¡¡ | tj¡ |  | ¡ tj¡ |  |ji ¡ |  |ji ¡ |  |ji ¡ |  
| 	tj¡¡ |  | 	tj¡¡ |  
| 	tj¡¡ |  | 	tj¡¡ |  | 	tj¡¡ t ¡  |  | ¡ tj¡ |  |ji ¡ |  |ji ¡ |  |ji ¡ |  
| 	tj¡¡ |  
| 	tj¡¡ |  
| 	tj¡¡ d S )Nrr  zabc.defTF)r$   r   r   r*   ra   rG   r%   Ú_cacher5   r-  rÚ   r+   r_   r‚   r?   )r6   r£  r"   r#   r8   r8   r9   Útest_cachingå  sH    

zLoggerTest.test_caching)rX   rY   rZ   r:   r4  r)  r6  r7  r:  rB  rC  r/  rD  r.  rI  rK  rM  rO  rB  r8   r8   )r?  r9   r3  t  s   	
	r3  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBaseFileTestc             C   s0   t  | ¡ t dd¡\}| _t |¡ g | _d S )Nz.logztest_logging-2-)r   r:   rÒ   rÓ   râ   rÔ   r;   Úrmfiles)r6   rá   r8   r8   r9   r:   !  s    

zBaseFileTest.setUpc             C   sB   x| j D ]}t |¡ qW tj | j¡r4t | j¡ t | ¡ d S )N)rQ  rÔ   rÕ   rÛ   rÜ   râ   r   rA   )r6   râ   r8   r8   r9   rA   '  s
    zBaseFileTest.tearDownc             C   s*   | j tj |¡d| d | j |¡ d S )NzLog file %r does not exist)rË   )r5   rÔ   rÛ   rÜ   rQ  rg  )r6   rE  r8   r8   r9   ÚassertLogFile.  s    zBaseFileTest.assertLogFileN)rX   rY   rZ   r:   rA   rR  r8   r8   r8   r9   rP    s   rP  c               @   s   e Zd Zdd„ ZdS )ÚFileHandlerTestc             C   sx   t  | j¡ tj| jdd}|  |j¡ |  t j 	| j¡¡ | 
t i ¡¡ |  |j¡ |  t j 	| j¡¡ | ¡  d S )NT)rÉ   )rÔ   rÕ   râ   r   rè   r   r)   rÚ   rÛ   rÜ   rÙ   r–   r  r5   r;   )r6   Úfhr8   r8   r9   Ú
test_delay6  s    zFileHandlerTest.test_delayN)rX   rY   rZ   rU  r8   r8   r8   r9   rS  5  s   rS  c               @   sB   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	dd„ ƒZ
dS )ÚRotatingFileHandlerTestc          
   C   s   t  dt jdd|  ¡ d d d ¡S )Nru  r^  rU   )r   r…  r+   rW   )r6   r8   r8   r9   Únext_recA  s    z RotatingFileHandlerTest.next_recc             C   s.   t jj| jdd}|  | d ¡¡ | ¡  d S )Nr   )ÚmaxBytes)r   r2   ré   râ   rÚ   ÚshouldRolloverr;   )r6   Úrhr8   r8   r9   Útest_should_not_rolloverE  s    z0RotatingFileHandlerTest.test_should_not_rolloverc             C   s2   t jj| jdd}|  | |  ¡ ¡¡ | ¡  d S )NrU   )rX  )r   r2   ré   râ   r5   rY  rW  r;   )r6   rZ  r8   r8   r9   Útest_should_rolloverK  s    z,RotatingFileHandlerTest.test_should_rolloverc             C   s4   t j | j¡}| |  ¡ ¡ |  | j¡ | ¡  d S )N)r   r2   ré   râ   rÅ   rW  rR  r;   )r6   rZ  r8   r8   r9   Útest_file_createdP  s    z)RotatingFileHandlerTest.test_file_createdc             C   s¨   dd„ }t jj| jddd}||_| |  ¡ ¡ |  | j¡ | |  ¡ ¡ |  || jd ƒ¡ | |  ¡ ¡ |  || jd ƒ¡ |  t	j
 || jd ƒ¡¡ | ¡  d S )	Nc             S   s   | d S )Nz.testr8   )r7   r8   r8   r9   ÚnamerY  s    z>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namerrŽ   rU   )ÚbackupCountrX  z.1z.2z.3)r   r2   ré   râ   r^  rÅ   rW  rR  rÚ   rÔ   rÛ   rÜ   r;   )r6   r^  rZ  r8   r8   r9   Útest_rollover_filenamesX  s    z/RotatingFileHandlerTest.test_rollover_filenamesc          	   C   s¨  dd„ }dd„ }t jj| jddd}||_||_|  ¡ }| |¡ |  | j¡ |  ¡ }| |¡ || jd ƒ}|  |¡ t	j
}t|d	ƒ0}| ¡ }	t |	¡}
|  |
 d
¡|j| ¡ W d Q R X | |  ¡ ¡ || jd ƒ}|  |¡ t|d	ƒ0}| ¡ }	t |	¡}
|  |
 d
¡|j| ¡ W d Q R X | |  ¡ ¡ || jd ƒ}t|d	ƒ0}| ¡ }	t |	¡}
|  |
 d
¡|j| ¡ W d Q R X |  t	j || jd ƒ¡¡ | ¡  d S )Nc             S   s   | d S )Nz.gzr8   )r7   r8   r8   r9   r^  i  s    z3RotatingFileHandlerTest.test_rotator.<locals>.namerc          
   S   sX   t | dƒ:}| ¡ }t |d¡}t |dƒ}| |¡ W d Q R X W d Q R X t | ¡ d S )NÚrbro  r  )rû  rN   ÚzlibÚcompressr  rÔ   rœ  )ÚsourceÚdestZsfr  Ú
compressedZdfr8   r8   r9   Úrotatorl  s    z5RotatingFileHandlerTest.test_rotator.<locals>.rotatorrŽ   rU   )r_  rX  z.1ra  rª  z.2z.3)r   r2   ré   râ   rg  r^  rW  rÅ   rR  rÔ   Úlineseprû  rN   rb  Z
decompressrG   ré  rË   rÚ   rÛ   rÜ   r;   )r6   r^  rg  rZ  Zm1Zm2râ   Únewliner˜   rf  r  r8   r8   r9   Útest_rotatorg  sB    



"

"
"z$RotatingFileHandlerTest.test_rotatorN)rX   rY   rZ   rW  r[  r\  r]  r`  r   Zrequires_zlibrj  r8   r8   r8   r9   rV  @  s   rV  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTimedRotatingFileHandlerTestc          
      s˜  t jj| jddd}t  d¡}| |¡ t  ddi¡}| |¡ |  | j¡ t	 
d¡ t  ddi¡}| |¡ | ¡  d	}tj ¡ }d
}xNt|ƒD ]B}|tj|d }	| j|	 d¡ ‰ tj ˆ ¡}|r’| j ˆ ¡ P q’W d| }
|s†tj | j¡\}‰ ‡ fdd„t |¡D ƒ}td| d¡ tjd td| tjd xJ|D ]B}td| ƒ tj ||¡}t|dƒ}t| ¡ ƒ W d Q R X q@W | j||
d d S )NÚSrU   )r_  z%(asctime)s %(message)srË   ztesting - initialgš™™™™™ñ?ztesting - after delayFi,  )Úsecondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondsc                s   g | ]}|  ˆ ¡r|‘qS r8   )rE  )rq  r˜   )râ   r8   r9   rs  ¶  s    z>TimedRotatingFileHandlerTest.test_rollover.<locals>.<listcomp>zTest time: %sz%Y-%m-%d %H-%M-%S)r  zThe only matching files are: %szContents of %s:r™   )rË   )r   r2   rê   râ   r.   r0   r–   rÅ   rR  rñ   ró   r;   r¾  rË  rð   Ú	timedeltaZstrftimerÔ   rÛ   rÜ   rQ  rg  r   Úlistdirrü   rÐ   r  r   rû  rN   r5   )r6   rT  ZfmtZr1Zr2ÚfoundrË  ÚGO_BACKÚsecsÚprevrË   ZdnÚfilesr˜   rÛ   Ztfr8   )râ   r9   Útest_rollover–  sB    






z*TimedRotatingFileHandlerTest.test_rolloverc             C   sR   | j }|ttjj| jddd |ttjj| jddd |ttjj| jddd d S )NÚXT)rÉ   ÚWZW7)rÃ   rß   r   r2   rê   râ   )r6   rÃ   r8   r8   r9   Útest_invalidÀ  s    


z)TimedRotatingFileHandlerTest.test_invalidc             C   sx   d}t  ddd¡}tjj| jdddd|d}z<| |¡}|  ||d ¡ | |d ¡}|  ||d	 ¡ W d | ¡  X d S )
Nr   é   ÚMIDNIGHTrU   T)ÚwhenÚintervalr_  r¿  ÚatTimeiÀ¨  iÐ¶  i@ú )	r¾  rñ   r   r2   rê   râ   ÚcomputeRolloverrG   r;   )r6   ÚcurrentTimer}  rZ  rP   r8   r8   r9   Ú"test_compute_rollover_daily_attimeÉ  s    
z?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attimec       	   	   C   s6  t t ¡ ƒ}||d  }t ddd¡}t |¡j}xþtdƒD ]ò}tjj| j	d| ddd|d}zÄ||krvd| | }n|| }|d9 }|d	7 }||7 }| 
|¡}||krÄtd
tj ƒ tdtƒ  ƒ |  ||¡ ||krà|d7 }| 
|d ¡}||krtd
tj ƒ tdtƒ  ƒ |  ||¡ W d | ¡  X q<W d S )Ni€Q ry  r   r  zW%drU   T)r{  r|  r_  r¿  r}  iÀ¨  zfailed in timezone: %dzlocal vars: %si€:	 iÐ¶  )rÞ  rñ   r¾  rÀ  Ztm_wdayrð   r   r2   rê   râ   r~  rü   ZtimezoneÚlocalsrG   r;   )	r6   r  Ztodayr}  ZwdayZdayrZ  rQ   rP   r8   r8   r9   Ú#test_compute_rollover_weekly_attimeÙ  s8    

z@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attimeN)rX   rY   rZ   ru  rx  r€  r‚  r8   r8   r8   r9   rk  ”  s   *	rk  c              K   s   t jf | Žt jdd S )NrU   )rm  )r¾  rn  )rî  r8   r8   r9   rr    s    rr  )rl  rU   )ÚMé<   )ÚHi  )ÚDi€Q )rz  i€Q ZW0rï   é   )ZdaysZhoursc             C   sR  t jj| j|dddd}d}| |¡}||kr:|dkr:yÎ|jrNt |¡}n
t |¡}|d }|d }|d	 }	t jj	|d
 | d
 |	  }
||
 }t
d||jf tjd t
d| tjd t
d| tjd t
d|	 tjd t
d|
 tjd t
d| tjd W n0 tk
r8   t
dt ¡ d  tjd Y nX |  ||¡ | ¡  d S )NrU   r   T)r{  r|  r_  r¿  g        rz  rW  rï   r(  r„  z
t: %s (%s))r  zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)r   r2   rê   râ   r~  r¿  rñ   rÀ  Z	localtimeZ	_MIDNIGHTrü   rÐ   r  rû   rc  rG   r;   )r6   r{  ÚexprZ  r  rP   r6  ZcurrentHourZcurrentMinuteZcurrentSecondr™   r±  r8   r8   r9   Útest_compute_rollover  s6    



 r‰  ztest_compute_rollover_%sz>win32evtlog/win32evtlogutil/pywintypes required for this test.c               @   s   e Zd Zdd„ ZdS )ÚNTEventLogHandlerTestc          
   C   s
  d}t  d |¡}t  |¡}ytj d¡}W n: tjk
rd } z|jdkrRt	 
d¡‚‚ W d d }~X Y nX t ddi¡}| |¡ | ¡  |  |t  |¡¡ t jt jB }d}d}	t  |||	¡}
x4|
D ],}|jdkrÐqÀt ||¡}|d	kræqÀd
}P qÀW d|	 }| j||d d S )NZApplicationZtest_loggingr(  z#Insufficient privileges to run testrË   zTest Log MessageFr"  zTest Log Message
Tz3Record not found in event log, went back %d records)rË   )Úwin32evtlogZOpenEventLogZGetNumberOfEventLogRecordsr   r2   ZNTEventLogHandlerÚ
pywintypesrp   Úwinerrorr  ZSkipTestr–   rÙ   r;   Z
assertLessZEVENTLOG_BACKWARDS_READZEVENTLOG_SEQUENTIAL_READZReadEventLogZ
SourceNameÚwin32evtlogutilZSafeFormatMessager5   )r6   ZlogtypeZelhZnum_recsr@   rP  r™   Úflagsrp  rq  ZeventsrË   r8   r8   r9   rf  3  s8    





z NTEventLogHandlerTest.test_basicN)rX   rY   rZ   rf  r8   r8   r8   r9   rŠ  1  s   rŠ  c               @   s   e Zd Zdd„ ZdS )ÚMiscTestCasec             C   s2   ddddddddd	d
dddh}t j| t|d d S )Nr  r
  r	  Zcurrentframer  ZStrFormatStylerU  ZFiltererZPlaceHolderri  Z
RootLoggerr£  rø   )Ú	blacklist)r   Zcheck__all__r   )r6   r‘  r8   r8   r9   Útest__all__V  s    zMiscTestCase.test__all__N)rX   rY   rZ   r’  r8   r8   r8   r9   r  U  s   r  ÚLC_ALLr   c           '   C   sv   t ttttttttt	t
tttttttttttttttttttttt t!t"t#t$t%t&g'} t't(j)dƒrh|  *t+¡ t,j-| Ž  d S )Nr‰  ).r[   rƒ   r´   rÀ   rh  rz  rµ  rÏ  rì  rø  r  r  rb  rª  rÆ  r  rx  rq  r}  r×  ré  r  r%  r3  r`  rS  rV  rÍ  r   rÊ  rÔ  rØ  rÚ  rŠ  rk  rÎ  rÓ  r×  r  r  r   r2   rg  r“  r   Zrun_unittest)Ztestsr8   r8   r9   Ú	test_mainb  s    
r”  Ú__main__)N)˜r   Zlogging.handlersZlogging.configr  r‡  r¾  rç   rÂ  r'   rô  rK  rÔ   r~  rô   rB   r  r(  rÀ  rÐ   rÒ   Ztest.support.script_helperr   rù  r   r{  rø   rñ   r  r  rð  r7  Zhttp.serverr   r   r%  Zurllib.parser   r   Zsocketserverr   r	   r
   r   r‹  rŽ  rŒ  ræ  rb  ZTestCaser   r[   rƒ   ZSILENTr³   ZTERSEZEFFUSIVEr²   r¼   Z	TALKATIVEr°   Z
CHATTERBOXZBORINGrð   r¹   rµ   r…   r®   r±   r´   rÀ   rn  r  r,   r  r  r&  r#  r<  rC  rR  rW  r  r]  r_  r`  rh  r.   rx  rz  rµ  rÍ  r‘  rÎ  rÏ  rÓ  rÔ  r×  ZIPV6_ENABLEDrØ  rÚ  rì  rø  r  r  r  r  r  rb  rq  r…  rw  rx  r}  r2   rž  Zunittest.mockr’  r“  rn  r¥  Ztzinfor¤  r¿  rª  rÇ  rÂ  rÆ  rÊ  rÍ  rÏ  r  rÌ  r×  ré  r   r  r%  r3  rP  rS  rV  rk  rr  r{  rˆ  r‰  rÑ  rŠ  r  Zrun_with_localer”  rX   r8   r8   r8   r9   Ú<module>   sF  m FY G(J5)/ N   JY@CM41(
        ,#\V
	Y'W\5 Ol +Tn!#
