
    z%iV                    
   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$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/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5  e)jl                         5  ddl7m8Z8 ddd       	 ddl9Z9ddl:Z:ddl;Z;	 ddl=Z= G d de(j|                        Z? G d de?      Z@ G d de?      ZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZK eLeKeBdz         ZMeBd eCd!eDd"eEd#eFd$eGd%eHd&eId'eJd(eKd)i
ZN G d* d+ej                        ZP G d, d-ej                        ZQ G d. d/e?      ZRd0 ZS G d1 d2e?      ZT G d3 d4eU      ZV G d5 d6ej                        ZX G d7 d8eU      ZY G d9 d:e?      ZZ G d; d<e8j                        Z\ G d= d>eU      Z] G d? d@e]e,      Z^ G dA dBe]e4      Z_ G dC dDe]e2      Z` eaedE      r G dF dGe_      Zb G dH dIe`      Zc ej                          ej                          G dJ dKe?                    Zf G dL dMe?      Zg G dN dOej                        ZidP Zj G dQ dRe?      Zk ej                          ej                          G dS dTe?                    Zl e(j                   eaedE      dU       G dV dWel             Zn ej                          ej                          G dX dYe?                    Zo e(j                   eaedE      dU       G dZ d[eo             Zp ej                          ej                          G d\ d]e?                    Zq e(j                   eaedE      dU       G d^ d_eq             Zr e(j                  ej                  d`       G da dbeq             Zt ej                          ej                          G dc dde?                    Zu G de dfe?      Zv G dg dhe?      Zw G di dje?      ZxddkZy G dl dm      Zzdn Z{ G do dpej                        Z| G dq drej                  j                        Z G ds dtej                         Zdu ZddvZ G dw dxe?      Z G dy dze?      Z G d{ d|e?      Z G d} d~ej                        Z G d de?      Z ej                          G d de?             Z eaej                  d      r)ddlZddlmZ  ej                          G d de?             Z ej                  d      Z G d dej"                        Z e       Z G d d      Z G d de(j|                  e      Z G d dej,                        Z G d de(j|                        Z G d de?      Z G d de?      Z G d d      Z G d dej8                        Z G d de?      Z G d de?      Z G d de?      Z G d de(j|                        Z G d de(j|                        Z G d de?e      Z G d de?      Z G d de      Z G d de      Z G d de      Zd Zdddddd edd      ffD ]  \  ZZeefdZ eedez  e         e(j                  e9d       G d de?             Z G d de(j|                        Zd Zedk(  r e(jb                          yy# 1 sw Y   xY w# e<$ r
 dxZ9xZ:Z;Y w xY w# e<$ r Y 
w xY w)zoTest harness for the logging module. Run all tests.

Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved.
    N)assert_python_okassert_python_failure)support)	os_helper)socket_helper)threading_helper)warnings_helper)asyncore)TestHandler)
HTTPServerBaseHTTPRequestHandler)urlparseparse_qs)ThreadingUDPServerDatagramRequestHandlerThreadingTCPServerStreamRequestHandler   )smtpdc                   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         E/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_logging.pysetUpzBaseTest.setUpW   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) r6   closer1   removeHandlerr:   r@   r7   r3   r   r!   r*   clearupdater+   r(   r)   r"   r$   r&   r%   r   r   disabler    r'   r,   r   r.   
doCleanupsr   threading_cleanupr   )rD   hr   r    r,   rF   s         rH   tearDownzBaseTest.tearDown   s    	&&t~~6''  ))!,A**1-GGI '' 	!!$"="=>	#  &&(  ''(@(@A  &&(  ''(@(@A##%$$T%8%89&*&=&=G  #'')11GGO ++Jd001 ..M** L &28Ed8KD&&t,5L   "**D,?,?@   "s   +E.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)r6   recompileexpected_log_patgetvalue
splitlinesassertEquallenzipsearchfailtuplegroupsread)	rD   expected_valuesr6   patactual_linesactualexpectedmatchss	            rH   assert_log_lineszBaseTest.assert_log_lines   s     &4;;jj5 5 56(335\*C,@A #L/ B 	>FHJJv&E		G"# $U5<<>2H=	> KKMII@1DE     c                 J    | xj                   dz  c_         d| j                   z  S )zMGenerate a message consisting solely of an auto-incrementing
        integer.r   z%d)message_numrD   s    rH   next_messagezBaseTest.next_message   s&     	Ad&&&&rj   NN)__name__
__module____qualname____doc__r<   rW   rl   rI   rS   ri   rn    rj   rH   r   r   O   s-    '9J4K(4T ADF$'rj   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))rx   CRITICAL1)rx   ERROR2)ry   r{   3)ry   r}   4)ry   WARNING5)ry   INFO6)rz   r{   7)rz   r}   8)rz   r   9)rz   r   10)rz   r8   11)rn   r   r   r7   r}   LoggerAdapterr   r8   logr{   errorwarninginfodebugri   )rD   mrx   ry   rz   s        rH   	test_flatzBuiltinLevelsTest.test_flat   sr   &W]]###G$5$5e$<bAW\\"&W]]# 	  !#&		!#  !#&		!#AC  !#&		!#AC		!# 	AC		!#		!# 
 	rj   c                    | j                   }t        j                  d      }|j                  t        j                         t        j                  d      }|j                  t        j
                         |j                  t        j                   |              |j                   |              |j                   |              |j                   |              |j                   |              | j                  ddg       y )Nry   INF.ERR)r   r{   r|   )r   r}   r~   rn   r   r   r7   r   r}   r   r{   r   r   r   r   ri   )rD   r   ry   INF_ERRs       rH   test_nested_explicitz&BuiltinLevelsTest.test_nested_explicit   s    &W\\"$$Y/' 	G$$ac*ac 	QSac(%
 	rj   c                    | j                   }t        j                  d      }|j                  t        j                         t        j                  d      }|j                  t        j
                         t        j                  d      }t        j                  d      }t        j                  d      }|j                  t        j                   |              |j                   |              |j                   |              |j                   |              |j                  t        j                   |              |j                   |              |j                   |              |j                   |              |j                   |              |j                   |              | j                  g d       y )Nry   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   )rD   r   ry   r   	INF_UNDEFINF_ERR_UNDEFr   s          rH   test_nested_inheritedz'BuiltinLevelsTest.test_nested_inherited  s>   &W\\"$$Y/'%%k2	))/:!!'* 	g&&,!#qs'**AC0AC  	ac"13AC  
 	rj   c                 B   | j                   }t        j                  d      }t        j                  d      }t        j                  d      }|j                  t        j                         |j                  t        j                   |              |j                   |              |j                  t        j                   |              |j                   |              |j                   |              |j                   |              | j                  g d       y )Nry   INF.BADPARENT.UNDEFINF.BADPARENT))r   r{   r|   )r   r   r~   )r   r{   r   )r   r   r   )
rn   r   r   r7   r   r   FATALr   r   ri   )rD   r   ry   
GRANDCHILDCHILDs        rH   test_nested_with_virtual_parentz1BuiltinLevelsTest.test_nested_with_virtual_parent(  s    &&&'<=
!!/2W\\" 	w}}ac*		'--%

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

%&**,.BC**,.>?rj   c                 h   t                G fddt        j                        }t        j                  d      }|j	                  t        j
                         |j                   |              |j                   |              |j                  d       | j                  dt                     y )Nc                   2    e Zd Zdej                  f fdZy)WCustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilterr   c                 b    j                  t        |             t        j                  |      S r   )addidr#   )rD   r   recordss     rH   r   z^CustomLevelsAndFiltersTest.test_logging_filter_replaces_record.<locals>.RecordingFilter.filter  s"    BvJ'yy((rj   N)rp   rq   rr   r   r  r   )r  s   rH   RecordingFilterr    s    )W%6%6 )rj   r  r   r  r   )
setr   r   r   r7   r   r   r   rZ   r[   )rD   r  r   r  s      @rH   #test_logging_filter_replaces_recordz>CustomLevelsAndFiltersTest.test_logging_filter_replaces_record  s~    %	)gnn 	)
 ""8,%*+*+ECL)rj   c                     | j                   j                  t               | j                  | j                          | j	                  g d       y )N)r   r   r   r   r   r   r   r   r   r   r   r   )r1   r7   VERBOSEr   ri   rm   s    rH   test_logger_filterz-CustomLevelsAndFiltersTest.test_logger_filter  s=    !!'*t//0 
 	rj   c                    | j                   j                  d   j                  t               	 | j	                  | j                          | j                  g d       | j                   j                  d   j                  t        j                         y # | j                   j                  d   j                  t        j                         w xY w)Nr   )r  r  r  r  r  )r1   r@   r7   r   r   ri   r   r   rm   s    rH   test_handler_filterz.CustomLevelsAndFiltersTest.test_handler_filter  s    !!!$--h7	B""4#3#34!! #  %%a(11'..AD%%a(11'..As   .B 8Cc                 @   | j                   j                  d   }d }t               }|j                  |       	 | j	                  | j                          g d}| j                  |       t               }| j                   j                  |       | j	                  | j                          | j                  |g dz          |r| j                   j                  |       |j                  |       y # |r| j                   j                  |       |j                  |       w xY w)Nr   )	)r   r|   )r   r~   )r   r   r  r  r  r  r  r  ))r   r   )r   12)r   14)r   15)r   17)r   18)r   20)r1   r@   r   r   r   ri   r   r   )rD   r   specific_filtergarrfirst_liness        rH   test_specific_filtersz0CustomLevelsAndFiltersTest.test_specific_filters!  s     ""++A. $!	'""4#3#34K !!+.02O&&7""4#3#34!!+ 
1
 
#
 
   --o>  &   --o>  &s   BC- -0DN)rp   rq   rr   rs   rW   rI   r   r  r  r   r"  r-  rt   rj   rH   r   r     s2    J 3'
1@8*"B ('rj   r   c                  `    t        j                  | i |\  }}t        j                  |       |S r   )tempfilemkstemposrK   )argskwargsfdfns       rH   make_temp_filer6  L  s+    t.v.FBHHRLIrj   c                   R   e Zd Zd Zd Zd Z ej                  ej                  dk(  d       ej                  e
j                  d       ej                          e
j                  d      d                             Z e
j                           ej                         d	               Zy
)HandlerTestc                     t        j                         }d|_        | j                  |j                  d       d|_        | j                  |j                  d       | j	                  t
        |j                  d        y )Ngenericanothergeneric)r   HandlerrF   rZ   assertRaisesNotImplementedErroremitrD   rR   s     rH   	test_namezHandlerTest.test_nameS  s\    OO+!!12-qvvt<rj   c                    t         j                  dv rdD ]  }t               }|st        j                  |       t
        j                  j                  |dd      }|r|j                  |j                  }}| j                  |d       | j                  |d       t        j                  ddi      }|j                  |       t        j                  |       | j                  t        j                  j                  |             |j                  |       | j!                  t        j                  j                  |             n8| j                  |j                  d       | j                  |j                  d       |j#                          |s|t        j                  |        t         j                  d	k(  rd
}nd}	 t
        j                  j%                  |      }| j                  |j&                  |j(                         | j!                  |j*                         |j#                          dD ]j  }|dk(  r2| j/                  t0        t
        j                  j2                  dd|       :t
        j                  j3                  dd|      }|j#                          l t
        j                  j5                  d      }t        j                  i       }| j!                  |j7                  |             |j#                          t
        j                  j5                  d      }| j                  |j7                  |             |j#                          y # t,        $ r Y /w xY w)Nlinuxdarwin)TFutf-8Tencodingdelayr  TestrE  z/var/run/syslogz/dev/log)GETPOSTPUTrN  	localhostz/logr   r   )sysplatformr6  r1  unlinkr   r@   WatchedFileHandlerdevinorZ   r   handleassertFalsepathexistsrC   rK   SysLogHandlerfacilityLOG_USER
unixsocketOSErrorr=  
ValueErrorHTTPHandlerBufferingHandlershouldFlush)	rD   existingr5  rR   rT  rU  r   socknamemethods	            rH   test_builtin_handlersz!HandlerTest.test_builtin_handlers[  s    <<..) "#%IIbM$$77WTX7Y uuaeeC$$S"-$$S"---ufo>AHHQKIIbM$$RWW^^B%78HHQKOOBGGNN2$67$$QUUB/$$QUUB/	IIbM-". ||x',%$$228<  QZZ8-	 - 	F!!*g.>.>.J.J"-vv? $$00ffM		 --a0!!"%a()		--a0q)*		  s   A0M 	M#"M#c                 <   t               }t        j                  |       t        j                  |      }t
        j                  |dfft
        j                  j                  |dfft
        j                  j                  |dfff}t        j                  dv r"|t
        j                  j                  |dfffz  }|D ]`  \  }} ||ddi}| j                  t        j                  j                  |             |j!                          t        j                  |       b y)zs
        Test that Path objects are accepted as filename arguments to handlers.

        See Issue #27493.
        warR   rC  rH  rF  N)r6  r1  rR  pathlibPathr   FileHandlerr@   RotatingFileHandlerTimedRotatingFileHandlerrP  rQ  rS  rC   rX  rY  rK   )rD   r5  pfncasesclsr2  rR   s          rH   test_path_objectszHandlerTest.test_path_objects  s     
		"ll2((3*5%%99C:F%%>>c
K
 <<..w''::S#JGIIE 	ICT,G,AOOBGGNN2./GGIIIbM		rj   ntz/WatchedFileHandler not appropriate for Windows.z'Emscripten cannot fstat unlinked files.walltimec           	           fd}d}d}d  _         d  _        dD ]F  }t        dd      }t        j                  |||f      }d|_        |j                          t        j                  j                  |d|	      }t        j                  d
      }|j                  |       	 t        |      D ]Y  }	t        j                  d       t        j                  ddi      }
	 t        j                          _         |j!                  |
       [ 	 |j'                          |j)                          t*        j,                  j/                  |      s2t+        j0                  |       I y # t"        $ r' t%        d j                  d j                           w xY w# |j'                          |j)                          t*        j,                  j/                  |      rt+        j0                  |       w w xY w)Nc                     t        |      D ]]  }	 t        j                  |        t        j                         _        t        j                  dt        j                  dd      z         _ y # t
        $ r Y :w xY w)NgMbp?r      )	ranger1  rR  timedeletion_timer^  sleeprandomrandint)fnametries_rD   s      rH   remove_loopz*HandlerTest.test_race.<locals>.remove_loop  sg    5\ 9IIe$)-D& 

56>>!Q#7789  s   .A..	A:9A:i  FT.logztest_logging-3-targetr2  TrF  rG  z'%(asctime)s: %(levelname)s: %(message)s{Gzt?r  testingzDeleted at z, opened at )handle_timerz  r6  	threadingThreaddaemonstartr   r@   rS  r;   r>   rx  ry  r{  r   rV  	Exceptionprintr   rK   r1  rX  rY  rR  )rD   r  	del_count	log_countrI  r5  removerrR   r   r  r   s   `          rH   	test_racezHandlerTest.test_race  s   	9 		!" 	"E(9:B&&kYPG!GNMMO  33BPU3VA!!"KLANN1"y) 
AJJu%--ui.ABA+/99;(
 	77>>"%IIbM1	" % 040B0B040@0@B C 	 	77>>"%IIbM &s%   $:F*E&	F&0FFAG0c                 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wtrF  rH  r6   )super__init__r   r9   opensub_handlerrD   	__class__s    rH   r  zJHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.__init__  s.     "#*#8#8TGD$F rj   c                     | j                   j                          	 | j                   j                  |       | j                   j                          y # | j                   j                          w xY wr   )r  acquirer?  releaser   s     rH   r?  zFHandlerTest.test_post_fork_child_no_deadlock.<locals>._OurHandler.emit  sR      ((*/$$))&1$$,,.D$$,,.s   A A.rp   rq   rr   r  r?  __classcell__r  s   @rH   _OurHandlerr    s    F
/rj   r  r   z*because we need at least one for this testr    test_post_fork_child_no_deadlockc                  :   t        j                          	 j                          	 j                           j	                  d       j                          	 t        j                          y # j                          w xY w# t        j                          w xY w)N      ?)r   r!   r  r  waitr  r.   )+fork_happened__release_locks_and_end_threadlocks_held__ready_to_forkrefed_hs   rH   lock_holder_thread_fnzKHandlerTest.test_post_fork_child_no_deadlock.<locals>.lock_holder_thread_fn  sq      "'!&-113 @DDSIOO%$$& OO%$$&s"   B !A/ 	B /BB Bz,test_post_fork_child_no_deadlock lock holder)r  rF   z#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)exitcodeN)r   r<  rZ   r[   r"   r   r  r6   rK   rF   assertGreater_at_fork_reinit_lock_weaksetr   rB   r7   r8   r  Eventr  r  r  r1  forkr   _exitr  r   r   wait_process)	rD   r  test_loggerr  lock_holder_threadpidr  r  r  s	         @@@rH   r  z,HandlerTest.test_post_fork_child_no_deadlock  s   	/'// 	/ 	W../3-++22889C3w001153wCCDaH''(JKw'W]]+$-OO$5!6?oo6G3	'2 '--,CE 	  "!&&(ggi!8  !GH FG7;;=##%  q1 s   H
 
H!N)rp   rq   rr   rA  rf  rr  unittestskipIfr1  rF   r   is_emscriptenr   requires_working_threadingrequires_resourcer  requires_forkr  rt   rj   rH   r8  r8  R  s    =3j, X__RWW_&WXX__H 1002Wz*)" + 3 Y)"^ W0002H2 3 H2rj   r8  c                       e Zd Zd Zy)	BadStreamc                     t        d      )Ndeliberate mistake)RuntimeError)rD   datas     rH   writezBadStream.write)  s    /00rj   N)rp   rq   rr   r  rt   rj   rH   r  r  (  s    1rj   r  c                       e Zd Zd Zy)TestStreamHandlerc                     || _         y r   )error_recordr   s     rH   handleErrorzTestStreamHandler.handleError-  s
    "rj   N)rp   rq   rr   r  rt   rj   rH   r  r  ,  s    #rj   r  c                   (    e Zd Zej                  ZdZy)StreamWithIntNamer   N)rp   rq   rr   r   r   levelrF   rt   rj   rH   r  r  0  s    NNEDrj   r  c                       e Zd Zd Zd Zd Zy)StreamHandlerTestc                    t        t                     }t        j                  i       }t        j                  }	 |j                  |       | j                  |j                  |       t        j                  t                     }t        j                         5 }|j                  |       d}| j                  ||j                                d d d        dt        _        t        j                         5 }|j                  |       | j                  d|j                                d d d        |t        _        y # 1 sw Y   nxY w# 1 sw Y   !xY w# |t        _        w xY w)Nz"
RuntimeError: deliberate mistake
Fr   )r  r  r   r   raiseExceptionsrV  assertIsr  r9   r   captured_stderrassertInrX   rZ   )rD   rR   r   	old_raisestderrr  s         rH   test_error_handlingz%StreamHandlerTest.test_error_handling5  s	   ik*!!"%++		0HHQKMM!..!,%%ik2A((* 6f<c6??#456
 ',G#((* 8f  V__%678 '0G#6 68 8 '0G#s<   AE 4D9'E 32E%E 9E>E E
E Ec                 @   t        j                         }t        j                         }|j	                  |      }| j                  |t        j                         |j	                  |      }| j                  ||       |j	                  |      }| j                  |       y)z3
        Test setting the handler's stream
        N)	r   r9   r4   r5   	setStreamr  rP  r  assertIsNone)rD   rR   r6   oldre   s        rH   test_stream_settingz%StreamHandlerTest.test_stream_settingK  su     !!#kk&!c3::&S!ff%S!&!rj   c                 t    t        j                  t                     }| j                  t	        |      d       y )Nz<StreamHandler 2 (NOTSET)>)r   r9   r  rZ   reprr@  s     rH   'test_can_represent_stream_with_int_namez9StreamHandlerTest.test_can_represent_stream_with_int_nameY  s+    !!"3"56a">?rj   N)rp   rq   rr   r  r  r  rt   rj   rH   r  r  4  s    0,"@rj   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_datar   F)
r   
SMTPServerr  socketgetsocknameport_handler_thread_quitpoll_interval)rD   addrr   r  sockmaps        rH   r  zTestSMTPServer.__init__u  s\    !!$d.2 	" 	4KK++-a0	
*rj   c                 ,    | j                  ||||       y)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  )rD   peermailfromrcpttosr  s        rH   process_messagezTestSMTPServer.process_message~  s     	dHgt4rj   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  rD   ts     rH   r  zTestSMTPServer.start  C     %++43E3E262D2D1FH 	Hq		rj   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`.
        r   )r  countN)r  r
   loop_map)rD   r  s     rH   r  zTestSMTPServer.serve_forever  s(     **MM-TYYa@ **rj   c                     d| _         t        j                  | j                         d| _        | j	                          t        j                  | j                  d       y)zr
        Stop the thread by closing the server instance.
        Wait for the server thread to terminate.
        TN)r  
ignore_all)r  r   join_threadr  rK   r
   	close_allr  rm   s    rH   stopzTestSMTPServer.stop  sA    
 
$$T\\2

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

lD/>rj   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  rM   rm   s    rH   r  zControlMixin.stop  sL     	<<#((6DL

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

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

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

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

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

            [handlers]
            keys=hand1

            [formatters]
            keys=form1

            [logger_root]
            handlers=hand1

            [handler_hand1]
            class=StreamHandler
            formatter=form1

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

            prince
            )	r4   r5   r  r  r=  r  r   r  r  )rD   r  r  s      rH   'test_exception_if_confg_file_is_invalidz6ConfigFileTest.test_exception_if_confg_file_is_invalid  s>    . {{8??;78,(A(A4Hrj   c                     t        j                  dd      \  }}t        j                  |       | j	                  t
        t        j                  j                  |       t        j                  |       y )Ntest_empty_.inir   suffix)
r/  r0  r1  rK   r=  r  r   r  r  r  )rD   r4  r5  s      rH   %test_exception_if_confg_file_is_emptyz4ConfigFileTest.test_exception_if_confg_file_is_empty  sJ    !!vFB
,(A(A2F
		"rj   c                 b    | j                  t        t        j                  j                  d       y )Nfilenotfound)r=  FileNotFoundErrorr   r  r  rm   s    rH   ,test_exception_if_config_file_does_not_existz;ConfigFileTest.test_exception_if_config_file_does_not_exist  s    +W^^-F-FWrj   c                    t        j                  d      j                         }t        j                  dd      \  }}	 t        j                  ||j                  d             t        j                  |       t        j                  j                  |dt        ddd	d
dddi             t        j                  |       y# t        j                  |       w xY w)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  asciirF  r   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)rH  defaultsN)r  r  stripr/  r0  r1  r  encoderK   r   r  r  dictrR  )rD   inir4  r5  s       rH   !test_defaults_do_no_interpolationz0ConfigFileTest.test_defaults_do_no_interpolation  s    oo  & ' 	( !!HB	HHRG,-HHRLNN%% -2!&]'?%8$ 
 &   IIbMBIIbMs   A.C CN)&rp   rq   rr   rs   r	   r  rW   r  config1r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rt   rj   rH   r  r    s   ? / I I,G4G@H@ oolL9G oo/1LMG* +*+G6 oo35RSG'GT#GLG,G2L*D&&$ &- &FF&22)&V7$8*H0I6X*rj   r  c                   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.rO  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?rO  r   r   )r   rI   r  	sock_hdlrserver_exceptionserver_classaddresshandle_socketr  r^  r  r  r   r@   SocketHandler
isinstanceserver_addressr_   r  
log_outputr1   rL   rB   r  	SemaphorerX  rD   r  r&  hclss       rH   rI   zSocketHandlerTest.setUp:  s,    	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  r1   rL   rK   r  r  r   rS   rm   s    rH   rS   zSocketHandlerTest.tearDownT  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                          )Nrw  >Lr   
)
connectionrecvr[   structunpackpickleloadsr   r   r  r  rX  r  )rD   requestconnchunkslenobjr   s          rH   r  zSocketHandlerTest.handle_socket_  s    !!IIaLE5zA~==u-a0DIIdOEe*t#		$U*; << e*t#,,u%C**3/FOOvzzD00OLL  " rj   c                 `   | j                   r| j                  | j                          t        j                  d      }|j	                  d       | j
                  j                          |j                  d       | j
                  j                          | j                  | j                  d       y )Ntcpr   eggs
spam
eggs
)
r  skipTestr   r   r   rX  r  r   rZ   r  r  s     rH   test_outputzSocketHandlerTest.test_outputn  sy      MM$//0""5)VV.9rj   c                 R   | j                   r| j                  | j                          d| j                  _        | j                  j                          	 t        d      # t        $ r | j                  j                  d       Y nw xY w| j                  j                  d       t        j                         }| j                  | j                  j                  |       t        j                  | j                  j                  |z
  dz          | j                  j                  d       y )Ng      @zDeliberate mistakez
Never sentzNever sent, eitherrN  zNor this)r  r5  r  
retryStartr  r  r  r1   r  r   ry  r  	retryTimer{  )rD   nows     rH   test_noserverzSocketHandlerTest.test_noservery  s      MM$//0 %(!	5344 	5&&|4	534iik4>>33S9

4>>++c1E9:z*s   A $BBN)rp   rq   rr   rs   r)  r  r  rI   rS   r  r6  r;  rt   rj   rH   r  r  1  s*     * LG.4	$#	:+rj   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.rC  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   create_unix_domain_namer  r   r   rR  r  rI   rm   s    rH   rI   zUnixSocketHandlerTest.setUp  8    $<<>	(($,,7%rj   N)	rp   rq   rr   rs   hasattrr  rE  r  rI   rt   rj   rH   r=  r=    s     4vy!+&rj   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  rO  r   r   )r   rI   r  r  r  r  r  handle_datagramr  r^  r  r  r   r@   DatagramHandlerr  r  r_   r  r  r1   rL   rB   r  r  rX  r  s       rH   rI   zDatagramHandlerTest.setUp  s(    	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  r1   rL   rK   r   rS   rm   s    rH   rS   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  rX  r  )rD   r,  r/  rJ  r0  r   s         rH   rE  z#DatagramHandlerTest.handle_datagram  sk    {{4#D	
+ll6"&&s+6::,,rj   c                    | j                   r| j                  | j                          t        j                  d      }|j	                  d       | j
                  j                          | j
                  j                          |j	                  d       | j
                  j                          | j                  | j                  d       y )Nudpr   r3  r4  )
r  r5  r   r   r   rX  r  rM   rZ   r  r  s     rH   r6  zDatagramHandlerTest.test_output  s      MM$//0""5)VV.9rj   N)rp   rq   rr   rs   r7  r  r  rI   rS   rE  r6  rt   rj   rH   rC  rC    s%     $ LG)4	$
:rj   rC  c                   ,    e Zd ZdZ eed      reZd Zy)UnixDatagramHandlerTestz,Test for DatagramHandler using Unix sockets.rC  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   r?  r  r   r   rR  rC  rI   rm   s    rH   rI   zUnixDatagramHandlerTest.setUp  s8    $<<>	(($,,7!!$'rj   N	rp   rq   rr   rs   rA  r  rJ  r  rI   rt   rj   rH   rN  rN    s     7vy!-(rj   rN  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   rj   )r   rI   r  sl_hdlrr  r  r  rE  r  r^  r  r  r   r@   rZ  r  r  r_   r  r  r1   rL   rB   r  r  rX  r  s       rH   rI   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  rT  r1   rL   rK   r   rS   rm   s    rH   rS   zSysLogHandlerTest.tearDown  sj    	${{  "||  ..t||<""$d#Hd#r"  c                 Z    |j                   | _        | j                  j                          y r   )rJ  r  rX  r  )rD   r,  s     rH   rE  z!SysLogHandlerTest.handle_datagram  s    !..rj   c                 ,   | j                   r| j                  | j                          t        j                  d      }|j	                  d       | j
                  j                  t        j                         | j                  | j                  d       | j
                  j                          d| j                  _        |j	                  d       | j
                  j                  t        j                         | j                  | j                  d       | j
                  j                          d| j                  _        |j	                  d       | j
                  j                  t        j                         | j                  | j                  d       y )Nslh   späm
   <11>späm Fs	   <11>spämu   häm-s   <11>häm-späm)r  r5  r   r   r   rX  r  r   r^  rZ   r  rM   rT  
append_nulidentr  s     rH   r6  zSysLogHandlerTest.test_output  s     MM$//0""5)Y'../*@A"'Y'../*<=&Y'../*GHrj   c                 B   t        j                  d      }| j                  j                          | j                  j                          |j                  d       | j                  j                  t        j                         | j                  | j                  d       y )NrX  rY  rZ  )r   r   rT  rK   rX  rM   r   r  r   r^  rZ   r  r  s     rH   test_udp_reconnectionz'SysLogHandlerTest.test_udp_reconnection0  sk    ""5)Y'../*@Arj   N)rp   rq   rr   rs   r7  r  r  rI   rS   rE  r6  r^  rt   rj   rH   rR  rR    s,     , LG)4	$I&Brj   rR  c                   ,    e Zd ZdZ eed      reZd Zy)UnixSysLogHandlerTestz)Test for SysLogHandler with Unix sockets.rC  c                     t        j                         | _        | j                  t        j
                  | j                         t        j                  |        y r   )r   r?  r  r   r   rR  rR  rI   rm   s    rH   rI   zUnixSysLogHandlerTest.setUp@  r@  rj   NrP  rt   rj   rH   r`  r`  8  s     4vy!-&rj   r`  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  rG  r  rc  rI   r  s    rH   rI   zIPv6SysLogHandlerTest.setUpO  s#    +1??(#T02rj   c                 h    t         j                  | j                  _        t        t
        |           y r   )r  AF_INETr  rG  r  rc  rS   r  s    rH   rS   zIPv6SysLogHandlerTest.tearDownS  s#    +1>>(#T35rj   )
rp   rq   rr   rs   r7  r  r  rI   rS   r  r  s   @rH   rc  rc  F  s!     1 LG36 6rj   rc  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   rI   r  r  rX  rm   s    rH   rI   zHTTPHandlerTest.setUp\  s     	t (rj   c                 |   |j                   | _         t        |j                        | _        | j                   dk(  r9	 t	        |j
                  d         }|j                  j                  |      | _        |j                  d       |j                          | j                  j                          y #  d | _        Y GxY w)NrM  zContent-Length   )commandr   rX  log_dataintheadersrfilera   	post_datasend_responseend_headersrX  r  )rD   r,  rlens      rH   handle_requestzHTTPHandlerTest.handle_requestb  s     .<<6!&7??+;<=!(!3!3D!9 	c"	&!%s   8B0 0	B;c                 L   t        j                  d      }| j                  }|j                  | j                  j                  d          dD ]  }d}|r	 dd l}t        j                  j                  t              }t        j                  j                  |d      }|j                  |j                        }|j                  |       |j                  |      }	nd }d }	t!        || j"                  d|      x| _        }
|
j'                          |
j(                  j+                          d	|
j,                  z  }|xr |}t         j                  j/                  |d
|	d      | _        d | _        |j5                  | j0                         dD ](  }|| j0                  _        | j8                  j;                          d}|j=                  |       | j8                  j+                          | j?                  | j2                  j                  d
       | j?                  | j@                  |       |dk(  r tC        | j2                  jD                        }n$tC        | jF                  jI                  d            }| j?                  |d   dg       | j?                  |d   dg       | j?                  |d   |g       + | j$                  jK                          | j                  j                  | j0                         | j0                  jM                           y # t        $ r d }Y Cw xY w)Nhttpr   r  r  zkeycert.pem)cafiler  )r   zlocalhost:%dz/frob)foobar)securecontextcredentials)rL  rM  rY  rL  rF  rF   funcNamer6  r  )'r   r   r1   rL   r@   sslr1  rX  dirname__file__r   
SSLContextPROTOCOL_TLS_SERVERload_cert_chaincreate_default_contextImportErrorr  rv  r  r  r  r  server_portr`  h_hdlrrn  rB   re  rX  rM   r   rZ   rm  r   queryrr  decoder  rK   )rD   r   r1   r|  r  r  herelocalhost_certr   r}  r  hostsecure_clientre  r  ds                   rH   r6  zHTTPHandlerTest.test_outputo  s   ""6*&&!!$"2"2";";A">?# 0	 F#D
P 77??84D%'WW\\$%FN ^^C,C,CDF**>:!888OG#1$8K8K48$I IDK&LLNLL!F$6$66D"-vM!**66tW>K?FCQ 7 SDK !DM""4;;/) 2%+"""$S!!!#  !3!3W=  v6U? !4!45A !6!6w!?@A  6VH5  :@  5C512  KK**4;;7KKa0	 
 # "!F"s   LL#"L#N)rp   rq   rr   rs   rI   rv  r6  rt   rj   rH   ri  ri  W  s      )5 rj   ri  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   rI   
_survivorsrm   s    rH   rI   zMemoryTest.setUp  s    trj   c                     |D ]:  }t        |      t        |      f}t        j                  |      | j                  |<   < y)zKWatch the given objects for survival, by creating weakrefs to
        them.N)r  r  rz  r{  r  )rD   r2  r0  keys       rH   _watch_for_survivalzMemoryTest._watch_for_survival  s<      	4CS'49$C#*;;s#3DOOC 	4rj   c                    t        j                          g }| j                  j                         D ]!  \  \  }}} |       |j	                  |       # |r/| j                  dt        |      dj                  |      fz         yy)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   )rD   deadid_repr_r{  s        rH   _assertTruesurvivalzMemoryTest._assertTruesurvival  s     	

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

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

%./

%./

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

%.c:

%nC8

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

%j4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            a = A()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

K-=CJJO-=CJJO'A+CJJ7,/cjjA 	f%

 ! S<q@szzRRSs   D6F) )	G2GGztest_compute_rollover_%sz>win32evtlog/win32evtlogutil/pywintypes required for this test.c                       e Zd Zd Zy)NTEventLogHandlerTestc                    d}t        j                  d |      }t        j                  |      }	 t        j                  j                  d      }t        j                  ddi      }|j                  |       |j                          | j                  |t        j                  |             t         j                  t         j                   z  }d}d}	t        j"                  |||	      }
|
D ]1  }|j$                  dk7  rt'        j(                  ||      }|d	k7  r/d
} n d|	z  }| j+                  ||       y # t        j                  $ r*}|j                  dk(  rt        j                  d       d }~ww xY w)NApplicationtest_loggingr  z#Insufficient privileges to run testr  zTest Log MessageFr  zTest Log Message
Tz3Record not found in event log, went back %d recordsrl  )win32evtlogOpenEventLogGetNumberOfEventLogRecordsr   r@   NTEventLogHandler
pywintypesr   winerrorr  SkipTestr   rV  rK   
assertLessEVENTLOG_BACKWARDS_READEVENTLOG_SEQUENTIAL_READReadEventLog
SourceNamewin32evtlogutilSafeFormatMessagerC   )rD   logtypeelhnum_recsrR   r&  r   flagsr  r  eventsr  s               rH   r[  z NTEventLogHandlerTest.test_basic  sY   &&tW599#>	  22>BA !!5*<"=>			+"H"H"MN33445))#ug> 	A||~-!33Aw?C,,E	 DgM3'1  	zzQ''(MNN	s   D6 6E3	%E..E3N)rp   rq   rr   r[  rt   rj   rH   r  r    s    (rj   r  c                       e Zd Zd Zy)MiscTestCasec                 D    h d}t        j                  | t        |       y )N>   r  r  Filtererr  
RootLoggerr  PlaceHolderr  currentframer  StrFormatStyler  rm  rl  )not_exported)r   check__all__r   )rD   r  s     rH   test__all__zMiscTestCase.test__all__  s    ,
 	T7Frj   N)rp   rq   rr   r   rt   rj   rH   r  r    s    Grj   r  c                  V    t        j                  t        j                  dd             y )NLC_ALLr   )r  enterModuleContextr   run_with_localert   rj   rH   setUpModuler%    s     7 7" EFrj   __main__r   )F)rs   r   logging.handlerslogging.configr  r  r#   r  rj  r*  r4   r  r  rX  r1  r  r|  rU   r  r  r(  rP  r/  test.support.script_helperr   r   r  r   test.supportr   r   r   r	   r
   test.support.logging_helperr   r  r  r  ry  r  r  rz  http.serverr   r   urllib.parser   r   socketserverr   r   r   r   r  r   r   r  r  r  r  r  TestCaser   rv   r   SILENTr   TERSEEFFUSIVEr   r  	TALKATIVEr   
CHATTERBOXBORINGrx  r   r   r   r   r   r   r6  r8  r  r  r9   r  r  r  r  r  r  r  r)  r7  rA  rE  rJ  r  r  rL  r`  r;   r  r  r  r  r8  r=  rC  rN  rR  r`  IPV6_ENABLEDrc  ri  r  r  r  r  r  r  r  r@   r(  r  r  r  r  r  r  r  r  r  r  r
  r  rN  unittest.mockr9  r;  r  r]  tzinfor[  r  re  ri  r  r  r  r  r  r  r  r  r  r  r_  r  r  r!  rg  rq  rx  r  r  r  r  r  r  r  r  r%  rp   mainrt   rj   rH   <module>r:     s!  "          	  	  	   	    
  N  " & ) ( ! 3        : +D D X 633	
j'x   j'ZUI UIn<%h <%L 		
FFQJ' (*	'**)++,
( +gnn +: :C' C'LS2( S2l1 1#-- # '@ '@XG;U%% G;T06 0d'\: 'R1L"4 1>-L"4 -^ 69(} (( (
 !  ",,,.h  / #@C5 C5L-** -
aX aH !  ",,,.W+ W+ / #W+t WVY/1HI&- & J& !  ",,,.>:( >: / #>:@ WVY/1HI(1 ( J( !  ",,,.IB IB / #IBV WVY/1HI&- & J& ]//;=6- 6=6 !  ",,,.K h K  / #K Z1 1h-L8 -L`%K8 %KP. #	G)) 		W%%33 		%++ 	{*X {*z-9( 9.&h &>	w(( 	 8  F -,,.iPx iP /iPV 7_-#0002]&H ]& 3]&@ x!(//  
e. .Y)H%%'9 Y)x&W77 &GX.. G&AH A,$;X $;N	 	$w** $T/8 T/nx/( x/vJ0H J0ZY#h'' Y#x
i9)) i9X`>- `>FH8 H25l 5,jl jXeC< eCPE  %,1B/0 )dID# *.3  B (*Dt*KMbcS)dX ["bc (H  ( d (FG8$$ GG zHMMO O| 
  6155K5/J6
  		s0   [&[' 3[9 [$'[65[69\\