o ;s*bVF@sdZdZdZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl mZmZd d lmZmZmZmZmZmZmZmZmZd d lmZGd d d ejZejdkreddZ nddZ ddZ!GdddejZ"GdddeZ#GdddejZ$dS)zYaroslav Halchenkoz%Copyright (c) 2013 Yaroslav HalchenkoGPLN)glob)StringIO)LogCaptureTestCaselogSys) formatExceptionInfo mbasename TraceBackFormatterWithTraceBack getLoggergetVerbosityFormat splitwords uni_decode uni_string)MyTimec@s$eZdZddZddZddZdS) HelpersTestcCs8ztdt\}}||d||dYdS)NzVery bad exception ValueErrorrr assertEqualselfnameargsr=/usr/lib/python3/dist-packages/fail2ban/tests/misctestcase.pytestFormatExceptionInfoBasic+s   z(HelpersTest.testFormatExceptionInfoBasiccCs:ztddt\}}||d||dYdS)NzVery badrz('Very bad', None)rrrrrtestFormatExceptionConvertArgs3s    z*HelpersTest.testFormatExceptionConvertArgscCs|tdg|tdg|tdg|tddg|tdddg|tdddg|tdddg|tdgd |tdgd dS) Nz 1z 1 2 2z 1, 2 , z 1 2z 1 2, 3)r r!3)rrrrrrtestsplitwords<szHelpersTest.testsplitwordsN)__name__ __module__ __qualname__rrr$rrrrr)s rrcCs"ddl}|j|dd}t|S)NrT)shell) subprocess check_outputrrstripcmdr+retrrr_sh_callJs r1cCs,ddl}|j|d|jdj}t|S)NrT)r*stdout)r+PopenPIPEr2readrr-r.rrrr1Os cCstdS)Nz?fail2ban-python -c 'import sys; print(tuple(sys.version_info))')r1rrrr_getSysPythonVersionTr6cs,eZdZfddZddZddZZS) SetupTestcstt|tjtjtj t ddd}tj |r!|p"d|_ |j s1t jdkr1tdt}|ttt jkrKtdttt j|fdS)Nz..zsetup.pyr(zLSeems to be running not out of source distribution -- cannot locate setup.pyziSeems to be running with python distribution %s -- install can be tested only with system distribution %s)superr8setUpunittestF2B SkipIfFastospathjoindirname__file__existssetupsys version_infoSkipTestr6strtuple)rrDsysVer __class__rrr:Zs  zSetupTest.setUpc Csr|jsdSt}tjjtjkrdnd}zt dt j |j||f| t | Wt|dSt|w)Nz >/dev/null 2>&1rz2%s %s --dry-run install --disable-2to3 --root=%s%s)rDtempfilemkdtempr;r< log_levelloggingDEBUGr>systemrE executable assertTruelistdirshutilrmtree)rtmp supdbgoutrrrtestSetupInstallDryRunjsz SetupTest.testSetupInstallDryRunc s"|jsdSttjd }tjjt j krdnd}z| t dt j|j|fdfdd}|ttd}gd }t||r~d d }i}t||D]}tj|} tj| rk||| d pld||<qU|j ||d |||fddD]} |jtjtj| d| dqtddd} |t| dk| D]} | tj| tjt jqWtt dt j|j|r|dndf|rtjdrtddSdSdStt dt j|j|r|dndf|rtjdrtdwww)Nbuildz >/dev/nullrz(%s %s install --disable-2to3 --root=%s%srcsfdd|DS)Ncs g|] }|tddqS)rN)len).0xrXrr s zESetupTest.testSetupInstallRoot..strippath..r)lr_rr strippathsz1SetupTest.testSetupInstallRoot..strippathz%s/*)etcusrvarcsFg}t|D]\}}t|||}|fdd|Dq|S)Nc3s|] }tj|VqdSN)r>r?r@)r]fbaserr szISetupTest.testSetupInstallRoot..recursive_glob..)r>walkfnmatchfilterextend)treerootpatternresultsdirsfiles goodfilesrrhrrecursive_globs z6SetupTest.testSetupInstallRoot..recursive_glob*z6Got: %s Needed: %s under %s. Files under new paths: %smsg)zetc/fail2ban/fail2ban.confzetc/fail2ban/jail.confz Can't find %szfind z -name fail2ban-python z%s %s clean --all%sz 2>&1)rDrMrNr>r?rCr;r<rOrPrQrrRrErSsortedrset differencer@rTr1splitr\realpathrVrW) r remove_buildrYrbgotneedrursmissing missing_fullrg installedPathrr_rtestSetupInstallRootzsn        zSetupTest.testSetupInstallRoot)r%r&r'r:rZr __classcell__rrrKrr8Xs r8c@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)TestsUtilsTestcCsT|tdd|tdd|tdd|tdd|tdddS) Nz sample.pysamplez/long/path/sample.pyz/long/path/__init__.pyz path.__init__z/long/path/base.pyz path.basez/long/path/base)rr r#rrr testmbasenames zTestsUtilsTest.testmbasenamecCsl|tttjdkr dnddttjdkrdndtdtdtjdkr2dtjvr4tddSdSdS)N)stesttestzf2b-test::non-existing-encodingstestutestÏPyPy) assertRaises ExceptionrrErFrversionr#rrrtestUniConverterss z TestsUtilsTest.testUniConverterscCs(t}Gddd}|}|tjd||dd||d||dd|dt|d}|tjd |||jd d d d |d|||jdd d d |dGdddtj }|j }z t |j |_ |j |g7_ |tjd|dW||_ n||_ w|ddS)Nc@seZdZdddZddZdS)z,TestsUtilsTest.testSafeLogging..TestrcSs ||_dSrf)err)rrrrr__init__s z5TestsUtilsTest.testSafeLogging..Test.__init__cSs|jrtddS)Nno represenation for test!u.conv-error (òðåòèé), unterminated utf Ï)rrr#rrr__repr__sz5TestsUtilsTest.testSafeLogging..Test.__repr__N)r)r%r&r'rrrrrrTests  rz test 1a: %r Tracebackrz test 1b: %rz.[phase 2] test error conversion by encoding %srztest 2a: %r, %sztest 2azError by logging handlerFallztest 2b: %r, %sztest 2bz*[phase 3] test unexpected error in handlerc@eZdZddZdS)z5TestsUtilsTest.testSafeLogging.._ErrorHandlercSstd)Nzerror in handler test!)r)rrecordrrrhandler7z._ErrorHandler.handleN)r%r&r'rrrrr _ErrorHandlers rztest 3aztest 3bOK) DefLogSyslogrPNOTICE assertLoggedpruneLognoticerEgetdefaultencodingHandlerhandlerslist)rrrrr _org_handlerrrrtestSafeLoggings0      zTestsUtilsTest.testSafeLoggingc sdD]B}t|d}ddfddztdWn ty(|}Ynwd|vr4|d |n d |vr>|d ||d |qdS) N)TF)compresscSstrf)rrrrr func_raisesz0TestsUtilsTest.testTraceBack..func_raisecs|r |ddSdS)Nrr)i deep_functionrrrrs z3TestsUtilsTest.testTraceBack..deep_functionrzfail2ban-testcases>coverage:)r printrassertIn assertNotIn)rrtbsrrr testTraceBacks    zTestsUtilsTest.testTraceBackcOs |jt||g|Ri|dSrf)assertRaisesRegexAssertionError)rregexpfunrkwargsrrr_testAssertionErrorREs z$TestsUtilsTest._testAssertionErrorREcsrdd}tjd|dtjdjddfddtjd td d fd ddS) NcSst|rf)KeyErrorrwrrr_key_errr7z;TestsUtilsTest.testExtendedAssertRaisesRE.._key_err^failed$failed __failed__z$failed.* does not match .*__failed__csdjdS)Nrr)rfailrr#rr'sz;TestsUtilsTest.testExtendedAssertRaisesRE..rrzJ0 AssertionError not raised X.* does not match .*AssertionError not raisedcsdfddS)Nz^0 AssertionError not raised X$csdtdS)Nrr)rintrr#rrr/szMTestsUtilsTest.testExtendedAssertRaisesRE....)rrr#rrr.s )rrrrrr)rrrr#rtestExtendedAssertRaisesREs$   z)TestsUtilsTest.testExtendedAssertRaisesREcs2dgdddddddddDdgdddddddddDd jddd jd td d jddddDdjdddjdtd djddddDt}|ddjddddjddddjddddjdddd|ddjddddjdddddt j j d}t j _ t t j dtt j ddd t j d!d!t j d"d"dt j _ z't j d#dd t j d!d$t j d"d"W|t j _ n|t j _ w t j d|dd%jdd&jddjd'jddddjd(jddddjd)jdddd*d+jd,jddddjd-jdddd*d+jd&jdddddd d.gidd d.gitjdd d.gidd.d gidd/gd/dgjdd/ggd/dggd.d0jdd/ggd/dggdd1tfd2djddd/gidd/dgidd1tfd3djd4d/d5gd6d7gd8gd7d6gd5d/gd9d4gdd1jd4d/d5gd6d7gd8gd7d6gd5d/gd9d4gd:d0tfd;ddd=gggfdgggftd?td@tjd?gd@gtjd?ggd@ggdAjdgd5d/gdBjdd/gd5d/gdS)CNa)rbcdcbacss|] }|dkr|VqdSrNrr]rrrrrj7sz;TestsUtilsTest.testExtendedAssertMethods..)rrrcbdcs |] }|dkr|VqdSrupperrrrrrj;z'a' unexpectedly found in 'cba'z#1 unexpectedly found in \[0, 1, 2\]rrz&'A' unexpectedly found in \['C', 'A'\]AcsrrrrrrrrjBrz'a' was not found in 'xyz'xyzz5 was not found in \[0, 1, 2\]z!'A' was not found in \['C', 'B'\]csr)rNrrrrrrjHrz test "xyz"rTrzyxFtest_zyxz xxxx "xxx"cSdSN2rrrrrrZz:TestsUtilsTest.testExtendedAssertMethods..rg9@cSrrrrrrrr_rg@z.* was found in the logz+All of the .* were found present in the logzwas found in the logzwas not found in the logz&was not found in the log, waited 1e-06gư>)rwaitz"None among .* was found in the logz0None among .* was found in the log, waited 1e-06rB)level nestedOnlycsjddggddggdddSNrrrT)rrassertSortedEqualrr#rrrscs"jdddgidddgidddSrrrr#rrrsZCEFrrrrcs4jdddgddgdgddgddgddgdd S) NrrrrrrrTrrrr#rrrs(rA1A2ABCCBAz\['A'\] != \['C', 'B'\]z\['A', 'B'\] != \['B', 'C'\])rrrrangerrdebugrassertNotLoggedr;r<fast assertFalse isinstance maxWaitTimeboolrassertDictEqualrrrr)rrorgfastrr#rtestExtendedAssertMethods2s                   ,,z(TestsUtilsTest.testExtendedAssertMethodscCs>|tdd|tdddd|tddddddS)NrzA%(asctime)s %(name)-24s[%(process)d]: %(levelname)-7s %(message)sF)paddingz<%(asctime)s %(name)s[%(process)d]: %(levelname)s %(message)s)addtimerz0%(name)s[%(process)d]: %(levelname)s %(message)s)rrr#rrrtestVerbosityFormats z"TestsUtilsTest.testVerbosityFormatcCst}t}d}td}t|}||||||d|}| | d| d}| |dk| |d|||d|dddS) Nz %(tb)s | %(tbc)s : %(message)sfail2ban_testsXXXz: XXX| rr)rr r rP StreamHandler setFormatter addHandlererrorgetvaluerTr-endswithindexr)rstrout FormatterfmtroutrpindexrrrtestFormatterWithTraceBacks    ,z)TestsUtilsTest.testFormatterWithTraceBackcCs2t}|dtjj|dddd|ddS)Nzlazy logging: %rrrrrznot all arguments converted)rrr;r<log_lazyrr)rrrrrtestLazyLoggingszTestsUtilsTest.testLazyLoggingN) r%r&r'rrrrrrrrrrrrrrrs * f rc@r) MyTimeTestcCstj}||dd||dd||dd||dd||dd ||d d ||d d |t|d dddd|t|ddddddS)N1y6mo30w15d12h35m25si]z2yy 3mo 4ww 10dd 5hh 30mm 20ssi$mz>2 years 3 months 4 weeks 10 days 5 hours 30 minutes 20 secondsz!1 year + 1 month - 1 week + 1 dayizI2 * 0.5 yea + 1*1 mon - 3*1/3 wee + 2/2 day - (2*12 hou 3*20 min 80 sec) g@Az(2*.5y+1*1mo-3*1/3w+2/2d-(2*12h3*20m80s) z!1ye -2mo -3we -4da -5ho -6mi -7seiQ pz1 month<gp>@z1 yeargv@)r str2secondsrfloat)rstr2secrrrtestStr2Secondss $zMyTimeTest.testStr2SecondsN)r%r&r'rrrrrrs r)% __author__ __copyright__ __license__rPr>rEr;rMrVrlriorutilsrrrhelpersr r r r r rrrr server.mytimerTestCaserrFr1r6r8rrrrrrs2  ,  d