
    z%iV                       	 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Zd dlZd dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm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-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4  e(jj                         5  ddl6m7Z7 ddd       	 d dl8Z8d dl9Z9d dl:Z:	 d dl<Z< G d de'jz                        Z> G d de>      Z? G d de>      Z@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJ eKeJeAdz         ZLeAdeBd eCd!eDd"eEd#eFd$eGd%eHd&eId'eJd(i
ZM G d) d*e j                        ZO G d+ d,e j                        ZP G d- d.e>      ZQd/ ZR G d0 d1e>      ZS G d2 d3eT      ZU G d4 d5e j                        ZW G d6 d7eT      ZX G d8 d9e>      ZY G d: d;e7j                        Z[ G d< d=eT      Z\ G d> d?e\e+      Z] G d@ dAe\e3      Z^ G dB dCe\e1      Z_ e`edD      r G dE dFe^      Za G dG dHe_      Zb ej                          ej                          G dI dJe>                    Ze G dK dLe>      Zf G dM dNe j                        ZhdO Zi G dP dQe>      Zj ej                          ej                          G dR dSe>                    Zk e'j                   e`edD      dT       G dU dVek             Zm ej                          ej                          G dW dXe>                    Zn e'j                   e`edD      dT       G dY dZen             Zo ej                          ej                          G d[ d\e>                    Zp e'j                   e`edD      dT       G d] d^ep             Zq e'j                  ej                  d_       G d` daep             Zs ej                          ej                          G db dce>                    Zt G dd dee>      Zu G df dge>      Zv G dh die>      ZwddjZx G dk dl      Zydm Zz G dn doe j                        Z{ G dp dqe j                  j                        Z~ G dr dsej                        Zdt ZdduZ G dv dwe>      Z G dx dye>      Z G dz d{e>      Z G d| d}e j                        Z G d~ de>      Z ej                          G d de>             Z e`e j                  d      r)d dlZd dlmZ  ej                          G d de>             Z ej                  d       Z G d dej                         Z e       Z G d d      Z G d de'jz                  e      Z G d de j*                        Z G d de'jz                        Z G d de>      Z G d de>      Z G d d      Z G d de j6                        Z G d de>      Z G d de>      Z G d de>      Z G d de'jz                        Z G d de'jz                        Z G d de>e      Z G d de>      Z G d de      Z G d de      Z G d de      Zd Zdddddd edd      ffD ]  \  ZZeefdZ eedez  e         e'j                  e8d       G d de>             Z G d de'jz                        Zd Zedk(  r e'j`                          yy# 1 sw Y   xY w# e;$ r
 dxZ8xZ9Z:Y w xY w# e;$ r Y 	w xY w)    N)assert_python_okassert_python_failure)support)	os_helper)socket_helper)threading_helper)warnings_helper)asyncore)TestHandler)
HTTPServerBaseHTTPRequestHandler)urlparseparse_qs)ThreadingUDPServerDatagramRequestHandlerThreadingTCPServerStreamRequestHandler   )smtpdc                   4    e Zd Z	 dZdZdZd Zd Zd	dZd Z	y)
BaseTestz&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$r   c                    	 t        j                         | _        t        j                         j
                  j                  }t        j                          	 t        j                  j                         | _
        t        j                  d d  | _        |j                         x| _        }t        j                  j                         | _        t        j                   j                         | _        i x| _        }|D ]  }t'        ||   dd       ||<    	 t        j(                          t        j                  d      | _        t        j                  d      | _        t        j                  d      | _        | j.                  j1                         | _        t5        j6                         | _        | j.                  j;                  t        j<                         t        j>                  | j8                        | _         t        jB                  | jD                        | _#        | j@                  jI                  | jF                         | j*                  jK                         r;| j*                  jL                  | j.                  jL                  z   }tO        d|z        | j,                  jK                         r;| j,                  jL                  | j.                  jL                  z   }tO        d|z        | j.                  jQ                  | j@                         | jS                  | j*                  jK                                | jS                  | j,                  jK                                y # t        j(                          w xY w)Ndisabledu   «×»u   ĿÖG zUnexpected handlers: %s)*r   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_formatroot_formattersetFormatterhasHandlershandlersAssertionError
addHandler
assertTrue)selflogger_dictr'   r,   namehlists         E/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_logging.pysetUpzBaseTest.setUpW   s   	9.>>@'')11<<	#")"3"3"8"8":D&-&:&:1&=D#1<1A1A1CCD'.';';'@'@'BD$'.';';'@'@'BD$133D% @&-mD.A.8$'@d#@   " ((8(()=>",,R0&*&6&6&H&H&J#kkm!!'--0 ..t{{;%//@##D$7$78<<##%LL))D,<,<,E,EEE !:U!BCC<<##%LL))D,<,<,E,EEE !:U!BCC##DNN300230023-   "s   B;M& &M<c                    	 | j                   j                          | j                  j                  | j                         | j                  j
                  r[| j                  j
                  d   }| j                  j                  |       |j                          | j                  j
                  r[| j                  j                  | j                         t        j                          	 t        j                  j                          t        j                  j                  | j                         t        j                  j                          t        j                  j                  | j                         t        j                   j                          t        j                   j                  | j"                         | j$                  t        j&                  d d  t        j(                         j*                  }d|_        |j.                  }|j                          |j                  | j0                         | j2                  }| j2                  D ]  }||   	||   | j0                  |   _        ! 	 t        j6                          | j9                          t;        j<                  | j>                    y # t        j6                          w xY w)Nr   ) r6   closer1   removeHandlerr:   r@   r7   r3   r   r!   r*   clearupdater+   r(   r)   r"   r$   r&   r%   r   r   disabler    r'   r,   r   r.   
doCleanupsr   threading_cleanupr   )rD   hr   r    r,   rF   s         rH   tearDownzBaseTest.tearDown   s   	&&t~~6''  ))!,A**1-GGI '' 	!!$"="=>	#  &&(  ''(@(@A  &&(  ''(@(@A##%$$T%8%89&*&=&=G  #'')11GGO ++Jd001 ..M** L &28Ed8KD&&t,5L   "**D,?,?@   "s   ,E.J6 J6 6KNc                    	 |xs | j                   }t        j                  |xs | j                        }|j	                         j                         }| j                  t        |      t        |             t        ||      D ]U  \  }}|j                  |      }|s| j                  d|z          | j                  t        |j                               |       W |j                         }|r| j                  d|z          y y )Nz*Log line does not match expected pattern:
z'Remaining output at end of log stream:
)r6   recompileexpected_log_patgetvalue
splitlinesassertEquallenzipsearchfailtuplegroupsread)	rD   expected_valuesr6   patactual_linesactualexpectedmatchss	            rH   assert_log_lineszBaseTest.assert_log_lines   s    	/ &4;;jj5 5 56(335\*C,@A #L/ B 	>FHJJv&E		G"# $U5<<>2H=	> KKMII@1DE     c                 L    	 | xj                   dz  c_         d| j                   z  S )Nr   z%d)message_numrD   s    rH   next_messagezBaseTest.next_message   s)    	Ad&&&&rj   NN)
__name__
__module____qualname__r<   rW   rl   rI   rS   ri   rn    rj   rH   r   r   O   s-    '9J4K(4T ADF$'rj   r   c                   8    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	y)	BuiltinLevelsTestc                    | j                   }t        j                  d      }|j                  t        j                         t        j
                  t        j                  d      i       }|j                  t        j                         t        j                  d      }|j                  t        j                         |j                  t        j                   |              |j                   |              |j                  t        j                   |              |j                   |              |j                   |              |j                   |              |j                  t        j                   |              |j                   |              |j                   |              |j                   |              |j                   |              |j                   |              |j                   |              |j                   |              |j                   |              | j                  g d       y )NERRINFDEB))rw   CRITICAL1)rw   ERROR2)rx   rz   3)rx   r|   4)rx   WARNING5)rx   INFO6)ry   rz   7)ry   r|   8)ry   r   9)ry   r   10)ry   r8   11)rn   r   r   r7   r|   LoggerAdapterr   r8   logrz   errorwarninginfodebugri   )rD   mrw   rx   ry   s        rH   	test_flatzBuiltinLevelsTest.test_flat   sr   &W]]###G$5$5e$<bAW\\"&W]]# 	  !#&		!#  !#&		!#AC  !#&		!#AC		!# 	AC		!#		!# 
 	rj   c                    | j                   }t        j                  d      }|j                  t        j                         t        j                  d      }|j                  t        j
                         |j                  t        j                   |              |j                   |              |j                   |              |j                   |              |j                   |              | j                  ddg       y )Nrx   INF.ERR)r   rz   r{   )r   r|   r}   rn   r   r   r7   r   r|   r   rz   r   r   r   r   ri   )rD   r   rx   INF_ERRs       rH   test_nested_explicitz&BuiltinLevelsTest.test_nested_explicit   s    &W\\"$$Y/' 	G$$ac*ac 	QSac(%
 	rj   c                    | j                   }t        j                  d      }|j                  t        j                         t        j                  d      }|j                  t        j
                         t        j                  d      }t        j                  d      }t        j                  d      }|j                  t        j                   |              |j                   |              |j                   |              |j                   |              |j                  t        j                   |              |j                   |              |j                   |              |j                   |              |j                   |              |j                   |              | j                  g d       y )Nrx   r   	INF.UNDEFINF.ERR.UNDEFUNDEF))r   rz   r{   )r   r|   r}   )r   r   r~   )r   r   r   )r   rz   r   )r   r|   r   r   )rD   r   rx   r   	INF_UNDEFINF_ERR_UNDEFr   s          rH   test_nested_inheritedz'BuiltinLevelsTest.test_nested_inherited  s>   &W\\"$$Y/'%%k2	))/:!!'* 	g&&,!#qs'**AC0AC  	ac"13AC  
 	rj   c                 B   | j                   }t        j                  d      }t        j                  d      }t        j                  d      }|j                  t        j                         |j                  t        j                   |              |j                   |              |j                  t        j                   |              |j                   |              |j                   |              |j                   |              | j                  g d       y )Nrx   INF.BADPARENT.UNDEFINF.BADPARENT))r   rz   r{   )r   r   r}   )r   rz   r~   )r   r   r   )
rn   r   r   r7   r   r   FATALr   r   ri   )rD   r   rx   
GRANDCHILDCHILDs        rH   test_nested_with_virtual_parentz1BuiltinLevelsTest.test_nested_with_virtual_parent(  s    &&&'<=
!!/2W\\" 	w}}ac*		'--%

13 	AC 
 	rj   c                     	 | j                  t        j                  d      t        j                         | j                  t        j                  t        j                        d       y )Nr   )rZ   r   getLevelNamer   rm   s    rH   test_regression_22386z'BuiltinLevelsTest.test_regression_22386B  sC    4--f5w||D--gll;VDrj   c                 n    t        j                  d      }| j                  |t         j                         y )Nr   )r   r   rZ   r   )rD   fatals     rH   test_issue27935z!BuiltinLevelsTest.test_issue27935G  s&    $$W-.rj   c                    	 t        j                  t         j                  d       | j                  t         j                  t         j                  d       | j	                  t        j
                  t         j                        d       | j	                  t        j
                  t         j                        d       | j	                  t        j
                  d      t         j                         y )Nr   r   NOTSET)r   addLevelNamer   
addCleanuprZ   r   r   rm   s    rH   test_regression_29220z'BuiltinLevelsTest.test_regression_29220K  s    4W\\2.,,gllFC--gll;R@--gnn=xH--h7Hrj   N)
rp   rq   rr   r   r   r   r   r   r   r   rs   rj   rH   ru   ru      s,    4-^.!F4E
/Irj   ru   c                        e Zd Z	 d Zd Zd Zy)BasicFilterTestc                    t        j                  d      }| j                  j                  d   }	 |j	                  |       t        j
                  d      }t        j
                  d      }t        j
                  d      }t        j
                  d      }|j                  | j                                |j                  | j                                |j                  | j                                |j                  | j                                | j                  ddg       |j                  |       y # |j                  |       w xY w)N	spam.eggsr   spamspam.eggs.fishspam.bakedbeansr   r   r}   r   r   r~   )
r   Filterr1   r@   	addFilterr   r   rn   ri   removeFilter)rD   filter_handlerr   	spam_eggsspam_eggs_fishspam_bakedbeanss          rH   test_filterzBasicFilterTest.test_filterW  s    ..-""++A.	*g&$$V,D))+6I$../?@N%//0ABOIId'')*NN4,,./ 1 1 34  !2!2!45!!*/# 
   )G  )s   C4D6 6E	c                 t   d }| j                   j                  d   }	 |j                  |       t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }|j                  | j                                |j                  | j                                |j                  | j                                |j                  | j                                | j                  ddg       |j                  |       y # |j                  |       w xY w)	Nc                 j    | j                   j                  d      }dj                  |d d       }|dk(  S )N.   r   )rF   splitjoin)recordpartsprefixs      rH   
filterfuncz8BasicFilterTest.test_callable_filter.<locals>.filterfuncs  s5    KK%%c*EXXeBQi(F[((rj   r   r   r   r   r   r   r   )	r1   r@   r   r   r   r   rn   ri   r   )rD   r   r   r   r   r   r   s          rH   test_callable_filterz$BasicFilterTest.test_callable_filtero  s   	)
 ""++A.	-j)$$V,D))+6I$../?@N%//0ABOIId'')*NN4,,./ 1 1 34  !2!2!45!!*/# 
   ,G  ,s   C4D$ $D7c                     t        j                         }t        j                  ddi      }| j                  |j	                  |             y )NrF   r   )r   r   makeLogRecordrC   filter)rD   frs      rH   test_empty_filterz!BasicFilterTest.test_empty_filter  s7    NN!!6;"78$rj   N)rp   rq   rr   r   r   r   rs   rj   rH   r   r   S  s    (*0-:%rj   r   x   w   v   u   t   s   r   q   p   o   SilentTaciturnTerseEffusiveSociableVerbose	Talkative	Garrulous
ChatterboxBoringc                       e Zd Z	 d Zy)GarrulousFilterc                 (    |j                   t        k7  S N)levelno	GARRULOUSrD   r   s     rH   r   zGarrulousFilter.filter  s    ~~**rj   Nrp   rq   rr   r   rs   rj   rH   r   r     s
    3+rj   r   c                       e Zd Z	 d Zy)VerySpecificFilterc                 2    |j                   t        t        fvS r   )r   SOCIABLETACITURNr   s     rH   r   zVerySpecificFilter.filter  s    ~~h%999rj   Nr   rs   rj   rH   r   r     s
    ?:rj   r   c                   <    e Zd Z	 dZd Zd Zd Zd Zd Zd Z	d Z
y	)
CustomLevelsAndFiltersTest^[\w.]+ -> (\w+): (\d+)$c                     t         j                  |        t        j                         D ]  \  }}t	        j
                  ||        y r   )r   rI   my_logging_levelsitemsr   r   )rD   kvs      rH   rI   z CustomLevelsAndFiltersTest.setUp  s:    t%++- 	'DAq  A&	'rj   c                 Z    t         D ]"  }|j                  || j                                $ y r   )LEVEL_RANGEr   rn   )rD   loggerlvls      rH   log_at_all_levelsz,CustomLevelsAndFiltersTest.log_at_all_levels  s(     	1CJJsD--/0	1rj   c                 l   dt         j                  fd}t        j                  d      }t        j                  d      }t        j                         }t        j                         }t        j
                  |      }t        j
                  |      }|j                  |       |j                  |       |j                  |       |j                  d       |j                          |j                          | j                  |j                         d       | j                  |j                         d       y )Nr   c                 >    t        j                   |       } d| _        | S )Nznew message!)r#   msg)r   s    rH   replace_messagezWCustomLevelsAndFiltersTest.test_handler_filter_replaces_record.<locals>.replace_message  s    YYv&F'FJMrj   parentzparent.childzoriginal messagezoriginal message
znew message!
)r   	LogRecordr   r4   r5   r9   r   rB   r   flushrZ   rX   )rD   r  r  childstream_1stream_2	handler_1	handler_2s           rH   #test_handler_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_handler_filter_replaces_record  s    	G$5$5 	 ""8,!!.1;;=;;=))(3	))(3	O,)$#

%&**,.BC**,.>?rj   c                 h   t                G fddt        j                        }t        j                  d      }|j	                  t        j
                         |j                   |              |j                   |              |j                  d       | j                  dt                     y )Nc                   2    e Zd Zdej                  f fdZy)WCustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilterr   c                 b    j                  t        |             t        j                  |      S r   )addidr#   )rD   r   recordss     rH   r   z^CustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter.filter  s"    BvJ'yy((rj   N)rp   rq   rr   r   r  r   )r  s   rH   RecordingFilterr    s    )W%6%6 )rj   r  r   r  r   )
setr   r   r   r7   r   r   r   rZ   r[   )rD   r  r   r  s      @rH   #test_logging_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_logging_filter_replaces_record  s~    %	)gnn 	)
 ""8,%*+*+ECL)rj   c                     | j                   j                  t               | j                  | j                          | j	                  g d       y )N)r   r   r   r   r   r   r   r   r   r   r   r   )r1   r7   VERBOSEr   ri   rm   s    rH   test_logger_filterz-CustomLevelsAndFiltersTest.test_logger_filter  s=    !!'*t//0 
 	rj   c                    | j                   j                  d   j                  t               	 | j	                  | j                          | j                  g d       | j                   j                  d   j                  t        j                         y # | j                   j                  d   j                  t        j                         w xY w)Nr   )r  r  r  r  r  )r1   r@   r7   r   r   ri   r   r   rm   s    rH   test_handler_filterz.CustomLevelsAndFiltersTest.test_handler_filter  s    !!!$--h7	B""4#3#34!! #  %%a(11'..AD%%a(11'..As   .B 8Cc                 @   | j                   j                  d   }d }t               }|j                  |       	 | j	                  | j                          g d}| j                  |       t               }| j                   j                  |       | j	                  | j                          | j                  |g dz          |r| j                   j                  |       |j                  |       y # |r| j                   j                  |       |j                  |       w xY w)Nr   )	)r   r{   )r   r}   )r   r   r  r  r  r  r  r  ))r   r   )r   12)r   14)r   15)r   17)r   18)r   20)r1   r@   r   r   r   ri   r   r   )rD   r   specific_filtergarrfirst_liness        rH   test_specific_filtersz0CustomLevelsAndFiltersTest.test_specific_filters!  s     ""++A. $!	'""4#3#34K !!+.02O&&7""4#3#34!!+ 
1
 
#
 
   --o>  &   --o>  &s   BC- -0DN)rp   rq   rr   rW   rI   r   r  r  r  r!  r,  rs   rj   rH   r   r     s2    J 3'
1@8*"B ('rj   r   c                  `    t        j                  | i |\  }}t        j                  |       |S r   )tempfilemkstemposrK   )argskwargsfdfns       rH   make_temp_filer5  L  s+    t.v.FBHHRLIrj   c                   R   e Zd Zd Zd Zd Z ej                  ej                  dk(  d       ej                  e
j                  d       ej                          e
j                  d      d                             Z e
j                           ej                         d	               Zy
)HandlerTestc                     t        j                         }d|_        | j                  |j                  d       d|_        | j                  |j                  d       | j	                  t
        |j                  d        y )Ngenericanothergeneric)r   HandlerrF   rZ   assertRaisesNotImplementedErroremitrD   rR   s     rH   	test_namezHandlerTest.test_nameS  s\    OO+!!12-qvvt<rj   c                    t         j                  dv rdD ]  }t               }|st        j                  |       t
        j                  j                  |dd      }|r|j                  |j                  }}| j                  |d       | j                  |d       t        j                  ddi      }|j                  |       t        j                  |       | j                  t        j                  j                  |             |j                  |       | j!                  t        j                  j                  |             n8| j                  |j                  d       | j                  |j                  d       |j#                          |s|t        j                  |        t         j                  d	k(  rd
}nd}	 t
        j                  j%                  |      }| j                  |j&                  |j(                         | j!                  |j*                         |j#                          dD ]j  }|dk(  r2| j/                  t0        t
        j                  j2                  dd|       :t
        j                  j3                  dd|      }|j#                          l t
        j                  j5                  d      }t        j                  i       }| j!                  |j7                  |             |j#                          t
        j                  j5                  d      }| j                  |j7                  |             |j#                          y # t,        $ r Y /w xY w)Nlinuxdarwin)TFutf-8Tencodingdelayr  TestrD  z/var/run/syslogz/dev/log)GETPOSTPUTrM  	localhostz/logr   r   )sysplatformr5  r0  unlinkr   r@   WatchedFileHandlerdevinorZ   r   handleassertFalsepathexistsrC   rK   SysLogHandlerfacilityLOG_USER
unixsocketOSErrorr<  
ValueErrorHTTPHandlerBufferingHandlershouldFlush)	rD   existingr4  rR   rS  rT  r   socknamemethods	            rH   test_builtin_handlersz!HandlerTest.test_builtin_handlers[  s    <<..) "#%IIbM$$77WTX7Y uuaeeC$$S"-$$S"---ufo>AHHQKIIbM$$RWW^^B%78HHQKOOBGGNN2$67$$QUUB/$$QUUB/	IIbM-". ||x',%$$228<  QZZ8-	 - 	F!!*g.>.>.J.J"-vv? $$00ffM		 --a0!!"%a()		--a0q)*		  s   A0M 	M#"M#c                 >   	 t               }t        j                  |       t        j                  |      }t
        j                  |dfft
        j                  j                  |dfft
        j                  j                  |dfff}t        j                  dv r"|t
        j                  j                  |dfffz  }|D ]`  \  }} ||ddi}| j                  t        j                  j                  |             |j!                          t        j                  |       b y )NwarR   rB  rG  rE  )r5  r0  rQ  pathlibPathr   FileHandlerr@   RotatingFileHandlerTimedRotatingFileHandlerrO  rP  rR  rC   rW  rX  rK   )rD   r4  pfncasesclsr1  rR   s          rH   test_path_objectszHandlerTest.test_path_objects  s    	
 
		"ll2((3*5%%99C:F%%>>c
K
 <<..w''::S#JGIIE 	ICT,G,AOOBGGNN2./GGIIIbM		rj   ntz/WatchedFileHandler not appropriate for Windows.z'Emscripten cannot fstat unlinked files.walltimec           	           fd}d}d}d  _         d  _        dD ]F  }t        dd      }t        j                  |||f      }d|_        |j                          t        j                  j                  |d|	      }t        j                  d
      }|j                  |       	 t        |      D ]Y  }	t        j                  d       t        j                  ddi      }
	 t        j                          _         |j!                  |
       [ 	 |j'                          |j)                          t*        j,                  j/                  |      s2t+        j0                  |       I y # t"        $ r' t%        d j                  d j                           w xY w# |j'                          |j)                          t*        j,                  j/                  |      rt+        j0                  |       w w xY w)Nc                     t        |      D ]]  }	 t        j                  |        t        j                         _        t        j                  dt        j                  dd      z         _ y # t
        $ r Y :w xY w)NgMbp?r      )	ranger0  rQ  timedeletion_timer]  sleeprandomrandint)fnametries_rD   s      rH   remove_loopz*HandlerTest.test_race.<locals>.remove_loop  sg    5\ 9IIe$)-D& 

56>>!Q#7789  s   .A..	A:9A:i  FT.logztest_logging-3-targetr1  TrE  rF  z'%(asctime)s: %(levelname)s: %(message)s{Gzt?r  testingzDeleted at z, opened at )handle_timery  r5  	threadingThreaddaemonstartr   r@   rR  r;   r>   rw  rx  rz  r   rU  	Exceptionprintr   rK   r0  rW  rX  rQ  )rD   r  	del_count	log_countrH  r4  removerrR   r   r  r   s   `          rH   	test_racezHandlerTest.test_race  s   	9 		!" 	"E(9:B&&kYPG!GNMMO  33BPU3VA!!"KLANN1"y) 
AJJu%--ui.ABA+/99;(
 	77>>"%IIbM1	" % 040B0B040@0@B C 	 	77>>"%IIbM &s%   $:F*E&	F&0FFAG0c                 J   	  G d dt         j                        }| j                  t        t         j                        d        |       | j                  j                  j                  j                         d_	        | j                  t        t         j                        d       | j                  t        t         j                        d       t        j                  d      }|j                         |j                  t         j                         t!        j"                         t!        j"                         fd}t!        j$                  |d	      }|j'                          j)                          t+        j,                         }|dk(  r(	 |j/                  d
       t+        j0                  d       y |j/                  d       j3                          |j5                          t7        j8                  |d       y # t+        j0                  d       w xY w)Nc                   $     e Zd Z fdZd Z xZS )AHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandlerc                 p    t         |           t        j                  t	        ddd            | _        y )Nz	/dev/nullwtrE  rG  r6   )super__init__r   r9   opensub_handlerrD   	__class__s    rH   r  zJHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__  s.     "#*#8#8TGD$F rj   c                     | j                   j                          	 | j                   j                  |       | j                   j                          y # | j                   j                          w xY wr   )r  acquirer>  releaser   s     rH   r>  zFHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit  sR      ((*/$$))&1$$,,.D$$,,.s   A A.rp   rq   rr   r  r>  __classcell__r  s   @rH   _OurHandlerr    s    F
/rj   r  r   z*because we need at least one for this testr    test_post_fork_child_no_deadlockc                  :   t        j                          	 j                          	 j                           j	                  d       j                          	 t        j                          y # j                          w xY w# t        j                          w xY w)N      ?)r   r!   r  r  waitr  r.   )+fork_happened__release_locks_and_end_threadlocks_held__ready_to_forkrefed_hs   rH   lock_holder_thread_fnzKHandlerTest.test_post_fork_child_no_deadlock.<locals>.lock_holder_thread_fn  sq      "'!&-113 @DDSIOO%$$& OO%$$&s"   B !A/ 	B /BB Bz,test_post_fork_child_no_deadlock lock holder)r  rF   z#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)exitcode)r   r;  rZ   r[   r"   r   r  r6   rK   rF   assertGreater_at_fork_reinit_lock_weaksetr   rB   r7   r8   r  Eventr  r  r  r0  forkr   _exitr  r   r   wait_process)	rD   r  test_loggerr  lock_holder_threadpidr  r  r  s	         @@@rH   r  z,HandlerTest.test_post_fork_child_no_deadlock  s    	M	/'// 	/ 	W../3-++22889C3w001153wCCDaH''(JKw'W]]+$-OO$5!6?oo6G3	'2 '--,CE 	  "!&&(ggi!8  !GH FG7;;=##%  q1 s   H H"N)rp   rq   rr   r@  re  rq  unittestskipIfr0  rF   r   is_emscriptenr   requires_working_threadingrequires_resourcer  requires_forkr  rs   rj   rH   r7  r7  R  s    =3j, X__RWW_&WXX__H 1002Wz*)" + 3 Y)"^ W0002H2 3 H2rj   r7  c                       e Zd Zd Zy)	BadStreamc                     t        d      )Ndeliberate mistake)RuntimeError)rD   datas     rH   writezBadStream.write)  s    /00rj   N)rp   rq   rr   r  rs   rj   rH   r  r  (  s    1rj   r  c                       e Zd Zd Zy)TestStreamHandlerc                     || _         y r   )error_recordr   s     rH   handleErrorzTestStreamHandler.handleError-  s
    "rj   N)rp   rq   rr   r  rs   rj   rH   r  r  ,  s    #rj   r  c                   (    e Zd Zej                  ZdZy)StreamWithIntNamer   N)rp   rq   rr   r   r   levelrF   rs   rj   rH   r  r  0  s    NNEDrj   r  c                       e Zd Zd Zd Zd Zy)StreamHandlerTestc                    t        t                     }t        j                  i       }t        j                  }	 |j                  |       | j                  |j                  |       t        j                  t                     }t        j                         5 }|j                  |       d}| j                  ||j                                d d d        dt        _        t        j                         5 }|j                  |       | j                  d|j                                d d d        |t        _        y # 1 sw Y   nxY w# 1 sw Y   !xY w# |t        _        w xY w)Nz"
RuntimeError: deliberate mistake
Fr   )r  r  r   r   raiseExceptionsrU  assertIsr  r9   r   captured_stderrassertInrX   rZ   )rD   rR   r   	old_raisestderrr  s         rH   test_error_handlingz%StreamHandlerTest.test_error_handling5  s	   ik*!!"%++		0HHQKMM!..!,%%ik2A((* 6f<c6??#456
 ',G#((* 8f  V__%678 '0G#6 68 8 '0G#s<   AE 4D9'E 32E%E 9E>E E
E Ec                 B   	 t        j                         }t        j                         }|j	                  |      }| j                  |t        j                         |j	                  |      }| j                  ||       |j	                  |      }| j                  |       y r   )	r   r9   r4   r5   	setStreamr  rO  r  assertIsNone)rD   rR   r6   oldre   s        rH   test_stream_settingz%StreamHandlerTest.test_stream_settingK  sz    	 !!#kk&!c3::&S!ff%S!&!rj   c                 t    t        j                  t                     }| j                  t	        |      d       y )Nz<StreamHandler 2 (NOTSET)>)r   r9   r  rZ   reprr?  s     rH   'test_can_represent_stream_with_int_namez9StreamHandlerTest.test_can_represent_stream_with_int_nameY  s+    !!"3"56a">?rj   N)rp   rq   rr   r  r  r  rs   rj   rH   r  r  4  s    0,"@rj   r  c                   ,    e Zd Z	 d Zd Zd Zd Zd Zy)TestSMTPServerc                     t         j                  j                  | |d |d       | j                  j	                         d   | _        || _        d | _        d| _        || _	        y )NT)mapdecode_datar   F)
r   
SMTPServerr  socketgetsocknameport_handler_thread_quitpoll_interval)rD   addrr   r  sockmaps        rH   r  zTestSMTPServer.__init__u  s\    !!$d.2 	" 	4KK++-a0	
*rj   c                 .    	 | j                  ||||       y r   )r  )rD   peermailfromrcpttosr  s        rH   process_messagezTestSMTPServer.process_message~  s    	 	dHgt4rj   c                     	 t        j                  | j                  | j                  f      x| _        }d|_        |j                          y Nr  Tr  r  serve_foreverr  r  r  r  rD   ts     rH   r  zTestSMTPServer.start  H    	 %++43E3E262D2D1FH 	Hq		rj   c                 ~    	 | j                   s0t        j                  || j                  d       | j                   s/y y )Nr   )r  count)r  r
   loop_map)rD   r  s     rH   r  zTestSMTPServer.serve_forever  s-    	 **MM-TYYa@ **rj   c                     	 d| _         t        j                  | j                         d | _        | j	                          t        j                  | j                  d       y )NT)r  
ignore_all)r  r   join_threadr  rK   r
   	close_allr  rm   s    rH   stopzTestSMTPServer.stop  sF    	 
$$T\\2

tyyT:rj   N)rp   rq   rr   r  r  r  r  r  rs   rj   rH   r  r  `  s!    (+
5	A	;rj   r  c                   2     e Zd Z	 d Zd Z fdZd Z xZS )ControlMixinc                 `    d | _         || _        || _        t        j                         | _        y r   )r  r  r  r  r  ready)rD   r   r  s      rH   r  zControlMixin.__init__  s&    *__&
rj   c                     	 t        j                  | j                  | j                  f      x| _        }d|_        |j                          y r  r  r  s     rH   r  zControlMixin.start  r  rj   c                 b    	 | j                   j                          t        t        |   |       y r   )r  r  r  r  r  )rD   r  r  s     rH   r  zControlMixin.serve_forever  s'    	 	

lD/>rj   c                     	 | j                          | j                  &t        j                  | j                         d | _        | j	                          | j
                  j                          y r   )shutdownr  r   r   server_closer  rM   rm   s    rH   r  zControlMixin.stop  sQ    	 	<<#((6DL

rj   )rp   rq   rr   r  r  r  r  r  r  s   @rH   r  r    s    '?	rj   r  c                        e Zd Z	 	 	 ddZd Zy)TestHTTPServerNc                      G fddt               t        j                  | |       t        j                  | ||       || _        y )Nc                   2     e Zd ZddZd Z fdZ xZS )=TestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandlerc                 R    |j                  d      r| j                  S t        |      )Ndo_)
startswithprocess_requestAttributeError)rD   rF   defaults      rH   __getattr__zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__  s%    ??5)///$T**rj   c                 :    | j                   j                  |        y r   serverr  rm   s    rH   r  zMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_request      $$T*rj   c                 ,    rt        |   |g|  y y r   )r  log_message)rD   formatr1  DelegatingHTTPRequestHandlerr  r   s      rH   r  zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message  s)    6,,2;59; rj   r   )rp   rq   rr   r  r  r  r  )r  r  r   s   @rH   r  r    s    +
+; ;rj   r  )r   r   r  r  sslctx)rD   r  r   r  r   r   r  s       ` @rH   r  zTestHTTPServer.__init__  s>    	;+A 	; 	D$(DEdG];rj   c                     	 | j                   j                         \  }}| j                  r| j                  j                  |d      }||fS # t        $ r(}t
        j                  j                  d|z          d }~ww xY w)NT)server_sidezGot an error:
%s
)r  acceptr   wrap_socketr]  rO  r  r  )rD   sockr  es       rH   get_requestzTestHTTPServer.get_request  sv    	++-JD${{{{..t.F
 Tz	  	JJ2Q67	s   AA 	A=#A88A=)r  FN)rp   rq   rr   r  r'  rs   rj   rH   r  r    s    	 58#'&	rj   r  c                   0     e Zd Z	 dZ	 	 ddZ fdZ xZS )TestTCPServerTc                      G d dt               }t        j                  | |||       t        j                  | ||       y )Nc                       e Zd Zd Zy);TestTCPServer.__init__.<locals>.DelegatingTCPRequestHandlerc                 :    | j                   j                  |        y r   r  rm   s    rH   rU  zBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handle  r  rj   N)rp   rq   rr   rU  rs   rj   rH   DelegatingTCPRequestHandlerr,    s    +rj   r.  )r   r   r  r  )rD   r  r   r  bind_and_activater.  s         rH   r  zTestTCPServer.__init__  s;    	+*> 	+ 	##D$0K$5	7dG];rj   c                 n    t         t        |           | j                  j	                         d   | _        y Nr   )r  r)  server_bindr  r  r  r  s    rH   r2  zTestTCPServer.server_bind   )    mT.0KK++-a0	rj   r  T)rp   rq   rr   allow_reuse_addressr  r2  r  r  s   @rH   r)  r)    s%     47#'<1 1rj   r)  c                   6     e Zd Z	 	 	 ddZ fdZ fdZ xZS )TestUDPServerc                      G fddt               t        j                  | ||       t        j                  | ||       d| _        y )Nc                   (     e Zd Zd Z fdZ xZS );TestUDPServer.__init__.<locals>.DelegatingUDPRequestHandlerc                 :    | j                   j                  |        y r   r  rm   s    rH   rU  zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handle9  r  rj   c                     | j                   j                         }|r	 t        |           y y # t        $ r | j
                  j                  s Y y w xY wr   )wfilerX   r  finishr]  r  _closed)rD   r  DelegatingUDPRequestHandlerr  s     rH   r>  zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finish<  sV    zz**,"94GI  # "#{{22!  3"s   /  AA)rp   rq   rr   rU  r>  r  )r  r@  s   @rH   r@  r:  7  s    +" "rj   r@  F)r   r   r  r  r?  )rD   r  r   r  r/  r@  s        @rH   r  zTestUDPServer.__init__5  sE    	"*@ 	" 	##D$$?$5	7 	dG];rj   c                 n    t         t        |           | j                  j	                         d   | _        y r1  )r  r7  r2  r  r  r  r  s    rH   r2  zTestUDPServer.server_bindK  r3  rj   c                 8    t         t        |           d| _        y )NT)r  r7  r  r?  r  s    rH   r  zTestUDPServer.server_closeO  s    mT/1rj   r4  )rp   rq   rr   r  r2  r  r  r  s   @rH   r7  r7  $  s$      58#',1 rj   r7  AF_UNIXc                   $    e Zd Zej                  Zy)TestUnixStreamServerNrp   rq   rr   r  rC  address_familyrs   rj   rH   rE  rE  T      rj   rE  c                   $    e Zd Zej                  Zy)TestUnixDatagramServerNrF  rs   rj   rH   rJ  rJ  W  rH  rj   rJ  c                   0    e Zd Zej                  Zd Zd Zy)SMTPHandlerTestc                    i }t        t        j                  df| j                  d|      }|j	                          t        j                  |j
                  f}t        j                  j                  |ddd| j                        }| j                  |j                  dg       g | _        t        j                  ddi      }t        j                         | _        |j#                  |       | j                   j%                  | j                         |j'                          | j)                  | j                   j+                                | j                  t-        | j                        d	       | j                  d   \  }}}}	| j                  |d       | j                  |dg       | j/                  d
|	       | j)                  |	j1                  d             |j3                          y )Nr   MbP?meyouLog)timeoutr  u	   Hello ✓r   z
Subject: Log
u   

Hello ✓)r  r   HOSTr  r  r  r   r@   SMTPHandlerTIMEOUTrZ   toaddrsmessagesr   r  r  handledrU  r  r  rC   is_setr[   r  endswithrK   )
rD   r  r  r  rR   r   r  r  r  r  s
             rH   
test_basiczSMTPHandlerTest.test_basicb  su   !3!3Q 79M9Mu ')""FKK0((tUE15 ) ?UG,!!5."9: (	$,,'++-.T]]+Q/(,a(8%h4(5'*($/&89:		rj   c                 n    | j                   j                  |       | j                  j                          y r   )rW  appendrX  r  )rD   r1  s     rH   r  zSMTPHandlerTest.process_messagez  s$    T"rj   N)rp   rq   rr   r   LONG_TIMEOUTrU  r[  r  rs   rj   rH   rL  rL  \  s     ""G0rj   rL  c                   ^    e Zd Z	 dZd Zd Zd Zd Zd Z e	j                         d        Zy)	MemoryHandlerTestr   c                 J   t         j                  |        t        j                  j	                  dt        j
                  | j                        | _        t        j                  d      | _	        d| j                  _
        | j                  j                  | j                         y )N
   memr   )r   rI   r   r@   MemoryHandlerr   r:   mem_hdlrr   
mem_logger	propagaterB   rm   s    rH   rI   zMemoryHandlerTest.setUp  sj    t((66r7??7;~~G!++E2$%!""4==1rj   c                 b    | j                   j                          t        j                  |        y r   )re  rK   r   rS   rm   s    rH   rS   zMemoryHandlerTest.tearDown       $rj   c           	      R   | j                   j                  | j                                | j                  g        | j                   j	                  | j                                | j                  g        | j                   j                  | j                                g d}| j                  |       dD ]  }t        d      D ]+  }| j                   j                  | j                                - | j                  |       | j                   j                  | j                                |t        ||dz         D cg c]  }dt        |      f c}z   }| j                  |        | j                   j                  | j                                | j                  |       y c c}w )N)r8   r{   r   r}   )r   r~   )rv     	   rb  r8   )rf  r   rn   ri   r   r   rw  str)rD   linesnis       rH   
test_flushzMemoryHandlerTest.test_flush  sX    	d//12b!T..01b! 1 1 34

 	e$ 	)A1X ;%%d&7&7&9:;!!%( OO!!$"3"3"56aR8HI1gs1v.IIE!!%(	) 	d//12e$	 Js   =F$c                    	 | j                   j                  | j                                | j                  g        | j                   j	                  | j                                | j                  g        | j                   j                  | j                         | j                  j                          ddg}| j                  |       t        j                  j                  dt        j                  | j                  d      | _        | j                   j                  | j                         | j                   j                  | j                                | j                  |       | j                   j	                  | j                                | j                  |       | j                   j                  | j                         | j                  j                          | j                  |       y )Nrk  rl  rb  F)rf  r   rn   ri   r   rL   re  rK   r   r@   rd  r   r:   rB   rD   rp  s     rH   test_flush_on_closez%MemoryHandlerTest.test_flush_on_close  sf   	 	d//12b!T..01b!%%dmm4
 	e$((66r7??7;~~7<> 	""4==1d//12e$T..01e$%%dmm4e$rj   c                    	 | j                   j                  | j                                | j                  g        | j                   j	                  | j                                | j                  g        t        j                  t
        j                  j                  | j                        g       ddg}| j                  |       t
        j                  j                  dt
        j                  | j                  d      | _	        | j                   j                  | j                         | j                   j                  | j                                | j                  |       | j                   j	                  | j                                | j                  |       t        j                  t
        j                  j                  | j                        g       | j                  |       y )NhandlerListrk  rl  rb  F)rf  r   rn   ri   r   r   r
  weakrefrefre  r@   rd  r   r:   rB   ru  s     rH   test_shutdown_flush_on_closez.MemoryHandlerTest.test_shutdown_flush_on_close  sb   	 	d//12b!T..01b!goo&9&9$--&H%IJ
 	e$((66r7??7;~~7<> 	""4==1d//12e$T..01e$goo&9&9$--&H%IJe$rj   c                     G d d      } || j                         }	 | j                   j                  |       t        d      D ]M  }t        j                  d       | j
                  j                  d       | j
                  j                  d       O 	 |j                  D ]  }t        j                  |        y # |j                  D ]  }t        j                  |        w xY w)Nc                       e Zd Zd Zd Zd Zy)ZMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandlerc                      || _         g | _        y r   )re  threads)rD   re  s     rH   r  zcMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.__init__  s     (!rj   c                 :    | j                   j                  d        y r   )re  	setTargetrm   s    rH   removeTargetzgMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.removeTarget  s    ''-rj   c                     t        j                  | j                        }| j                  j	                  |       |j                          y )N)r  )r  r  r  r  r]  r  )rD   r  threads      rH   rU  zaMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handle  s3    "))1B1BC##F+rj   N)rp   rq   rr   r  r  rU  rs   rj   rH   MockRaceConditionHandlerr    s    ".rj   r  rb  r  znot flushedflushed)re  r  rw  rx  rz  rf  r   r   r  r   r   )rD   r  r  r  r  s        rH   &test_race_between_set_target_and_flushz8MemoryHandlerTest.test_race_between_set_target_and_flush  s    	 	 *$--8		5MM##F+2Y 3

5!$$]3''	23
 !.. 5 ,,V45&.. 5 ,,V45s   A6B< <(C$N)rp   rq   rr   rW   rI   rS   rs  rv  r|  r   r  r  rs   rj   rH   r`  r`  ~  sF    & 32 %8%<%: 10025 35rj   r`  c                       e Zd Z	 d Zy)ExceptionFormatterc                 &    d|d   j                   z  S )Nz
Got a [%s]r   )rp   )rD   eis     rH   formatExceptionz"ExceptionFormatter.formatException  s    benn,,rj   N)rp   rq   rr   r  rs   rj   rH   r  r    s
    (-rj   r  c                 N    | j                          t        j                  |       y r   rK   r0  remove)rR   r4  s     rH   closeFileHandlerr  	  s    GGIIIbMrj   c                   6   e Zd Z	 ej                  ZdZdZdZdZej                  dd      Z
ej                  dd      Zd	e z   d
z   Zej                  dd      ZdZdZdZdZdZd Zd Zd ZefdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$y$)%ConfigFileTest^(\w+) \+\+ (\w+)$aN  
    [loggers]
    keys=root

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=

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

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

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

    [handlers]
    keys=hand1

    [formatters]
    keys=form1

    [logger_root]
    level=WARNING
    handlers=hand1

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

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

    [formatter_form1]
    format=%(levelname)s ++ %(message)s
    datefmt=
    z
sys.stdoutz
sys.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=
    a  
    [loggers]
    keys=root

    [handlers]
    keys=file

    [formatters]
    keys=

    [logger_root]
    level=DEBUG
    handlers=file

    [handler_file]
    class=FileHandler
    level=DEBUG
    args=("{tempfile}",)
    kwargs={{"encoding": "utf-8"}}
    ap  
    [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=%(message)s ++ %(customfield)s
    defaults={"customfield": "defaultvalue"}
    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                     t        j                  t        j                  |            }t	        j
                  j                  |fddi| y )NrG  rE  )r4   r5   textwrapdedentr   config
fileConfig)rD   confr2  files       rH   apply_configzConfigFileTest.apply_config'  s5    {{8??401!!$CCFCrj   c                 z   t        j                         5 }| j                  | j                         t	        j
                         }|j                  | j                                |j                  | j                                | j                  dg|       | j                  g        d d d        y # 1 sw Y   y xY wNr|   r}   r  )
r   captured_stdoutr  config0r   r   r   rn   r   ri   rD   outputr   s      rH   test_config0_okzConfigFileTest.test_config0_ok+  s    $$& 	&&dll+&&(FKK))+,LL**,-!!# "  !!"%	& 	& 	&s   BB11B:c                 0   t        j                         5 }t        j                  t	        j
                  | j                              }t        j                         }|j                  |       t        j                  j                  |       t        j                         }|j                  | j                                |j!                  | j                                | j#                  dg|       | j#                  g        d d d        y # 1 sw Y   y xY wr  )r   r  r4   r5   r  r  r  configparserConfigParser	read_filer   r  r  r   r   rn   r   ri   )rD   r  r  cpr   s        rH   test_config0_using_cp_okz'ConfigFileTest.test_config0_using_cp_ok:  s    $$& 	&&;;xt||<=D**,BLLNN%%b)&&(FKK))+,LL**,-!!# "  !!"%	& 	& 	&s   C.DDc                 j   t        j                         5 }| j                  |       t        j                  d      }|j                  | j                                |j                  | j                                | j                  ddg|       | j                  g        d d d        y # 1 sw Y   y xY wNcompiler.parserr   r{   r  r  	r   r  r  r   r   r   rn   r   ri   rD   r  r  r   s       rH   test_config1_okzConfigFileTest.test_config1_okL      $$& 	&&f%&&'89FKK))+,LL**,-!!#  " 
 !!"%	& 	& 	&   BB))B2c                 Z    | j                  t        | j                  | j                         y r   r<  r  r  config2rm   s    rH   test_config2_failurez#ConfigFileTest.test_config2_failure[      )T%6%6Erj   c                 Z    | j                  t        | j                  | j                         y r   r<  r  r  config3rm   s    rH   test_config3_failurez#ConfigFileTest.test_config3_failure_  r  rj   c                    t        j                         5 }| j                  | j                         t	        j
                         }	 t               # t        $ r t	        j                  d       Y nw xY wt        j                  j                  d       | j                  |j                         d       | j                  g        d d d        y # 1 sw Y   y xY wNjust testingr   -ERROR:root:just testing
Got a [RuntimeError]
)r   r  r  config4r   r   r  	exceptionrO  stdoutseekrZ   rX   ri   r  s      rH   test_config4_okzConfigFileTest.test_config4_okc  s    $$& 	&&dll+&&(F2"n$ 2!!.12JJOOAV__.AC !!"%	& 	& 	&s*   0C
AA1.C0A11ACCc                 <    | j                  | j                         y Nr  )r  config5rm   s    rH   test_config5_okzConfigFileTest.test_config5_okr      DLL1rj   c                 <    | j                  | j                         y r  )r  config6rm   s    rH   test_config6_okzConfigFileTest.test_config6_oku  r  rj   c                 |   t        j                         5 }| j                  | j                         t	        j
                  d      }t	        j
                  d      }|j                  | j                                |j                  | j                                |j                  | j                                | j                  g d|       | j                  g        d d d        t        j                         5 }| j                  | j                         t	        j
                  d      }| j                  |j                         |j                  | j                                |j                  | j                                t	        j
                  d      }|j                  | j                                |j                  | j                                j                  | j                                | j                  g d|       | j                  g        d d d        y # 1 sw Y   IxY w# 1 sw Y   y xY w)Nr  compiler-hyphenatedr  r  )rz   r~   r  compiler.lexer)r   r   )r|   r   )r   r   )r|   r   )r   r  r  config1ar   r   r   rn   r   criticalri   config7rV  r   rD   r  r   
hyphenateds       rH   test_config7_okzConfigFileTest.test_config7_okx  s   $$& 	&&dmm,&&'89F !**+@AJKK))+,LL**,- 1 1 34!! # 	 "  !!"%'	&( $$& 	&&dll+&&'89FV__-KK))+,LL**,-&&'78FKK))+,LL**,- 1 1 34!! #
  "  !!"%)	& 	&)	& 	&(	& 	&s   C	H%:D"H2%H/2H;c                    | j                         5  t        dd      }t        j                  dk(  r|j	                  dd      }| j
                  j                  |      }| j                  |       | j                  |       d d d        t        j                  j                  d   }| j                  t        |       y # 1 sw Y   >xY w)Nr  test_logging-X-rr  \z\\)r.  r   )check_no_resource_warningr5  r0  rF   replaceconfig8r  r  r   rootr@   r   r  )rD   r4  r  r   s       rH   test_config8_okzConfigFileTest.test_config8_ok  s    ++- 	'(9:B ww$ZZf-ll))2)6Gg&g&	' ,,''*('26	' 	's   A0B>>Cc                 j   | j                  | j                         t        j                  j                  d   j
                  }|j                  t        j                  ddi            }| j                  |d       |j                  t        j                  ddd            }| j                  |d       y )Nr   r  testztest ++ defaultvaluecustomvaluer  customfieldztest ++ customvalue)	r  config9r   r  r@   	formatterr  r   rZ   )rD   r  results      rH   test_config9_okzConfigFileTest.test_config9_ok  s    $,,'LL))!,66	!!'"7"7"HI!78!!'"7"7=9#; <!67rj   c                 v   | j                  | j                         t        j                  d      }| j	                  |j
                         | j                  | j                         | j                  |j
                         | j                  | j                  d       | j	                  |j
                         y )Nsome_pristine_loggerF)disable_existing_loggers)r  disable_testr   r   rV  r   rC   rD   r   s     rH   test_logger_disablingz$ConfigFileTest.test_logger_disabling  s    $++,""#9:)$++,($++eL)rj   c                     d}| j                  |       | j                  t        j                         j                  d   j
                  d       y )Naw  
            [loggers]
            keys=root

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

            [formatter_form1]
            format=%(levelname)s ++ %(message)s
            r   hand1)r  rZ   r   r   r@   rF   )rD   test_configs     rH   test_config_set_handler_namesz,ConfigFileTest.test_config_set_handler_names  sC    ( 	+&**,55a8==wGrj   c                     d}t        j                  t        j                  |            }| j	                  t
        t        j                  j                  |       y )Na  
            [loggers]
            keys=root

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

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

            prince
            )	r4   r5   r  r  r<  r  r   r  r  )rD   r  r  s      rH   'test_exception_if_confg_file_is_invalidz6ConfigFileTest.test_exception_if_confg_file_is_invalid  s>    . {{8??;78,(A(A4Hrj   c                     t        j                  dd      \  }}t        j                  |       | j	                  t
        t        j                  j                  |       t        j                  |       y )Ntest_empty_.inir   suffix)
r.  r/  r0  rK   r<  r  r   r  r  r  )rD   r3  r4  s      rH   %test_exception_if_confg_file_is_emptyz4ConfigFileTest.test_exception_if_confg_file_is_empty  sJ    !!vFB
,(A(A2F
		"rj   c                 b    | j                  t        t        j                  j                  d       y )Nfilenotfound)r<  FileNotFoundErrorr   r  r  rm   s    rH   ,test_exception_if_config_file_does_not_existz;ConfigFileTest.test_exception_if_config_file_does_not_exist  s    +W^^-F-FWrj   c                    	 t        j                  d      j                         }t        j                  dd      \  }}	 t        j                  ||j                  d             t        j                  |       t        j                  j                  |dt        ddd	d
dddi             t        j                  |       y # t        j                  |       w xY w)Nat  
            [formatters]
            keys=default

            [formatter_default]

            [handlers]
            keys=console

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

            [loggers]
            keys=root

            [logger_root]
            formatter=default
            handlers=console
            test_logging_r  r  asciirE  r   Fr9  z5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)r  datefmtclass)versionr  
formatters)rG  defaults)r  r  stripr.  r/  r0  r  encoderK   r   r  r  dictrQ  )rD   inir3  r4  s       rH   !test_defaults_do_no_interpolationz0ConfigFileTest.test_defaults_do_no_interpolation  s    <oo  & ' 	( !!HB	HHRG,-HHRLNN%% -2!&]'?%8$ 
 &   IIbMBIIbMs    A.C CN)%rp   rq   rr   r	   r  rW   r  config1r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rs   rj   rH   r  r    s   ? / I I,G4G@H@ oolL9G oo/1LMG* +*+G6 oo35RSG'GT#GLG,G2L*D&&$ &- &FF&22)&V7$8*H0I6X*rj   r  c                   4    e Zd Z	 eZdZd Zd Zd Zd Z	d Z
y)SocketHandlerTestrN  r   c                     	 t         j                  |        d x| _        x| _        | _        	 | j                  | j                  | j                  d      x| _        }|j                          |j                  j                          t        j                  j                  }t        |j                   t"              r |d|j$                        | _        n ||j                   d       | _        d| _        | j(                  j+                  | j(                  j                  d          | j(                  j-                  | j                         t/        j0                  d      | _        y # t        $ r}|| _        Y d }~y d }~ww xY wN{Gz?rN  r   r   )r   rI   r  	sock_hdlrserver_exceptionserver_classaddresshandle_socketr  r]  r  r  r   r@   SocketHandler
isinstanceserver_addressr_   r  
log_outputr1   rL   rB   r  	SemaphorerX  rD   r  r&  hclss       rH   rI   zSocketHandlerTest.setUp:  s/   	7t?CCCdnt'<	#'#4#4T\\595G5G$O ODK&LLN 	--f++U3!+v{{;DN!&"7"7>DN&&t'7'7'@'@'CD##DNN3 **1-  	$%D!	s   >E# #	E=,E88E=c                 H   	 	 | j                   r?| j                  j                  | j                          | j                   j                          | j                  r| j                  j                          t        j                  |        y # t        j                  |        w xY wr   )r  r1   rL   rK   r  r  r   rS   rm   s    rH   rS   zSocketHandlerTest.tearDownT  sm    &	$~~  ..t~~>$$&{{  "d#Hd#   A1B
 
B!c                    |j                   }	 |j                  d      }t        |      dk  ry t        j                  d|      d   }|j                  |      }t        |      |k  r/||j                  |t        |      z
        z   }t        |      |k  r/t        j                  |      }t        j                  |      }| xj                  |j                  dz   z  c_	        | j                  j                          )Nrv  >Lr   
)
connectionrecvr[   structunpackpickleloadsr   r   r  r  rX  r  )rD   requestconnchunkslenobjr   s          rH   r  zSocketHandlerTest.handle_socket_  s    !!IIaLE5zA~==u-a0DIIdOEe*t#		$U*; << e*t#,,u%C**3/FOOvzzD00OLL  " rj   c                 `   | j                   r| j                  | j                          t        j                  d      }|j	                  d       | j
                  j                          |j                  d       | j
                  j                          | j                  | j                  d       y )Ntcpr   eggs
spam
eggs
)
r  skipTestr   r   r   rX  r  r   rZ   r  r  s     rH   test_outputzSocketHandlerTest.test_outputn  sy      MM$//0""5)VV.9rj   c                 R   | j                   r| j                  | j                          d| j                  _        | j                  j                          	 t        d      # t        $ r | j                  j                  d       Y nw xY w| j                  j                  d       t        j                         }| j                  | j                  j                  |       t        j                  | j                  j                  |z
  dz          | j                  j                  d       y )Ng      @zDeliberate mistakez
Never sentzNever sent, eitherrN  zNor this)r  r6  r  
retryStartr  r  r  r1   r  r   rx  r  	retryTimerz  )rD   nows     rH   test_noserverzSocketHandlerTest.test_noservery  s      MM$//0 %(!	5344 	5&&|4	534iik4>>33S9

4>>++c1E9:z*s   A $BBN)rp   rq   rr   r)  r  r  rI   rS   r  r7  r<  rs   rj   rH   r  r  1  s*     * LG.4	$#	:+rj   r  zUnix sockets requiredc                   *    e Zd Z	  eed      reZd Zy)UnixSocketHandlerTestrC  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   create_unix_domain_namer  r   r   rQ  r  rI   rm   s    rH   rI   zUnixSocketHandlerTest.setUp  8    $<<>	(($,,7%rj   N)rp   rq   rr   hasattrr  rE  r  rI   rs   rj   rH   r>  r>    s     4vy!+&rj   r>  c                   .    e Zd Z	 eZdZd Zd Zd Zd Z	y)DatagramHandlerTestr  c                    	 t         j                  |        d x| _        x| _        | _        	 | j                  | j                  | j                  d      x| _        }|j                          |j                  j                          t        j                  j                  }t        |j                   t"              r |d|j$                        | _        n ||j                   d       | _        d| _        | j(                  j+                  | j(                  j                  d          | j(                  j-                  | j                         t/        j0                         | _        y # t        $ r}|| _        Y d }~y d }~ww xY wr  )r   rI   r  r  r  r  r  handle_datagramr  r]  r  r  r   r@   DatagramHandlerr  r  r_   r  r  r1   rL   rB   r  r  rX  r   s       rH   rI   zDatagramHandlerTest.setUp  s+   	7t?CCCdnt'<	#'#4#4T\\595I5I4$Q QDK&LLN 	//f++U3!+v{{;DN!&"7"7>DN&&t'7'7'@'@'CD##DNN3 (  	$%D!	s   >E" "	E<+E77E<c                 H   	 	 | j                   r| j                   j                          | j                  r?| j                  j	                  | j                         | j                  j                          t        j                  |        y # t        j                  |        w xY wr   )r  r  r  r1   rL   rK   r   rS   rm   s    rH   rS   zDatagramHandlerTest.tearDown  sm    &	${{  "~~  ..t~~>$$&d#Hd#r#  c                 ,   t        j                  dd      }|j                  t        |      d  }t	        j
                  |      }t        j                  |      }| xj                  |j                  dz   z  c_        | j                  j                          y )Nr%  r   r&  )r)  packpacketr[   r+  r,  r   r   r  r  rX  r  )rD   r-  r0  rK  r1  r   s         rH   rF  z#DatagramHandlerTest.handle_datagram  sk    {{4#D	
+ll6"&&s+6::,,rj   c                    | j                   r| j                  | j                          t        j                  d      }|j	                  d       | j
                  j                          | j
                  j                          |j	                  d       | j
                  j                          | j                  | j                  d       y )Nudpr   r4  r5  )
r  r6  r   r   r   rX  r  rM   rZ   r  r  s     rH   r7  zDatagramHandlerTest.test_output  s      MM$//0""5)VV.9rj   N)
rp   rq   rr   r7  r  r  rI   rS   rF  r7  rs   rj   rH   rD  rD    s%     $ LG)4	$
:rj   rD  c                   *    e Zd Z	  eed      reZd Zy)UnixDatagramHandlerTestrC  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   r@  r  r   r   rQ  rD  rI   rm   s    rH   rI   zUnixDatagramHandlerTest.setUp  s8    $<<>	(($,,7!!$'rj   Nrp   rq   rr   rB  r  rJ  r  rI   rs   rj   rH   rO  rO    s     7vy!-(rj   rO  c                   4    e Zd Z	 eZdZd Zd Zd Zd Z	d Z
y)SysLogHandlerTestr  c                    	 t         j                  |        d x| _        x| _        | _        	 | j                  | j                  | j                  d      x| _        }|j                          |j                  j                          t        j                  j                  }t        |j                   t"              r' ||j                   d   |j$                  f      | _        n ||j                         | _        d| _        | j(                  j+                  | j(                  j                  d          | j(                  j-                  | j                         t/        j0                         | _        y # t        $ r}|| _        Y d }~y d }~ww xY w)Nr  r   rj   )r   rI   r  sl_hdlrr  r  r  rF  r  r]  r  r  r   r@   rY  r  r  r_   r  r  r1   rL   rB   r  r  rX  r   s       rH   rI   zSysLogHandlerTest.setUp  s7   	7t=AAAdlT%:	#'#4#4T\\595I5I4$Q QDK&LLN 	--f++U3!6!6q!96;; GHDL 5 56DL&&t'7'7'@'@'CD##DLL1 (  	$%D!	s   >E/ /	F	8FF	c                 H   	 	 | j                   r| j                   j                          | j                  r?| j                  j	                  | j                         | j                  j                          t        j                  |        y # t        j                  |        w xY wr   )r  r  rU  r1   rL   rK   r   rS   rm   s    rH   rS   zSysLogHandlerTest.tearDown  sm    "	${{  "||  ..t||<""$d#Hd#r#  c                 Z    |j                   | _        | j                  j                          y r   )rK  r  rX  r  )rD   r-  s     rH   rF  z!SysLogHandlerTest.handle_datagram  s    !..rj   c                 ,   | j                   r| j                  | j                          t        j                  d      }|j	                  d       | j
                  j                  t        j                         | j                  | j                  d       | j
                  j                          d| j                  _        |j	                  d       | j
                  j                  t        j                         | j                  | j                  d       | j
                  j                          d| j                  _        |j	                  d       | j
                  j                  t        j                         | j                  | j                  d       y )Nslh   späm
   <11>späm Fs	   <11>spämu   häm-s   <11>häm-späm)r  r6  r   r   r   rX  r  r   r^  rZ   r  rM   rU  
append_nulidentr  s     rH   r7  zSysLogHandlerTest.test_output  s     MM$//0""5)Y'../*@A"'Y'../*<=&Y'../*GHrj   c                 B   t        j                  d      }| j                  j                          | j                  j                          |j                  d       | j                  j                  t        j                         | j                  | j                  d       y )NrY  rZ  r[  )r   r   rU  rK   rX  rM   r   r  r   r^  rZ   r  r  s     rH   test_udp_reconnectionz'SysLogHandlerTest.test_udp_reconnection0  sk    ""5)Y'../*@Arj   N)rp   rq   rr   r7  r  r  rI   rS   rF  r7  r_  rs   rj   rH   rS  rS    s,     , LG)4	$I&Brj   rS  c                   *    e Zd Z	  eed      reZd Zy)UnixSysLogHandlerTestrC  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   r@  r  r   r   rQ  rS  rI   rm   s    rH   rI   zUnixSysLogHandlerTest.setUp@  rA  rj   NrQ  rs   rj   rH   ra  ra  8  s     4vy!-&rj   ra  z$IPv6 support required for this test.c                   2     e Zd Z	 eZdZ fdZ fdZ xZS )IPv6SysLogHandlerTest)z::1r   c                 h    t         j                  | j                  _        t        t
        |           y r   )r  AF_INET6r  rG  r  rd  rI   r  s    rH   rI   zIPv6SysLogHandlerTest.setUpO  s#    +1??(#T02rj   c                 h    t         j                  | j                  _        t        t
        |           y r   )r  AF_INETr  rG  r  rd  rS   r  s    rH   rS   zIPv6SysLogHandlerTest.tearDownS  s#    +1>>(#T35rj   )	rp   rq   rr   r7  r  r  rI   rS   r  r  s   @rH   rd  rd  F  s!     1 LG36 6rj   rd  c                        e Zd Z	 d Zd Zd Zy)HTTPHandlerTestc                 b    	 t         j                  |        t        j                         | _        y r   )r   rI   r  r  rX  rm   s    rH   rI   zHTTPHandlerTest.setUp\  s!    	7t (rj   c                 |   |j                   | _         t        |j                        | _        | j                   dk(  r9	 t	        |j
                  d         }|j                  j                  |      | _        |j                  d       |j                          | j                  j                          y #  d | _        Y GxY w)NrL  zContent-Length   )commandr   rW  log_dataintheadersrfilera   	post_datasend_responseend_headersrX  r  )rD   r-  rlens      rH   handle_requestzHTTPHandlerTest.handle_requestb  s     .<<6!&7??+;<=!(!3!3D!9 	c"	&!%s   8B0 0	B;c                 L   t        j                  d      }| j                  }|j                  | j                  j                  d          dD ]  }d}|r	 dd l}t        j                  j                  t              }t        j                  j                  |d      }|j                  |j                        }|j                  |       |j                  |      }	nd }d }	t!        || j"                  d|      x| _        }
|
j'                          |
j(                  j+                          d	|
j,                  z  }|xr |}t         j                  j/                  |d
|	d      | _        d | _        |j5                  | j0                         dD ](  }|| j0                  _        | j8                  j;                          d}|j=                  |       | j8                  j+                          | j?                  | j2                  j                  d
       | j?                  | j@                  |       |dk(  r tC        | j2                  jD                        }n$tC        | jF                  jI                  d            }| j?                  |d   dg       | j?                  |d   dg       | j?                  |d   |g       + | j$                  jK                          | j                  j                  | j0                         | j0                  jM                           y # t        $ r d }Y Cw xY w)Nhttpr   r  r  zkeycert.pem)cafiler  )r   zlocalhost:%dz/frob)foobar)securecontextcredentials)rK  rL  rZ  rK  rE  rF   funcNamer7  r  )'r   r   r1   rL   r@   sslr0  rW  dirname__file__r   
SSLContextPROTOCOL_TLS_SERVERload_cert_chaincreate_default_contextImportErrorr  rw  r  r  r  r  server_portr_  h_hdlrro  rB   rd  rX  rM   r   rZ   rn  r   queryrs  decoder  rK   )rD   r   r1   r}  r  r  herelocalhost_certr   r~  r  hostsecure_clientrd  r  ds                   rH   r7  zHTTPHandlerTest.test_outputo  s   ""6*&&!!$"2"2";";A">?# 0	 F#D
P 77??84D%'WW\\$%FN ^^C,C,CDF**>:!888OG#1$8K8K48$I IDK&LLNLL!F$6$66D"-vM!**66tW>K?FCQ 7 SDK !DM""4;;/) 2%+"""$S!!!#  !3!3W=  v6U? !4!45A !6!6w!?@A  6VH5  :@  5C512  KK**4;;7KKa0	 
 # "!F"s   LL#"L#N)rp   rq   rr   rI   rw  r7  rs   rj   rH   rj  rj  W  s      )5 rj   rj  c                   &    e Zd Z	 d Zd Zd Zd Zy)
MemoryTestc                 >    	 t         j                  |        i | _        y r   )r   rI   
_survivorsrm   s    rH   rI   zMemoryTest.setUp  s    Ftrj   c                     	 |D ]:  }t        |      t        |      f}t        j                  |      | j                  |<   < y r   )r  r  rz  r{  r  )rD   r1  r1  keys       rH   _watch_for_survivalzMemoryTest._watch_for_survival  s?    	 	4CS'49$C#*;;s#3DOOC 	4rj   c                    	 t        j                          g }| j                  j                         D ]!  \  \  }}} |       |j	                  |       # |r/| j                  dt        |      dj                  |      fz         y y )Nz;%d objects should have survived but have been destroyed: %sz, )gccollectr  r   r]  r^   r[   r   )rD   deadid_repr_r{  s        rH   _assertTruesurvivalzMemoryTest._assertTruesurvival  s    I


!%!6!6!8 	#LS%#u}E"	# II .14TDIIdO0LM N rj   c                 D   | j                   j                  t        j                         t        j                  d      }| j                  |       |j                  t        j                         | j                   j                  | j                                |j                  | j                                | j                  dg       ~| j                          t        j                  d      }|j                  | j                                | j                  ddg       y )Nr{  )r{  r8   r}   )r{  r8   r~   )r1   r7   r   r   r   r  r8   r   rn   ri   r  )rD   r{  r|  s      rH   test_persistent_loggersz"MemoryTest.test_persistent_loggers  s     	!!',,/&  %W]]#t0023		$##%&!
 	   "&		$##%&!!
 	rj   N)rp   rq   rr   rI   r  r  r  rs   rj   rH   r  r    s    4
4
Nrj   r  c                       e Zd Zd Zd Zy)EncodingTestc                    t        j                  d      }t        dd      }d}	 t        j                  |d      }|j	                  |       	 |j                  |       |j                  |       |j                          t        |d      }	 | j                  |j                         j                         |       |j                          	 t        j                  j                  |      rt        j                  |       y y # |j                  |       |j                          w xY w# |j                          w xY w# t        j                  j                  |      rt        j                  |       w w xY w)Nr  r  ztest_logging-1-u   foorE  r  )r   r   r5  rk  rB   r   rL   rK   r  rZ   ra   rstripr0  rW  isfiler  )rD   r   r4  r  r   r   s         rH   test_encoding_plain_filez%EncodingTest.test_encoding_plain_file  s   'F$56	))"w?GNN7# D!!!'*R'*A  !2D9	ww~~b!		" " !!'* 	ww~~b!		" "s;   (D> D .D> .D) <D> #D&&D> )D;;D> >7E5c                    t        j                  d      }d}t        j                  d      }d|_        t        j                         } ||d      }t        j                  |      }|j                  |       	 |j                  |       |j                  |       |j                          |j                         }| j                  |d       y # |j                  |       |j                          w xY w)Nr  u   до свиданияcp1251stricts    
)r   r   codecs	getwriterrG  r4   BytesIOr9   rB   r   rL   rK   rX   rZ   )rD   r   messagewriter_classr6   writerr   rh   s           rH   test_encoding_cyrillic_unicodez+EncodingTest.test_encoding_cyrillic_unicode  s    'Q''1 (fh/''/w	KK g&MMOOOJK g&MMOs   8C #C0N)rp   rq   rr   r  r  rs   rj   rH   r  r    s    2Lrj   r  c                       e Zd Zd Zd Zy)WarningsTestc           	      *   t        j                         5  t        j                  d       | j	                  t        j                  d       t        j
                  dt               t        j                         }t        j                  |      }t        j                  d      }|j                  |       t        j                  d       |j                  |       |j                         }|j                          | j!                  |j#                  d      d       t        j                         }t        j$                  d	t        d
d|d       |j                         }|j                          | j'                  |d       d d d        y # 1 sw Y   y xY w)NTFalways)categorypy.warningszI'm warning you...z UserWarning: I'm warning you...
r   Explicitdummy.py*   z
Dummy linez0dummy.py:42: UserWarning: Explicit
  Dummy line
)warningscatch_warningsr   captureWarningsr   filterwarningsUserWarningr4   r5   r9   r   rB   warnrL   rX   rK   r  findshowwarningrZ   )rD   r6   rR   r   rh   a_files         rH   test_warningszWarningsTest.test_warnings	  s-   $$& 	F##D)OOG33U;##H{C[[]F%%f-A&&}5Fa MM./  #!AGGIqvv&IJAN [[]F  [*b!'7!ALLNQDF)	F 	F 	Fs   E+F		Fc                    t        j                         5  t        j                  d       | j	                  t        j                  d       t        j
                  d      }| j                  |j                  g        t        j                  dt        dd       | j                  t        |j                        d       | j                  |j                  d   t        j                         d d d        y # 1 sw Y   y xY w)	NTFr  r  r  r  r   r   )r  r  r   r  r   r   rZ   r@   r  r  r[   assertIsInstanceNullHandlerr  s     rH   test_warnings_no_handlersz&WarningsTest.test_warnings_no_handlers$	  s    $$& 
	K##D)OOG33U; &&}5FV__b1  [*bIS115!!&//!"4g6I6IJ
	K 
	K 
	Ks   CC33C<N)rp   rq   rr   r  r  rs   rj   rH   r  r  
	  s    F0Krj   r  c                 .    t        j                  | |      S r   )r   r;   )r  r  s     rH   
formatFuncr  2	  s    VW--rj   c                       e Zd ZddZy)myCustomFormatterNc                      y r   rs   )rD   fmtr  s      rH   r  zmyCustomFormatter.__init__6	  s    rj   r   )rp   rq   rr   r  rs   rj   rH   r  r  5	  s    rj   r  c                  *    t        j                         S r   )r   r9   rs   rj   rH   handlerFuncr  9	  s      ""rj   c                       e Zd Zy)CustomHandlerNrp   rq   rr   rs   rj   rH   r  r  <	      rj   r  c                       e Zd Zy)CustomListenerNr  rs   rj   rH   r  r  ?	  r  rj   r  c                       e Zd Zy)CustomQueueNr  rs   rj   rH   r  r  B	  r  rj   r  c                  *    t        j                         S r   )queueQueuers   rj   rH   
queueMakerr  E	  s    ;;=rj   c                     fd}|S )Nc                 F    |j                  d       t        | g|i |S )Nrespect_handler_level)
setdefaultr  )r  r@   r2  r  s      rH   funczlistenerMaker.<locals>.funcI	  s*    13HIe9h9&99rj   rs   )arg1arg2r  r  s     ` rH   listenerMakerr  H	  s    : Krj   c            
       L   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z   ddiddddd	d
iddgddZdedde dz   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z   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z   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dd5d6d7id8iddddd	d
iddgddZdd9d:d;d<iddd9d=d>d?d9d@ddAdBdCddDgdEdFidGZ dde dz   dd!dHiddddd	d
idIddgdEdFidGZ!dde dz   dd!dJiddddd	d
idIddgdEdFidGZ"dde dKz   dd!dJiddddd	d
idIddgdEdFidGZ#ddedd!dHiddddd	d
idIddgdEdFidGZ$ddedLd6dMidNiddddd	d
idIddgdEdFidGZ%ddOdPidQdRgdSdTddUgddVZ&dW Z'dX Z(dY Z)efdZZ*d[ Z+d\ Z,d] Z-d^ Z.d_ Z/d` Z0da Z1db Z2dc Z3dd Z4de Z5df Z6dg Z7dh Z8di Z9dj Z:dk Z;dl Z<dm Z=ddoZ> e?j                         dp        ZA e?j                         dq        ZB e?j                         dr        ZCds ZDdt ZEdu ZFdv ZGdw ZHdx ZIdy ZJdz ZKd{ ZLd| ZMd} ZNd~ ZOd ZPd ZQd ZR eSj                         d        ZUd ZVyn)ConfigDictTestr  r   form1r  z%(levelname)s ++ %(message)sr  logging.StreamHandlerr   zext://sys.stdout)r  r  r  r6   r   r  r@   )r  r  r@   r  r  r8   r  )r  r  r@   loggersr  zext://sys.stdboutNTOSETWRANINGmisspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)()r  z.formatFunc)r  form2form3r  )r  hand2z.CustomHandlerzinvalid parameter name)r  r  r  r6   r   r  F)compilerr  )r  r  r  r@   r  r  Tr   )r  incrementalr@   r  filt1rF   )r  r  r  r6   filtersr  r  )r  r  r  r@   r  r  zcfg://true_formatterszcfg://handler_configs[hand1])r  true_formattershandler_configsr  r@   r  r  )r  r  r  r@   r  r  r   r|  !
)r{  
terminator)r  r  r  r6   r   z%(message)s ++ %(customfield)sr  defaultvalue)r  r	  mySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s$)r  style)r  r  r  zlogging.handlers.MemoryHandler   
fileGlobal)r  capacityr  r  r  )r   bufferGlobalmymoduler  true)r  r@   rg  )r  r  r@   r  )r  r  validatemy_test_logger_custom_formatter)r  r  r  z.myCustomFormatterz2%(levelname)s:%(name)s:%(message)s:%(customfield)smyvalue)r  r  r	  r  logging.FileHandlerzlogging.handlers.QueueHandlerh1)r  r@   )r	  ahr
  r  r@   r  c                 B    t         j                  j                  |       y r   )r   r  
dictConfig)rD   r  s     rH   r  zConfigDictTest.apply_configy  s    !!$'rj   c                 R    t        j                  |      }| j                  ||       y r   )r   getHandlerByNamer  )rD   rF   rp  rR   s       rH   check_handlerzConfigDictTest.check_handler|  s"    $$T*a%rj   c                    t        j                         5 }| j                  | j                         | j	                  dt
        j                         t        j                         }|j                  | j                                |j                  | j                                | j                  dg|       | j                  g        d d d        y # 1 sw Y   y xY w)Nr  r  r  )r   r  r  r  r  r   r9   r   r   rn   r   ri   r  s      rH   r  zConfigDictTest.test_config0_ok  s    $$& 	&&dll+w(=(=>&&(FKK))+,LL**,-!!# "  !!"%	& 	& 	&s   B3CCc                 j   t        j                         5 }| j                  |       t        j                  d      }|j                  | j                                |j                  | j                                | j                  ddg|       | j                  g        d d d        y # 1 sw Y   y xY wr  r  r  s       rH   r  zConfigDictTest.test_config1_ok  r  r  c                 Z    | j                  t        | j                  | j                         y r   r  rm   s    rH   r  z#ConfigDictTest.test_config2_failure  r  rj   c                 Z    | j                  t        | j                  | j                         y r   )r<  r  r  config2arm   s    rH   test_config2a_failurez$ConfigDictTest.test_config2a_failure      )T%6%6Frj   c                 Z    | j                  t        | j                  | j                         y r   )r<  r  r  config2brm   s    rH   test_config2b_failurez$ConfigDictTest.test_config2b_failure  r  rj   c                 Z    | j                  t        | j                  | j                         y r   r  rm   s    rH   r  z#ConfigDictTest.test_config3_failure  r  rj   c                    t        j                         5 }| j                  | j                         | j	                  dt
        j                         	 t               # t        $ r t        j                  d       Y nw xY wt        j                  j                  d       | j                  |j                         d       | j                  g        d d d        y # 1 sw Y   y xY w)Nr  r  r   r  )r   r  r  r  r  r   r9   r  r  rO  r  r  rZ   rX   ri   rD   r  s     rH   r  zConfigDictTest.test_config4_ok  s    $$& 	&&dll+w(=(=>2"n$ 2!!.12JJOOAV__.AC !!"%	& 	& 	&s*   <C
AA=:C<A==ACC"c                    t        j                         5 }| j                  | j                         	 t	               # t        $ r t        j                  d       Y nw xY wt        j                  j                  d       | j                  |j                         d       | j                  g        d d d        y # 1 sw Y   y xY wr  )r   r  r  config4ar  r   r  rO  r  r  rZ   rX   ri   r  s     rH   test_config4a_okzConfigDictTest.test_config4a_ok  s    $$& 	&&dmm,2"n$ 2!!.12JJOOAV__.AC !!"%	& 	& 	&s'   B9
<AB9AAB99Cc                 h    | j                  | j                         | j                  dt               y )Nr  r  )r  r  r  r  rm   s    rH   r  zConfigDictTest.test_config5_ok  s'    DLL17M2rj   c                 Z    | j                  t        | j                  | j                         y r   )r<  r  r  r  rm   s    rH   test_config6_failurez#ConfigDictTest.test_config6_failure  s    )T%6%6Erj   c                    t        j                         5 }| j                  | j                         t	        j
                  d      }|j                  | j                                |j                  | j                                | j                  ddg|       | j                  g        d d d        t        j                         5 }| j                  | j                         | j                  dt        j                         t	        j
                  d      }| j                  |j                         t	        j
                  d      }|j                  | j                                |j                  | j                                | j                  ddg|       | j                  g        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nr  r  r  r  r  r  r   r~   r|   r   )r   r  r  r  r   r   r   rn   r   ri   r  r  r9   rC   r   r  s      rH   r  zConfigDictTest.test_config7_ok  s   $$& 	&&dll+&&'89FKK))+,LL**,-!!#  " 
 !!"%	& $$& 	&&dll+w(=(=>&&'89FOOFOO,&&'78FKK))+,LL**,-!!#  " 
 !!"%	& 	&	& 	&	& 	&s   BF4C%G4F>G
c                    t        j                         5 }| j                  | j                         t	        j
                  d      }|j                  | j                                |j                  | j                                | j                  ddg|       | j                  g        d d d        t        j                         5 }| j                  | j                         | j                  dt        j                         t	        j
                  d      }| j                  |j                         |j                  | j                                |j                  | j                                t	        j
                  d      }|j                  | j                                |j                  | j                                | j                  g d|       | j                  g        d d d        y # 1 sw Y   JxY w# 1 sw Y   y xY w)Nr  r  r  r  r  r  )r%  r&  r   r   r|   r   )r   r  r  r  r   r   r   rn   r   ri   r  r  r9   rV  r   r  s      rH   test_config_8_okzConfigDictTest.test_config_8_ok  s   $$& 	&&dll+&&'89FKK))+,LL**,-!!#  " 
 !!"%	& $$& 	&&dll+w(=(=>&&'89FV__-KK))+,LL**,-&&'78FKK))+,LL**,-!! #
  "  !!"%'	& 	&	& 	&	& 	&s   BG2D#G?2G<?Hc                    t        j                         5 }| j                  | j                         | j	                  dt
        j                         t        j                  d      }t        j                  d      }|j                  | j                                |j                  | j                                |j                  | j                                | j                  g d|       | j                  g        d d d        t        j                         5 }| j                  | j                         | j	                  dt
        j                         t        j                  d      }| j                  |j                         |j                  | j                                |j                  | j                                t        j                  d      }|j                  | j                                |j                  | j                                j                  | j                                | j                  g d|       | j                  g        d d d        y # 1 sw Y   ixY w# 1 sw Y   y xY w)Nr  r  r  r  r  r  r  )r   r  r  r  r  r   r9   r   r   rn   r   r  ri   config8arV  r   r  s       rH   test_config_8a_okz ConfigDictTest.test_config_8a_ok  s   $$& 	&&dmm,w(=(=>&&'89F !**+@AJKK))+,LL**,- 1 1 34!! # 	 "  !!"%)	&* $$& 	&&dmm,w(=(=>&&'89FV__-KK))+,LL**,-&&'78FKK))+,LL**,- 1 1 34!! #
  "  !!"%+	& 	&+	& 	&*	& 	&s   C)I%EI2%I/2I;c                    t        j                         5 }| j                  | j                         | j	                  dt
        j                         t        j                  d      }|j                  | j                                | j                  g |       | j                  | j                         |j                  | j                                | j                  g |       | j                  | j                         |j                  | j                                | j                  dg|       d d d        y # 1 sw Y   y xY w)Nr  r  r  r%  )r   r  r  r  r  r   r9   r   r   rn   ri   config9aconfig9br  s      rH   test_config_9_okzConfigDictTest.test_config_9_okB  s   $$& 	&dll+w(=(=>&&'89FKK))+,!!"V!4dmm,KK))+,!!"V!4dmm,KK))+,!!# " 	 	 	s   DD<<Ec                    t        j                         5 }| j                  | j                         | j	                  dt
        j                         t        j                  d      }|j                  | j                                t        j                  d      }|j                  | j                                t        j                  d      }|j                  | j                                t        j                  d      }|j                  | j                                | j                  ddg|       d d d        y # 1 sw Y   y xY w	Nr  r  r  r  zcompiler.parser.codegen)r   r{   r&  r  )r   r  r  config10r  r   r9   r   r   rn   r   ri   r  s      rH   test_config_10_okz ConfigDictTest.test_config_10_okU  s   $$& 	&dmm,w(=(=>&&'89FNN4,,./&&z2FNN4,,./&&'78FNN4,,./&&'@AFLL**,-!! #  " 	 	 	s   D!D??Ec                 :    | j                  | j                         y r   )r  config11rm   s    rH   test_config11_okzConfigDictTest.test_config11_oki  s    T]]+rj   c                 Z    | j                  t        | j                  | j                         y r   )r<  r  r  config12rm   s    rH   test_config12_failurez$ConfigDictTest.test_config12_failurel      )T%6%6Frj   c                 Z    | j                  t        | j                  | j                         y r   )r<  r  r  config13rm   s    rH   test_config13_failurez$ConfigDictTest.test_config13_failureo  r<  rj   c                    t        j                         5 }| j                  | j                         t        j
                  d   }| j                  |j                  d       | j                  |j                  d       t	        j                  d       | j                  |j                         j                  d             d d d        y # 1 sw Y   y xY w)Nr  r|  r  ExclamationzExclamation!
)r   r  r  config14r   r"   rZ   r{  r  r   rC   rX   rZ  )rD   r  rR   s      rH   test_config14_okzConfigDictTest.test_config14_okr  s    $$& 	J&dmm,!!'*AQUUE*Q\\51OOM*OOFOO-667GHI	J 	J 	Js   B*CCc                 0   | j                         5  t        dd      }ddd|ddiddgid	}| j                  |       | j                  |       d d d        t        j                  j
                  d
   }| j                  t        |       y # 1 sw Y   >xY w)Nr  r  r   r  r  rE  )r  filenamerG  r@   r  r   )r  r5  r  r   r  r@   r   r  )rD   r4  r  r   s       rH   test_config15_okzConfigDictTest.test_config15_ok{  s    ++- 	&(9:B !6$&$+ F f%f%%	&( ,,''*('26+	& 	&s   >BBc                 j   | j                  | j                         t        j                  d   }|j                  j                  t        j                  ddd            }| j                  |d       |j                  j                  t        j                  ddi            }| j                  |d       y )Nr  Hellor  r  zHello ++ customvaluer  zHello ++ defaultvalue)r  config16r   r"   r  r  r   rZ   )rD   rR   r  s      rH   test_config16_okzConfigDictTest.test_config16_ok  s    $--(g& ##G$9$9M:%< =!78 ##G$9$9G% !89rj   Nc                    |j                  d      }t        j                  j                  d|      }|j	                          |j
                  j                          |j                  }|j
                  j                          	 t        j                  t        j                  t        j                        }|j                  d       |j                  d|f       t        j                  dt!        |            }||z   }d}t!        |      }	|	dkD  r$|j#                  ||d        }
||
z  }|	|
z  }	|	dkD  r$|j%                          |j
                  j                  d       t        j                  j'                          t)        j*                  |       y # |j
                  j                  d       t        j                  j'                          t)        j*                  |       w xY w)NrE  r   g       @rN  r%  )r  r   r  listenr  r  r  r  rM   r  rh  SOCK_STREAM
settimeoutconnectr)  rJ  r[   sendrK   stopListeningr   r   )rD   textverifyr  r  r%  r0  rh   	sentsofarleftsents              rH   setup_via_listenerz!ConfigDictTest.setup_via_listener  s[   {{7#NN!!!V,			vv		,==1C1CDDOOC LL+t,-;;tSY/DtAIq6D(yy9:/T!	 ( JJLGGLLNN((*((+ GGLLNN((*((+s   B/F 3F AG"c                    t        j                         5 }| j                  t        j                  | j
                               | j                  dt        j                         t        j                  d      }|j                  | j                                t        j                  d      }|j                  | j                                t        j                  d      }|j                  | j                                t        j                  d      }|j                  | j                                | j                  ddg|       d d d        y # 1 sw Y   y xY wr3  )r   r  rW  jsondumpsr4  r  r   r9   r   r   rn   r   ri   r  s      rH   test_listen_config_10_okz'ConfigDictTest.test_listen_config_10_ok  s   $$& 	&##DJJt}}$=>w(=(=>&&'89FNN4,,./&&z2FNN4,,./&&'78FNN4,,./&&'@AFLL**,-!! #  " 	 	 	s   D4EEc                    t        j                         5 }| j                  t        j                  t
        j                               t        j                  d      }|j                  | j                                |j                  | j                                | j                  ddg|       | j                  g        d d d        y # 1 sw Y   y xY wr  )r   r  rW  r  r  r  r  r   r   r   rn   r   ri   r  s      rH   test_listen_config_1_okz&ConfigDictTest.test_listen_config_1_ok  s    $$& 	&&##HOON4J4J$KL&&'89FKK))+,LL**,-!!#  " 
 !!"%	& 	& 	&s   B,C

Cc                    d }d }t        j                  d      }t        j                  t        j
                        }t        j                         5 }| j                  ||       |j                  | j                                |j                  | j                                d d d        | j                  g        | j                  ddgd       t        j                         5 }| j                  |       t        j                  d      }|j                  | j                                |j                  | j                                d d d        | j                  d	d
g|       | j                  ddgd       t        j                         5 }| j                  |d d d   |       t        j                  d      }|j                  | j                                |j                  | j                                d d d        | j                  ddg|       | j                  ddgd       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   MxY w)Nc                      y r   rs   stuffs    rH   verify_failz6ConfigDictTest.test_listen_verify.<locals>.verify_fail  s    rj   c                     | d d d   S )NrI  rs   r`  s    rH   verify_reversez9ConfigDictTest.test_listen_verify.<locals>.verify_reverse  s    2;rj   r  r  r  r  r   )rc   r%  r&  rI  r(  r)  )r   r   r  r  r  r  r   r  rW  r   rn   r   ri   )rD   rb  rd  r   to_sendr  s         rH   test_listen_verifyz!ConfigDictTest.test_listen_verify  sE   		 ""#45//."8"89 $$& 	.&##G[9KK))+,LL**,-		.
 	b0
 + 	 	, $$& 	.&##G,&&'89FKK))+,LL**,-	. 	
  	 	
 	
 + 	 	, $$& 	.&##GDbDM>B&&'89FKK))+,LL**,-	. 	
  	 	
 	
 + 	 	,Y	. 	.	. 	.$	. 	.s'   AH2(A%H?A,I2H<?IIc                 Z    | j                  t        | j                  | j                         y r   )r<  r^  r  
bad_formatrm   s    rH   test_bad_formatzConfigDictTest.test_bad_format#  s    *d&7&7Irj   c                    t        j                  | j                        }d|d   d   d<   | j                  |       t	        j
                  d      j                  d   }| j                  |j                  t        j                         | j                  |j                  j                  t        j                         | j                  t        t	        j                               ddg       y )	Nz-${asctime} (${name}) ${levelname}: ${message}r  r  r  r  r   r  r   )r#   deepcopyrh  r  r   r   r@   r  r  r;  r  _styleStringTemplateStylerZ   sortedgetHandlerNamesrD   r  r   s      rH   !test_bad_format_with_dollar_stylez0ConfigDictTest.test_bad_format_with_dollar_style&  s    t/>m|01(;&!##J/88;gnngoo>g//66%99	; 7 7 9:(,7	9rj   c                     | j                  | j                         t        j                  d      j                  d   }| j                  |j                  t               y Nr  r   )r  custom_formatter_class_validater   r   r@   r  r  r  rD   r   s     rH   )test_custom_formatter_class_with_validatez8ConfigDictTest.test_custom_formatter_class_with_validate2  sJ    $>>?##$EFOOPQRg//1CDrj   c                     | j                  | j                         t        j                  d      j                  d   }| j                  |j                  t               y rs  )r   custom_formatter_class_validate2r   r   r@   r  r  r  ru  s     rH   *test_custom_formatter_class_with_validate2z9ConfigDictTest.test_custom_formatter_class_with_validate27  sJ    $??@##$EFOOPQRg//1CDrj   c                     | j                   j                         }d|d   d   d<   | j                  |       t        j                  d      j
                  d   }| j                  |j                  t               y )Nr  r  r  r  r  r   )	rt  r#   r  r   r   r@   r  r  r  rp  s      rH   9test_custom_formatter_class_with_validate2_with_wrong_fmtzHConfigDictTest.test_custom_formatter_class_with_validate2_with_wrong_fmt<  sn    55::<14|W%g. 	&!##$EFOOPQRg//1CDrj   c                 Z    | j                  t        | j                  | j                         y r   )r<  r^  r   custom_formatter_class_validate3rm   s    rH   *test_custom_formatter_class_with_validate3z9ConfigDictTest.test_custom_formatter_class_with_validate3E  s     *d&7&79^9^_rj   c                 Z    | j                  t        | j                  | j                         y r   )r<  r^  r  custom_formatter_with_functionrm   s    rH   ,test_custom_formatter_function_with_validatez;ConfigDictTest.test_custom_formatter_function_with_validateH       *d&7&79\9\]rj   c                 Z    | j                  t        | j                  | j                         y r   )r<  r^  r  custom_formatter_with_defaultsrm   s    rH   ,test_custom_formatter_function_with_defaultsz;ConfigDictTest.test_custom_formatter_function_with_defaultsK  r  rj   c                 &   dg dddddddd	gd
gg dd}t         j                  j                  |      }| j                  |j	                  d      d       | j                  |j	                  d      d       | j                  |j	                  d      d       | j                  |j	                  d      d	       | j                  |j	                  d      d       | j                  |j	                  d      d       |j	                  d      }| j                  |j                  d      g d       | j                  t        |j                  d       | j                  t        |j                  d       | j                  t        |j                  d       y )N)r   r      )rh  bcr&  r  )r  r   )g)rR   rr  jr   lr   rq  )ozcfg://alistp)atuplealistadictnest1nest2nest3zcfg://atuple[1]r   zcfg://alist[1]r  zcfg://nest1[1][0]rR   zcfg://nest2[1][1]zcfg://adict.dzcfg://adict[f]zcfg://nest3r   zcfg://nosuchzcfg://!zcfg://adict[2])	r   r  BaseConfiguratorrZ   convertpopr<  KeyErrorr^  )rD   r  bcr   s       rH   test_baseconfigzConfigDictTest.test_baseconfigN  sE   $Q(+C:s+.
 ^^,,Q/$56:$45s;$78#>$78#>O4c:$45q9JJ}%q?3(BJJ?*bjj)<(BJJ0@Arj   c                 p   ddl m  G fddt        j                        } dddg      } |dd	g
      }dd||diddgdd}t	        j
                         5 }| j                  |       t        j                  d       d d d        | j                  j                         d       y # 1 sw Y   *xY w)Nr   )
namedtuplec                   ,     e Zd Z fdZ fdZ xZS )1ConfigDictTest.test_namedtuple.<locals>.MyHandlerc                 2    t        |   |i | || _        y r   )r  r  resource)rD   r  r1  r2  r  r  s       rH   r  z:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__i  s     $1&1,4rj   c                 z    |xj                   d| j                  j                   z  c_         t        |   |      S N )r  r  typer  r>  )rD   r   r  s     rH   r>  z6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emitm  s2    

$--"4"4!566
w|F++rj   r  )r  r  s   @rH   	MyHandlerr  h  s    5, ,rj   r  Resourcer  labelsmy_typerh  )r  r  r   	myhandler)r  r  r   r  r  zsome logzsome log my_type
)
collectionsr  r   r9   r   r  r  r   rZ   rX   )rD   r  r  r  r  r  r  s         @rH   test_namedtuplezConfigDictTest.test_namedtupled  s    *	,-- 	, j68*<=C59 # (  &K=A	
 $$& 	%&f%LL$	% 	*,@A	% 	%s   'B,,B5c                 l    d }| j                  dd|gdd       g t        j                         _        y )Nc                      yr1  rs   )r  s    rH   r   zAConfigDictTest.test_config_callable_filter_works.<locals>.filter_  s    rj   r   r8   r  r  r  r  r   r   r  rD   r   s     rH   !test_config_callable_filter_worksz0ConfigDictTest.test_config_callable_filter_works  s9    	G	"J
 	 ')#rj   c                     t        j                  d      }| j                  dd|gdd       g t        j                         _        y )Nr   r   r8   r  r  )r   r   r  r   r  r  s     rH   test_config_filter_worksz'ConfigDictTest.test_config_filter_works  sB    ..-G	"J
 	 ')#rj   c                      G d d      } |       }| j                  dd|gdd       g t        j                         _        y )Nc                       e Zd Zd Zy)BConfigDictTest.test_config_filter_method_works.<locals>.FakeFilterc                      yr1  rs   )rD   r  s     rH   r   zIConfigDictTest.test_config_filter_method_works.<locals>.FakeFilter.filter  s    rj   Nr   rs   rj   rH   
FakeFilterr    s    rj   r  r   r8   r  r  r  )rD   r  r   s      rH   test_config_filter_method_worksz.ConfigDictTest.test_config_filter_method_works  sG    	 	 ,G	"J
 	 ')#rj   c           	           G d d      }d d |       fD ]*  }| j                  t        | j                  dd|gdd       , y )Nc                       e Zd Zy);ConfigDictTest.test_invalid_type_raises.<locals>.NotAFilterNr  rs   rj   rH   
NotAFilterr    s    rj   r  r   r8   r  r  )r<  r^  r  )rD   r  r   s      rH   test_invalid_type_raisesz'ConfigDictTest.test_invalid_type_raises  sI    a. 	G!!gY'OP	rj   c                    t        j                  | j                        }t        dd      }||d   d   d<   |||d   d   d<   |||d   d   d<   d }	 | j	                  |       t        j                  d      }| j                  t        t        j                               ddg       | j                  |j                         |j                  j                          t        j                  d	       t        j                  d
       t        j                  d       t!        j"                  t         j$                  d      rJ|j                  j&                  j)                         rn%t!        j"                  t         j$                  d      rJ|j                  j&                  j+                          t-        |d      5 }|j/                         j1                         }d d d        | j                  g d       |r|j                  j3                          t        j                  d      }|r| j5                  t6        ||       y | j5                  t8        j:                  |       y # 1 sw Y   xY w# |r|j                  j3                          t        j                  d      }|r| j5                  t6        ||       w | j5                  t8        j:                  |       w xY w)Nr  ztest_logging-cqh-r@   r	  rE  r
  r  listenerr{  r|  bazzqueue not emptyrE  r  )r{  r|  r  )r#   rk  config_queue_handlerr5  r  r   r  rZ   rn  ro  assertIsNotNoner  r  r   r   r   r   sleeping_retryr^  r  emptyr   r  ra   rY   r  r   r  r0  r  )	rD   qspeclspeccdr4  qhr   r  rR   s	            rH   do_queuehandler_configurationz,ConfigDictTest.do_queuehandler_configuration  s:   ]]4445F$78+-:tZ(,1BzN4 )/4BzN4 ,	/b!))$/BVG$;$;$=>tM  -KKMM% LLOOE" (()=)=):<;;$$**, (()=)=):< KK""$b7+ -qvvx**,-T#89  "((.A 0!R8		2.- -   "((.A 0!R8		2.s,   D6I/ 1I/ <I#I/ #I,(I/ /A-Kc                 0   t               }t        dz   dd}t        dz   d d dd}d t        dz   t        dz   ||f}d t        dz   |t        f}t        j                  ||      D ]  \  }}| j                  ||        d d	t        d
df}d d	t        d
df}t        j                  ||      D ]a  \  }}||| j                  t              5 }| j                  ||       d d d        t        j                        }	| j                  |	d       c y # 1 sw Y   3xY w)Nz.CustomQueuerb  )r  maxsizez.listenerMakerT)r  r  r  r  z.queueMakerz.CustomListenerrv  r   r{  r|  z Unable to configure handler 'ah')r  rp   r  	itertoolsproductr  rp  r<  r^  ro  r  rZ   )
rD   qdqdlqvalueslvaluesr  r  ctxr  s
             rH   test_config_queue_handlerz(ConfigDictTest.test_config_queue_handler  s?   M^+

 --%)	
 M18n3LbRST$55r>J%--gw? 	=LE5..ue<	= CU+CU+%--gw? 	FLE5}"":. A#225%@Acmm$CS"DE	FA As   DD	c                    ddddddidddgdid	}t        j                  d      }| j                  |j                         | j	                  |       | j                  |j                         | j	                  d
di       | j                  |j                         |d= | j	                  |       | j                  |j                         y )Nr   Fconsoler8   r  )r  r  rh  r  )r  r  r@   r  r  r  )r   r   rV  r   r  rC   )rD   r  r   s      rH   
test_90195zConfigDictTest.test_90195  s     (-$4 $!*
  ""3')&!)9a.)(-.&!)rj   r   )Wrp   rq   rr   r	   r  rW   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r  r/  r0  r4  r7  r:  r>  rB  rI  rh  rt  rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r#  r  r*  r-  r1  r5  r8  r;  r?  rC  rF  rJ  rW  r   requires_working_socketr[  r]  rf  ri  rq  rv  ry  r{  r~  r  r  r  r  r  r  r  r  r  r   r  r  r  rs   rj   rH   r  r  N	  s5   3 / I I, 9
 1%".	
  !
G. 9
 1%".	
 !%Y!
 i
+G8 9
 1%".	
 '!
  !
)H8 9
 1%"/	
 !%Y!
 i
+G8 9
 1%".	
 !%Y!
 i
+H: 9
 1%".	
 !%Y!
 i
+H8 9
 1/".	
 !%Y!
 i
+G8 "77?
 1%".	
 %Y
!G0  *?
  -/?
 "?
  2%".	 {

 %Y
7HF 9
 "%55%".	
 !%Y!
 i
+G: 9
 "%55%"..
 !%Y!
 i
-G< 9
 1%".	
 !%Y 
 i
+G< %*9
 1%".	
 "%Y 
 i
1G> %)9
 1%".	
 "%Y 
 i
1H< 9
 1%#.	
 #%Y!
 h
+G6 )
 &!
H  &
 &!
H" 9
 *
 1%".$I
 !$I!
  !
7HF 9
 1%".	
 /4
 !%Y!
 i
3HB 9
 1%".	
 /4
 !%Y!
 i
1H> 9
 1%".	
 /4
 !%Y!
 i
3H@ 9
 1%". "'	
  !
'H8 ;*N;
 1%".	
  !
!H. M"
 1 0 :0& 
  +,#
-JB !66>!
 0$!,	
 . $I#0
#'#8 !$99>!
 0$!,	
 . $I#0
#($8 !$88>!
 0$!,	
 . $I#0
#($8  >!
 0$!,	
 . $I#0
#&"8  N*I6
 0$!,	
 . $I#0
#&"6  .
 9!F	
 
$(&&  &- &FGGF& &3F&< &D+&Z&(,GGJ72: ,8 %W$$& '( %W$$&& '& %W$$&<, '<,|J
9E
E
E`^^B,B>))	)&/P 1002F 3F8*rj   r  c                       e Zd Zd Zd Zy)ManagerTestc                 j   g  G fddt         j                        }t        j                  d       }| j                  t        |j
                  t               |j                  |       |j                  d      }|j                  d       t        j                  d       | j                  dg       y )Nc                       e Zd Zd fd	Zy)6ManagerTest.test_manager_loggerclass.<locals>.MyLoggerNc                 (    j                  |       y r   r]  )rD   r  r  r1  exc_infoextraloggeds         rH   _logz;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log  s    c"rj   ro   )rp   rq   rr   r  )r  s   rH   MyLoggerr    s    #rj   r  r  zshould appear in loggedzshould not appear in logged)
r   LoggerManagerr<  	TypeErrorsetLoggerClassrp  r   r   rZ   )rD   r  manr   r  s       @rH   test_manager_loggerclassz$ManagerTest.test_manager_loggerclass  s    	#w~~ 	# ood#)S%7%7=8$v&0156";!<=rj   c                     t        j                  d       }t               }|j                  |       | j	                  |j
                  |       y r   )r   r  objectsetLogRecordFactoryrZ   logRecordFactory)rD   r  rf   s      rH   test_set_log_record_factoryz'ManagerTest.test_set_log_record_factory  s;    ood#8)--x8rj   N)rp   rq   rr   r  r  rs   rj   rH   r  r    s    > 9rj   r  c                       e Zd Zd Zd Zy)ChildLoggerTestc                 v   t        j                         }t        j                  d      }t        j                  d      }|j                  d      }|j                  d      }| j                  |t        j                  d             | j                  |t        j                  d             |j                  d      }|j                  d      }|j                  d      }| j                  |t        j                  d             | j                  |t        j                  d             | j                  ||       y )	Nabczdef.ghixyzzuvw.xyzdefghiabc.defzabc.def.ghi)r   r   getChildr  )rD   r   l1l2c1c2c3s          rH   test_child_loggersz"ChildLoggerTest.test_child_loggers#  s    u%y)ZZZZ	"b'++E23b'++I67[[[[[[#b'++I67b'++M:;b"rj   c                    t        j                         }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }|j                         }||h}| j                  |||z         | j	                  ||       |j                         }| j                  |h|       |j                         }| j                  t               |       y )Nr{  foo.barzfoo.bar.baz.bozzr|  )r   r   getChildrenrZ   assertNotInr  )rD   r   r  r  l3l4kidsrf   s           rH   test_get_childrenz!ChildLoggerTest.test_get_children2  s    u%y)12u%}}84(?3X&~~"t$~~%rj   N)rp   rq   rr   r  r  rs   rj   rH   r  r  "  s    &rj   r  c                       e Zd Zy)DerivedLogRecordNr  rs   rj   rH   r	  r	  A  r  rj   r	  c                       e Zd Zd Zd Zd Zy)LogRecordFactoryTestc                      G d dt         j                        }t        j                  |         |t              | _        | j                  j                  | j
                         t        j                         | _	        y )Nc                       e Zd Zd Zd Zy)2LogRecordFactoryTest.setUp.<locals>.CheckingFilterc                     || _         y r   )rp  )rD   rp  s     rH   r  z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__H  s	    rj   c                 p    t        |      }|| j                  urd|d| j                  }t        |      y)NzUnexpected LogRecord type z, expected T)r  rp  r  )rD   r   r  r  s       rH   r   z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterK  s5    LDHH$IJ HH&C#C.(rj   N)rp   rq   rr   r  r   rs   rj   rH   CheckingFilterr  G  s    rj   r  )
r   r   r   rI   r	  r   r1   r   getLogRecordFactoryorig_factory)rD   r  s     rH   rI   zLogRecordFactoryTest.setUpF  sV    
	W^^ 
	 	t$%56""4;;/#779rj   c                     | j                   j                  | j                         t        j	                  |        t        j                  | j                         y r   )r1   r   r   r   rS   r   r  r  rm   s    rH   rS   zLogRecordFactoryTest.tearDownX  s<    %%dkk2$##D$5$56rj   c                    | j                  t        | j                  j                  | j	                                t        j                  t               | j                  j                  | j	                                | j                  dg       y )N)r  r|   r}   )
r<  r  r1   r   rn   r   r  r	  r   ri   rm   s    rH   test_logrecord_classz)LogRecordFactoryTest.test_logrecord_class]  sn    )T%5%5%=%=++-	/##$45t0023!
 	rj   N)rp   rq   rr   rI   rS   r  rs   rj   rH   r  r  D  s    :$7
rj   r  c                   $   e Zd ZdZd Zd Zd Zd Z ej                   e
ej                  d      d      d        Z ej                   e
ej                  d      d      d	        Z ej                   e
ej                  d      d      d
        Zy)QueueHandlerTestr   c                    t         j                  |        t        j                  d      | _        t        j
                  j                  | j                        | _        d| _        t	        j                  d      | _
        d| j                  _        | j                  j                  t        j                         | j                  j                  | j                         y )NrI  queF)r   rI   r  r  r   r@   QueueHandlerque_hdlrrF   r   
que_loggerrg  r7   r   rB   rm   s    rH   rI   zQueueHandlerTest.setUpl  s    t[[_
((55djjA	!++E2$)!  1""4==1rj   c                 b    | j                   j                          t        j                  |        y r   )r  rK   r   rS   rm   s    rH   rS   zQueueHandlerTest.tearDownv  ri  rj   c                    | j                   j                  | j                                | j                  t        j
                  | j                  j                         | j                   j                  | j                                | j                  t        j
                  | j                  j                         | j                         }| j                   j                  |       | j                  j                         }| j                  t        |t        j                               | j                  |j                  | j                   j                         | j                  |j                  |j                   f|d f       y r   )r  r   rn   r<  r  Empty
get_nowaitr   r   rC   r  r   r  rZ   rF   r  r1  )rD   r  r  s      rH   test_queue_handlerz#QueueHandlerTest.test_queue_handlerz  s    d//12%++tzz'<'<=T..01%++tzz'<'<=!$zz$$&
4):):;<DOO$8$89$((DII.d<rj   c                    | j                         }t        j                  t        j                        }d}|j	                  | j
                  ||      }t        j                  | j                        }| j                  j                  |       | j                  j                  |       | j                  j                         }| j                  ||j                         | j                  ||j                          y )Nz {name} -> {levelname}: {message})rF   	levelnamer  )rn   r   r   r   r  rF   r;   r<   r  r>   r  r   r  r!  rZ   r  r  )rD   r  r$  log_format_strformatted_msgr  
log_records          rH   test_formattingz QueueHandlerTest.test_formatting  s    !((9	;&--4998A3 . P%%doo6	""9-$ZZ**,

7
(:(:;rj   QueueListenerz5logging.handlers.QueueListener required for this testc                    t        t        j                               }t        j                  j                  | j                  |      }|j                          	 | j                  j                  | j                                | j                  j                  | j                                | j                  j                  | j                                |j                          | j                  |j                  t        j                   d             | j                  |j                  t        j"                  d             | j                  |j                  t        j$                  d             |j'                          t        t        j                               }|j)                  t        j$                         t        j                  j                  | j                  |d      }|j                          	 | j                  j                  | j                                | j                  j                  | j                                | j                  j                  | j                                |j                          | j+                  |j                  t        j                   d             | j+                  |j                  t        j"                  d             | j                  |j                  t        j$                  d	             |j'                          y # |j                          w xY w# |j                          w xY w)
Nr{   )r   r  r}   r~   T)r  r   r   r   )r   r   Matcherr   r@   r)  r  r  r  r   rn   r   r  r  rC   matchesr   r|   rz   rK   r7   rV  )rD   r   r  s      rH   test_queue_listenerz$QueueHandlerTest.test_queue_listener  s2    goo/0##11$**gF	OO##D$5$5$78OO!!$"3"3"56OO$$T%6%6%89MMOMNsKL0@0@#NO goo/0))*##11$**gHL 2 N	OO##D$5$5$78OO!!$"3"3"56OO$$T%6%6%89MMO#NOLM0@0@#NO- MMO$ MMOs   A;L) =A;L> )L;>Mc                    t         j                  j                  | j                  | j                        }|j                          	 ddz   | j                  j                  | j                         d       |j                          | j                  | j                  j                         j                         j!                  d      d       | j                  | j                  j                         j                         j!                  d      d       y # t        $ r8}|}| j                  j                  | j                         |       Y d }~d }~ww xY w)Nr   r   r  T
stack_info	TracebackStack)r   r@   r)  r  r:   r  ZeroDivisionErrorr  r  rn   r   r  rZ   r6   rX   r
  r  )rD   r  r&  excs       rH   &test_queue_listener_with_StreamHandlerz7QueueHandlerTest.test_queue_listener_with_StreamHandler  s    ##11$**dnnM	IE 	d//1dC--/557==kJAN--/557==gFJ ! 	ICOO%%d&7&7&9C%HH	Is   D 	E-EEc                    | j                   j                  | j                         | j                  j	                  | j
                         t        j                  j                  | j                  | j                         }|j                          | j                  j                  d       |j                          | j                  | j                  j                         j!                         d       y )Nr   zque -> ERROR: error)r  r>   r=   r  rB   r:   r   r@   r)  r  r  r   r  rZ   r6   rX   r
  )rD   r  s     rH   *test_queue_listener_with_multiple_handlersz;QueueHandlerTest.test_queue_listener_with_multiple_handlers  s     	""4#6#67""4>>2##11$**dmmLg&--/5579NOrj   N)rp   rq   rr   rW   rI   rS   r"  r(  r  
skipUnlessrB  r   r@   r-  r6  r8  rs   rj   rH   r  r  g  s     32 
=< X!1!1?CPRRB X!1!1?CPRKRK X!1!1?CPR	PR	Prj   r  r)  )patchc                       e Zd Z	 dZed        Z ej                  ej                  j                  d      d        Z ej                  ej                  j                  d      d        Zed        Zd Zd Zy	)
QueueListenerTest   c                 >   	 t        j                  d|z        }|j                  t         j                         t         j                  j                  |       }|j                  |       t         j                  j                  |       }|j                          |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                          |j                  |       |j                          y )Nztest_logger_with_id_%sonetwothreefourfive)r   r   r7   r8   r@   r  rB   r)  r  r   r  rL   rK   )	log_queuer]  r   r   r  s        rH   setup_and_logzQueueListenerTest.setup_and_log  s    
 &&'?%'GHFOOGMM*&&33I>Gg&''55i@HNNKKKKKK KKKKMMO  )MMOrj   rU  c                     t        | j                        D ];  }t        j                         }| j	                  || j                         d|       = | j                  |j                  d| j                  z  d       y Nr  r  z&correct number of handled log messages)rw  repeatr  r  rE  r  rZ   
call_countrD   mock_handlerr  rD  s       rH   #test_handle_called_with_queue_queuez5QueueListenerTest.test_handle_called_with_queue_queue  sh    4;;' H!KKM	""9A.FGH [33Q_EGrj   c                 f   t        j                          t        | j                        D ][  }t	        j
                         }| j                  || j                         d|       |j                          |j                          ] | j                  |j                  d| j                  z  d       y rG  )r   *skip_if_broken_multiprocessing_synchronizerw  rH  multiprocessingr  rE  r  rK   r   rZ   rI  rJ  s       rH    test_handle_called_with_mp_queuez2QueueListenerTest.test_handle_called_with_mp_queue   s     >>@4;;' (+113	""9A.FG!%%'	(
 [33Q_EGrj   c              #   j   K   	 	 | j                          # t        j                  $ r g cY S w xY wwr   )r!  r  r   )rD  s    rH   get_all_from_queuez$QueueListenerTest.get_all_from_queue  s9     #..00 ;; 	s   3 0303c                 8   	 t        j                          t        | j                        D ]  }t	        j
                         }| j                  || j                         d|       t        | j                  |            } |j                           |j                          g t        j                  j                  j                  gg}| j!                  ||d|D cg c]*  }t#        |t        j$                        r|j&                  n|, c}z          y c c}w )Nr  z&Found unexpected messages in queue: %s)r   rN  rw  rH  rO  r  rE  r  listrR  rK   r   r   r@   r)  	_sentinelr  r  r  r  )rD   rr  r  r   rf   r   s         rH   $test_no_messages_in_queue_after_stopz6QueueListenerTest.test_no_messages_in_queue_after_stop  s     >>@4;;' >'--/""5DGGIq*ABT44U;<!!!#!1!1!?!?!I!I JKeXF5:%<01 /9G<M<M.NQUU*+&, %<=>>%<s   /Dc                    t        j                         }t        j                  j	                  |      }|j                          |j                          | j                  t              5  |j                          d d d        y # 1 sw Y   y xY wr   )
r  r  r   r@   r)  r  r  r<  r^  	task_done)rD   rD  r  s      rH   test_calls_task_done_after_stopz1QueueListenerTest.test_calls_task_done_after_stop-  se    I''55i@HNNMMO"":. &##%& & &s   )BBN)rp   rq   rr   rH  staticmethodrE  r:  r  r   r@   r)  rL  rP  rR  rV  rY  rs   rj   rH   r<  r<    s    	
 		 
	. 
g&&44h	?	G 
@	G 
g&&44h	?
	G 
@
	G 
	 
		>0	&rj   r<  c                       e Zd Zd ZeZd Zy)UTCc                     t         S r   )ZEROrD   dts     rH   	utcoffsetzUTC.utcoffset;  s    rj   c                      y)Nr\  rs   r_  s     rH   tznamez
UTC.tzname@  s    rj   N)rp   rq   rr   ra  dstrc  rs   rj   rH   r\  r\  :  s     Crj   r\  c                       e Zd Zd Zy)AssertErrorMessagec                     	  | j                   dg|i | y # |$ r%}| j                  |t        |             Y d }~y d }~ww xY w)Nrs   )r<  rZ   ro  )rD   r  r  r1  r2  r&  s         rH   assert_error_messagez'AssertErrorMessage.assert_error_messageG  sH    	.Db24262 	.Wc!f--	.s    A>AN)rp   rq   rr   rh  rs   rj   rH   rf  rf  E  s    .rj   rf  c                   P    e Zd Zd ZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zy)FormatterTestc           	          dt         j                  t        j                  j	                  ddd      dd d ddd| _        d	d	d
ii| _        y )Nzformatter.testrW  toz	dummy.extr  zMessage with %d %s)r   placeholders)rF   r  pathnamelinenor  r  r  r1  customi  )r   r8   r0  rW  r   commonvariantsrm   s    rH   rI   zFormatterTest.setUpN  sP    $]]VT;?''	
 $
rj   Nc                     t        | j                        }||j                  | j                  |          t	        j
                  |      S r   )r  rq  rN   rr  r   r   )rD   rF   r  s      rH   
get_recordzFormatterTest.get_record_  s<    dkk"MM$---.$$V,,rj   c                 r   | j                         }t        j                  d      }| j                  |j	                  |      d       t        j                  d      }| j                  t        |j                  |       | j                  |j                                t        j                  d      }| j                  |j                                t        j                  d      }| j                  |j                                t        j                  d      }| j                  |j                                y )Nz${%(message)s}z${Message with 2 placeholders}z
%(random)s%(asctime)sz%(asctime)-15sz%(asctime)#15s
rt  r   r;   rZ   r  r<  r^  rV  usesTimerC   rD   r   r   s      rH   test_percentzFormatterTest.test_percente  s    OO./!&FGl+*ahh2&m,

%./

%./

%rj   c                    | j                         }t        j                  dd      }| j                  |j	                  |      d       t        j                  dd      }| j                  t        |j                  |       t        j                  dd      }| j                  |j                                t        j                  dd      }| j                  |j                                t        j                  dd      }| j                  |j                                t        j                  d	d      }| j                  |j                                y )
Nz$%{message}%${r  $%Message with 2 placeholders%$z{random}z	{message}	{asctime}z{asctime!s:15}z{asctime:15}rw  ry  s      rH   test_braceszFormatterTest.test_bracest  s    OOoS9!&GHj4*ahh2k5&k5

%.c:

%nC8

%rj   c                    | j                         }t        j                  dd      }| j                  |j	                  |      d       t        j                  dd      }| j                  |j	                  |      d       t        j                  dd      }| j                  |j	                  |      d       t        j                  dd      }| j                  t        |j                  |       | j                  |j                                t        j                  d	d      }| j                  |j                                t        j                  d
d      }| j                  |j                                t        j                  dd      }| j                  |j                                t        j                  dd      }| j                  |j                                y )N
${message}r  r}  zMessage with 2 placeholdersz$messagez$$%${message}%$$r~  z	${random}z
${asctime}z$asctimez${asctime}--rw  ry  s      rH   test_dollarszFormatterTest.test_dollars  s^   OOl#6!&CDj4!&CD0<!&GHk5*ahh2&l#6

%j4

%l#6&nC8

%rj   c                 h   t        j                  d      }| j                  |j                  d       t        j                  d      }| j                  |j                  d       t        j                  d      }| j                  |j                  d       t        j                  d      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  d	d      }| j                  |j                  d	       t        j                  d
d      }| j                  |j                  d
       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       | j	                  t
        t         j                  d       | j	                  t
        t         j                  d       | j	                  t
        t         j                  d       | j	                  t
        t         j                  d       | j	                  t
        t         j                  d       | j	                  t
        t         j                  d       | j	                  t
        t         j                  d       | j	                  t
        t         j                  d        | j	                  t
        t         j                  d!       | j                  t
        d"t         j                  d#d       | j                  t
        d$t         j                  d%d       | j                  t
        d&       | j	                  t
        t         j                  d'd       | j                  t
        d(t         j                  d)d       | j                  t
        d*t         j                  d+d       | j	                  t
        t         j                  d,d       | j	                  t
        t         j                  d-d       | j	                  t
        t         j                  d.d       | j	                  t
        t         j                  d/d       | j                  t
        d0t         j                  d1d       | j                  t
        d2t         j                  d3d       | j	                  t
        t         j                  d4d       | j	                  t
        t         j                  d5d       | j	                  t
        t         j                  d6d       | j	                  t
        t         j                  d7d       | j	                  t
        t         j                  d8d       | j	                  t
        t         j                  d9d       | j	                  t
        t         j                  d:d       | j	                  t
        t         j                  d;d       | j	                  t
        t         j                  d<d       | j                  t
        d=t         j                  d>d       | j                  t
        d=t         j                  d?d       | j                  t
        d=t         j                  d@d       | j                  t
        d$t         j                  dd       | j	                  t
        t         j                  d%d       | j                  t
        d$t         j                  dAd       | j	                  t
        t         j                  dBd       y )CNzM%(levelname)-15s - %(message) 5s - %(process)03d - %(module) - %(asctime)*.3sz1%(asctime)*s - %(asctime)*.3s - %(process)-34.33oz%(process)#+027.23Xz
%(foo)#.*gz5$%{message}%$ - {asctime!a:15} - {customfield['key']}r|  r}  z{process:.2f} - {custom.f:.4f}z{customfield!s:#<30}z{message!r}z{message!s}z{message!a}z{process!r:4.2}z8{process!s:<#30,.12f}- {custom:=+#30,.1d} - {module:^30}z{process!s:{w},.{p}}z{foo:12.{p}}z{foo:{w}.6}z{foo[0].bar[1].baz}z{foo[k1].bar[k2].baz}z{12[k1].bar[k2].baz}z${asctime} - $messager  z$bar $$z	$bar $$$$z%(asctime)Zz%(asctime)bz%(asctime)*z%(asctime)*3sz%(asctime)_r  r  z%(foo)#12.3*fz%(foo)0*.8*fz;invalid format: invalid field name/expression: 'name-thing'z{name-thing}zinvalid format: no fieldsrv  zinvalid conversion: 'Z'z{asctime!s:#30,15f}z7invalid format: expected ':' after conversion specifierz{asctime!aa:15}z%invalid format: bad specifier: '.2ff'z{process:.2ff}z{process:.2Z}z{process!s:<##30,12g}z{process!s:<#30#,12g}z{process!s:{{w}},{{p}}}z1invalid format: expected '}' before end of stringz{processz7invalid format: Single '}' encountered in format stringzprocess}z{{foo!r:4.2}z{{foo!r:4.2}}z	{foo/bar}z{foo:{{w}}.{{p}}}}z{foo!X:{{w}}.{{p}}}z{foo!a:random}z{foo!a:ran{dom}z{foo!a:ran{d}om}z
{foo.!a:d}z$invalid format: bare '$' not allowedz$bar $$$zbar $zfoo $.r{  z	${asctime)r   r;   rZ   _fmtr<  r^  rh  rD   r   s     rH   test_format_validatez"FormatterTest.test_format_validate  s    mn!pqQR!TU34!67l+. U]`a!XY>cJ!AB4C@!78m37/m37/m37//s;!23X`cd![\4C@!78nC80m37/33?!675SA!894C@!78 5SA!89is3+k5- 	*g&7&7G*g&7&7G*g&7&7G*g&7&7I*g&7&7G*g&7&7E*g&7&7F*g&7&7I*g&7&7H 	!!I~S 	" 	
 	!!'}C 	" 	
 	!!%	
 	*g&7&79NVYZ!!E0 	" 	
 	!!3/s 	" 	

 	*g&7&7PST*g&7&79PX[\*g&7&79PX[\*g&7&79RZ]^!!?z 	" 	

 	!!Ez 	" 	

 	*g&7&7sS*g&7&7PST*g&7&7CP*g&7&79MUXY*g&7&79NVYZ*g&7&79IQTU*g&7&79JRUV*g&7&79KSVW*g&7&7SQ 	!!4z 	" 	

 	!!4wc 	" 	

 	!!4xs 	" 	
 	!!'{# 	" 	

 	*g&7&7cR 	!!'uC 	" 	

 	*g&7&7CPrj   c                 b   g d}g d}t        ||      D ]  \  }}t        j                  ||ddi      }| j                         }| j	                  |j                  |      d       | j                  d      }| j	                  |j                  |      d       t        j                  ||      }| j                         }| j                  t        |j
                  |       t        j                  ||d	di      }| j                  d      }| j	                  |j                  |      d        y )
N)z%(custom)s %(message)sz{custom} {message}z$custom $message)%r|  r  rp  Default)r  r	  z#Default Message with 2 placeholdersz 1234 Message with 2 placeholdersr}  zNon-existing)r\   r   r;   rt  rZ   r  r<  r^  )rD   fmtsstylesr  r  r   r   s          rH   test_defaults_parameterz%FormatterTest.test_defaults_parameter/  s   S dF+ 	NJC!!#Uh	=RSA!AQXXa[*OP)AQXXa[*LM !!#U3A!Aj!((A6 !!#Uni=XYA)AQXXa[*LM	Nrj   c                 R    | j                  t        t        j                  d d d       y )Nx)r<  r^  r   r;   rm   s    rH   test_invalid_stylez FormatterTest.test_invalid_styleC  s    *g&7&7tSIrj   c           
         | j                         }t        j                  dddddddt              }t        j                  |j                  d       j                               |_        d|_        t        j                  d      }t        j                  |_        | j                  |j                  |      d	       | j                  |j                  |d
      d       |j                  |       | j                  |j                   d	       y )N  rv        r  r   {   %(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)rt  datetimeutcrx  mktime
astimezone	timetuplecreatedmsecsr   r;   gmtime	converterrZ   
formatTimer  asctime)rD   r   r`  r   s       rH   	test_timezFormatterTest.test_timeF  s    OOtQAq!Q< KKd 3 = = ?@	78kka*CDa19=	$=>rj   c           
      ~    G d dt         j                        }| j                         }t        j                  ddddddd	t              }t        j                  |j                  d       j                               |_	         |       }t
        j                  |_        | j                  |j                  |      d
       y )Nc                       e Zd ZdZdZy)DFormatterTest.test_default_msec_format_none.<locals>.NoMsecFormatterNz%d/%m/%Y %H:%M:%S)rp   rq   rr   default_msec_formatdefault_time_formatrs   rj   rH   NoMsecFormatterr  U  s    "&"5rj   r  r  rv  r  r  r  r   r  z21/04/1993 08:03:00)r   r;   rt  r  r  rx  r  r  r  r  r  r  rZ   r  )rD   r  r   r`  r   s        rH   test_default_msec_format_nonez+FormatterTest.test_default_msec_format_noneT  s    	6g// 	6 OOtQAq!S#>KKd 3 = = ?@	kka*?@rj   c                     t        j                  ddd      }t        d      D ]W  }t        j                  d       t        j
                  dd|d	z   z  i      }|j                  |      }| j                  d
|       Y y )Nz!{asctime}.{msecs:03.0f} {message}r|  z%Y-%m-%d %H:%M:%S)r  r  r  i	  g-C6:?r  z
Message %dr   z.1000)r   r;   rw  rx  rz  r   r  r  )rD   r   rr  r   rh   s        rH   test_issue_89047zFormatterTest.test_issue_89047`  sr    "ESZmnt 	)AJJv%%ula!e.D&EFAAWa(		)rj   r   )rp   rq   rr   rI   rt  rz  r  r  r  r  r  r  r  r  rs   rj   rH   rj  rj  M  s?    
"-&& &*TQlN(J?
A)rj   rj  c                       e Zd Zd Zd Zy)TestBufferingFormatterc                     dt        |      z  S )Nz[(%d)r[   rD   r  s     rH   formatHeaderz#TestBufferingFormatter.formatHeaderj      W%%rj   c                     dt        |      z  S )Nz(%d)]r  r  s     rH   formatFooterz#TestBufferingFormatter.formatFooterm  r  rj   N)rp   rq   rr   r  r  rs   rj   rH   r  r  i  s    &&rj   r  c                       e Zd Zd Zd Zd Zy)BufferingFormatterTestc                 j    t        j                  ddi      t        j                  ddi      g| _        y )Nr  r?  r@  )r   r   r  rm   s    rH   rI   zBufferingFormatterTest.setUpq  s/    !!5%.1!!5%.1
rj   c                     t        j                         }| j                  d|j                  g              | j                  d|j                  | j                               y )Nr   onetwo)r   BufferingFormatterrZ   r  r  r  s     rH   test_defaultz#BufferingFormatterTest.test_defaultw  sE    &&(QXXb\*188DLL#9:rj   c                    t               }| j                  d|j                  | j                               t	        j
                  d      }t        |      }| j                  d|j                  | j                               y )Nz[(2)onetwo(2)]z<%(message)s>z[(2)<one><two>(2)])r  rZ   r  r  r   r;   )rD   r   lfs      rH   test_customz"BufferingFormatterTest.test_custom|  s`    "$)188DLL+AB/"2&-qxx/EFrj   N)rp   rq   rr   rI   r  r  rs   rj   rH   r  r  p  s    
;
Grj   r  c                       e Zd Zd Zy)ExceptionTestc                 V   | j                   }t               }|j                  |       	 t        d      #  t	        j
                  dd       Y nxY w|j                  |       |j                          |j                  d   }| j                  |j                  j                  d             | j                  |j                  j                  d             | j                  |j                  j                  d             | j                  |j                  j                  d	             y )
Nr  failedTr0  r   z#Traceback (most recent call last):
z!
RuntimeError: deliberate mistakeStack (most recent call last):
z,logging.exception('failed', stack_info=True))r1   RecordingHandlerrB   r  r   r  rL   rK   r  rC   exc_textr  rZ  r1  )rD   r   rR   s      rH   r(  zExceptionTest.test_formatting  s    	Q	9344	9h48			IIaL

-- /> ? 	@

++ -A B 	C// 1> ? 	@-- /? @ 	As	   4 AN)rp   rq   rr   r(  rs   rj   rH   r  r    s    Arj   r  c                       e Zd Zd Zy)LastResortTestc                    | j                   }|j                  | j                         t        j                  }t        j
                  }	 t        j                         5 }|j                  d       | j                  |j                         d       |j                  d       | j                  |j                         d       d d d        d t        _        t        j                         5 }|j                  d       d}| j                  |j                         |       d d d        t        j                         5 }|j                  d       | j                  |j                         d       d d d        d|j                  _        dt        _        t        j                         5 }|j                  d       | j                  |j                         d       d d d        |j                  | j                         |t        _        |t        _        y # 1 sw Y   OxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w# |j                  | j                         |t        _        |t        _        w xY w)NzThis should not appearr   zFinal chance!zFinal chance!
z-No handlers could be found for logger "root"
F)r1   rL   r:   r   
lastResortr  r   r  r   rZ   rX   r   r   emittedNoHandlerWarningrB   )rD   r  old_lastresortold_raise_exceptionsr  r  s         rH   test_last_resortzLastResortTest.test_last_resort  s   4>>* ++&66	;((* Gf

34  !2B7_-  !24EF	G "&G((* 9f_-F  !2C89 ((* 8f_-  !2B78
 49DLL0&+G#((* 8f_-  !2B78 OODNN+!/G&:G#7G G9 98 88 8 OODNN+!/G&:G#sm   	H? A#H 'H? '4HH? 72H')8H? !2H3H? HH? H$H? 'H0,H? 3H<8H? ?3I2N)rp   rq   rr   r  rs   rj   rH   r  r    s    #;rj   r  c                       e Zd Zd Zd Zy)FakeHandlerc           
      N    dD ]   }t        | || j                  |||             " y )N)r  r  rK   r  )setattrrecord_call)rD   
identifiercalledrd  s       rH   r  zFakeHandler.__init__  s.    > 	PFD&$"2"2:vv"NO	Prj   c                     fd}|S )Nc                  H     j                  dj                               y )Nz{} - {})r]  r  )r  r  method_names   rH   innerz&FakeHandler.record_call.<locals>.inner  s    MM)**:{CDrj   rs   )rD   r  r  r  r  s    ``` rH   r  zFakeHandler.record_call  s    	Erj   N)rp   rq   rr   r  r  rs   rj   rH   r  r    s    Prj   r  c                   $     e Zd Z fdZd Z xZS )r  c                 :    t        t        | 
  |i | g | _        y r   )r  r  r  r  )rD   r1  r2  r  s      rH   r  zRecordingHandler.__init__  s    .??rj   c                 <    	 | j                   j                  |       y r   )r  r]  r   s     rH   rU  zRecordingHandler.handle  s    4F#rj   )rp   rq   rr   r  rU  r  r  s   @rH   r  r    s    $rj   r  c                   z     e Zd Z	  fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Z xZS )ShutdownTestc                     t         t        |           g | _        t        j
                  }| j                  t        t        d|       y )Nr  )r  r  rI   r  r   r  r   r  )rD   raise_exceptionsr  s     rH   rI   zShutdownTest.setUp  s7    lD')"22*;=MNrj   c                     fd}|S )Nc                               r   rs   )r   s   rH   r  z'ShutdownTest.raise_error.<locals>.inner  s
    'Mrj   rs   )rD   r   r  s    ` rH   raise_errorzShutdownTest.raise_error  s    	rj   c                 T   t        d| j                        }t        d| j                        }t        d| j                        }t        t        j                  j
                  |||g      }t        j                  t        |             g d}| j                  || j                         y )Nr   r   r   rx  )z2 - acquirez	2 - flushz	2 - closez2 - releasez1 - acquirez	1 - flushz	1 - closez1 - releasez0 - acquirez	0 - flushz	0 - close0 - release)	r  r  r  r   rz  r{  r
  rT  rZ   )rD   handler0handler1handler2r@   rf   s         rH   test_no_failurezShutdownTest.test_no_failure  s    q$++.q$++.q$++. w**Xx,JKT(^4L 	4;;/rj   c                 $   t        d| j                        }t        ||| j                  |             t        j
                  j                  |      g}t	        j                  t        |             | j                  d| j                  d          y )Nr   rx  r  rI  )
r  r  r  r  r   rz  r{  r
  rT  rZ   )rD   rd  r   r   r@   s        rH   _test_with_failure_in_methodz)ShutdownTest._test_with_failure_in_method  sj    a-!1!1%!89OO''01T(^4B8rj   c                 0    | j                  dt               y Nr  r  r]  rm   s    rH   test_with_ioerror_in_acquirez)ShutdownTest.test_with_ioerror_in_acquire   s    )))W=rj   c                 0    | j                  dt               y Nr  r  rm   s    rH   test_with_ioerror_in_flushz'ShutdownTest.test_with_ioerror_in_flush      ))'7;rj   c                 0    | j                  dt               y NrK   r  rm   s    rH   test_with_ioerror_in_closez'ShutdownTest.test_with_ioerror_in_close  r  rj   c                 0    | j                  dt               y r  r  r^  rm   s    rH   test_with_valueerror_in_acquirez,ShutdownTest.test_with_valueerror_in_acquire	  s    )))Z@rj   c                 0    | j                  dt               y r  r  rm   s    rH   test_with_valueerror_in_flushz*ShutdownTest.test_with_valueerror_in_flush      ))':>rj   c                 0    | j                  dt               y r  r  rm   s    rH   test_with_valueerror_in_closez*ShutdownTest.test_with_valueerror_in_close  r  rj   c                 F    dt         _        | j                  dt               y )NFr  r   r  r  
IndexErrorrm   s    rH   .test_with_other_error_in_acquire_without_raisez;ShutdownTest.test_with_other_error_in_acquire_without_raise  s    "')))Z@rj   c                 F    dt         _        | j                  dt               y )NFr  r  rm   s    rH   ,test_with_other_error_in_flush_without_raisez9ShutdownTest.test_with_other_error_in_flush_without_raise      "'))':>rj   c                 F    dt         _        | j                  dt               y )NFrK   r  rm   s    rH   ,test_with_other_error_in_close_without_raisez9ShutdownTest.test_with_other_error_in_close_without_raise  r  rj   c                 f    dt         _        | j                  t        | j                  dt               y )NTr  r   r  r<  r   r  rm   s    rH   +test_with_other_error_in_acquire_with_raisez8ShutdownTest.test_with_other_error_in_acquire_with_raise  s'    "&*d&G&G#Z	1rj   c                 f    dt         _        | j                  t        | j                  dt               y )NTr  r  rm   s    rH   )test_with_other_error_in_flush_with_raisez6ShutdownTest.test_with_other_error_in_flush_with_raise#  '    "&*d&G&G!:	/rj   c                 f    dt         _        | j                  t        | j                  dt               y )NTrK   r  rm   s    rH   )test_with_other_error_in_close_with_raisez6ShutdownTest.test_with_other_error_in_close_with_raise(  r  rj   )rp   rq   rr   rI   r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  s   @rH   r  r    sY    -O
0 9><<A??A??1
/
/rj   r  c                   d    e Zd Z	 d ZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zy)ModuleLevelMiscTestc                    t         j                  j                  j                  }| j	                  |d       | j                  t         j                  |       t        j                  d       | j	                  t         j                  j                  j                  d       | j                  t        t         j                  d        G d d      }| j                  t        t         j                   |              t        j                  d       t        j                          | j	                  t         j                  j                  j                  t         j                         y )Nr   S   doesnotexistsc                       e Zd Zy);ModuleLevelMiscTest.test_disable.<locals>._NotAnIntOrStringNr  rs   rj   rH   _NotAnIntOrStringr  =      rj   r  WARN)
r   r  r   rO   rZ   r   r<  r^  r  rz   )rD   old_disabler  s      rH   test_disablez ModuleLevelMiscTest.test_disable2  s    ll**22a(5--55r:*gooG	 	 	)W__6G6IJ 	--55w7G7GHrj   Nc                 4   g t        j                  | t        dfd       t               }t        j                  j                  |       t        t        |      }| ||d|       n	 |d|       | j                  t        |j                        d       |j                  d   }| j                  |j                         d|z         ||nt        t        |j                               }| j                  |j                  |       | j                  g        y )NbasicConfigc                  *    j                  | |f      S r   r  )rh  kwr  s     rH   <lambda>z/ModuleLevelMiscTest._test_log.<locals>.<lambda>L  s    v}}aW'= rj   ztest me: %rr   r   )r   r:  r   r  r  rB   r-   rZ   r[   r  
getMessageupperr   )rD   rd  r  	recording
log_methodr   expected_levelr  s          @rH   	_test_logzModuleLevelMiscTest._test_logI  s    dG]=	? %&		*Wf-
umY7}i0Y../3""1%**,mi.GH"'"3&,,.9Y8 	$rj   c                 D    | j                  dt        j                         y Nr   )r%  r   r|   rm   s    rH   test_logzModuleLevelMiscTest.test_loga  s    ugmm,rj   c                 &    | j                  d       y Nr   r%  rm   s    rH   
test_debugzModuleLevelMiscTest.test_debugd      wrj   c                 &    | j                  d       y Nr   r+  rm   s    rH   	test_infozModuleLevelMiscTest.test_infog      vrj   c                 &    | j                  d       y Nr   r+  rm   s    rH   test_warningz ModuleLevelMiscTest.test_warningj      y!rj   c                 &    | j                  d       y Nr   r+  rm   s    rH   
test_errorzModuleLevelMiscTest.test_errorm  r-  rj   c                 &    | j                  d       y Nr  r+  rm   s    rH   test_criticalz!ModuleLevelMiscTest.test_criticalp      z"rj   c                    | j                  t        t        j                  t                G d dt        j
                        }t        j                  |       | j                  t        j                         |       t        j                  t        j
                         | j                  t        j                         t        j
                         y )Nc                       e Zd Zy);ModuleLevelMiscTest.test_set_logger_class.<locals>.MyLoggerNr  rs   rj   rH   r  r?  v  r  rj   r  )r<  r  r   r  r  r  rZ   getLoggerClass)rD   r  s     rH   test_set_logger_classz)ModuleLevelMiscTest.test_set_logger_classs  s    )W%;%;VD	w~~ 	 	x(//18<w~~.//17>>Brj   c                    g  G fddt        j                               }t        j                  |       t        j                  d      }| j	                  dg       t        j                         }t        j                  |      }|j                  |       	 |j                  t         j                         |j                  d       | j	                  |j                         j                         d       |j                  d       |j                  d       |j                  t         j                          |j                  d       | j	                  |j                         d       |j#                  |       |j%                          t        j                  t         j&                         y # |j#                  |       |j%                          t        j                  t         j&                         w xY w)Nc                   <     e Zd Zdej                  f fd	Z xZS )@ModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLoggerr  c                 H    t         |   ||       j                  d       y )Ninitialized)r  r  r]  )rD   rF   r  r  r  s      rH   r  zIModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__  s     u-}-rj   )rp   rq   rr   r   r   r  r  )r  r  s   @rH   r  rD    s    $.gnn . .rj   r  just_some_loggerrF  hellor   r   )r   r@  r  r   rZ   r4   r5   r9   rB   r7   r8   r   rX   r
  truncater  r   rL   rK   r  )rD   r  r   r6   rR   r  s        @rH   test_subclass_logger_cachez.ModuleLevelMiscTest.test_subclass_logger_cache  sZ   	.w--/ 	.
 	x(""#56=/2!!&)!	3OOGMM*LL!V__.446@OOAKKNOOGLL)LL!V__.3  #GGI""7>>2   #GGI""7>>2s   CF0 0AG6c                     t        j                  d      }t        d|      \  }}}|j                         }| j	                  d|       | j	                  d|       y )Na*  
            import logging

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

            a = A()
        -czexception in __del__zValueError: some error)r  r  r   r  r  rD   codercouterrs        rH   test_logging_at_shutdownz,ModuleLevelMiscTest.test_logging_at_shutdown  sR        (d3Cjjl,c2.4rj   c                 N   t         j                  }| j                  t         j                  |       t	        j
                  d|d      }t        d|       t        |d      5 }| j                  |j                         j                         d       d d d        y # 1 sw Y   y xY w)Na  
            import builtins
            import logging

            class A:
                def __del__(self):
                    logging.error("log in __del__")

            # basicConfig() opens the file, but logging.shutdown() closes
            # it at Python exit. When A.__del__() is called,
            # FileHandler._open() must be called again to re-open the file.
            logging.basicConfig(filename=z, encoding="utf-8")

            a = A()

            # Simulate the Python finalization which removes the builtin
            # open() function.
            del builtins.open
        rL  rE  r  zERROR:root:log in __del__)r   TESTFNr   rQ  r  r  r   r  rZ   ra   r  )rD   rE  rN  fps       rH   test_logging_at_shutdown_openz1ModuleLevelMiscTest.test_logging_at_shutdown_open  s     ##	(((3 $* +3 6	  & 	t$(W- 	NRWWY--/1LM	N 	N 	Ns   #/BB$c                     t        j                  d      }t        d|      \  }}}|j                         }| j	                  d|       | j                  |d       y )Nz
            import logging

            def rec():
                logging.error("foo")
                rec()

            rec()
        rL  z#Cannot recover from stack overflow.r   )r  r  r   r  r  rZ   rM  s        rH   test_recursion_errorz(ModuleLevelMiscTest.test_recursion_error  sU        -T48Cjjl>DQrj   c                    t        j                         }| j                  t         j                  |       | j	                  t         j                  |       t        j                         }| j	                  ||       | j                  ||       y r   )r   getLevelNamesMappingrZ   r(   assertIsNot)rD   mappingnew_mappings      rH   test_get_level_names_mappingz0ModuleLevelMiscTest.test_get_level_names_mapping  sj    ..0--w7--w7224+.+.rj   r   )rp   rq   rr   r  r%  r(  r,  r0  r4  r8  r;  rA  rJ  rR  rV  rX  r^  rs   rj   rH   r  r  .  sN    3I.%0- " #
C3>5&N>  /rj   r  c                       e Zd Zd Zd Zed
d       Zd Zd Zd Z	 e
j                         d        Z e
j                         d	        Zy)LogRecordTestc                     t        j                  i       }t        |      }| j                  |j	                  d             | j                  |j                  d             y )Nz<LogRecord: >)r   r   ro  rC   r  rZ  )rD   r   rh   s      rH   test_str_repzLogRecordTest.test_str_rep  sD    !!"%F^45

3(rj   c                 |   t               }t        j                         }|j                  |       ddi}t        j                  d|       | j                  |j                  d   j                  |       | j                  |j                  d   j                  d       |j                  |       |j                          y )Nlessmorezless is %(less)sr   zless is more)r  r   r   rB   r   r  r  r1  rZ   r  rL   rK   )rD   rR   r   r  s       rH   test_dict_argzLogRecordTest.test_dict_arg  s    	Qf*A.aiil''+1--~>			rj   Nc                    t         j                  }|t         _        	 dd l}|j                         j                  }t        j
                  dd|  i      }t        j                  t        j                  dd       5  t        j
                  dd|  i      }d d d        ||j                  j                  d}|t         _        |r|j                  |       y |S # 1 sw Y   DxY w# |t         _        w xY w)Nr   r  msg1_rO  msg2_)processNamer1.processNamer2.processName)r   logMultiprocessingrO  current_processrF   r   r   	swap_itemrO  modulesrk  rP  )	r  rn  r.  prev_logMultiprocessingmprF   r1r2resultss	            rH   _extract_logrecord_process_namez-LogRecordTest._extract_logrecord_process_name  s    ")"<"<%7"	A(%%',,D&&se}'=>B ""3;;0A4H C**EU3%=+ABC )-)+)+G
 *AG&IIgNC C *AG&s$   AC$ :C"C$ C!C$ $C1c                    t        j                          dt        j                  v }	 | j	                  t
        j                  d       d}t        j                  i       }| j	                  |j                  d       | j                  d|      }| j	                  d|d          | j	                  d|d          | j	                  d|d          dd l
} |j                         \  }} |j                  | j                  d	||f
      }|j                          |j                         }| j                  d|d          | j	                  |d   |d          | j	                  d|d          |j!                          |rdd l
}y y # |rdd l
}w w xY w)NrO  TMainProcessr   rk  rl  rm  r   r   r  )r   rN  rO  rq  rZ   r   rn  r   rk  rw  rO  PipeProcessr  r(  assertNotEqualr   )	rD   multiprocessing_importedLOG_MULTI_PROCESSINGr   rv  rO  parent_conn
child_connr  s	            rH   test_multiprocessingz"LogRecordTest.test_multiprocessing  sz   ::<#4#C  	'W77>#'  %%b)AQ]]M:::1>RSG]GM,BC]G4D,EF]G4D,EF #&:o&:&:&<#K''';;-z;A GGI!&&(Gw}/EFW]3W=M5NO]G4D,EFFFH (& ('& (s   EE? ?	Fc                    | j                   }| j                  }t        j                  i       } ||j                          ||j
                          ||j                          ||j                          ||j                         t        j                  }t        j                  }t        j                  }t        j                  }	 dt        _	        dt        _
        dt        _        dt        _        t        j                  i       } ||j                          ||j
                          ||j                          ||j                          ||j                         |t        _	        |t        _
        |t        _        |t        _        y # |t        _	        |t        _
        |t        _        |t        _        w xY w)NF)r  r  r   r   r  
threadNameprocessrk  taskName
logThreadslogProcessesrn  logAsyncioTasks)rD   NONENOT_NONEr   log_threadslog_processeslog_multiprocessinglog_asyncio_taskss           rH   test_optionalzLogRecordTest.test_optional9  sE     ''!!"%QZZ((,,%88#33	8!&G#(G ).G&&+G#%%b)ANO!,G#0G )<G&&7G# "-G#0G )<G&&7G#s   	BF .F?c                 Z   K   t        j                  i       } ||j                         y wr   )r   r   r  )rD   	assertionr   s      rH   _make_record_asyncz LogRecordTest._make_record_asyncY  s"     !!"%!**s   )+c                 ~   	 | j                   }t        j                         5 }dt        _        |j                   || j                               dt        _        |j                   || j                               d d d        t        j                  d        y # 1 sw Y   xY w# t        j                  d        w xY w)NTF)	r  asyncioRunnerr   r  runr  r  set_event_loop_policyrD   make_recordrunners      rH   #test_taskName_with_asyncio_importedz1LogRecordTest.test_taskName_with_asyncio_imported]  s    	011K! ;V*.'

;t';';<=*/'

;t'8'89:	; ))$/; ; ))$/s#    B% AB;B% B"B% %B<c                    	 | j                   }t        j                         5 }t        j                  t
        j                  dd       5  dt        _        |j                   || j                               dt        _        |j                   || j                               d d d        d d d        t        j                  d        y # 1 sw Y   'xY w# 1 sw Y   +xY w# t        j                  d        w xY w)Nr  TF)r  r  r  r   rp  rO  rq  r   r  r  r  r  r  s      rH   &test_taskName_without_asyncio_importedz4LogRecordTest.test_taskName_without_asyncio_importedi  s    	011K! ;VW->->s{{IW[-\ ;*.'

;t'8'89:*/'

;t'8'89:	; ; ))$/; ; ; ; ))$/s;    C &CAC!C)C C	CCC C6r   )rp   rq   rr   rc  rg  rZ  rw  r  r  r  r   r  r  r  rs   rj   rH   r`  r`    so    )	  0#'J8@ %W$$&	0 '	0 %W$$&	0 '	0rj   r`  c                        e Zd Z	  fdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej0                         d        ZddZd Zd Zd Zd Zd Zd Z  xZ!S )BasicConfigTestc                 |   t         t        |           t        j                  j
                  | _        t        j                  j                         | _        t        j                  d d  | _
        t        j                  j                  | _        | j                  | j                         g t        j                  _        y r   )r  r  rI   r   r  r@   r"   r#   r$   r%   r&   r  r3   r   cleanupr  s    rH   rI   zBasicConfigTest.setUpz  sy    ot*,--%//446")"6"6q"9&-ll&8&8#% "rj   c                     t         j                  j                  d d  D ]1  }t         j                  j                  |       |j	                          3 t
        t        |           y r   )r   r  r@   rL   rK   r  r  rS   )rD   rR   r  s     rH   rS   zBasicConfigTest.tearDown  sK    &&q) 	ALL&&q)GGI	 	ot-/rj   c                 h   t        t        j                  d| j                         t        j                  j                          t        j                  j                  | j                         | j                  t        j                  d d  t        j                  j                  | j                         y )Nr@   )r  r   r  r@   r"   rM   rN   r$   r&   r%   r7   r3   rm   s    rH   r  zBasicConfigTest.cleanup  sp    j$--8!  !4!45"&"9"9Qd99:rj   c                    t        j                          | j                  t        t         j                  j
                        d       t         j                  j
                  d   }| j                  |t         j                         | j                  |j                  t        j                         |j                  }| j                  |j                  j                  t         j                         | j                  |j                          | j                  |j                  t         j"                         | j                  t         j                  j$                  | j&                         y )Nr   r   )r   r  rZ   r[   r  r@   r  r9   r6   rO  r  r  rl  r  BASIC_FORMATr  r  PercentStyler  r3   )rD   r   r  s      rH   test_no_kwargszBasicConfigTest.test_no_kwargs  s     	W\\223Q7,,''*gw'<'<=4%%	))..0D0DE)++,i..0D0DE 	++T-H-HIrj   c                 d   t        j                         5 }t        j                  t        j
                  d       t        j                  d       t        j
                  j                  d       | j                  |j                         j                         d       d d d        y # 1 sw Y   y xY w)Nr|  r6   r  Log an errorr   ERROR:root:Log an errorr   r  r   r  rO  r  r   r  rZ   rX   r
  r  s     rH   test_strformatstylez#BasicConfigTest.test_strformatstyle  x    $$& 	+&szz=MM.)JJOOAV__.446)+		+ 	+ 	+   BB&&B/c                 d   t        j                         5 }t        j                  t        j
                  d       t        j                  d       t        j
                  j                  d       | j                  |j                         j                         d       d d d        y # 1 sw Y   y xY w)Nr  r  r  r   r  r  r  s     rH   test_stringtemplatestylez(BasicConfigTest.test_stringtemplatestyle  r  r  c                 X   d }t        j                  dd       | j                  t        t         j                  j
                        d       t         j                  j
                  d   }| j                  |t         j                         t        j                  ddd      }| j                  |j                  j                  |j                  j                         | j                  |j                  j                  |j                  j                         | j                  |||d       y )	Nc                 n    | j                          |j                          t        j                  |       y r   r  r	  h2r4  s      rH   r  z.BasicConfigTest.test_filename.<locals>.cleanup      HHJHHJIIbMrj   test.logrE  )rE  rG  r   r   rh  r  )r   r  rZ   r[   r  r@   r  rk  r6   moderF   r   rD   r  r   rf   s       rH   test_filenamezBasicConfigTest.test_filename  s    	
 	Z'BW\\223Q7,,''*gw':':;&&z3I,,hoo.B.BC,,hoo.B.BC(J?rj   c                 :   d }t        j                  dd       t         j                  j                  d   }t        j                  dd      }| j                  |j                  j                  |j                  j                         | j                  |||d       y )Nc                 n    | j                          |j                          t        j                  |       y r   r  r  s      rH   r  z.BasicConfigTest.test_filemode.<locals>.cleanup  r  rj   r  wbrE  filemoder   )	r   r  r  r@   rk  rZ   r6   r  r   r  s       rH   test_filemodezBasicConfigTest.test_filemode  su    	
 	Z$?,,''*&&z48,,hoo.B.BC(J?rj   c                    t        j                         }| j                  |j                         t	        j
                  |       | j                  t        t        j                  j                        d       t        j                  j                  d   }| j                  |t        j                         | j                  |j                  |       y )Nr  r   r   )r4   r5   r   rK   r   r  rZ   r[   r  r@   r  r9   r6   )rD   r6   r   s      rH   test_streamzBasicConfigTest.test_stream  s    %6*W\\223Q7,,''*gw'<'<=0rj   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  j                  d       y )Nz%(asctime)s - %(message)s)r  r   )r   r  r  r@   r  rZ   rl  r  rD   r  s     rH   test_formatzBasicConfigTest.test_format  sH    #>?LL))!,66	))..0KLrj   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  d       y )Nr|  )r  r   )r   r  r  r@   r  rZ   r  r  s     rH   test_datefmtzBasicConfigTest.test_datefmt  s@    E*LL))!,66	**E2rj   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  t         j                         y )Nr  r}  r   )r   r  r  r@   r  r  rl  rm  r  s     rH   
test_stylezBasicConfigTest.test_style  sF    #&LL))!,66	i..0K0KLrj   c                    t         j                  j                  }| j                  t         j                  j                  |       t        j
                  d       | j                  t         j                  j                  d       t        j
                  d       | j                  t         j                  j                  d       y )N9   )r  :   )r   r  r  r   r7   r  rZ   )rD   	old_levels     rH   
test_levelzBasicConfigTest.test_level  sy    LL&&	--y9"%++R0"%++R0rj   c                    | j                   }t        j                         g}t        j                  } |t
        t        j                  d|        |t
        t        j                  d|        |t
        t        j                  ||        |t
        t        j                  t        j                         t        j                  d d       y )Nr  )rE  r6   )rE  r@   )r6   r@   )loglevelrh  r  )r<  r   r9   rO  r  r^  r  r   )rD   r<  r@   r6   s       rH   test_incompatiblez!BasicConfigTest.test_incompatible  s    (())+,Z!4!4z=C	EZ!4!4z?G	IZ!4!4V?G	I 	Z!4!4w||LTC8rj   c                 B   t        j                         t        j                  t        j                        t        j                         g}t        j                         }|d   j                  |       t        j                  |       | j                  |d   t         j                  j                  d          | j                  |d   t         j                  j                  d          | j                  |d   t         j                  j                  d          | j                  |d   j                         | j                  |d   j                         | j                  |d   j                  |       | j                  |d   j                  |d   j                         y )Nr   )r@   r   r   )r   r9   rO  r  r;   r>   r  r  r  r@   r  r  )rD   r@   r   s      rH   test_handlerszBasicConfigTest.test_handlers	  s0   !!#!!#**-!!#

   #X.hqk7<<#8#8#;<hqk7<<#8#8#;<hqk7<<#8#8#;<Xa[223Xa[223hqk++Q/hqk++Xa[-B-BCrj   c                    t        j                         }t        j                         }t        j                  |      g}t        j                  |      g}t        j                  t        j
                  |       t        j                  d       t        j                  d       t        j                  d       | j                  t        t        j                  j                        d       t        j                  t        j                  |d       t        j                  d       t        j                  d       t        j                  d       | j                  t        t        j                  j                        d       | j                  |j                         j                         d       | j                  |j                         j                         d	       y )
Nr  r  r   r   r   T)r  r@   forcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r4   r5   r   r9   r  r   r   r   r   rZ   r[   r  r@   r   rX   r
  )rD   old_string_ionew_string_ioold_handlersnew_handlerss        rH   
test_forcezBasicConfigTest.test_force  s;   --m<=--m<='//LIVgW\\223Q7',,"&	(VgW\\223Q7//1779,	.//1779<	>rj   c                    	 d}t        j                  d|ddt         j                         | j                  t	        t         j
                  j                        d       t         j
                  j                  d   }| j                  |t         j                         | j                  |j                  |       t        j                  d       |j                          t        dd	      5 }|j                         j                         }d d d        t        j                   d       | j                  d       y # 1 sw Y   1xY w# j                          t        dd	      5 }|j                         j                         }d d d        n# 1 sw Y   nxY wt        j                   d       | j                  d       w xY w)
NrE  r  r  %(message)srE  rG  errorsr  r  r   r   .   The Øresund Bridge joins Copenhagen to Malmör  r   r  r8   rZ   r[   r  r@   r  rk  rG  r   rK   r  ra   r
  r0  r  rD   rG  r   r   r  s        rH   test_encodingzBasicConfigTest.test_encoding/  sU   	OHh'/'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8MMJKMMOj73 (qvvx~~'(IIj!TMO( ( MMOj73 (qvvx~~'( ( (IIj!TMO0   CE *D99EF?#F	F?F/F?c                    	 d}t        j                  d|ddt         j                         | j                  t	        t         j
                  j                        d       t         j
                  j                  d   }| j                  |t         j                         | j                  |j                  |       t        j                  d       |j                          t        dd	
      5 }|j                         j                         }d d d        t        j                   d       | j                  d       y # 1 sw Y   1xY w# j                          t        dd	
      5 }|j                         j                         }d d d        n# 1 sw Y   nxY wt        j                   d       | j                  d       w xY w)Nr  r  ignorer  r  r   r   r  rE  r  z*The resund Bridge joins Copenhagen to Malmr  r  s        rH   test_encoding_errorsz$BasicConfigTest.test_encoding_errorsC  sO   	QHh'/'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8MMJKMMOj73 (qvvx~~'(IIj!T#OP( ( MMOj73 (qvvx~~'( ( (IIj!T#OPr  c                    	 d}t        j                  d|dt         j                         | j                  t	        t         j
                  j                        d       t         j
                  j                  d   }| j                  |t         j                         | j                  |j                  |       | j                  |j                  d       t        j                  d       |j                          t        dd	
      5 }|j                         j                         }d d d        t!        j"                  d       | j                  d       y # 1 sw Y   1xY w# j                          t        dd	
      5 }|j                         j                         }d d d        n# 1 sw Y   nxY wt!        j"                  d       | j                  d       w xY w)Nr  r  r  )rE  rG  r  r  r   r   backslashreplaceu<   😂: ☃️: The Øresund Bridge joins Copenhagen to MalmörE  r  zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)r   r  r8   rZ   r[   r  r@   r  rk  rG  r  r   rK   r  ra   r
  r0  r  r  s        rH   test_encoding_errors_defaultz,BasicConfigTest.test_encoding_errors_defaultV  sm   	KHh'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8W^^-?@MMXYMMOj73 (qvvx~~'(IIj!T $J K( ( MMOj73 (qvvx~~'( ( (IIj!T $J Ks0   C&E  EE G>F&	G&F/+/Gc                 $   	 d}t        j                  d|d dt         j                         | j                  t	        t         j
                  j                        d       t         j
                  j                  d   }| j                  |t         j                         | j                  |j                  |       | j                  |j                         g fd}||_        t        j                  d       | j                         | j                  d	d          |j!                          t#        dd
      5 }|j%                         j'                         }d d d        t)        j*                  d       | j                  d       y # 1 sw Y   1xY w# j!                          t#        dd
      5 }|j%                         j'                         }d d d        n# 1 sw Y   nxY wt)        j*                  d       | j                  d       w xY w)Nr  r  r  r  r   r   c                 ^    j                  t        t        j                                      y r   )r]  ro  rO  r  )r   r  s    rH   dummy_handle_errorzEBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_errorz  s    s3==?34rj   r  z:'ascii' codec can't encode character '\xd8' in position 4:rE  r  r   )r   r  r8   rZ   r[   r  r@   r  rk  rG  r  r  r  r   rC   r  rK   r  ra   r
  r0  r  )rD   rG  r   r  r   r  r  s         @rH   test_encoding_errors_nonez)BasicConfigTest.test_encoding_errors_nonej  s   	(Hh'+'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8gnn-G5 #5GMMJKOOG$MM =>EajJ MMOj73 (qvvx~~'(IIj!T3'	( ( MMOj73 (qvvx~~'( ( (IIj!T3's0   DF :F		FH3G	HG$ /Hc                    d }d }t        dd      }| j                  t        j                  |       	 d}t	        j
                  |d|t        j                  d       | j                  t        t        j                  j                        d       t        j                  j                  d	   }| j                  |t        j                         t        j                  d
      5 }d
t        _        |j!                   |              d d d        t#        |d      5 }|j%                         j'                         }d d d        | j)                  d       t        j*                  d        |r|j-                          y y # 1 sw Y   xxY w# 1 sw Y   PxY w# t        j*                  d        |r|j-                          w w xY w)Nc                  6   K   t        j                  d       y w)Nzhello world)r   r   rs   rj   rH   r'  z5BasicConfigTest.test_log_taskName.<locals>.log_record  s     OOM*s   r  ztest-logging-taskname-rE  r  z%(taskName)s - %(message)s)rE  r  rG  r  r  r   r   T)r   r  zTask-\d+ - hello world)r5  r   r0  r  r   r  r   rZ   r[   r  r@   r  rk  r  r  r  r  r  ra   r
  assertRegexr  rK   )rD   r'  r   log_filenamerG  r  r   r  s           rH   test_log_taskNamez!BasicConfigTest.test_log_taskName  sa   	+ %f.FG		<0	 Hh)1'CE S!6!67;ll++A.G!!'7+>+>?d+ )v*.'

:<() lW5 (vvx~~'(T#<=))$/ ) )( ( ))$/ s<   B0F #"E<F F9F <FF FF *F>c                      g t         j                   fd}t        j                   t         d|       t	        t         |      }|
 ||d       n |d        j                  di fg       y )Nc                               t         j                  j                  }t         j                  j                  d       j	                  t         j                  j                  |       j                  | |f       y )Nd   )r   r  r  r7   r   r]  )rh  r  r  r  old_basic_configrD   s      rH   my_basic_configz2BasicConfigTest._test_log.<locals>.my_basic_config  sR    **ILL!!#&OOGLL119=MM1b'"rj   r  ztest mers   )r   r  r   r:  r-   rZ   )rD   rd  r  r  r#  r  r  s   `    @@rH   r%  zBasicConfigTest._test_log  si    "..	# 	dG]ODWf-
ui(y! 	2r(,rj   c                 D    | j                  dt        j                         y r'  )r%  r   r   rm   s    rH   r(  zBasicConfigTest.test_log  s    ugoo.rj   c                 &    | j                  d       y r*  r+  rm   s    rH   r,  zBasicConfigTest.test_debug  r-  rj   c                 &    | j                  d       y r/  r+  rm   s    rH   r0  zBasicConfigTest.test_info  r1  rj   c                 &    | j                  d       y r3  r+  rm   s    rH   r4  zBasicConfigTest.test_warning  r5  rj   c                 &    | j                  d       y r7  r+  rm   s    rH   r8  zBasicConfigTest.test_error  r-  rj   c                 &    | j                  d       y r:  r+  rm   s    rH   r;  zBasicConfigTest.test_critical  r<  rj   r   )"rp   rq   rr   rI   rS   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r%  r(  r,  r0  r4  r8  r;  r  r  s   @rH   r  r  v  s    -#0;J(++@$@1M3M19D">*O(Q&K((@ %W$$&  ' :-./ " #rj   r  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )LoggerAdapterTestc                 D   t         t        |           t        j                  d d  t               | _        t        j                  | _        | j                  j                  | j                         | j                  | j                  j                  | j                         | j                  | j                  j                         fd}| j                  |       | j                  t        j                         t        j                  | j                  d       | _        y )Nc                  ,     t         j                  d d  y r   )r   r%   )old_handler_lists   rH   r  z(LoggerAdapterTest.setUp.<locals>.cleanup  s    &6G  #rj   r   r  )r  r  rI   r   r%   r  r"  r  r   rB   r   rL   rK   r
  r   adapter)rD   r  r  r  s     @rH   rI   zLoggerAdapterTest.setUp  s    ,."//2)+llt~~.114>>B,,-	7 	 ((),,DKKtLrj   c                 f   d}d }	 ddz   | j	                  t        | j                  j                        d       | j                  j                  d   }| j	                  |j                  t        j                         | j	                  |j                  |       | j	                  |j                  | j                  f       | j	                  |j                  |j                  ||j                  f       y # t         $ r3}|}| j                  j                  || j                         Y d }~ d }~ww xY wNztesting exception: %rr   r   )r4  r  r  r"  rZ   r[   r  r   r   r|   r  r1  r  r  __traceback__rD   r  r5  r&  r   s        rH   test_exceptionz LoggerAdapterTest.test_exception  s    %	8E
 	T^^334a8''*7S)t~~&78--c.?.?@	B ! 	8CLL""377	8   C4 4	D0=(D++D0c                 p   	 ddz   | j                  j                  d       | j                  t	        | j
                  j                        d       | j
                  j                  d   }| j                  |j                  |j                  ||j                  f       y # t         $ r}|}Y d }~d }~ww xY w)Nr   r   zexc_info testr/  )
r4  r  r  rZ   r[   r"  r  r  r  r  )rD   r&  r5  r   s       rH   test_exception_excinfoz(LoggerAdapterTest.test_exception_excinfo  s    	E 	=T^^334a8''*--c.?.?@	B ! 	C	s   B   	B5)B00B5c                    d}| j                   j                  || j                         | j                  t	        | j                  j
                        d       | j                  j
                  d   }| j                  |j                  t        j                         | j                  |j                  |       | j                  |j                  | j                  f       y )Nzcritical test! %rr   r   )r  r  r"  rZ   r[   r  r   r   rz   r  r1  )rD   r  r   s      rH   r;  zLoggerAdapterTest.test_critical  s    !c4>>2T^^334a8''*)9)9:S)t~~&78rj   c                 b   | j                   j                  j                  j                  }d| j                   j                  j                  _        | j	                  t
        | j                   j                  j                  d|       | j                  | j                   j                  d             y )N!   rO       )r  r   r   rO   r   r  rV  isEnabledForrD   r  s     rH   test_is_enabled_forz%LoggerAdapterTest.test_is_enabled_for  sw    ll))1199.0##+!4!4!<!<i#	%22267rj   c                 f   | j                  | j                  j                                | j                  j                  D ]  }| j                  j                  |        | j                  | j                  j                                | j                  | j                  j                                y r   )rC   r  r?   r   r@   rL   rV  ru  s     rH   test_has_handlersz#LoggerAdapterTest.test_has_handlers  s~    0023{{++ 	/GKK%%g.	/ 	00231134rj   c                     G d dt         j                        }d} || j                  d       } ||d       }d|_        | j	                  t        |      t        |             |j                  t         j                  || j                         | j	                  t        | j                  j                        d       | j                  j                  d   }| j	                  |j                  t         j                         | j	                  |j                  d|        | j	                  |j                  | j                  f       |j                  }| j                  |j                  |       | j                  | j                  j                  |       t!               }	 ||_        | j                  |j                  |       | j                  |j                  |       | j                  | j                  j                  |       ||_        | j                  |j                  |       | j                  |j                  |       | j                  | j                  j                  |       y # ||_        w xY w)	Nc                       e Zd ZdZd Zy).LoggerAdapterTest.test_nested.<locals>.AdapterAdapterc                 (    | j                    d| |fS r  r   )rD   r  r2  s      rH   r  z6LoggerAdapterTest.test_nested.<locals>.Adapter.process   s    ++au-v55rj   N)rp   rq   rr   r   r  rs   rj   rH   r  r    s    F6rj   r  zAdapters can be nested, yo.r  AdapterAdapterr   r   zAdapter AdapterAdapter )r   r   r   r   rZ   r  r   rz   r"  r[   r  r   r  r1  r   r  r  )rD   r  r  r  adapter_adapterr   orig_managertemp_managers           rH   test_nestedzLoggerAdapterTest.test_nested  s   	6g++ 	6 ,D9!=!1g_(=>G,,c4>>BT^^334a8''*)9)9:'>se%DEt~~&78&..goo|4dkk))<8x	3&2O#MM/11<@MM'//<8MM$++--|<&2O#o--|<goo|4dkk))<8 '3O#s   !A%I, ,	I5)rp   rq   rr   rI   r	  r  r;  r  r  r   r  r  s   @rH   r  r    s)    M"B"B9859rj   r  c                   ~     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z xZS )
LoggerTestc                    t         t        |           t               | _        t        j                  d      | _        | j                  j                  | j                         | j                  | j                  j                  | j                         | j                  | j                  j                         | j                  t
        j                         y )NblahrF   )r  r"  rI   r  r"  r   r  r   rB   r   rL   rK   r
  r  s    rH   rI   zLoggerTest.setUp@  s    j$%')+nn&1t~~.114>>B,,-(()rj   c                     | j                  t        d| j                  j                  d        | j                  t        d| j                  j                  d       y )Nz,Level not an integer or a valid string: Nonez.Level not an integer or a valid string: (0, 0))r   r   )rh  r  r   r7   rm   s    rH   test_set_invalid_levelz!LoggerTest.test_set_invalid_levelI  sJ    !!EKK  $	( 	!!GKK  &	*rj   c                 f   d}d }	 ddz   | j	                  t        | j                  j                        d       | j                  j                  d   }| j	                  |j                  t        j                         | j	                  |j                  |       | j	                  |j                  | j                  f       | j	                  |j                  |j                  ||j                  f       y # t         $ r3}|}| j                  j                  || j                         Y d }~ d }~ww xY wr  )r4  r   r  r"  rZ   r[   r  r   r   r|   r  r1  r  r  r  r  s        rH   r	  zLoggerTest.test_exceptionQ  s    %	7E
 	T^^334a8''*7S)t~~&78--c.?.?@	B ! 	7CKK!!#t~~66	7r
  c                     t        j                  t        dd      5  | j                  t        | j
                  j                  dd       d d d        y # 1 sw Y   y xY w)Nr  Tr   test message)r   	swap_attrr   r<  r  r   r   rm   s    rH   !test_log_invalid_level_with_raisez,LoggerTest.test_log_invalid_level_with_raiseb  sJ    w(94@ 	Pi$O	P 	P 	Ps   -AAc                     t        j                  t        dd      5  | j                  j	                  dd       d d d        y # 1 sw Y   y xY w)Nr  Fr   r*  )r   r+  r   r   r   rm   s    rH   test_log_invalid_level_no_raisez*LoggerTest.test_log_invalid_level_no_raisef  s<    w(95A 	2KKOOD.1	2 	2 	2s   AAc                     g t        j                  | t        j                  dfd       | j                  j                  d       | j                  t              d       | j                  dd          y )Nprint_stackc                 B    j                  |j                               S r   )r]  rX   )r   r  r  s     rH   r  z=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>m  s    fmmDMMO&D rj   Tr0  r   r  r   )r   r:  r   	tracebackr   
findCallerrZ   r[   )rD   r  s    @rH    test_find_caller_with_stack_infoz+LoggerTest.test_find_caller_with_stack_infoj  sd    dG--}D	F 	$/Va(;VAYGrj   c                    d| j                   j                  fdfdfd}| j                  j                  } |        | j	                  |d   j
                  d       |d   j                  }dz   |        | j	                  |d   j
                  d       | j                  |d   j                  |       |d   j                  }dz   |        | j	                  |d   j
                  d       | j                  |d   j                  |       |d   j                  }t        j                         }|j                  | j                         t        j                   |        | j	                  |d   j
                  d       |j                  | j                         | j                   j                  dz   |        | j	                  |d   j
                  d	       | j                  |d   j                  |       y )
Nr   c                       d        y )Nr  )
stacklevelrs   )	the_leveltriggers   rH   	innermostz>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermostx  s    Fy1rj   c                                y r   rs   )r:  s   rH   r  z:LoggerTest.test_find_caller_with_stacklevel.<locals>.inner{  s    Krj   c                                y r   rs   )r  s   rH   outerz:LoggerTest.test_find_caller_with_stacklevel.<locals>.outer~  s    Grj   rI  r:  r  r=   test_find_caller_with_stacklevel)r   r   r"  r  rZ   r  ro  r  r   r   rB   rL   )	rD   r=  r  ro  r1   r  r:  r8  r9  s	        @@@@rH   r>  z+LoggerTest.test_find_caller_with_stacklevelt  s   	++%%	2		 ..((--{;##Q	--w772;--v6##Q	--w772;--v6##'')t~~.//--w7!!$..1++%%Q	--/QR72;--v6rj   c                 (   d}d}d x}x}x}x}x}x}}	t        j                  |||||||||		      }
dt        |
j                  j	                               z   D ]:  }|di}| j                  t        | j                  j                  |||||||||	       < y )N	my record   )r  r  
some valuer  sinfo)	r   _logRecordFactoryr_   __dict__keysr<  r  r   
makeRecord)rD   rF   r  r4  lnor  r1  r  r  rD  rvr  r  s                rH   %test_make_record_with_extra_overwritez0LoggerTest.test_make_record_with_extra_overwrite  s    :>>>S>3>>>4%&&tUBS$'/u> *E"++2B2B2D,EE 	8C,'Eh(>(>e #sD($)  8	8rj   c                     d}d}d x}x}x}x}x}x}}	ddi}
| j                   j                  ||||||||
|		      }| j                  d|j                         y )Nr@  rA  	valid_keyrB  rC  )r   rH  r  rF  )rD   rF   r  r4  rI  r  r1  r  r  rD  r  r  s               rH   (test_make_record_with_extra_no_overwritez3LoggerTest.test_make_record_with_extra_no_overwrite  sx    :>>>S>3>>>4%l+''eRc4(0U ( Lk6??3rj   c                    | j                  | j                  j                                | j                  j                  D ]  }| j                  j	                  |        | j                  | j                  j                                y r   )rC   r   r?   r@   rL   rV  ru  s     rH   r  zLoggerTest.test_has_handlers  sa    //12{{++ 	/GKK%%g.	/0023rj   c                 z    t        j                  d      }d|_        | j                  |j	                                y )Nz
blah.childF)r   r   rg  rV  r?   )rD   child_loggers     rH   test_has_handlers_no_propagatez)LoggerTest.test_has_handlers_no_propagate  s1    ((6!&1134rj   c                 &   | j                   j                  j                  }d| j                   j                  _        | j                  t        | j                   j                  d|       | j                  | j                   j                  d             y )N   rO      )r   r   rO   r   r  rV  r  r  s     rH   r  zLoggerTest.test_is_enabled_for  sb    kk))11&(#!4!4iM11"56rj   c                    | j                   j                  }| j                   j                  j                  }d| j                   _        d| j                   j                  _        | j	                  t
        | j                   d|       | j	                  t
        | j                   j                  d|       | j                  | j                   j                  d             y )NTr  r   rO   rU  )r   r   r   rO   r   r  rV  r  )rD   old_disabledr  s      rH   #test_is_enabled_for_disabled_loggerz.LoggerTest.test_is_enabled_for_disabled_logger  s    {{++kk))11#&(#j,G!4!4iM11"56rj   c                    t        j                         }| j                  |t         j                         | j                  |t        j                  d              | j                  |t        j                  d             | j                  |t        j                  d             | j                  |t        j                  d      j                         | j                  |t        j                  d      j                         | j                  |t        j                  d      j                         | j                  |t        j                  d             | j                  |t        j                  d      j                         y )Nr   r  r{  r   )r   r   r  r  r  r[  )rD   r  s     rH   test_root_logger_aliasesz#LoggerTest.test_root_logger_aliases  s     "dGLL)dG--d34dG--b12dG--f56dG--e499:dG--i8==>dG--e4;;<w0067w00;BBCrj   c                     | j                  t        t        j                  t               | j                  t        t        j                  d       y )Ns   foo)r<  r  r   r   anyrm   s    rH   test_invalid_nameszLoggerTest.test_invalid_names  s2    )W%6%6<)W%6%6?rj   c                     t        t        j                  dz         D ][  }dD ]T  }t        j                  |      }t        j
                  ||      }t        j                  |      }| j                  ||       V ] y )Nr   )r   r  r{  r  zbaz.bar)rw  r+  HIGHEST_PROTOCOLr   r   rZ  r,  r  )rD   protorF   r   rh   	unpickleds         rH   test_picklingzLoggerTest.test_pickling  sk    622Q67 	1EA 1 **40LL/"LLO	i0	1	1rj   c                 n
   | j                   }t        j                  d      }t        j                  d      }|j                  t        j                         | j                  |j                         t        j                         | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                  dt        j                  di       | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  t        j                  di       |j                  t        j                         | j                  |j                         t        j                         | j                  |j                  i        | j                  |j                  t        j                               |j                  t        j                         | j                  |j                         t        j                         | j                  |j                  i        | j                  |j                  i        | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                               t        j                          | j                  |j                         t        j                         | j                  |j                  i        | j                  |j                  i        | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                               y )Nr  r  TF)r1   r   r   r7   r|   rZ   r2   _cacherC   r  rV  r8   rz   r   rO   )rD   r  r/   r0   s       rH   test_cachingzLoggerTest.test_caching  sz   ##E*##I. 	gmm$224gmmD, 	,,W]];<--gmm<='--w}}e)TUb),,W]];< 	b)))'--89w}}d&;< 	))*224g6F6FG, 	--gmm<= 	(224g6F6FG,,b) 	--gmm<=,,W-=-=>?--gmm<=,,W-=-=>?))'--89 	224g6F6FG,,b) 	--g.>.>?@--g.>.>?@**7+;+;<=rj   )rp   rq   rr   rI   r'  r	  r,  r.  r4  r>  rK  rN  r  rR  r  rX  r[  r^  rc  rf  r  r  s   @rH   r"  r"  >  s^    **B"P2H%7N8445
7
7D@16>rj   r"  c                   &    e Zd Z	 d Zd Zd Zd Zy)BaseFileTestc                 ^    t         j                  |        t        dd      | _        g | _        y )Nr  ztest_logging-2-)r   rI   r5  r4  rmfilesrm   s    rH   rI   zBaseFileTest.setUp$  s$    t ):;rj   c                 
   | j                   D ]  }t        j                  |        t        j                  j	                  | j
                        rt        j                  | j
                         t        j                  |        y r   )rj  r0  rQ  rW  rX  r4  r   rS   )rD   r4  s     rH   rS   zBaseFileTest.tearDown)  sR    ,, 	BIIbM	77>>$''"IIdgg$rj   c                     	 | j                  t        j                  j                  |      d|z         | j                  j                  |       y )NzLog file %r does not existr  )rC   r0  rW  rX  rj  r]  )rD   rE  s     rH   assertLogFilezBaseFileTest.assertLogFile0  s@    Ax088C 	 	EH%rj   c           
      r    t        j                  dt         j                  dd| j                         d d d       S )Nrq  r  r   )r   r  r8   rn   rm   s    rH   next_reczBaseFileTest.next_rec6  s5      gmmS!!%!2!2!4dD$H 	Hrj   N)rp   rq   rr   rI   rS   rn  rp  rs   rj   rH   rh  rh  !  s    7
 &Hrj   rh  c                       e Zd Zd Zd Zy)FileHandlerTestc                 :   t        j                  | j                         t        j                  | j                  dd      }| j                  |j                         | j                  t         j                  j                  | j                               |j                  t        j                  i              | j                  |j                         | j                  t         j                  j                  | j                               |j                          y )NrE  TrF  )r0  rQ  r4  r   rk  r  r6   rV  rW  rX  rU  r   r  rC   rK   )rD   fhs     rH   
test_delayzFileHandlerTest.test_delay;  s    
		$''  7$G"))$01
		'''+,RYY'tww/0

rj   c                    t        j                  | j                         t        j                  | j                  dd      }|j                  t        j                  d             |j                  | j                                |j                          |j                  | j                                t        | j                        5 }| j                  |j                         j                         d       d d d        y # 1 sw Y   y xY w)NrE  rg  )rG  r  r  r{   )r0  rQ  r4  r   rk  r>   r;   r>  rp  rK   r  rZ   ra   r
  )rD   rt  rU  s      rH   %test_emit_after_closing_in_write_modez5FileHandlerTest.test_emit_after_closing_in_write_modeE  s    
		$''  7E
))-89
 


 $''] 	5bRWWY__.4	5 	5 	5s   	/DD
N)rp   rq   rr   ru  rw  rs   rj   rH   rr  rr  :  s    	5rj   rr  c                       e Zd Z ej                  ej                  d      d        Zd Zd Z	d Z
d Z ej                         d        Zy)	RotatingFileHandlerTestWASI does not have /dev/null.c                    t         j                  j                  | j                  dd      }| j	                  |j                  d              |j                          t         j                  j                  t        j                  dd      }| j	                  |j                  | j                                      |j                          y )NrE  r   rG  maxBytesr   )
r   r@   rl  r4  rV  shouldRolloverrK   r0  devnullrp  rD   rhs     rH   test_should_not_rolloverz0RotatingFileHandlerTest.test_should_not_rolloverQ  s     11'A 2 7**401

 11

Wq 2 :**4==?;<

rj   c                     t         j                  j                  | j                  dd      }| j	                  |j                  | j                                      |j                          y )NrE  r   r|  )r   r@   rl  r4  rC   r~  rp  rK   r  s     rH   test_should_rolloverz,RotatingFileHandlerTest.test_should_rollover`  sJ    11$''GVW1X))$--/:;

rj   c                     t         j                  j                  | j                  d      }|j	                  | j                                | j                  | j                         |j                          y )NrE  r  )r   r@   rl  r4  r>  rp  rn  rK   r  s     rH   test_file_createdz)RotatingFileHandlerTest.test_file_createde  sP     11$''G1L
 477#

rj   c                    d }t         j                  j                  | j                  ddd      }||_        |j                  | j                                | j                  | j                         |j                  | j                                | j                   || j                  dz                |j                  | j                                | j                   || j                  dz                | j                  t        j                  j                   || j                  dz                      |j                          y )	Nc                     | dz   S N.testrs   r%  s    rH   namerz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namern  s    '>!rj   rE  r   r   rG  backupCountr}  .1.2.3)r   r@   rl  r4  r  r>  rp  rn  rV  r0  rW  rX  rK   )rD   r  r  s      rH   test_rollover_filenamesz/RotatingFileHandlerTest.test_rollover_filenamesm  s    	"11GGg1q 2 B
 477#
 5401
 5401dggn(=>?

rj   c                     G d dt         j                  j                        } || j                  ddd      }| j	                  |j                  | j                        | j                  dz          |j                  | j                                | j                  | j                         |j                  | j                                | j                  |j                  | j                  dz         d	z          | j                  t        j                  j                  |j                  | j                  dz                      |j                          y )
Nc                       e Zd Zd Zd Zy)ZRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotatorc                     |dz   S r  rs   )rD   rF   s     rH   r  z`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namer~  s    g~%rj   c                 v    t         j                  j                  |      rt        j                  ||dz          y y )N.rotated)r0  rW  rX  r  )rD   sourcedests      rH   rotatorzbRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotator  s*    77>>&)JJvtj'89 *rj   N)rp   rq   rr   r  r  rs   rj   rH   HandlerWithNamerAndRotatorr  }  s    &:rj   r  rE  r   r   r  r  r  r  )r   r@   rl  r4  rZ   r  r>  rp  rn  rV  r0  rW  rX  rK   )rD   r  r  s      rH   test_namer_rotator_inheritancez6RotatingFileHandlerTest.test_namer_rotator_inheritance|  s    	:)9)9)M)M 	: (GGg1qB$''*DGGg,=>
 477#
 288DGGdN3j@A4(@AB

rj   c                    d }d }t         j                  j                  | j                  ddd      }||_        ||_        | j                         }|j                  |       | j                  | j                         | j                         }|j                  |        || j                  dz         }| j                  |       t        j                  }t        |d      5 }|j                         }	t        j                  |	      }
| j                  |
j!                  d	      |j"                  |z          d d d        |j                  | j                                 || j                  d
z         }| j                  |       t        |d      5 }|j                         }	t        j                  |	      }
| j                  |
j!                  d	      |j"                  |z          d d d        |j                  | j                                 || j                  d
z         }t        |d      5 }|j                         }	t        j                  |	      }
| j                  |
j!                  d	      |j"                  |z          d d d        | j%                  t        j&                  j)                   || j                  dz                      |j+                          y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   uxY w)Nc                     | dz   S )Nz.gzrs   r%  s    rH   r  z3RotatingFileHandlerTest.test_rotator.<locals>.namer  s    %<rj   c                     t        | d      5 }|j                         }t        j                  |d      }t        |d      5 }|j	                  |       d d d        d d d        t        j                  |        y # 1 sw Y   'xY w# 1 sw Y   +xY w)Nrbrn  r  )r  ra   zlibcompressr  r0  r  )r  r  sfr  
compresseddfs         rH   r  z5RotatingFileHandlerTest.test_rotator.<locals>.rotator  sy    fd# )rwwy!]]43
$% )HHZ())
 IIf) )) )s#   3B A8B8B	=BBrE  r   r   r  r  r  r  r  r  )r   r@   rl  r4  r  r  rp  r>  rn  r0  linesepr  ra   r  
decompressrZ   r  r  rV  rW  rX  rK   )rD   r  r  r  m1m2r4  newliner   r  r  s              rH   test_rotatorz$RotatingFileHandlerTest.test_rotator  sV   	 	 11GGg1q 2 B
]]_
477#]]_
477T>"2**"d^ 	EqJ??:.DT[[1266G3CD	E 	 477T>"2"d^ 	EqJ??:.DT[[1266G3CD	E 	 477T>""d^ 	EqJ??:.DT[[1266G3CD	E 	dggn(=>?

%	E 	E	E 	E	E 	Es'   !AKAK%*AK2K"%K/2K;N)rp   rq   rr   r  r  r   is_wasir  r  r  r  r  requires_zlibr  rs   rj   rH   ry  ry  P  sZ    X__W__&EF G
& W* *rj   ry  c                   p    e Zd Z ej                  ej                  d      d        Zd Zd Z	d Z
d Zd Zy)	TimedRotatingFileHandlerTestrz  c                    t         j                  j                  t        j                  ddd      }t        j                  d       t        j                  ddi      }| j                  |j                  |             |j                          y )NSrE  r   rG  r  皙?r  ztesting - device file)r   r@   rm  r0  r  rx  rz  r   rV  r~  rK   )rD   rt  r   s      rH   r  z5TimedRotatingFileHandlerTest.test_should_not_rollover  sp     66

C'q 7 B

3!!5*A"BC**1-.

rj   c                    t         j                  j                  | j                  ddd      }t        j                  d      }|j                  |       t        j                  ddi      }|j                  |       | j                  | j                         t        j                  d       t        j                  dd	i      }|j                  |       |j                          d
}t        j                  j                         }d}t        |      D ]w  }|t        j                  |      z
  }	| j                  |	j!                  d      z   }
t"        j$                  j'                  |
      }|s\| j(                  j+                  |
        n d|z  }|st"        j$                  j-                  | j                        \  }}
t#        j.                  |      D cg c]  }|j1                  |
      s| }}t3        d|j!                  d      z  t4        j6                         t3        d|z  t4        j6                         |D ]^  }t3        d|z         t"        j$                  j9                  ||      }t;        |d      5 }t3        |j=                                d d d        ` | j?                  ||       y c c}w # 1 sw Y   xY w)Nr  rE  r   r  r  r  ztesting - initialr  ztesting - after delayFi,  secondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondszTest time: %sz%Y-%m-%d %H-%M-%Sr  zThe only matching files are: %szContents of %s:r   rm  ) r   r@   rm  r4  r;   r>   r   r>  rn  rx  rz  rK   r  r;  rw  	timedeltastrftimer0  rW  rX  rj  r]  r   listdirr  r  rO  r  r   r  ra   rC   )rD   rt  r  rt  ru  foundr;  GO_BACKsecsprevr4  r  dnr   filesrW  tfs                    rH   test_rolloverz*TimedRotatingFileHandlerTest.test_rollover  s5   66wA 7 ? 9:
""E+>#?@
477#

3""E+B#CD


 ##%'N 	D++D99D4==)=>>BGGNN2&E##B'	 =wFWW]]477+FB "

2C1!,,r2BQCEC/CLL1D$EECJJW3e;#**M %'!+,ww||B*$_ %"'')$% %%
 	3' D% %s   J5-J5=J::K	c                 T   | 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       y )NXrE  TrF  WW7)r<  r^  r   r@   rm  r4  )rD   r<  s     rH   test_invalidz)TimedRotatingFileHandlerTest.test_invalid  s    ((Z!1!1!J!JWWcG4	AZ!1!1!J!JWWcG4	AZ!1!1!J!JWWdWD	Brj   c           	         d}t        j                  ddd      }t        j                  j	                  | j
                  ddddd|      }	 |j                  |      }| j                  ||dz          |j                  |d	z         }| j                  ||d
z          |j                          y # |j                          w xY w)Nr      rE  MIDNIGHTr   TrG  whenintervalr  r  atTime  ж  i@ )	r  rx  r   r@   rm  r4  computeRolloverrZ   rK   )rD   currentTimer  r  re   s        rH   "test_compute_rollover_daily_attimez?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attime  s    r1a(66GGgJPQV 7 %	''4FV[<%?@''l(BCFV[<%?@HHJBHHJs   AB+ +B=c           
      V   t        t        j                               }||dz  z
  }t        j                  ddd      }t        j                  |      j                  }t        d      D ]*  }t        j                  j                  | j                  dd|z  ddd|	      }	 ||kD  r	d|z
  |z   }n||z
  }|dz  }|d
z  }||z  }|j                  |      }||k7  r2t        dt        j                  z         t        dt               z         | j                  ||       ||k(  r|dz  }|j                  |dz         }||k7  r2t        dt        j                  z         t        dt               z         | j                  ||       |j                          - y # |j                          w xY w)NQ r  r      rE  zW%dr   Tr  r  zfailed in timezone: %dzlocal vars: %si:	 r  )rp  rx  r  r  tm_wdayrw  r   r@   rm  r4  r  r  timezonelocalsrZ   rK   )	rD   r  todayr  wdaydayr  rf   re   s	            rH   #test_compute_rollover_weekly_attimez@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attime  s   $))+&kE11r1a({{5!))8 	C!!::'aUV ; )B#: !"D3H #d
HL(L(E!++E2X%2T]]BC*VX56  2$; 00H++EL,@AX%2T]]BC*VX56  2
?	> 
s   C#FF(c                    t        j                  d      }| j                  t        j                  |       g }t
        j
                  j                         }t        d      D ];  }|j                  |j                  d             |t        j                  d      z  }= d}g }g }|D ]  }t        j                  j                  |d|z        }	t        j                  j!                  |	d	dd
d      }
|j                  |
       |j#                  d      r|D ]  }|j                  |d|        d |
_        |D ]  }|j                  |d|d         |D ]8  }t        j                  j                  ||      }	t'        |	d      5 }	 d d d        : t)        |      D ]#  \  }}||   }
|
j+                         }| j-                  t/        |      d       |j#                  d      rOd|z  }	|D ]D  }t        j                  j1                  |      \  }}| j3                  |j#                  |	             F |D ]  }t        j                  j1                  |      \  }}| j3                  |j5                  d             | j3                  |j#                  |dz         xr |t/        |      dz      j7                                 & y # 1 sw Y   xxY w)Nr  r  rb  z%Y-%m-%d_%H-%M-%Sr  r  )a.bza.b.czd.ezd.e.fz%s.logrh   r  T)r  r  r  rH  r  z.log.c                 ,    | j                  dd      dz   S )Nr  r   )r  r%  s    rH   r  zKTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.<lambda>J  s    T\\&"-E-N rj   r   r  r  r  z%s.log.r   )r.  mkdtempr   shutilrmtreer  r;  rw  r]  r  r  r0  rW  r   r   r@   rm  r  r  r  	enumerategetFilesToDeleterZ   r[   r   rC   rZ  isdigit)rD   wdtimesr`  rr  prefixesr  rotatorsr   r  r  r  r4  r   
candidatesr  r  s                    rH   test_compute_files_to_deletez9TimedRotatingFileHandlerTest.test_compute_files_to_delete3  s   _5r*""$r 	0ALL%89:($$Q//B	0 4 	<FRF!23A&&??IJLMFJ @ LG OOG$  ' <ALL!:;< !O <ALL!:;<	<  	BR$Aa ! 	
 #8, 	CIAvqkG 113JS_a0  '&# 6AGGMM!,EArOOBMM!$456 $ CAGGMM!,EArOOBKK$78OOBMM&3,$? %B$&s6{Q$7$?$?$ACC	C s   K

K	N)rp   rq   rr   r  r  r   r  r  r  r  r  r  r  rs   rj   rH   r  r    sD    X__W__&EF G((TB &P.Crj   r  c                  Z    t        j                  di | t        j                  d      z  S )Nr   r  rs   )r  r  )r  s    rH   r  r  d  s&    ##x'9'9!'DDDrj   )r  r   )M<   )Hi  )Dr  )r  r  W0rv     )dayshoursc                    t         j                  j                  | j                  d|ddd      }d}|j	                  |      }||k7  r=|dk(  r7	 |j
                  rt        j                  |      }nt        j                  |      }|d   }|d	   }|d
   }	t         j                  j                  |dz  |z   dz  |	z   z
  }
||
z   }t        d|d|j
                  dt        j                         t        d|z  t        j                         t        d|z  t        j                         t        d|	z  t        j                         t        d|
z  t        j                         t        d|z  t        j                         | j                  ||       |j                          y # t        $ r(}t        d|z  t        j                         Y d }~Od }~ww xY w)NrE  r   r   T)rG  r  r  r  r  g        r  r  rv  r  r  zt: z ()r  zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)r   r@   rm  r4  r  r  rx  r  	localtime	_MIDNIGHTr  rO  r  r  rZ   rK   )rD   r  expr  r  re   r  currentHourcurrentMinutecurrentSecondr   r  r&  s                rH   test_compute_rolloverr  o  s   66GGgD1!QU 7 W##K0&= z!Svv KK4 NN;7"#A$K$%aDM$%aDM((22{R7G7D8EHJ7K)7* +A )1_F!RVV43::F+k9

K-=CJJO-=CJJO'A+CJJ7,/cjjA 	f%

 ! S<q@szzRRSs   D6F) )	G2GGztest_compute_rollover_%sz>win32evtlog/win32evtlogutil/pywintypes required for this test.c                       e Zd Zd Zy)NTEventLogHandlerTestc                    d}t        j                  d |      }t        j                  |      }	 t        j                  j                  d      }t        j                  ddi      }|j                  |       |j                          | j                  |t        j                  |             t         j                  t         j                   z  }d}d}	t        j"                  |||	      }
|
D ]1  }|j$                  dk7  rt'        j(                  ||      }|d	k7  r/d
} n d|	z  }| j+                  ||       y # t        j                  $ r*}|j                  dk(  rt        j                  d       d }~ww xY w)NApplication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 recordsrm  )win32evtlogOpenEventLogGetNumberOfEventLogRecordsr   r@   NTEventLogHandler
pywintypesr   winerrorr  SkipTestr   rU  rK   
assertLessEVENTLOG_BACKWARDS_READEVENTLOG_SEQUENTIAL_READReadEventLog
SourceNamewin32evtlogutilSafeFormatMessagerC   )rD   logtypeelhnum_recsrR   r&  r   flagsr  r  eventsr  s               rH   r[  z NTEventLogHandlerTest.test_basic  sY   &&tW599#>	  22>BA !!5*<"=>			+"H"H"MN33445))#ug> 	A||~-!33Aw?C,,E	 DgM3'1  	zzQ''(MNN	s   D6 6E3	%E..E3N)rp   rq   rr   r[  rs   rj   rH   r   r     s    (rj   r   c                       e Zd Zd Zy)MiscTestCasec                 D    h d}t        j                  | t        |       y )N>   r  r  Filtererr  
RootLoggerr  PlaceHolderr  currentframer  StrFormatStyler  rn  rm  )not_exported)r   check__all__r   )rD   r  s     rH   test__all__zMiscTestCase.test__all__  s    ,
 	T7Frj   N)rp   rq   rr   r!  rs   rj   rH   r  r    s    Grj   r  c                  V    t        j                  t        j                  dd             y )NLC_ALLr   )r  enterModuleContextr   run_with_localers   rj   rH   setUpModuler&    s     7 7" EFrj   __main__r   )F)r   logging.handlerslogging.configr  r  r#   r  ri  r+  r4   r  r  rY  r0  r  r{  rU   r  r  r)  rO  r.  test.support.script_helperr   r   r  r   test.supportr   r   r   r	   r
   test.support.logging_helperr   r  r  r  rx  r  r  rz  http.serverr   r   urllib.parser   r   socketserverr   r   r   r   r  r   r   r  r  r  r  r  TestCaser   ru   r   SILENTr   TERSEEFFUSIVEr   r  	TALKATIVEr   
CHATTERBOXBORINGrw  r   r   r   r   r   r   r5  r7  r  r  r9   r  r  r  r  r  r  r  r)  r7  rB  rE  rJ  r  r  rL  r`  r;   r  r  r  r  r9  r>  rD  rO  rS  ra  IPV6_ENABLEDrd  rj  r  r  r  r  r  r  r  r@   r)  r  r  r  r  r  r  r  r  r  r	  r  r  rO  unittest.mockr:  r<  r  r^  tzinfor\  r  rf  rj  r  r  r  r  r  r  r  r  r  r  r`  r  r  r"  rh  rr  ry  r  r  r  r  r  r  r   r  r&  rp   mainrs   rj   rH   <module>r;     s!  "          	  	  	   	    
  N  " & ) ( ! 3        : +D D X 633	
j'x   j'ZUI UIn<%h <%L 		
FFQJ' (*	'**)++,
( +gnn +: :C' C'LS2( S2l1 1#-- # '@ '@XG;U%% G;T06 0d'\: 'R1L"4 1>-L"4 -^ 69(} (( (
 !  ",,,.h  / #@C5 C5L-** -
aX aH !  ",,,.W+ W+ / #W+t WVY/1HI&- & J& !  ",,,.>:( >: / #>:@ WVY/1HI(1 ( J( !  ",,,.IB IB / #IBV WVY/1HI&- & J& ]//;=6- 6=6 !  ",,,.K h K  / #K Z1 1h-L8 -L`%K8 %KP. #	G)) 		W%%33 		%++ 	{*X {*z-9( 9.&h &>	w(( 	 8  F -,,.iPx iP /iPV 7_-#0002]&H ]& 3]&@ x!(//  
e. .Y)H%%'9 Y)x&W77 &GX.. G&AH A,$;X $;N	 	$w** $T/8 T/nx/( x/vJ0H J0ZY#h'' Y#x
i9)) i9X`>- `>FH8 H25l 5,jl jXeC< eCPE  %,1B/0 )dID# *.3  B (*Dt*KMbcS)dX ["bc (H  ( d (FG8$$ GG zHMMO O| 
  6155K5/J6
  		s0   [%[% 2[7 ["%[43[47\ ?\ 