
    7bh                    R   d 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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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l0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 	 ddl:Z:ddl;Z;ddl<Z<	 ddl>Z> e*j~                  ej                  d      ZA e*j~                   ej                  d      d      ZC G d de*j                        ZE G d deE      ZF G d deE      ZGdZHdZIdZJdZKdZLd ZMd!ZNd"ZOd#ZPd$ZQ eReQeHd%z         ZSeHd&eId'eJd(eKd)eLd*eMd+eNd,eOd-ePd.eQd/i
ZT G d0 d1ej                        ZV G d2 d3ej                        ZW G d4 d5eE      ZXd6 ZY G d7 d8eE      ZZ G d9 d:e[      Z\ G d; d<ej                        Z^ G d= d>e[      Z_ G d? d@eE      Z` G dA dBe#j                        Zb G dC dDe[      Zc G dE dFece.      Zd G dG dHece8      Ze G dI dJece6      Zf egedK      r G dL dMee      Zh G dN dOef      Zi ej                          e j                          G dP dQeE                    Zl G dR dSeE      Zm G dT dUej                        ZodV Zp G dW dXeE      Zq ej                          e j                          G dY dZeE                    Zr e*j                   egedK      d[       G d\ d]er             Zt ej                          e j                          G d^ d_eE                    Zu e*j                   egedK      d[       G d` daeu             Zv ej                          e j                          G db dceE                    Zw e*j                   egedK      d[       G dd deew             Zx e*j                  ej                  df       G dg dhew             Zz ej                          e j                          G di djeE                    Z{ G dk dleE      Z| G dm dneE      Z} G do dpeE      Z~ddqZ G dr ds      Zdt Z G du dvej                        Z G dw dxej                  j                        Z G dy dzej                        Z G d{ d|      Z G d} d~e      Z G d de      Z G d d      Zd ZddZ G d deE      Z G d deE      Z G d deE      Z G d dej"                        Z G d deE      Z e j                          G d deE             Z egej                  d      r)ddlZddl0m1Z1  e j                          G d deE             Z ej.                  d      Z G d dej2                        Z e       Z G d d      Z G d de*j                  e      Z G d dej<                        Z G d de*j                        Z G d deE      Z G d deE      Z G d d      Z G d dejH                        Z G d deE      Z G d deE      Z G d deE      Z G d de*j                        Z G d de*j                        Z G d dejV                        Z G d d      Z G d dejV                        Z G d deEe      Z G d deE      Z G d de      Z G d de      Z G d de      Zd Zdddddd eddȬɫ      ffD ]3  \  ZZdD ])  Zeeefd˄Zdez  Zed%kD  redz  Zee_         eeee       + 5  e*j                  e:dΫ       G dτ deE             Z G dф de*j                        Zdӄ Zedk(  r e*j~                          yy# e=$ r
 dxZ:xZ;Z<Y w xY w# e=$ r Y w xY w)zoTest harness for the logging module. Run all tests.

Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved.
    N)assert_python_okassert_python_failure)support)import_helper)	os_helper)socket_helper)threading_helper)warnings_helper)asyncore)smtpd)TestHandler)
HTTPServerBaseHTTPRequestHandler)patch)urlparseparse_qs)ThreadingUDPServerDatagramRequestHandlerThreadingTCPServerStreamRequestHandlerz?libasan has a pthread_create() dead lock related to thread+forkT)threadz'TSAN doesn't support threads after forkc                   6    e Zd ZdZdZdZdZd Zd Zd
dZ	d	 Z
y)BaseTestzBase class for logging tests.z&%(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)zxSetup the default logging stream to an internal StringIO instance,
        so that we can examine log output as we want.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         ;/opt/python-3.12.12/usr/lib/python3.12/test/test_logging.pysetUpzBaseTest.setUpa   s    />>@'')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)zJRemove our logging stream, and restore the original logging
        level.r   N) r8   closer3   removeHandlerr<   rB   r9   r5   r   r#   r,   clearupdater-   r*   r+   r$   r&   r(   r'   r    r!   disabler"   r)   r.   r   r0   
doCleanupsr	   threading_cleanupr   )rF   hr!   r"   r.   rH   s         rJ   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** &28Ed8KD&&t,5 +   "**D,?,?@   "s   +E.J5 J5 5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)zMatch the collected log lines against the regular expression
        self.expected_log_pat, and compare the extracted group values to
        the expected_values list of tuples.z*Log line does not match expected pattern:
z'Remaining output at end of log stream:
N)r8   recompileexpected_log_patgetvalue
splitlinesassertEquallenzipsearchfailtuplegroupsread)	rF   expected_valuesr8   patactual_linesactualexpectedmatchss	            rJ   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= !C KKMII@1DE     c                 J    | xj                   dz  c_         d| j                   z  S )zMGenerate a message consisting solely of an auto-incrementing
        integer.   z%d)message_numrF   s    rJ   next_messagezBaseTest.next_message   s&     	Ad&&&&rl   NN)__name__
__module____qualname____doc__r>   rY   ro   rK   rU   rk   rq    rl   rJ   r   r   Y   s-    '9J4K(4T ADF$'rl   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
BuiltinLevelsTestz*Test builtin levels and their inheritance.c                    | 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))r{   CRITICAL1)r{   ERROR2)r|   r~   3)r|   r   4)r|   WARNING5)r|   INFO6)r}   r~   7)r}   r   8)r}   r   9)r}   r   10)r}   r:   11)rq   r   r    r9   r   LoggerAdapterr   r:   logr~   errorwarninginfodebugrk   )rF   mr{   r|   r}   s        rJ   	test_flatzBuiltinLevelsTest.test_flat   sr   &W]]###G$5$5e$<bAW\\"&W]]# 	  !#&		!#  !#&		!#AC  !#&		!#AC		!# 	AC		!#		!# 
 	rl   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 )Nr|   INF.ERR)r   r~   r   )r   r   r   rq   r   r    r9   r   r   r   r~   r   r   r   r   rk   )rF   r   r|   INF_ERRs       rJ   test_nested_explicitz&BuiltinLevelsTest.test_nested_explicit   s    &W\\"$$Y/' 	G$$ac*ac 	QSac(%
 	rl   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 )Nr|   r   	INF.UNDEFINF.ERR.UNDEFUNDEF))r   r~   r   )r   r   r   )r   r   r   )r   r   r   )r   r~   r   )r   r   r   r   )rF   r   r|   r   	INF_UNDEFINF_ERR_UNDEFr   s          rJ   test_nested_inheritedz'BuiltinLevelsTest.test_nested_inherited  s>   &W\\"$$Y/'%%k2	))/:!!'* 	g&&,!#qs'**AC0AC  	ac"13AC  
 	rl   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 )Nr|   INF.BADPARENT.UNDEFINF.BADPARENT))r   r~   r   )r   r   r   )r   r~   r   )r   r   r   )
rq   r   r    r9   r   r   FATALr   r   rk   )rF   r   r|   
GRANDCHILDCHILDs        rJ   test_nested_with_virtual_parentz1BuiltinLevelsTest.test_nested_with_virtual_parent2  s    &&&'<=
!!/2W\\" 	w}}ac*		'--%

13 	AC 
 	rl   c                     | j                  t        j                  d      t        j                         | j                  t        j                  t        j                        d       y)z&See issue #22386 for more information.r   N)r\   r   getLevelNamer   rp   s    rJ   test_regression_22386z'BuiltinLevelsTest.test_regression_22386L  s@    --f5w||D--gll;VDrl   c                 n    t        j                  d      }| j                  |t         j                         y )Nr   )r   r   r\   r   )rF   fatals     rJ   test_issue27935z!BuiltinLevelsTest.test_issue27935Q  s&    $$W-.rl   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)z&See issue #29220 for more information.r   r   NOTSETN)r   addLevelNamer   
addCleanupr\   r   r   rp   s    rJ   test_regression_29220z'BuiltinLevelsTest.test_regression_29220U  s    W\\2.,,gllFC--gll;R@--gnn=xH--h7Hrl   N)rs   rt   ru   rv   r   r   r   r   r   r   r   rw   rl   rJ   ry   ry      s,    4-^.!F4E
/Irl   ry   c                   "    e Zd ZdZd Zd Zd Zy)BasicFilterTestzTest the bundled Filter class.c                    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   Filterr3   rB   	addFilterr    r   rq   rk   removeFilter)rF   filter_handlerr   	spam_eggsspam_eggs_fishspam_bakedbeanss          rJ   test_filterzBasicFilterTest.test_filtera  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   )rH   splitjoin)recordpartsprefixs      rJ   
filterfuncz8BasicFilterTest.test_callable_filter.<locals>.filterfunc}  s5    KK%%c*EXXeBQi(F[((rl   r   r   r   r   r   r   r   )	r3   rB   r   r   r    r   rq   rk   r   )rF   r   r   r   r   r   r   s          rJ   test_callable_filterz$BasicFilterTest.test_callable_filtery  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 )NrH   r   )r   r   makeLogRecordrE   filter)rF   frs      rJ   test_empty_filterz!BasicFilterTest.test_empty_filter  s7    NN!!6;"78$rl   N)rs   rt   ru   rv   r   r   r   rw   rl   rJ   r   r   ]  s    (*0-:%rl   r   x   w   v   u   t   s   r   q   p   o   rn   SilentTaciturnTerseEffusiveSociableVerbose	Talkative	Garrulous
ChatterboxBoringc                       e Zd ZdZd Zy)GarrulousFilterz)A filter which blocks garrulous messages.c                 (    |j                   t        k7  S N)levelno	GARRULOUSrF   r   s     rJ   r   zGarrulousFilter.filter  s    ~~**rl   Nrs   rt   ru   rv   r   rw   rl   rJ   r   r     s
    3+rl   r   c                       e Zd ZdZd Zy)VerySpecificFilterz5A filter which blocks sociable and taciturn messages.c                 2    |j                   t        t        fvS r   )r   SOCIABLETACITURNr   s     rJ   r   zVerySpecificFilter.filter  s    ~~h%999rl   Nr   rw   rl   rJ   r   r     s
    ?:rl   r   c                   >    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zy
)CustomLevelsAndFiltersTestz@Test various filtering possibilities with custom logging levels.^[\w.]+ -> (\w+): (\d+)$c                     t         j                  |        t        j                         D ]  \  }}t	        j
                  ||        y r   )r   rK   my_logging_levelsitemsr   r   )rF   kvs      rJ   rK   z CustomLevelsAndFiltersTest.setUp  s5    t%++-DAq  A& .rl   c                 Z    t         D ]"  }|j                  || j                                $ y r   )LEVEL_RANGEr   rq   )rF   loggerlvls      rJ   log_at_all_levelsz,CustomLevelsAndFiltersTest.log_at_all_levels  s#    CJJsD--/0 rl   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    rJ   replace_messagezWCustomLevelsAndFiltersTest.test_handler_filter_replaces_record.<locals>.replace_message  s    YYv&F'FJMrl   parentzparent.childzoriginal messagezoriginal message
znew message!
)r   	LogRecordr    r6   r7   r;   r   rD   r   flushr\   rZ   )rF   r  r  childstream_1stream_2	handler_1	handler_2s           rJ   #test_handler_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_handler_filter_replaces_record  s    	G$5$5 	 ""8,!!.1;;=;;=))(3	))(3	O,)$#

%&**,.BC**,.>?rl   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%   )rF   r   recordss     rJ   r   z^CustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter.filter   s"    BvJ'yy((rl   N)rs   rt   ru   r   r	  r   )r  s   rJ   RecordingFilterr    s    )W%6%6 )rl   r  r  r  r   )
setr   r   r    r9   r   r   r   r\   r]   )rF   r  r  r  s      @rJ   #test_logging_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_logging_filter_replaces_record  s~    %	)gnn 	)
 ""8,%*+*+ECL)rl   c                     | j                   j                  t               | j                  | j                          | j	                  g d       y )N)r   r   r   r   r   r   r   r   r   r   r   r   )r3   r9   VERBOSEr  rk   rp   s    rJ   test_logger_filterz-CustomLevelsAndFiltersTest.test_logger_filter  s=    !!'*t//0 
 	rl   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!  )r3   rB   r9   r   r  rk   r   r   rp   s    rJ   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)r3   rB   r   r   r  rk   r   r   )rF   r   specific_filtergarrfirst_liness        rJ   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)rs   rt   ru   rv   rY   rK   r  r  r  r#  r%  r0  rw   rl   rJ   r   r     s2    J 3'
1@8*"B ('rl   r   c                  `    t        j                  | i |\  }}t        j                  |       |S r   )tempfilemkstemposrM   )argskwargsfdfns       rJ   make_temp_filer9  V  s+    t.v.FBHHRLIrl   c                   f   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                         eed	                             Zy
)HandlerTestc                     t        j                         }d|_        | j                  |j                  d       d|_        | j                  |j                  d       | j	                  t
        |j                  d        y )Ngenericanothergeneric)r   HandlerrH   r\   assertRaisesNotImplementedErroremitrF   rT   s     rJ   	test_namezHandlerTest.test_name]  s\    OO+!!12-qvvt<rl   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  TestrH  z/var/run/syslogz/dev/log)GETPOSTPUTrQ  	localhostz/logr   rn   )sysplatformr9  r4  unlinkr   rB   WatchedFileHandlerdevinor\   r   handleassertFalsepathexistsrE   rM   SysLogHandlerfacilityLOG_USER
unixsocketOSErrorr@  
ValueErrorHTTPHandlerBufferingHandlershouldFlush)	rF   existingr8  rT   rW  rX  r   socknamemethods	            rJ   test_builtin_handlersz!HandlerTest.test_builtin_handlerse  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)zx
        Test that path-like objects are accepted as filename arguments to handlers.

        See Issue #27493.
        warT   rF  rK  rI  N)r9  r4  rU  r   FakePathr   FileHandlerrB   RotatingFileHandlerTimedRotatingFileHandlerrS  rT  rV  rE   r[  r\  rM   )rF   r8  pfncasesclsr5  rT   s          rJ   test_pathlike_objectsz!HandlerTest.test_pathlike_objects  s     
		"  $((3*5%%99C:F%%>>c
K
 <<..w''::S#JGIIEICT,G,AOOBGGNN2./GGIIIbM	 rl   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      )	ranger4  rU  timedeletion_timera  sleeprandomrandint)fnametries_rF   s      rJ   remove_loopz*HandlerTest.test_race.<locals>.remove_loop  sb    5\IIe$)-D& 

56>>!Q#778 "  s   .A..	A:9A:i  FT.logztest_logging-3-targetr5  TrI  rJ  z'%(asctime)s: %(levelname)s: %(message)s{Gzt?r  testingzDeleted at z, opened at )handle_timer|  r9  	threadingThreaddaemonstartr   rB   rV  r=   r@   rz  r{  r}  r   rY  	Exceptionprintr   rM   r4  r[  r\  rU  )rF   r  	del_count	log_countrL  r8  removerrT   r   r  r   s   `          rJ   	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                 H    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)z>Ensure child logging locks are not held; bpo-6721 & bpo-36533.c                   $     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wtrI  rK  r8   )super__init__r   r;   opensub_handlerrF   	__class__s    rJ   r  zJHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__  s.     "#*#8#8TGD$F rl   c                     | j                   j                          	 | j                   j                  |       | j                   j                          y # | j                   j                          w xY wr   )r  acquirerB  releaser   s     rJ   rB  zFHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit  sR      ((*/$$))&1$$,,.D$$,,.s   A A.rs   rt   ru   r  rB  __classcell__r  s   @rJ   _OurHandlerr    s    F
/rl   r  r   z*because we need at least one for this testrn    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  r0   )+fork_happened__release_locks_and_end_threadlocks_held__ready_to_forkrefed_hs   rJ   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  rH   z#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)exitcodeN)r   r?  r\   r]   r$   r   r  r8   rM   rH   assertGreater_at_fork_reinit_lock_weaksetr    rD   r9   r:   r  Eventr  r  r  r4  forkr   _exitr  r   r   wait_process)	rF   r  test_loggerr  lock_holder_threadpidr  r  r  s	         @@@rJ   r  z,HandlerTest.test_post_fork_child_no_deadlock  s   	/'// 	/ 	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)rs   rt   ru   rD  ri  rt  unittestskipIfr4  rH   r   is_emscriptenr	   requires_working_threadingrequires_resourcer  requires_forkskip_if_asan_forkskip_if_tsan_forkr  rw   rl   rJ   r;  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2rl   r;  c                       e Zd Zd Zy)	BadStreamc                     t        d      )Ndeliberate mistake)RuntimeError)rF   datas     rJ   writezBadStream.write5  s    /00rl   N)rs   rt   ru   r  rw   rl   rJ   r  r  4  s    1rl   r  c                       e Zd Zd Zy)TestStreamHandlerc                     || _         y r   )error_recordr   s     rJ   handleErrorzTestStreamHandler.handleError9  s
    "rl   N)rs   rt   ru   r  rw   rl   rJ   r  r  8  s    #rl   r  c                   (    e Zd Zej                  ZdZy)StreamWithIntNamer   N)rs   rt   ru   r   r   levelrH   rw   rl   rJ   r  r  <  s    NNEDrl   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   raiseExceptionsrY  assertIsr  r;   r   captured_stderrassertInrZ   r\   )rF   rT   r   	old_raisestderrr  s         rJ   test_error_handlingz%StreamHandlerTest.test_error_handlingA  s    ik*!!"%++		0HHQKMM!..!,%%ik2A((*f<c6??#45 +
 ',G#((*f  V__%67 + '0G# +* +* '0G#s<   AE 4D9'E 32E%E 9E>E E
E Ec                 @   t        j                         }t        j                         }|j	                  |      }| j                  |t        j                         |j	                  |      }| j                  ||       |j	                  |      }| j                  |       y)z3
        Test setting the handler's stream
        N)	r   r;   r6   r7   	setStreamr  rS  r  assertIsNone)rF   rT   r8   oldrg   s        rJ   test_stream_settingz%StreamHandlerTest.test_stream_settingW  su     !!#kk&!c3::&S!ff%S!&!rl   c                 t    t        j                  t                     }| j                  t	        |      d       y )Nz<StreamHandler 2 (NOTSET)>)r   r;   r  r\   reprrC  s     rJ   'test_can_represent_stream_with_int_namez9StreamHandlerTest.test_can_represent_stream_with_int_namee  s+    !!"3"56a">?rl   N)rs   rt   ru   r  r  r  rw   rl   rJ   r  r  @  s    0,"@rl   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestSMTPServera   
    This class implements a test SMTP server.

    :param addr: A (host, port) tuple which the server listens on.
                 You can specify a port value of zero: the server's
                 *port* attribute will hold the actual port number
                 used, which can be used in client connections.
    :param handler: A callable which will be called to process
                    incoming messages. The handler will be passed
                    the client address tuple, who the message is from,
                    a list of recipients and the message data.
    :param poll_interval: The interval, in seconds, used in the underlying
                          :func:`select` or :func:`poll` call by
                          :func:`asyncore.loop`.
    :param sockmap: A dictionary which will be used to hold
                    :class:`asyncore.dispatcher` instances used by
                    :func:`asyncore.loop`. This avoids changing the
                    :mod:`asyncore` module's global state.
    c                     t         j                  j                  | |d |d       | j                  j	                         d   | _        || _        d | _        d| _        || _	        y )NT)mapdecode_datarn   F)
r   
SMTPServerr  socketgetsocknameport_handler_thread_quitpoll_interval)rF   addrr   r  sockmaps        rJ   r  zTestSMTPServer.__init__  s\    !!$d.2 	" 	4KK++-a0	
*rl   c                 ,    | j                  ||||       y)aI  
        Delegates to the handler passed in to the server's constructor.

        Typically, this will be a test case method.
        :param peer: The client (host, port) tuple.
        :param mailfrom: The address of the sender.
        :param rcpttos: The addresses of the recipients.
        :param data: The message.
        N)r  )rF   peermailfromrcpttosr  s        rJ   process_messagezTestSMTPServer.process_message  s     	dHgt4rl   c                     t        j                  | j                  | j                  f      x| _        }d|_        |j                          y)zG
        Start the server running on a separate daemon thread.
        r  TNr  r  serve_foreverr  r  r  r  rF   ts     rJ   r  zTestSMTPServer.start  C     %++43E3E262D2D1FH 	Hq		rl   c                 |    | j                   s0t        j                  || j                  d       | j                   s/yy)a*  
        Run the :mod:`asyncore` loop until normal termination
        conditions arise.
        :param poll_interval: The interval, in seconds, used in the underlying
                              :func:`select` or :func:`poll` call by
                              :func:`asyncore.loop`.
        rn   )r  countN)r  r   loop_map)rF   r  s     rJ   r  zTestSMTPServer.serve_forever  s(     **MM-TYYa@ **rl   c                     d| _         t        j                  | j                         d| _        | j	                          t        j                  | j                  d       y)zr
        Stop the thread by closing the server instance.
        Wait for the server thread to terminate.
        TN)r  
ignore_all)r  r	   join_threadr  rM   r   	close_allr  rp   s    rJ   stopzTestSMTPServer.stop  sA    
 
$$T\\2

tyyT:rl   N)	rs   rt   ru   rv   r  r  r  r  r  rw   rl   rJ   r  r  l  s!    (+
5	A	;rl   r  c                   4     e Zd ZdZd Zd Z fdZd Z xZS )ControlMixina
  
    This mixin is used to start a server on a separate thread, and
    shut it down programmatically. Request handling is simplified - instead
    of needing to derive a suitable RequestHandler subclass, you just
    provide a callable which will be passed each received request to be
    processed.

    :param handler: A handler callable which will be called with a
                    single parameter - the request - in order to
                    process the request. This handler is called on the
                    server thread, effectively meaning that requests are
                    processed serially. While not quite web scale ;-),
                    this should be fine for testing applications.
    :param poll_interval: The polling interval in seconds.
    c                 `    d | _         || _        || _        t        j                         | _        y r   )r  r  r  r  r  ready)rF   r   r  s      rJ   r  zControlMixin.__init__  s&    *__&
rl   c                     t        j                  | j                  | j                  f      x| _        }d|_        |j                          y)zI
        Create a daemon thread to run the server, and start it.
        r  TNr  r  s     rJ   r  zControlMixin.start  r  rl   c                 `    | j                   j                          t        t        |   |       y)z^
        Run the server. Set the ready flag before entering the
        service loop.
        N)r
  r  r  r  r  )rF   r  r  s     rJ   r  zControlMixin.serve_forever  s"    
 	

lD/>rl   c                     | j                          | j                  &t        j                  | j                         d| _        | j	                          | j
                  j                          y)zK
        Tell the server thread to stop, and wait for it to do so.
        N)shutdownr  r	   r  server_closer
  rO   rp   s    rJ   r  zControlMixin.stop  sL     	<<#((6DL

rl   )	rs   rt   ru   rv   r  r  r  r  r  r  s   @rJ   r  r    s    '?	rl   r  c                   "    e Zd ZdZ	 	 ddZd Zy)TestHTTPServera  
    An HTTP server which is controllable using :class:`ControlMixin`.

    :param addr: A tuple with the IP address and port to listen on.
    :param handler: A handler callable which will be called with a
                    single parameter - the request - in order to
                    process the request.
    :param poll_interval: The polling interval in seconds.
    :param log: Pass ``True`` to enable log messages.
    Nc                      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)rF   rH   defaults      rJ   __getattr__zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__  s%    ??5)///$T**rl   c                 :    | j                   j                  |        y r   serverr  rp   s    rJ   r  zMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_request      $$T*rl   c                 ,    rt        |   |g|  y y r   )r  log_message)rF   formatr5  DelegatingHTTPRequestHandlerr  r   s      rJ   r!  zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message  s)    6,,2;59; rl   r   )rs   rt   ru   r  r  r!  r  )r  r#  r   s   @rJ   r#  r    s    +
+; ;rl   r#  )r   r   r  r  sslctx)rF   r  r   r  r   r$  r#  s       ` @rJ   r  zTestHTTPServer.__init__  s>    	;+A 	; 	D$(DEdG];rl   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_socketra  rS  r  r  )rF   sockr  es       rJ   get_requestzTestHTTPServer.get_request  sv    	++-JD${{{{..t.F
 Tz	  	JJ2Q67	s   AA 	A=#A88A=)r  FN)rs   rt   ru   rv   r  r+  rw   rl   rJ   r  r    s    	 58#'&	rl   r  c                   2     e Zd ZdZdZ	 	 ddZ fdZ xZS )TestTCPServera  
    A TCP server which is controllable using :class:`ControlMixin`.

    :param addr: A tuple with the IP address and port to listen on.
    :param handler: A handler callable which will be called with a single
                    parameter - the request - in order to process the request.
    :param poll_interval: The polling interval in seconds.
    :bind_and_activate: If True (the default), binds the server and starts it
                        listening. If False, you need to call
                        :meth:`server_bind` and :meth:`server_activate` at
                        some later time before calling :meth:`start`, so that
                        the server will set up the socket and listen on it.
    Tc                      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  rp   s    rJ   rY  zBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handle&  r  rl   N)rs   rt   ru   rY  rw   rl   rJ   DelegatingTCPRequestHandlerr0  $  s    +rl   r2  )r   r   r  r  )rF   r  r   r  bind_and_activater2  s         rJ   r  zTestTCPServer.__init__"  s;    	+*> 	+ 	##D$0K$5	7dG];rl   c                 n    t         t        |           | j                  j	                         d   | _        y Nrn   )r  r-  server_bindr  r  r  r  s    rJ   r6  zTestTCPServer.server_bind,  )    mT.0KK++-a0	rl   r  T)rs   rt   ru   rv   allow_reuse_addressr  r6  r  r  s   @rJ   r-  r-    s%     47#'<1 1rl   r-  c                   8     e Zd ZdZ	 	 ddZ fdZ fdZ xZS )TestUDPServera0  
    A UDP server which is controllable using :class:`ControlMixin`.

    :param addr: A tuple with the IP address and port to listen on.
    :param handler: A handler callable which will be called with a
                    single parameter - the request - in order to
                    process the request.
    :param poll_interval: The polling interval for shutdown requests,
                          in seconds.
    :bind_and_activate: If True (the default), binds the server and
                        starts it listening. If False, you need to
                        call :meth:`server_bind` and
                        :meth:`server_activate` at some later time
                        before calling :meth:`start`, so that the server will
                        set up the socket and listen on it.
    c                      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  rp   s    rJ   rY  zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handleE  r  rl   c                     | j                   j                         }|r	 t        |           y y # t        $ r | j
                  j                  s Y y w xY wr   )wfilerZ   r  finishra  r  _closed)rF   r  DelegatingUDPRequestHandlerr  s     rJ   rB  zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finishH  sV    zz**,"94GI  # "#{{22!  3"s   /  AA)rs   rt   ru   rY  rB  r  )r  rD  s   @rJ   rD  r>  C  s    +" "rl   rD  F)r   r   r  r  rC  )rF   r  r   r  r3  rD  s        @rJ   r  zTestUDPServer.__init__A  sE    	"*@ 	" 	##D$$?$5	7 	dG];rl   c                 n    t         t        |           | j                  j	                         d   | _        y r5  )r  r;  r6  r  r  r  r  s    rJ   r6  zTestUDPServer.server_bindW  r7  rl   c                 8    t         t        |           d| _        y )NT)r  r;  r  rC  r  s    rJ   r  zTestUDPServer.server_close[  s    mT/1rl   r8  )rs   rt   ru   rv   r  r6  r  r  r  s   @rJ   r;  r;  0  s$      58#',1 rl   r;  AF_UNIXc                   $    e Zd Zej                  Zy)TestUnixStreamServerNrs   rt   ru   r  rG  address_familyrw   rl   rJ   rI  rI  `      rl   rI  c                   $    e Zd Zej                  Zy)TestUnixDatagramServerNrJ  rw   rl   rJ   rN  rN  c  rL  rl   rN  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 ✓rn   z
Subject: Log
u   

Hello ✓)r  r   HOSTr  r  r  r   rB   SMTPHandlerTIMEOUTr\   toaddrsmessagesr   r  r  handledrY  r  r  rE   is_setr]   r  endswithrM   )
rF   r  r  r  rT   r   r  r  r  r  s
             rJ   
test_basiczSMTPHandlerTest.test_basicn  su   !3!3Q 79M9Mu ')""FKK0((tUE15 ) ?UG,!!5."9: (	$,,'++-.T]]+Q/(,a(8%h4(5'*($/&89:		rl   c                 n    | j                   j                  |       | j                  j                          y r   )r\  appendr]  r  )rF   r5  s     rJ   r  zSMTPHandlerTest.process_message  s$    T"rl   N)rs   rt   ru   r   LONG_TIMEOUTrZ  r`  r  rw   rl   rJ   rP  rP  h  s     ""G0rl   rP  c                   `    e Zd ZdZdZd Zd Zd Zd Zd Z	 e
j                         d        Zy	)
MemoryHandlerTestzTests for the MemoryHandler.r   c                 J   t         j                  |        t        j                  j	                  dt        j
                  | j                        | _        t        j                  d      | _	        d| j                  _
        | j                  j                  | j                         y )N
   memr   )r   rK   r   rB   MemoryHandlerr   r<   mem_hdlrr    
mem_logger	propagaterD   rp   s    rJ   rK   zMemoryHandlerTest.setUp  sj    t((66r7??7;~~G!++E2$%!""4==1rl   c                 b    | j                   j                          t        j                  |        y r   )rj  rM   r   rU   rp   s    rJ   rU   zMemoryHandlerTest.tearDown       $rl   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)r:   r   r   r   )r   r   )ry     	   rg  r:   )rk  r   rq   rk   r   r   rz  str)rF   linesnis       rJ   
test_flushzMemoryHandlerTest.test_flush  sT    	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I8H1gs1v.8H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)zO
        Test that the flush-on-close configuration works as expected.
        rp  rq  rg  FN)rk  r   rq   rk   r   rN   rj  rM   r   rB   ri  r   r<   rD   rF   ru  s     rJ   test_flush_on_closez%MemoryHandlerTest.test_flush_on_close  sa    	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$rl   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)zi
        Test that the flush-on-close configuration is respected by the
        shutdown method.
        handlerListrp  rq  rg  FN)rk  r   rq   rk   r   r   r  weakrefrefrj  rB   ri  r   r<   rD   rz  s     rJ   test_shutdown_flush_on_closez.MemoryHandlerTest.test_shutdown_flush_on_close  s]   
 	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$rl   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   )rj  threads)rF   rj  s     rJ   r  zcMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.__init__  s     (!rl   c                 :    | j                   j                  d        y r   )rj  	setTargetrp   s    rJ   removeTargetzgMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.removeTarget  s    ''-rl   c                     t        j                  | j                        }| j                  j	                  |       |j                          y )N)r  )r  r  r  r  rb  r  )rF   r  r   s      rJ   rY  zaMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handle  s3    "))1B1BC##F+rl   N)rs   rt   ru   r  r  rY  rw   rl   rJ   MockRaceConditionHandlerr    s    ".rl   r  rg  r  znot flushedflushed)rj  r  rz  r{  r}  rk  r   r   r  r	   r  )rF   r  r  r  r   s        rJ   &test_race_between_set_target_and_flushz8MemoryHandlerTest.test_race_between_set_target_and_flush  s    	 	 *$--8		5MM##F+2Y

5!$$]3''	2 
 !.. ,,V4 )&.. ,,V4 )s   A6B< <(C$N)rs   rt   ru   rv   rY   rK   rU   rx  r{  r  r	   r  r  rw   rl   rJ   re  re    sF    & 32 %8%<%: 10025 35rl   re  c                       e Zd ZdZd Zy)ExceptionFormatterzA special exception formatter.c                 &    d|d   j                   z  S )Nz
Got a [%s]r   )rs   )rF   eis     rJ   formatExceptionz"ExceptionFormatter.formatException  s    benn,,rl   N)rs   rt   ru   rv   r  rw   rl   rJ   r  r    s
    (-rl   r  c                 N    | j                          t        j                  |       y r   rM   r4  remove)rT   r8  s     rJ   closeFileHandlerr    s    GGIIIbMrl   c                   8   e Zd 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%)&ConfigFileTestz5Reading logging config from a .ini-style config file.^(\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 )NrK  rI  )r6   r7   textwrapdedentr   config
fileConfig)rF   confr6  files       rJ   apply_configzConfigFileTest.apply_config3  s5    {{8??401!!$CCFCrl   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   rq   r   rk   rF   outputr  s      rJ   test_config0_okzConfigFileTest.test_config0_ok7  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  r6   r7   r  r  r  configparserConfigParser	read_filer   r  r  r    r   rq   r   rk   )rF   r  r  cpr  s        rJ   test_config0_using_cp_okz'ConfigFileTest.test_config0_using_cp_okF  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   rq   r   rk   rF   r  r  r  s       rJ   test_config1_okzConfigFileTest.test_config1_okX      $$&&f%&&'89FKK))+,LL**,-!!#  " 
 !!"% '&&   BB))B2c                 Z    | j                  t        | j                  | j                         y r   r@  r  r  config2rp   s    rJ   test_config2_failurez#ConfigFileTest.test_config2_failureg      )T%6%6Erl   c                 Z    | j                  t        | j                  | j                         y r   r@  r  r  config3rp   s    rJ   test_config3_failurez#ConfigFileTest.test_config3_failurek  r  rl   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  	exceptionrS  stdoutseekr\   rZ   rk   r  s      rJ   test_config4_okzConfigFileTest.test_config4_oko  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  config5rp   s    rJ   test_config5_okzConfigFileTest.test_config5_ok~      DLL1rl   c                 <    | j                  | j                         y r  )r  config6rp   s    rJ   test_config6_okzConfigFileTest.test_config6_ok  r  rl   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  )r~   r   r  compiler.lexer)r   r   )r   r   )r   r   )r   r   )r   r  r  config1ar   r    r   rq   r   criticalrk   config7rZ  r   rF   r  r  
hyphenateds       rJ   test_config7_okzConfigFileTest.test_config7_ok  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-ru  \z\\)r2  r   )check_no_resource_warningr9  r4  rH   replaceconfig8r"  r  r   rootrB   r   r  )rF   r8  r  r   s       rJ   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  rB   	formatterr"  r   r\   )rF   r  results      rJ   test_config9_okzConfigFileTest.test_config9_ok  s    $,,'LL))!,66	!!'"7"7"HI!78!!'"7"7=9#; <!67rl   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    rZ  r   rE   rF   r  s     rJ   test_logger_disablingz$ConfigFileTest.test_logger_disabling  s    $++,""#9:)$++,($++eL)rl   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  r\   r   r    rB   rH   )rF   test_configs     rJ   test_config_set_handler_namesz,ConfigFileTest.test_config_set_handler_names  sC    ( 	+&**,55a8==wGrl   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
            )	r6   r7   r  r  r@  r  r   r  r  )rF   r  r  s      rJ   'test_exception_if_confg_file_is_invalidz6ConfigFileTest.test_exception_if_confg_file_is_invalid  s>    . {{8??;78,(A(A4Hrl   c                     t        j                  dd      \  }}t        j                  |       | j	                  t
        t        j                  j                  |       t        j                  |       y )Ntest_empty_.inir   suffix)
r2  r3  r4  rM   r@  r  r   r  r  r  )rF   r7  r8  s      rJ   %test_exception_if_confg_file_is_emptyz4ConfigFileTest.test_exception_if_confg_file_is_empty  sJ    !!vFB
,(A(A2F
		"rl   c                 b    | j                  t        t        j                  j                  d       y )Nfilenotfound)r@  FileNotFoundErrorr   r  r  rp   s    rJ   ,test_exception_if_config_file_does_not_existz;ConfigFileTest.test_exception_if_config_file_does_not_exist  s    +W^^-F-FWrl   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)z.bpo-33802 defaults should not get interpolatedat  
            [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  asciirI  rn   Fr=  z5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)r"  datefmtclass)versionr  
formatters)rK  defaultsN)r  r  stripr2  r3  r4  r  encoderM   r   r  r  dictrU  )rF   inir7  r8  s       rJ   !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)&rs   rt   ru   rv   r
   r  rY   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  rw   rl   rJ   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*rl   r  c                   6    e Zd ZdZeZdZd Zd Zd Z	d Z
d Zy)	SocketHandlerTestzTest for SocketHandler objects.rR  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)ztSet up a TCP server to receive log messages, and a SocketHandler
        pointing to that server's address and port.N{Gz?rR  r   r   )r   rK   r  	sock_hdlrserver_exceptionserver_classaddresshandle_socketr  ra  r
  r  r   rB   SocketHandler
isinstanceserver_addressra   r  
log_outputr3   rN   rD   r  	Semaphorer]  rF   r  r*  hclss       rJ   rK   zSocketHandlerTest.setUpF  s,    	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<+E77E<c                 F   	 | j                   r?| j                  j                  | j                          | j                   j                          | j                  r| j                  j                          t        j                  |        y# t        j                  |        w xY w)zShutdown the TCP server.N)r  r3   rN   rM   r  r  r   rU   rp   s    rJ   rU   zSocketHandlerTest.tearDown`  sj    	$~~  ..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                          )Nry  >Lr   
)
connectionrecvr]   structunpackpickleloadsr   r   r!  r  r]  r  )rF   requestconnchunkslenobjr   s          rJ   r  zSocketHandlerTest.handle_socketk  s    !!IIaLE5zA~==u-a0DIIdOEe*t#		$U*; << e*t#,,u%C**3/FOOvzzD00OLL  " rl   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   r]  r  r   r\   r!  r  s     rJ   test_outputzSocketHandlerTest.test_outputz  sy      MM$//0""5)VV.9rl   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, eitherrR  zNor this)r  r9  r  
retryStartr  r  r  r3   r  r   r{  r  	retryTimer}  )rF   nows     rJ   test_noserverzSocketHandlerTest.test_noserver  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)rs   rt   ru   rv   r-  r  r  rK   rU   r  r:  r?  rw   rl   rJ   r  r  =  s*     * LG.4	$#	:+rl   r  zUnix sockets requiredc                   ,    e Zd ZdZ eed      reZd Zy)UnixSocketHandlerTestz)Test for SocketHandler with unix sockets.rG  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   create_unix_domain_namer  r   r   rU  r  rK   rp   s    rJ   rK   zUnixSocketHandlerTest.setUp  8    $<<>	(($,,7%rl   N)	rs   rt   ru   rv   hasattrr  rI  r  rK   rw   rl   rJ   rA  rA    s     4vy!+&rl   rA  c                   0    e Zd ZdZeZdZd Zd Zd Z	d Z
y)DatagramHandlerTestzTest for DatagramHandler.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                         | _        y# t        $ r}|| _        Y d}~yd}~ww xY w)zvSet up a UDP server to receive log messages, and a DatagramHandler
        pointing to that server's address and port.Nr  rR  r   r   )r   rK   r  r  r  r  r  handle_datagramr  ra  r
  r  r   rB   DatagramHandlerr  r   ra   r  r!  r3   rN   rD   r  r  r]  r#  s       rJ   rK   zDatagramHandlerTest.setUp  s(    	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;*E66E;c                 F   	 | j                   r| j                   j                          | j                  r?| j                  j	                  | j                         | j                  j                          t        j                  |        y# t        j                  |        w xY w)zShutdown the UDP server.N)r  r  r  r3   rN   rM   r   rU   rp   s    rJ   rU   zDatagramHandlerTest.tearDown  sj    	${{  "~~  ..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  r]  r  )rF   r0  r3  rN  r4  r   s         rJ   rI  z#DatagramHandlerTest.handle_datagram  sk    {{4#D	
+ll6"&&s+6::,,rl   c                    | j                   r| j                  | j                          t        j                  d      }|j	                  d       | j
                  j                          | j
                  j                          |j	                  d       | j
                  j                          | j                  | j                  d       y )Nudpr   r7  r8  )
r  r9  r   r    r   r]  r  rO   r\   r!  r  s     rJ   r:  zDatagramHandlerTest.test_output  s      MM$//0""5)VV.9rl   N)rs   rt   ru   rv   r;  r  r  rK   rU   rI  r:  rw   rl   rJ   rG  rG    s%     $ LG)4	$
:rl   rG  c                   ,    e Zd ZdZ eed      reZd Zy)UnixDatagramHandlerTestz,Test for DatagramHandler using Unix sockets.rG  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   rC  r  r   r   rU  rG  rK   rp   s    rJ   rK   zUnixDatagramHandlerTest.setUp  s8    $<<>	(($,,7!!$'rl   N	rs   rt   ru   rv   rE  r  rN  r  rK   rw   rl   rJ   rR  rR    s     7vy!-(rl   rR  c                   6    e Zd ZdZeZdZd Zd Zd Z	d Z
d Zy)	SysLogHandlerTestz!Test for SysLogHandler using UDP.r  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)ztSet up a UDP server to receive log messages, and a SysLogHandler
        pointing to that server's address and port.Nr  r   rl   )r   rK   r  sl_hdlrr  r  r  rI  r  ra  r
  r  r   rB   r]  r  r   ra   r  r!  r3   rN   rD   r  r  r]  r#  s       rJ   rK   zSysLogHandlerTest.setUp   s4    	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7FFc                 F   	 | j                   r| j                   j                          | j                  r?| j                  j	                  | j                         | j                  j                          t        j                  |        y# t        j                  |        w xY w)zShutdown the server.N)r  r  rX  r3   rN   rM   r   rU   rp   s    rJ   rU   zSysLogHandlerTest.tearDown  sj    	${{  "||  ..t||<""$d#Hd#r&  c                 Z    |j                   | _        | j                  j                          y r   )rN  r!  r]  r  )rF   r0  s     rJ   rI  z!SysLogHandlerTest.handle_datagram%  s    !..rl   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  r9  r   r    r   r]  r  r   rc  r\   r!  rO   rX  
append_nulidentr  s     rJ   r:  zSysLogHandlerTest.test_output)  s     MM$//0""5)Y'../*@A"'Y'../*<=&Y'../*GHrl   c                 B   t        j                  d      }| j                  j                          | j                  j                          |j                  d       | j                  j                  t        j                         | j                  | j                  d       y )Nr\  r]  r^  )r   r    rX  rM   r]  rO   r   r  r   rc  r\   r!  r  s     rJ   test_udp_reconnectionz'SysLogHandlerTest.test_udp_reconnection<  sk    ""5)Y'../*@Arl   N)rs   rt   ru   rv   r;  r  r  rK   rU   rI  r:  rb  rw   rl   rJ   rV  rV    s,     , LG)4	$I&Brl   rV  c                   ,    e Zd ZdZ eed      reZd Zy)UnixSysLogHandlerTestz)Test for SysLogHandler with Unix sockets.rG  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   rC  r  r   r   rU  rV  rK   rp   s    rJ   rK   zUnixSysLogHandlerTest.setUpL  rD  rl   NrT  rw   rl   rJ   rd  rd  D  s     4vy!-&rl   rd  z$IPv6 support required for this test.c                   4     e Zd ZdZeZdZ fdZ fdZ xZ	S )IPv6SysLogHandlerTestz&Test for SysLogHandler with IPv6 host.)z::1r   c                 h    t         j                  | j                  _        t        t
        |           y r   )r  AF_INET6r  rK  r  rg  rK   r  s    rJ   rK   zIPv6SysLogHandlerTest.setUp[  s#    +1??(#T02rl   c                 h    t         j                  | j                  _        t        t
        |           y r   )r  AF_INETr  rK  r  rg  rU   r  s    rJ   rU   zIPv6SysLogHandlerTest.tearDown_  s#    +1>>(#T35rl   )
rs   rt   ru   rv   r;  r  r  rK   rU   r  r  s   @rJ   rg  rg  R  s!     1 LG36 6rl   rg  c                   "    e Zd ZdZd Zd Zd Zy)HTTPHandlerTestzTest for HTTPHandler.c                 `    t         j                  |        t        j                         | _        y)ztSet up an HTTP server to receive log messages, and a HTTPHandler
        pointing to that server's address and port.N)r   rK   r  r  r]  rp   s    rJ   rK   zHTTPHandlerTest.setUph  s     	t (rl   c                 |   |j                   | _         t        |j                        | _        | j                   dk(  r9	 t	        |j
                  d         }|j                  j                  |      | _        |j                  d       |j                          | j                  j                          y #  d | _        Y GxY w)NrP  zContent-Length   )commandr   r[  log_dataintheadersrfilerc   	post_datasend_responseend_headersr]  r  )rF   r0  rlens      rJ   handle_requestzHTTPHandlerTest.handle_requestn  s     .<<6!&7??+;<=!(!3!3D!9 	c"	&!%s   8B0 0	B;c                 N   t        j                  d      }| j                  }|j                  | j                  j                  d          dD ]  }d}|r	 dd l}t        j                  j                  t              }t        j                  j                  |d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  certdatazkeycert.pem)cafiler  )r$  zlocalhost:%dz/frob)foobar)securecontextcredentials)rO  rP  r]  rO  rI  rH   funcNamer:  r  )'r   r    r3   rN   rB   sslr4  r[  dirname__file__r   
SSLContextPROTOCOL_TLS_SERVERload_cert_chaincreate_default_contextImportErrorr  rz  r  r  r
  r  server_portrc  h_hdlrrr  rD   rh  r]  rO   r   r\   rq  r   queryrv  decoder  rM   )rF   r  r3   r  r  r  herelocalhost_certr$  r  r  hostsecure_clientrh  r  ds                   rJ   r:  zHTTPHandlerTest.test_output{  s   ""6*&&!!$"2"2";";A">?#F#D
P 77??84D%'WW\\$
M%RN ^^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;;/)%+"""$S!!!#  !3!3W=  v6U? !4!45A !6!6w!?@A  6VH5  :@  5C51 *  KK**4;;7KKa $
 # "!F"s   LL$#L$N)rs   rt   ru   rv   rK   rz  r:  rw   rl   rJ   rm  rm  c  s      )5 rl   rm  c                   (    e Zd ZdZd Zd Zd Zd Zy)
MemoryTestz*Test memory persistence of logger objects.c                 <    t         j                  |        i | _        y)z8Create a dict to remember potentially destroyed objects.N)r   rK   
_survivorsrp   s    rJ   rK   zMemoryTest.setUp  s    trl   c                     |D ]:  }t        |      t        |      f}t        j                  |      | j                  |<   < y)zKWatch the given objects for survival, by creating weakrefs to
        them.N)r  r  r  r  r  )rF   r5  r4  keys       rJ   _watch_for_survivalzMemoryTest._watch_for_survival  s7     CS'49$C#*;;s#3DOOC  rl   c                    t        j                          g }| j                  j                         D ]!  \  \  }}} |       |j	                  |       # |r/| j                  dt        |      dj                  |      fz         yy)z;Assert that all objects watched for survival have survived.Nz;%d objects should have survived but have been destroyed: %sz, )gccollectr  r   rb  r`   r]   r   )rF   deadid_repr_r  s        rJ   _assertTruesurvivalzMemoryTest._assertTruesurvival  s{     	

!%!6!6!8LS%#u}E" "9 II .14TDIIdO0LM N rl   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  r:   r   )r  r:   r   )r3   r9   r   r   r    r  r:   r   rq   rk   r  )rF   r  r  s      rJ   test_persistent_loggersz"MemoryTest.test_persistent_loggers  s     	!!',,/&  %W]]#t0023		$##%&!
 	   "&		$##%&!!
 	rl   N)rs   rt   ru   rv   rK   r  r  r  rw   rl   rJ   r  r    s    4
4
Nrl   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rI  r  )r   r    r9  rn  rD   r   rN   rM   r  r\   rc   rstripr4  r[  isfiler  )rF   r   r8  r  r   r   s         rJ   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	getwriterrK  r6   BytesIOr;   rD   r   rN   rM   rZ   r\   )rF   r   messagewriter_classr8   writerr   rj   s           rJ   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)rs   rt   ru   r  r  rw   rl   rJ   r  r    s    2Lrl   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UserWarningr6   r7   r;   r    rD   warnrN   rZ   rM   r  findshowwarningr\   )rF   r8   rT   r  rj   a_files         rJ   test_warningszWarningsTest.test_warnings	  s    $$&##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) '&&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  rn   r   )r  r  r   r  r   r    r\   rB   r  r  r]   assertIsInstanceNullHandlerr  s     rJ   test_warnings_no_handlersz&WarningsTest.test_warnings_no_handlers0	  s    $$&##D)OOG33U; &&}5FV__b1  [*bIS115!!&//!"4g6I6IJ '&&s   CC33C<N)rs   rt   ru   r  r  rw   rl   rJ   r  r  	  s    F0Krl   r  c                 .    t        j                  | |      S r   )r   r=   )r"  r	  s     rJ   
formatFuncr  >	  s    VW--rl   c                       e Zd ZddZy)myCustomFormatterNc                      y r   rw   )rF   fmtr	  s      rJ   r  zmyCustomFormatter.__init__B	      rl   r   )rs   rt   ru   r  rw   rl   rJ   r  r  A	  s    rl   r  c                  *    t        j                         S r   )r   r;   rw   rl   rJ   handlerFuncr  E	  s      ""rl   c                       e Zd Zy)CustomHandlerNrs   rt   ru   rw   rl   rJ   r  r  H	      rl   r  c                       e Zd Zy)CustomListenerNr  rw   rl   rJ   r  r  K	  r  rl   r  c                       e Zd Zy)CustomQueueNr  rw   rl   rJ   r  r  N	  r  rl   r  c                       e Zd ZddZd Zy)CustomQueueProtocolc                 8    t        j                  |      | _         y r   queueQueue)rF   maxsizes     rJ   r  zCustomQueueProtocol.__init__R	  s    [[)
rl   c                 F    t         j                  | d      }t        ||      S )Nr  )object__getattribute__r/   )rF   	attributer  s      rJ   r  zCustomQueueProtocol.__getattr__U	  s!    ''g6ui((rl   N)r   )rs   rt   ru   r  r  rw   rl   rJ   r  r  Q	  s    *)rl   r  c                       e Zd Zd Zy)CustomQueueFakeProtocolc                      y r   rw   rp   s    rJ   
put_nowaitz"CustomQueueFakeProtocol.put_nowaita	  r  rl   Nrs   rt   ru   r  rw   rl   rJ   r  r  Y	  s    rl   r  c                       e Zd ZdZy)CustomQueueWrongProtocolNr  rw   rl   rJ   r  r  d	  s    Jrl   r  c                       e Zd Zd Zd Zy)MinimalQueueProtocolc                      y r   rw   )rF   xs     rJ   r  zMinimalQueueProtocol.put_nowaith	  s    Trl   c                      y r   rw   rp   s    rJ   getzMinimalQueueProtocol.geti	  s    4rl   N)rs   rt   ru   r  r  rw   rl   rJ   r  r  g	  s    !rl   r  c                  *    t        j                         S r   r  rw   rl   rJ   
queueMakerr  k	  s    ;;=rl   c                     fd}|S )Nc                 F    |j                  d       t        | g|i |S )Nrespect_handler_level)
setdefaultr  )r  rB   r6  r  s      rJ   funczlistenerMaker.<locals>.funco	  s*    13HIe9h9&99rl   rw   )arg1arg2r  r  s     ` rJ   listenerMakerr  n	  s    : Krl   c            
       
   e Zd 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d0Zd1d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
d2d3d4d5iddgddZddd6d7d8id9idddd	d
diddgddZ  G d: d;e!jD                        Z#dd<e#d=d>d?d@dAidBiddd<d	d
diddgddZ$ddddCdDdEdFddGdHdIdJddKgdLdMidNZ%ddOdPdQdRidddOdSdDdEdOdTddUdVdJddWgdLdMidXZ&dde dz   dd"dYidddd	d
didZddgdLdMidXZ'dde dz   dd"d[idddd	d
didZddgdLdMidXZ(dde d\z   dd"d[idddd	d
didZddgdLdMidXZ)ddedd"dYidddd	d
didZddgdLdMidXZ*dded]d7d^id_idddd	d
didZddgdLdMidXZ+dd`daidbdcgdddeddfgddgZ,dh Z-di Z.dj Z/efdkZ0dl Z1dm Z2dn Z3do Z4dp Z5dq Z6dr Z7ds Z8dt Z9du Z:dv Z;dw Z<dx Z=dy Z>dz Z?d{ Z@d| ZAd} ZBd~ ZCd ZDd ZEddZF eGj                         d        ZI eGj                         d        ZJ eGj                         d        ZKd ZLd ZMd ZNd ZOd ZPd ZQd ZRd ZSd ZTd ZUd ZVd ZWd ZXd ZYd ZZ e[j                          eGj                         d               Z^d Z_ e[j                          eGj                          e`d      d                      Za e`d      d        Zbec eGj                          edj                  eGj                  d      d                      Zgec eGj                          edj                  eGj                  d      d                      Zheid        Zj eGj                         d        Zkd Zld Zmd Zny)ConfigDictTestz)Reading logging config from a dictionary.r  rn   form1r"  z%(levelname)s ++ %(message)sr  logging.StreamHandlerr   zext://sys.stdout)r
  r  r  r8   r   r  rB   )r  r  rB   r  r  r:   r  )r  r  rB   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  r8   r   r  F)compilerr  )r  r  r  rB   r  r  Tr   )r  incrementalrB   r  filt1rH   )r
  r  r  r8   filtersr  r  )r  r  r  rB   r  r  zcfg://true_formatterszcfg://handler_configs[hand1])r  true_formattershandler_configsr  rB   r  r  )r  r  r  rB   r  r  r   r  !
)r  
terminator)r
  r  r  r8   r   z%(message)s ++ %(customfield)sr  defaultvalue)r"  r  c                   "     e Zd ZdZ fdZ xZS )ConfigDictTest.CustomFormatterr   c                 "    t         |   |      S r   )r  r"  rF   r   r  s     rJ   r"  z%ConfigDictTest.CustomFormatter.format  s    7>&))rl   )rs   rt   ru   custom_propertyr"  r  r  s   @rJ   CustomFormatterr    s    	* 	*rl   r  custom{%Y-%m-%d %H:%M:%S	{message}r  value)r	  styler	  r"  r   )r
  r  zlogging.handlers.MemoryHandler   consoler   )r
  capacityr  r  
flushLevel)r$  	bufferingmymoduler'  true)r  rB   rl  )r  rB   r  mySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)s$)r"  r"  )r
  r  r  
fileGlobal)r
  r%  r  r  r  )r,  bufferGlobalr-  )r  r  rB   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.FileHandlerlogging.handlers.QueueHandlerh1)r
  rB   )r3  ahr4  r  rB   r  c                 B    t         j                  j                  |       y r   )r   r  
dictConfig)rF   r  s     rJ   r  zConfigDictTest.apply_config  s    !!$'rl   c                 R    t        j                  |      }| j                  ||       y r   )r   getHandlerByNamer  )rF   rH   rs  rT   s       rJ   check_handlerzConfigDictTest.check_handler  s"    $$T*a%rl   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   r;   r    r   rq   r   rk   r  s      rJ   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       rJ   r  zConfigDictTest.test_config1_ok  r  r  c                 Z    | j                  t        | j                  | j                         y r   r  rp   s    rJ   r  z#ConfigDictTest.test_config2_failure  r  rl   c                 Z    | j                  t        | j                  | j                         y r   )r@  r  r  config2arp   s    rJ   test_config2a_failurez$ConfigDictTest.test_config2a_failure      )T%6%6Frl   c                 Z    | j                  t        | j                  | j                         y r   )r@  r  r  config2brp   s    rJ   test_config2b_failurez$ConfigDictTest.test_config2b_failure  rA  rl   c                 Z    | j                  t        | j                  | j                         y r   r  rp   s    rJ   r  z#ConfigDictTest.test_config3_failure
  r  rl   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   r;   r  r  rS  r  r  r\   rZ   rk   rF   r  s     rJ   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  rS  r  r  r\   rZ   rk   rG  s     rJ   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  rp   s    rJ   r  zConfigDictTest.test_config5_ok-  s'    DLL17M2rl   c                 Z    | j                  t        | j                  | j                         y r   )r@  r  r  r  rp   s    rJ   test_config6_failurez#ConfigDictTest.test_config6_failure1  s    )T%6%6Erl   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   rq   r   rk   r  r:  r;   rE   r   r  s      rJ   r  zConfigDictTest.test_config7_ok4  sv   $$&&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  )rO  rP  r   r   r   r   )r   r  r  r  r   r    r   rq   r   rk   r  r:  r;   rZ  r   r  s      rJ   test_config_8_okzConfigDictTest.test_config_8_okR  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   r;   r    r   rq   r   r  rk   config8arZ  r   r  s       rJ   test_config_8a_okz ConfigDictTest.test_config_8a_okt  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  rO  )r   r  r  r  r:  r   r;   r    r   rq   rk   config9aconfig9br  s      rJ   test_config_9_okzConfigDictTest.test_config_9_ok  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   rP  r  )r   r  r  config10r:  r   r;   r    r   rq   r   rk   r  s      rJ   test_config_10_okz ConfigDictTest.test_config_10_ok  s    $$&&dmm,w(=(=>&&'89FNN4,,./&&z2FNN4,,./&&'78FNN4,,./&&'@AFLL**,-!! #  "  '&&s   D!D??Ec                 :    | j                  | j                         y r   )r  config11rp   s    rJ   test_config11_okzConfigDictTest.test_config11_ok  s    T]]+rl   c                 Z    | j                  t        | j                  | j                         y r   )r@  r  r  config12rp   s    rJ   test_config12_failurez$ConfigDictTest.test_config12_failure      )T%6%6Frl   c                 Z    | j                  t        | j                  | j                         y r   )r@  r  r  config13rp   s    rJ   test_config13_failurez$ConfigDictTest.test_config13_failure  rf  rl   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$   r\   r  r  r   rE   rZ   r_  )rF   r  rT   s      rJ   test_config14_okzConfigDictTest.test_config14_ok  s    $$&&dmm,!!'*AQUUE*Q\\51OOM*OOFOO-667GHI '&&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  rn   r  r1  rI  )r
  filenamerK  rB   r5  r   )r  r9  r  r   r  rB   r   r  )rF   r8  r  r   s       rJ   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   r\   )rF   rT   r  s      rJ   test_config16_okzConfigDictTest.test_config16_ok  s    $--(g& ##G$9$9M:%< =!78 ##G$9$9G% !89rl   c                     | j                  | j                         t        j                  d   }| j	                  |j
                  j                  d       y )Nr  r!  )r  config17r   r$   r\   r  r  rC  s     rJ   test_config17_okzConfigDictTest.test_config17_ok  s>    $--(g&44g>rl   c                     | j                  | j                         t        j                  d      j                  d   }| j                  |j                  t        j                         y )Nr(  r   )r  config18r   r    rB   r\   r&  r   rF   r   s     rJ   test_config18_okzConfigDictTest.test_config18_ok  sI    $--(##J/88;++W]];rl   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)NrI  r   g       @rR  r(  )r  r   r  listenr  r
  r  r  rO   r  rk  SOCK_STREAM
settimeoutconnectr,  rM  r]   sendrM   stopListeningr	   r  )rF   textverifyr  r  r)  r3  rj   	sentsofarleftsents              rJ   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r]  )r   r  r  jsondumpsr^  r:  r   r;   r    r   rq   r   rk   r  s      rJ   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  r  r  r  r  r  r   r    r   rq   r   rk   r  s      rJ   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   rw   stuffs    rJ   verify_failz6ConfigDictTest.test_listen_verify.<locals>.verify_failN  s    rl   c                     | d d d   S )NrM  rw   r  s    rJ   verify_reversez9ConfigDictTest.test_listen_verify.<locals>.verify_reverseQ  s    2;rl   r  r  r  r  r   )re   rO  rP  rM  rR  rS  )r   r    r  r  r  r  r   r  r  r   rq   r   rk   )rF   r  r  r  to_sendr  s         rJ   test_listen_verifyz!ConfigDictTest.test_listen_verifyK  s0   		 ""#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@  rb  r  
bad_formatrp   s    rJ   test_bad_formatzConfigDictTest.test_bad_format  s    *d&7&7Irl   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%   deepcopyr  r  r   r    rB   r  r  r?  r  _styleStringTemplateStyler\   sortedgetHandlerNamesrF   r  r   s      rJ   !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	9rl   c                     | j                  | j                         t        j                  d      j                  d   }| j                  |j                  t               y Nr/  r   )r  custom_formatter_class_validater   r    rB   r  r  r  rz  s     rJ   )test_custom_formatter_class_with_validatez8ConfigDictTest.test_custom_formatter_class_with_validate  sJ    $>>?##$EFOOPQRg//1CDrl   c                     | j                  | j                         t        j                  d      j                  d   }| j                  |j                  t               y r  )r   custom_formatter_class_validate2r   r    rB   r  r  r  rz  s     rJ   *test_custom_formatter_class_with_validate2z9ConfigDictTest.test_custom_formatter_class_with_validate2  sJ    $??@##$EFOOPQRg//1CDrl   c                     | j                   j                         }d|d   d   d<   | j                  |       t        j                  d      j
                  d   }| j                  |j                  t               y )Nr+  r  r  r"  r/  r   )	r  r%   r  r   r    rB   r  r  r  r  s      rJ   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Drl   c                 Z    | j                  t        | j                  | j                         y r   )r@  rb  r   custom_formatter_class_validate3rp   s    rJ   *test_custom_formatter_class_with_validate3z9ConfigDictTest.test_custom_formatter_class_with_validate3  s     *d&7&79^9^_rl   c                 Z    | j                  t        | j                  | j                         y r   )r@  rb  r  custom_formatter_with_functionrp   s    rJ   ,test_custom_formatter_function_with_validatez;ConfigDictTest.test_custom_formatter_function_with_validate       *d&7&79\9\]rl   c                 Z    | j                  t        | j                  | j                         y r   )r@  rb  r  custom_formatter_with_defaultsrp   s    rJ   ,test_custom_formatter_function_with_defaultsz;ConfigDictTest.test_custom_formatter_function_with_defaults  r  rl   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)rn   r      )rl  bcr*  r  )r  r   )g)rT   rw  jr   lr   rv  )ozcfg://alistp)atuplealistadictnest1nest2nest3zcfg://atuple[1]r   zcfg://alist[1]r  zcfg://nest1[1][0]rT   zcfg://nest2[1][1]zcfg://adict.dzcfg://adict[f]zcfg://nest3rn   zcfg://nosuchzcfg://!zcfg://adict[2])	r   r  BaseConfiguratorr\   convertpopr@  KeyErrorrb  )rF   r  bcr   s       rJ   test_baseconfigzConfigDictTest.test_baseconfig  sE   $Q(+C:s+.
 ^^,,Q/$56:$45s;$78#>$78#>O4c:$45q9JJ}%q?3(BJJ?*bjj)<(BJJ0@Arl   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)rF   r  r5  r6  r  r  s       rJ   r  z:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__  s     $1&1,4rl   c                 z    |xj                   d| j                  j                   z  c_         t        |   |      S N )r  r  typer  rB  r  s     rJ   rB  z6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emit  s2    

$--"4"4!566
w|F++rl   r  )r  r  s   @rJ   	MyHandlerr    s    5, ,rl   r  Resourcer  labelsmy_typerl  )r  r  rn   	myhandler)r	  r  r   r  r5  zsome logzsome log my_type
)
collectionsr  r   r;   r   r  r  r   r\   rZ   )rF   r  r  r  r  r  r  s         @rJ   test_namedtuplezConfigDictTest.test_namedtuple  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r5  rw   )r  s    rJ   r   zAConfigDictTest.test_config_callable_filter_works.<locals>.filter_  s    rl   rn   r:   r  r  r  r  r   r    r  rF   r   s     rJ   !test_config_callable_filter_worksz0ConfigDictTest.test_config_callable_filter_works  s9    	G	"J
 	 ')#rl   c                     t        j                  d      }| j                  dd|gdd       g t        j                         _        y )Nr   rn   r:   r  r  )r   r   r  r    r  r  s     rJ   test_config_filter_worksz'ConfigDictTest.test_config_filter_works  sB    ..-G	"J
 	 ')#rl   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r5  rw   )rF   r  s     rJ   r   zIConfigDictTest.test_config_filter_method_works.<locals>.FakeFilter.filter  s    rl   N)rs   rt   ru   r   rw   rl   rJ   
FakeFilterr    s    rl   r  rn   r:   r  r  r  )rF   r  r   s      rJ   test_config_filter_method_worksz.ConfigDictTest.test_config_filter_method_works  sG    	 	 ,G	"J
 	 ')#rl   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  rw   rl   rJ   
NotAFilterr    s    rl   r  rn   r:   r  r  )r@  rb  r  )rF   r  r   s      rJ   test_invalid_type_raisesz'ConfigDictTest.test_invalid_type_raises  sD    a.G!!gY'OP /rl   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-rB   r3  ro  r4  r  listenerr  r  bazzqueue not emptyrI  r  )r  r  r  )r%   r  config_queue_handlerr9  r  r   r9  r\   r  r  assertIsNotNoner  r  r   r   r   r   sleeping_retryrc  r  emptyr   r  rc   r[   r  r   r  r4  r  )	rF   qspeclspeccdr8  qhr   r  rT   s	            rJ   do_queuehandler_configurationz,ConfigDictTest.do_queuehandler_configuration  s3   ]]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                 r   t               t               g}dD cg c]  }t         d| dd }}t        dz   d d dd}d t        dz   t        d	z   g||}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 c c}w # 1 sw Y   8xY w)N)r  r  r   rg  r	  r  z.listenerMakerT)r	  r  r  r  z.queueMakerz.CustomQueuez.CustomListenerry  r   r  r  z Unable to configure handler 'ah')r  r  rs   r  	itertoolsproductr  rs  r@  rb  rt  r  r\   )rF   qsrs  dqsdlqvalueslvaluesr  r  ctxr  s              rJ   test_config_queue_handlerz(ConfigDictTest.test_config_queue_handler7  sa    m023@B@3 "
!C5)b9@ 	 B --%)	
 M18n3LXsXUWX$55r>J%--gw?LE5..ue< @ CU+CU+%--gw?LE5}"":.#225%@ /cmm$CS"DE @!B& /.s   D(#D--D6	c                 6    | j                  ddd|did       y )Nrn   queue_listenerr2  r
  r  )r  rB   )r  )rF   r  s     rJ   *_apply_simple_queue_listener_configurationz9ConfigDictTest._apply_simple_queue_listener_configurationS  s+     <"#
 	rl   zmultiprocessing.Managerc                    dddt        j                         t        j                         t               t	               fD ]>  }| j                  |      5  | j                  |       |j                          d d d        @ y # 1 sw Y   KxY w)Nzqueue.QueuerM  r  r  )r  r  SimpleQueuer  r  subTestr	  assert_not_calledrF   r!   r  s      rJ   Atest_config_queue_handler_does_not_create_multiprocessing_managerzPConfigDictTest.test_config_queue_handler_does_not_create_multiprocessing_manager^  sv     !R0KKM $% "
E E*??F))+ +*
 +*s   "BB
	c                    t               t               fD ]\  }| j                  |      5  | j                  t              5  | j                  |       |j                          d d d        d d d        ^ y # 1 sw Y   xY w# 1 sw Y   uxY w)Nr  )r  r  r  r@  rb  r	  r  r  s      rJ   Ptest_config_queue_handler_invalid_config_does_not_create_multiprocessing_managerz_ConfigDictTest.test_config_queue_handler_invalid_config_does_not_create_multiprocessing_manageru  sh     h 8 :;EE*D,=,=j,I??F))+ -J** <,I,I**s#   B "A5"B5A>:BB
	z@requires a debug build for testing assertions in multiprocessingc                 R   dd l }t        j                  rdg}ng d}|D ]n  }| j                  |      5   |j                  |      }|j                         }| j                  t              5  | j                  |       d d d        d d d        p y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   spawnr  r  
forkserverstart_method)	multiprocessingr   
MS_WINDOWSr  get_contextr  r@  rb  r	  )rF   r  start_methodsr  r  r  s         rJ   ?test_config_reject_simple_queue_handler_multiprocessing_contextzNConfigDictTest.test_config_reject_simple_queue_handler_multiprocessing_context~  s     	$IM;M)L<81o11,?)&&z2CCEJ 3 98 * 32 98s#   8B,B>BBBB&	z?requires a debug build for testingassertions in multiprocessingc           	      L   t         j                  rdg}ng d}|D ]  }| j                  |      5  t        j                  |      }|j                         5 }|j                         }g }|j                  d| j                  |dfd      5  |j                  |j                  d             d d d        | j                  |j                                d d d        | j                  t              d       d d d         y # 1 sw Y   VxY w# 1 sw Y   ;xY w# 1 sw Y   xY w)	Nr  r  r  rn   r  )initializerinitargsmaxtasksperchild<   rV  )r   r  r  r  r  Managerr  Pool_mpinit_issue121723rb  r  rE   r  r\   r]   )rF   r  r  r  r!   qr  s          rJ   1test_config_queue_handler_multiprocessing_contextz@ConfigDictTest.test_config_queue_handler_multiprocessing_context  s     $IM;M)L<8%11,?[[]gA G!1I1I,-v; " LquuRu'89L OOAGGI. #   Wq1 98 *L L	 #] 98s;   &D4D
"D	,'D#DD
DDDD#	c                     t         j                  j                  dddd| didgddd       t        j                         j	                  |       y )	Nrn   Tlog_to_parentr2  r  r:   rB   r  )r  r  rB   r  )r   r  r7  r    r   )r  message_to_logs     rJ   r%  z"ConfigDictTest._mpinit_issue121723  sZ     	!!(,<"" #2!2WE
#
 
	 	  0rl   c                    t        j                  | j                        }ddlm}m}  |       } |       j	                         } |       j                         }|||fD ]*  }t        dd      }||d   d   d<   ||d   d   d	<   d }		 | j                  |       t        j                  d      }	| j                  t        t        j                               ddg       | j                  |	j                         | j!                  |	j"                  |       | j!                  |	j                  j"                  |       t        j                  d      }
|
r| j%                  t&        |
|       | j%                  t(        j*                  |       - y # t        j                  d      }
|
r| j%                  t&        |
|       w | j%                  t(        j*                  |       w xY w)
Nr   )r  r#  r  ztest_logging-cmpqh-rB   r3  ro  r4  r  )r%   r  r  r  r  r#  JoinableQueuer9  r  r   r9  r\   r  r  r  r  r  r  r   r  r4  r  )rF   r  MQMMq1q2q3r  r8  r  rT   s              rJ   test_multiprocessing_queuesz*ConfigDictTest.test_multiprocessing_queues  sx    ]]4445>TTZZ\T!"b\E(=>B/1BzN4 ,,1BzN4 )B3!!"%--d3  (?(?(A!BT4LQ$$R[[1bhh.bkk//7,,T2OO$4a<OOBIIr2# " ,,T2OO$4a<OOBIIr2s   B2FAG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 )Nrn   Fr$  r:   r  )r  r
  rl  r  )r  r  rB   r  r  r  )r   r    rZ  r   r  rE   )rF   r  r  s      rJ   
test_90195zConfigDictTest.test_90195  s     (-$4 $!*
  ""3')&!)9a.)(-.&!)rl   c                     t        j                  d       t        j                  d      }ddd|j                  d      j                         didgdd	d
}t        j
                  j                  |       y )N_multiprocessingr  rn   sinkr2  r  r  r:   r*  r5  )r   import_moduler  r  r   r  r7  )rF   mpr  s      rJ   test_111615zConfigDictTest.test_111615  sv    ##$67(():; <^^G4::< $H 
 	!!&)rl   c                     G d dt         j                  j                        }ddi}ddd|i|iddgd	d
}t         j                  j	                  |       t        j
                  d      }| j                  |j                  |       y )Nc                        e Zd Z fdZ xZS )>ConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandlerc                 V    t         |   t        j                                || _        y r   )r  r  r  r  custom_kwargsrF   r5  r6  r  s      rJ   r  zGConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandler.__init__  s     /%+"rl   )rs   rt   ru   r  r  r  s   @rJ   CustomQueueHandlerr>    s    , ,rl   rB  r  r  rn   r  r
  r:   r  r5  )r   rB   QueueHandlerr  r7  r9  r\   r@  )rF   rB  r@  r  r   s        rJ   test_kwargs_passingz"ConfigDictTest.test_kwargs_passing  s    	,!1!1!>!> 	,
  /# !%J
 	!!&)**84..>rl   r   )ors   rt   ru   rv   r
   r  rY   r  r  r  r  r?  rC  r  r  r  r  r  rI  r  r  r  r  rV  r  rY  rZ  r^  ra  rd  rh  rl  rs  r   r=   r  rv  ry  r  r  r  r  r  r  r  r  r:  r  r  r  r@  rD  r  r  rJ  r  rM  r  rT  rW  r[  r_  rb  re  ri  rm  rp  rt  rw  r{  r  r   requires_working_socketr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	   r  requires_subprocessr  r	  r   r  r  r  r  
skipUnlessPy_DEBUGr  r'  staticmethodr%  r3  r5  r;  rD  rw   rl   rJ   r  r  t	  sB   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,*'++ * %.%%w

 1&".	
  !
+H8  1 
 :# %
  (M#
H2 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 W  "F # 3F4	 1002 W  "
$%, & # 3,( $%, &,  W  "X)) ,L MKM # K$  W  "X)) ,K L2L # 2& 1 1  !W  "3 #36*<**?rl   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   rb  )rF   r  r  r5  exc_infoextraloggeds         rJ   _logz;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log,  s    c"rl   rr   )rs   rt   ru   rT  )rS  s   rJ   MyLoggerrN  +  s    #rl   rU  r  zshould appear in loggedzshould not appear in logged)
r   Loggerr#  r@  	TypeErrorsetLoggerClassrs  r    r   r\   )rF   rU  manr  rS  s       @rJ   test_manager_loggerclassz$ManagerTest.test_manager_loggerclass(  s    	#w~~ 	# ood#)S%7%7=8$v&0156";!<=rl   c                     t        j                  d       }t               }|j                  |       | j	                  |j
                  |       y r   )r   r#  r  setLogRecordFactoryr\   logRecordFactory)rF   rY  rh   s      rJ   test_set_log_record_factoryz'ManagerTest.test_set_log_record_factory8  s;    ood#8)--x8rl   N)rs   rt   ru   rZ  r^  rw   rl   rJ   rK  rK  '  s    > 9rl   rK  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  )rF   r   l1l2c1c2c3s          rJ   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"rl   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    getChildrenr\   assertNotInr  )rF   r   rh  ri  l3l4kidsrh   s           rJ   test_get_childrenz!ChildLoggerTest.test_get_childrenN  s    u%y)12u%}}84(?3X&~~"t$~~%rl   N)rs   rt   ru   rm  ru  rw   rl   rJ   r`  r`  >  s    &rl   r`  c                       e Zd Zy)DerivedLogRecordNr  rw   rl   rJ   rw  rw  ]  r  rl   rw  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   )rs  )rF   rs  s     rJ   r  z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__d  s	    rl   c                 p    t        |      }|| j                  urd|d| j                  }t        |      y)NzUnexpected LogRecord type z, expected T)r  rs  rW  )rF   r   r  r  s       rJ   r   z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filterg  s5    LDHH$IJ HH&C#C.(rl   N)rs   rt   ru   r  r   rw   rl   rJ   CheckingFilterr|  c  s    rl   r  )
r   r   r   rK   rw  r   r3   r   getLogRecordFactoryorig_factory)rF   r  s     rJ   rK   zLogRecordFactoryTest.setUpb  sV    
	W^^ 
	 	t$%56""4;;/#779rl   c                     | j                   j                  | j                         t        j	                  |        t        j                  | j                         y r   )r3   r   r   r   rU   r   r\  r  rp   s    rJ   rU   zLogRecordFactoryTest.tearDownt  s<    %%dkk2$##D$5$56rl   c                    | j                  t        | j                  j                  | j	                                t        j                  t               | j                  j                  | j	                                | j                  dg       y )N)r  r   r   )
r@  rW  r3   r   rq   r   r\  rw  r   rk   rp   s    rJ   test_logrecord_classz)LogRecordFactoryTest.test_logrecord_classy  sn    )T%5%5%=%=++-	/##$45t0023!
 	rl   N)rs   rt   ru   rK   rU   r  rw   rl   rJ   ry  ry  `  s    :$7
rl   ry  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 )NrM  queF)r   rK   r  r  r   rB   rC  que_hdlrrH   r    
que_loggerrl  r9   r   rD   rp   s    rJ   rK   zQueueHandlerTest.setUp  s    t[[_
((55djjA	!++E2$)!  1""4==1rl   c                 b    | j                   j                          t        j                  |        y r   )r  rM   r   rU   rp   s    rJ   rU   zQueueHandlerTest.tearDown  rn  rl   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   rq   r@  r  Empty
get_nowaitr   r   rE   r  r   r	  r\   rH   r  r5  )rF   r  r  s      rJ   test_queue_handlerz#QueueHandlerTest.test_queue_handler  s    d//12%++tzz'<'<=T..01%++tzz'<'<=!$zz$$&
4):):;<DOO$8$89$((DII.d<rl   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})rH   	levelnamer  )rq   r   r   r   r"  rH   r=   r>   r  r@   r  r   r  r  r\   r  r  )rF   r  r  log_format_strformatted_msgr  
log_records          rJ   test_formattingz QueueHandlerTest.test_formatting  s    !((9	;&--4998A3 . P%%doo6	""9-$ZZ**,

7
(:(:;rl   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   rB   r  r  r  r  r   rq   r   r  r  rE   matchesr   r   r~   rM   r9   rZ  )rF   r   r  s      rJ   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)Nrn   r   rQ  T
stack_info	TracebackStack)r   rB   r  r  r<   r  ZeroDivisionErrorr  r  rq   r   r  r\   r8   rZ   r  r  )rF   r  r*  excs       rJ   &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  rD   r<   r   rB   r  r  r  r   r  r\   r8   rZ   r  )rF   r  s     rJ   *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Orl   N)rs   rt   ru   rY   rK   rU   r  r  r  rG  rE  r   rB   r  r  r  rw   rl   rJ   r  r    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rl   r  r  c                       e Zd 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
)QueueListenerTestz~
        Tests based on patch submitted for issue #27930. Ensure that
        QueueListener handles all log messages.
           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)z
            Creates a logger with a QueueHandler that logs to a queue read by a
            QueueListener. Starts the listener, logs five messages, and stops
            the listener.
            ztest_logger_with_id_%sonetwothreefourfiveN)r   r    r9   r:   rB   rC  rD   r  r  r   r  rN   rM   )	log_queuer`  r  r   r  s        rJ   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  )MMOrl   rY  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)rz  repeatr  r  r  r  r\   
call_countrF   mock_handlerw  r  s       rJ   #test_handle_called_with_queue_queuez5QueueListenerTest.test_handle_called_with_queue_queue  sa    4;;'!KKM	""9A.FG ( [33Q_EGrl   c                 f   t        j                          t        | j                        D ][  }t	        j
                         }| j                  || j                         d|       |j                          |j                          ] | j                  |j                  d| j                  z  d       y r  )r   *skip_if_broken_multiprocessing_synchronizerz  r  r  r  r  r  rM   r  r\   r  r  s       rJ    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rl   c              #   j   K   	 	 | j                          # t        j                  $ r g cY S w xY wwr   )r  r  r  )r  s    rJ   get_all_from_queuez$QueueListenerTest.get_all_from_queue)  s9     #..00 ;; 	s   3 0303c                 6   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 )a  
            Five messages are logged then the QueueListener is stopped. This
            test then gets everything off the queue. Failure of this test
            indicates that messages were not registered on the queue until
            _after_ the QueueListener stopped.
            r  z&Found unexpected messages in queue: %sN)r   r  rz  r  r  r  r  r  listr  rM   r  r   rB   r  	_sentinelr  r  r	  r  )rF   rw  r  r   rh   r   s         rJ   $test_no_messages_in_queue_after_stopz6QueueListenerTest.test_no_messages_in_queue_after_stop1  s     >>@4;;''--/""5DGGIq*ABT44U;<!!!#!1!1!?!?!I!I JKeXF5:%<5: /9G<M<M.NQUU*+&,5:%<=> (%<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   rB   r  r  r  r@  rb  	task_done)rF   r  r  s      rJ   test_calls_task_done_after_stopz1QueueListenerTest.test_calls_task_done_after_stopI  s\    I''55i@HNNMMO"":.##% /..s   )BBN)rs   rt   ru   rv   r  rI  r  r   r  r   rB   r  r  r  r  r  r  rw   rl   rJ   r  r    s    	
 		 
	. 
g&&44h	?	G 
@	G 
g&&44h	?
	G 
@
	G 
	 
		>0	&rl   r  c                       e Zd Zd ZeZd Zy)UTCc                     t         S r   )ZEROrF   dts     rJ   	utcoffsetzUTC.utcoffsetW  s    rl   c                      y)Nr  rw   r  s     rJ   tznamez
UTC.tzname\  s    rl   N)rs   rt   ru   r  dstr  rw   rl   rJ   r  r  V  s     Crl   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)Nrw   )r@  r\   rt  )rF   r  r  r5  r6  r*  s         rJ   assert_error_messagez'AssertErrorMessage.assert_error_messagec  sH    	.Db24262 	.Wc!f--	.s    A>AN)rs   rt   ru   r  rw   rl   rJ   r  r  a  s    .rl   r  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.testr[  toz	dummy.extr  zMessage with %d %s)r   placeholders)rH   r  pathnamelinenorQ  r  r  r5  r  i  )r   r:   r4  r[  r   commonvariantsrp   s    rJ   rK   zFormatterTest.setUpj  sP    $]]VT;?''	
 $
rl   Nc                     t        | j                        }||j                  | j                  |          t	        j
                  |      S r   )r  r  rP   r  r   r   )rF   rH   r  s      rJ   
get_recordzFormatterTest.get_record{  s<    dkk"MM$---.$$V,,rl   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
r  r   r=   r\   r"  r@  rb  rZ  usesTimerE   rF   r   r   s      rJ   test_percentzFormatterTest.test_percent  s    OO./!&FGl+*ahh2&m,

%./

%./

%rl   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  r"  $%Message with 2 placeholders%$z{random}r   	{asctime}z{asctime!s:15}z{asctime:15}r  r  s      rJ   test_braceszFormatterTest.test_braces  s    OOoS9!&GHj4*ahh2k5&k5

%.c:

%nC8

%rl   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}--r  r  s      rJ   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

%rl   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 fieldsr  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=   r\   _fmtr@  rb  r  rF   r   s     rJ   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Prl   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+  r  Default)r"  r  z#Default Message with 2 placeholdersz 1234 Message with 2 placeholdersr  zNon-existing)r^   r   r=   r  r\   r"  r@  rb  )rF   fmtsstylesr  r"  r   r   s          rJ   test_defaults_parameterz%FormatterTest.test_defaults_parameterK  s    S dF+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 ,rl   c                 R    | j                  t        t        j                  d d d       y )Nr  )r@  rb  r   r=   rp   s    rJ   test_invalid_stylez FormatterTest.test_invalid_style_  s    *g&7&7tSIrl   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  ry        r  r   {   %(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r  datetimeutcr{  mktime
astimezone	timetuplecreatedmsecsr   r=   gmtime	converterr\   
formatTimer"  asctime)rF   r   r  r   s       rJ   	test_timezFormatterTest.test_timeb  s    OOtQAq!Q< KKd 3 = = ?@	78kka*CDa19=	$=>rl   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)rs   rt   ru   default_msec_formatdefault_time_formatrw   rl   rJ   NoMsecFormatterr  q  s    "&"5rl   r  r  ry  r  r  r  r   r  z21/04/1993 08:03:00)r   r=   r  r  r  r{  r  r   r  r  r  r  r\   r  )rF   r  r   r  r   s        rJ   test_default_msec_format_nonez+FormatterTest.test_default_msec_format_nonep  s    	6g// 	6 OOtQAq!S#>KKd 3 = = ?@	kka*?@rl   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  r  )r  r"  r	  i	  g-C6:?r  z
Message %drn   z.1000)r   r=   rz  r{  r}  r   r"  rq  )rF   r   rw  r   rj   s        rJ   test_issue_89047zFormatterTest.test_issue_89047|  sm    "ESZmntAJJv%%ula!e.D&EFAAWa(	 rl   r   )rs   rt   ru   rK   r  r  r  r  r  r  r  r  r  r  rw   rl   rJ   r  r  i  s?    
"-&& &*TQlN(J?
A)rl   r  c                       e Zd Zd Zd Zy)TestBufferingFormatterc                     dt        |      z  S )Nz[(%d)r]   rF   r  s     rJ   formatHeaderz#TestBufferingFormatter.formatHeader      W%%rl   c                     dt        |      z  S )Nz(%d)]r  r  s     rJ   formatFooterz#TestBufferingFormatter.formatFooter  r  rl   N)rs   rt   ru   r  r  rw   rl   rJ   r  r    s    &&rl   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  rp   s    rJ   rK   zBufferingFormatterTest.setUp  s/    !!5%.1!!5%.1
rl   c                     t        j                         }| j                  d|j                  g              | j                  d|j                  | j                               y )Nr   onetwo)r   BufferingFormatterr\   r"  r  r  s     rJ   test_defaultz#BufferingFormatterTest.test_default  sE    &&(QXXb\*188DLL#9:rl   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  r\   r"  r  r   r=   )rF   r   lfs      rJ   test_customz"BufferingFormatterTest.test_custom  s`    "$)188DLL+AB/"2&-qxx/EFrl   N)rs   rt   ru   rK   r!  r$  rw   rl   rJ   r  r    s    
;
Grl   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  failedTr  r   z#Traceback (most recent call last):
z!
RuntimeError: deliberate mistakeStack (most recent call last):
z,logging.exception('failed', stack_info=True))r3   RecordingHandlerrD   r  r   r  rN   rM   r  rE   exc_textr  r_  r  )rF   r   rT   s      rJ   r  zExceptionTest.test_formatting  s    	Q	9344	9h48			IIaL

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

++ -A B 	C// 1> ? 	@-- /? @ 	As	   4 AN)rs   rt   ru   r  rw   rl   rJ   r&  r&    s    Arl   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)r3   rN   r<   r   
lastResortr  r   r  r   r\   rZ   r   r!   emittedNoHandlerWarningrD   )rF   r  old_lastresortold_raise_exceptionsr  r  s         rJ   test_last_resortzLastResortTest.test_last_resort  s   4>>* ++&66	;((*f

34  !2B7_-  !24EF	 + "&G((*f_-F  !2C8 + ((*f_-  !2B7 +
 49DLL0&+G#((*f_-  !2B7 + OODNN+!/G&:G#7 +* +* +* +* 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)rs   rt   ru   r3  rw   rl   rJ   r-  r-    s    #;rl   r-  c                       e Zd Zd Zd Zy)FakeHandlerc           
      N    dD ]   }t        | || j                  |||             " y )N)r  r
  rM   r  )setattrrecord_call)rF   
identifiercalledrh  s       rJ   r  zFakeHandler.__init__  s'    >FD&$"2"2:vv"NO ?rl   c                     fd}|S )Nc                  H     j                  dj                               y )Nz{} - {})rb  r"  )r:  r9  method_names   rJ   innerz&FakeHandler.record_call.<locals>.inner  s    MM)**:{CDrl   rw   )rF   r9  r=  r:  r>  s    ``` rJ   r8  zFakeHandler.record_call  s    	Erl   N)rs   rt   ru   r  r8  rw   rl   rJ   r5  r5    s    Prl   r5  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  rA  s      rJ   r  zRecordingHandler.__init__  s    .??rl   c                 :    | j                   j                  |       y)z&Keep track of all the emitted records.N)r  rb  r   s     rJ   rY  zRecordingHandler.handle  s    F#rl   )rs   rt   ru   r  rY  r  r  s   @rJ   r*  r*    s    $rl   r*  c                   |     e Zd 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 )ShutdownTestz#Test suite for the shutdown method.c                     t         t        |           g | _        t        j
                  }| j                  t        t        d|       y )Nr  )r  rC  rK   r:  r   r  r   r7  )rF   raise_exceptionsr  s     rJ   rK   zShutdownTest.setUp  s7    lD')"22*;=MNrl   c                     fd}|S )Nc                               r   rw   )r   s   rJ   r>  z'ShutdownTest.raise_error.<locals>.inner  s
    'Mrl   rw   )rF   r   r>  s    ` rJ   raise_errorzShutdownTest.raise_error  s    	rl   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   rn   r   r}  )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)	r5  r:  r  r   r  r  r  r  r\   )rF   handler0handler1handler2rB   rh   s         rJ   test_no_failurezShutdownTest.test_no_failure  s    q$++.q$++.q$++. w**Xx,JKT(^4L 	4;;/rl   c                 $   t        d| j                        }t        ||| j                  |             t        j
                  j                  |      g}t	        j                  t        |             | j                  d| j                  d          y )Nr   r}  rJ  rM  )
r5  r:  r7  rH  r   r  r  r  r  r\   )rF   rh  r   r   rB   s        rJ   _test_with_failure_in_methodz)ShutdownTest._test_with_failure_in_method  sj    a-!1!1%!89OO''01T(^4B8rl   c                 0    | j                  dt               y Nr  rP  ra  rp   s    rJ   test_with_ioerror_in_acquirez)ShutdownTest.test_with_ioerror_in_acquire  s    )))W=rl   c                 0    | j                  dt               y Nr
  rS  rp   s    rJ   test_with_ioerror_in_flushz'ShutdownTest.test_with_ioerror_in_flush      ))'7;rl   c                 0    | j                  dt               y NrM   rS  rp   s    rJ   test_with_ioerror_in_closez'ShutdownTest.test_with_ioerror_in_close"  rX  rl   c                 0    | j                  dt               y rR  rP  rb  rp   s    rJ   test_with_valueerror_in_acquirez,ShutdownTest.test_with_valueerror_in_acquire%  s    )))Z@rl   c                 0    | j                  dt               y rV  r]  rp   s    rJ   test_with_valueerror_in_flushz*ShutdownTest.test_with_valueerror_in_flush(      ))':>rl   c                 0    | j                  dt               y rZ  r]  rp   s    rJ   test_with_valueerror_in_closez*ShutdownTest.test_with_valueerror_in_close+  ra  rl   c                 F    dt         _        | j                  dt               y )NFr  r   r  rP  
IndexErrorrp   s    rJ   .test_with_other_error_in_acquire_without_raisez;ShutdownTest.test_with_other_error_in_acquire_without_raise.  s    "')))Z@rl   c                 F    dt         _        | j                  dt               y )NFr
  re  rp   s    rJ   ,test_with_other_error_in_flush_without_raisez9ShutdownTest.test_with_other_error_in_flush_without_raise2      "'))':>rl   c                 F    dt         _        | j                  dt               y )NFrM   re  rp   s    rJ   ,test_with_other_error_in_close_without_raisez9ShutdownTest.test_with_other_error_in_close_without_raise6  rj  rl   c                 f    dt         _        | j                  t        | j                  dt               y )NTr  r   r  r@  rf  rP  rp   s    rJ   +test_with_other_error_in_acquire_with_raisez8ShutdownTest.test_with_other_error_in_acquire_with_raise:  s'    "&*d&G&G#Z	1rl   c                 f    dt         _        | j                  t        | j                  dt               y )NTr
  rn  rp   s    rJ   )test_with_other_error_in_flush_with_raisez6ShutdownTest.test_with_other_error_in_flush_with_raise?  '    "&*d&G&G!:	/rl   c                 f    dt         _        | j                  t        | j                  dt               y )NTrM   rn  rp   s    rJ   )test_with_other_error_in_close_with_raisez6ShutdownTest.test_with_other_error_in_close_with_raiseD  rr  rl   )rs   rt   ru   rv   rK   rH  rN  rP  rT  rW  r[  r^  r`  rc  rg  ri  rl  ro  rq  rt  r  r  s   @rJ   rC  rC    sY    -O
0 9><<A??A??1
/
/rl   rC  c                   f    e Zd 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)ModuleLevelMiscTestz)Test suite for some module level methods.c                    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  rw   rl   rJ   _NotAnIntOrStringr{  Y      rl   r|  WARN)
r   r  r!   rQ   r\   r   r@  rb  rW  r~   )rF   old_disabler|  s      rJ   test_disablez ModuleLevelMiscTest.test_disableN  s    ll**22a(5--55r:*gooG	 	 	)W__6G6IJ 	--55w7G7GHrl   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   rP  )rl  kwr:  s     rJ   <lambda>z/ModuleLevelMiscTest._test_log.<locals>.<lambda>h  s    v}}aW'=rl   ztest me: %rrn   r   )r   r   r   r*  r  rD   r/   r\   r]   r  
getMessageupperr   )rF   rh  r  	recording
log_methodr   expected_levelr:  s          @rJ   	_test_logzModuleLevelMiscTest._test_loge  s    dG]=	? %&		*Wf-
umY7}i0Y../3""1%**,mi.GH"'"3&,,.9Y8 	$rl   c                 D    | j                  dt        j                         y Nr   )r  r   r   rp   s    rJ   test_logzModuleLevelMiscTest.test_log}  s    ugmm,rl   c                 &    | j                  d       y Nr   r  rp   s    rJ   
test_debugzModuleLevelMiscTest.test_debug      wrl   c                 &    | j                  d       y Nr   r  rp   s    rJ   	test_infozModuleLevelMiscTest.test_info      vrl   c                 &    | j                  d       y Nr   r  rp   s    rJ   test_warningz ModuleLevelMiscTest.test_warning      y!rl   c                 &    | j                  d       y Nr   r  rp   s    rJ   
test_errorzModuleLevelMiscTest.test_error  r  rl   c                 &    | j                  d       y Nr  r  rp   s    rJ   test_criticalz!ModuleLevelMiscTest.test_critical      z"rl   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  rw   rl   rJ   rU  r    r}  rl   rU  )r@  rW  r   rX  r  rV  r\   getLoggerClass)rF   rU  s     rJ   test_set_logger_classz)ModuleLevelMiscTest.test_set_logger_class  s    )W%;%;VD	w~~ 	 	x(//18<w~~.//17>>Brl   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>.MyLoggerrU  c                 H    t         |   ||       j                  d       y )Ninitialized)r  r  rb  )rF   rH   r  r  r  s      rJ   r  zIModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__  s     u-}-rl   )rs   rt   ru   r   r   r  r  )r  r  s   @rJ   rU  r    s    $.gnn . .rl   rU  just_some_loggerr  hellor   r   )r   r  rX  r    r\   r6   r7   r;   rD   r9   r:   r   rZ   r  truncater  r   rN   rM   rV  )rF   rU  r  r8   rT   r  s        @rJ   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  rF   codercouterrs        rJ   test_logging_at_shutdownz,ModuleLevelMiscTest.test_logging_at_shutdown  sR        (d3Cjjl,c2.4rl   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
        r  rI  r  zERROR:root:log in __del__)r   TESTFNr   rU  r  r  r   r  r\   rc   r  )rF   ro  r  fps       rJ   test_logging_at_shutdown_openz1ModuleLevelMiscTest.test_logging_at_shutdown_open  s     ##	(((3 $* +3 6	  & 	t$(W-RWWY--/1LM .--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()
        r  z#Cannot recover from stack overflow.rn   )r  r  r   r  rq  r\   r  s        rJ   test_recursion_errorz(ModuleLevelMiscTest.test_recursion_error  sU        -T48Cjjl>DQrl   c                    t        j                         }| j                  t         j                  |       | j	                  t         j                  |       t        j                         }| j	                  ||       | j                  ||       y r   )r   getLevelNamesMappingr\   r*   assertIsNot)rF   mappingnew_mappings      rJ   test_get_level_names_mappingz0ModuleLevelMiscTest.test_get_level_names_mapping  sj    ..0--w7--w7224+.+.rl   r   )rs   rt   ru   rv   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rw   rl   rJ   rv  rv  J  sN    3I.%0- " #
C3>5&N>  /rl   rv  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   rt  rE   r  r_  )rF   r   rj   s      rJ   test_str_repzLogRecordTest.test_str_rep  sD    !!"%F^45

3(rl   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    rD   r   r  r  r5  r\   r  rN   rM   )rF   rT   r   r  s       rJ   test_dict_argzLogRecordTest.test_dict_arg  s    	Qf*A.aiil''+1--~>			rl   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_r  msg2_)processNamer1.processNamer2.processName)r   logMultiprocessingr  current_processrH   r   r   	swap_itemrS  modulesr  r  )	r  r  r1  prev_logMultiprocessingr:  rH   r1r2resultss	            rJ   _extract_logrecord_process_namez-LogRecordTest._extract_logrecord_process_name  s    ")"<"<%7"	A(%%',,D&&se}'=>B ""3;;0A4H**EU3%=+AB I )-)+)+G
 *AG&IIgN IH *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)Nr  TMainProcessrn   r  r  r  r   r   r  )r   r  rS  r  r\   r   r  r   r  r  r  PipeProcessr  r+  assertNotEqualr   )	rF   multiprocessing_importedLOG_MULTI_PROCESSINGr   r  r  parent_conn
child_connr  s	            rJ   test_multiprocessingz"LogRecordTest.test_multiprocessing0  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processr  taskName
logThreadslogProcessesr  logAsyncioTasks)rF   NONENOT_NONEr   log_threadslog_processeslog_multiprocessinglog_asyncio_taskss           rJ   test_optionalzLogRecordTest.test_optionalU  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  )rF   	assertionr   s      rJ   _make_record_asyncz LogRecordTest._make_record_asyncu  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rF   make_recordrunners      rJ   #test_taskName_with_asyncio_importedz1LogRecordTest.test_taskName_with_asyncio_importedy  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   r  rS  r  r   r  r  r  r  r  s      rJ   &test_taskName_without_asyncio_importedz4LogRecordTest.test_taskName_without_asyncio_imported  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   )rs   rt   ru   r  r  rI  r  r  r  r  r   rE  r   r  rw   rl   rJ   r  r    so    )	  0#'J8@ %W$$&	0 '	0 %W$$&	0 '	0rl   r  c                        e Zd 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j2                         d        ZddZd Zd Zd Zd Zd Z d Z! xZ"S )BasicConfigTestz#Test suite for logging.basicConfig.c                 |   t         t        |           t        j                  j
                  | _        t        j                  j                         | _        t        j                  d d  | _
        t        j                  j                  | _        | j                  | j                         g t        j                  _        y r   )r  r  rK   r   r  rB   r$   r%   r&   r'   r(   r  r5   r   cleanupr  s    rJ   rK   zBasicConfigTest.setUp  sy    ot*,--%//446")"6"6q"9&-ll&8&8#% "rl   c                     t         j                  j                  d d  D ]1  }t         j                  j                  |       |j	                          3 t
        t        |           y r   )r   r  rB   rN   rM   r  r  rU   )rF   rT   r  s     rJ   rU   zBasicConfigTest.tearDown  sF    &&q)ALL&&q)GGI * 	ot-/rl   c                 h   t        t        j                  d| j                         t        j                  j                          t        j                  j                  | j                         | j                  t        j                  d d  t        j                  j                  | j                         y )NrB   )r7  r   r  rB   r$   rO   rP   r&   r(   r'   r9   r5   rp   s    rJ   r  zBasicConfigTest.cleanup  sp    j$--8!  !4!45"&"9"9Qd99:rl   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 )Nrn   r   )r   r  r\   r]   r  rB   r  r;   r8   rS  r  r  r  r  BASIC_FORMATr  r	  PercentStyler  r5   )rF   r   r  s      rJ   test_no_kwargszBasicConfigTest.test_no_kwargs  s     	W\\223Q7,,''*gw'<'<=4%%	))..0D0DE)++,i..0D0DE 	++T-H-HIrl   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  r8   r"  Log an errorr   ERROR:root:Log an errorr   r  r   r  rS  r  r   r  r\   rZ   r  rG  s     rJ   test_strformatstylez#BasicConfigTest.test_strformatstyle  o    $$&&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  rG  s     rJ   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  r3  h2r8  s      rJ   r  z.BasicConfigTest.test_filename.<locals>.cleanup      HHJHHJIIbMrl   test.logrI  )ro  rK  rn   r   rl  r  )r   r  r\   r]   r  rB   r  rn  r8   moderH   r   rF   r  r   rh   s       rJ   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?rl   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      rJ   r  z.BasicConfigTest.test_filemode.<locals>.cleanup  r  rl   r  wbro  filemoder   )	r   r  r  rB   rn  r\   r8   r  r   r  s       rJ   test_filemodezBasicConfigTest.test_filemode  su    	
 	Z$?,,''*&&z48,,hoo.B.BC(J?rl   c                    t        j                         }| j                  |j                         t	        j
                  |       | j                  t        t        j                  j                        d       t        j                  j                  d   }| j                  |t        j                         | j                  |j                  |       y )Nr  rn   r   )r6   r7   r   rM   r   r  r\   r]   r  rB   r  r;   r8   )rF   r8   r   s      rJ   test_streamzBasicConfigTest.test_stream  s    %6*W\\223Q7,,''*gw'<'<=0rl   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  j                  d       y )Nz%(asctime)s - %(message)s)r"  r   )r   r  r  rB   r  r\   r  r  rF   r  s     rJ   test_formatzBasicConfigTest.test_format  sH    #>?LL))!,66	))..0KLrl   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  d       y )Nr  )r	  r   )r   r  r  rB   r  r\   r	  r)  s     rJ   test_datefmtzBasicConfigTest.test_datefmt   s@    E*LL))!,66	**E2rl   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  t         j                         y )Nr+  r  r   )r   r  r  rB   r  r  r  r  r)  s     rJ   
test_stylezBasicConfigTest.test_style  sF    #&LL))!,66	i..0K0KLrl   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   r9   r  r\   )rF   	old_levels     rJ   
test_levelzBasicConfigTest.test_level  sy    LL&&	--y9"%++R0"%++R0rl   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  )ro  r8   )ro  rB   )r8   rB   )loglevelrl  r#  )r@  r   r;   rS  r  rb  r  r   )rF   r@  rB   r8   s       rJ   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8rl   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   )rB   r   rn   )r   r;   rS  r  r=   r@   r  r  r  rB   r  r  )rF   rB   r   s      rJ   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Crl   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   rn   T)r  rB   forcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r6   r7   r   r;   r  r   r   r   r   r\   r]   r  rB   r   rZ   r  )rF   old_string_ionew_string_ioold_handlersnew_handlerss        rJ   
test_forcezBasicConfigTest.test_force6  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<	>rl   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)
NrI  r  r  %(message)sro  rK  errorsr"  r  rn   r   .   The Øresund Bridge joins Copenhagen to Malmör  r   r  r:   r\   r]   r  rB   r  rn  rK  r   rM   r  rc   r  r4  r  rF   rK  r   r   r  s        rJ   test_encodingzBasicConfigTest.test_encodingK  sE   	OHh'/'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8MMJKMMOj73qvvx~~' 4IIj!TMO 43 MMOj73qvvx~~' 433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  ignorerA  rB  rn   r   rD  rI  r  z*The resund Bridge joins Copenhagen to MalmrE  rF  s        rJ   test_encoding_errorsz$BasicConfigTest.test_encoding_errors_  s?   	QHh'/'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8MMJKMMOj73qvvx~~' 4IIj!T#OP 43 MMOj73qvvx~~' 433IIj!T#OPrH  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  rA  )ro  rK  r"  r  rn   r   backslashreplaceu<   😂: ☃️: The Øresund Bridge joins Copenhagen to MalmörI  r  zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)r   r  r:   r\   r]   r  rB   r  rn  rK  rC  r   rM   r  rc   r  r4  r  rF  s        rJ   test_encoding_errors_defaultz,BasicConfigTest.test_encoding_errors_defaultr  s]   	KHh'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8W^^-?@MMXYMMOj73qvvx~~' 4IIj!T $J K 43 MMOj73qvvx~~' 433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  rA  rB  rn   r   c                 ^    j                  t        t        j                                      y r   )rb  rt  rS  r  )r   r  s    rJ   dummy_handle_errorzEBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_error  s    s3==?34rl   rD  z:'ascii' codec can't encode character '\xd8' in position 4:rI  r  r   )r   r  r:   r\   r]   r  rB   r  rn  rK  r  rC  r  r   rE   r  rM   r  rc   r  r4  r  )rF   rK  r   rQ  r   r  r  s         @rJ   test_encoding_errors_nonez)BasicConfigTest.test_encoding_errors_none  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3qvvx~~' 4IIj!T3'	 43 MMOj73qvvx~~' 433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   rw   rl   rJ   r  z5BasicConfigTest.test_log_taskName.<locals>.log_record  s     OOM*s   r  ztest-logging-taskname-rI  r  z%(taskName)s - %(message)s)ro  rC  rK  r  r"  rn   r   T)r   r  zTask-\d+ - hello world)r9  r   r4  r  r   r  r   r\   r]   r  rB   r  rn  r  r  r  r  r  rc   r  assertRegexr  rM   )rF   r  r   log_filenamerK  r  r   r  s           rJ   test_log_taskNamez!BasicConfigTest.test_log_taskName  sS   	+ %f.FG		<0	 Hh)1'CE S!6!67;ll++A.G!!'7+>+>?d+v*.'

:<( , lW5vvx~~' 6T#<=))$/  ,+ 65 ))$/ 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  r9   r   rb  )rl  r  r2  r:  old_basic_configrF   s      rJ   my_basic_configz2BasicConfigTest._test_log.<locals>.my_basic_config  sR    **ILL!!#&OOGLL119=MM1b'"rl   r  ztest merw   )r   r  r   r   r/   r\   )rF   rh  r  r\  r  r:  r[  s   `    @@rJ   r  zBasicConfigTest._test_log  si    "..	# 	dG]ODWf-
ui(y! 	2r(,rl   c                 D    | j                  dt        j                         y r  )r  r   r   rp   s    rJ   r  zBasicConfigTest.test_log  s    ugoo.rl   c                 &    | j                  d       y r  r  rp   s    rJ   r  zBasicConfigTest.test_debug  r  rl   c                 &    | j                  d       y r  r  rp   s    rJ   r  zBasicConfigTest.test_info  r  rl   c                 &    | j                  d       y r  r  rp   s    rJ   r  zBasicConfigTest.test_warning  r  rl   c                 &    | j                  d       y r  r  rp   s    rJ   r  zBasicConfigTest.test_error  r  rl   c                 &    | j                  d       y r  r  rp   s    rJ   r  zBasicConfigTest.test_critical  r  rl   r   )#rs   rt   ru   rv   rK   rU   r  r  r  r  r  r%  r'  r*  r,  r.  r3  r6  r8  r?  rG  rK  rN  rR  r   rE  rW  r  r  r  r  r  r  r  r  r  s   @rJ   r  r    s    -#0;J(++@$@1M3M19D">*O(Q&K((@ %W$$&  ' :-./ " #rl   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 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   rJ   r  z(LoggerAdapterTest.setUp.<locals>.cleanup  s    &6G  #rl   r  rR  )r  rd  rK   r   r'   r*  r  r  r  rD   r   rN   rM   r  r   adapter)rF   r  rg  r  s     @rJ   rK   zLoggerAdapterTest.setUp  s    ,."//2)+llt~~.114>>B,,-	7 	 ((),,DKKtLrl   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: %rrn   r   )r  ri  r  r  r\   r]   r  r   r   r   r  r5  rQ  r  __traceback__rF   r  r  r*  r   s        rJ   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)Nrn   r   zexc_info testr  )
r  ri  r  r\   r]   r  r  rQ  r  rl  )rF   r*  r  r   s       rJ   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       | j                  |j                  d       y )Nzcritical test! %rrn   r   r  )ri  r  r  r\   r]   r  r   r   r~   r  r5  r  )rF   r  r   s      rJ   r  zLoggerAdapterTest.test_critical  s    !c4>>2T^^334a8''*)9)9:S)t~~&78/:rl   c                 b   | j                   j                  j                  j                  }d| j                   j                  j                  _        | j	                  t
        | j                   j                  j                  d|       | j                  | j                   j                  d             y )N!   rQ       )ri  r  r!   rQ   r   r7  rZ  isEnabledForrF   r  s     rJ   test_is_enabled_forz%LoggerAdapterTest.test_is_enabled_for)  sw    ll))1199.0##+!4!4!<!<i#	%22267rl   c                 f   | j                  | j                  j                                | j                  j                  D ]  }| j                  j                  |        | j                  | j                  j                                | j                  | j                  j                                y r   )rE   ri  rA   r  rB   rN   rZ  rz  s     rJ   test_has_handlersz#LoggerAdapterTest.test_has_handlers0  sy    0023{{++GKK%%g. , 	00231134rl   c                    d}t        | j                  d       }t        |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                  d       |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)NzAdapters can be nested, yo.rh  AdapterAdapterrn   r   zAdapter AdapterAdapter test_nested)PrefixAdapterr  r   r\   r  r   r   r~   r  r]   r  r   r  r5  r  r!   r  r  )rF   r  ri  adapter_adapterr   orig_managertemp_managers          rJ   r}  zLoggerAdapterTest.test_nested9  s   +t{{$?'wdC!1g_(=>G,,c4>>BT^^334a8''*)9)9:'>se%DEt~~&78-8&..goo|4dkk))<8x	3&2O#MM/11<@MM'//<8MM$++--|<&2O#o--|<goo|4dkk))<8 '3O#s   *A%I5 5	I>c                    | j                   j                  }t        | j                        }|j	                  dd       | j                  t        |d   j                        d       | j                  |d   j                  d       |j                  t        j                  dd       | j                  t        |d   j                        d       | j                  |d   j                  d       y )N
Hello, {}!worldrM  zHello, world!test_styled_adapterGoodbye {}.zGoodbye world.)r  r  StyleAdapterr  r   r\   rt  r  r  r   r   r   )rF   r  ri  s      rJ   r  z%LoggerAdapterTest.test_styled_adapterU  s    ..((t{{+g.WR[__-?--/DEGOO]G<WR[__-/?@--/DErl   c                     | j                   j                  }t        | j                        }d|_        t        |      }|j                  dd       | j                  t        |d   j                        d       | j                  |d   j                  d       |j                  t        j                  dd       | j                  t        |d   j                        d       | j                  |d   j                  d       y )	Nz{}r  r  rM  z{} Hello, world!test_nested_styled_adapterr  z{} Goodbye world.)r  r  r~  r  r   r  r   r\   rt  r  r  r   r   r   )rF   r  ri  adapter2s       rJ   r  z,LoggerAdapterTest.test_nested_styled_adapter`  s    ..((,(w/WR[__-/AB--/KLW__mW=WR[__-/BC--/KLrl   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                  }dz   |        | j	                  |d   j
                  d	       | j                  |d   j                  |       y )
Nrn   c                       d        y Nr  
stacklevelrw   	the_leveltriggers   rJ   	innermostzELoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.innermostp      Fy1rl   c                                y r   rw   r  s   rJ   r>  zALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.inners      Krl   c                                y r   rw   r>  s   rJ   outerzALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.outerv      Grl   rM  r  r>  r   test_find_caller_with_stacklevel)ri  r   r  r  r\   r  r  r  )rF   r  r  r  r>  r  r  r  s       @@@@rJ   r  z2LoggerAdapterTest.test_find_caller_with_stacklevell  sJ   	,,&&	2		 ..((--{;##Q	--w772;--v6##Q	--w772;--v6##Q	--/QR72;--v6rl   c                    t        j                  | j                  ddi      | _        | j                  j	                  d       | j                  t        | j                  j                        d       | j                  j                  d   }| j                  t        |d             | j                  |j                  d       y )Nr  r   rh  zfoo should be herern   r   )r   r   r  ri  r  r\   r]   r  r  rE   rE  r  r   s     rJ   test_extra_in_recordsz'LoggerAdapterTest.test_extra_in_records  s    ,,DKK493<A 	23T^^334a8''*./S)rl   c                    | j                   j                  dddi       | j                  t        | j                  j
                        d       | j                  j
                  d   }| j                  t        |d             y )Nzfoo should NOT be herer  nope)rR  rn   r   )ri  r  r\   r]   r  r  rZ  rE  r   s     rJ    test_extra_not_merged_by_defaultz2LoggerAdapterTest.test_extra_not_merged_by_default  sf    6ufoNT^^334a8''*/0rl   )rs   rt   ru   rK   rn  rq  r  rx  rz  r}  r  r  r  r  r  r  r  s   @rJ   rd  rd    sE    M"B"B	;8598	F
M7@*1rl   rd  c                       e Zd ZdZd Zy)r~  Adapterc                 (    | j                    d| |fS r  r   )rF   r  r6  s      rJ   r  zPrefixAdapter.process  s    ++au%v--rl   N)rs   rt   ru   r   r  rw   rl   rJ   r~  r~    s    F.rl   r~  c                       e Zd Zd Zd Zy)Messagec                      || _         || _        y r   )r  r5  )rF   r  r5  s      rJ   r  zMessage.__init__  s    	rl   c                 H     | j                   j                  | j                   S r   )r  r"  r5  rp   s    rJ   __str__zMessage.__str__  s    txx		**rl   N)rs   rt   ru   r  r  rw   rl   rJ   r  r    s    +rl   r  c                       e Zd ZdddZy)r  rn   r  c                   | j                  |      rE| j                  ||      \  }} | j                  j                  |t	        ||      fi |d|dz   i y y )Nr  rn   )rv  r  r  r   r  )rF   r  r  r  r5  r6  s         rJ   r   zStyleAdapter.log  sY    U#,,sF3KCDKKOOE73#5 5 5'1!|5 $rl   N)rs   rt   ru   r   rw   rl   rJ   r  r    s
    34 5rl   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rH   )r  r  rK   r*  r  r   rV  r  rD   r   rN   rM   r  r  s    rJ   rK   zLoggerTest.setUp  s    j$%')+nn&1t~~.114>>B,,-(()rl   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   )r  rW  r  r9   rp   s    rJ   test_set_invalid_levelz!LoggerTest.test_set_invalid_level  sJ    !!EKK  $	( 	!!GKK  &	*rl   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rk  )r  r  r  r  r\   r]   r  r   r   r   r  r5  rQ  r  rl  rm  s        rJ   rn  zLoggerTest.test_exception  s    %	7E
 	T^^334a8''*7S)t~~&78--c.?.?@	B ! 	7CKK!!#t~~66	7ro  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@  rW  r  r   rp   s    rJ   !test_log_invalid_level_with_raisez,LoggerTest.test_log_invalid_level_with_raise  s>    w(94@i$O A@@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   rp   s    rJ   test_log_invalid_level_no_raisez*LoggerTest.test_log_invalid_level_no_raise  s4    w(95AKKOOD.1 BAAs   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   )rb  rZ   )r   r  r:  s     rJ   r  z=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>  s    fmmDMMO&Drl   Tr  rn   r)  r   )r   r   r   	tracebackr  
findCallerr\   r]   )rF   r:  s    @rJ    test_find_caller_with_stack_infoz+LoggerTest.test_find_caller_with_stack_info  sd    dG--}D	F 	$/Va(;VAYGrl   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 )
Nrn   c                       d        y r  rw   r  s   rJ   r  z>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermost  r  rl   c                                y r   rw   r  s   rJ   r>  z:LoggerTest.test_find_caller_with_stacklevel.<locals>.inner  r  rl   c                                y r   rw   r  s   rJ   r  z:LoggerTest.test_find_caller_with_stacklevel.<locals>.outer  r  rl   rM  r  r>  r  r  )r  r   r  r  r\   r  r  r  r   r    rD   rN   )	rF   r  r  r  r3   r>  r  r  r  s	        @@@@rJ   r  z+LoggerTest.test_find_caller_with_stacklevel  s   	++%%	2		 ..((--{;##Q	--w772;--v6##Q	--w772;--v6##'')t~~.//--w7!!$..1++%%Q	--/QR72;--v6rl   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rR  sinfo)	r   _logRecordFactoryra   __dict__keysr@  r  r  
makeRecord)rF   rH   r  r8  lnor  r5  rQ  r  r  rvr  rR  s                rJ   %test_make_record_with_extra_overwritez0LoggerTest.test_make_record_with_extra_overwrite  s    :>>>S>3>>>4%&&tUBS$'/u> *E"++2B2B2D,EEC,'Eh(>(>e #sD($)  8 Frl   c                     d}d}d x}x}x}x}x}x}}	ddi}
| j                   j                  ||||||||
|		      }| j                  d|j                         y )Nr  r  	valid_keyr  r  )r  r  r  r  )rF   rH   r  r8  r  r  r5  rQ  r  r  rR  r  s               rJ   (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??3rl   c                    | j                  | j                  j                                | j                  j                  D ]  }| j                  j	                  |        | j                  | j                  j                                y r   )rE   r  rA   rB   rN   rZ  rz  s     rJ   rz  zLoggerTest.test_has_handlers(  s\    //12{{++GKK%%g. ,0023rl   c                 z    t        j                  d      }d|_        | j                  |j	                                y )Nz
blah.childF)r   r    rl  rZ  rA   )rF   child_loggers     rJ   test_has_handlers_no_propagatez)LoggerTest.test_has_handlers_no_propagate/  s1    ((6!&1134rl   c                 &   | j                   j                  j                  }d| j                   j                  _        | j                  t        | j                   j                  d|       | j                  | j                   j                  d             y )N   rQ      )r  r!   rQ   r   r7  rZ  rv  rw  s     rJ   rx  zLoggerTest.test_is_enabled_for4  sb    kk))11&(#!4!4iM11"56rl   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   rQ   r  )r  r   r!   rQ   r   r7  rZ  rv  )rF   old_disabledr  s      rJ   #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6rl   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  ro   )r   r    r  r  r  r  )rF   r  s     rJ   test_root_logger_aliasesz#LoggerTest.test_root_logger_aliasesF  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Crl   c                     | j                  t        t        j                  t               | j                  t        t        j                  d       y )Ns   foo)r@  rW  r   r    anyrp   s    rJ   test_invalid_nameszLoggerTest.test_invalid_namesS  s2    )W%6%6<)W%6%6?rl   c                     t        t        j                  dz         D ][  }dD ]T  }t        j                  |      }t        j
                  ||      }t        j                  |      }| j                  ||       V ] y )Nrn   )r   r  r  ro  zbaz.bar)rz  r.  HIGHEST_PROTOCOLr   r    r  r/  r  )rF   protorH   r  rj   	unpickleds         rJ   test_picklingzLoggerTest.test_picklingW  sb    622Q67EA **40LL/"LLO	i0	 B 8rl   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 )Nrb  rf  TF)r3   r   r    r9   r   r\   r4   _cacherE   rv  rZ  r:   r~   r   rQ   )rF   r  r1   r2   s       rJ   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+;+;<=rl   )rs   rt   ru   rK   r  rn  r  r  r  r  r  r  rz  r  rx  r  r  r  r  r  r  r  s   @rJ   r  r    s^    **B"P2H%7N8445
7
7D@16>rl   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)BaseFileTestz1Base class for handler tests that write log filesc                 ^    t         j                  |        t        dd      | _        g | _        y )Nr  ztest_logging-2-)r   rK   r9  r8  rmfilesrp   s    rJ   rK   zBaseFileTest.setUp  s$    t ):;rl   c                 
   | j                   D ]  }t        j                  |        t        j                  j	                  | j
                        rt        j                  | j
                         t        j                  |        y r   )r  r4  rU  r[  r\  r8  r   rU   )rF   r8  s     rJ   rU   zBaseFileTest.tearDown  sM    ,,BIIbM 77>>$''"IIdgg$rl   c                     | j                  t        j                  j                  |      d|z         | j                  j                  |       y)z7Assert a log file is there and register it for deletionzLog file %r does not existr  N)rE   r4  r[  r\  r  rb  )rF   ro  s     rJ   assertLogFilezBaseFileTest.assertLogFile  s=    x088C 	 	EH%rl   c           
      r    t        j                  dt         j                  dd| j                         d d d       S )Nrv  r  rn   )r   r	  r:   rq   rp   s    rJ   next_reczBaseFileTest.next_rec  s5      gmmS!!%!2!2!4dD$H 	Hrl   N)rs   rt   ru   rv   rK   rU   r  r  rw   rl   rJ   r  r    s    7
 &Hrl   r  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 )NrI  TrJ  )r4  rU  r8  r   rn  r  r8   rZ  r[  r\  rY  r   r  rE   rM   )rF   fhs     rJ   
test_delayzFileHandlerTest.test_delay  s    
		$''  7$G"))$01
		'''+,RYY'tww/0

rl   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)NrI  rk  )rK  r  rA  r   )r4  rU  r8  r   rn  r@   r=   rB  r  rM   r  r\   rc   r  )rF   r  r  s      rJ   %test_emit_after_closing_in_write_modez5FileHandlerTest.test_emit_after_closing_in_write_mode  s    
		$''  7E
))-89
 


 $'']bRWWY__.4 ]]s   	/DD
N)rs   rt   ru   r  r  rw   rl   rJ   r  r    s    	5rl   r  c                       e Zd Zd Z ej
                  ej                  d      d        Zd Z	d Z
ddZd Zd Zd	 Z ej                         d
        Zy)RotatingFileHandlerTestc                    t         j                  j                  | j                  dd      }| j	                  |j                  d              |j                          t         j                  j                  | j                  dd      }| j	                  |j                  d              |j                          t        | j                  d      5 }|j                  d       d d d        t         j                  j                  | j                  dd      }| j	                  |j                  d              |j                          y # 1 sw Y   fxY w)NrI  rn   rK  maxBytesr   r"     
)	r   rB   ro  r8  rZ  shouldRolloverrM   r  r  )rF   rhr   s      rJ   test_should_not_rolloverz0RotatingFileHandlerTest.test_should_not_rollover  s   11GGg 2 3**401

 11'A 2 7**401

$''4 AGGEN !11'A 2 7**401

 ! s   EEWASI does not have /dev/null.c                     t         j                  j                  t        j                  dd      }| j                  |j                  | j                                      |j                          y )NrI  rn   r  )	r   rB   ro  r4  devnullrZ  r  r  rM   rF   r  s     rJ   !test_should_not_rollover_non_filez9RotatingFileHandlerTest.test_should_not_rollover_non_file  sR    
 11

Wq 2 :**4==?;<

rl   c                 P   t        | j                  d      5 }|j                  d       d d d        t        j                  j                  | j                  dd      }| j                  |j                  | j                                      |j                          y # 1 sw Y   txY w)Nr"  r  rI  r   r  )
r  r8  r  r   rB   ro  rE   r  r  rM   )rF   r   r  s      rJ   test_should_rolloverz,RotatingFileHandlerTest.test_should_rollover  ss    $''4 AGGEN !11$''GVW1X))$--/:;

	 ! s   BB%c                 ,   t        j                  | j                         t        j                  j                  | j                  d      }|j                  | j                                | j                  | j                         |j                          y )NrI  r  )
r4  rU  r8  r   rB   ro  rB  r  r  rM   r
  s     rJ   test_file_createdz)RotatingFileHandlerTest.test_file_created  s`     			$''11$''G1L
 477#

rl   c                 0   |rd|ini }t        j                  | j                         t        j                  j
                  | j                  fdddd|}| j                  t         j                  j                  | j                        |        t        j                  ddi      }t        j                  ddi      }| j                  |j                  |             | j                  |j                  |             |j                  |       | j                  | j                         | j                  t         j                  j                  | j                  d	z                | j                  |j                  |             | j                  |j                  |             |j                  |       | j                  t         j                  j                  | j                               | j                  | j                  d	z          | j                  t         j                  j                  | j                  d
z                | j                  |j                  |             | j                  |j                  |             |j                          y )NrL  rI  r   rZ  rK  backupCountr  r  rl  dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.1.2)r4  rU  r8  r   rB   ro  r  r[  r\  r   rZ  r  rB  r  rE   rM   )rF   rL  r6  r  smalllarges         rJ   test_max_bytesz&RotatingFileHandlerTest.test_max_bytes  s   %*'5!
		$''11GGN%1sNFLNbggnnTWW-5y9%%ucl3%%ug&67**512**512
477#$78**512))%01
tww/0477T>*$78))%01))%01

rl   c                 (    | j                  d       y )NT)rL  )r  rp   s    rJ   test_max_bytes_delayz,RotatingFileHandlerTest.test_max_bytes_delay  s    $'rl   c                 X   d }t         j                  j                  | j                  ddd      }||_        |j                  | j                                | j                  | j                         | j                  t        j                  j                   || j                  dz                      |j                  | j                                | j                   || j                  dz                | j                  t        j                  j                   || j                  dz                      |j                  | j                                | j                   || j                  dz                | j                  t        j                  j                   || j                  dz                      |j                  | j                                | j                  t        j                  j                   || j                  dz                      |j                          y )	Nc                     | dz   S N.testrw   r  s    rJ   namerz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namer  s    '>!rl   rI  r   rn   r  r  r  .3)r   rB   ro  r8  r  rB  r  r  rZ  r4  r[  r\  rM   )rF   r  r  s      rJ   test_rollover_filenamesz/RotatingFileHandlerTest.test_rollover_filenames  sp   	"11GGg1q 2 B
 477#dggn(=>?
 5401dggn(=>?
 5401dggn(=>?
 dggn(=>?

rl   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  rw   )rF   rH   s     rJ   r  z`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namer%  s    g~%rl   c                 v    t         j                  j                  |      rt        j                  ||dz          y y )N.rotated)r4  r[  r\  r  )rF   sourcedests      rJ   rotatorzbRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotator(  s*    77>>&)JJvtj'89 *rl   N)rs   rt   ru   r  r*  rw   rl   rJ   HandlerWithNamerAndRotatorr$  $  s    &:rl   r+  rI  r   rn   r  r  r  r'  )r   rB   ro  r8  r\   r  rB  r  r  rZ  r4  r[  r\  rM   )rF   r+  r  s      rJ   test_namer_rotator_inheritancez6RotatingFileHandlerTest.test_namer_rotator_inheritance#  s    	:)9)9)M)M 	: (GGg1qB$''*DGGg,=>
 477#
 288DGGdN3j@A4(@AB

rl   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.gzrw   r  s    rJ   r  z3RotatingFileHandlerTest.test_rotator.<locals>.namer8  s    %<rl   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rbrs  r"  )r  rc   zlibcompressr  r4  r  )r(  r)  sfr  
compresseddfs         rJ   r*  z5RotatingFileHandlerTest.test_rotator.<locals>.rotator;  sk    fd#rwwy!]]43
$%HHZ( & $
 IIf &% $#s#   3B A8B8B	=BBrI  r   rn   r  r  r0  r  r  r   )r   rB   ro  r8  r*  r  r  rB  r  r4  linesepr  rc   r1  
decompressr\   r  r  rZ  r[  r\  rM   )rF   r  r*  r  m1m2r8  newliner   r4  r  s              rJ   test_rotatorz$RotatingFileHandlerTest.test_rotator6  s2   	 	 11GGg1q 2 B
]]_
477#]]_
477T>"2**"d^qJ??:.DT[[1266G3CD  	 477T>"2"d^qJ??:.DT[[1266G3CD  	 477T>""d^qJ??:.DT[[1266G3CD  	dggn(=>?

% ^ ^ ^s'   !AKAK%*AK2K"%K/2K;NF)rs   rt   ru   r  r  r  r   is_wasir  r  r  r  r  r!  r,  requires_zlibr;  rw   rl   rJ   r  r    sk    ( X__W__&EF G.(&& W* *rl   r  c                   D   e Zd Z ej                  ej                  d      d        Zd ZddZ	d Z
d Zd Zd Zd	 Zd
 Z ej                   d      d        Z ej                   d      d        Z ej                   d      d        Z ej                   d      d        Zy)TimedRotatingFileHandlerTestr  c                    t         j                  j                  t        j                  ddd      }t        j                  d       t        j                  ddi      }| j                  |j                  |             |j                          y )NSrI  rn   rK  r  皙?r  ztesting - device file)r   rB   rp  r4  r	  r{  r}  r   rZ  r  rM   )rF   r  r   s      rJ   r  z5TimedRotatingFileHandlerTest.test_should_not_rolloverd  sp     66

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

3!!5*A"BC**1-.

rl   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)NrB  rI  rn   rC  r  r  ztesting - initialrD  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   r  ) r   rB   rp  r8  r=   r@   r   rB  r  r{  r}  rM   r  r>  rz  	timedeltastrftimer4  r[  r\  r  rb  r   listdirr  r  rS  r  r   r  rc   rE   )rF   r  r  r  r  foundr>  GO_BACKsecsprevr8  r  dnr   filesr[  tfs                    rJ   test_rolloverz*TimedRotatingFileHandlerTest.test_rollovero  s!   66wA 7 ? 9:
""E+>#?@
477#

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

2C1!,,r2BQEC/CLL1D$EECJJW3e;#**M'!+,ww||B*$_"'')$ %_ 
 	3' D %_s   J5-J5=J::K	c                 *   t        j                  | j                         t        j                  j	                         }|j                         }d|j                  dz  cxk  rdk  sXn t        j                  d|j                  dz  z
  dz         t        j                  j	                         }|j                         }|j                  d      }t        j                  d      }|rd|j                          nd	}t        d
      D ]{  }t        j                  j                  | j                  d||      }|j                  |       t        j                   dd| i      }|j#                  |       |j%                          } | j'                  | j                         t)        | j                  d      5 }	t+        |	      D ]  \  }}
| j-                  d| |
        	 d d d        t/        j0                  | j                  |j3                         dz
  fdz         t        d      D ]{  }t        j                  j                  | j                  d||      }|j                  |       t        j                   dd| i      }|j#                  |       |j%                          } |t        j4                  |rdnd      z
  }| j                   d|d}| j'                  |       t)        | j                  d      5 }	t+        |	      D ]  \  }}
| j-                  d| |
        	 d d d        t)        |d      5 }	t+        |	      D ]  \  }}
| j-                  d| |
        	 d d d        y # 1 sw Y   xY w# 1 sw Y   VxY w# 1 sw Y   y xY w)Ng?g    .Ag?g      ?r   )microsecondr  WMIDNIGHTr  rI  )rK  whenatTimer  z	testing1 r  rn   r   z	testing2    daysr   z%Y-%m-%d)r   rU  r8  r  r>  r{  rU  r}  r  r   r=   weekdayrz  rB   rp  r@   r   rB  rM   r  r  	enumerater  r4  utime	timestamprI  )rF   weeklyr>  rY  r  rX  rw  r  r  r   linerolloverDateotherfns                rJ   test_rollover_at_midnightz6TimedRotatingFileHandlerTest.test_rollover_at_midnight  s   !##%V''+1c1 JJf0044;<##'')CXXZFA. 9:&,3;;=/"*qA!!::'V ; EBOOC &&1#'?@BGGBKHHJ  	477#$''G,$Q<4	!ot4 ( - 	3==?Q.023qA!!::'V ; EBOOC &&1#'?@BGGBKHHJ  X//&QaHHWWIQ|H567#$''G,$Q<4	!ot4 ( - 'G,$Q<4	!ot4 ( -,% -, -, -,s$   7)M0>)M==)N	0M:=N	Nc                 (    | j                  d       y )NT)ra  )re  rp   s    rJ   test_rollover_at_weekdayz5TimedRotatingFileHandlerTest.test_rollover_at_weekday  s    &&d&3rl   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XrI  TrJ  rV  W7)r@  rb  r   rB   rp  r8  )rF   r@  s     rJ   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rl   c                    d}t         j                  j                  | j                  dddd       }	 |j	                  |      }| j                  ||dz          |j	                  |dz   dz
        }| j                  ||dz          |j	                  |dz         }| j                  ||dz          |j	                  |d	z         }| j                  ||dz          |j                          t        j                  d
dd      }t         j                  j                  | j                  ddd|      }	 |j	                  |      }| j                  ||dz          |j	                  |dz   dz
        }| j                  ||dz          |j	                  |dz         }| j                  ||dz          |j	                  |dz         }| j                  ||dz          |j                          y # |j                          w xY w# |j                          w xY w)Nr   rI  rW  TrK  rX  r  rY  Q rn   i  i_      i@ ж  )	r   rB   rp  r8  computeRolloverr\   rM   r  r{  )rF   currentTimer  rg   rY  s        rJ   "test_compute_rollover_daily_attimez?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attime  s   66GGgJT 7 #	''4FV[<%?@''l(BQ(FGFV[<%?@''l(BCFV[<%?@''l(BCFV[<%?@HHJr1a(66GGgJV 7 %	''4FV[<%?@''l(BQ(FGFV[<%?@''l(BCFV[<%?@''l(BCFV[<%?@HHJ' HHJ& HHJs   B$G! ,B$G6 !G36Hc           
         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                  ||       |j                  |d
z   dz
        }||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                  |dz         }||k7  r2t        dt        j                  z         t        dt               z         | j                  ||       |j                           y # |j                          w xY w)Nrn  ro  r   rZ  rI  zW%drn   T)rK  rX  intervalr  r  rY  rp  zfailed in timezone: %dzlocal vars: %si:	 rq  )rs  r{  r  r  tm_wdayrz  r   rB   rp  r8  rr  r  timezonelocalsr\   rM   )	rF   rs  todayrY  wdaydayr  rh   rg   s	            rJ   #test_compute_rollover_weekly_attimez@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attime  s1   $))+&kE11r1a({{5!))8C!!::'aUV ; )B)#: !"D3H #d
HL(L(E!++E2X%2T]]BC*VX56  2++EL,@1,DEX%2T]]BC*VX56  2$; 00H++EL,@AX%2T]]BC*VX56  2++EL,@AX%2T]]BC*VX56  2
[ Z 
s   F II%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|        |j#                  d      r)d }||
_        |D ]  }|j                  |d|d        |dk(  sd }||
_        |D ]  }|j                  d|z           |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 |j#                  d      r|D ]  }t        j                  j1                  |      \  }}| j3                  |j5                  d      |       | j3                  |j#                  |dz         xr |t/        |      dz      j7                                 9|dk(  s@|D ]y  }t        j                  j1                  |      \  }}| j3                  |j5                  d             | j3                  |j#                  d      xr |d   j7                                {  y # 1 sw Y   xY w)Nr  r  rg  %Y-%m-%d_%H-%M-%Sr#  rF  )a.bza.b.cd.ezd.e.fr  z%s.logrj   rZ  TrX  rv  r  rL  r  z.log.r  c                     t         j                  j                  |       \  }}|j                  dd      dz   }t         j                  j	                  ||      S )Nr  r   )r4  r[  r   r  r   ro  r  basenames      rJ   r  zHTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.namerF  sE    (*h(?%GX'//;fDH77<<::rl   r   r  r  c                     t         j                  j                  |       \  }}d|dd  z   dz   }t         j                  j                  ||      S )Nr     .oldlog)r4  r[  r   r   r  s      rJ   r  zHTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.namerN  sC    (*h(?%GX"Xab\1I=H77<<::rl   z
g%s.oldlogr"  r  z%s.log.r   r  rn   )r2  mkdtempr   shutilrmtreer  r>  rz  rb  rJ  rI  r4  r[  r   r   rB   rp  r  r  r  r^  getFilesToDeleter\   r]   r   rE   r_  isdigit)rF   wdtimesr  rw  prefixesrQ  rotatorsr   r  r*  r  r  r8  r   
candidatesr  r  s                     rJ   test_compute_files_to_deletez9TimedRotatingFileHandlerTest.test_compute_files_to_delete/  s"   _5r*""$rALL%89:($$Q//B  9FRF!23A&&??IJLMFJ @ LG OOG$  'ALL!:; ""5); !&ALL!:; 3; !&ALL!12 1 6 BR$Aa!  
 #8,IAvqkG 113JS_a<  '&#AGGMM!,EArOOBMM!$45 $ ""5)#AGGMM!,EArOOBKK$7<OOBMM&3,$? %B$&s6{Q$7$?$?$AC $
 3#AGGMM!,EArOOBKK	$:;OOBMM#$6$J2a5==?K $! - s   
N##N-	c                 \   t        j                  t        j                  d            }| j	                  t
        j                  |       g }t        j                  j                         }d}t        |      D ];  }|j                  |j                  d             |t        j                  d      z  }= d}g }g }t        |      D ]_  \  }	}
|	dz   }t        j                  j!                  ||
z  d	d|d
      }|j                  |       |D ]  }|j                  |
d|        a |D ]  }|j                  d|z          |D ]  }||z  j#                           t        |      D ]  \  }	}
|	dz   }||	   }|j%                         }| j'                  t)        |      ||z
  |       t+        j,                  d      }|D ]j  }t.        j0                  j3                  |      \  }}| j5                  |j7                  |
dz                |t)        |
      dz   d  }| j9                  ||       l  y )Nr  r  rg  r  r#  rF  )za.logza.log.brn   rj   Tr  r   z
a.log.%s.cz&^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\Z)pathlibPathr2  r  r   r  r  r  r>  rz  rb  rJ  rI  r^  r   rB   rp  touchr  r\   r]   rW   rX   r4  r[  r   rE   r  rU  )rF   r  r  r  n_filesr  r  rQ  r  rw  r   r  r*  r  r   r  matcherr  r  r8  r   s                        rJ   ?test_compute_files_to_delete_same_filename_different_extensionsz\TimedRotatingFileHandlerTest.test_compute_files_to_delete_same_filename_different_extensionsp  s   \\(**/BCr*""$wALL%89:($$Q//B   ("8,IAvA#K&&??VRUIJLWFJ @ LG OOG$23  - ALL)*  A!VNN  #8,IAvA#KqkG 113JS_g.CZPjj!JKGa(2fSj 9:S[],-  1	   -rl   zEST+05EDT,M3.2.0,M11.1.0c                     t         j                   } fd}t        j                  j                   j                  ddd       | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd
d
d       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |dddddd
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddddd
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |dddddd
       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddddd
       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |dddddd       |dddddd              | |dddddd
d       |dddddd              | |dddddd       |ddddd              | |ddddd
d
d       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          y )Nc                     j                  | j                               }||j                         z
  }|r(j                  |dt        j                  |             y y Nr   rF  rr  r`  r\   r  rI  currentrh   rg   diffr  rF   s       rJ   r  zOTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local.<locals>.test  T    ''(9(9(;<FH..00D  q(*<*<T*JK rl   rI  rW  FrK  rX  r    r  rg  r  ;      r   ro  rn   ry  r#  rm  r  r   fold      r  r   rB   rp  r8  rM   r{  rF   DTr  r  s   `  @rJ   $test_compute_rollover_MIDNIGHT_localzATimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local  st    	L 66GGgJE 7 C 	RaRR("T1b!Q*?@RaQ"BtQAq$9:RaQ"BtQAq$9:Rb!RR("T2q!Q*?@Rb!Q"BtRAq$9:Rb!Q"BtRAq$9:

66GGgJE==Q* 7 , 	RaRR("T1b"a*@ARaR#RaR%;<RaR#RaR%;<Rb!RR("T2q"a*@ARb!R#Rb!R%;<Rb!R#Rb!R%;<

66GGgJE==Aq) 7 + 	RaQB'D!RA)>?RaQ"BtQAq$9:RaQ"BtQAq$9:RaQB'D!RA)>?RaQ"BtQAq$9:RaQ"BtQAq$9:Rb!QB'D"aA)>?Rb!Q"BtRAq$9:Rb!Q"BtRAq$9: 	Rb!QB'D"aA)>?Rb!QBQ/D"aA1FGRb!Q"BtRAq$9:Rb!Q"BtRAq$9:

66GGgJE==B* 7 , 	RaQB'D!RB)?@RaQ#RaQ%;<RaQ"BtQAr$:;RaQB'D!RB)?@RaQ"BtQAr$:;RaQ#RaQ%;<Rb!QB'D"aB)?@Rb!Q#Rb!Q%;<Rb!Q"BtRAr$:;

66GGgJE==B* 7 , 	RaQB'D!RB)?@RaQ#RaQ%;<RaQB'D!RB)?@RaQ"BtQAr$:;RaQ#RaQ%;< 	Rb!Q"BtRAr$:;Rb!QB'D"aB)?@Rb!Q#Rb!Q%;<Rb!QB'D"aB)?@ 	Rb!Q*BtRAr,JKRb!QBQ/D"aBQ1OPRb!Q+Rb!Q-CDRb!QBQ/D"aB1GHRb!Q"BtRAr$:;Rb!Q#Rb!Q%;<

rl   c                     t         j                   } fd}t        j                  j                   j                  ddd       | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd
d
d       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |dddddd
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddddd
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  dddt        j                  ddd             | |dddddd
       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddddd
       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |dddddd       |dddddd              | |dddddd
d       |dddddd              | |dddddd       |ddddd              | |ddddd
d
d       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          y )Nc                     j                  | j                               }||j                         z
  }|r(j                  |dt        j                  |             y y r  r  r  s       rJ   r  zITimedRotatingFileHandlerTest.test_compute_rollover_W6_local.<locals>.test  r  rl   rI  W6Fr  r  r  ry  r  r  r#  r   ro  rn   rg     r  r  rm     r  r   r  r  r  r  s   `  @rJ   test_compute_rollover_W6_localz;TimedRotatingFileHandlerTest.test_compute_rollover_W6_local
  s	    	L 66GGgDe 7 = 	RaBB'D!Q1)=>RaAq!2dAr1a#89RaAq!2dAr1a#89Rb"b"b)2dBAq+ABRb"a#Rb!Q%:;Rb"a#Rb!Q%:;

66GGgDe==Aq) 7 + 	RaRR("T1b!Q*?@RaQ"BtQAq$9:RaQ"BtQAq$9:Rb!RR("T2q!Q*?@Rb!Q"BtRQ$:;Rb!Q"BtRQ$:;

66GGgDe==Q* 7 , 	RaBB'D!QA)>?RaB"BtQB$:;RaB"BtQB$:;Rb"b"b)2dBB+BCRb"b!$br1b!&<=Rb"b!$br1b!&<=

66GGgDe==Aq) 7 + 	RaAr2&4Aq!(<=RaAq!2dAr1a#89RaAq!2dAr1a#89RaQB'D!RA)>?RaQ"BtQAq$9:RaQ"BtQAq$9:Rb"aR("T2r1a*@ARb"a#Rb!Q%:;Rb"a#Rb!Q%:; 	Rb!QB'D"aA)>?Rb!QBQ/D"aA1FGRb!Q"BtRQ$:;Rb!Q"BtRQ$:;

66GGgDe==B* 7 , 	RaAr2&4Aq"(=>RaAr"BtQAr$:;RaAq!2dAr1b#9:RaQB'D!RB)?@RaQ"BtQAr$:;RaQ#RaQ%;<Rb"aR("T2r1b*ABRb"a$br1a&<=Rb"a#Rb!Q%;<

66GGgDe==B* 7 , 	RaQB'D!RB)?@RaQ#RaQ%;<RaQB'D!RB)?@RaQ"BtQAr$:;RaQ#RaQ%;< 	Rb!Q"BtRAr$:;Rb!QB'D"aB)?@Rb!Q#Rb"a%<=Rb!QB'D"b!R)@A 	Rb!Q*BtRAr,JKRb!QBQ/D"aBQ1OPRb!Q+Rb"a-DERb!QBQ/D"b!R1HIRb!Q"BtRQ$;<Rb!Q#Rb"a%<=

rl   c                     t         j                   } fd}t        j                  j                   j                  dddd       | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd	d
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  ddddt        j                  ddd             | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |ddddd
d
       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          y )Nc                     j                  | j                               }||j                         z
  }|r(j                  |dt        j                  |             y y r  r  r  s       rJ   r  zXTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_interval.<locals>.test  r  rl   rI  rW  Fr  rK  rX  r  rv  r  r  r  r  r  r   rs  ro  rn   rg  r  rr  ry  r   r#  r  rZ  rK  rX  r  rv  rY  r  r  s   `  @rJ   -test_compute_rollover_MIDNIGHT_local_intervalzJTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_interval  s    	L 66GGgJEA 7 O 	RaBB'D!RA)>?RaAq!2dAr1a#89RaAq!2dAr1a#89RaRR("T1b!Q*?@RaQ"BtQAq$9:RaQ"BtQAq$9:Rb!RR("T2q!Q*?@Rb!Q"BtRAq$9:Rb!Q"BtRAq$9:Rb!RR("T2q!Q*?@Rb!Q"BtRAq$9:Rb!Q"BtRAq$9:

66GGgJEA==Q* 7 , 	RaBB'D!RQ)?@RaB"BtQB$:;RaB"BtQB$:;RaRR("T1b"a*@ARaR#RaR%;<RaR#RaR%;<Rb!RR("T2q"a*@ARb!R#Rb!R%;<Rb!R#Rb!R%;<Rb!RR("T2q"a*@ARb!R#Rb!R%;<Rb!R#Rb!R%;<

rl   c                 @
    t         j                   } fd}t        j                  j                   j                  dddd       | |ddd	d
dd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd
dd       |ddd	dd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd
dd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd
dd       |ddddd              | |ddddd       |ddd	dd              | |ddddd       |ddd	dd             j                          t        j                  j                   j                  ddddt        j                  ddd             | |dddd
dd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd
dd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd
dd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddd
dd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          t        j                  j                   j                  ddddt        j                  ddd             | |dddddd       |ddddd              | |ddd	dd       |ddddd              | |ddd	dd       |ddddd              | |dddddd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddddd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd              | |dddddd       |ddddd              | |ddddd       |ddddd              | |ddddd       |ddddd             j                          y )Nc                     j                  | j                               }||j                         z
  }|r(j                  |dt        j                  |             y y r  r  r  s       rJ   r  zRTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_interval.<locals>.test  r  rl   rI  r  Fr  r  r  r      r  r  r#  r   r  ro  rn   ry     rg  rr  r     r  r  r     r  r  r  r  r  s   `  @rJ   'test_compute_rollover_W6_local_intervalzDTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_interval  s     	L 66GGgDea 7 I 	RaRR("T1aA*>?RaQ"BtQAq$9:RaQ"BtQAq$9:RaBB'D!RA)>?RaAq!2dAr1a#89RaAq!2dAr1a#89Rb"b"b)2dBAq+ABRb"a#Rb!Q%:;Rb"a#Rb!Q%:;Rb"b"b)2dBAq+ABRb"a#Rb"a%;<Rb"a#Rb"a%;<

66GGgDea==Aq) 7 + 	RaRR("T1b!Q*?@RaQ"BtQAq$9:RaQ"BtQAq$9:RaRR("T1b!Q*?@RaQ"BtQ1a$89RaQ"BtQ1a$89Rb"b"b)2dB1a+@ARb"a#Rb"a%;<Rb"a#Rb"a%;<Rb!RR("T2r1a*@ARb!Q"BtRQ$:;Rb!Q"BtRQ$:;

66GGgDea==Q* 7 , 	RaRR("T1aQ*?@RaR#RaR%;<RaR#RaR%;<RaBB'D!RQ)?@RaB"BtQB$:;RaB"BtQB$:;Rb"b"b)2dBB+BCRb"b!$br1b!&<=Rb"b!$br1b!&<=Rb"b"b)2dBB+BCRb"b!$br2r1&=>Rb"b!$br2r1&=>

rl   Nr<  )rs   rt   ru   r  r  r   r=  r  rS  re  rg  rk  rt  r}  r  r  run_with_tzr  r  r  r  rw   rl   rJ   r@  r@  c  s    X__W__&EF G((T)5V4B%P4l?LB&2T W34k 5k^ W34y 5yz W34. 5.d W34B 5Brl   r@  c                  Z    t        j                  di | t        j                  d      z  S )Nrn   rF  rw   )r  rI  )r  s    rJ   rN  rN    s&    ##x'9'9!'DDDrl   )rB  rn   )Mr"  )Hi  )Drn  )rW  rn  W0ry     )r\  hours)rn   r  c                    t         j                  j                  | j                  d||dd      }d}|j	                  |      }|j                  d      r|t        d|dz
  z  	      z  }n||z  }||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)NrI  r   T)rK  rX  rv  r  r  g        rV  rZ  rn   r[  rW  r  ry  r#  r"  zt: z ()rH  zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)r   rB   rp  r8  rr  r  rN  r  r{  r  	localtime	_MIDNIGHTr  rS  r  r  r\   rM   )rF   rX  rv  expr  rs  rg   r  currentHourcurrentMinutecurrentSecondr   r  r*  s                 rJ   test_compute_rolloverr    s   !!::'xUV\` ; bBK''4Fs#tHQJ00xf} :%W66 $K 8A ${ ;A&'d()!()!#,,66;;K8E<FIK;L -;. / "-qa8szzJ/+=CJJO1MA

S1MA

Sgk

;lV3#**E S&)HHJ % W@1D3::VVWs   <D6G 	HHHztest_compute_rollover_%s	_intervalz>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 MessageFrZ  zTest Log Message
Tz3Record not found in event log, went back %d recordsr  )win32evtlogOpenEventLogGetNumberOfEventLogRecordsr   rB   NTEventLogHandler
pywintypesr   winerrorr  SkipTestr   rY  rM   
assertLessEVENTLOG_BACKWARDS_READEVENTLOG_SEQUENTIAL_READReadEventLog
SourceNamewin32evtlogutilSafeFormatMessagerE   )rF   logtypeelhnum_recsrT   r*  r   flagsrL  rM  eventsr  s               rJ   r`  z NTEventLogHandlerTest.test_basic;  sT   &&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)rs   rt   ru   r`  rw   rl   rJ   r  r  9  s    (rl   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  r  r  )not_exported)r   check__all__r   )rF   r  s     rJ   test__all__zMiscTestCase.test__all__^  s    ,
 	T7Frl   N)rs   rt   ru   r  rw   rl   rJ   r  r  ]  s    Grl   r  c                  V    t        j                  t        j                  dd             y )NLC_ALLr   )r  enterModuleContextr   run_with_localerw   rl   rJ   setUpModuler  j  s     7 7" EFrl   __main__r   r<  )rv   r   logging.handlerslogging.configr  r  r%   r  r  r.  r6   r  r  r  r4  r  r~  rW   r  r  r,  rS  r2  test.support.script_helperr   r   r  r   test.supportr   r   r   r	   r
   r   r   test.support.logging_helperr   r  r  r  r{  r  r  r  http.serverr   r   unittest.mockr   urllib.parser   r   socketserverr   r   r   r   r  r  r  r  r1  r  HAVE_ASAN_FORK_BUGr  check_sanitizerr  TestCaser   ry   r   SILENTr   TERSEEFFUSIVEr   r"  	TALKATIVEr   
CHATTERBOXBORINGrz  r   r   r   r   r   r   r9  r;  r  r  r;   r  r  r  r  r  r  r  r-  r;  rE  rI  rN  rE  r  rP  re  r=   r  r  r  r  rG  rA  rG  rR  rV  rd  IPV6_ENABLEDrg  rm  r  r  r  r  r  r  r  rB   r  r  r  r  r  r  r  r  r  r  r  rK  r`  r	  rw  ry  r  r  r  rI  r  tzinfor  r  r  r  r   r  r  r&  r-  r5  r  r*  rC  rv  r  r  rd  r   r~  r  r  r  r  r  r  r@  rN  rX  r  rv  r  rH   rs   r7  r  r  r  mainrw   rl   rJ   <module>r	     s  "          	  	  	   	    
  N  & " & ) ( !  3        :  +D D633	 $HOOEG  $HOOG4(-/ 
j'x   j'ZUI UIn<%h <%L 		
FFQJ' (*	'**)++,
( +gnn +: :C' C'LU2( U2p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 		%++ 	) )	1 	2  p?X p?f5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
l1)) l1^.G)) .+ +57(( 5`>- `>FH8 H25l 5,Zl Zx[
< [
|E  %,1B/0ID# -1H# $	J *D0a<KD)-&,d4IJU j ["bc (H  ( d (FG8$$ GG zHMMO QY  6155K5/J6
  		s$   ^ %^ ^^^&%^&