a 5êdgíã@s.ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZddlmZddlZddlZddlZddl Z ddl!Z!ddl"Z"ddl#Z#ddl$m%Z%m&Z&ddl'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-m.Z.m/Z/zddl0Z0ddl1Z1ddl2Z2Wn e3yˆdZ0Z1Z2Yn0z ddl4Z4Wne3yªYn0Gd d „d e j5ƒZ6Gd d „d e6ƒZ7Gd d„de6ƒZ8dZ9dZ:dZ;dZdZ?dZ@dZAdZBeCeBe9dƒZDe9de:de;dede?d e@d!eAd"eBd#i ZEGd$d%„d%ejFƒZGGd&d'„d'ejFƒZHGd(d)„d)e6ƒZIGd*d+„d+e6ƒZJGd,d-„d-eKƒZLGd.d/„d/ejMƒZNGd0d1„d1eKƒZOGd2d3„d3e6ƒZPGd4d5„d5e'jQƒZRGd6d7„d7eKƒZSGd8d9„d9eSe%ƒZTGd:d;„d;eSe.ƒZUGdƒrJGd?d@„d@eUƒZXGdAdB„dBeVƒZYGdCdD„dDe6ƒZZGdEdF„dFe6ƒZ[GdGdH„dHej\ƒZ]GdIdJ„dJe6ƒZ^GdKdL„dLe6ƒZ_dMdN„Z`e  aeWed>ƒdO¡GdPdQ„dQe_ƒƒZbGdRdS„dSe6ƒZce  aeWed>ƒdO¡GdTdU„dUecƒƒZdGdVdW„dWe6ƒZee  aeWed>ƒdO¡GdXdY„dYeeƒƒZfe  aejgdZ¡Gd[d\„d\eeƒƒZhGd]d^„d^e6ƒZiGd_d`„d`e6ƒZjGdadb„dbe6ƒZkGdcdd„dde6ƒZld¹dedf„ZmGdgdh„dhƒZndidj„ZoGdkdl„dlejMƒZpGdmdn„dne6ƒZqGdodp„dpe6ƒZrGdqdr„dre6ƒZsGdsdt„dtejtƒZuGdudv„dve6ƒZvGdwdx„dxe6ƒZweWejxdyƒrNddlyZyddzlzm{Z{Gd{d|„d|e6ƒZ|e }d¡Z~Gd}d~„d~ejƒZ€e€ƒZGdd€„d€e j5ƒZ‚Gdd‚„d‚ejƒƒZ„Gdƒd„„d„e j5ƒZ…Gd…d†„d†e6ƒZ†Gd‡dˆ„dˆe6ƒZ‡Gd‰dŠ„dŠƒZˆGd‹dŒ„dŒej‰ƒZŠGddŽ„dŽe6ƒZ‹Gdd„de6ƒZŒGd‘d’„d’e6ƒZGd“d”„d”e j5ƒZŽGd•d–„d–e j5ƒZGd—d˜„d˜e6ƒZGd™dš„dše6ƒZ‘Gd›dœ„dœe‘ƒZ’Gddž„dže‘ƒZ“GdŸd „d e‘ƒZ”d¡d¢„Z•d£d¤d¥d¦d§d¨e•d©dªd«ffD](\Z–Z—e–e—fd¬d­„Z˜e™e”d®e–e˜ƒq®e  ae0d¯¡Gd°d±„d±e6ƒƒZšGd²d³„d³e j5ƒZ›e œd´dµ¡d¶d·„ƒZežd¸kr*eƒdS)ºéN)Úassert_python_okÚassert_python_failure)Úsupport)Ú socket_helper)Ú TestHandler)Ú HTTPServerÚBaseHTTPRequestHandler)ÚurlparseÚparse_qs)ÚThreadingUDPServerÚDatagramRequestHandlerÚThreadingTCPServerÚStreamRequestHandlerc@s:eZdZdZdZdZdd„Zdd„Zd d d „Zd d „Z dS)ÚBaseTestz&%(name)s -> %(levelname)s: %(message)sz^([\w.]+) -> (\w+): (\d+)$rcCs”t ¡|_t ¡jj}t ¡zvtj  ¡|_ tj dd…|_ |  ¡|_ }tj  ¡|_tj  ¡|_i|_}|D]}t||ddƒ||<qpWt ¡n t ¡0t d¡|_t d¡|_t d¡|_|j ¡|_t ¡|_|j tj¡t |j¡|_ t !|j"¡|_#|j  $|j#¡|j %¡r:|jj&|jj&}t'd|ƒ‚|j %¡rb|jj&|jj&}t'd|ƒ‚|j (|j ¡| )|j %¡¡| )|j %¡¡dS)NÚdisabledu«×»uĿÖGÚzUnexpected handlers: %s)*rZthreading_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)ÚselfZ logger_dictrr"ÚnameZhlist©r<ú-/usr/local/lib/python3.9/test/test_logging.pyÚsetUpOsB      ÿ          zBaseTest.setUpcCs8|j ¡|j |j¡|jjrB|jjd}|j |¡| ¡q|j |j¡t  ¡z¼tj   ¡tj   |j ¡tj  ¡tj  |j¡tj  ¡tj  |j¡|jtjdd…<t ¡j}d|_|j}|  ¡|  |j¡|j}|jD] }||durè|||j|_qèWt ¡n t ¡0| ¡tj|jŽdS)Nr) r,Úcloser'Ú removeHandlerr0r6r-r)rrr ÚclearÚupdater!rrrrrrrrÚdisablerrr"rr$Z doCleanupsrZthreading_cleanupr)r:Úhrrr"r;r<r<r=ÚtearDownys8           zBaseTest.tearDownNc Csœ|p|j}t |p|j¡}| ¡ ¡}| t|ƒt|ƒ¡t||ƒD]8\}}|  |¡}|sh|  d|¡| t |  ¡ƒ|¡qD|  ¡}|r˜|  d|¡dS)Nz*Log line does not match expected pattern: z'Remaining output at end of log stream: )r,ÚreÚcompileÚexpected_log_patÚgetvalueÚ splitlinesÚ assertEqualÚlenÚzipÚsearchÚfailÚtupleÚgroupsÚread) r:Zexpected_valuesr,ÚpatZ actual_linesÚactualÚexpectedÚmatchÚsr<r<r=Úassert_log_lines›s   ÿzBaseTest.assert_log_linescCs|jd7_d|jS)Néz%d)Ú message_num©r:r<r<r=Ú next_message­szBaseTest.next_message)NN) Ú__name__Ú __module__Ú __qualname__r2rHrZr>rErXr\r<r<r<r=rGs*" rc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚBuiltinLevelsTestcCs"|j}t d¡}| tj¡t t d¡i¡}| tj¡t d¡}| tj¡| tj |ƒ¡|  |ƒ¡| tj |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡| tj |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡| gd¢¡dS)NÚERRÚINFÚDEB) )raÚCRITICALÚ1)raÚERRORÚ2)rbrdÚ3)rbrfÚ4)rbÚWARNINGÚ5)rbÚINFOÚ6)rcrdÚ7)rcrfÚ8)rcrjÚ9)rcrlÚ10)rcr.Ú11)r\rrr-rfÚ LoggerAdapterrlr.ÚlogrdÚerrorÚwarningÚinfoÚdebugrX)r:Úmrarbrcr<r<r=Ú test_flat·s.                 zBuiltinLevelsTest.test_flatcCs„|j}t d¡}| tj¡t d¡}| tj¡| tj|ƒ¡| |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡|  ddg¡dS)NrbúINF.ERR)r{rdre)r{rfrg© r\rrr-rlrfrtrdrurvrwrxrX)r:ryrbÚINF_ERRr<r<r=Útest_nested_explicitæs        þz&BuiltinLevelsTest.test_nested_explicitcCsâ|j}t d¡}| tj¡t d¡}| tj¡t d¡}t d¡}t d¡}| tj|ƒ¡| |ƒ¡|  |ƒ¡|  |ƒ¡| tj|ƒ¡| |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡|  |ƒ¡|  gd¢¡dS)Nrbr{ú INF.UNDEFú INF.ERR.UNDEFÚUNDEF))rrdre)rrfrg)rrjrh)rrlri)r€rdrk)r€rfrmr|)r:ryrbr}Z INF_UNDEFZ INF_ERR_UNDEFrr<r<r=Útest_nested_inheritedýs&               z'BuiltinLevelsTest.test_nested_inheritedcCs’|j}t d¡}t d¡}t d¡}| tj¡| tj|ƒ¡| |ƒ¡| tj|ƒ¡| |ƒ¡| |ƒ¡| |ƒ¡|  gd¢¡dS)NrbúINF.BADPARENT.UNDEFú INF.BADPARENT))rƒrdre)rƒrlrg)r„rdrh)r„rlri) r\rrr-rlrtÚFATALrwrxrX)r:ryrbZ GRANDCHILDZCHILDr<r<r=Útest_nested_with_virtual_parent s        z1BuiltinLevelsTest.test_nested_with_virtual_parentcCs,| t d¡tj¡| t tj¡d¡dS)Nrl)rKrÚ getLevelNamerlr[r<r<r=Útest_regression_22386:sz'BuiltinLevelsTest.test_regression_22386cCst d¡}| |tj¡dS)Nr…)rr‡rKr…)r:Úfatalr<r<r=Útest_issue27935?s z!BuiltinLevelsTest.test_issue27935cCs`t tjd¡| tjtjd¡| t tj¡d¡| t tj¡d¡| t d¡tj¡dS)NrrlÚNOTSET)rÚ addLevelNamerlÚ addCleanuprKr‡r‹r[r<r<r=Útest_regression_29220Cs z'BuiltinLevelsTest.test_regression_29220N) r]r^r_rzr~r‚r†rˆrŠrŽr<r<r<r=r`´s/#r`c@s$eZdZdd„Zdd„Zdd„ZdS)ÚBasicFilterTestc Cs®t d¡}|jjd}z†| |¡t d¡}t d¡}t d¡}t d¡}| | ¡¡| | ¡¡| | ¡¡| | ¡¡| ddg¡W|  |¡n |  |¡0dS)Nú spam.eggsrÚspamúspam.eggs.fishúspam.bakedbeans©rrlrg©r’rlrh) rÚFilterr'r6Ú addFilterrrwr\rXÚ removeFilter)r:Zfilter_Úhandlerr‘Ú spam_eggsÚspam_eggs_fishÚspam_bakedbeansr<r<r=Ú test_filterOs"       þzBasicFilterTest.test_filterc Cs¬dd„}|jjd}z†| |¡t d¡}t d¡}t d¡}t d¡}| | ¡¡| | ¡¡| | ¡¡| | ¡¡| dd g¡W| |¡n | |¡0dS) NcSs&|j d¡}d |dd…¡}|dkS)NÚ.ér)r;ÚsplitÚjoin)ÚrecordÚpartsÚprefixr<r<r=Ú filterfuncks z8BasicFilterTest.test_callable_filter..filterfuncrr‘rr’r“r”r•) r'r6r—rrrwr\rXr˜)r:r¥r™r‘ršr›rœr<r<r=Útest_callable_filtergs"      þz$BasicFilterTest.test_callable_filtercCs*t ¡}t ddi¡}| | |¡¡dS)Nr;r)rr–Ú makeLogRecordr9Úfilter)r:ÚfÚrr<r<r=Útest_empty_filter„sz!BasicFilterTest.test_empty_filterN)r]r^r_rr¦r«r<r<r<r=rKsréxéwévéuétéséréqépéorYÚSilentÚTaciturnÚTerseÚEffusiveÚSociableÚVerboseÚ TalkativeZ GarrulousÚ ChatterboxÚBoringc@seZdZdd„ZdS)ÚGarrulousFiltercCs |jtkS©N)ÚlevelnoÚ GARRULOUS©r:r¢r<r<r=r¨³szGarrulousFilter.filterN©r]r^r_r¨r<r<r<r=r¿¯sr¿c@seZdZdd„ZdS)ÚVerySpecificFiltercCs|jttfvSrÀ)rÁÚSOCIABLEÚTACITURNrÃr<r<r=r¨ºszVerySpecificFilter.filterNrÄr<r<r<r=rŶsrÅc@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚCustomLevelsAndFiltersTestú^[\w.]+ -> (\w+): (\d+)$cCs,t |¡t ¡D]\}}t ||¡qdSrÀ)rr>Úmy_logging_levelsÚitemsrrŒ)r:ÚkÚvr<r<r=r>Ås z CustomLevelsAndFiltersTest.setUpcCstD]}| || ¡¡qdSrÀ)Ú LEVEL_RANGErtr\)r:ÚloggerZlvlr<r<r=Úlog_at_all_levelsÊsz,CustomLevelsAndFiltersTest.log_at_all_levelscCs*|j t¡| |j¡| gd¢¡dS)N)©r»rk©rºrm©r¹rn©r¸ro©r·rp©r¶rq)r'r-ÚVERBOSErÐrXr[r<r<r=Útest_logger_filterÎs  z-CustomLevelsAndFiltersTest.test_logger_filterc Cs`|jjd t¡z2| |j¡| gd¢¡W|jjd tj¡n|jjd tj¡0dS)Nr)rÒrÓrÔrÕrÖ)r'r6r-rÆrÐrXrr‹r[r<r<r=Útest_handler_filterÜs  z.CustomLevelsAndFiltersTest.test_handler_filterc Cs®|jjd}d}tƒ}| |¡zl| |j¡gd¢}| |¡tƒ}|j |¡| |j¡| |gd¢¡W|r‚|j |¡| |¡n|rž|j |¡| |¡0dS)Nr) )r¾re)r½rg)r¼rirÑrÒrÓrÔrÕrÖ))r¾rr)r½Z12)r¼Z14)r»Z15)r¹Z17)r¸Z18)r¶Z20)r'r6r¿r—rÐrXrÅr˜)r:r™Zspecific_filterZgarrZ first_linesr<r<r=Útest_specific_filtersìs$         þ z0CustomLevelsAndFiltersTest.test_specific_filtersN) r]r^r_rHr>rÐrØrÙrÚr<r<r<r=rȾs rÈc@sZeZdZdd„Zdd„Zdd„Ze ej dkd¡d d „ƒZ e e ed ƒ d ¡d d„ƒZ dS)Ú HandlerTestcCsDt ¡}d|_| |jd¡d|_| |jd¡| t|jd¡dS)NÚgenericZanothergeneric)rÚHandlerr;rKÚ assertRaisesÚNotImplementedErrorÚemit©r:rDr<r<r=Ú test_names zHandlerTest.test_namec CsôtjdvrXdD]æ}t ¡\}}t |¡|s8t |¡tjj |dd}|rÄ|j |j }}|  |d¡|  |d¡t  ddi¡}| |¡t |¡| tj |¡¡| |¡| tj |¡¡n|  |j d¡|  |j d¡| ¡|rt |¡qtjdkr d }nd }z4tj |¡}|  |j|j¡| |j¡| ¡WntyVYn0d D]@} | d kr‚| ttjjd d| ¡ntj d d| ¡}| ¡q\tj d¡}t  i¡}| | |¡¡| ¡tj d¡}| | |¡¡| ¡dS)N©ÚlinuxÚdarwin)TFT©ÚdelayéÿÿÿÿÚmsgZTestråz/var/run/syslogz/dev/log)ÚGETÚPOSTÚPUTrìÚ localhostz/logrrY)ÚsysÚplatformÚtempfileÚmkstempÚosr?Úunlinkrr6ÚWatchedFileHandlerÚdevÚinorKr§ÚhandleÚ assertFalseÚpathÚexistsr9Ú SysLogHandlerZfacilityZLOG_USERZ unixsocketÚOSErrorrÞÚ ValueErrorÚ HTTPHandlerZBufferingHandlerZ shouldFlush) r:ZexistingÚfdÚfnrDrõrörªZsocknameÚmethodr<r<r=Útest_builtin_handlers s\                ÿ    z!HandlerTest.test_builtin_handlerscCs´t ¡\}}t |¡t |¡t |¡}tj|dfftj j |dfftj j |dfff}t j dvrv|tj j|dfff7}|D]4\}}||Ž}| tj |¡¡| ¡t |¡qzdS)NÚwÚarDrã)rðrñròr?róÚpathlibÚPathrÚ FileHandlerr6ÚRotatingFileHandlerÚTimedRotatingFileHandlerrîrïrôr9rùrú)r:rÿrZpfnZcasesÚclsÚargsrDr<r<r=Útest_path_objectsVs     ý  zHandlerTest.test_path_objectsÚntz/WatchedFileHandler not appropriate for Windows.c sN‡fdd„}d}d}dˆ_dˆ_dD]"}t dd¡\}}t |¡tj|||fd}d|_|  ¡t j j ||d }t   d ¡} | | ¡z”t|ƒD]^} t d ¡t  d d i¡} zt ¡ˆ_| | ¡Wq’tyîtdˆjˆjfƒ‚Yq’0q’W| ¡| ¡tj |¡rHt |¡q$| ¡| ¡tj |¡rFt |¡0q$dS)Nc sTt|ƒD]F}zt |¡t ¡ˆ_Wnty6Yn0t dt dd¡¡qdS)Ngü©ñÒMbp?ré) ÚrangeròróÚtimeÚ deletion_timerüÚsleepÚrandomÚrandint)ZfnameZtriesÚ_r[r<r=Ú remove_loopps   z*HandlerTest.test_race..remove_loopiô©FTú.logztest_logging-3-©Útargetr Træz'%(asctime)s: %(levelname)s: %(message)sç{®Gázt?réZtestingzDeleted at %s, opened at %s)Z handle_timerrðrñròr?Ú threadingÚThreadÚdaemonÚstartrr6rôr1r4rrrr§r÷Ú ExceptionÚprintr¡rùrúró) r:rZ del_countZ log_countrçrÿrZremoverrDr©rrªr<r[r=Ú test_racemsH         ÿÿ  ýzHandlerTest.test_raceÚforkzTest requires os.fork().c s&Gdd„dtjƒ}| ttjƒd¡|ƒ‰| ˆjjj¡dˆ_ |  ttjƒd¡|  ttj ƒd¡t  d¡}|  ˆ¡| tj¡t ¡‰t ¡‰‡‡‡fdd„}tj|d d }| ¡ˆ ¡t ¡}|dkrúz| d ¡Wt d¡n t d¡0n(| d ¡ˆ ¡| ¡tj|dd dS)Ncs$eZdZ‡fdd„Zdd„Z‡ZS)zAHandlerTest.test_post_fork_child_no_deadlock.._OurHandlercs"tƒ ¡tjtddƒd|_dS)Nz /dev/nullZwt©r,)ÚsuperÚ__init__rr/ÚopenÚ sub_handlerr[©Ú __class__r<r=r&¢s ÿzJHandlerTest.test_post_fork_child_no_deadlock.._OurHandler.__init__cSs6|j ¡z|j |¡W|j ¡n |j ¡0dSrÀ)r(ÚacquireràÚreleaserÃr<r<r=rà§s zFHandlerTest.test_post_fork_child_no_deadlock.._OurHandler.emit©r]r^r_r&ràÚ __classcell__r<r<r)r=Ú _OurHandler¡s r/rz*because we need at least one for this testrYÚ test_post_fork_child_no_deadlockcsVt ¡z>ˆ ¡zˆ ¡ˆ d¡Wˆ ¡n ˆ ¡0Wt ¡n t ¡0dS)Nçà?)rrr+ÚsetÚwaitr,r$r<©Z+fork_happened__release_locks_and_end_threadZlocks_held__ready_to_forkZrefed_hr<r=Úlock_holder_thread_fn»s zKHandlerTest.test_post_fork_child_no_deadlock..lock_holder_thread_fnz,test_post_fork_child_no_deadlock lock holder)rr;z#Child process did not deadlock. \o/z&Parent process returned from fork. \o/)Úexitcode)rrÝrKrLrrr(r,r?r;Ú assertGreaterÚ_at_fork_reinit_lock_weaksetrr8r-r.rÚEventrrr3ròr#rwÚ_exitr2r¡rZ wait_process)r:r/Z test_loggerr5Zlock_holder_threadÚpidr<r4r=r0žs8    þ  z,HandlerTest.test_post_fork_child_no_deadlockN) r]r^r_rârr ÚunittestZskipIfròr;r"Úhasattrr0r<r<r<r=rÛs6 0rÛc@seZdZdd„ZdS)Ú BadStreamcCs tdƒ‚dS)Núdeliberate mistake)Ú RuntimeError©r:Údatar<r<r=ÚwriteëszBadStream.writeN)r]r^r_rCr<r<r<r=r>êsr>c@seZdZdd„ZdS)ÚTestStreamHandlercCs ||_dSrÀ)Ú error_recordrÃr<r<r=Ú handleErrorïszTestStreamHandler.handleErrorN)r]r^r_rFr<r<r<r=rDîsrDc@seZdZejZdZdS)ÚStreamWithIntNamerŸN)r]r^r_rr‹Úlevelr;r<r<r<r=rGòsrGc@s$eZdZdd„Zdd„Zdd„ZdS)ÚStreamHandlerTestcCsättƒƒ}t i¡}tj}z¼| |¡| |j|¡t tƒ¡}t   ¡.}| |¡d}|  ||  ¡¡Wdƒn1s|0Ydt_t   ¡*}| |¡|  d|  ¡¡Wdƒn1sÄ0YW|t_n|t_0dS)Nz" RuntimeError: deliberate mistake Fr)rDr>rr§ÚraiseExceptionsr÷ÚassertIsrEr/rÚcaptured_stderrÚassertInrIrK)r:rDrªZ old_raiseÚstderrrér<r<r=Útest_error_handling÷s       .  0z%StreamHandlerTest.test_error_handlingcCsVt ¡}t ¡}| |¡}| |tj¡| |¡}| ||¡| |¡}| |¡dSrÀ) rr/r*r+Ú setStreamrKrîrNÚ assertIsNone)r:rDr,ÚoldrTr<r<r=Útest_stream_setting s    z%StreamHandlerTest.test_stream_settingcCs t tƒ¡}| t|ƒd¡dS)Nz)rr/rGrKÚreprrár<r<r=Ú'test_can_represent_stream_with_int_names z9StreamHandlerTest.test_can_represent_stream_with_int_nameN)r]r^r_rOrSrUr<r<r<r=rIösrIc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚTestSMTPServercCsBtjj||d|dd|j ¡d|_||_d|_d|_||_ dS)NT)ÚmapZ decode_datarYF) ÚsmtpdÚ SMTPServerr&ÚsocketÚ getsocknameÚportÚ_handlerÚ_threadÚ_quitÚ poll_interval)r:Úaddrr™r`Úsockmapr<r<r=r&7sÿzTestSMTPServer.__init__cCs| ||||¡dSrÀ)r])r:ÚpeerÚmailfromÚrcpttosrBr<r<r=Úprocess_message@s zTestSMTPServer.process_messagecCs0tj|j|jfd|_}| d¡| ¡dS©NrT©rrÚ serve_foreverr`r^Ú setDaemonr©r:Útr<r<r=rLs ÿ  zTestSMTPServer.startcCs|jstj||jddqdS)NrY)rWÚcount)r_ÚasyncoreZloopÚ_map©r:r`r<r<r=riUszTestSMTPServer.serve_forevercCs4d|_t |j¡d|_| ¡tj|jdddS)NT)rWZ ignore_all)r_rÚ join_threadr^r?rnZ close_allror[r<r<r=Ústop`s  zTestSMTPServer.stopN)r]r^r_r&rfrrirrr<r<r<r=rV"s     rVcs4eZdZdd„Zdd„Z‡fdd„Zdd„Z‡ZS) Ú ControlMixincCs d|_||_||_t ¡|_dSrÀ)r^r`r]rr9Úready)r:r™r`r<r<r=r&|szControlMixin.__init__cCs0tj|j|jfd|_}| d¡| ¡dSrgrhrkr<r<r=r‚s ÿ  zControlMixin.startcs|j ¡tt|ƒ |¡dSrÀ)rtr2r%rsrirpr)r<r=ri‹s zControlMixin.serve_forevercCs:| ¡|jdur$t |j¡d|_| ¡|j ¡dSrÀ)Úshutdownr^rrqÚ server_closertrAr[r<r<r=rr“s   zControlMixin.stop)r]r^r_r&rrirrr.r<r<r)r=rsls rsc@seZdZddd„Zdd„ZdS) ÚTestHTTPServerr1FNcs<G‡‡fdd„dtƒ‰t ||ˆ¡t |||¡||_dS)Ncs2eZdZddd„Zdd„Z‡‡‡fdd„Z‡ZS) z=TestHTTPServer.__init__..DelegatingHTTPRequestHandlerNcSs| d¡r|jSt|ƒ‚dS)NZdo_)Ú startswithÚprocess_requestÚAttributeError)r:r;Údefaultr<r<r=Ú __getattr__¬s zITestHTTPServer.__init__..DelegatingHTTPRequestHandler.__getattr__cSs|j |¡dSrÀ©Úserverr]r[r<r<r=ry±szMTestHTTPServer.__init__..DelegatingHTTPRequestHandler.process_requestcs ˆrtˆ|ƒj|g|¢RŽdSrÀ)r%Ú log_message)r:Úformatr )ÚDelegatingHTTPRequestHandlerr*rtr<r=r´sÿÿÿzITestHTTPServer.__init__..DelegatingHTTPRequestHandler.log_message)N)r]r^r_r|ryrr.r<©rrtr)r=r«s r)rrr&rsÚsslctx)r:rar™r`rtrƒr<r‚r=r&©s zTestHTTPServer.__init__c Cshz(|j ¡\}}|jr&|jj|dd}Wn6ty^}ztj d|¡‚WYd}~n d}~00||fS)NT)Z server_sidezGot an error: %s )rZÚacceptrƒZ wrap_socketrürîrNrC)r:ÚsockraÚer<r<r=Ú get_request¼szTestHTTPServer.get_request)r1FN)r]r^r_r&r‡r<r<r<r=rwžs ÿ rwcs*eZdZdZddd„Z‡fdd„Z‡ZS)Ú TestTCPServerTr1cCs2Gdd„dtƒ}t ||||¡t |||¡dS)Nc@seZdZdd„ZdS)z;TestTCPServer.__init__..DelegatingTCPRequestHandlercSs|j |¡dSrÀr}r[r<r<r=r÷ÜszBTestTCPServer.__init__..DelegatingTCPRequestHandler.handleN)r]r^r_r÷r<r<r<r=ÚDelegatingTCPRequestHandlerÚsr‰)rr r&rs)r:rar™r`Úbind_and_activater‰r<r<r=r&Øs  ÿzTestTCPServer.__init__cs"tt|ƒ ¡|j ¡d|_dS©NrY)r%rˆÚ server_bindrZr[r\r[r)r<r=rŒâszTestTCPServer.server_bind)r1T)r]r^r_Zallow_reuse_addressr&rŒr.r<r<r)r=rˆÇs ÿ rˆcs2eZdZd dd„Z‡fdd„Z‡fdd„Z‡ZS) Ú TestUDPServerr1Tcs<G‡fdd„dtƒ‰t ||ˆ|¡t |||¡d|_dS)Ncs&eZdZdd„Z‡‡fdd„Z‡ZS)z;TestUDPServer.__init__..DelegatingUDPRequestHandlercSs|j |¡dSrÀr}r[r<r<r=r÷ûszBTestUDPServer.__init__..DelegatingUDPRequestHandler.handlecsB|j ¡}|r>ztˆ|ƒ ¡Wnty<|jjs8‚Yn0dSrÀ)ZwfilerIr%Úfinishrür~Ú_closedrA)ÚDelegatingUDPRequestHandlerr*r<r=rŽþs  zBTestUDPServer.__init__..DelegatingUDPRequestHandler.finish)r]r^r_r÷rŽr.r<©rr)r=rùsrF)r r r&rsr)r:rar™r`rŠr<r‘r=r&÷sþzTestUDPServer.__init__cs"tt|ƒ ¡|j ¡d|_dSr‹)r%rrŒrZr[r\r[r)r<r=rŒ szTestUDPServer.server_bindcstt|ƒ ¡d|_dS)NT)r%rrvrr[r)r<r=rvszTestUDPServer.server_close)r1T)r]r^r_r&rŒrvr.r<r<r)r=ræs ÿ  rÚAF_UNIXc@seZdZejZdS)ÚTestUnixStreamServerN©r]r^r_rZr’Úaddress_familyr<r<r<r=r“sr“c@seZdZejZdS)ÚTestUnixDatagramServerNr”r<r<r<r=r–sr–c@s"eZdZejZdd„Zdd„ZdS)ÚSMTPHandlerTestc Cs i}ttjdf|jd|ƒ}| ¡tj|jf}tjj|ddd|j d}|  |j dg¡g|_ t  ddi¡}t ¡|_| |¡|j |j ¡| ¡| |j ¡¡|  t|j ƒd ¡|j d\}}}} |  |d¡|  |dg¡| d | ¡| |  d ¡¡| ¡dS) Nrçü©ñÒMbP?ÚmeZyouZLog)Útimeoutréu Hello ✓rYz Subject: Log u Hello ✓)rVrZHOSTrfrr\rr6Z SMTPHandlerÚTIMEOUTrKZtoaddrsÚmessagesr§rr9Úhandledr÷r3rrr9Úis_setrLrMÚendswithr?) r:rbr~rarDrªrcrdrerBr<r<r=Ú test_basic"s0ÿ ÿ    zSMTPHandlerTest.test_basiccGs|j |¡|j ¡dSrÀ)rœÚappendrr2)r:r r<r<r=rf:s zSMTPHandlerTest.process_messageN)r]r^r_rZ LONG_TIMEOUTr›r rfr<r<r<r=r—sr—c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚMemoryHandlerTestrÉcCsFt |¡tj dtj|j¡|_t d¡|_ d|j _ |j   |j¡dS)Né Zmemr) rr>rr6Ú MemoryHandlerrjr0Úmem_hdlrrÚ mem_loggerÚ propagater8r[r<r<r=r>Es  ÿ zMemoryHandlerTest.setUpcCs|j ¡t |¡dSrÀ)r¥r?rrEr[r<r<r=rEMs zMemoryHandlerTest.tearDowncCsÜ|j | ¡¡| g¡|j | ¡¡| g¡|j | ¡¡gd¢}| |¡dD]b}tdƒD]}|j | ¡¡qf| |¡|j | ¡¡|dd„t||dƒDƒ}| |¡qZ|j | ¡¡| |¡dS)N)©r.re©rlrg)rjrh)réé cSsg|]}dt|ƒf‘qS)r.)Ústr)Ú.0Úir<r<r=Ú góz0MemoryHandlerTest.test_flush..r£)r¦rxr\rXrwrvr)r:ÚlinesÚnr®r<r<r=Ú test_flushQs       zMemoryHandlerTest.test_flushcCsÞ|j | ¡¡| g¡|j | ¡¡| g¡|j |j¡|j ¡ddg}| |¡tj   dtj |j d¡|_|j  |j¡|j | ¡¡| |¡|j | ¡¡| |¡|j |j¡|j ¡| |¡dS)Nr¨r©r£F)r¦rxr\rXrwr@r¥r?rr6r¤rjr0r8)r:r±r<r<r=Útest_flush_on_closems,   þ  þ   z%MemoryHandlerTest.test_flush_on_closec CsŒGdd„dƒ}||jƒ}zV|j |¡tdƒD]&}t d¡|j d¡|j d¡q.W|jD]}t   |¡q^n|jD]}t   |¡qv0dS)Nc@s$eZdZdd„Zdd„Zdd„ZdS)zZMemoryHandlerTest.test_race_between_set_target_and_flush..MockRaceConditionHandlercSs||_g|_dSrÀ)r¥Úthreads)r:r¥r<r<r=r&szcMemoryHandlerTest.test_race_between_set_target_and_flush..MockRaceConditionHandler.__init__cSs|j d¡dSrÀ)r¥Ú setTargetr[r<r<r=Ú removeTarget‘szgMemoryHandlerTest.test_race_between_set_target_and_flush..MockRaceConditionHandler.removeTargetcSs&tj|jd}|j |¡| ¡dS)N)r)rrr·rµr¡r)r:réÚthreadr<r<r=r÷”s zaMemoryHandlerTest.test_race_between_set_target_and_flush..MockRaceConditionHandler.handleN)r]r^r_r&r·r÷r<r<r<r=ÚMockRaceConditionHandlerŒsr¹r£rz not flushedZflushed) r¥r¶rrrr¦rwrvrµrrq)r:r¹rrr¸r<r<r=Ú&test_race_between_set_target_and_flush‹s      ÿ z8MemoryHandlerTest.test_race_between_set_target_and_flushN) r]r^r_rHr>rEr³r´rºr<r<r<r=r¢>s r¢c@seZdZdd„ZdS)ÚExceptionFormattercCsd|djS)Nz Got a [%s]r)r])r:Úeir<r<r=ÚformatException¨sz"ExceptionFormatter.formatExceptionN)r]r^r_r½r<r<r<r=r»¦sr»c@sÖeZdZejZdZdZdZdZe  dd¡Z e  dd¡Z d ed Z e  d d ¡Z d ZdZdZdZdd„Zdd„Zdd„Zefdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-S).ÚConfigFileTestú^(\w+) \+\+ (\w+)$aN [loggers] keys=root [handlers] keys=hand1 [formatters] keys=form1 [logger_root] level=WARNING handlers=hand1 [handler_hand1] class=StreamHandler level=NOTSET formatter=form1 args=(sys.stdout,) [formatter_form1] format=%(levelname)s ++ %(message)s datefmt= aµ [loggers] keys=root,parser [handlers] keys=hand1 [formatters] keys=form1 [logger_root] level=WARNING handlers= [logger_parser] level=DEBUG handlers=hand1 propagate=1 qualname=compiler.parser [handler_hand1] class=StreamHandler level=NOTSET formatter=form1 args=(sys.stdout,) [formatter_form1] format=%(levelname)s ++ %(message)s datefmt= aµ [loggers] keys=root,parser [handlers] keys=hand1 [formatters] keys=form1 [logger_root] level=WARNING handlers=hand1 [logger_parser] level=DEBUG handlers= propagate=1 qualname=compiler.parser [handler_hand1] class=StreamHandler level=NOTSET formatter=form1 args=(sys.stdout,) [formatter_form1] format=%(levelname)s ++ %(message)s datefmt= z sys.stdoutz sys.stboutzformatter=form1zformatter=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= zclass=StreamHandlerzclass=logging.StreamHandlerag [loggers] keys=root,parser [handlers] keys=hand1, hand2 [formatters] keys=form1, form2 [logger_root] level=WARNING handlers= [logger_parser] level=DEBUG handlers=hand1 propagate=1 qualname=compiler.parser [handler_hand1] class=StreamHandler level=NOTSET formatter=form1 args=(sys.stdout,) [handler_hand2] class=StreamHandler level=NOTSET formatter=form1 args=(sys.stderr,) [formatter_form1] format=%(levelname)s ++ %(message)s datefmt= [formatter_form2] format=%(message)s datefmt= a% [loggers] keys=root,parser,compiler [handlers] keys=hand1 [formatters] keys=form1 [logger_root] level=WARNING handlers=hand1 [logger_compiler] level=DEBUG handlers= propagate=1 qualname=compiler [logger_parser] level=DEBUG handlers= propagate=1 qualname=compiler.parser [handler_hand1] class=StreamHandler level=NOTSET formatter=form1 kwargs={'stream': sys.stdout,} [formatter_form1] format=%(levelname)s ++ %(message)s datefmt= zã [loggers] keys=root [handlers] keys=file [formatters] keys= [logger_root] level=DEBUG handlers=file [handler_file] class=FileHandler level=DEBUG args=("{tempfile}",) zø [loggers] keys=root [handlers] keys=screen [formatters] keys= [logger_root] level=DEBUG handlers=screen [handler_screen] level=DEBUG class=StreamHandler args=(sys.stdout,) formatter= cKs(t t |¡¡}tjj|fi|¤ŽdSrÀ)r*r+ÚtextwrapÚdedentrÚconfigÚ fileConfig)r:ÚconfÚkwargsÚfiler<r<r=Ú apply_config«szConfigFileTest.apply_configcCsvt ¡Z}| |j¡t ¡}| | ¡¡| | ¡¡|j dg|d|  g¡Wdƒn1sh0YdS©N©rfrgr$© rÚcaptured_stdoutrÇÚconfig0rrrwr\rurX©r:ÚoutputrÏr<r<r=Útest_config0_ok¯s  ÿþzConfigFileTest.test_config0_okcCsšt ¡~}t t |j¡¡}t ¡}|  |¡t j   |¡t   ¡}| | ¡¡| | ¡¡|jdg|d| g¡Wdƒn1sŒ0YdSrÈ)rrËr*r+rÀrÁrÌÚ configparserÚ ConfigParserZ read_filerrÂrÃrrwr\rurX)r:rÎrÆZcprÏr<r<r=Útest_config0_using_cp_ok¾s   ÿþz'ConfigFileTest.test_config0_using_cp_okcCsxt ¡\}| |¡t d¡}| | ¡¡| | ¡¡|jddg|d| g¡Wdƒn1sj0YdS©Núcompiler.parser©rlrerÉr$© rrËrÇrrrwr\rurX©r:rÂrÎrÏr<r<r=Útest_config1_okÐs   þýzConfigFileTest.test_config1_okcCs| t|j|j¡dSrÀ©rÞr rÇÚconfig2r[r<r<r=Útest_config2_failureßsz#ConfigFileTest.test_config2_failurecCs| t|j|j¡dSrÀ©rÞr rÇÚconfig3r[r<r<r=Útest_config3_failureãsz#ConfigFileTest.test_config3_failurec CsŽt ¡r}| |j¡t ¡}z tƒ‚WntyDt d¡Yn0tj   d¡|  |  ¡d¡|  g¡Wdƒn1s€0YdS©Nz just testingrz-ERROR:root:just testing Got a [RuntimeError] )rrËrÇÚconfig4rrr@Ú exceptionrîÚstdoutÚseekrKrIrXrÍr<r<r=Útest_config4_okçs      ÿzConfigFileTest.test_config4_okcCs|j|jddS©N)r©rØÚconfig5r[r<r<r=Útest_config5_oköszConfigFileTest.test_config5_okcCs|j|jddSrå)rØÚconfig6r[r<r<r=Útest_config6_okùszConfigFileTest.test_config6_okcCsJt ¡v}| |j¡t d¡}t d¡}| | ¡¡| | ¡¡|  | ¡¡|j gd¢|d|  g¡Wdƒn1s„0Yt ¡ž}| |j ¡t d¡}|  |j ¡| | ¡¡| | ¡¡t d¡}| | ¡¡| | ¡¡|  | ¡¡|j gd¢|d|  g¡Wdƒn1s<0YdS©NrÔzcompiler-hyphenated)rÕrÉ)rdrhr$úcompiler.lexer))rlri)rfrk)rlrm)rfrn)rrËrÇÚconfig1arrrwr\ruÚcriticalrXÚconfig7rør©r:rÎrÏZ hyphenatedr<r<r=Útest_config7_oküs2     ü(      ûzConfigFileTest.test_config7_okcCs dd„}| ¡bt dd¡\}}t |¡tjdkrB| dd¡}|jj|d}|  |¡|  |¡Wdƒn1sx0Yt j j d }|  |||¡dS) NcSs| ¡t |¡dSrÀ©r?ròÚremove©Úh1rr<r<r=Úcleanup)sz/ConfigFileTest.test_config8_ok..cleanuprútest_logging-X-r ú\z\\)rðr)Úcheck_no_resource_warningrðrñròr?r;ÚreplaceÚconfig8r€rÇrÚrootr6r)r:rörÿrrûr™r<r<r=Útest_config8_ok's     ( zConfigFileTest.test_config8_okcCsZ| |j¡t d¡}| |j¡| |j¡| |j¡|j|jdd| |j¡dS)NZsome_pristine_loggerF)Údisable_existing_loggers)rÇÚ disable_testrrrørr9©r:rÏr<r<r=Útest_logger_disabling>s     z$ConfigFileTest.test_logger_disablingcCs*d}| |¡| t ¡jdjd¡dS)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ÇrKrrr6r;)r:Z test_configr<r<r=Útest_config_set_handler_namesGs z,ConfigFileTest.test_config_set_handler_namesc Cs‚t d¡ ¡}tjddd\}}zPt || d¡¡t |¡t j j |t dddd d d d œid dWt  |¡n t  |¡0dS)Nat [formatters] keys=default [formatter_default] [handlers] keys=console [handler_console] class=logging.StreamHandler args=tuple() [loggers] keys=root [logger_root] formatter=default handlers=console Ú test_logging_z.ini©r¤ÚsuffixÚasciirYFrÜz5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)r€ÚdatefmtÚclass)ÚversionrþÚ formatters)Údefaults)rÀrÁÚstriprðrñròrCÚencoder?rrÂrÃÚdictró)r:Zinirÿrr<r<r=Ú!test_defaults_do_no_interpolation_s& ýÿýþz0ConfigFileTest.test_defaults_do_no_interpolationN) r]r^r_rrùrHrÌÚconfig1rírúrÚrÝràrçrérïrûrÿrÇrÏrÒrØrÛrÞrärèrêrñrýrrrr<r<r<r=r¾¬s>   ëë *& + r¾c@s<eZdZeZdZdd„Zdd„Zdd„Zdd „Z d d „Z d S) ÚSocketHandlerTest©rírc Csât |¡d|_|_|_z$| |j|jd¡|_}| ¡Wn,t yl}z||_WYd}~dSd}~00|j   ¡t j j}t|jtƒrœ|d|jƒ|_n||jdƒ|_d|_|j |jj d¡|j |j¡t d¡|_dS©Nç{®Gáz„?rírr)rr>r~Ú sock_hdlrÚserver_exceptionÚ server_classÚaddressÚ handle_socketrrürtr3rr6Z SocketHandlerÚ isinstanceÚserver_addressrPr\Ú log_outputr'r@r8rÚ Semaphorer©r:r~r†Zhclsr<r<r=r>’s& ÿ    zSocketHandlerTest.setUpc CsNz<|jr |j |j¡|j ¡|jr0|j ¡Wt |¡n t |¡0dSrÀ)rr'r@r?r~rrrrEr[r<r<r=rE¬s  zSocketHandlerTest.tearDowncCs”|j}| d¡}t|ƒdkrqt d|¡d}| |¡}t|ƒ|kr\|| |t|ƒ¡}q8t |¡}t |¡}|j |j d7_ |j   ¡qdS)Nrú>LrÚ ) Ú connectionÚrecvrLÚstructÚunpackÚpickleÚloadsrr§rrérr,)r:ÚrequestÚconnÚchunkÚslenÚobjr¢r<r<r=r·s      zSocketHandlerTest.handle_socketcCsV|jr| |j¡t d¡}| d¡|j ¡| d¡|j ¡| |j d¡dS)NZtcpr‘Úeggsú spam eggs ) rÚskipTestrrrurr+rxrKrrr<r<r=Ú test_outputÆs      zSocketHandlerTest.test_outputcCsš|jr| |j¡d|j_|j ¡z tdƒ‚WntyN|j d¡Yn0|j  d¡t   ¡}|  |jj |¡t   |jj |d¡|j  d¡dS)Ng@zDeliberate mistakez Never sentzNever sent, eitherr˜zNor this)rr/rZ retryStartr~rrr@r'rárurr7Z retryTimer)r:Únowr<r<r=Ú test_noserverÑs     zSocketHandlerTest.test_noserverN) r]r^r_rˆrrr>rErr0r2r<r<r<r=r‹s  rcCs*tjddd\}}t |¡t |¡|S)Nrz.sockr)rðrñròr?ró)rÿrr<r<r=Ú_get_temp_domain_socketäs  r3zUnix sockets requiredc@s*eZdZeedƒreZdd„Zdd„ZdS)ÚUnixSocketHandlerTestr’cCstƒ|_t |¡dSrÀ)r3rrr>r[r<r<r=r>ôszUnixSocketHandlerTest.setUpcCst |¡t |j¡dSrÀ)rrErrórr[r<r<r=rEùs zUnixSocketHandlerTest.tearDownN) r]r^r_r=rZr“rr>rEr<r<r<r=r4ìs r4c@s4eZdZeZdZdd„Zdd„Zdd„Zdd „Z d S) ÚDatagramHandlerTestrc Csàt |¡d|_|_|_z$| |j|jd¡|_}| ¡Wn,t yl}z||_WYd}~dSd}~00|j   ¡t j j}t|jtƒrœ|d|jƒ|_n||jdƒ|_d|_|j |jj d¡|j |j¡t ¡|_dSr)rr>r~rrrrÚhandle_datagramrrürtr3rr6ZDatagramHandlerrrrPr\rr'r@r8rr9rrr<r<r=r>s& ÿ    zDatagramHandlerTest.setUpc CsNz<|jr|j ¡|jr0|j |j¡|j ¡Wt |¡n t |¡0dSrÀ)r~rrrr'r@r?rrEr[r<r<r=rEs  zDatagramHandlerTest.tearDowncCsTt dd¡}|jt|ƒd…}t |¡}t |¡}|j|j d7_|j   ¡dS)Nr rr!) r$ÚpackÚpacketrLr&r'rr§rrérr2)r:r(r+r8r,r¢r<r<r=r6)s    z#DatagramHandlerTest.handle_datagramcCs`|jr| |j¡t d¡}| d¡|j ¡|j ¡| d¡|j ¡| |j d¡dS)NZudpr‘r-r.) rr/rrrurr3rArKrrr<r<r=r01s       zDatagramHandlerTest.test_outputN© r]r^r_rrrr>rEr6r0r<r<r<r=r5ýs  r5c@s*eZdZeedƒreZdd„Zdd„ZdS)ÚUnixDatagramHandlerTestr’cCstƒ|_t |¡dSrÀ)r3rr5r>r[r<r<r=r>EszUnixDatagramHandlerTest.setUpcCst |¡t |j¡dSrÀ)r5rErrórr[r<r<r=rEJs z UnixDatagramHandlerTest.tearDownN© r]r^r_r=rZr–rr>rEr<r<r<r=r:=s r:c@s4eZdZeZdZdd„Zdd„Zdd„Zdd „Z d S) ÚSysLogHandlerTestrc Csæt |¡d|_|_|_z$| |j|jd¡|_}| ¡Wn,t yl}z||_WYd}~dSd}~00|j   ¡t j j}t|jtƒr¤||jd|jfƒ|_n ||jƒ|_d|_|j |jj d¡|j |j¡t ¡|_dS)Nrrr)rr>r~Úsl_hdlrrrrr6rrürtr3rr6rûrrrPr\rr'r@r8rr9rrr<r<r=r>Us& ÿ     zSysLogHandlerTest.setUpc CsNz<|jr|j ¡|jr0|j |j¡|j ¡Wt |¡n t |¡0dSrÀ)r~rrr=r'r@r?rrEr[r<r<r=rEos  zSysLogHandlerTest.tearDowncCs|j|_|j ¡dSrÀ)r8rrr2)r:r(r<r<r=r6zsz!SysLogHandlerTest.handle_datagramcCsª|jr| |j¡t d¡}| d¡|j ¡| |jd¡|j  ¡d|j _ | d¡|j ¡| |jd¡|j  ¡d|j _ | d¡|j ¡| |jd¡dS)NZslhõspäms <11>spämFs <11>spämuhäm-s<11>häm-späm) rr/rrrurr3rKrrAr=Z append_nulÚidentrr<r<r=r0~s           zSysLogHandlerTest.test_outputNr9r<r<r<r=r<Ns  r<c@s*eZdZeedƒreZdd„Zdd„ZdS)ÚUnixSysLogHandlerTestr’cCstƒ|_t |¡dSrÀ)r3rr<r>r[r<r<r=r>™szUnixSysLogHandlerTest.setUpcCst |¡t |j¡dSrÀ)r<rErrórr[r<r<r=rEžs zUnixSysLogHandlerTest.tearDownNr;r<r<r<r=r@‘s r@z$IPv6 support required for this test.cs0eZdZeZdZ‡fdd„Z‡fdd„Z‡ZS)ÚIPv6SysLogHandlerTest)z::1rcstj|j_tt|ƒ ¡dSrÀ)rZÚAF_INET6rr•r%rAr>r[r)r<r=r>«s zIPv6SysLogHandlerTest.setUpcstj|j_tt|ƒ ¡dSrÀ)rZÚAF_INETrr•r%rArEr[r)r<r=rE¯s zIPv6SysLogHandlerTest.tearDown) r]r^r_rrrr>rEr.r<r<r)r=rA¢s rAc@s$eZdZdd„Zdd„Zdd„ZdS)ÚHTTPHandlerTestcCst |¡t ¡|_dSrÀ)rr>rr9rr[r<r<r=r>¶s zHTTPHandlerTest.setUpcCsr|j|_t|jƒ|_|jdkrRz t|jdƒ}|j |¡|_Wnd|_Yn0|  d¡|  ¡|j   ¡dS)NrëzContent-LengthéÈ) Úcommandr rùÚlog_dataÚintZheadersZrfilerRÚ post_dataZ send_responseZ end_headersrr2)r:r(Zrlenr<r<r=Úhandle_request¼s    zHTTPHandlerTest.handle_requestc CsÞt d¡}|j}| |jjd¡dD]°}d}|r–z ddl}WntyVd}Yqž0tj  t ¡}tj  |d¡}|  |j ¡}| |¡|j|d} nd}d} t||jd|d|_} |  ¡| j ¡d | j} |oØ|} tjj| d | | d d |_d|_| |j¡d D]¬} | |j_|j ¡d}| |¡|j ¡| |jjd ¡| |j | ¡| dkrlt!|jj"ƒ}nt!|j# $d¡ƒ}| |ddg¡| |ddg¡| |d|g¡q|j %¡|j |j¡|j &¡q&dS)NÚhttprrrz keycert.pem)Zcafiler)rƒz localhost:%dz/frob)ÚfooÚbar)ÚsecureÚcontextZ credentials)rêrër>rêúutf-8r;ÚfuncNamer0ré)'rrr'r@r6ÚsslÚ ImportErrorròrùÚdirnameÚ__file__r¡Z SSLContextZPROTOCOL_TLS_SERVERZload_cert_chainZcreate_default_contextrwrJr~rrtr3Z server_portrþZh_hdlrrGr8rrrArurKrFr ÚqueryrIÚdecoderrr?)r:rÏr'rNrarRrƒÚhereZlocalhost_certrOr~ÚhostZ secure_clientrréÚdr<r<r=r0És`        ÿ    ý      zHTTPHandlerTest.test_outputN)r]r^r_r>rJr0r<r<r<r=rD³s rDc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú MemoryTestcCst |¡i|_dSrÀ)rr>Ú _survivorsr[r<r<r=r>s zMemoryTest.setUpcGs.|D]$}t|ƒt|ƒf}t |¡|j|<qdSrÀ)ÚidrTÚweakrefÚrefr\)r:r r,Úkeyr<r<r=Ú_watch_for_survival szMemoryTest._watch_for_survivalcCs\t ¡g}|j ¡D] \\}}}|ƒdur| |¡q|rX| dt|ƒd |¡f¡dS)Nz;%d objects should have survived but have been destroyed: %sz, )ÚgcZcollectr\rËr¡rOrLr¡)r:ZdeadZid_Úrepr_r_r<r<r=Ú_assertTruesurvivals  ÿzMemoryTest._assertTruesurvivalcCsŒ|j tj¡t d¡}| |¡| tj¡|j | ¡¡| | ¡¡|  dg¡~|  ¡t d¡}| | ¡¡|  ddg¡dS)NrL)rLr.rg)rLr.rh) r'r-rrlrrar.rxr\rXrd)r:rLrMr<r<r=Útest_persistent_loggerss"   ÿ þz"MemoryTest.test_persistent_loggersN)r]r^r_r>rardrer<r<r<r=r[s r[c@seZdZdd„Zdd„ZdS)Ú EncodingTestc Csæt d¡}t dd¡\}}t |¡d}z tj|dd}| |¡z | |¡W|  |¡| ¡n|  |¡| ¡0t |dd}z |  |  ¡  ¡|¡W| ¡n | ¡0Wtj |¡rât |¡ntj |¡ràt |¡0dS)NÚtestrztest_logging-1-ufoo€rP©Úencoding)rrrðrñròr?rr8rvr@r'rKrRÚrstriprùÚisfileró)r:rtrÿrrBr™r©r<r<r=Útest_encoding_plain_file5s*      ÿ     ÿ z%EncodingTest.test_encoding_plain_filec Cs’t d¡}d}t d¡}d|_t ¡}||dƒ}t |¡}| |¡z |  |¡W|  |¡|  ¡n|  |¡|  ¡0|  ¡}|  |d¡dS)Nrguдо ÑвиданиÑÚcp1251Ústricts äî ñâèäàíèÿ )rrÚcodecsÚ getwriterrir*ÚBytesIOr/r8rvr@r?rIrK)r:rtÚmessageZ writer_classr,Úwriterr™rWr<r<r=Útest_encoding_cyrillic_unicodeOs         ÿ  z+EncodingTest.test_encoding_cyrillic_unicodeN)r]r^r_rlrtr<r<r<r=rf4srfc@seZdZdd„Zdd„ZdS)Ú WarningsTestc Csæt ¡Êt d¡| tjd¡tjdtdt ¡}t  |¡}t  d¡}|  |¡t  d¡|  |¡| ¡}| ¡| | d¡d¡t ¡}t d td d |d ¡| ¡}| ¡| |d ¡Wdƒn1sØ0YdS)NTFÚalways)Úcategoryú py.warningszI'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Ú UserWarningr*r+r/rr8Úwarnr@rIr?r7ÚfindÚ showwarningrK)r:r,rDrÏrWZa_filer<r<r=Ú test_warningsgs,        ÿÿzWarningsTest.test_warningscCs’t ¡vt d¡| tjd¡t d¡}| |jg¡t dt dd¡| t |jƒd¡|  |jdtj ¡Wdƒn1s„0YdS) NTFrxryrzr{rYr) r|r}rr~rrrKr6rƒr€rLÚassertIsInstanceÚ NullHandlerrr<r<r=Útest_warnings_no_handlerss   z&WarningsTest.test_warnings_no_handlersN)r]r^r_r„r‡r<r<r<r=ruesrucCs t ||¡SrÀ)rr1)r€rr<r<r=Ú formatFuncsrˆc@seZdZddd„ZdS)ÚmyCustomFormatterNcCsdSrÀr<)r:Úfmtrr<r<r=r&‘szmyCustomFormatter.__init__)N)r]r^r_r&r<r<r<r=r‰sr‰cCst ¡SrÀ)rr/r<r<r<r=Ú handlerFunc”sr‹c@s eZdZdS)Ú CustomHandlerN©r]r^r_r<r<r<r=rŒ—srŒc @seZdZejZdZddddiiddddd d œid dgd œd œZddddiiddddd d œidddgd œidd idœZddddiiddddd d œidddiid dgd œdœZddddiidddddd œidddgd œidd idœZ ddddiiddddd d œidddgd œidd idœZ ddddiiddddd d œidddgd œiddidœZ ddddiiddddd d œidddgd œidd idœZ ddedddœiddddd d œiddgd œd œZ deddœedddœeddœdœdddd d œdeidœddgd œd œZddddiidedddd d œidddgd œidd idœZddddiidedddd ddœidddgd œidd idœZddddiiddddd d œid ddgd œidd idœZdd!dddiiddddd d œiddgd œid"œdd id#œZdd$dddiiddddd d œiddgd œid"œdd id#œZddddiidddd d d œidd dgd œiddidœZdd$ddd iiddd%iid&œZdd$ddd%iiddd%iid&œZddddiid'd(diiddddd d'gd)œiddd'gd*œid dgd œd+œZddddiiddddd d œid,dd-idddgd œidd id.œZdddiiddddd d œid,dd-idddgd œidd id/œZd0dddiiddddd d œid,dd-idddgd œidd id.œZddddiiddddd d1d2d3œd4œid dgd œd œZdd5d6d7d8œiddd5d9œd:d;d5dœd?dd@gdAdBœidCœZddeddd!dDœiddddd d œidEddgdAdBœidCœZ ddeddd!dFœiddddd d œidEddgdAdBœidCœZ!ddedGdd!dFœiddddd d œidEddgdAdBœidCœZ"ddedd!dDœiddddd d œidEddgdAdBœidCœZ#dHdI„Z$dJdK„Z%efdLdM„Z&dNdO„Z'dPdQ„Z(dRdS„Z)dTdU„Z*dVdW„Z+dXdY„Z,dZd[„Z-d\d]„Z.d^d_„Z/d`da„Z0dbdc„Z1ddde„Z2dfdg„Z3dhdi„Z4djdk„Z5dldm„Z6dndo„Z7dpdq„Z8ddsdt„Z9dudv„Z:dwdx„Z;dydz„Zdd€„Z?dd‚„Z@dƒd„„ZAd…d†„ZBd‡dˆ„ZCd‰dŠ„ZDd‹dŒ„ZEdrS)ŽÚConfigDictTestr¿rYÚform1r€z%(levelname)s ++ %(message)srzlogging.StreamHandlerr‹zext://sys.stdout)r Ú formatterrHr,rj©rHr6)r r r6rürÔr.rH)r r r6Úloggersrüzext://sys.stdboutZNTOSETZWRANINGZmisspelled_namez.ExceptionFormatterz"%(levelname)s:%(name)s:%(message)s)ú()r€z .formatFunc)rZform2Zform3r“)rZhand2z.CustomHandlerzinvalid parameter name)r rrHr,rprìF)Úcompilerrì)r rþr r6r’rüTrl)r Z incrementalr6r’Zfilt1r;)r rrHr,Úfilters)rHr•)r r r•r6r’rüzcfg://true_formatterszcfg://handler_configs[hand1])r Útrue_formattersÚhandler_configsr r6r’rü)r–r—r r6r’rürŸrMú! )rLÚ terminator)r rrHr,ržÚmySimpleFormatterz1%(asctime)s (%(name)s) %(levelname)s: %(message)sú$)r€Ústyle)r rHrzlogging.handlers.MemoryHandleréÚ fileGlobal)r ZcapacityrrrH)ržÚ bufferGlobalÚmymodulerŸÚtrue)rHr6r§)r r r6r’)r“r€ÚvalidateÚmy_test_logger_custom_formatter)r r€r¢z.myCustomFormattercCstj |¡dSrÀ)rrÂZ dictConfig)r:rÄr<r<r=rÇ€ szConfigDictTest.apply_configcCsvt ¡Z}| |j¡t ¡}| | ¡¡| | ¡¡|j dg|d|  g¡Wdƒn1sh0YdSrÈrÊrÍr<r<r=rσ s  ÿþzConfigDictTest.test_config0_okcCsxt ¡\}| |¡t d¡}| | ¡¡| | ¡¡|jddg|d| g¡Wdƒn1sj0YdSrÓrÖr×r<r<r=rØ’ s   þýzConfigDictTest.test_config1_okcCs| t|j|j¡dSrÀrÙr[r<r<r=rÛ¡ sz#ConfigDictTest.test_config2_failurecCs| t|j|j¡dSrÀ)rÞr rÇÚconfig2ar[r<r<r=Útest_config2a_failure¥ sz$ConfigDictTest.test_config2a_failurecCs| t|j|j¡dSrÀ)rÞr rÇÚconfig2br[r<r<r=Útest_config2b_failure© sz$ConfigDictTest.test_config2b_failurecCs| t|j|j¡dSrÀrÜr[r<r<r=rÞ­ sz#ConfigDictTest.test_config3_failurec Cs†t ¡j}| |j¡z tƒ‚Wnty<t d¡Yn0tj  d¡|  |  ¡d¡|  g¡Wdƒn1sx0YdSrß) rrËrÇràr@rrárîrârãrKrIrX©r:rÎr<r<r=rä± s      ÿzConfigDictTest.test_config4_okc Cs†t ¡j}| |j¡z tƒ‚Wnty<t d¡Yn0tj  d¡|  |  ¡d¡|  g¡Wdƒn1sx0YdSrß) rrËrÇÚconfig4ar@rrárîrârãrKrIrXr¨r<r<r=Útest_config4a_okÀ s      ÿzConfigDictTest.test_config4a_okcCs|j|jddSrårær[r<r<r=rèÏ szConfigDictTest.test_config5_okcCs| t|j|j¡dSrÀ)rÞr rÇrér[r<r<r=Útest_config6_failureÒ sz#ConfigDictTest.test_config6_failurecCst ¡^}| |j¡t d¡}| | ¡¡| | ¡¡|j ddg|d|  g¡Wdƒn1sl0Yt ¡t}| |j ¡t d¡}|  |j ¡t d¡}| | ¡¡| | ¡¡|j ddg|d|  g¡Wdƒn1sø0YdS)NrÔrÕrÉr$rì©rlrh©rfri) rrËrÇrrrrwr\rurXrïr9rrÍr<r<r=rñÕ s4   þý(     þýzConfigDictTest.test_config7_okcCs$t ¡^}| |j¡t d¡}| | ¡¡| | ¡¡|j ddg|d|  g¡Wdƒn1sl0Yt ¡}| |j ¡t d¡}|  |j ¡| | ¡¡| | ¡¡t d¡}| | ¡¡| | ¡¡|j gd¢|d|  g¡Wdƒn1s0YdS)NrÔrÕrÉr$rì)r¬r­©rlrk©rfrm) rrËrÇrrrrwr\rurXrûrørrÍr<r<r=Útest_config_8_okò s2   þý(      ûzConfigDictTest.test_config_8_okcCsJt ¡v}| |j¡t d¡}t d¡}| | ¡¡| | ¡¡|  | ¡¡|j gd¢|d|  g¡Wdƒn1s„0Yt ¡ž}| |j ¡t d¡}|  |j ¡| | ¡¡| | ¡¡t d¡}| | ¡¡| | ¡¡|  | ¡¡|j gd¢|d|  g¡Wdƒn1s<0YdSrë)rrËrÇrírrrwr\rurîrXÚconfig8arørrðr<r<r=Útest_config_8a_ok s2     ü(      ûz ConfigDictTest.test_config_8a_okcCs°t ¡”}| |j¡t d¡}| | ¡¡|jg|d| |j ¡| | ¡¡|jg|d| |j ¡| | ¡¡|jdg|dWdƒn1s¢0YdS)NrÔr$r¬) rrËrÇÚconfig9rrrwr\rXÚconfig9aÚconfig9brÍr<r<r=Útest_config_9_ok> s     ÿþzConfigDictTest.test_config_9_okcCsªt ¡Ž}| |j¡t d¡}| | ¡¡t d¡}| | ¡¡t d¡}| | ¡¡t d¡}| | ¡¡|j ddg|dWdƒn1sœ0YdS©NrÔr”rìzcompiler.parser.codegen)rjrer­r$) rrËrÇÚconfig10rrrvr\rurXrÍr<r<r=Útest_config_10_okP s       þýz ConfigDictTest.test_config_10_okcCs| |j¡dSrÀ)rØÚconfig11r[r<r<r=Útest_config11_okc szConfigDictTest.test_config11_okcCs| t|j|j¡dSrÀ)rÞr rÇÚconfig12r[r<r<r=Útest_config12_failuref sz$ConfigDictTest.test_config12_failurecCs| t|j|j¡dSrÀ)rÞr rÇÚconfig13r[r<r<r=Útest_config13_failurei sz$ConfigDictTest.test_config13_failurecCs|t ¡`}| |j¡tjd}| |jd¡| |jd¡t  d¡|  |  ¡  d¡¡Wdƒn1sn0YdS)NrrMr˜Z Exclamationz Exclamation! ) rrËrÇÚconfig14rrrKrLr™rvr9rIrŸ)r:rÎrDr<r<r=Útest_config14_okl s    zConfigDictTest.test_config14_okcCs˜dd„}| ¡Zt dd¡\}}t |¡ddd|dœid dgid œ}| |¡| |¡Wdƒn1sp0Ytjjd }|  |||¡dS) NcSs| ¡t |¡dSrÀròrôr<r<r=röw sz0ConfigDictTest.test_config15_ok..cleanuprr÷rYrÆzlogging.FileHandler)r Úfilenamer6©r r6rür) rùrðrñròr?rÇrrür6r)r:rörÿrrÂr™r<r<r=Útest_config15_oku s"  þÿÿø ( zConfigDictTest.test_config15_okNc Cs| d¡}tj d|¡}| ¡|j ¡|j}|j ¡z¤t   t j t j ¡}|  d¡|  d|f¡t dt|ƒ¡}||}d}t|ƒ} | dkr´| ||d…¡} || 7}| | 8} qˆ| ¡W|j d¡tj ¡t |¡n"|j d¡tj ¡t |¡0dS)NrPrg@rír )rrrÂÚlistenrrtr3r\rArZrCÚ SOCK_STREAMÚ settimeoutÚconnectr$r7rLÚsendr?Z stopListeningrrq) r:ÚtextZverifyrlr\r…r+rWZ sentsofarÚleftÚsentr<r<r=Úsetup_via_listener’ s2         þ  z!ConfigDictTest.setup_via_listenercCs°t ¡”}| t |j¡¡t d¡}| |  ¡¡t d¡}| |  ¡¡t d¡}| |  ¡¡t d¡}|  |  ¡¡|j ddg|dWdƒn1s¢0YdSr·) rrËrÍÚjsonÚdumpsr¸rrrvr\rurXrÍr<r<r=Útest_listen_config_10_ok® s      þýz'ConfigDictTest.test_listen_config_10_okcCs€t ¡d}| t tj¡¡t d¡}|  |  ¡¡|  |  ¡¡|j ddg|d|  g¡Wdƒn1sr0YdSrÓ) rrËrÍrÀrÁr¾rrrrwr\rurXrÍr<r<r=Útest_listen_config_1_okÁ s  þýz&ConfigDictTest.test_listen_config_1_okcCs dd„}dd„}t d¡}t tj¡}t ¡8}| ||¡|  |  ¡¡|  |  ¡¡Wdƒn1sl0Y|j g|d|j ddgd d t ¡@}| |¡t d¡}|  |  ¡¡|  |  ¡¡Wdƒn1sä0Y|j d d g|d|j ddgd d t ¡L}| |ddd …|¡t d¡}|  |  ¡¡|  |  ¡¡Wdƒn1sn0Y|j ddg|d|j ddgd d dS)NcSsdSrÀr<©Ústuffr<r<r=Ú verify_failÑ sz6ConfigDictTest.test_listen_verify..verify_failcSs|ddd…S)Nrèr<rÒr<r<r=Úverify_reverseÔ sz9ConfigDictTest.test_listen_verify..verify_reverserÔr$rÕrÉrÉ)rSr¬r­rèr®r¯) rrrÀrÁr¾rrrËrÍrwr\rurX)r:rÔrÕrÏZto_sendrÎr<r<r=Útest_listen_verifyÏ sb    ,þý   ,þýþý  .þýþýz!ConfigDictTest.test_listen_verifycCs| t|j|j¡dSrÀ)rÞrýrÇÚ out_of_orderr[r<r<r=Útest_out_of_order sz ConfigDictTest.test_out_of_ordercCs\t |j¡}d|ddd<| |¡t d¡jd}| |jtj ¡| |j j tj ¡dS)Nz-${asctime} (${name}) ${levelname}: ${message}r ršr€r r) rÚdeepcopyr×rÇrrr6r…rrÝrÚ_styleÚStringTemplateStyle©r:rÂr™r<r<r=Ú#test_out_of_order_with_dollar_style s   ÿz2ConfigDictTest.test_out_of_order_with_dollar_stylecCs.| |j¡t d¡jd}| |jt¡dS©Nr£r)rÇÚcustom_formatter_class_validaterrr6r…rr»©r:r™r<r<r=Ú)test_custom_formatter_class_with_validate s z8ConfigDictTest.test_custom_formatter_class_with_validatecCs.| |j¡t d¡jd}| |jt¡dSrÞ)rÇÚ custom_formatter_class_validate2rrr6r…rr»ràr<r<r=Ú*test_custom_formatter_class_with_validate2 s z9ConfigDictTest.test_custom_formatter_class_with_validate2cCsF|j ¡}d|ddd<| |¡t d¡jd}| |jt¡dS)Nr›r rrœr£r) rßrrÇrrr6r…rr»rÜr<r<r=Ú9test_custom_formatter_class_with_validate2_with_wrong_fmt$ s   zHConfigDictTest.test_custom_formatter_class_with_validate2_with_wrong_fmtcCs| t|j|j¡dSrÀ)rÞrýrÇÚ custom_formatter_class_validate3r[r<r<r=Ú*test_custom_formatter_class_with_validate3- sz9ConfigDictTest.test_custom_formatter_class_with_validate3cCs| t|j|j¡dSrÀ)rÞrýrÇÚcustom_formatter_with_functionr[r<r<r=Ú,test_custom_formatter_function_with_validate0 sz;ConfigDictTest.test_custom_formatter_function_with_validatecCsödgd¢dddœdddd gd ggd ¢d œ}tj |¡}| | d ¡d¡| | d¡d¡| | d¡d¡| | d¡d ¡| | d¡d¡| | d¡d¡| d¡}| | d¡gd¢¡| t|jd¡| t|jd¡| t|jd¡dS)N)rYrŸé)rÚbÚcr†ré)rZr©)Úg)rDr®ÚjrÌÚlryr²)Úoz cfg://alistÚp)ZatupleZalistZadictZnest1Znest2Znest3zcfg://atuple[1]rŸzcfg://alist[1]rêzcfg://nest1[1][0]rDzcfg://nest2[1][1]z cfg://adict.dzcfg://adict[f]z cfg://nest3rYz cfg://nosuchzcfg://!zcfg://adict[2]) rrÂZBaseConfiguratorrKÚconvertÚpoprÞÚKeyErrorrý)r:rZZbcrÍr<r<r=Útest_baseconfig3 s& ú  zConfigDictTest.test_baseconfigcs¬ddlm‰G‡fdd„dtjƒ}ˆdddgƒ}|dd gd }d d ||d œidd gdœdœ}t ¡$}| |¡t d¡Wdƒn1sŽ0Y| |  ¡d¡dS)Nr©Ú namedtuplecs*eZdZ‡‡fdd„Z‡fdd„Z‡ZS)z1ConfigDictTest.test_namedtuple..MyHandlercstƒj|i|¤Ž||_dSrÀ)r%r&Úresource)r:r÷r rÅ)r*rör<r=r&N sz:ConfigDictTest.test_namedtuple..MyHandler.__init__cs$|jd|jj›7_tƒ |¡S©Nú )rér÷Útyper%ràrÃr)r<r=ràR sz6ConfigDictTest.test_namedtuple..MyHandler.emitr-r<rõr)r=Ú MyHandlerM srûÚResourcerúÚlabelsZmy_typer)rúrýrYZ myhandler)r“r÷rlr‘rÃzsome logzsome log my_type ) Ú collectionsrörr/rrLrÇrwrKrI)r:rûrür÷rÂrNr<rõr=Útest_namedtupleI s   þÿ ø  (zConfigDictTest.test_namedtuple)N)Fr]r^r_rrùrHrÌrrí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Ç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ãrärærèrôrÿr<r<r<r=rŽšs„ÿÿüÿ þñÿÿüÿ þÿÿëÿÿüÿ ÿÿþìÿÿüÿ þÿÿëÿÿüÿ þÿÿëÿÿüÿ þÿÿëÿÿüÿ þÿÿëþÿüÿ þðþþþ÷üÿù þå#ÿÿüÿ þÿÿëÿÿûÿ þÿÿêÿÿüÿ þÿÿëÿÿüÿ þû ÿèÿÿüÿ þû ÿèÿÿüÿ þÿÿëÿÿÿÿøÿÿÿÿøÿÿÿÿûÿ þÿþå#ÿÿüÿÿþÿÿç!ÿÿüÿÿþÿÿèÿÿüÿÿþÿÿç ÿÿþûÿ þíþÿýûúýÿê!ýÿüÿ ýÿïýÿüÿ ýÿïýÿüÿ ýÿïýÿüÿ ýÿï !+  >  rŽc@seZdZdd„Zdd„ZdS)Ú ManagerTestcsng‰G‡fdd„dtjƒ}t d¡}| t|jt¡| |¡| d¡}| d¡t d¡|  ˆdg¡dS)NcseZdZd‡fdd„ ZdS)z6ManagerTest.test_manager_loggerclass..MyLoggerNcsˆ |¡dSrÀ©r¡)r:rHrér Úexc_infoÚextra©Zloggedr<r=Ú_logm sz;ManagerTest.test_manager_loggerclass..MyLogger._log)NN)r]r^r_rr<rr<r=ÚMyLoggerl srrgzshould appear in loggedzshould not appear in logged) rÚLoggerÚManagerrÞÚ TypeErrorÚsetLoggerClassrHrrvrK)r:rÚmanrÏr<rr=Útest_manager_loggerclassi s     z$ManagerTest.test_manager_loggerclasscCs,t d¡}tƒ}| |¡| |j|¡dSrÀ)rrÚobjectÚsetLogRecordFactoryrKÚlogRecordFactory)r:r rUr<r<r=Útest_set_log_record_factoryy s  z'ManagerTest.test_set_log_record_factoryN)r]r^r_r rr<r<r<r=rh src@seZdZdd„ZdS)ÚChildLoggerTestcCs¦t ¡}t d¡}t d¡}| d¡}| d¡}| |t d¡¡| |t d¡¡| d¡}| d¡}| d¡}| |t d¡¡| |t d¡¡| ||¡dS) NÚabczdef.ghiZxyzzuvw.xyzÚdefZghiúabc.defz abc.def.ghi)rrÚgetChildrK)r:rªÚl1Úl2Úc1Úc2Zc3r<r<r=Útest_child_loggers€ s       z"ChildLoggerTest.test_child_loggersN)r]r^r_rr<r<r<r=r src@s eZdZdS)ÚDerivedLogRecordNrr<r<r<r=r src@s$eZdZdd„Zdd„Zdd„ZdS)ÚLogRecordFactoryTestcCsBGdd„dtjƒ}t |¡|tƒ|_|j |j¡t ¡|_ dS)Nc@seZdZdd„Zdd„ZdS)z2LogRecordFactoryTest.setUp..CheckingFiltercSs ||_dSrÀ)r )r:r r<r<r=r&— sz;LogRecordFactoryTest.setUp..CheckingFilter.__init__cSs,t|ƒ}||jur(d||jf}t|ƒ‚dS)Nz)Unexpected LogRecord type %s, expected %sT)rúr r )r:r¢rlrér<r<r=r¨š s ÿz9LogRecordFactoryTest.setUp..CheckingFilter.filterN)r]r^r_r&r¨r<r<r<r=ÚCheckingFilter– sr) rr–rr>rr¨r'r—ÚgetLogRecordFactoryÚ orig_factory)r:rr<r<r=r>• s   zLogRecordFactoryTest.setUpcCs(|j |j¡t |¡t |j¡dSrÀ)r'r˜r¨rrErrrr[r<r<r=rE§ s zLogRecordFactoryTest.tearDowncCs@| t|jj| ¡¡t t¡|j | ¡¡|  dg¡dS)N)rürfrg) rÞr r'rvr\rrrrurXr[r<r<r=Útest_logrecord_class¬ s ÿ ÿz)LogRecordFactoryTest.test_logrecord_classN)r]r^r_r>rEr r<r<r<r=r“ src@s„eZdZdZdd„Zdd„Zdd„Zdd „Ze  e e j d ƒd ¡d d „ƒZ e  e e j d ƒd ¡dd„ƒZe  e e j d ƒd ¡dd„ƒZdS)ÚQueueHandlerTestrÉcCs`t |¡t d¡|_tj |j¡|_d|_t  d¡|_ d|j _ |j   tj ¡|j  |j¡dS)NrèZqueF)rr>ÚqueueÚQueuerr6Ú QueueHandlerÚque_hdlrr;rÚ que_loggerr§r-rjr8r[r<r<r=r>º s   zQueueHandlerTest.setUpcCs|j ¡t |¡dSrÀ)r%r?rrEr[r<r<r=rEÄ s zQueueHandlerTest.tearDowncCs¢|j | ¡¡| tj|jj¡|j | ¡¡| tj|jj¡| ¡}|j |¡|j ¡}|  t |t j ƒ¡|  |j|jj¡|  |j|jf|df¡dSrÀ)r&rxr\rÞr"ÚEmptyÚ get_nowaitrwrvr9rrÚ LogRecordrKr;rér )r:rérBr<r<r=Útest_queue_handlerÈ s  z#QueueHandlerTest.test_queue_handlercCsx| ¡}t tj¡}d}|j|j||d}t |j¡}|j  |¡|j   |¡|j   ¡}| ||j¡| ||j¡dS)Nz {name} -> {levelname}: {message})r;Ú levelnamerr)r\rr‡rjr€r;r1r2r%r4r&rvr"r(rKrérr)r:rér+Zlog_format_strZ formatted_msgrZ log_recordr<r<r=Útest_formattingÔ s ÿ    z QueueHandlerTest.test_formattingÚ QueueListenerz5logging.handlers.QueueListener required for this testcCs€tt ¡ƒ}tj |j|¡}| ¡z<|j  |  ¡¡|j  |  ¡¡|j  |  ¡¡W|  ¡n |  ¡0| |jtjdd¡| |jtjdd¡| |jtjdd¡| ¡tt ¡ƒ}| tj¡tjj|j|dd}| ¡z<|j  |  ¡¡|j  |  ¡¡|j  |  ¡¡W|  ¡n |  ¡0| |jtjdd¡| |jtjdd¡| |jtjd d¡| ¡dS) Nre)rÁrrrgrhT)Zrespect_handler_levelrirkrm)rrZMatcherrr6r-r"rr&rvr\rurîrrr9Úmatchesrjrfrdr?r-rø)r:r™Úlistenerr<r<r=Útest_queue_listenerá s6    ÿz$QueueHandlerTest.test_queue_listenerc CsŒtj |j|j¡}| ¡z ddWn<tyb}z$|}|jj|  ¡|dWYd}~n d}~00|  ¡|  |j   ¡ ¡ d¡d¡dS)NrYr©rZ Traceback)rr6r-r"r0rÚZeroDivisionErrorr&rár\rrrKr,rIr rm)r:r/r†Úexcr<r<r=Ú&test_queue_listener_with_StreamHandlers *z7QueueHandlerTest.test_queue_listener_with_StreamHandlercCsd|j |j¡|j |j¡tj |j |j¡}|  ¡|j  d¡|  ¡|  |j ¡ ¡d¡dS)Nruzque -> ERROR: error)r%r4r3r&r8r0rr6r-r"rrurrrKr,rIr )r:r/r<r<r=Ú*test_queue_listener_with_multiple_handlerss z;QueueHandlerTest.test_queue_listener_with_multiple_handlersN)r]r^r_rHr>rEr*r,r<Ú skipUnlessr=rr6r0r4r5r<r<r<r=r!¶ s"   ÿ !ÿ ÿr!r-)Úpatchc@sheZdZdZedd„ƒZe ej j d¡dd„ƒZ e ej j d¡dd„ƒZ ed d „ƒZ d d „Zd d„ZdS)ÚQueueListenerTestécCs”t d|¡}| tj¡tj |¡}| |¡tj |¡}| ¡|  d¡|  d¡|  d¡|  d¡|  d¡|  ¡|  |¡|  ¡dS)Nztest_logger_with_id_%sÚoneÚtwoZthreeZfourZfive) rrr-r.r6r$r8r-rrwrrr@r?)Ú log_queuer?rÏr™r/r<r<r=Ú setup_and_log+s          zQueueListenerTest.setup_and_logr÷cCsJt|jƒD]$}t ¡}| |d| ¡|f¡q | |jd|jd¡dS©Nú%s_%srz&correct number of handled log messages)rÚrepeatr"r#r=r]rKÚ call_count©r:Z mock_handler®r<r<r<r=Ú#test_handle_called_with_queue_queueCs ÿz5QueueListenerTest.test_handle_called_with_queue_queuecCsbt ¡t|jƒD]4}t ¡}| |d| ¡|f¡| ¡|  ¡q|  |j d|jd¡dSr>) rÚ*skip_if_broken_multiprocessing_synchronizerr@Úmultiprocessingr#r=r]r?rqrKrArBr<r<r=Ú test_handle_called_with_mp_queueKs ÿz2QueueListenerTest.test_handle_called_with_mp_queueccs.z| ¡VqWntjy(gYS0dSrÀ)r(r"r')r<r<r<r=Úget_all_from_queueXsz$QueueListenerTest.get_all_from_queuecCs†t ¡t|jƒD]n}t ¡}| |d| ¡|f¡t|  |¡ƒ}|  ¡|  ¡gt j jjgg}| ||ddd„|Dƒ¡qdS)Nr?z&Found unexpected messages in queue: %scSs"g|]}t|tjƒr|jn|‘qSr<)rrr)ré)r­ryr<r<r=r¯usÿzJQueueListenerTest.test_no_messages_in_queue_after_stop..)rrDrr@rEr#r=r]ÚlistrGr?rqrr6r-Ú _sentinelrM)r:r®r"rËrUr<r<r=Ú$test_no_messages_in_queue_after_stop`s ÿÿÿz6QueueListenerTest.test_no_messages_in_queue_after_stopcCsZt ¡}tj |¡}| ¡| ¡| t¡|  ¡Wdƒn1sL0YdSrÀ) r"r#rr6r-rrrrÞrýÚ task_done)r:r<r/r<r<r=Útest_calls_task_done_after_stopxs   z1QueueListenerTest.test_calls_task_done_after_stopN)r]r^r_r@Ú staticmethodr=r7r rr6r-rCrFrGrJrLr<r<r<r=r8#s    r8c@s eZdZdd„ZeZdd„ZdS)ÚUTCcCstSrÀ)ÚZERO©r:Údtr<r<r=Ú utcoffset†sz UTC.utcoffsetcCsdS)NrNr<rPr<r<r=Útzname‹sz UTC.tznameN)r]r^r_rRÚdstrSr<r<r<r=rN…srNc@s^eZdZdd„Zddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dS)Ú FormatterTestc Cs0dtjtj ddd¡ddddddœ|_i|_dS) Nzformatter.testrùÚtoz dummy.extr{zMessage with %d %s)rŸZ placeholders)r;rHÚpathnameÚlinenorÚfuncrér )rr.ròrùr¡ÚcommonÚvariantsr[r<r<r=r>‘sø zFormatterTest.setUpNcCs,t|jƒ}|dur"| |j|¡t |¡SrÀ)rrZrBr[rr§)r:r;Úresultr<r<r=Ú get_recordŸs zFormatterTest.get_recordc OsTz|j|g|¢Ri|¤ŽWn2|yN}z| ||j¡WYd}~n d}~00dSrÀ)rÞrKrr)r:rárrr rÅr†r<r<r=Úassert_error_message¥sz"FormatterTest.assert_error_messagecCs˜| ¡}t d¡}| | |¡d¡t d¡}| t|j|¡| | ¡¡t d¡}|  | ¡¡t d¡}|  | ¡¡t d¡}|  | ¡¡dS)Nz${%(message)s}z${Message with 2 placeholders}z %(random)sú %(asctime)sz%(asctime)-15sz%(asctime)#15s© r]rr1rKr€rÞrýrøÚusesTimer9©r:rªr©r<r<r=Ú test_percent«s     zFormatterTest.test_percentcCsº| ¡}tjddd}| | |¡d¡tjddd}| t|j|¡tjddd}| | ¡¡tjddd}|  | ¡¡tjddd}|  | ¡¡tjd dd}|  | ¡¡dS) Nz $%{message}%$ú{©rœú$%Message with 2 placeholders%$z{random}z {message}ú {asctime}z{asctime!s:15}z {asctime:15}r`rbr<r<r=Ú test_bracesºszFormatterTest.test_bracescCs| ¡}tjddd}| | |¡d¡tjddd}| | |¡d¡tjddd}| | |¡d¡tjddd}| t|j|¡| | ¡¡tjd dd}|  | ¡¡tjd dd}|  | ¡¡tjddd}| | ¡¡tjd dd}|  | ¡¡dS) Nú ${message}r›rezMessage with 2 placeholdersz$messagez$$%${message}%$$rfz ${random}z ${asctime}z$asctimez ${asctime}--r`rbr<r<r=Ú test_dollarsÊs$zFormatterTest.test_dollarscCst d¡}| |jd¡t d¡}| |jd¡t d¡}| |jd¡t d¡}| |jd¡tjddd}| |jd¡tjddd}| |jd¡tjd dd}| |jd ¡tjd dd}| |jd ¡tjd dd}| |jd ¡tjd dd}| |jd ¡tjd dd}| |jd ¡tjddd}| |jd¡tjddd}| |jd¡tjddd}| |jd¡tjddd}| |jd¡tjddd}| |jd¡tjddd}| |jd¡tjddd}| |jd¡tjddd}| |jd¡tjddd}| |jd¡tjddd}| |jd¡| ttjd¡| ttjd¡| ttjd¡| ttjd¡| ttjd¡| ttjd¡| ttjd¡| ttjd ¡| ttjd!¡|jtd"tjd#dd|jtd$tjd%dd| td&¡|jttjd'dd|jtd(tjd)dd|jtd*tjd+dd|jttjd,dd|jttjd-dd|jttjd.dd|jttjd/dd|jtd0tjd1dd|jtd0tjd2dd|jttjd3dd|jttjd4dd|jttjd5dd|jttjd6dd|jttjd7dd|jttjd8dd|jttjd9dd|jttjd:dd|jttjd;dd|jtddd|jtd.NoMsecFormatterNz%d/%m/%Y %H:%M:%S)r]r^r_Údefault_msec_formatÚdefault_time_formatr<r<r<r=ÚNoMsecFormatter‡srƒrprrqrrrérrsz21/04/1993 08:03:00)rr1r]rurvrrwrxryrzr|r}rKr~)r:rƒrªrQr©r<r<r=Útest_default_msec_format_none†sz+FormatterTest.test_default_msec_format_none)N) r]r^r_r>r]r^rcrhrjrmror€r„r<r<r<r=rUs rUc@seZdZdd„Zdd„ZdS)ÚTestBufferingFormattercCs dt|ƒS)Nz[(%d)©rL©r:Úrecordsr<r<r=Ú formatHeader”sz#TestBufferingFormatter.formatHeadercCs dt|ƒS)Nz(%d)]r†r‡r<r<r=Ú formatFooter—sz#TestBufferingFormatter.formatFooterN)r]r^r_r‰rŠr<r<r<r=r…“sr…c@s$eZdZdd„Zdd„Zdd„ZdS)ÚBufferingFormatterTestcCs"t ddi¡t ddi¡g|_dS)Nrér:r;)rr§rˆr[r<r<r=r>›s  þzBufferingFormatterTest.setUpcCs2t ¡}| d| g¡¡| d| |j¡¡dS)NrZonetwo)rÚBufferingFormatterrKr€rˆrlr<r<r=Ú test_default¡sz#BufferingFormatterTest.test_defaultcCsDtƒ}| d| |j¡¡t d¡}t|ƒ}| d| |j¡¡dS)Nz[(2)onetwo(2)]z <%(message)s>z[(2)(2)])r…rKr€rˆrr1)r:r©Zlfr<r<r=Ú test_custom¦s  z"BufferingFormatterTest.test_customN)r]r^r_r>rrŽr<r<r<r=r‹šsr‹c@seZdZdd„ZdS)Ú ExceptionTestcCs¦|j}tƒ}| |¡z tdƒ‚WntjdddYn0| |¡| ¡|jd}|  |j   d¡¡|  |j   d¡¡|  |j   d¡¡|  |j   d ¡¡dS) Nr?ZfailedT©Ú stack_inforz#Traceback (most recent call last): z! RuntimeError: deliberate mistakeúStack (most recent call last): z,logging.exception('failed', stack_info=True))r'ÚRecordingHandlerr8r@rrár@r?rˆr9Úexc_textrxrŸr‘)r:rªrDr<r<r=r,®s    zExceptionTest.test_formattingN)r]r^r_r,r<r<r<r=r­src@seZdZdd„ZdS)ÚLastResortTestc Csš|j}| |j¡tj}tj}zZt ¡D}| d¡|  |  ¡d¡|  d¡|  |  ¡d¡Wdƒn1st0Ydt_t ¡.}|  d¡d}|  |  ¡|¡Wdƒn1sÀ0Yt ¡*}|  d¡|  |  ¡d¡Wdƒn1s0Yd|j _ dt_t ¡*}|  d¡|  |  ¡d¡Wdƒn1sV0YW| |j¡|t_|t_n| |j¡|t_|t_0dS)NzThis should not appearrz Final chance!zFinal chance! z-No handlers could be found for logger "root" F)r'r@r0rÚ lastResortrJrrLrxrKrIrvrÚemittedNoHandlerWarningr8)r:rüZold_lastresortZold_raise_exceptionsrNrér<r<r=Útest_last_resortÄs:    .  .  0  2 þ zLastResortTest.test_last_resortN)r]r^r_r˜r<r<r<r=r•Ãsr•c@seZdZdd„Zdd„ZdS)Ú FakeHandlerc Cs$dD]}t||| |||¡ƒqdS)N)r+Úflushr?r,)ÚsetattrÚ record_call)r:Ú identifierÚcalledrr<r<r=r&ìszFakeHandler.__init__cs‡‡‡fdd„}|S)Ncsˆ d ˆˆ¡¡dS)Nz{} - {})r¡r€r<©ržrÚ method_namer<r=Úinnerñsz&FakeHandler.record_call..innerr<)r:rr ržr¡r<rŸr=rœðszFakeHandler.record_callN)r]r^r_r&rœr<r<r<r=r™êsr™cs$eZdZ‡fdd„Zdd„Z‡ZS)r“cs tt|ƒj|i|¤Žg|_dSrÀ)r%r“r&rˆ)r:r rÅr)r<r=r&øszRecordingHandler.__init__cCs|j |¡dSrÀ)rˆr¡rÃr<r<r=r÷üszRecordingHandler.handle)r]r^r_r&r÷r.r<r<r)r=r“ös r“cs”eZdZ‡fdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Z‡ZS)!Ú ShutdownTestcs.tt|ƒ ¡g|_tj}| ttd|¡dS)NrJ)r%r¢r>ržrrJrr›)r:Zraise_exceptionsr)r<r=r>szShutdownTest.setUpcs‡fdd„}|S)Ncs ˆƒ‚dSrÀr<r<©rur<r=r¡ sz'ShutdownTest.raise_error..innerr<)r:rur¡r<r£r=Ú raise_error s zShutdownTest.raise_errorcCsbtd|jƒ}td|jƒ}td|jƒ}ttjj|||gƒ}tjt|ƒdgd¢}| ||j¡dS)NrrYrŸ©Ú handlerList) 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žrWrr^r_rurHrK)r:Zhandler0Zhandler1Zhandler2r6rUr<r<r=Útest_no_failures   zShutdownTest.test_no_failurecCsRtd|jƒ}t||| |¡ƒtj |¡g}tjt|ƒd|  d|jd¡dS)Nrr¥r§rè) r™ržr›r¤rr^r_rurHrK)r:rrur™r6r<r<r=Ú_test_with_failure_in_method!s  z)ShutdownTest._test_with_failure_in_methodcCs| dt¡dS©Nr+©r©rür[r<r<r=Útest_with_ioerror_in_acquire*sz)ShutdownTest.test_with_ioerror_in_acquirecCs| dt¡dS©Nršr«r[r<r<r=Útest_with_ioerror_in_flush-sz'ShutdownTest.test_with_ioerror_in_flushcCs| dt¡dS©Nr?r«r[r<r<r=Útest_with_ioerror_in_close0sz'ShutdownTest.test_with_ioerror_in_closecCs| dt¡dSrª©r©rýr[r<r<r=Útest_with_valueerror_in_acquire3sz,ShutdownTest.test_with_valueerror_in_acquirecCs| dt¡dSr­r±r[r<r<r=Útest_with_valueerror_in_flush6sz*ShutdownTest.test_with_valueerror_in_flushcCs| dt¡dSr¯r±r[r<r<r=Útest_with_valueerror_in_close9sz*ShutdownTest.test_with_valueerror_in_closecCsdt_| dt¡dS)NFr+©rrJr©Ú IndexErrorr[r<r<r=Ú.test_with_other_error_in_acquire_without_raise<sz;ShutdownTest.test_with_other_error_in_acquire_without_raisecCsdt_| dt¡dS)NFršrµr[r<r<r=Ú,test_with_other_error_in_flush_without_raise@sz9ShutdownTest.test_with_other_error_in_flush_without_raisecCsdt_| dt¡dS)NFr?rµr[r<r<r=Ú,test_with_other_error_in_close_without_raiseDsz9ShutdownTest.test_with_other_error_in_close_without_raisecCsdt_| t|jdt¡dS)NTr+©rrJrÞr¶r©r[r<r<r=Ú+test_with_other_error_in_acquire_with_raiseHs ÿz8ShutdownTest.test_with_other_error_in_acquire_with_raisecCsdt_| t|jdt¡dS)NTršrºr[r<r<r=Ú)test_with_other_error_in_flush_with_raiseMs ÿz6ShutdownTest.test_with_other_error_in_flush_with_raisecCsdt_| t|jdt¡dS)NTr?rºr[r<r<r=Ú)test_with_other_error_in_close_with_raiseRs ÿz6ShutdownTest.test_with_other_error_in_close_with_raise)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¢s   r¢c@sneZdZdd„Zddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)ÚModuleLevelMiscTestcCsštjjj}| |d¡| tj|¡t d¡| tjjjd¡| ttjd¡Gdd„dƒ}| ttj|ƒ¡t d¡t ¡| tjjjtj ¡dS)NréSZ doesnotexistsc@s eZdZdS)z;ModuleLevelMiscTest.test_disable.._NotAnIntOrStringNrr<r<r<r=Ú_NotAnIntOrStringgsrÀÚWARN) rrürrCrKrrÞrýr rd)r:Ú old_disablerÀr<r<r=Ú test_disable\s    z ModuleLevelMiscTest.test_disableNcsÀg‰t |td‡fdd„¡tƒ}tj |¡tt|ƒ}|durN||d|ƒn |d|ƒ| t|j ƒd¡|j d}| |  ¡d|¡|dur”|n tt|  ¡ƒ}| |j |¡| ˆg¡dS)NÚ basicConfigcsˆ ||f¡SrÀr)rÚkw©ržr<r=Úvr°z/ModuleLevelMiscTest._test_log..z test me: %rrYr) rr7rr“rür8r#rKrLrˆÚ getMessageÚupperrÁ)r:rrHÚ recordingÚ log_methodr¢Zexpected_levelr<rÆr=Ú _test_logss   ÿ    zModuleLevelMiscTest._test_logcCs| dtj¡dS©Nrt)rÌrrfr[r<r<r=Útest_log‹szModuleLevelMiscTest.test_logcCs| d¡dS©Nrx©rÌr[r<r<r=Ú test_debugŽszModuleLevelMiscTest.test_debugcCs| d¡dS©NrwrÐr[r<r<r=Ú test_info‘szModuleLevelMiscTest.test_infocCs| d¡dS©NrvrÐr[r<r<r=Ú test_warning”sz ModuleLevelMiscTest.test_warningcCs| d¡dS©NrurÐr[r<r<r=Ú test_error—szModuleLevelMiscTest.test_errorcCs| d¡dS©NrîrÐr[r<r<r=Ú test_criticalšsz!ModuleLevelMiscTest.test_criticalcCs^| ttjt¡Gdd„dtjƒ}t |¡| t ¡|¡t tj¡| t ¡tj¡dS)Nc@s eZdZdS)z;ModuleLevelMiscTest.test_set_logger_class..MyLoggerNrr<r<r<r=r sr)rÞr rr r rrKÚgetLoggerClass)r:rr<r<r=Útest_set_logger_classs   z)ModuleLevelMiscTest.test_set_logger_classc sg‰G‡fdd„dt ¡ƒ}t |¡t d¡}| ˆdg¡t ¡}t |¡}| |¡z†|  tj ¡|  d¡| |  ¡  ¡d¡| d¡| d¡|  tj¡|  d¡| |  ¡d¡W| |¡| ¡t tj¡n | |¡| ¡t tj¡0dS)Ncs&eZdZdejf‡‡fdd„ Z‡ZS)z@ModuleLevelMiscTest.test_subclass_logger_cache..MyLoggerrcstƒ ||¡ˆ d¡dS)NÚ initialized)r%r&r¡)r:r;rH)r*rrr<r=r&®szIModuleLevelMiscTest.test_subclass_logger_cache..MyLogger.__init__)r]r^r_rr‹r&r.r<©rrr)r=r­srZjust_some_loggerrÜZhellorr)rrÚr rrKr*r+r/r8r-r.rxrIr Útruncaterãrlr@r?r)r:rrÏr,rDr<rÝr=Útest_subclass_logger_cache©s.           þ z.ModuleLevelMiscTest.test_subclass_logger_cachecCs8d}td|ƒ\}}}| ¡}| d|¡| d|¡dS)Na&if 1: import logging class A: def __del__(self): try: raise ValueError("some error") except Exception: logging.exception("exception in __del__") a = A()ú-czexception in __del__zValueError: some error)rrWrM©r:ÚcodeÚrcÚoutÚerrr<r<r=Útest_logging_at_shutdownÈs   z,ModuleLevelMiscTest.test_logging_at_shutdowncCs8d}td|ƒ\}}}| ¡}| d|¡| |d¡dS)Nz†if 1: import logging def rec(): logging.error("foo") rec() rec()ràz#Cannot recover from stack overflow.rY)rrWZ assertNotInrKrár<r<r=Útest_recursion_errorÚs  z(ModuleLevelMiscTest.test_recursion_error)N)r]r^r_rÃrÌrÎrÑrÓrÕr×rÙrÛrßrærçr<r<r<r=r¾Xs  r¾c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú LogRecordTestcCs6t i¡}t|ƒ}| | d¡¡| | d¡¡dS)Nz )rr§r¬r9rxrŸ)r:rªrWr<r<r=Ú test_str_repës zLogRecordTest.test_str_repcCsjtƒ}t ¡}| |¡ddi}t d|¡| |jdj|¡| |jdj d¡|  |¡|  ¡dS)NZlessZmorezless is %(less)srz less is more) r“rrr8rvrKrˆr rKrrr@r?)r:rDrªrZr<r<r=Ú test_dict_argñs   zLogRecordTest.test_dict_argcCsZt i¡}| |jd¡z*ddl}t i¡}| |j| ¡j¡WntyTYn0dS)NÚ MainProcessr)rr§rKÚ processNamerEÚcurrent_processr;rS)r:rªÚmpr<r<r=Útest_multiprocessingüs   z"LogRecordTest.test_multiprocessingcCsÄt i¡}|j}||jƒ||jƒ||jƒ||jƒtj}tj}tj }z`dt_dt_dt_ t i¡}|j }||jƒ||jƒ||jƒ||jƒW|t_|t_|t_ n|t_|t_|t_ 0dS)NF) rr§ÚassertIsNotNoner¸Ú threadNameÚprocessríÚ logThreadsÚ logProcessesÚlogMultiprocessingrQ)r:rªZNOT_NONEZ log_threadsZ log_processesZlog_multiprocessingÚNONEr<r<r=Ú test_optionals2          þzLogRecordTest.test_optionalN)r]r^r_rêrërðrør<r<r<r=rèês  rècsòeZdZ‡fdd„Z‡fdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd8d*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Z‡ZS)9ÚBasicConfigTestcsVtt|ƒ ¡tjj|_tj ¡|_tj dd…|_ tjj |_ |  |j¡gtj_dSrÀ)r%rùr>rrür6rrrrrrHr)rrör[r)r<r=r>#s    zBasicConfigTest.setUpcs<tjjdd…D]}tj |¡| ¡qtt|ƒ ¡dSrÀ)rrür6r@r?r%rùrErár)r<r=rE,s  zBasicConfigTest.tearDowncCsJttjd|jƒtj ¡tj |j¡|jtj dd…<tj  |j ¡dS)Nr6) r›rrür6rrArBrrrr-r)r[r<r<r=rö2s  zBasicConfigTest.cleanupcCst ¡| ttjjƒd¡tjjd}| |tj¡| |jt j ¡|j }| |j j tj¡| |j¡| |j tj¡| tjj|j¡dS)NrYr)rrÄrKrLrür6r…r/r,rîrNrrÚrkÚ BASIC_FORMATrQrÚ PercentStylerHr))r:r™rr<r<r=Útest_no_kwargs9s  zBasicConfigTest.test_no_kwargscCsft ¡J}tjtjddt d¡tj d¡| |  ¡  ¡d¡Wdƒn1sX0YdS)Nrd©r,rœú Log an errorrúERROR:root:Log an error© rrËrrÄrîrârurãrKrIr r¨r<r<r=Útest_strformatstyleMs   ÿz#BasicConfigTest.test_strformatstylecCsft ¡J}tjtjddt d¡tj d¡| |  ¡  ¡d¡Wdƒn1sX0YdS)Nr›rýrþrrÿrr¨r<r<r=Útest_stringtemplatestyleUs   ÿz(BasicConfigTest.test_stringtemplatestylecCsŠdd„}tjdd| ttjjƒd¡tjjd}| |tj¡t dd¡}| |jj |jj ¡| |jj |jj ¡|  |||d¡dS)NcSs| ¡| ¡t |¡dSrÀrò©rõZh2rr<r<r=rö_sz.BasicConfigTest.test_filename..cleanupútest.log)rÂrYrr) rrÄrKrLrür6r…rr,Úmoder;r©r:rör™rUr<r<r=Ú test_filename]s   zBasicConfigTest.test_filenamecCsVdd„}tjdddtjjd}t dd¡}| |jj|jj¡| |||d¡dS)NcSs| ¡| ¡t |¡dSrÀròrr<r<r=röqsz.BasicConfigTest.test_filemode..cleanuprÚwb©rÂÚfilemoder) rrÄrür6rrKr,rrrr<r<r=Ú test_filemodeos   zBasicConfigTest.test_filemodecCs`t ¡}| |j¡tj|d| ttjj ƒd¡tjj d}|  |tj ¡| |j |¡dS)Nr$rYr) r*r+rr?rrÄrKrLrür6r…r/r,)r:r,r™r<r<r=Ú test_stream}s   zBasicConfigTest.test_streamcCs.tjddtjjdj}| |jjd¡dS)Nz%(asctime)s - %(message)s)r€r)rrÄrür6rrKrÚrk©r:rr<r<r=Ú test_format‡s zBasicConfigTest.test_formatcCs,tjddtjjdj}| |jd¡dS)NrM)rr)rrÄrür6rrKrr r<r<r=Ú test_datefmts zBasicConfigTest.test_datefmtcCs.tjddtjjdj}| |jtj¡dS)Nr›rer)rrÄrür6rr…rÚrÛr r<r<r=Ú test_style“s zBasicConfigTest.test_stylecCsTtjj}| tjj|¡tjdd| tjjd¡tjdd| tjjd¡dS)Né9)rHé:)rrürHrr-rÄrK)r:Ú old_levelr<r<r=Ú test_level™s   zBasicConfigTest.test_levelcCsp|j}t ¡g}tj}|ttjd|d|ttjd|d|ttj||d|ttjtjdtjddddS)Nr)rÂr,)rÂr6)r,r6)Zloglevelrr )rÞrr/rîrNrýrÄrl)r:rÞr6r,r<r<r=Útest_incompatible£s  ÿ ÿ ÿz!BasicConfigTest.test_incompatiblecCsÒt ¡t tj¡t ¡g}t ¡}|d |¡tj|d| |dtjj d¡| |dtjj d¡| |dtjj d¡|  |dj ¡|  |dj ¡| |dj |¡| |dj |dj ¡dS)NrŸ)r6rrY) rr/rîrâr1r4rÄrKrür6rñr)r:r6r©r<r<r=Ú test_handlers²s ý zBasicConfigTest.test_handlerscCsÚt ¡}t ¡}t |¡g}t |¡g}tjtj|dt d¡t d¡t d¡|  t tj j ƒd¡tjtj |ddt d¡t d¡t d¡|  t tj j ƒd¡|  | ¡ ¡d¡|  | ¡ ¡d ¡dS) Nr‘rrwrxrYT)rHr6ÚforcezWARNING:root:warnz WARNING:root:warn INFO:root:info)r*r+rr/rÄrjrvrwrxrKrLrür6rlrIr )r:Z old_string_ioZ new_string_ioZ old_handlersZ new_handlersr<r<r=Ú test_forceÃs,      ÿ   ÿÿzBasicConfigTest.test_forcecCszºd}tjd|ddtjd| ttjjƒd¡tjjd}| |tj¡| |j |¡t  d¡W|  ¡t ddd }|  ¡ ¡}Wdƒn1sš0Yt d¡| |d¡nX|  ¡t ddd }|  ¡ ¡}Wdƒn1sò0Yt d¡| |d¡0dS) NrPrrnú %(message)s©rÂriÚerrorsr€rHrYrõ.The Øresund Bridge joins Copenhagen to Malmörh©rrÄr.rKrLrür6r…rrirxr?r'rRr ròró©r:rir™r©rBr<r<r=Ú test_encodingØs2þ  * ÿü* ÿzBasicConfigTest.test_encodingcCszºd}tjd|ddtjd| ttjjƒd¡tjjd}| |tj¡| |j |¡t  d¡W|  ¡t dd d }|  ¡ ¡}Wdƒn1sš0Yt d¡| |d ¡nX|  ¡t dd d }|  ¡ ¡}Wdƒn1sò0Yt d¡| |d ¡0dS) NrrÚignorerrrYrrrPrhz*The resund Bridge joins Copenhagen to Malmrrr<r<r=Útest_encoding_errorsìs*þ  * ü* z$BasicConfigTest.test_encoding_errorscCs$zÆd}tjd|dtjd| ttjjƒd¡tjjd}| |tj¡| |j |¡| |j d¡t  d¡W|  ¡t dd d }| ¡ ¡}Wdƒn1s¦0Yt d¡| |d ¡nX|  ¡t dd d }| ¡ ¡}Wdƒn1sþ0Yt d¡| |d ¡0dS) Nrrr)rÂrir€rHrYrÚbackslashreplaceu<😂: ☃ï¸: The Øresund Bridge joins Copenhagen to MalmörPrhzL\U0001f602: \u2603\ufe0f: The \xd8resund Bridge joins Copenhagen to Malm\xf6)rrÄr.rKrLrür6r…rrirrxr?r'rRr ròrórr<r<r=Útest_encoding_errors_defaultÿs*ÿ  * ü* z,BasicConfigTest.test_encoding_errors_defaultcsVzöd}tjd|ddtjd| ttjjƒd¡tjjd}| |tj¡| |j |¡|  |j ¡g‰‡fdd„}||_ t  d ¡| ˆ¡| d ˆd¡W| ¡tdd d }| ¡ ¡}Wdƒn1sÖ0Yt d¡| |d ¡nZ| ¡tdd d }| ¡ ¡}Wdƒn1s00Yt d¡| |d ¡0dS)NrrrrrYrcs t ¡\}}}ˆ t|ƒ¡dSrÀ)rîrr¡r¬)r¢rrÍrÝr<r=Údummy_handle_error#szEBasicConfigTest.test_encoding_errors_none..dummy_handle_errorrz:'ascii' codec can't encode character '\xd8' in position 4:rPrhr)rrÄr.rKrLrür6r…rrirQrrFrxr9rMr?r'rRr ròró)r:rir™r$r©rBr<rÝr=Útest_encoding_errors_nones:þ     ÿ* û, z)BasicConfigTest.test_encoding_errors_noneNcsfg‰tj‰‡‡‡fdd„}t ˆtd|¡tt|ƒ}|durH||dƒn|dƒˆ ˆdifg¡dS)Ncs<ˆƒtjj}tj d¡ˆ tjj|¡ˆ ||f¡dS)Néd)rrürHr-rr¡)rrÅr©ržZold_basic_configr:r<r=Úmy_basic_config:s  z2BasicConfigTest._test_log..my_basic_configrÄztest mer<)rrÄrr7r#rK)r:rrHr(rËr<r'r=rÌ5s  zBasicConfigTest._test_logcCs| dtj¡dSrÍ)rÌrrjr[r<r<r=rÎLszBasicConfigTest.test_logcCs| d¡dSrÏrÐr[r<r<r=rÑOszBasicConfigTest.test_debugcCs| d¡dSrÒrÐr[r<r<r=rÓRszBasicConfigTest.test_infocCs| d¡dSrÔrÐr[r<r<r=rÕUszBasicConfigTest.test_warningcCs| d¡dSrÖrÐr[r<r<r=r×XszBasicConfigTest.test_errorcCs| d¡dSrØrÐr[r<r<r=rÙ[szBasicConfigTest.test_critical)N)r]r^r_r>rErörürrrr r rrrrrrrrr!r#r%rÌrÎrÑrÓrÕr×rÙr.r<r<r)r=rùs6   " rùcsLeZdZ‡fdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z ‡Z S)ÚLoggerAdapterTestcs’tt|ƒ ¡tjdd…‰tƒ|_tj|_|j  |j¡|  |jj |j¡|  |jj ¡‡fdd„}|  |¡|  tj ¡tj|jdd|_dS)Ncsˆtjdd…<dSrÀ)rrr<©Zold_handler_listr<r=röjsz(LoggerAdapterTest.setUp..cleanup©rÏr)r%r)r>rrr“rÊrürÏr8rr@r?rursÚadapter)r:rör)r*r=r>`s   zLoggerAdapterTest.setUpc Csºd}d}z ddWn8tyL}z |}|j ||j¡WYd}~n d}~00| t|jjƒd¡|jjd}| |jtj ¡| |j |¡| |j |jf¡| |j |j ||jf¡dS©Nztesting exception: %rrYr)r2r,rárÊrKrLrˆrÁrrfrér rr*Ú __traceback__©r:rér3r†r¢r<r<r=Útest_exceptionqs &  ÿz LoggerAdapterTest.test_exceptionc Cs‚z ddWn(ty4}z|}WYd}~n d}~00|jjd|d| t|jjƒd¡|jjd}| |j|j||j f¡dS)NrYrz exc_info testr1) r2r,rárKrLrÊrˆrr*r.)r:r†r3r¢r<r<r=Útest_exception_excinfo‚s   ÿz(LoggerAdapterTest.test_exception_excinfocCshd}|j ||j¡| t|jjƒd¡|jjd}| |jtj¡| |j |¡| |j |jf¡dS)Nzcritical test! %rrYr) r,rîrÊrKrLrˆrÁrrdrér )r:rér¢r<r<r=rÙs zLoggerAdapterTest.test_criticalcCsD|jjjj}d|jjj_| t|jjjd|¡| |j d¡¡dS)Né!rCé )r,rÏrrCrr›røÚ isEnabledFor©r:rÂr<r<r=Útest_is_enabled_for™s   ÿz%LoggerAdapterTest.test_is_enabled_forcCsN| |j ¡¡|jjD]}|j |¡q| |j ¡¡| |j ¡¡dSrÀ)r9r,r5rÏr6r@røràr<r<r=Útest_has_handlers s  z#LoggerAdapterTest.test_has_handlerscCsRGdd„dtjƒ}d}||jdd}||dd}d|_| t|ƒt|ƒ¡| tj||j¡| t |jj ƒd¡|jj d}| |j tj¡| |j d|›¡| |j |jf¡|j}| |j|¡| |jj|¡tƒ}z<||_| |j|¡| |j|¡| |jj|¡W||_n||_0| |j|¡| |j|¡| |jj|¡dS) Nc@seZdZdZdd„ZdS)z.LoggerAdapterTest.test_nested..AdapterÚAdaptercSs|j›d|›|fSrø)r¤)r:rérÅr<r<r=ró­sz6LoggerAdapterTest.test_nested..Adapter.processN)r]r^r_r¤rór<r<r<r=r8ªsr8zAdapters can be nested, yo.r+ZAdapterAdapterrYrzAdapter AdapterAdapter )rrsrÏr¤rKrTrtrdrÊrLrˆrÁrér rrKr )r:r8rér,Zadapter_adapterr¢Z orig_managerZ temp_managerr<r<r=Ú test_nested©s2  zLoggerAdapterTest.test_nested) r]r^r_r>r0r1rÙr6r7r9r.r<r<r)r=r)_s    r)csœeZdZ‡fdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Z‡ZS)#Ú LoggerTestcsbtt|ƒ ¡tƒ|_tjdd|_|j |j¡|  |jj |j¡|  |jj ¡|  tj ¡dS)NZblah©r;) r%r:r>r“rÊrrrÏr8rr@r?rur[r)r<r=r>ÍszLoggerTest.setUpcCs| t|jjtƒ¡dSrÀ)rÞr rÏr-r r[r<r<r=Útest_set_invalid_levelÖsz!LoggerTest.test_set_invalid_levelc Csºd}d}z ddWn8tyL}z |}|j ||j¡WYd}~n d}~00| t|jjƒd¡|jjd}| |jtj ¡| |j |¡| |j |jf¡| |j |j ||jf¡dSr-)r2rÏrárÊrKrLrˆrÁrrfrér rr*r.r/r<r<r=r0Ùs &  ÿzLoggerTest.test_exceptioncCsFt tdd¡$| t|jjdd¡Wdƒn1s80YdS)NrJTrqú test message)rÚ swap_attrrrÞr rÏrtr[r<r<r=Ú!test_log_invalid_level_with_raiseêsz,LoggerTest.test_log_invalid_level_with_raisecCs@t tdd¡|j dd¡Wdƒn1s20YdS)NrJFrqr=)rr>rrÏrtr[r<r<r=Útest_log_invalid_level_no_raiseîsz*LoggerTest.test_log_invalid_level_no_raisecsPg‰t |tjd‡fdd„¡|jjdd| tˆƒd¡| dˆd¡dS) NÚ print_stackcsˆ | ¡¡SrÀ)r¡rI)r©rÆrÆr<r=rÇõr°z=LoggerTest.test_find_caller_with_stack_info..TrrYr’r)rr7rÚ tracebackrÏÚ findCallerrKrLr[r<rÆr=Ú test_find_caller_with_stack_infoòs  ÿz+LoggerTest.test_find_caller_with_stack_infocsd‰‡‡fdd„‰‡fdd„‰‡fdd„}ˆjj}|ƒˆ |djd ¡|dj}ˆd7‰|ƒˆ |djd ¡ˆ |dj|¡|dj}ˆd7‰|ƒˆ |djd ¡ˆ |dj|¡|dj}ˆd7‰|ƒˆ |djd ¡ˆ |dj|¡dS) NrYcsˆjjdˆddS)Nrg)Ú stacklevel)rÏrvr<)r:Ú the_levelr<r=Ú innermostÿsz>LoggerTest.test_find_caller_with_stacklevel..innermostcs ˆƒdSrÀr<r<)rGr<r=r¡sz:LoggerTest.test_find_caller_with_stacklevel..innercs ˆƒdSrÀr<r<)r¡r<r=Úoutersz:LoggerTest.test_find_caller_with_stacklevel..outerrèrGr¡rHÚ test_find_caller_with_stacklevel)rÊrˆrKrQrXr7)r:rHrˆrXr<)r¡rGr:rFr=rIüs,     z+LoggerTest.test_find_caller_with_stacklevelc Cs†d}d}d}}}}}}} t ||||||||| ¡ } dt| j ¡ƒD]0} | di} |jt|jj|||||||| | d qPdS)Nú my recordé )rrrú some value©rÚsinfo) rÚ_logRecordFactoryrPÚ__dict__ÚkeysrÞrórÏÚ makeRecord) r:r;rHrÚlnorér rrYrNÚrvr`rr<r<r=Ú%test_make_record_with_extra_overwritesÿ þz0LoggerTest.test_make_record_with_extra_overwritec Cs\d}d}d}}}}}}} ddi} |jj|||||||| | d } | d| j¡dS)NrJrKZ valid_keyrLrM)rÏrRrMrP) r:r;rHrrSrér rrYrNrr\r<r<r=Ú(test_make_record_with_extra_no_overwrite(sÿz3LoggerTest.test_make_record_with_extra_no_overwritecCs>| |j ¡¡|jjD]}|j |¡q| |j ¡¡dSrÀ)r9rÏr5r6r@røràr<r<r=r71s zLoggerTest.test_has_handlerscCs"t d¡}d|_| | ¡¡dS)Nz blah.childF)rrr§rør5)r:Z child_loggerr<r<r=Útest_has_handlers_no_propagate8s z)LoggerTest.test_has_handlers_no_propagatecCs>|jjj}d|jj_| t|jjd|¡| |j d¡¡dS)NérCé)rÏrrCrr›rør4r5r<r<r=r6=s  zLoggerTest.test_is_enabled_forcCs`|jj}|jjj}d|j_d|jj_| t|jd|¡| t|jjd|¡| |j d¡¡dS)NTrqrrCrY)rÏrrrCrr›rør4)r:Z old_disabledrÂr<r<r=Ú#test_is_enabled_for_disabled_loggerCs  z.LoggerTest.test_is_enabled_for_disabled_loggercCs²t ¡}| |tj¡| |t d¡¡| |t d¡¡| |t d¡¡| |t d¡j¡| |t d¡j¡| |t d¡j¡| |t d¡¡| |t d¡j¡dS)NrrürLúfoo.barú)rrrKrüÚparentZ assertIsNot)r:rür<r<r=Útest_root_logger_aliasesOsz#LoggerTest.test_root_logger_aliasescCs$| ttjt¡| ttjd¡dS)Nsfoo)rÞr rrÚanyr[r<r<r=Útest_invalid_names\szLoggerTest.test_invalid_namescCsNttjdƒD]:}dD]0}t |¡}t ||¡}t |¡}| ||¡qqdS)NrY)rrürLr[zbaz.bar)rr&ÚHIGHEST_PROTOCOLrrrÏr'rK)r:Úprotor;rÏrWZ unpickledr<r<r=Ú test_pickling`s    zLoggerTest.test_picklingcCs6|j}t d¡}t d¡}| tj¡| | ¡tj¡| |ji¡| |  tj¡¡|  |  tj ¡¡| |jtjdtj di¡| |ji¡| |  tj¡¡| |ji¡| |  tj¡¡| |jtjdi¡| tj ¡| | ¡tj ¡| |ji¡|  |  tj¡¡| tj ¡| | ¡tj ¡| |ji¡| |ji¡| |ji¡|  |  tj¡¡| |  tj ¡¡|  |  tj¡¡| |  tj ¡¡| |  tj¡¡t ¡| | ¡tj ¡| |ji¡| |ji¡| |ji¡|  |  tj ¡¡|  |  tj ¡¡|  |  tj ¡¡dS)NrrTF)r'rrr-rfrKr(Ú_cacher9r4rør.rdr‹rC)r:rür%r&r<r<r=Ú test_cachinghsH     zLoggerTest.test_caching)r]r^r_r>r<r0r?r@rDrIrUrVr7rWr6rZr^r`rcrer.r<r<r)r=r:Ës"      r:c@s$eZdZdd„Zdd„Zdd„ZdS)Ú BaseFileTestcCs0t |¡t dd¡\}|_t |¡g|_dS)Nrztest_logging-2-)rr>rðrñrròr?Úrmfiles)r:rÿr<r<r=r>¤s  zBaseFileTest.setUpcCs>|jD]}t |¡qtj |j¡r0t |j¡t |¡dSrÀ)rgròrórùrúrrrE)r:rr<r<r=rEªs    zBaseFileTest.tearDowncCs*|jtj |¡d|d|j |¡dS)NzLog file %r does not exist©ré)r9ròrùrúrgr¡)r:rÂr<r<r=Ú assertLogFile±sÿzBaseFileTest.assertLogFileN)r]r^r_r>rErir<r<r<r=rf¡srfc@seZdZdd„ZdS)ÚFileHandlerTestcCsxt |j¡tj|jdd}| |j¡| tj  |j¡¡|  t  i¡¡|  |j¡|  tj  |j¡¡| ¡dS)NTræ)ròrórrrrQr,rørùrúr÷r§rñr9r?)r:Úfhr<r<r=Ú test_delay¹s   zFileHandlerTest.test_delayN)r]r^r_rlr<r<r<r=rj¸srjc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Ze   ¡d d„ƒZ dS)ÚRotatingFileHandlerTestc Cst dtjdd| ¡ddd¡S)Nr²rðrY)rr)r.r\r[r<r<r=Únext_recÄs ÿz RotatingFileHandlerTest.next_reccCs.tjj|jdd}| | d¡¡| ¡dS)Nr©ÚmaxBytes)rr6rrrøÚshouldRolloverr?©r:Úrhr<r<r=Útest_should_not_rolloverÈsz0RotatingFileHandlerTest.test_should_not_rollovercCs2tjj|jdd}| | | ¡¡¡| ¡dS)NrYro)rr6rrr9rqrnr?rrr<r<r=Útest_should_rolloverÎsz,RotatingFileHandlerTest.test_should_rollovercCs4tj |j¡}| | ¡¡| |j¡| ¡dSrÀ)rr6rrràrnrir?rrr<r<r=Útest_file_createdÓs z)RotatingFileHandlerTest.test_file_createdcCs¨dd„}tjj|jddd}||_| | ¡¡| |j¡| | ¡¡| ||jdƒ¡| | ¡¡| ||jdƒ¡| t j   ||jdƒ¡¡|  ¡dS) NcSs|dS©Nú.testr<r;r<r<r=ÚnamerÜsz>RotatingFileHandlerTest.test_rollover_filenames..namerrŸrY©Ú backupCountrpú.1ú.2ú.3) rr6rrryràrnrirøròrùrúr?)r:ryrsr<r<r=Útest_rollover_filenamesÛsÿ z/RotatingFileHandlerTest.test_rollover_filenamescCsªGdd„dtjjƒ}||jddd}| | |j¡|jd¡| | ¡¡| |j¡| | ¡¡| | |jd¡d¡|  t j   | |jd¡¡¡|  ¡dS) Nc@seZdZdd„Zdd„ZdS)zZRotatingFileHandlerTest.test_namer_rotator_inheritance..HandlerWithNamerAndRotatorcSs|dSrwr<)r:r;r<r<r=ryìsz`RotatingFileHandlerTest.test_namer_rotator_inheritance..HandlerWithNamerAndRotator.namercSs tj |¡rt ||d¡dS)Nú.rotated)ròrùrúrú)r:ÚsourceÚdestr<r<r=Úrotatorïs zbRotatingFileHandlerTest.test_namer_rotator_inheritance..HandlerWithNamerAndRotator.rotatorN)r]r^r_ryrƒr<r<r<r=ÚHandlerWithNamerAndRotatorësr„rŸrYrzrxr|r€)rr6rrrKryràrnrirøròrùrúr?)r:r„rsr<r<r=Útest_namer_rotator_inheritanceêsÿ z6RotatingFileHandlerTest.test_namer_rotator_inheritancec Csèdd„}dd„}tjj|jddd}||_||_| ¡}| |¡| |j¡| ¡}| |¡||jdƒ}| |¡t j }t |d ƒ:}|  ¡} t  | ¡} | |  d ¡|j|¡Wdƒn1sÈ0Y| | ¡¡||jd ƒ}| |¡t |d ƒ:}|  ¡} t  | ¡} | |  d ¡|j|¡Wdƒn1sD0Y| | ¡¡||jd ƒ}t |d ƒ:}|  ¡} t  | ¡} | |  d ¡|j|¡Wdƒn1s¶0Y| t j ||jd ƒ¡¡| ¡dS) NcSs|dS)Nz.gzr<r;r<r<r=ryÿsz3RotatingFileHandlerTest.test_rotator..namerc Ss€t|dƒX}| ¡}t |d¡}t|dƒ}| |¡Wdƒn1sJ0YWdƒn1sh0Yt |¡dS)NÚrbr«r)r'rRÚzlibÚcompressrCròró)rr‚ZsfrBÚ compressedÚdfr<r<r=rƒs    Fz5RotatingFileHandlerTest.test_rotator..rotatorrŸrYrzr|r†rr}r~)rr6rrrƒryrnràriròÚlinesepr'rRr‡Ú decompressrKrWrérørùrúr?) r:ryrƒrsZm1Zm2rÚnewliner©r‰rBr<r<r=Ú test_rotatorýsDÿ      6   8  8z$RotatingFileHandlerTest.test_rotatorN) r]r^r_rnrtrurvrr…rZ requires_zlibrŽr<r<r<r=rmÃsrmc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTimedRotatingFileHandlerTestc s¨tjj|jddd}t d¡}| |¡t ddi¡}| |¡| |j¡t   d¡t ddi¡}| |¡|  ¡d }t j   ¡}d }t|ƒD]D}|t j|d } |j|  d ¡‰tj ˆ¡}|r|j ˆ¡qÖqd |} |s–tj |j¡\} ‰‡fdd„t | ¡Dƒ} td| d¡tjdtd| tjd| D]X} td| ƒtj | | ¡}t|dƒ}t| ¡ƒWdƒn1sˆ0Yq<|j|| ddS)NÚSrY)r{rtréztesting - initialgš™™™™™ñ?ztesting - after delayFi,©Zsecondsz.%Y-%m-%d_%H-%M-%Sz,No rotated files found, went back %d secondscsg|]}| ˆ¡r|‘qSr<)rx)r­r©©rr<r=r¯Lr°z>TimedRotatingFileHandlerTest.test_rollover..z Test time: %sz%Y-%m-%d %H-%M-%S©rÆzThe only matching files are: %szContents of %s:rªrh)rr6r rr1r4r§ràrirrr?rur1rÚ timedeltaÚstrftimeròrùrúrgr¡r Úlistdirr!rîrNr¡r'rRr9)r:rkrŠZr1Zr2Úfoundr1ÚGO_BACKÚsecsÚprevréZdnÚfilesr©rùZtfr<r’r=Ú test_rollover,sD ÿ            0z*TimedRotatingFileHandlerTest.test_rollovercCsR|j}|ttjj|jddd|ttjj|jddd|ttjj|jddddS)NÚXTræÚWZW7)rÞrýrr6r r)r:rÞr<r<r=Ú test_invalidVs ÿ ÿ ÿz)TimedRotatingFileHandlerTest.test_invalidcCs€d}t ddd¡}tjj|jdddd|d}zD| |¡}| ||d¡| |d¡}| ||d ¡W| ¡n | ¡0dS) Nré ÚMIDNIGHTrYT©ÚwhenÚintervalr{rvÚatTimeéÀ¨éжi@ú) rurrr6r rÚcomputeRolloverrKr?)r:Ú currentTimer¥rsrTr<r<r=Ú"test_compute_rollover_daily_attime_s þ z?TimedRotatingFileHandlerTest.test_compute_rollover_daily_attimec Cs:tt ¡ƒ}||d}t ddd¡}t |¡j}tdƒD]ú}tjj|j d|ddd|d}zÌ||krtd||}n||}|d9}|d 7}||7}|  |¡}||krÂt d tj ƒt d t ƒƒ| ||¡||krÞ|d 7}|  |d ¡}||krt d tj ƒt d t ƒƒ| ||¡W| ¡q:| ¡0q:dS)Né€Qr rézW%drYTr¢r¦zfailed in timezone: %dzlocal vars: %si€: r§)rHrrur|Útm_wdayrrr6r rr¨r!ÚtimezoneÚlocalsrKr?) r:r©Ztodayr¥ZwdayZdayrsrUrTr<r<r=Ú#test_compute_rollover_weekly_attimeos:    þ   z@TimedRotatingFileHandlerTest.test_compute_rollover_weekly_attimeN)r]r^r_rœrŸrªr°r<r<r<r=r*s* rcKstjfi|¤ŽtjddS)NrYr‘)rur”)rÅr<r<r=r™˜sr™)rrY)ÚMé<)ÚHi)ÚDr«)r¡r«ZW0ré)ZdaysZhoursc CsPtjj|j|dddd}d}| |¡}||kr8|dkr8zÎ|jrNt |¡}n t |¡}|d}|d}|d } tjj |d |d | } || } t d ||jft j d t d |t j d t d|t j d t d| t j d t d| t j d t d| t j d Wn.t y6t dt  ¡dt j d Yn0| ||¡| ¡dS)NrYrT)r£r¤r{rvgr¡rérrr²z t: %s (%s)r“zcurrentHour: %szcurrentMinute: %szcurrentSecond: %szr: %sz result: %sz exception in diagnostic code: %s)rr6r rr¨rvrr|Ú localtimeZ _MIDNIGHTr!rîrNr rrKr?) r:r£Úexprsr©rTrlZ currentHourZ currentMinuteZ currentSecondrªr\r<r<r=Útest_compute_rollover£s@ ÿ      ÿÿþ  r¸ztest_compute_rollover_%sz>win32evtlog/win32evtlogutil/pywintypes required for this test.c@seZdZdd„ZdS)ÚNTEventLogHandlerTestc Cs d}t d|¡}t |¡}ztj d¡}Wn<tjyf}z"|jdkrPt   d¡‚‚WYd}~n d}~00t  ddi¡}|  |¡|  ¡| |t |¡¡tjtjB}d}d} t ||| ¡} | D].}|jdkrÐqÀt ||¡} | d kræqÀd }qðqÀd | } |j|| d dS) NZ ApplicationZ test_loggingrz#Insufficient privileges to run testrézTest Log MessageFr&zTest Log Message Tz3Record not found in event log, went back %d recordsrh)Ú win32evtlogZ OpenEventLogZGetNumberOfEventLogRecordsrr6ZNTEventLogHandlerÚ pywintypesruÚwinerrorr<ZSkipTestr§r÷r?Z assertLessZEVENTLOG_BACKWARDS_READZEVENTLOG_SEQUENTIAL_READZ ReadEventLogZ SourceNameÚwin32evtlogutilZSafeFormatMessager9) r:ZlogtypeZelhZnum_recsrDr†rªÚflagsr—r˜Úeventsrér<r<r=r És:     ÿ  z NTEventLogHandlerTest.test_basicN)r]r^r_r r<r<r<r=r¹Çsr¹c@seZdZdd„ZdS)Ú MiscTestCasecCshd£}tj|t|ddS)N> rûrörüÚFiltererÚ PlaceHolderrõrÚ currentframerôÚ RootLoggerrrÛÚStrFormatStyle)Ú blacklist)rZ check__all__r)r:rÆr<r<r=Ú test__all__ìszMiscTestCase.test__all__N)r]r^r_rÇr<r<r<r=rÀësrÀÚLC_ALLrc'Csvtttttttttt t t t t ttttttttttttttttttt t!t"t#t$t%t&g'}t't(j)dƒrh| *t+¡t,j-|ŽdS)Nr-).r`rrÈrÛr¢r¾rr5r[rfrurŽrrUr‹rIrrr!r¢r¾rùr)r:r—rjrmr•rèrr<rArDr¹rr4r:r@rÀr=rr6r¡r8rZ run_unittest)Ztestsr<r<r=Ú test_mainøs ô  rÉÚ__main__)N)ŸrZlogging.handlersZlogging.configrorÐrrurr&r*rbrÎròr"rrFrZr$rîrðZtest.support.script_helperrrrgrZ test.supportrZtest.support.logging_helperrrÀrrr<r|r^rnZ http.serverrrrXÚ urllib.parser r Ú socketserverr r r rrºr½r»rSr‡ZTestCaserr`rZSILENTrÇZTERSEZEFFUSIVErÆr×Z TALKATIVErÂZ CHATTERBOXZBORINGrrÎrÊr–r¿rÅrÈrÛr r>r/rDrGrIrYrVrsrwrˆrr=r“r–r—r¢r1r»r¾rr3r6r4r5r:r<r@Z IPV6_ENABLEDrArDr[rfrurˆr‰r‹rŒrŽrrr)rrr!r6rEZ unittest.mockr7r8r”rOZtzinforNrvrUrŒr…r‹rr•r™r†r“r¢r¾rèrùr)r:rfrjrmrr™r£r·r¸r›r¹rÀZrun_with_localerÉr]r<r<r<r=Ús`    mFö YT,J2)/  hbY@CÿM41( W#i `  '  W5BlW gnú ! #