
    daf                       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l0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 	 ddl8Z8ddl9Z9ddl:Z:	 ddl<Z< e*jz                  ej|                  d      Z? e*jz                   ej                  d      d      ZA G d de*j                        ZC G d deC      ZD G d deC      ZEdZFdZGdZHdZIdZJdZKd ZLd!ZMd"ZNd#ZO ePeOeFd$z         ZQeFd%eGd&eHd'eId(eJd)eKd*eLd+eMd,eNd-eOd.i
ZR G d/ d0ej                        ZT G d1 d2ej                        ZU G d3 d4eC      ZVd5 ZW G d6 d7eC      ZX G d8 d9eY      ZZ G d: d;ej                        Z\ G d< d=eY      Z] G d> d?eC      Z^ G d@ dAe#j                        Z` G dB dCeY      Za G dD dEeae.      Zb G dF dGeae6      Zc G dH dIeae4      Zd eeedJ      r G dK dLec      Zf G dM dNed      Zg ej                          e j                          G dO dPeC                    Zj G dQ dReC      Zk G dS dTej                        ZmdU Zn G dV dWeC      Zo ej                          e j                          G dX dYeC                    Zp e*j                   eeedJ      dZ       G d[ d\ep             Zr ej                          e j                          G d] d^eC                    Zs e*j                   eeedJ      dZ       G d_ d`es             Zt ej                          e j                          G da dbeC                    Zu e*j                   eeedJ      dZ       G dc ddeu             Zv e*j                  ej                  de       G df dgeu             Zx ej                          e j                          G dh dieC                    Zy G dj dkeC      Zz G dl dmeC      Z{ G dn doeC      Z|ddpZ} G dq dr      Z~ds Z G dt duej                        Z G dv dwej                  j                        Z G dx dyej                        Zdz Zdd{Z G d| d}eC      Z G d~ deC      Z G d deC      Z G d dej                        Z G d deC      Z e j                          G d deC             Z eeej                  d      r)ddlZddlmZ  e j                          G d deC             Z ej&                  d      Z G d dej*                        Z e       Z G d d      Z G d de*j                  e      Z G d dej4                        Z G d de*j                        Z G d deC      Z G d deC      Z G d d      Z G d dej@                        Z G d deC      Z G d deC      Z G d deC      Z G d de*j                        Z G d de*j                        Z G d dejN                        Z G d d      Z G d dejN                        Z G d deCe      Z G d deC      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                  e8dƫ       G dǄ deC             Z G dɄ de*j                        Zd˄ Zedk(  r e*jv                          yy# e;$ r
 dxZ8xZ9Z: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)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         ,/root/Python-3.12.4/Lib/test/test_logging.pysetUpzBaseTest.setUp`   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) r7   closer2   removeHandlerr;   rA   r8   r4   r   r"   r+   clearupdater,   r)   r*   r#   r%   r'   r&   r   r    disabler!   r(   r-   r   r/   
doCleanupsr	   threading_cleanupr   )rE   hr    r!   r-   rG   s         rI   tearDownzBaseTest.tearDown   s    	&&t~~6''  ))!,A**1-GGI '' 	!!$"="=>	#  &&(  ''(@(@A  &&(  ''(@(@A##%$$T%8%89&*&=&=G  #'')11GGO ++Jd001 ..M** L &28Ed8KD&&t,5L   "**D,?,?@   "s   +E.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)r7   recompileexpected_log_patgetvalue
splitlinesassertEquallenzipsearchfailtuplegroupsread)	rE   expected_valuesr7   patactual_linesactualexpectedmatchss	            rI   assert_log_lineszBaseTest.assert_log_lines   s     &4;;jj5 5 56(335\*C,@A #L/ B 	>FHJJv&E		G"# $U5<<>2H=	> KKMII@1DE     c                 J    | xj                   dz  c_         d| j                   z  S )zMGenerate a message consisting solely of an auto-incrementing
        integer.   z%d)message_numrE   s    rI   next_messagezBaseTest.next_message   s&     	Ad&&&&rk   NN)__name__
__module____qualname____doc__r=   rX   rn   rJ   rT   rj   rp    rk   rI   r   r   X   s-    '9J4K(4T ADF$'rk   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))rz   CRITICAL1)rz   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|   r9   11)rp   r   r   r8   r   LoggerAdapterr   r9   logr}   errorwarninginfodebugrj   )rE   mrz   r{   r|   s        rI   	test_flatzBuiltinLevelsTest.test_flat   sr   &W]]###G$5$5e$<bAW\\"&W]]# 	  !#&		!#  !#&		!#AC  !#&		!#AC		!# 	AC		!#		!# 
 	rk   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   rp   r   r   r8   r   r   r   r}   r   r   r   r   rj   )rE   r   r{   INF_ERRs       rI   test_nested_explicitz&BuiltinLevelsTest.test_nested_explicit   s    &W\\"$$Y/' 	G$$ac*ac 	QSac(%
 	rk   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   )rE   r   r{   r   	INF_UNDEFINF_ERR_UNDEFr   s          rI   test_nested_inheritedz'BuiltinLevelsTest.test_nested_inherited  s>   &W\\"$$Y/'%%k2	))/:!!'* 	g&&,!#qs'**AC0AC  	ac"13AC  
 	rk   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   )
rp   r   r   r8   r   r   FATALr   r   rj   )rE   r   r{   
GRANDCHILDCHILDs        rI   test_nested_with_virtual_parentz1BuiltinLevelsTest.test_nested_with_virtual_parent1  s    &&&'<=
!!/2W\\" 	w}}ac*		'--%

13 	AC 
 	rk   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   ro   s    rI   test_regression_22386z'BuiltinLevelsTest.test_regression_22386K  s@    --f5w||D--gll;VDrk   c                 n    t        j                  d      }| j                  |t         j                         y )Nr   )r   r   r[   r   )rE   fatals     rI   test_issue27935z!BuiltinLevelsTest.test_issue27935P  s&    $$W-.rk   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   ro   s    rI   test_regression_29220z'BuiltinLevelsTest.test_regression_29220T  s    W\\2.,,gllFC--gll;R@--gnn=xH--h7Hrk   N)rr   rs   rt   ru   r   r   r   r   r   r   r   rv   rk   rI   rx   rx      s,    4-^.!F4E
/Irk   rx   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   Filterr2   rA   	addFilterr   r   rp   rj   removeFilter)rE   filter_handlerr   	spam_eggsspam_eggs_fishspam_bakedbeanss          rI   test_filterzBasicFilterTest.test_filter`  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   )rG   splitjoin)recordpartsprefixs      rI   
filterfuncz8BasicFilterTest.test_callable_filter.<locals>.filterfunc|  s5    KK%%c*EXXeBQi(F[((rk   r   r   r   r   r   r   r   )	r2   rA   r   r   r   r   rp   rj   r   )rE   r   r   r   r   r   r   s          rI   test_callable_filterz$BasicFilterTest.test_callable_filterx  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 )NrG   r   )r   r   makeLogRecordrD   filter)rE   frs      rI   test_empty_filterz!BasicFilterTest.test_empty_filter  s7    NN!!6;"78$rk   N)rr   rs   rt   ru   r   r   r   rv   rk   rI   r   r   \  s    (*0-:%rk   r   x   w   v   u   t   s   r   q   p   o   rm   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rE   r   s     rI   r   zGarrulousFilter.filter  s    ~~**rk   Nrr   rs   rt   ru   r   rv   rk   rI   r   r     s
    3+rk   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     rI   r   zVerySpecificFilter.filter  s    ~~h%999rk   Nr   rv   rk   rI   r   r     s
    ?:rk   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   rJ   my_logging_levelsitemsr   r   )rE   kvs      rI   rJ   z CustomLevelsAndFiltersTest.setUp  s:    t%++- 	'DAq  A&	'rk   c                 Z    t         D ]"  }|j                  || j                                $ y r   )LEVEL_RANGEr   rp   )rE   loggerlvls      rI   log_at_all_levelsz,CustomLevelsAndFiltersTest.log_at_all_levels  s(     	1CJJsD--/0	1rk   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    rI   replace_messagezWCustomLevelsAndFiltersTest.test_handler_filter_replaces_record.<locals>.replace_message  s    YYv&F'FJMrk   parentzparent.childzoriginal messagezoriginal message
znew message!
)r   	LogRecordr   r5   r6   r:   r   rC   r   flushr[   rY   )rE   r  r  childstream_1stream_2	handler_1	handler_2s           rI   #test_handler_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_handler_filter_replaces_record  s    	G$5$5 	 ""8,!!.1;;=;;=))(3	))(3	O,)$#

%&**,.BC**,.>?rk   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$   )rE   r   recordss     rI   r   z^CustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter.filter  s"    BvJ'yy((rk   N)rr   rs   rt   r   r  r   )r  s   rI   RecordingFilterr    s    )W%6%6 )rk   r  r   r  r   )
setr   r   r   r8   r   r   r   r[   r\   )rE   r  r   r  s      @rI   #test_logging_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_logging_filter_replaces_record  s~    %	)gnn 	)
 ""8,%*+*+ECL)rk   c                     | j                   j                  t               | j                  | j                          | j	                  g d       y )N)r   r   r   r   r   r   r   r   r   r   r   r   )r2   r8   VERBOSEr  rj   ro   s    rI   test_logger_filterz-CustomLevelsAndFiltersTest.test_logger_filter  s=    !!'*t//0 
 	rk   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   )r2   rA   r8   r   r  rj   r   r   ro   s    rI   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)r2   rA   r   r   r  rj   r   r   )rE   r   specific_filtergarrfirst_liness        rI   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)rr   rs   rt   ru   rX   rJ   r  r  r  r"  r$  r/  rv   rk   rI   r   r     s2    J 3'
1@8*"B ('rk   r   c                  `    t        j                  | i |\  }}t        j                  |       |S r   )tempfilemkstemposrL   )argskwargsfdfns       rI   make_temp_filer8  U  s+    t.v.FBHHRLIrk   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   HandlerrG   r[   assertRaisesNotImplementedErroremitrE   rS   s     rI   	test_namezHandlerTest.test_name\  s\    OO+!!12-qvvt<rk   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  TestrG  z/var/run/syslogz/dev/log)GETPOSTPUTrP  	localhostz/logr   rm   )sysplatformr8  r3  unlinkr   rA   WatchedFileHandlerdevinor[   r   handleassertFalsepathexistsrD   rL   SysLogHandlerfacilityLOG_USER
unixsocketOSErrorr?  
ValueErrorHTTPHandlerBufferingHandlershouldFlush)	rE   existingr7  rS   rV  rW  r   socknamemethods	            rI   test_builtin_handlersz!HandlerTest.test_builtin_handlersd  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arS   rE  rJ  rH  N)r8  r3  rT  r   FakePathr   FileHandlerrA   RotatingFileHandlerTimedRotatingFileHandlerrR  rS  rU  rD   rZ  r[  rL   )rE   r7  pfncasesclsr4  rS   s          rI   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		rk   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      )	ranger3  rT  timedeletion_timer`  sleeprandomrandint)fnametries_rE   s      rI   remove_loopz*HandlerTest.test_race.<locals>.remove_loop  sg    5\ 9IIe$)-D& 

56>>!Q#7789  s   .A..	A:9A:i  FT.logztest_logging-3-targetr4  TrH  rI  z'%(asctime)s: %(levelname)s: %(message)s{Gzt?r  testingzDeleted at z, opened at )handle_timer{  r8  	threadingThreaddaemonstartr   rA   rU  r<   r?   ry  rz  r|  r   rX  	Exceptionprintr   rL   r3  rZ  r[  rT  )rE   r  	del_count	log_countrK  r7  removerrS   r   r  r   s   `          rI   	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wtrH  rJ  r7   )super__init__r   r:   opensub_handlerrE   	__class__s    rI   r  zJHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__  s.     "#*#8#8TGD$F rk   c                     | j                   j                          	 | j                   j                  |       | j                   j                          y # | j                   j                          w xY wr   )r  acquirerA  releaser   s     rI   rA  zFHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit  sR      ((*/$$))&1$$,,.D$$,,.s   A A.rr   rs   rt   r  rA  __classcell__r  s   @rI   _OurHandlerr    s    F
/rk   r  r   z*because we need at least one for this testrm    test_post_fork_child_no_deadlockc                  :   t        j                          	 j                          	 j                           j	                  d       j                          	 t        j                          y # j                          w xY w# t        j                          w xY w)N      ?)r   r"   r  r  waitr  r/   )+fork_happened__release_locks_and_end_threadlocks_held__ready_to_forkrefed_hs   rI   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  rG   z#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)exitcodeN)r   r>  r[   r\   r#   r   r  r7   rL   rG   assertGreater_at_fork_reinit_lock_weaksetr   rC   r8   r9   r  Eventr  r  r  r3  forkr   _exitr  r   r   wait_process)	rE   r  test_loggerr  lock_holder_threadpidr  r  r  s	         @@@rI   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)rr   rs   rt   rC  rh  rs  unittestskipIfr3  rG   r   is_emscriptenr	   requires_working_threadingrequires_resourcer  requires_forkskip_if_asan_forkskip_if_tsan_forkr  rv   rk   rI   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2rk   r:  c                       e Zd Zd Zy)	BadStreamc                     t        d      )Ndeliberate mistake)RuntimeError)rE   datas     rI   writezBadStream.write4  s    /00rk   N)rr   rs   rt   r  rv   rk   rI   r  r  3  s    1rk   r  c                       e Zd Zd Zy)TestStreamHandlerc                     || _         y r   )error_recordr   s     rI   handleErrorzTestStreamHandler.handleError8  s
    "rk   N)rr   rs   rt   r  rv   rk   rI   r  r  7  s    #rk   r  c                   (    e Zd Zej                  ZdZy)StreamWithIntNamer   N)rr   rs   rt   r   r   levelrG   rv   rk   rI   r  r  ;  s    NNEDrk   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   raiseExceptionsrX  assertIsr  r:   r   captured_stderrassertInrY   r[   )rE   rS   r   	old_raisestderrr  s         rI   test_error_handlingz%StreamHandlerTest.test_error_handling@  s	   ik*!!"%++		0HHQKMM!..!,%%ik2A((* 6f<c6??#456
 ',G#((* 8f  V__%678 '0G#6 68 8 '0G#s<   AE 4D9'E 32E%E 9E>E E
E Ec                 @   t        j                         }t        j                         }|j	                  |      }| j                  |t        j                         |j	                  |      }| j                  ||       |j	                  |      }| j                  |       y)z3
        Test setting the handler's stream
        N)	r   r:   r5   r6   	setStreamr  rR  r  assertIsNone)rE   rS   r7   oldrf   s        rI   test_stream_settingz%StreamHandlerTest.test_stream_settingV  su     !!#kk&!c3::&S!ff%S!&!rk   c                 t    t        j                  t                     }| j                  t	        |      d       y )Nz<StreamHandler 2 (NOTSET)>)r   r:   r  r[   reprrB  s     rI   'test_can_represent_stream_with_int_namez9StreamHandlerTest.test_can_represent_stream_with_int_named  s+    !!"3"56a">?rk   N)rr   rs   rt   r  r  r  rv   rk   rI   r  r  ?  s    0,"@rk   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_datarm   F)
r   
SMTPServerr  socketgetsocknameport_handler_thread_quitpoll_interval)rE   addrr   r  sockmaps        rI   r  zTestSMTPServer.__init__  s\    !!$d.2 	" 	4KK++-a0	
*rk   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  )rE   peermailfromrcpttosr  s        rI   process_messagezTestSMTPServer.process_message  s     	dHgt4rk   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  rE   ts     rI   r  zTestSMTPServer.start  C     %++43E3E262D2D1FH 	Hq		rk   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`.
        rm   )r  countN)r  r   loop_map)rE   r  s     rI   r  zTestSMTPServer.serve_forever  s(     **MM-TYYa@ **rk   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  rL   r   	close_allr   ro   s    rI   stopzTestSMTPServer.stop  sA    
 
$$T\\2

tyyT:rk   N)	rr   rs   rt   ru   r  r  r  r  r  rv   rk   rI   r  r  k  s!    (+
5	A	;rk   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)rE   r   r  s      rI   r  zControlMixin.__init__  s&    *__&
rk   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     rI   r  zControlMixin.start  r  rk   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  )rE   r  r  s     rI   r  zControlMixin.serve_forever  s"    
 	

lD/>rk   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	  rN   ro   s    rI   r  zControlMixin.stop  sL     	<<#((6DL

rk   )	rr   rs   rt   ru   r  r  r  r  r  r  s   @rI   r  r    s    '?	rk   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)rE   rG   defaults      rI   __getattr__zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.__getattr__  s%    ??5)///$T**rk   c                 :    | j                   j                  |        y r   serverr  ro   s    rI   r  zMTestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.process_request      $$T*rk   c                 ,    rt        |   |g|  y y r   )r  log_message)rE   formatr4  DelegatingHTTPRequestHandlerr  r   s      rI   r   zITestHTTPServer.__init__.<locals>.DelegatingHTTPRequestHandler.log_message  s)    6,,2;59; rk   r   )rr   rs   rt   r  r  r   r  )r  r"  r   s   @rI   r"  r    s    +
+; ;rk   r"  )r   r   r  r  sslctx)rE   r  r   r  r   r#  r"  s       ` @rI   r  zTestHTTPServer.__init__  s>    	;+A 	; 	D$(DEdG];rk   c                     	 | j                   j                         \  }}| j                  r| j                  j                  |d      }||fS # t        $ r(}t
        j                  j                  d|z          d }~ww xY w)NT)server_sidezGot an error:
%s
)r  acceptr#  wrap_socketr`  rR  r  r  )rE   sockr  es       rI   get_requestzTestHTTPServer.get_request  sv    	++-JD${{{{..t.F
 Tz	  	JJ2Q67	s   AA 	A=#A88A=)r  FN)rr   rs   rt   ru   r  r*  rv   rk   rI   r  r    s    	 58#'&	rk   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  ro   s    rI   rX  zBTestTCPServer.__init__.<locals>.DelegatingTCPRequestHandler.handle%  r  rk   N)rr   rs   rt   rX  rv   rk   rI   DelegatingTCPRequestHandlerr/  #  s    +rk   r1  )r   r   r  r  )rE   r  r   r  bind_and_activater1  s         rI   r  zTestTCPServer.__init__!  s;    	+*> 	+ 	##D$0K$5	7dG];rk   c                 n    t         t        |           | j                  j	                         d   | _        y Nrm   )r  r,  server_bindr  r  r  r  s    rI   r5  zTestTCPServer.server_bind+  )    mT.0KK++-a0	rk   r  T)rr   rs   rt   ru   allow_reuse_addressr  r5  r  r  s   @rI   r,  r,    s%     47#'<1 1rk   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  ro   s    rI   rX  zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.handleD  r  rk   c                     | j                   j                         }|r	 t        |           y y # t        $ r | j
                  j                  s Y y w xY wr   )wfilerY   r  finishr`  r  _closed)rE   r  DelegatingUDPRequestHandlerr  s     rI   rA  zBTestUDPServer.__init__.<locals>.DelegatingUDPRequestHandler.finishG  sV    zz**,"94GI  # "#{{22!  3"s   /  AA)rr   rs   rt   rX  rA  r  )r  rC  s   @rI   rC  r=  B  s    +" "rk   rC  F)r   r   r  r  rB  )rE   r  r   r  r2  rC  s        @rI   r  zTestUDPServer.__init__@  sE    	"*@ 	" 	##D$$?$5	7 	dG];rk   c                 n    t         t        |           | j                  j	                         d   | _        y r4  )r  r:  r5  r  r  r  r  s    rI   r5  zTestUDPServer.server_bindV  r6  rk   c                 8    t         t        |           d| _        y )NT)r  r:  r  rB  r  s    rI   r  zTestUDPServer.server_closeZ  s    mT/1rk   r7  )rr   rs   rt   ru   r  r5  r  r  r  s   @rI   r:  r:  /  s$      58#',1 rk   r:  AF_UNIXc                   $    e Zd Zej                  Zy)TestUnixStreamServerNrr   rs   rt   r  rF  address_familyrv   rk   rI   rH  rH  _      rk   rH  c                   $    e Zd Zej                  Zy)TestUnixDatagramServerNrI  rv   rk   rI   rM  rM  b  rK  rk   rM  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 ✓rm   z
Subject: Log
u   

Hello ✓)r  r   HOSTr  r  r  r   rA   SMTPHandlerTIMEOUTr[   toaddrsmessagesr   r  r  handledrX  r  r  rD   is_setr\   r  endswithrL   )
rE   r  r  r  rS   r   r  r  r  r  s
             rI   
test_basiczSMTPHandlerTest.test_basicm  su   !3!3Q 79M9Mu ')""FKK0((tUE15 ) ?UG,!!5."9: (	$,,'++-.T]]+Q/(,a(8%h4(5'*($/&89:		rk   c                 n    | j                   j                  |       | j                  j                          y r   )rZ  appendr[  r  )rE   r4  s     rI   r  zSMTPHandlerTest.process_message  s$    T"rk   N)rr   rs   rt   r   LONG_TIMEOUTrX  r^  r  rv   rk   rI   rO  rO  g  s     ""G0rk   rO  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   rJ   r   rA   MemoryHandlerr   r;   mem_hdlrr   
mem_logger	propagaterC   ro   s    rI   rJ   zMemoryHandlerTest.setUp  sj    t((66r7??7;~~G!++E2$%!""4==1rk   c                 b    | j                   j                          t        j                  |        y r   )rh  rL   r   rT   ro   s    rI   rT   zMemoryHandlerTest.tearDown       $rk   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)r9   r~   r   r   )r   r   )rx     	   re  r9   )ri  r   rp   rj   r   r   ry  str)rE   linesnis       rI   
test_flushzMemoryHandlerTest.test_flush  sX    	d//12b!T..01b! 1 1 34

 	e$ 	)A1X ;%%d&7&7&9:;!!%( OO!!$"3"3"56aR8HI1gs1v.IIE!!%(	) 	d//12e$	 Js   =F$c                    | j                   j                  | j                                | j                  g        | j                   j	                  | j                                | j                  g        | j                   j                  | j                         | j                  j                          ddg}| j                  |       t        j                  j                  dt        j                  | j                  d      | _        | j                   j                  | j                         | j                   j                  | j                                | j                  |       | j                   j	                  | j                                | j                  |       | j                   j                  | j                         | j                  j                          | j                  |       y)zO
        Test that the flush-on-close configuration works as expected.
        rn  ro  re  FN)ri  r   rp   rj   r   rM   rh  rL   r   rA   rg  r   r;   rC   rE   rs  s     rI   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$rk   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.
        handlerListrn  ro  re  FN)ri  r   rp   rj   r   r   r  weakrefrefrh  rA   rg  r   r;   rC   rx  s     rI   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$rk   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   )rh  threads)rE   rh  s     rI   r  zcMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.__init__  s     (!rk   c                 :    | j                   j                  d        y r   )rh  	setTargetro   s    rI   removeTargetzgMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.removeTarget  s    ''-rk   c                     t        j                  | j                        }| j                  j	                  |       |j                          y )N)r  )r  r  r  r  r`  r  )rE   r  r   s      rI   rX  zaMemoryHandlerTest.test_race_between_set_target_and_flush.<locals>.MockRaceConditionHandler.handle  s3    "))1B1BC##F+rk   N)rr   rs   rt   r  r  rX  rv   rk   rI   MockRaceConditionHandlerr    s    ".rk   r  re  r  znot flushedflushed)rh  r  ry  rz  r|  ri  r   r   r  r	   r  )rE   r  r  r  r   s        rI   &test_race_between_set_target_and_flushz8MemoryHandlerTest.test_race_between_set_target_and_flush  s    	 	 *$--8		5MM##F+2Y 3

5!$$]3''	23
 !.. 5 ,,V45&.. 5 ,,V45s   A6B< <(C$N)rr   rs   rt   ru   rX   rJ   rT   rv  ry  r  r	   r  r  rv   rk   rI   rc  rc    sF    & 32 %8%<%: 10025 35rk   rc  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   )rr   )rE   eis     rI   formatExceptionz"ExceptionFormatter.formatException  s    benn,,rk   N)rr   rs   rt   ru   r  rv   rk   rI   r  r    s
    (-rk   r  c                 N    | j                          t        j                  |       y r   rL   r3  remove)rS   r7  s     rI   closeFileHandlerr    s    GGIIIbMrk   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 )NrJ  rH  )r5   r6   textwrapdedentr   config
fileConfig)rE   confr5  files       rI   apply_configzConfigFileTest.apply_config2  s5    {{8??401!!$CCFCrk   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   rp   r   rj   rE   outputr   s      rI   test_config0_okzConfigFileTest.test_config0_ok6  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  r5   r6   r  r  r  configparserConfigParser	read_filer   r  r  r   r   rp   r   rj   )rE   r  r  cpr   s        rI   test_config0_using_cp_okz'ConfigFileTest.test_config0_using_cp_okE  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   rp   r   rj   rE   r  r  r   s       rI   test_config1_okzConfigFileTest.test_config1_okW      $$& 	&&f%&&'89FKK))+,LL**,-!!#  " 
 !!"%	& 	& 	&   BB))B2c                 Z    | j                  t        | j                  | j                         y r   r?  r  r  config2ro   s    rI   test_config2_failurez#ConfigFileTest.test_config2_failuref      )T%6%6Erk   c                 Z    | j                  t        | j                  | j                         y r   r?  r  r  config3ro   s    rI   test_config3_failurez#ConfigFileTest.test_config3_failurej  r  rk   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  	exceptionrR  stdoutseekr[   rY   rj   r  s      rI   test_config4_okzConfigFileTest.test_config4_okn  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  config5ro   s    rI   test_config5_okzConfigFileTest.test_config5_ok}      DLL1rk   c                 <    | j                  | j                         y r  )r  config6ro   s    rI   test_config6_okzConfigFileTest.test_config6_ok  r  rk   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   rp   r   criticalrj   config7rY  r   rE   r  r   
hyphenateds       rI   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-rt  \z\\)r1  r   )check_no_resource_warningr8  r3  rG   replaceconfig8r!  r  r   rootrA   r   r  )rE   r7  r  r   s       rI   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  rA   	formatterr!  r   r[   )rE   r  results      rI   test_config9_okzConfigFileTest.test_config9_ok  s    $,,'LL))!,66	!!'"7"7"HI!78!!'"7"7=9#; <!67rk   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   rY  r   rD   rE   r   s     rI   test_logger_disablingz$ConfigFileTest.test_logger_disabling  s    $++,""#9:)$++,($++eL)rk   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   rA   rG   )rE   test_configs     rI   test_config_set_handler_namesz,ConfigFileTest.test_config_set_handler_names  sC    ( 	+&**,55a8==wGrk   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
            )	r5   r6   r  r  r?  r  r   r  r  )rE   r  r  s      rI   'test_exception_if_confg_file_is_invalidz6ConfigFileTest.test_exception_if_confg_file_is_invalid  s>    . {{8??;78,(A(A4Hrk   c                     t        j                  dd      \  }}t        j                  |       | j	                  t
        t        j                  j                  |       t        j                  |       y )Ntest_empty_.inir   suffix)
r1  r2  r3  rL   r?  r  r   r  r  r  )rE   r6  r7  s      rI   %test_exception_if_confg_file_is_emptyz4ConfigFileTest.test_exception_if_confg_file_is_empty  sJ    !!vFB
,(A(A2F
		"rk   c                 b    | j                  t        t        j                  j                  d       y )Nfilenotfound)r?  FileNotFoundErrorr   r  r  ro   s    rI   ,test_exception_if_config_file_does_not_existz;ConfigFileTest.test_exception_if_config_file_does_not_exist  s    +W^^-F-FWrk   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  asciirH  rm   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)rJ  defaultsN)r  r  stripr1  r2  r3  r  encoderL   r   r  r  dictrT  )rE   inir6  r7  s       rI   !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)&rr   rs   rt   ru   r
   r  rX   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  rv   rk   rI   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*rk   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.rQ  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?rQ  r   r   )r   rJ   r  	sock_hdlrserver_exceptionserver_classaddresshandle_socketr  r`  r	  r  r   rA   SocketHandler
isinstanceserver_addressr`   r  
log_outputr2   rM   rC   r  	Semaphorer[  rE   r  r)  hclss       rI   rJ   zSocketHandlerTest.setUpE  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  r2   rM   rL   r  r  r   rT   ro   s    rI   rT   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                          )Nrx  >Lr   
)
connectionrecvr\   structunpackpickleloadsr   r   r  r  r[  r  )rE   requestconnchunkslenobjr   s          rI   r  zSocketHandlerTest.handle_socketj  s    !!IIaLE5zA~==u-a0DIIdOEe*t#		$U*; << e*t#,,u%C**3/FOOvzzD00OLL  " rk   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     rI   test_outputzSocketHandlerTest.test_outputy  sy      MM$//0""5)VV.9rk   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, eitherrQ  zNor this)r  r7  r  
retryStartr  r  r  r2   r  r   rz  r  	retryTimer|  )rE   nows     rI   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)rr   rs   rt   ru   r,  r  r  rJ   rT   r  r8  r=  rv   rk   rI   r  r  <  s*     * LG.4	$#	:+rk   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.rF  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   create_unix_domain_namer  r   r   rT  r  rJ   ro   s    rI   rJ   zUnixSocketHandlerTest.setUp  8    $<<>	(($,,7%rk   N)	rr   rs   rt   ru   hasattrr  rH  r  rJ   rv   rk   rI   r?  r?    s     4vy!+&rk   r?  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  rQ  r   r   )r   rJ   r  r  r  r  r  handle_datagramr  r`  r	  r  r   rA   DatagramHandlerr  r  r`   r  r  r2   rM   rC   r  r  r[  r!  s       rI   rJ   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  r2   rM   rL   r   rT   ro   s    rI   rT   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  )rE   r.  r1  rL  r2  r   s         rI   rG  z#DatagramHandlerTest.handle_datagram  sk    {{4#D	
+ll6"&&s+6::,,rk   c                    | j                   r| j                  | j                          t        j                  d      }|j	                  d       | j
                  j                          | j
                  j                          |j	                  d       | j
                  j                          | j                  | j                  d       y )Nudpr   r5  r6  )
r  r7  r   r   r   r[  r  rN   r[   r  r  s     rI   r8  zDatagramHandlerTest.test_output  s      MM$//0""5)VV.9rk   N)rr   rs   rt   ru   r:  r  r  rJ   rT   rG  r8  rv   rk   rI   rE  rE    s%     $ LG)4	$
:rk   rE  c                   ,    e Zd ZdZ eed      reZd Zy)UnixDatagramHandlerTestz,Test for DatagramHandler using Unix sockets.rF  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   rA  r  r   r   rT  rE  rJ   ro   s    rI   rJ   zUnixDatagramHandlerTest.setUp  s8    $<<>	(($,,7!!$'rk   N	rr   rs   rt   ru   rC  r  rM  r  rJ   rv   rk   rI   rP  rP    s     7vy!-(rk   rP  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   rk   )r   rJ   r  sl_hdlrr  r  r  rG  r  r`  r	  r  r   rA   r\  r  r  r`   r  r  r2   rM   rC   r  r  r[  r!  s       rI   rJ   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  rV  r2   rM   rL   r   rT   ro   s    rI   rT   zSysLogHandlerTest.tearDown  sj    	${{  "||  ..t||<""$d#Hd#r$  c                 Z    |j                   | _        | j                  j                          y r   )rL  r  r[  r  )rE   r.  s     rI   rG  z!SysLogHandlerTest.handle_datagram$  s    !..rk   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  r7  r   r   r   r[  r  r   ra  r[   r  rN   rV  
append_nulidentr  s     rI   r8  zSysLogHandlerTest.test_output(  s     MM$//0""5)Y'../*@A"'Y'../*<=&Y'../*GHrk   c                 B   t        j                  d      }| j                  j                          | j                  j                          |j                  d       | j                  j                  t        j                         | j                  | j                  d       y )NrZ  r[  r\  )r   r   rV  rL   r[  rN   r   r  r   ra  r[   r  r  s     rI   test_udp_reconnectionz'SysLogHandlerTest.test_udp_reconnection;  sk    ""5)Y'../*@Ark   N)rr   rs   rt   ru   r:  r  r  rJ   rT   rG  r8  r`  rv   rk   rI   rT  rT    s,     , LG)4	$I&Brk   rT  c                   ,    e Zd ZdZ eed      reZd Zy)UnixSysLogHandlerTestz)Test for SysLogHandler with Unix sockets.rF  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   rA  r  r   r   rT  rT  rJ   ro   s    rI   rJ   zUnixSysLogHandlerTest.setUpK  rB  rk   NrR  rv   rk   rI   rb  rb  C  s     4vy!-&rk   rb  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  rJ  r  re  rJ   r  s    rI   rJ   zIPv6SysLogHandlerTest.setUpZ  s#    +1??(#T02rk   c                 h    t         j                  | j                  _        t        t
        |           y r   )r  AF_INETr  rJ  r  re  rT   r  s    rI   rT   zIPv6SysLogHandlerTest.tearDown^  s#    +1>>(#T35rk   )
rr   rs   rt   ru   r:  r  r  rJ   rT   r  r  s   @rI   re  re  Q  s!     1 LG36 6rk   re  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   rJ   r  r  r[  ro   s    rI   rJ   zHTTPHandlerTest.setUpg  s     	t (rk   c                 |   |j                   | _         t        |j                        | _        | j                   dk(  r9	 t	        |j
                  d         }|j                  j                  |      | _        |j                  d       |j                          | j                  j                          y #  d | _        Y GxY w)NrO  zContent-Length   )commandr   rZ  log_dataintheadersrfilerb   	post_datasend_responseend_headersr[  r  )rE   r.  rlens      rI   handle_requestzHTTPHandlerTest.handle_requestm  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)rN  rO  r[  rN  rH  rG   funcNamer8  r  )'r   r   r2   rM   rA   sslr3  rZ  dirname__file__r   
SSLContextPROTOCOL_TLS_SERVERload_cert_chaincreate_default_contextImportErrorr  rx  r  r  r	  r  server_portrb  h_hdlrrp  rC   rg  r[  rN   r   r[   ro  r   queryrt  decoder  rL   )rE   r   r2   r  r  r  herelocalhost_certr#  r  r  hostsecure_clientrg  r  ds                   rI   r8  zHTTPHandlerTest.test_outputz  s   ""6*&&!!$"2"2";";A">?# 0	 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;;/) 2%+"""$S!!!#  !3!3W=  v6U? !4!45A !6!6w!?@A  6VH5  :@  5C512  KK**4;;7KKa0	 
 # "!F"s   LL$#L$N)rr   rs   rt   ru   rJ   rx  r8  rv   rk   rI   rk  rk  b  s      )5 rk   rk  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   rJ   
_survivorsro   s    rI   rJ   zMemoryTest.setUp  s    trk   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  )rE   r4  r2  keys       rI   _watch_for_survivalzMemoryTest._watch_for_survival  s<      	4CS'49$C#*;;s#3DOOC 	4rk   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   r`  r_   r\   r   )rE   deadid_repr_r~  s        rI   _assertTruesurvivalzMemoryTest._assertTruesurvival  s     	

!%!6!6!8 	#LS%#u}E"	# II .14TDIIdO0LM N rk   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}  r9   r   )r}  r9   r   )r2   r8   r   r   r   r  r9   r   rp   rj   r  )rE   r}  r~  s      rI   test_persistent_loggersz"MemoryTest.test_persistent_loggers  s     	!!',,/&  %W]]#t0023		$##%&!
 	   "&		$##%&!!
 	rk   N)rr   rs   rt   ru   rJ   r  r  r  rv   rk   rI   r  r    s    4
4
Nrk   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rH  r  )r   r   r8  rm  rC   r   rM   rL   r  r[   rb   rstripr3  rZ  isfiler  )rE   r   r7  r  r   r   s         rI   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	getwriterrJ  r5   BytesIOr:   rC   r   rM   rL   rY   r[   )rE   r   messagewriter_classr7   writerr   ri   s           rI   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)rr   rs   rt   r  r  rv   rk   rI   r  r    s    2Lrk   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UserWarningr5   r6   r:   r   rC   warnrM   rY   rL   r  findshowwarningr[   )rE   r7   rS   r   ri   a_files         rI   test_warningszWarningsTest.test_warnings	  s-   $$& 	F##D)OOG33U;##H{C[[]F%%f-A&&}5Fa MM./  #!AGGIqvv&IJAN [[]F  [*b!'7!ALLNQDF)	F 	F 	Fs   E+F		Fc                    t        j                         5  t        j                  d       | j	                  t        j                  d       t        j
                  d      }| j                  |j                  g        t        j                  dt        dd       | j                  t        |j                        d       | j                  |j                  d   t        j                         d d d        y # 1 sw Y   y xY w)	NTFr  r  r  r  rm   r   )r  r  r   r  r   r   r[   rA   r  r  r\   assertIsInstanceNullHandlerr  s     rI   test_warnings_no_handlersz&WarningsTest.test_warnings_no_handlers/	  s    $$& 
	K##D)OOG33U; &&}5FV__b1  [*bIS115!!&//!"4g6I6IJ
	K 
	K 
	Ks   CC33C<N)rr   rs   rt   r  r  rv   rk   rI   r  r  	  s    F0Krk   r  c                 .    t        j                  | |      S r   )r   r<   )r!  r  s     rI   
formatFuncr  =	  s    VW--rk   c                       e Zd ZddZy)myCustomFormatterNc                      y r   rv   )rE   fmtr  s      rI   r  zmyCustomFormatter.__init__A	  s    rk   r   )rr   rs   rt   r  rv   rk   rI   r  r  @	  s    rk   r  c                  *    t        j                         S r   )r   r:   rv   rk   rI   handlerFuncr  D	  s      ""rk   c                       e Zd Zy)CustomHandlerNrr   rs   rt   rv   rk   rI   r  r  G	      rk   r  c                       e Zd Zy)CustomListenerNr  rv   rk   rI   r  r  J	  r  rk   r  c                       e Zd Zy)CustomQueueNr  rv   rk   rI   r  r  M	  r  rk   r  c                  *    t        j                         S r   )queueQueuerv   rk   rI   
queueMakerr  P	  s    ;;=rk   c                     fd}|S )Nc                 F    |j                  d       t        | g|i |S )Nrespect_handler_level)
setdefaultr  )r  rA   r5  r  s      rI   funczlistenerMaker.<locals>.funcT	  s*    13HIe9h9&99rk   rv   )arg1arg2r  r  s     ` rI   listenerMakerr  S	  s    : Krk   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                         d        Z]d Z^d Z_d Z`d Zay)ConfigDictTestz)Reading logging config from a dictionary.r  rm   form1r!  z%(levelname)s ++ %(message)sr  logging.StreamHandlerr   zext://sys.stdout)r  r  r  r7   r   r  rA   )r	  r
  rA   r  r  r9   r  )r	  r
  rA   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  r7   r   r  F)compilerr  )r	  r  r
  rA   r  r  Tr   )r	  incrementalrA   r  filt1rG   )r  r  r  r7   filtersr  r  )r	  r
  r  rA   r  r  zcfg://true_formatterszcfg://handler_configs[hand1])r	  true_formattershandler_configsr
  rA   r  r  )r  r  r
  rA   r  r  r   r~  !
)r}  
terminator)r  r  r  r7   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!  rE   r   r  s     rI   r!  z%ConfigDictTest.CustomFormatter.format  s    7>&))rk   )rr   rs   rt   custom_propertyr!  r  r  s   @rI   CustomFormatterr    s    	* 	*rk   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  rA   rj  )r	  rA   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
  rA   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  rA   )r  ahr  r	  rA   r  c                 B    t         j                  j                  |       y r   )r   r  
dictConfig)rE   r  s     rI   r  zConfigDictTest.apply_config  s    !!$'rk   c                 R    t        j                  |      }| j                  ||       y r   )r   getHandlerByNamer  )rE   rG   rr  rS   s       rI   check_handlerzConfigDictTest.check_handler  s"    $$T*a%rk   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   rp   r   rj   r  s      rI   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       rI   r  zConfigDictTest.test_config1_ok  r  r  c                 Z    | j                  t        | j                  | j                         y r   r  ro   s    rI   r  z#ConfigDictTest.test_config2_failure  r  rk   c                 Z    | j                  t        | j                  | j                         y r   )r?  r  r  config2aro   s    rI   test_config2a_failurez$ConfigDictTest.test_config2a_failure      )T%6%6Frk   c                 Z    | j                  t        | j                  | j                         y r   )r?  r  r  config2bro   s    rI   test_config2b_failurez$ConfigDictTest.test_config2b_failure  r(  rk   c                 Z    | j                  t        | j                  | j                         y r   r  ro   s    rI   r  z#ConfigDictTest.test_config3_failure  r  rk   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  rR  r  r  r[   rY   rj   rE   r  s     rI   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  rR  r  r  r[   rY   rj   r.  s     rI   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  ro   s    rI   r  zConfigDictTest.test_config5_ok  s'    DLL17M2rk   c                 Z    | j                  t        | j                  | j                         y r   )r?  r  r  r  ro   s    rI   test_config6_failurez#ConfigDictTest.test_config6_failure  s    )T%6%6Erk   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   rp   r   rj   r  r!  r:   rD   r   r  s      rI   r  zConfigDictTest.test_config7_ok  s   $$& 	&&dll+&&'89FKK))+,LL**,-!!#  " 
 !!"%	& $$& 	&&dll+w(=(=>&&'89FOOFOO,&&'78FKK))+,LL**,-!!#  " 
 !!"%	& 	&	& 	&	& 	&s   BF4C%G4F>G
c                    t        j                         5 }| j                  | j                         t	        j
                  d      }|j                  | j                                |j                  | j                                | j                  ddg|       | j                  g        d d d        t        j                         5 }| j                  | j                         | j                  dt        j                         t	        j
                  d      }| j                  |j                         |j                  | j                                |j                  | j                                t	        j
                  d      }|j                  | j                                |j                  | j                                | j                  g d|       | j                  g        d d d        y # 1 sw Y   JxY w# 1 sw Y   y xY w)Nr  r  r  r  r  r  )r6  r7  r   r   r   r   )r   r  r  r  r   r   r   rp   r   rj   r  r!  r:   rY  r   r  s      rI   test_config_8_okzConfigDictTest.test_config_8_ok7  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   rp   r   r  rj   config8arY  r   r  s       rI   test_config_8a_okz ConfigDictTest.test_config_8a_okY  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  r6  )r   r  r  r  r!  r   r:   r   r   rp   rj   config9aconfig9br  s      rI   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~   r7  r  )r   r  r  config10r!  r   r:   r   r   rp   r   rj   r  s      rI   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  config11ro   s    rI   test_config11_okzConfigDictTest.test_config11_ok  s    T]]+rk   c                 Z    | j                  t        | j                  | j                         y r   )r?  r  r  config12ro   s    rI   test_config12_failurez$ConfigDictTest.test_config12_failure      )T%6%6Frk   c                 Z    | j                  t        | j                  | j                         y r   )r?  r  r  config13ro   s    rI   test_config13_failurez$ConfigDictTest.test_config13_failure  rM  rk   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   rD   rY   r]  )rE   r  rS   s      rI   test_config14_okzConfigDictTest.test_config14_ok  s    $$& 	J&dmm,!!'*AQUUE*Q\\51OOM*OOFOO-667GHI	J 	J 	Js   B*CCc                 0   | j                         5  t        dd      }ddd|ddiddgid	}| j                  |       | j                  |       d d d        t        j                  j
                  d
   }| j                  t        |       y # 1 sw Y   >xY w)Nr  r  rm   r  r  rH  )r  filenamerJ  rA   r  r   )r  r8  r  r   r  rA   r   r  )rE   r7  r  r   s       rI   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[   )rE   rS   r  s      rI   test_config16_okzConfigDictTest.test_config16_ok  s    $--(g& ##G$9$9M:%< =!78 ##G$9$9G% !89rk   c                     | j                  | j                         t        j                  d   }| j	                  |j
                  j                  d       y )Nr  r  )r  config17r   r#   r[   r  r  rB  s     rI   test_config17_okzConfigDictTest.test_config17_ok  s>    $--(g&44g>rk   c                     | j                  | j                         t        j                  d      j                  d   }| j                  |j                  t        j                         y )Nr  r   )r  config18r   r   rA   r[   r  r   rE   r   s     rI   test_config18_okzConfigDictTest.test_config18_ok  sI    $--(##J/88;++W]];rk   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)NrH  r   g       @rQ  r&  )r  r   r  listenr  r	  r  r  rN   r  ri  SOCK_STREAM
settimeoutconnectr*  rK  r\   sendrL   stopListeningr	   r  )rE   textverifyr  r  r(  r1  ri   	sentsofarleftsents              rI   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rD  )r   r  ro  jsondumpsrE  r!  r   r:   r   r   rp   r   rj   r  s      rI   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  ro  r  r  r  r  r   r   r   rp   r   rj   r  s      rI   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   rv   stuffs    rI   verify_failz6ConfigDictTest.test_listen_verify.<locals>.verify_fail3  s    rk   c                     | d d d   S )NrL  rv   rx  s    rI   verify_reversez9ConfigDictTest.test_listen_verify.<locals>.verify_reverse6  s    2;rk   r  r  r  r  r   )rd   r6  r7  rL  r9  r:  )r   r   r  r  r  r  r   r  ro  r   rp   r   rj   )rE   rz  r|  r   to_sendr  s         rI   test_listen_verifyz!ConfigDictTest.test_listen_verify0  sE   		 ""#45//."8"89 $$& 	.&##G[9KK))+,LL**,-		.
 	b0
 + 	 	, $$& 	.&##G,&&'89FKK))+,LL**,-	. 	
  	 	
 	
 + 	 	, $$& 	.&##GDbDM>B&&'89FKK))+,LL**,-	. 	
  	 	
 	
 + 	 	,Y	. 	.	. 	.$	. 	.s'   AH2(A%H?A,I2H<?IIc                 Z    | j                  t        | j                  | j                         y r   )r?  ra  r  
bad_formatro   s    rI   test_bad_formatzConfigDictTest.test_bad_formato  s    *d&7&7Irk   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   rA   r  r  r>  r  _styleStringTemplateStyler[   sortedgetHandlerNamesrE   r  r   s      rI   !test_bad_format_with_dollar_stylez0ConfigDictTest.test_bad_format_with_dollar_styler  s    t/>m|01(;&!##J/88;gnngoo>g//66%99	; 7 7 9:(,7	9rk   c                     | j                  | j                         t        j                  d      j                  d   }| j                  |j                  t               y Nr  r   )r  custom_formatter_class_validater   r   rA   r  r  r  ra  s     rI   )test_custom_formatter_class_with_validatez8ConfigDictTest.test_custom_formatter_class_with_validate~  sJ    $>>?##$EFOOPQRg//1CDrk   c                     | j                  | j                         t        j                  d      j                  d   }| j                  |j                  t               y r  )r   custom_formatter_class_validate2r   r   rA   r  r  r  ra  s     rI   *test_custom_formatter_class_with_validate2z9ConfigDictTest.test_custom_formatter_class_with_validate2  sJ    $??@##$EFOOPQRg//1CDrk   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   rA   r  r  r  r  s      rI   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Drk   c                 Z    | j                  t        | j                  | j                         y r   )r?  ra  r   custom_formatter_class_validate3ro   s    rI   *test_custom_formatter_class_with_validate3z9ConfigDictTest.test_custom_formatter_class_with_validate3  s     *d&7&79^9^_rk   c                 Z    | j                  t        | j                  | j                         y r   )r?  ra  r  custom_formatter_with_functionro   s    rI   ,test_custom_formatter_function_with_validatez;ConfigDictTest.test_custom_formatter_function_with_validate       *d&7&79\9\]rk   c                 Z    | j                  t        | j                  | j                         y r   )r?  ra  r  custom_formatter_with_defaultsro   s    rI   ,test_custom_formatter_function_with_defaultsz;ConfigDictTest.test_custom_formatter_function_with_defaults  r  rk   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)rm   r      )rk  bcr)  r  )r  r   )g)rS   ru  jr   lr   rt  )ozcfg://alistp)atuplealistadictnest1nest2nest3zcfg://atuple[1]r   zcfg://alist[1]r  zcfg://nest1[1][0]rS   zcfg://nest2[1][1]zcfg://adict.dzcfg://adict[f]zcfg://nest3rm   zcfg://nosuchzcfg://!zcfg://adict[2])	r   r  BaseConfiguratorr[   convertpopr?  KeyErrorra  )rE   r  bcr   s       rI   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@Ark   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)rE   r  r4  r5  r  r  s       rI   r  z:ConfigDictTest.test_namedtuple.<locals>.MyHandler.__init__  s     $1&1,4rk   c                 z    |xj                   d| j                  j                   z  c_         t        |   |      S N )r  r  typer  rA  r  s     rI   rA  z6ConfigDictTest.test_namedtuple.<locals>.MyHandler.emit  s2    

$--"4"4!566
w|F++rk   r  )r  r  s   @rI   	MyHandlerr    s    5, ,rk   r  Resourcer  labelsmy_typerk  )r  r  rm   	myhandler)r  r  r   r  r  zsome logzsome log my_type
)
collectionsr  r   r:   r   r  r  r   r[   rY   )rE   r  r  r  r  r  r  s         @rI   test_namedtuplezConfigDictTest.test_namedtuple  s    *	,-- 	, j68*<=C59 # (  &K=A	
 $$& 	%&f%LL$	% 	*,@A	% 	%s   'B,,B5c                     d }| j                  dd|gdd       t        j                         j                  d   |u sJ g t        j                         _        y )Nc                      yr4  rv   )r  s    rI   r   zAConfigDictTest.test_config_callable_filter_works.<locals>.filter_  s    rk   rm   r9   r  r	  r  r   r  r   r   r  rE   r   s     rI   !test_config_callable_filter_worksz0ConfigDictTest.test_config_callable_filter_works  s[    	G	"J
 	   "**1-888&(#rk   c                     t        j                  d      }| j                  dd|gdd       t        j                         j                  d   |u sJ g t        j                         _        y )Nr   rm   r9   r  r  r   )r   r   r  r   r  r  s     rI   test_config_filter_worksz'ConfigDictTest.test_config_filter_works  sd    ..-G	"J
 	   "**1-888&(#rk   c                      G d d      } |       }| j                  dd|gdd       t        j                         j                  d   |u sJ g t        j                         _        y )Nc                       e Zd Zd Zy)BConfigDictTest.test_config_filter_method_works.<locals>.FakeFilterc                      yr4  rv   )rE   r  s     rI   r   zIConfigDictTest.test_config_filter_method_works.<locals>.FakeFilter.filter  s    rk   N)rr   rs   rt   r   rv   rk   rI   
FakeFilterr    s    rk   r  rm   r9   r  r  r   r  )rE   r  r   s      rI   test_config_filter_method_worksz.ConfigDictTest.test_config_filter_method_works  si    	 	 ,G	"J
 	   "**1-888&(#rk   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  rv   rk   rI   
NotAFilterr    s    rk   r  rm   r9   r  r  )r?  ra  r  )rE   r  r   s      rI   test_invalid_type_raisesz'ConfigDictTest.test_invalid_type_raises  sI    a. 	G!!gY'OP	rk   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-rA   r  rV  r  r  listenerr}  r~  bazzqueue not emptyrH  r  )r}  r~  r  )r$   r  config_queue_handlerr8  r  r   r   r[   r  r  assertIsNotNoner  r  r   r   r   r   sleeping_retryra  r  emptyr   r  rb   rZ   r  r   r  r3  r  )	rE   qspeclspeccdr7  qhr   r  rS   s	            rI   do_queuehandler_configurationz,ConfigDictTest.do_queuehandler_configuration  s:   ]]4445F$78+-:tZ(,1BzN4 )/4BzN4 ,	/b!))$/BVG$;$;$=>tM  -KKMM% LLOOE" (()=)=):<;;$$**, (()=)=):< KK""$b7+ -qvvx**,-T#89  "((.A 0!R8		2.- -   "((.A 0!R8		2.s,   D6I/ 1I/ <I#I/ #I,(I/ /A-Kc                 0   t               }t        dz   dd}t        dz   d d dd}d t        dz   t        dz   ||f}d t        dz   |t        f}t        j                  ||      D ]  \  }}| j                  ||        d d	t        d
df}d d	t        d
df}t        j                  ||      D ]a  \  }}||| j                  t              5 }| j                  ||       d d d        t        j                        }	| j                  |	d       c y # 1 sw Y   3xY w)Nz.CustomQueuere  )r  maxsizez.listenerMakerT)r  r  r  r  z.queueMakerz.CustomListenerrx  r   r}  r~  z Unable to configure handler 'ah')r  rr   r  	itertoolsproductr  rq  r?  ra  rr  r  r[   )
rE   qdqdlqvalueslvaluesr  r  ctxr  s
             rI   test_config_queue_handlerz(ConfigDictTest.test_config_queue_handler  s?   M^+

 --%)	
 M18n3LbRST$55r>J%--gw? 	=LE5..ue<	= CU+CU+%--gw? 	FLE5}"":. A#225%@Acmm$CS"DE	FA As   DD	c                    t        j                  d       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)N_multiprocessingr   )r  Managerr  ztest_logging-cmpqh-rA   r  rV  r  r  )r   import_moduler$   r  r  multiprocessingr  r  JoinableQueuer8  r  r   r   r[   r  r  r  r  r  r  r   r  r3  r  )rE   r  MQMMq1q2q3r  r7  r  rS   s              rI   test_multiprocessing_queuesz*ConfigDictTest.test_multiprocessing_queues9  s    	##$67]]4445>TTZZ\T!"b\ 	3E(=>B/1BzN4 ,,1BzN4 )B3!!"%--d3  (?(?(A!BT4LQ$$R[[1bhh.bkk//7,,T2OO$4a<OOBIIr2#	3 ,,T2OO$4a<OOBIIr2s   B2F""AG3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 )Nrm   Fr  r9   r  )r  r  rk  r  )r	  r  rA   r  r	  r  )r   r   rY  r   r  rD   )rE   r  r   s      rI   
test_90195zConfigDictTest.test_90195W  s     (-$4 $!*
  ""3')&!)9a.)(-.&!)rk   c                     t        j                  d       t        j                  d      }ddd|j                  d      j                         didgdd	d
}t        j
                  j                  |       y )Nr  r  rm   sinkr  spawn)r  r  r9   )rA   r  r  )r   r  get_contextr  r   r  r  )rE   mpr  s      rI   test_111615zConfigDictTest.test_111615u  sv    ##$67(():; <^^G4::< $H 
 	!!&)rk   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rE   r4  r5  r  s      rI   r  zGConfigDictTest.test_kwargs_passing.<locals>.CustomQueueHandler.__init__  s     /%+"rk   )rr   rs   rt   r  r  r  s   @rI   CustomQueueHandlerr    s    , ,rk   r  r}  r~  rm   r  r  r9   r  r  )r   rA   QueueHandlerr  r  r   r[   r  )rE   r  r  r  r   s        rI   test_kwargs_passingz"ConfigDictTest.test_kwargs_passing  s    	,!1!1!>!> 	,
  /# !%J
 	!!&)**84..>rk   r   )brr   rs   rt   ru   r
   r  rX   r  r  r  r  r&  r*  r  r  r  r  r  r0  r  r  r  r  r=  r  r@  rA  rE  rH  rK  rO  rS  rZ  r   r<   r  r]  r`  r  r  r  r  r  r  r  r  r!  r  r  r  r'  r+  r  r  r1  r  r4  r  r;  r>  rB  rF  rI  rL  rP  rT  rW  r[  r^  rb  ro  r   requires_working_socketrs  ru  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	   r  r  r  r  r   r	  rv   rk   rI   r  r  Y	  s   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F 3F83<*<**?rk   r  c                       e Zd Zd Zd Zy)ManagerTestc                 j   g  G fddt         j                        }t        j                  d       }| j                  t        |j
                  t               |j                  |       |j                  d      }|j                  d       t        j                  d       | j                  dg       y )Nc                       e Zd Zd fd	Zy)6ManagerTest.test_manager_loggerclass.<locals>.MyLoggerNc                 (    j                  |       y r   r`  )rE   r  r  r4  exc_infoextraloggeds         rI   _logz;ManagerTest.test_manager_loggerclass.<locals>.MyLogger._log  s    c"rk   rq   )rr   rs   rt   r  )r  s   rI   MyLoggerr    s    #rk   r  r  zshould appear in loggedzshould not appear in logged)
r   Loggerr  r?  	TypeErrorsetLoggerClassrq  r   r   r[   )rE   r  manr   r  s       @rI   test_manager_loggerclassz$ManagerTest.test_manager_loggerclass  s    	#w~~ 	# ood#)S%7%7=8$v&0156";!<=rk   c                     t        j                  d       }t               }|j                  |       | j	                  |j
                  |       y r   )r   r  objectsetLogRecordFactoryr[   logRecordFactory)rE   r  rg   s      rI   test_set_log_record_factoryz'ManagerTest.test_set_log_record_factory  s;    ood#8)--x8rk   N)rr   rs   rt   r  r   rv   rk   rI   r  r    s    > 9rk   r  c                       e Zd Zd Zd Zy)ChildLoggerTestc                 v   t        j                         }t        j                  d      }t        j                  d      }|j                  d      }|j                  d      }| j                  |t        j                  d             | j                  |t        j                  d             |j                  d      }|j                  d      }|j                  d      }| j                  |t        j                  d             | j                  |t        j                  d             | j                  ||       y )	Nabczdef.ghixyzzuvw.xyzdefghiabc.defzabc.def.ghi)r   r   getChildr  )rE   r   l1l2c1c2c3s          rI   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"rk   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  )rE   r   r*  r+  l3l4kidsrg   s           rI   test_get_childrenz!ChildLoggerTest.test_get_children  s    u%y)12u%}}84(?3X&~~"t$~~%rk   N)rr   rs   rt   r/  r7  rv   rk   rI   r"  r"    s    &rk   r"  c                       e Zd Zy)DerivedLogRecordNr  rv   rk   rI   r9  r9    r  rk   r9  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   )rr  )rE   rr  s     rI   r  z;LogRecordFactoryTest.setUp.<locals>.CheckingFilter.__init__  s	    rk   c                 p    t        |      }|| j                  urd|d| j                  }t        |      y)NzUnexpected LogRecord type z, expected T)r  rr  r  )rE   r   r  r  s       rI   r   z9LogRecordFactoryTest.setUp.<locals>.CheckingFilter.filter  s5    LDHH$IJ HH&C#C.(rk   N)rr   rs   rt   r  r   rv   rk   rI   CheckingFilterr>    s    rk   rA  )
r   r   r   rJ   r9  r   r2   r   getLogRecordFactoryorig_factory)rE   rA  s     rI   rJ   zLogRecordFactoryTest.setUp  sV    
	W^^ 
	 	t$%56""4;;/#779rk   c                     | j                   j                  | j                         t        j	                  |        t        j                  | j                         y r   )r2   r   r   r   rT   r   r  rC  ro   s    rI   rT   zLogRecordFactoryTest.tearDown  s<    %%dkk2$##D$5$56rk   c                    | j                  t        | j                  j                  | j	                                t        j                  t               | j                  j                  | j	                                | j                  dg       y )N)r  r   r   )
r?  r  r2   r   rp   r   r  r9  r   rj   ro   s    rI   test_logrecord_classz)LogRecordFactoryTest.test_logrecord_class  sn    )T%5%5%=%=++-	/##$45t0023!
 	rk   N)rr   rs   rt   rJ   rT   rF  rv   rk   rI   r;  r;    s    :$7
rk   r;  c                   $   e Zd ZdZd Zd Zd Zd Z ej                   e
ej                  d      d      d        Z ej                   e
ej                  d      d      d	        Z ej                   e
ej                  d      d      d
        Zy)QueueHandlerTestr   c                    t         j                  |        t        j                  d      | _        t        j
                  j                  | j                        | _        d| _        t	        j                  d      | _
        d| j                  _        | j                  j                  t        j                         | j                  j                  | j                         y )NrL  queF)r   rJ   r  r  r   rA   r  que_hdlrrG   r   
que_loggerrj  r8   r   rC   ro   s    rI   rJ   zQueueHandlerTest.setUp  s    t[[_
((55djjA	!++E2$)!  1""4==1rk   c                 b    | j                   j                          t        j                  |        y r   )rK  rL   r   rT   ro   s    rI   rT   zQueueHandlerTest.tearDown  rl  rk   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   )rL  r   rp   r?  r  Empty
get_nowaitr   r   rD   r  r   r  r[   rG   r  r4  )rE   r  r  s      rI   test_queue_handlerz#QueueHandlerTest.test_queue_handler  s    d//12%++tzz'<'<=T..01%++tzz'<'<=!$zz$$&
4):):;<DOO$8$89$((DII.d<rk   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})rG   	levelnamer  )rp   r   r   r   r!  rG   r<   r=   rK  r?   rL  r   r  rP  r[   r  r  )rE   r  rS  log_format_strformatted_msgr  
log_records          rI   test_formattingz QueueHandlerTest.test_formatting!  s    !((9	;&--4998A3 . P%%doo6	""9-$ZZ**,

7
(:(:;rk   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   rA   rX  r  r  rL  r   rp   r   r  r  rD   matchesr   r   r}   rL   r8   rY  )rE   r   r  s      rI   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)Nrm   r   r  T
stack_info	TracebackStack)r   rA   rX  r  r;   r  ZeroDivisionErrorrL  r  rp   r   r  r[   r7   rY   r  r  )rE   r  r)  excs       rI   &test_queue_listener_with_StreamHandlerz7QueueHandlerTest.test_queue_listener_with_StreamHandlerQ  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)rK  r?   r>   rL  rC   r;   r   rA   rX  r  r  r   r  r[   r7   rY   r  )rE   r  s     rI   *test_queue_listener_with_multiple_handlersz;QueueHandlerTest.test_queue_listener_with_multiple_handlersa  s     	""4#6#67""4>>2##11$**dmmLg&--/5579NOrk   N)rr   rs   rt   rX   rJ   rT   rQ  rW  r  
skipUnlessrC  r   rA   r\  re  rg  rv   rk   rI   rH  rH    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rk   rH  rX  )patchc                       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   r8   r9   rA   r  rC   rX  r  r   r  rM   rL   )	log_queuer^  r   r   r  s        rI   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  )MMOrk   rX  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)ry  repeatr  r  rt  r  r[   
call_countrE   mock_handleru  rs  s       rI   #test_handle_called_with_queue_queuez5QueueListenerTest.test_handle_called_with_queue_queue  sh    4;;' H!KKM	""9A.FGH [33Q_EGrk   c                 f   t        j                          t        | j                        D ][  }t	        j
                         }| j                  || j                         d|       |j                          |j                          ] | j                  |j                  d| j                  z  d       y rv  )r   *skip_if_broken_multiprocessing_synchronizery  rw  r  r  rt  r  rL   r  r[   rx  ry  s       rI    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rk   c              #   j   K   	 	 | j                          # t        j                  $ r g cY S w xY wwr   )rP  r  rO  )rs  s    rI   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}  ry  rw  r  r  rt  r  listr  rL   r  r   rA   rX  	_sentinelr  r  r  r  )rE   ru  r  r   rg   r   s         rI   $test_no_messages_in_queue_after_stopz6QueueListenerTest.test_no_messages_in_queue_after_stop  s     >>@4;;' >'--/""5DGGIq*ABT44U;<!!!#!1!1!?!?!I!I JKeXF5:%<01 /9G<M<M.NQUU*+&, %<=>>%<s   /Dc                    t        j                         }t        j                  j	                  |      }|j                          |j                          | j                  t              5  |j                          d d d        y # 1 sw Y   y xY wr   )
r  r  r   rA   rX  r  r  r?  ra  	task_done)rE   rs  r  s      rI   test_calls_task_done_after_stopz1QueueListenerTest.test_calls_task_done_after_stop  se    I''55i@HNNMMO"":. &##%& & &s   )BBN)rr   rs   rt   ru   rw  staticmethodrt  ri  r  r   rA   rX  r{  r~  r  r  r  rv   rk   rI   rk  rk  r  s    	
 		 
	. 
g&&44h	?	G 
@	G 
g&&44h	?
	G 
@
	G 
	 
		>0	&rk   rk  c                       e Zd Zd ZeZd Zy)UTCc                     t         S r   )ZEROrE   dts     rI   	utcoffsetzUTC.utcoffset  s    rk   c                      y)Nr  rv   r  s     rI   tznamez
UTC.tzname  s    rk   N)rr   rs   rt   r  dstr  rv   rk   rI   r  r    s     Crk   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)Nrv   )r?  r[   rr  )rE   r  r  r4  r5  r)  s         rI   assert_error_messagez'AssertErrorMessage.assert_error_message  sH    	.Db24262 	.Wc!f--	.s    A>AN)rr   rs   rt   r  rv   rk   rI   r  r    s    .rk   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.testrZ  toz	dummy.extr  zMessage with %d %s)r   placeholders)rG   r  pathnamelinenor  r  r  r4  r  i  )r   r9   r3  rZ  r   commonvariantsro   s    rI   rJ   zFormatterTest.setUp  sP    $]]VT;?''	
 $
rk   Nc                     t        | j                        }||j                  | j                  |          t	        j
                  |      S r   )r  r  rO   r  r   r   )rE   rG   r  s      rI   
get_recordzFormatterTest.get_record  s<    dkk"MM$---.$$V,,rk   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?  ra  rY  usesTimerD   rE   r   r   s      rI   test_percentzFormatterTest.test_percent   s    OO./!&FGl+*ahh2&m,

%./

%./

%rk   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      rI   test_braceszFormatterTest.test_braces  s    OOoS9!&GHj4*ahh2k5&k5

%.c:

%nC8

%rk   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      rI   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

%rk   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?  ra  r  rE   r   s     rI   test_format_validatez"FormatterTest.test_format_validate4  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Prk   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?  ra  )rE   fmtsstylesr  r	  r   r   s          rI   test_defaults_parameterz%FormatterTest.test_defaults_parameter  s   S dF+ 	NJC!!#Uh	=RSA!AQXXa[*OP)AQXXa[*LM !!#U3A!Aj!((A6 !!#Uni=XYA)AQXXa[*LM	Nrk   c                 R    | j                  t        t        j                  d d d       y )Nx)r?  ra  r   r<   ro   s    rI   test_invalid_stylez FormatterTest.test_invalid_style  s    *g&7&7tSIrk   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  rx        r  r   {   %(asctime)s %(message)sz1993-04-21 08:03:00,123z%Y:%dz1993:21)r  datetimeutcrz  mktime
astimezone	timetuplecreatedmsecsr   r<   gmtime	converterr[   
formatTimer!  asctime)rE   r   r  r   s       rI   	test_timezFormatterTest.test_time  s    OOtQAq!Q< KKd 3 = = ?@	78kka*CDa19=	$=>rk   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)rr   rs   rt   default_msec_formatdefault_time_formatrv   rk   rI   NoMsecFormatterr    s    "&"5rk   r  r  rx  r  r  r  r   r  z21/04/1993 08:03:00)r   r<   r  r  r  rz  r  r  r  r  r  r  r[   r  )rE   r  r   r  r   s        rI   test_default_msec_format_nonez+FormatterTest.test_default_msec_format_none  s    	6g// 	6 OOtQAq!S#>KKd 3 = = ?@	kka*?@rk   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 %drm   z.1000)r   r<   ry  rz  r|  r   r!  r3  )rE   r   ru  r   ri   s        rI   test_issue_89047zFormatterTest.test_issue_89047  sr    "ESZmnt 	)AJJv%%ula!e.D&EFAAWa(		)rk   r   )rr   rs   rt   rJ   r  r  r  r  r  r  r  r  r  r  rv   rk   rI   r  r    s?    
"-&& &*TQlN(J?
A)rk   r  c                       e Zd Zd Zd Zy)TestBufferingFormatterc                     dt        |      z  S )Nz[(%d)r\   rE   r  s     rI   formatHeaderz#TestBufferingFormatter.formatHeader      W%%rk   c                     dt        |      z  S )Nz(%d)]r  r  s     rI   formatFooterz#TestBufferingFormatter.formatFooter  r  rk   N)rr   rs   rt   r  r  rv   rk   rI   r  r    s    &&rk   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  rn  ro  )r   r   r  ro   s    rI   rJ   zBufferingFormatterTest.setUp  s/    !!5%.1!!5%.1
rk   c                     t        j                         }| j                  d|j                  g              | j                  d|j                  | j                               y )Nr   onetwo)r   BufferingFormatterr[   r!  r  r  s     rI   test_defaultz#BufferingFormatterTest.test_default  sE    &&(QXXb\*188DLL#9:rk   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<   )rE   r   lfs      rI   test_customz"BufferingFormatterTest.test_custom  s`    "$)188DLL+AB/"2&-qxx/EFrk   N)rr   rs   rt   rJ   r  r  rv   rk   rI   r  r    s    
;
Grk   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))r2   RecordingHandlerrC   r  r   r  rM   rL   r  rD   exc_textr  r]  r`  )rE   r   rS   s      rI   rW  zExceptionTest.test_formatting  s    	Q	9344	9h48			IIaL

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

++ -A B 	C// 1> ? 	@-- /? @ 	As	   4 AN)rr   rs   rt   rW  rv   rk   rI   r  r    s    Ark   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)r2   rM   r;   r   
lastResortr  r   r  r   r[   rY   r   r    emittedNoHandlerWarningrC   )rE   r  old_lastresortold_raise_exceptionsr  r  s         rI   test_last_resortzLastResortTest.test_last_resort5  s   4>>* ++&66	;((* Gf

34  !2B7_-  !24EF	G "&G((* 9f_-F  !2C89 ((* 8f_-  !2B78
 49DLL0&+G#((* 8f_-  !2B78 OODNN+!/G&:G#7G G9 98 88 8 OODNN+!/G&:G#sm   	H? A#H 'H? '4HH? 72H')8H? !2H3H? HH? H$H? 'H0,H? 3H<8H? ?3I2N)rr   rs   rt   r  rv   rk   rI   r  r  4  s    #;rk   r  c                       e Zd Zd Zd Zy)FakeHandlerc           
      N    dD ]   }t        | || j                  |||             " y )N)r  r	  rL   r  )setattrrecord_call)rE   
identifiercalledrg  s       rI   r  zFakeHandler.__init__]  s.    > 	PFD&$"2"2:vv"NO	Prk   c                     fd}|S )Nc                  H     j                  dj                               y )Nz{} - {})r`  r!  )r   r  method_names   rI   innerz&FakeHandler.record_call.<locals>.innerb  s    MM)**:{CDrk   rv   )rE   r  r  r   r  s    ``` rI   r  zFakeHandler.record_calla  s    	Erk   N)rr   rs   rt   r  r  rv   rk   rI   r  r  [  s    Prk   r  c                   $     e Zd Z fdZd Z xZS )r  c                 :    t        t        | 
  |i | g | _        y r   )r  r  r  r  r  s      rI   r  zRecordingHandler.__init__i  s    .??rk   c                 :    | j                   j                  |       y)z&Keep track of all the emitted records.N)r  r`  r   s     rI   rX  zRecordingHandler.handlem  s    F#rk   )rr   rs   rt   r  rX  r  r  s   @rI   r  r  g  s    $rk   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  r	  rJ   r   r   r  r   r  )rE   raise_exceptionsr  s     rI   rJ   zShutdownTest.setUpv  s7    lD')"22*;=MNrk   c                     fd}|S )Nc                               r   rv   )r   s   rI   r  z'ShutdownTest.raise_error.<locals>.inner~  s
    'Mrk   rv   )rE   r   r  s    ` rI   raise_errorzShutdownTest.raise_error}  s    	rk   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   rm   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)	r  r   r  r   r}  r~  r  r  r[   )rE   handler0handler1handler2rA   rg   s         rI   test_no_failurezShutdownTest.test_no_failure  s    q$++.q$++.q$++. w**Xx,JKT(^4L 	4;;/rk   c                 $   t        d| j                        }t        ||| j                  |             t        j
                  j                  |      g}t	        j                  t        |             | j                  d| j                  d          y )Nr   r{  r  rL  )
r  r   r  r  r   r}  r~  r  r  r[   )rE   rg  r   r   rA   s        rI   _test_with_failure_in_methodz)ShutdownTest._test_with_failure_in_method  sj    a-!1!1%!89OO''01T(^4B8rk   c                 0    | j                  dt               y Nr  r  r`  ro   s    rI   test_with_ioerror_in_acquirez)ShutdownTest.test_with_ioerror_in_acquire  s    )))W=rk   c                 0    | j                  dt               y Nr	  r  ro   s    rI   test_with_ioerror_in_flushz'ShutdownTest.test_with_ioerror_in_flush      ))'7;rk   c                 0    | j                  dt               y NrL   r  ro   s    rI   test_with_ioerror_in_closez'ShutdownTest.test_with_ioerror_in_close  r  rk   c                 0    | j                  dt               y r  r  ra  ro   s    rI   test_with_valueerror_in_acquirez,ShutdownTest.test_with_valueerror_in_acquire  s    )))Z@rk   c                 0    | j                  dt               y r  r#  ro   s    rI   test_with_valueerror_in_flushz*ShutdownTest.test_with_valueerror_in_flush      ))':>rk   c                 0    | j                  dt               y r   r#  ro   s    rI   test_with_valueerror_in_closez*ShutdownTest.test_with_valueerror_in_close  r'  rk   c                 F    dt         _        | j                  dt               y )NFr  r   r  r  
IndexErrorro   s    rI   .test_with_other_error_in_acquire_without_raisez;ShutdownTest.test_with_other_error_in_acquire_without_raise  s    "')))Z@rk   c                 F    dt         _        | j                  dt               y )NFr	  r+  ro   s    rI   ,test_with_other_error_in_flush_without_raisez9ShutdownTest.test_with_other_error_in_flush_without_raise      "'))':>rk   c                 F    dt         _        | j                  dt               y )NFrL   r+  ro   s    rI   ,test_with_other_error_in_close_without_raisez9ShutdownTest.test_with_other_error_in_close_without_raise  r0  rk   c                 f    dt         _        | j                  t        | j                  dt               y )NTr  r   r  r?  r,  r  ro   s    rI   +test_with_other_error_in_acquire_with_raisez8ShutdownTest.test_with_other_error_in_acquire_with_raise  s'    "&*d&G&G#Z	1rk   c                 f    dt         _        | j                  t        | j                  dt               y )NTr	  r4  ro   s    rI   )test_with_other_error_in_flush_with_raisez6ShutdownTest.test_with_other_error_in_flush_with_raise  '    "&*d&G&G!:	/rk   c                 f    dt         _        | j                  t        | j                  dt               y )NTrL   r4  ro   s    rI   )test_with_other_error_in_close_with_raisez6ShutdownTest.test_with_other_error_in_close_with_raise  r8  rk   )rr   rs   rt   ru   rJ   r  r  r  r  r  r!  r$  r&  r)  r-  r/  r2  r5  r7  r:  r  r  s   @rI   r	  r	  r  sY    -O
0 9><<A??A??1
/
/rk   r	  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  rv   rk   rI   _NotAnIntOrStringrA        rk   rB  WARN)
r   r  r    rP   r[   r   r?  ra  r  r}   )rE   old_disablerB  s      rI   test_disablez ModuleLevelMiscTest.test_disable  s    ll**22a(5--55r:*gooG	 	 	)W__6G6IJ 	--55w7G7GHrk   Nc                 4   g t        j                  | t        dfd       t               }t        j                  j                  |       t        t        |      }| ||d|       n	 |d|       | j                  t        |j                        d       |j                  d   }| j                  |j                         d|z         ||nt        t        |j                               }| j                  |j                  |       | j                  g        y )NbasicConfigc                  *    j                  | |f      S r   r  )rk  kwr   s     rI   <lambda>z/ModuleLevelMiscTest._test_log.<locals>.<lambda>  s    v}}aW'= rk   ztest me: %rrm   r   )r   ri  r   r  r  rC   r.   r[   r\   r  
getMessageupperr   )rE   rg  r  	recording
log_methodr   expected_levelr   s          @rI   	_test_logzModuleLevelMiscTest._test_log  s    dG]=	? %&		*Wf-
umY7}i0Y../3""1%**,mi.GH"'"3&,,.9Y8 	$rk   c                 D    | j                  dt        j                         y Nr   )rQ  r   r   ro   s    rI   test_logzModuleLevelMiscTest.test_log  s    ugmm,rk   c                 &    | j                  d       y Nr   rQ  ro   s    rI   
test_debugzModuleLevelMiscTest.test_debug      wrk   c                 &    | j                  d       y Nr   rW  ro   s    rI   	test_infozModuleLevelMiscTest.test_info      vrk   c                 &    | j                  d       y Nr   rW  ro   s    rI   test_warningz ModuleLevelMiscTest.test_warning      y!rk   c                 &    | j                  d       y Nr   rW  ro   s    rI   
test_errorzModuleLevelMiscTest.test_error  rY  rk   c                 &    | j                  d       y Nr  rW  ro   s    rI   test_criticalz!ModuleLevelMiscTest.test_critical      z"rk   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  rv   rk   rI   r  rk    rC  rk   r  )r?  r  r   r  r  r  r[   getLoggerClass)rE   r  s     rI   test_set_logger_classz)ModuleLevelMiscTest.test_set_logger_class  s    )W%;%;VD	w~~ 	 	x(//18<w~~.//17>>Brk   c                    g  G fddt        j                               }t        j                  |       t        j                  d      }| j	                  dg       t        j                         }t        j                  |      }|j                  |       	 |j                  t         j                         |j                  d       | j	                  |j                         j                         d       |j                  d       |j                  d       |j                  t         j                          |j                  d       | j	                  |j                         d       |j#                  |       |j%                          t        j                  t         j&                         y # |j#                  |       |j%                          t        j                  t         j&                         w xY w)Nc                   <     e Zd Zdej                  f fd	Z xZS )@ModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLoggerr  c                 H    t         |   ||       j                  d       y )Ninitialized)r  r  r`  )rE   rG   r  r  r  s      rI   r  zIModuleLevelMiscTest.test_subclass_logger_cache.<locals>.MyLogger.__init__  s     u-}-rk   )rr   rs   rt   r   r   r  r  )r  r  s   @rI   r  rp    s    $.gnn . .rk   r  just_some_loggerrr  hellor   r   )r   rl  r  r   r[   r5   r6   r:   rC   r8   r9   r   rY   r  truncater  r   rM   rL   r  )rE   r  r   r7   rS   r  s        @rI   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  rE   codercouterrs        rI   test_logging_at_shutdownz,ModuleLevelMiscTest.test_logging_at_shutdown9  sR        (d3Cjjl,c2.4rk   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
        rx  rH  r  zERROR:root:log in __del__)r   TESTFNr   rT  r  r  r   r  r[   rb   r  )rE   rV  rz  fps       rI   test_logging_at_shutdown_openz1ModuleLevelMiscTest.test_logging_at_shutdown_openL  s     ##	(((3 $* +3 6	  & 	t$(W- 	NRWWY--/1LM	N 	N 	Ns   #/BB$c                     t        j                  d      }t        d|      \  }}}|j                         }| j	                  d|       | j                  |d       y )Nz
            import logging

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

            rec()
        rx  z#Cannot recover from stack overflow.rm   )r  r  r   r  r3  r[   ry  s        rI   test_recursion_errorz(ModuleLevelMiscTest.test_recursion_errork  sU        -T48Cjjl>DQrk   c                    t        j                         }| j                  t         j                  |       | j	                  t         j                  |       t        j                         }| j	                  ||       | j                  ||       y r   )r   getLevelNamesMappingr[   r)   assertIsNot)rE   mappingnew_mappings      rI   test_get_level_names_mappingz0ModuleLevelMiscTest.test_get_level_names_mapping{  sj    ..0--w7--w7224+.+.rk   r   )rr   rs   rt   ru   rF  rQ  rT  rX  r\  r`  rd  rg  rm  rv  r~  r  r  r  rv   rk   rI   r<  r<    sN    3I.%0- " #
C3>5&N>  /rk   r<  c                       e Zd Zd Zd Zed
d       Zd Zd Zd Z	 e
j                         d        Z e
j                         d	        Zy)LogRecordTestc                     t        j                  i       }t        |      }| j                  |j	                  d             | j                  |j                  d             y )Nz<LogRecord: >)r   r   rr  rD   r  r]  )rE   r   ri   s      rI   test_str_repzLogRecordTest.test_str_rep  sD    !!"%F^45

3(rk   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   rC   r   r  r  r4  r[   r  rM   rL   )rE   rS   r   r  s       rI   test_dict_argzLogRecordTest.test_dict_arg  s    	Qf*A.aiil''+1--~>			rk   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_processrG   r   r   	swap_itemrR  modulesr  rh  )	r  r  r/  prev_logMultiprocessingr  rG   r1r2resultss	            rI   _extract_logrecord_process_namez-LogRecordTest._extract_logrecord_process_name  s    ")"<"<%7"	A(%%',,D&&se}'=>B ""3;;0A4H C**EU3%=+ABC )-)+)+G
 *AG&IIgNC C *AG&s$   AC$ :C"C$ C!C$ $C1c                    t        j                          dt        j                  v }	 | j	                  t
        j                  d       d}t        j                  i       }| j	                  |j                  d       | j                  d|      }| j	                  d|d          | j	                  d|d          | j	                  d|d          dd l
} |j                         \  }} |j                  | j                  d	||f
      }|j                          |j                         }| j                  d|d          | j	                  |d   |d          | j	                  d|d          |j!                          |rdd l
}y y # |rdd l
}w w xY w)Nr  TMainProcessrm   r  r  r  r   r   r  )r   r}  rR  r  r[   r   r  r   r  r  r  PipeProcessr  r)  assertNotEqualr   )	rE   multiprocessing_importedLOG_MULTI_PROCESSINGr   r  r  parent_conn
child_connr  s	            rI   test_multiprocessingz"LogRecordTest.test_multiprocessing  sz   ::<#4#C  	'W77>#'  %%b)AQ]]M:::1>RSG]GM,BC]G4D,EF]G4D,EF #&:o&:&:&<#K''';;-z;A GGI!&&(Gw}/EFW]3W=M5NO]G4D,EFFFH (& ('& (s   EE? ?	Fc                    | j                   }| j                  }t        j                  i       } ||j                          ||j
                          ||j                          ||j                          ||j                         t        j                  }t        j                  }t        j                  }t        j                  }	 dt        _	        dt        _
        dt        _        dt        _        t        j                  i       } ||j                          ||j
                          ||j                          ||j                          ||j                         |t        _	        |t        _
        |t        _        |t        _        y # |t        _	        |t        _
        |t        _        |t        _        w xY w)NF)r  r  r   r   r   
threadNameprocessr  taskName
logThreadslogProcessesr  logAsyncioTasks)rE   NONENOT_NONEr   log_threadslog_processeslog_multiprocessinglog_asyncio_taskss           rI   test_optionalzLogRecordTest.test_optional  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  )rE   	assertionr   s      rI   _make_record_asyncz LogRecordTest._make_record_async  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rE   make_recordrunners      rI   #test_taskName_with_asyncio_importedz1LogRecordTest.test_taskName_with_asyncio_imported  s    	011K! ;V*.'

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

;t'8'89:	; ))$/; ; ))$/s#    B% AB;B% B"B% %B<c                    	 | j                   }t        j                         5 }t        j                  t
        j                  dd       5  dt        _        |j                   || j                               dt        _        |j                   || j                               d d d        d d d        t        j                  d        y # 1 sw Y   'xY w# 1 sw Y   +xY w# t        j                  d        w xY w)Nr  TF)r  r  r  r   r  rR  r  r   r  r  r  r  r  s      rI   &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   )rr   rs   rt   r  r  r  r  r  r  r  r   r
  r  r  rv   rk   rI   r  r    so    )	  0#'J8@ %W$$&	0 '	0 %W$$&	0 '	0rk   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  rJ   r   r  rA   r#   r$   r%   r&   r'   r  r4   r   cleanupr  s    rI   rJ   zBasicConfigTest.setUp  sy    ot*,--%//446")"6"6q"9&-ll&8&8#% "rk   c                     t         j                  j                  d d  D ]1  }t         j                  j                  |       |j	                          3 t
        t        |           y r   )r   r  rA   rM   rL   r  r  rT   )rE   rS   r  s     rI   rT   zBasicConfigTest.tearDown  sK    &&q) 	ALL&&q)GGI	 	ot-/rk   c                 h   t        t        j                  d| j                         t        j                  j                          t        j                  j                  | j                         | j                  t        j                  d d  t        j                  j                  | j                         y )NrA   )r  r   r  rA   r#   rN   rO   r%   r'   r&   r8   r4   ro   s    rI   r  zBasicConfigTest.cleanup$  sp    j$--8!  !4!45"&"9"9Qd99:rk   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 )Nrm   r   )r   rH  r[   r\   r  rA   r  r:   r7   rR  r  r  r  r  BASIC_FORMATr  r  PercentStyler  r4   )rE   r   r  s      rI   test_no_kwargszBasicConfigTest.test_no_kwargs+  s     	W\\223Q7,,''*gw'<'<=4%%	))..0D0DE)++,i..0D0DE 	++T-H-HIrk   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  r7   r	  Log an errorr   ERROR:root:Log an errorr   r  r   rH  rR  r  r   r  r[   rY   r  r.  s     rI   test_strformatstylez#BasicConfigTest.test_strformatstyle?  x    $$& 	+&szz=MM.)JJOOAV__.446)+		+ 	+ 	+   BB&&B/c                 d   t        j                         5 }t        j                  t        j
                  d       t        j                  d       t        j
                  j                  d       | j                  |j                         j                         d       d d d        y # 1 sw Y   y xY w)Nr  r  r  r   r  r  r.  s     rI   test_stringtemplatestylez(BasicConfigTest.test_stringtemplatestyleG  r  r  c                 X   d }t        j                  dd       | j                  t        t         j                  j
                        d       t         j                  j
                  d   }| j                  |t         j                         t        j                  ddd      }| j                  |j                  j                  |j                  j                         | j                  |j                  j                  |j                  j                         | j                  |||d       y )	Nc                 n    | j                          |j                          t        j                  |       y r   r  r  h2r7  s      rI   r  z.BasicConfigTest.test_filename.<locals>.cleanupQ      HHJHHJIIbMrk   test.logrH  )rV  rJ  rm   r   rk  r  )r   rH  r[   r\   r  rA   r  rm  r7   moderG   r   rE   r  r   rg   s       rI   test_filenamezBasicConfigTest.test_filenameO  s    	
 	Z'BW\\223Q7,,''*gw':':;&&z3I,,hoo.B.BC,,hoo.B.BC(J?rk   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      rI   r  z.BasicConfigTest.test_filemode.<locals>.cleanupc  r  rk   r  wbrV  filemoder   )	r   rH  r  rA   rm  r[   r7   r  r   r  s       rI   test_filemodezBasicConfigTest.test_filemodea  su    	
 	Z$?,,''*&&z48,,hoo.B.BC(J?rk   c                    t        j                         }| j                  |j                         t	        j
                  |       | j                  t        t        j                  j                        d       t        j                  j                  d   }| j                  |t        j                         | j                  |j                  |       y )Nr  rm   r   )r5   r6   r   rL   r   rH  r[   r\   r  rA   r  r:   r7   )rE   r7   r   s      rI   test_streamzBasicConfigTest.test_streamo  s    %6*W\\223Q7,,''*gw'<'<=0rk   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  j                  d       y )Nz%(asctime)s - %(message)s)r!  r   )r   rH  r  rA   r  r[   r  r  rE   r  s     rI   test_formatzBasicConfigTest.test_formaty  sH    #>?LL))!,66	))..0KLrk   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  d       y )Nr~  )r  r   )r   rH  r  rA   r  r[   r  r  s     rI   test_datefmtzBasicConfigTest.test_datefmt  s@    E*LL))!,66	**E2rk   c                     t        j                  d       t         j                  j                  d   j                  }| j                  |j                  t         j                         y )Nr  r  r   )r   rH  r  rA   r  r  r  r  r  s     rI   
test_stylezBasicConfigTest.test_style  sF    #&LL))!,66	i..0K0KLrk   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   r8   rH  r[   )rE   	old_levels     rI   
test_levelzBasicConfigTest.test_level  sy    LL&&	--y9"%++R0"%++R0rk   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  )rV  r7   )rV  rA   )r7   rA   )loglevelrk  r  )r?  r   r:   rR  r  ra  rH  r   )rE   r?  rA   r7   s       rI   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8rk   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   )rA   r   rm   )r   r:   rR  r  r<   r?   rH  r  r  rA   r  r  )rE   rA   r   s      rI   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Crk   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   rm   T)r  rA   forcezWARNING:root:warnz WARNING:root:warn
INFO:root:info)r5   r6   r   r:   rH  r   r   r   r   r[   r\   r  rA   r   rY   r  )rE   old_string_ionew_string_ioold_handlersnew_handlerss        rI   
test_forcezBasicConfigTest.test_force  s;   --m<=--m<='//LIVgW\\223Q7',,"&	(VgW\\223Q7//1779,	.//1779<	>rk   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)
NrH  r  r  %(message)srV  rJ  errorsr!  r  rm   r   .   The Øresund Bridge joins Copenhagen to Malmör  r   rH  r9   r[   r\   r  rA   r  rm  rJ  r   rL   r  rb   r  r3  r  rE   rJ  r   r   r  s        rI   test_encodingzBasicConfigTest.test_encoding  sU   	OHh'/'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8MMJKMMOj73 (qvvx~~'(IIj!TMO( ( MMOj73 (qvvx~~'( ( (IIj!TMO0   CE *D99EF?#F	F?F/F?c                    	 d}t        j                  d|ddt         j                         | j                  t	        t         j
                  j                        d       t         j
                  j                  d   }| j                  |t         j                         | j                  |j                  |       t        j                  d       |j                          t        dd	
      5 }|j                         j                         }d d d        t        j                   d       | j                  d       y # 1 sw Y   1xY w# j                          t        dd	
      5 }|j                         j                         }d d d        n# 1 sw Y   nxY wt        j                   d       | j                  d       w xY w)Nr  r  ignorer  r  rm   r   r
  rH  r  z*The resund Bridge joins Copenhagen to Malmr  r  s        rI   test_encoding_errorsz$BasicConfigTest.test_encoding_errors  sO   	QHh'/'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8MMJKMMOj73 (qvvx~~'(IIj!T#OP( ( MMOj73 (qvvx~~'( ( (IIj!T#OPr  c                    	 d}t        j                  d|dt         j                         | j                  t	        t         j
                  j                        d       t         j
                  j                  d   }| j                  |t         j                         | j                  |j                  |       | j                  |j                  d       t        j                  d       |j                          t        dd	
      5 }|j                         j                         }d d d        t!        j"                  d       | j                  d       y # 1 sw Y   1xY w# j                          t        dd	
      5 }|j                         j                         }d d d        n# 1 sw Y   nxY wt!        j"                  d       | j                  d       w xY w)Nr  r  r  )rV  rJ  r!  r  rm   r   backslashreplaceu<   😂: ☃️: The Øresund Bridge joins Copenhagen to MalmörH  r  zL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)r   rH  r9   r[   r\   r  rA   r  rm  rJ  r	  r   rL   r  rb   r  r3  r  r  s        rI   test_encoding_errors_defaultz,BasicConfigTest.test_encoding_errors_default  sm   	KHh'4GMMK S!6!67;ll++A.G!!'7+>+>?W--x8W^^-?@MMXYMMOj73 (qvvx~~'(IIj!T $J K( ( MMOj73 (qvvx~~'( ( (IIj!T $J Ks0   C&E  EE G>F&	G&F/+/Gc                 $   	 d}t        j                  d|d dt         j                         | j                  t	        t         j
                  j                        d       t         j
                  j                  d   }| j                  |t         j                         | j                  |j                  |       | j                  |j                         g fd}||_        t        j                  d       | j                         | j                  d	d          |j!                          t#        dd
      5 }|j%                         j'                         }d d d        t)        j*                  d       | j                  d       y # 1 sw Y   1xY w# j!                          t#        dd
      5 }|j%                         j'                         }d d d        n# 1 sw Y   nxY wt)        j*                  d       | j                  d       w xY w)Nr  r  r  r  rm   r   c                 ^    j                  t        t        j                                      y r   )r`  rr  rR  r  )r   r  s    rI   dummy_handle_errorzEBasicConfigTest.test_encoding_errors_none.<locals>.dummy_handle_error  s    s3==?34rk   r
  z:'ascii' codec can't encode character '\xd8' in position 4:rH  r  r   )r   rH  r9   r[   r\   r  rA   r  rm  rJ  r  r	  r  r   rD   r  rL   r  rb   r  r3  r  )rE   rJ  r   r  r   r  r  s         @rI   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3 (qvvx~~'(IIj!T3'	( ( MMOj73 (qvvx~~'( ( (IIj!T3's0   DF :F		FH3G	HG$ /Hc                    d }d }t        dd      }| j                  t        j                  |       	 d}t	        j
                  |d|t        j                  d       | j                  t        t        j                  j                        d       t        j                  j                  d	   }| j                  |t        j                         t        j                  d
      5 }d
t        _        |j!                   |              d d d        t#        |d      5 }|j%                         j'                         }d d d        | j)                  d       t        j*                  d        |r|j-                          y y # 1 sw Y   xxY w# 1 sw Y   PxY w# t        j*                  d        |r|j-                          w w xY w)Nc                  6   K   t        j                  d       y w)Nzhello world)r   r   rv   rk   rI   rV  z5BasicConfigTest.test_log_taskName.<locals>.log_record'  s     OOM*s   r  ztest-logging-taskname-rH  r  z%(taskName)s - %(message)s)rV  r	  rJ  r  r!  rm   r   T)r   r  zTask-\d+ - hello world)r8  r   r3  r  r   rH  r   r[   r\   r  rA   r  rm  r  r  r  r  r  rb   r  assertRegexr  rL   )rE   rV  r   log_filenamerJ  r  r   r  s           rI   test_log_taskNamez!BasicConfigTest.test_log_taskName%  sa   	+ %f.FG		<0	 Hh)1'CE S!6!67;ll++A.G!!'7+>+>?d+ )v*.'

:<() lW5 (vvx~~'(T#<=))$/ ) )( ( ))$/ s<   B0F #"E<F F9F <FF FF *F>c                      g t         j                   fd}t        j                   t         d|       t	        t         |      }|
 ||d       n |d        j                  di fg       y )Nc                               t         j                  j                  }t         j                  j                  d       j	                  t         j                  j                  |       j                  | |f       y )Nd   )r   r  r  r8   r   r`  )rk  rJ  r  r   old_basic_configrE   s      rI   my_basic_configz2BasicConfigTest._test_log.<locals>.my_basic_configH  sR    **ILL!!#&OOGLL119=MM1b'"rk   rH  ztest merv   )r   rH  r   ri  r.   r[   )rE   rg  r  r"  rO  r   r!  s   `    @@rI   rQ  zBasicConfigTest._test_logC  si    "..	# 	dG]ODWf-
ui(y! 	2r(,rk   c                 D    | j                  dt        j                         y rS  )rQ  r   r   ro   s    rI   rT  zBasicConfigTest.test_logZ  s    ugoo.rk   c                 &    | j                  d       y rV  rW  ro   s    rI   rX  zBasicConfigTest.test_debug]  rY  rk   c                 &    | j                  d       y r[  rW  ro   s    rI   r\  zBasicConfigTest.test_info`  r]  rk   c                 &    | j                  d       y r_  rW  ro   s    rI   r`  zBasicConfigTest.test_warningc  ra  rk   c                 &    | j                  d       y rc  rW  ro   s    rI   rd  zBasicConfigTest.test_errorf  rY  rk   c                 &    | j                  d       y rf  rW  ro   s    rI   rg  zBasicConfigTest.test_criticali  rh  rk   r   )#rr   rs   rt   ru   rJ   rT   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r
  r  rQ  rT  rX  r\  r`  rd  rg  r  r  s   @rI   r  r    s    -#0;J(++@$@1M3M19D">*O(Q&K((@ %W$$&  ' :-./ " #rk   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   rI   r  z(LoggerAdapterTest.setUp.<locals>.cleanupx  s    &6G  #rk   r   r  )r  r*  rJ   r   r&   r  rN  r  r   rC   r   rM   rL   r  r   adapter)rE   r  r-  r  s     @rI   rJ   zLoggerAdapterTest.setUpn  s    ,."//2)+llt~~.114>>B,,-	7 	 ((),,DKKtLrk   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: %rrm   r   )rc  r/  r  rN  r[   r\   r  r   r   r   r  r4  r  r  __traceback__rE   r  rd  r)  r   s        rI   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)Nrm   r   zexc_info testr^  )
rc  r/  r  r[   r\   rN  r  r  r  r2  )rE   r)  rd  r   s       rI   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! %rrm   r   rg  )r/  r  rN  r[   r\   r  r   r   r}   r  r4  r  )rE   r  r   s      rI   rg  zLoggerAdapterTest.test_critical  s    !c4>>2T^^334a8''*)9)9:S)t~~&78/:rk   c                 b   | j                   j                  j                  j                  }d| j                   j                  j                  _        | j	                  t
        | j                   j                  j                  d|       | j                  | j                   j                  d             y )N!   rP       )r/  r   r    rP   r   r  rY  isEnabledForrE   rE  s     rI   test_is_enabled_forz%LoggerAdapterTest.test_is_enabled_for  sw    ll))1199.0##+!4!4!<!<i#	%22267rk   c                 f   | j                  | j                  j                                | j                  j                  D ]  }| j                  j                  |        | j                  | j                  j                                | j                  | j                  j                                y r   )rD   r/  r@   r   rA   rM   rY  ra  s     rI   test_has_handlersz#LoggerAdapterTest.test_has_handlers  s~    0023{{++ 	/GKK%%g.	/ 	00231134rk   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.r.  AdapterAdapterrm   r   zAdapter AdapterAdapter test_nested)PrefixAdapterr   r   r[   r  r   r   r}   rN  r\   r  r   r  r4  r  r    r  r  )rE   r  r/  adapter_adapterr   orig_managertemp_managers          rI   rC  zLoggerAdapterTest.test_nested  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, {}!worldrL  zHello, world!test_styled_adapterGoodbye {}.zGoodbye world.)rN  r  StyleAdapterr   r   r[   rr  r  r  r   r   r   )rE   r  r/  s      rI   rK  z%LoggerAdapterTest.test_styled_adapter  s    ..((t{{+g.WR[__-?--/DEGOO]G<WR[__-/?@--/DErk   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{}rI  rJ  rL  z{} Hello, world!test_nested_styled_adapterrL  z{} Goodbye world.)rN  r  rD  r   r   rM  r   r[   rr  r  r  r   r   r   )rE   r  r/  adapter2s       rI   rO  z,LoggerAdapterTest.test_nested_styled_adapter  s    ..((,(w/WR[__-/AB--/KLW__mW=WR[__-/BC--/KLrk   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 )
Nrm   c                       d        y Nr  
stacklevelrv   	the_leveltriggers   rI   	innermostzELoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.innermost      Fy1rk   c                                y r   rv   rY  s   rI   r  zALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.inner      Krk   c                                y r   rv   r  s   rI   outerzALoggerAdapterTest.test_find_caller_with_stacklevel.<locals>.outer      Grk   rL  rY  r  r`   test_find_caller_with_stacklevel)r/  r   rN  r  r[   r  r  r  )rE   r`  r  r  r  rY  rW  rX  s       @@@@rI   rb  z2LoggerAdapterTest.test_find_caller_with_stacklevel  sJ   	,,&&	2		 ..((--{;##Q	--w772;--v6##Q	--w772;--v6##Q	--/QR72;--v6rk   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~   r.  zfoo should be hererm   r   )r   r   r   r/  r  r[   r\   rN  r  rD   rC  r}  r   s     rI   test_extra_in_recordsz'LoggerAdapterTest.test_extra_in_records  s    ,,DKK493<A 	23T^^334a8''*./S)rk   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)r  rm   r   )r/  r  r[   r\   rN  r  rY  rC  r   s     rI    test_extra_not_merged_by_defaultz2LoggerAdapterTest.test_extra_not_merged_by_default  sf    6ufoNT^^334a8''*/0rk   )rr   rs   rt   rJ   r4  r7  rg  r>  r@  rC  rK  rO  rb  rd  rg  r  r  s   @rI   r*  r*  m  sE    M"B"B	;8598	F
M7@*1rk   r*  c                       e Zd ZdZd Zy)rD  Adapterc                 (    | j                    d| |fS r  r   )rE   r  r5  s      rI   r  zPrefixAdapter.process  s    ++au%v--rk   N)rr   rs   rt   r   r  rv   rk   rI   rD  rD    s    F.rk   rD  c                       e Zd Zd Zd Zy)Messagec                      || _         || _        y r   )r  r4  )rE   r  r4  s      rI   r  zMessage.__init__$  s    	rk   c                 H     | j                   j                  | j                   S r   )r  r!  r4  ro   s    rI   __str__zMessage.__str__(  s    txx		**rk   N)rr   rs   rt   r  rp  rv   rk   rI   rm  rm  #  s    +rk   rm  c                       e Zd ZdddZy)rM  rm   rT  c                   | j                  |      rE| j                  ||      \  }} | j                  j                  |t	        ||      fi |d|dz   i y y )NrU  rm   )r<  r  r   r   rm  )rE   r  r  rU  r4  r5  s         rI   r   zStyleAdapter.log-  sY    U#,,sF3KCDKKOOE73#5 5 5'1!|5 $rk   N)rr   rs   rt   r   rv   rk   rI   rM  rM  ,  s
    34 5rk   rM  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rG   )r  rt  rJ   r  rN  r   r  r   rC   r   rM   rL   r  r  s    rI   rJ   zLoggerTest.setUp6  s    j$%')+nn&1t~~.114>>B,,-(()rk   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  r  r   r8   ro   s    rI   test_set_invalid_levelz!LoggerTest.test_set_invalid_level?  sJ    !!EKK  $	( 	!!GKK  &	*rk   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r1  )rc  r   r  rN  r[   r\   r  r   r   r   r  r4  r  r  r2  r3  s        rI   r4  zLoggerTest.test_exceptionG  s    %	7E
 	T^^334a8''*7S)t~~&78--c.?.?@	B ! 	7CKK!!#t~~66	7r5  c                     t        j                  t        dd      5  | j                  t        | j
                  j                  dd       d d d        y # 1 sw Y   y xY w)Nr  Tr   test message)r   	swap_attrr   r?  r  r   r   ro   s    rI   !test_log_invalid_level_with_raisez,LoggerTest.test_log_invalid_level_with_raiseX  sJ    w(94@ 	Pi$O	P 	P 	Ps   -AAc                     t        j                  t        dd      5  | j                  j	                  dd       d d d        y # 1 sw Y   y xY w)Nr  Fr   r|  )r   r}  r   r   r   ro   s    rI   test_log_invalid_level_no_raisez*LoggerTest.test_log_invalid_level_no_raise\  s<    w(95A 	2KKOOD.1	2 	2 	2s   AAc                     g t        j                  | t        j                  dfd       | j                  j                  d       | j                  t              d       | j                  dd          y )Nprint_stackc                 B    j                  |j                               S r   )r`  rY   )r   r  r   s     rI   rK  z=LoggerTest.test_find_caller_with_stack_info.<locals>.<lambda>c  s    fmmDMMO&D rk   Tr_  rm   r  r   )r   ri  r   	tracebackr   
findCallerr[   r\   )rE   r   s    @rI    test_find_caller_with_stack_infoz+LoggerTest.test_find_caller_with_stack_info`  sd    dG--}D	F 	$/Va(;VAYGrk   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 )
Nrm   c                       d        y rS  rv   rV  s   rI   rY  z>LoggerTest.test_find_caller_with_stacklevel.<locals>.innermostn  rZ  rk   c                                y r   rv   r\  s   rI   r  z:LoggerTest.test_find_caller_with_stacklevel.<locals>.innerq  r]  rk   c                                y r   rv   r_  s   rI   r`  z:LoggerTest.test_find_caller_with_stacklevel.<locals>.outert  ra  rk   rL  rY  r  r`  rb  )r   r   rN  r  r[   r  r  r  r   r   rC   rM   )	rE   r`  r  r  r2   r  rY  rW  rX  s	        @@@@rI   rb  z+LoggerTest.test_find_caller_with_stacklevelj  s   	++%%	2		 ..((--{;##Q	--w772;--v6##Q	--w772;--v6##'')t~~.//--w7!!$..1++%%Q	--/QR72;--v6rk   c                 (   d}d}d x}x}x}x}x}x}}	t        j                  |||||||||		      }
dt        |
j                  j	                               z   D ]:  }|di}| j                  t        | j                  j                  |||||||||	       < y )N	my record   )r  r  
some valuer  sinfo)	r   _logRecordFactoryr`   __dict__keysr?  r  r   
makeRecord)rE   rG   r  r7  lnor  r4  r  r  r  rvr  r  s                rI   %test_make_record_with_extra_overwritez0LoggerTest.test_make_record_with_extra_overwrite  s    :>>>S>3>>>4%&&tUBS$'/u> *E"++2B2B2D,EE 	8C,'Eh(>(>e #sD($)  8	8rk   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  )rE   rG   r  r7  r  r  r4  r  r  r  r  r  s               rI   (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??3rk   c                    | j                  | j                  j                                | j                  j                  D ]  }| j                  j	                  |        | j                  | j                  j                                y r   )rD   r   r@   rA   rM   rY  ra  s     rI   r@  zLoggerTest.test_has_handlers  sa    //12{{++ 	/GKK%%g.	/0023rk   c                 z    t        j                  d      }d|_        | j                  |j	                                y )Nz
blah.childF)r   r   rj  rY  r@   )rE   child_loggers     rI   test_has_handlers_no_propagatez)LoggerTest.test_has_handlers_no_propagate  s1    ((6!&1134rk   c                 &   | j                   j                  j                  }d| j                   j                  _        | j                  t        | j                   j                  d|       | j                  | j                   j                  d             y )N   rP      )r   r    rP   r   r  rY  r<  r=  s     rI   r>  zLoggerTest.test_is_enabled_for  sb    kk))11&(#!4!4iM11"56rk   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   rP   r  )r   r   r    rP   r   r  rY  r<  )rE   old_disabledrE  s      rI   #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6rk   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}  r1   )r   r   r  r  r  r  )rE   r  s     rI   test_root_logger_aliasesz#LoggerTest.test_root_logger_aliases  s     "dGLL)dG--d34dG--b12dG--f56dG--e499:dG--i8==>dG--e4;;<w0067w00;BBCrk   c                     | j                  t        t        j                  t               | j                  t        t        j                  d       y )Ns   foo)r?  r  r   r   anyro   s    rI   test_invalid_nameszLoggerTest.test_invalid_names  s2    )W%6%6<)W%6%6?rk   c                     t        t        j                  dz         D ][  }dD ]T  }t        j                  |      }t        j
                  ||      }t        j                  |      }| j                  ||       V ] y )Nrm   )r   r  r}  r1  zbaz.bar)ry  r,  HIGHEST_PROTOCOLr   r   rr  r-  r  )rE   protorG   r   ri   	unpickleds         rI   test_picklingzLoggerTest.test_pickling  sk    622Q67 	1EA 1 **40LL/"LLO	i0	1	1rk   c                 n
   | j                   }t        j                  d      }t        j                  d      }|j                  t        j                         | j                  |j                         t        j                         | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                  dt        j                  di       | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  t        j                  di       |j                  t        j                         | j                  |j                         t        j                         | j                  |j                  i        | j                  |j                  t        j                               |j                  t        j                         | j                  |j                         t        j                         | j                  |j                  i        | j                  |j                  i        | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                               t        j                          | j                  |j                         t        j                         | j                  |j                  i        | j                  |j                  i        | j                  |j                  i        | j                  |j                  t        j                               | j                  |j                  t        j                               | j                  |j                  t        j                               y )Nr$  r(  TF)r2   r   r   r8   r   r[   r3   _cacherD   r<  rY  r9   r}   r   rP   )rE   r  r0   r1   s       rI   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+;+;<=rk   )rr   rs   rt   rJ   ry  r4  r~  r  r  rb  r  r  r@  r  r>  r  r  r  r  r  r  r  s   @rI   rt  rt  4  s^    **B"P2H%7N8445
7
7D@16>rk   rt  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   rJ   r8  r7  rmfilesro   s    rI   rJ   zBaseFileTest.setUp  s$    t ):;rk   c                 
   | j                   D ]  }t        j                  |        t        j                  j	                  | j
                        rt        j                  | j
                         t        j                  |        y r   )r  r3  rT  rZ  r[  r7  r   rT   )rE   r7  s     rI   rT   zBaseFileTest.tearDown  sR    ,, 	BIIbM	77>>$''"IIdgg$rk   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)rD   r3  rZ  r[  r  r`  )rE   rV  s     rI   assertLogFilezBaseFileTest.assertLogFile&  s=    x088C 	 	EH%rk   c           
      r    t        j                  dt         j                  dd| j                         d d d       S )Nrt  r  rm   )r   r  r9   rp   ro   s    rI   next_reczBaseFileTest.next_rec,  s5      gmmS!!%!2!2!4dD$H 	Hrk   N)rr   rs   rt   ru   rJ   rT   r  r  rv   rk   rI   r  r    s    7
 &Hrk   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 )NrH  TrI  )r3  rT  r7  r   rm  r  r7   rY  rZ  r[  rX  r   r  rD   rL   )rE   fhs     rI   
test_delayzFileHandlerTest.test_delay1  s    
		$''  7$G"))$01
		'''+,RYY'tww/0

rk   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)NrH  rj  )rJ  r  r  r~   )r3  rT  r7  r   rm  r?   r<   rA  r  rL   r  r[   rb   r  )rE   r  r  s      rI   %test_emit_after_closing_in_write_modez5FileHandlerTest.test_emit_after_closing_in_write_mode;  s    
		$''  7E
))-89
 


 $''] 	5bRWWY__.4	5 	5 	5s   	/DD
N)rr   rs   rt   r  r  rv   rk   rI   r  r  0  s    	5rk   r  c                       e Zd Z ej                  ej                  d      d        Zd Zd Z	d Z
d Z ej                         d        Zy)	RotatingFileHandlerTestWASI does not have /dev/null.c                    t         j                  j                  | j                  dd      }| j	                  |j                  d              |j                          t         j                  j                  t        j                  dd      }| j	                  |j                  | j                                      |j                          y )NrH  r   rJ  maxBytesrm   )
r   rA   rn  r7  rY  shouldRolloverrL   r3  devnullr  rE   rhs     rI   test_should_not_rolloverz0RotatingFileHandlerTest.test_should_not_rolloverG  s     11'A 2 7**401

 11

Wq 2 :**4==?;<

rk   c                     t         j                  j                  | j                  dd      }| j	                  |j                  | j                                      |j                          y )NrH  rm   r  )r   rA   rn  r7  rD   r  r  rL   r  s     rI   test_should_rolloverz,RotatingFileHandlerTest.test_should_rolloverV  sJ    11$''GVW1X))$--/:;

rk   c                     t         j                  j                  | j                  d      }|j	                  | j                                | j                  | j                         |j                          y )NrH  r  )r   rA   rn  r7  rA  r  r  rL   r  s     rI   test_file_createdz)RotatingFileHandlerTest.test_file_created[  sP     11$''G1L
 477#

rk   c                    d }t         j                  j                  | j                  ddd      }||_        |j                  | j                                | j                  | j                         |j                  | j                                | j                   || j                  dz                |j                  | j                                | j                   || j                  dz                | j                  t        j                  j                   || j                  dz                      |j                          y )	Nc                     | dz   S N.testrv   rw  s    rI   namerz>RotatingFileHandlerTest.test_rollover_filenames.<locals>.namerd  s    '>!rk   rH  r   rm   rJ  backupCountr  .1.2.3)r   rA   rn  r7  r  rA  r  r  rY  r3  rZ  r[  rL   )rE   r  r  s      rI   test_rollover_filenamesz/RotatingFileHandlerTest.test_rollover_filenamesc  s    	"11GGg1q 2 B
 477#
 5401
 5401dggn(=>?

rk   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  rv   )rE   rG   s     rI   r  z`RotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.namert  s    g~%rk   c                 v    t         j                  j                  |      rt        j                  ||dz          y y )N.rotated)r3  rZ  r[  r  )rE   sourcedests      rI   rotatorzbRotatingFileHandlerTest.test_namer_rotator_inheritance.<locals>.HandlerWithNamerAndRotator.rotatorw  s*    77>>&)JJvtj'89 *rk   N)rr   rs   rt   r  r  rv   rk   rI   HandlerWithNamerAndRotatorr  s  s    &:rk   r  rH  r   rm   r  r  r  r  )r   rA   rn  r7  r[   r  rA  r  r  rY  r3  rZ  r[  rL   )rE   r  r  s      rI   test_namer_rotator_inheritancez6RotatingFileHandlerTest.test_namer_rotator_inheritancer  s    	:)9)9)M)M 	: (GGg1qB$''*DGGg,=>
 477#
 288DGGdN3j@A4(@AB

rk   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.gzrv   rw  s    rI   r  z3RotatingFileHandlerTest.test_rotator.<locals>.namer  s    %<rk   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rbrq  r  )r  rb   zlibcompressr  r3  r  )r  r  sfr  
compresseddfs         rI   r  z5RotatingFileHandlerTest.test_rotator.<locals>.rotator  sy    fd# )rwwy!]]43
$% )HHZ())
 IIf) )) )s#   3B A8B8B	=BBrH  r   rm   r  r  r  r  r  r  )r   rA   rn  r7  r  r  r  rA  r  r3  linesepr  rb   r  
decompressr[   r  r  rY  rZ  r[  rL   )rE   r  r  r  m1m2r7  newliner   r  r  s              rI   test_rotatorz$RotatingFileHandlerTest.test_rotator  sV   	 	 11GGg1q 2 B
]]_
477#]]_
477T>"2**"d^ 	EqJ??:.DT[[1266G3CD	E 	 477T>"2"d^ 	EqJ??:.DT[[1266G3CD	E 	 477T>""d^ 	EqJ??:.DT[[1266G3CD	E 	dggn(=>?

%	E 	E	E 	E	E 	Es'   !AKAK%*AK2K"%K/2K;N)rr   rs   rt   r  r  r   is_wasir  r  r  r  r  requires_zlibr  rv   rk   rI   r  r  F  sZ    X__W__&EF G
& W* *rk   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SrH  rm   rJ  r  皙?r  ztesting - device file)r   rA   ro  r3  r  rz  r|  r   rY  r  rL   )rE   r  r   s      rI   r  z5TimedRotatingFileHandlerTest.test_should_not_rollover  sp     66

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

3!!5*A"BC**1-.

rk   c                    t         j                  j                  | j                  ddd      }t        j                  d      }|j                  |       t        j                  ddi      }|j                  |       | j                  | j                         t        j                  d       t        j                  dd	i      }|j                  |       |j                          d
}t        j                  j                         }d}t        |      D ]w  }|t        j                  |      z
  }	| j                  |	j!                  d      z   }
t"        j$                  j'                  |
      }|s\| j(                  j+                  |
        n d|z  }|st"        j$                  j-                  | j                        \  }}
t#        j.                  |      D cg c]  }|j1                  |
      s| }}t3        d|j!                  d      z  t4        j6                         t3        d|z  t4        j6                         |D ]^  }t3        d|z         t"        j$                  j9                  ||      }t;        |d      5 }t3        |j=                                d d d        ` | j?                  ||       y c c}w # 1 sw Y   xY w)Nr  rH  rm   r  r  r  ztesting - initialr  ztesting - after delayFi,  secondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondszTest time: %sz%Y-%m-%d %H-%M-%Sr  zThe only matching files are: %szContents of %s:r   r  ) r   rA   ro  r7  r<   r?   r   rA  r  rz  r|  rL   r  r<  ry  	timedeltastrftimer3  rZ  r[  r  r`  r   listdirr  r  rR  r  r   r  rb   rD   )rE   r  r  r  r  foundr<  GO_BACKsecsprevr7  r  dnr   filesrZ  tfs                    rI   test_rolloverz*TimedRotatingFileHandlerTest.test_rollover  s5   66wA 7 ? 9:
""E+>#?@
477#

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

2C1!,,r2BQCEC/CLL1D$EECJJW3e;#**M %'!+,ww||B*$_ %"'')$% %%
 	3' D% %s   J5-J5=J::K	c                 *   t        j                  | 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  rH  )rJ  whenatTimer  z	testing1 r  rm   r   z	testing2    daysr   z%Y-%m-%d)r   rT  r7  r  r<  rz  r  r|  r  r   r<   weekdayry  rA   ro  r?   r   rA  rL   r  r  	enumerater  r3  utime	timestampr  )rE   weeklyr<  r  r  r  ru  r  r  r   linerolloverDateotherfns                rI   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, 	5$Q< 54	!ot45	5 	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, 	5$Q< 54	!ot45	5 'G, 	5$Q< 54	!ot45	5 	5%	5 	5	5 	5	5 	5s$   7)M0>)M==)N	0M:=N	Nc                 (    | j                  d       y )NT)r  )r   ro   s    rI   test_rollover_at_weekdayz5TimedRotatingFileHandlerTest.test_rollover_at_weekday  s    &&d&3rk   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XrH  TrI  r  W7)r?  ra  r   rA   ro  r7  )rE   r?  s     rI   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rk   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   rH  r  TrJ  r  r  r  Q rm   i  i_      i@ ж  )	r   rA   ro  r7  computeRolloverr[   rL   r  rz  )rE   currentTimer  rf   r  s        rI   "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)Nr)  r*  r   r  rH  zW%drm   T)rJ  r  intervalr  r  r  r+  zfailed in timezone: %dzlocal vars: %si:	 r,  )rq  rz  r  r  tm_wdayry  r   rA   ro  r7  r-  r  timezonelocalsr[   rL   )	rE   r.  todayr  wdaydayr  rg   rf   s	            rI   #test_compute_rollover_weekly_attimez@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attimeH  s6   $))+&kE11r1a({{5!))8 -	C!!::'aUV ; )B)#: !"D3H #d
HL(L(E!++E2X%2T]]BC*VX56  2++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  rk  re  %Y-%m-%d_%H-%M-%Sr
  r  )a.bza.b.cd.ezd.e.fr  z%s.logri   r  Tr  r1  r  rK  r;  z.log.r<  c                     t         j                  j                  |       \  }}|j                  dd      dz   }t         j                  j	                  ||      S )Nr  r   )r3  rZ  r   r  r   rV  r  basenames      rI   r  zHTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.namer  sE    (*h(?%GX'//;fDH77<<::rk   r   r  r  c                     t         j                  j                  |       \  }}d|dd  z   dz   }t         j                  j                  ||      S )Nr     .oldlog)r3  rZ  r   r   r?  s      rI   r  zHTimedRotatingFileHandlerTest.test_compute_files_to_delete.<locals>.namer  sC    (*h(?%GX"Xab\1I=H77<<::rk   z
g%s.oldlogr  r  z%s.log.r   rC  rm   )r1  mkdtempr   shutilrmtreer  r<  ry  r`  r  r  r3  rZ  r   r   rA   ro  r  r  r  r  getFilesToDeleter[   r\   r   rD   r]  isdigit)rE   wdtimesr  ru  prefixesr  rotatorsr   r  r  r  r  r7  r   
candidatesr  r  s                     rI   test_compute_files_to_deletez9TimedRotatingFileHandlerTest.test_compute_files_to_delete~  se   _5r*""$r 	0ALL%89:($$Q//B	0 9 	3FRF!23A&&??IJLMFJ @ LG OOG$  ' <ALL!:;<""5); !& <ALL!:;<3; !& 3ALL!1231	36  	BR$Aa ! 	
 #8, 	LIAvqkG 113JS_a<  '&# 6AGGMM!,EArOOBMM!$456 ""5)# CAGGMM!,EArOOBKK$7<OOBMM&3,$? %B$&s6{Q$7$?$?$ACC
 3# LAGGMM!,EArOOBKK	$:;OOBMM#$6$J2a5==?KL!	L 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  rk  re  r:  r
  r  )za.logza.log.brm   ri   Tr=  r   z
a.log.%s.cz&^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\Z)pathlibPathr1  rD  r   rE  rF  r  r<  ry  r`  r  r  r  r   rA   ro  touchrG  r[   r\   rV   rW   r3  rZ  r   rD   r  r  )rE   rI  rJ  r  n_filesr  rK  r  rL  ru  r   r  r  r  r   rM  matcherr  r  r7  r  s                        rI   ?test_compute_files_to_delete_same_filename_different_extensionsz\TimedRotatingFileHandlerTest.test_compute_files_to_delete_same_filename_different_extensions  s    \\(**/BCr*""$w 	0ALL%89:($$Q//B	0 ("8, 	4IAvA#K&&??VRUIJLWFJ @ LG OOG$ 4234	4  	+ALL)*	+  	A!VNN	 #8, 
	2IAvA#KqkG 113JS_g.CZPjj!JKG 2a(2fSj 9:S[],-  1	2
	2rk   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   r  r-  r  r[   r  r  currentrg   rf   diffr  rE   s       rI   r  zOTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local.<locals>.test  T    ''(9(9(;<FH..00D  q(*<*<T*JK rk   rH  r  FrJ  r  r    r  re  r  ;      r   r*  rm   rx  r
  r(  r  r   fold      r  r   rA   ro  r7  rL   rz  rE   DTr  r  s   `  @rI   $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%;<

rk   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 rX  rY  rZ  s       rI   r  zITimedRotatingFileHandlerTest.test_compute_rollover_W6_local.<locals>.test]  r]  rk   rH  W6Fr^  r_  r  rx  r  r`  r
  r   r*  rm   re     re  ra  r(     r  r   rb  rd  rf  rg  s   `  @rI   test_compute_rollover_W6_localz;TimedRotatingFileHandlerTest.test_compute_rollover_W6_localY  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%<=

rk   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 rX  rY  rZ  s       rI   r  zXTimedRotatingFileHandlerTest.test_compute_rollover_MIDNIGHT_local_interval.<locals>.test  r]  rk   rH  r  Fr  rJ  r  r  r1  r_  r  r  r`  ra  r   rq  r*  rm   re  r  rp  rx  r   r
  rB  r  rJ  r  r  r1  r  rf  rg  s   `  @rI   -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%;<

rk   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 rX  rY  rZ  s       rI   r  zRTimedRotatingFileHandlerTest.test_compute_rollover_W6_local_interval.<locals>.test  r]  rk   rH  rl  Fr  rr  r_  r      r  r`  r
  r   rl  r*  rm   rx     re  rp  re     ra  rm  rs     rn  r  r  rf  rg  s   `  @rI   '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&=>

rk   NF)rr   rs   rt   r  r  r   r  r  r  r   r"  r&  r/  r8  rN  rU  run_with_tzri  ro  rt  r{  rv   rk   rI   r  r    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rk   r  c                  Z    t        j                  di | t        j                  d      z  S )Nrm   r  rv   )r  r  )rJ  s    rI   r	  r	  P  s&    ##x'9'9!'DDDrk   )r  rm   )M<   )Hi  )Dr)  )r  r)  W0rx     )r  hours)rm   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)NrH  r   T)rJ  r  r1  r  r  g        r  r  rm   r  r  r  rx  r
  r  zt: z ()r  zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz
result: %sz exception in diagnostic code: %s)r   rA   ro  r7  r-  r  r	  r  rz  r  	localtime	_MIDNIGHTr  rR  r  r  r[   rL   )rE   r  r1  expr  r.  rf   r  currentHourcurrentMinutecurrentSecondr   r  r)  s                 rI   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 MessageFr   zTest Log Message
Tz3Record not found in event log, went back %d recordsr  )win32evtlogOpenEventLogGetNumberOfEventLogRecordsr   rA   NTEventLogHandler
pywintypesr   winerrorr  SkipTestr   rX  rL   
assertLessEVENTLOG_BACKWARDS_READEVENTLOG_SEQUENTIAL_READReadEventLog
SourceNamewin32evtlogutilSafeFormatMessagerD   )rE   logtypeelhnum_recsrS   r)  r   flagsr  r  eventsr  s               rI   r^  z NTEventLogHandlerTest.test_basic  sY   &&tW599#>	  22>BA !!5*<"=>			+"H"H"MN33445))#ug> 	A||~-!33Aw?C,,E	 DgM3'1  	zzQ''(MNN	s   D6 6E3	%E..E3N)rr   rs   rt   r^  rv   rk   rI   r  r    s    (rk   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   )rE   r  s     rI   test__all__zMiscTestCase.test__all__  s    ,
 	T7Frk   N)rr   rs   rt   r  rv   rk   rI   r  r    s    Grk   r  c                  V    t        j                  t        j                  dd             y )NLC_ALLr   )r  enterModuleContextr   run_with_localerv   rk   rI   setUpModuler    s     7 7" EFrk   __main__r   r|  )ru   r   logging.handlerslogging.configr  r  r$   r  rP  r,  r5   r  r  rq  r3  r  r}  rV   rE  r  r*  rR  r1  test.support.script_helperr   r   r  r   test.supportr   r   r   r	   r
   r   r   test.support.logging_helperr   r  r  r  rz  r  r  r}  http.serverr   r   urllib.parser   r   socketserverr   r   r   r   r  r  r  r  r  r  HAVE_ASAN_FORK_BUGr  check_sanitizerr  TestCaser   rx   r   SILENTr   TERSEEFFUSIVEr   r!  	TALKATIVEr   
CHATTERBOXBORINGry  r   r   r   r   r   r   r8  r:  r  r  r:   r  r  r  r  r  r  r  r,  r:  rC  rH  rM  r
  r  rO  rc  r<   r  r  r  r  rh  r?  rE  rP  rT  rb  IPV6_ENABLEDre  rk  r  r  r  r  r  r  r  rA   rX  r  r  r  r  r  r  r  r"  r  r9  r;  rH  r  unittest.mockri  rk  r  r  tzinfor  r  r  r  r  r  r  r  r  r  r  r  r	  r<  r  r  r*  r   rD  rm  rM  rt  r  r  r  r  r	  r  r  r1  r  rG   rr   r  r  r  r  mainrv   rk   rI   <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 		%++ 	J?X J?Z2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,jl jX[
< [
|E  %,1B/0 2KID#  *K-1H# $	J *D0a<KD)-&,d4IJU*K2Kj ["bc (H  ( d (FG8$$ GG zHMMO qS  6155K5/J6
  		s$   ] ]- ]*)]*-]65]6