HEX
Server: LiteSpeed
System: Linux 112.webhostingindonesia.co.id 5.14.0-570.62.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 10:10:59 EST 2025 x86_64
User: iyfwylsv (10313)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //lib/python3.9/site-packages/fail2ban/tests/__pycache__/utils.cpython-39.opt-2.pyc
a

�[N�=y^�@s�dZdZdZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlmZddlmZddlmZmZmZmZdd	lmZmZdd
lmZddlmZddlm Z dd
l!m!Z!ed�Z"dZ#ej$�%dd�Z&e&�sej'�(ej'�)dd���rdZ&ndZ&ej'�(ej'�)e&d��Z*e�+dej'�,ej'�,ej'�,ej'�-e.�����Gdd�dej/�Z0d=dd�Z1dd�Z2Gdd�de0�Z3dd�Z4d d!�Z5d"d#�Z6d$d%�Z7ej$�%d&d�Z8d'd(�Z9d)d*�Z:d>d+d,�Z;ddl<Z<ddl=Z=e>ej?d-��sd?d.d-�Z@e@ej?_@d/d0eAdfd1d2�ZBeBej?_Bd@d3d4�ZCeCej?_CdAd5d6�ZDeDej?_Dej?jEZFd7d8�ZGej?jHZId9d:�ZJeGej?_EeJej?_HGd;d<�d<ej?�ZKejLZLdS)BzYaroslav Halchenkoz%Copyright (c) 2013 Yaroslav HalchenkoZGPL�N)�StringIO��wraps�)�	getLogger�str2LogLevel�getVerbosityFormat�
uni_decode)�IPAddr�DNSUtils)�MyTime)�Utils)�asyncserver)�versionZfail2bani �BZFAIL2BAN_CONFIG_DIRZconfigz
fail2ban.confz
/etc/fail2banZ
PYTHONPATHc@seZdZdd�ZdS)�DefaultTestOptionsc
Csdddddddddd�	|_dS)NTF)	�	log_level�	verbosity�log_lazy�
log_traceback�full_traceback�fast�	memory_db�
no_network�	negate_re)�__dict__��self�r�8/usr/lib/python3.9/site-packages/fail2ban/tests/utils.py�__init__Hs
�zDefaultTestOptions.__init__N)�__name__�
__module__�__qualname__rrrrrrGsr�cCs�tj}tjdtjd|dtd�}|�|dddddd	�|d
dddd
d�|dddtddd�|dddddd�|dddddd�|dddd d!d�|d"d#dd$d%d�|d&d'dd(d)d�|d*d+dd,d-�|d.dd/d-�g
�|S)0Nz%s [OPTIONS] [regexps]
rz%prog )Zusagerz-lz--log-levelrz4Log level for the logger to use during running tests)�dest�default�helpz-v�countrzIncrease verbosity)�actionr$r%r&z--verbosityZstorez'Set numerical level of verbosity (0..4))r(r$�typer%r&z--log-directZstore_falserTz!Prevent lazy logging inside testsz-nz--no-network�
store_truerz)Do not run tests that require the network)r(r$r&z-mz--memory-dbrz/Run database tests using memory instead of filez-fz--fastrzQTry to increase speed of the tests, decreasing of wait intervals, memory databasez-iz--ignorerzAnegate [regexps] filter to ignore tests matched specified regexpsz-tz--log-tracebackz.Enrich log-messages with compressed tracebacks)r(r&z--full-tracebackzBEither to make the tracebacks full, not compressed (as by default))�optparse�OptionZOptionParser�sys�argvrZadd_options�int)�docr,�prrr�getOptParserSs`���
��������� r2cCs0d}|jdur$t|j�}t�|�nt�tj�tj|_|j}|dur�|durRdnJ|tjkr`dn<|tj	krndn.|t
tjtj�kr�dn|t
tj
tj�kr�dnd}||_t�tj�}d}|jr�ddlm}|jr�dp�d	|}ntj}t||�}|�||��t�|�|jdk�r,td
tttj��dd�f�|S)
N���rrz %(message)s)�FormatterWithTraceBackz %(tb)sz %(tbc)sz1Fail2ban %s test suite. Python %s. Please wait...�
r#)rr�logSys�setLevel�loggingZCRITICAL�levelrZ
HEAVYDEBUG�DEBUG�min�INFOZNOTICEZWARNING�ERRORZ
StreamHandlerr-�stdoutr�helpersr6r�	FormatterrZsetFormatterZ
addHandler�printr�str�replace)�optsZllevrr@ZfmtrBrrr�initProcess|s<

�

�rGc@sFeZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	ddd�Z
dS)�F2B�<�cCs"|j|_|jrd|_i|jd<dS)NTZshare_config)rrr)rrFrrrr�szF2B.__init__cCsdS�Nrrrrr�
SkipIfFast�szF2B.SkipIfFastcCsdSrKrrrrr�SkipIfNoNetwork�szF2B.SkipIfNoNetworkcKs�ts�|�d�rt�d��dD]b}|�|�}|dur4qtj�|�ddkrP|d7}tj�tj�t	|d|��st�d	||f��qdS)
z4Helper to check action/filter config is available
		Zstockz/Skip test because of missing stock-config files)r(�filterNr3r#z.confz.dz-Skip test because of missing %s-config for %r)
�STOCK�get�unittest�SkipTest�os�path�splitext�exists�join�
CONFIG_DIR)r�kwargs�t�vrrr�SkipIfCfgMissing�s



zF2B.SkipIfCfgMissingcs�fdd�}|S)z>Helper decorator to check action/filter config is available
		cst����fdd��}|S)Ncs(tjjfi����|g|�Ri|��SrK)rQrHr\�r�argsrY)�decargs�frr�wrapper�sz?F2B.skip_if_cfg_missing.<locals>._deco_wrapper.<locals>.wrapperr�r`ra�r_�r`r�
_deco_wrapper�sz.F2B.skip_if_cfg_missing.<locals>._deco_wrapperr)rr_rerrcr�skip_if_cfg_missing�szF2B.skip_if_cfg_missingTcCs4t|t�r|r|j}|jr0t|t�r0t|�d}|S)N�
)�
isinstance�bool�MAX_WAITTIMErr/�float)rZwtimerrr�maxWaitTime�s
zF2B.maxWaitTimeN)T)r r!r"rjZMID_WAITTIMErrLrMr\rfrlrrrrrH�s
rHcst���fdd��}|S)z�Helper decorator to create a temporary directory

	Directory gets removed after function returns, regardless
	if exception was thrown of not
	c	sBtjdd�}z$�||g|�Ri|��Wt�|�St�|�0dS)Nzf2b-temp)�prefix)�tempfileZmkdtemp�shutilZrmtree)rr^rY�tmprdrrra�s
�zwith_tmpdir.<locals>.wrapperrrbrrdr�with_tmpdir�srqcst���fdd��}|S)z@Helper decorator to execute test in alternate (fixed) test time.cs2t�z�|g|�Ri|��Wt�St�0dSrK)�setUpMyTime�tearDownMyTimer]rdrrra�s�zwith_alt_time.<locals>.wrapperrrbrrdr�
with_alt_time�srtcsB|stt��}t|�t_tjjrDdt_dt_dt_dd�}|tj_	n*dt_dt_dt_t
j��fdd	�}|t
_tjjr�d
d�}|tj_
dtjd
<t
��t�t�tj}dd�|_|jddd�td�D]D}|�d|d�|�d|d�|�d|d�|�d|d�q�|�dd�|�dd�tjj�r>tjj�rRdD]}|�|d��q>|�dd�|�dd �|�d!d �|�d"d#�tj}d$d�|_d%t�fd&t�fd't�fd(t�fd)t�fd*t�fd+ttd,�td-�g�fd.ttd,�td-�g�ffD]}|j|��q�tjj�r>ttd/�td0�g�}t��D]}|�||��q*dS)1Ng{�G�zd?g����Mb@?g-C��6?cSst�d��dS)NzSkip test because of "--fast"�rQrRrrrr�F2B_SkipIfFast
sz!initTests.<locals>.F2B_SkipIfFastg�������?g{�G�zt?cs |dkrtd|���|�dS)Ng�?zT[BAD-CODE] To long sleep interval: %s, try to use conditional Utils.wait_for instead)�
ValueError�r[�Z
_org_sleeprr�
_new_sleepszinitTests.<locals>._new_sleepcSst�d��dS)Nz#Skip test because of "--no-network"rurrrr�F2B_SkipIfNoNetworksz&initTests.<locals>.F2B_SkipIfNoNetworkzCET-01CEST-02,M3.5.0,M10.5.0�TZcSs
t�d�S)Nz.clear CACHE_ipToName is disabled in test suite�r8�warningrrrr�<lambda>+�zinitTests.<locals>.<lambda>i'i,)ZmaxCountZmaxTime�z
192.0.2.%sz
198.51.100.%sz203.0.113.%sz2001:db8::%sz	test-hostz2001:db8::ffffz
test-otherz
87.142.124.10)�	127.0.0.1�::1Z	localhostz192.0.2.888z8.8.4.4z
dns.googlez8.8.8.8z199.9.14.201zb-2017.b.root-servers.orgcSs
t�d�S)Nz.clear CACHE_nameToIp is disabled in test suiter}rrrrrAr�z999.999.999.999z
abcdef.abcdefz
192.168.0.z
failed.dns.chz!doh1.2.3.4.buga.xxxxx.yyy.invalidz1.2.3.4.buga.xxxxx.yyy.invalidzexample.comz&2606:2800:21f:cb07:6820:80da:af6b:8b2cz
93.184.215.14zwww.example.comr�r�)rGrrHrQrr
ZDEFAULT_SLEEP_TIMEZDEFAULT_SLEEP_INTERVALZDEFAULT_SHORT_INTERVALrL�time�sleeprrMrS�environ�tzsetrZsetAlternateNow�TEST_NOWrZCACHE_ipToName�clearZ
setOptions�range�setZCACHE_nameToIpr
ZgetSelfNames)rFrvrzr{�c�iZipsrryr�	initTests�sn








�

r�cCsdSrKrrrrr�
mtimesleepTsr�r|cCst�t�dSrK)rZsetTimer�rrrrrr\srrcCs
dt_dSrK)rZmyTimerrrrrsbsrsc
sRt��ddlm}ddlm}ddlm}ddlm}ddlm}ddlm}ddlm}dd	lm	}	dd
lm
}
ddlm}ddlm}dd
lm
}
ddlm}ddlm}ddlm}ddlm}ddlm}�s�t��}n G���fdd�dtj����}tjj}|�||j��|�||j��|�||j��|�||j��|�||j��|�||
j��|�||j��|�||j��|�||j ��|�||j!��|�||j ��zddl"}|�||j#��Wnt$�y�Yn0|�||j%��|�||j&��|�||j'��|�||j(��|�||j)��|�||j*��|�||j+��|�||j,��|�||
j-��|�||
j.��|�||
j/��|�||
j0��|�||j1��|�||j2��|�||j3��|�||j4��|�||j5��|�||j6��|�||j7��|�||j8��|�||j9��|�||j:��|�||j;��|�||j<��|�||j=��|�||j��|�||	j>��|�||	j?��|�||j@��|�||jA��|�||jB��|�||jC��t�D�}ddlmE}tF�GtFjH�ItFjH�J|jK���D]D}|�Ld��r|�Md��r|�|�Nd|jOtFjH�P|�df���qddlQmR}|g}zddlSmT}|�U|�Wn4t$�y�}ztV�Wd|�WYd}~n
d}~00|D]}|�||�X|����q�z$ddlYmZ}|�||�[|���Wn4t$�y<}ztV�Wd|�WYd}~n
d}~00|�||j\��|S) Nr3)�banmanagertestcase)�clientbeautifiertestcase)�clientreadertestcase)�tickettestcase)�failmanagertestcase)�filtertestcase)�servertestcase)�datedetectortestcase)�actiontestcase)�actionstestcase)�sockettestcase)�misctestcase)�databasetestcase)�observertestcase)�samplestestcase)�fail2banclienttestcase)�fail2banregextestcasecs.eZdZdd��D�Z���fdd�Z�ZS)z&gatherTests.<locals>.FilteredTestSuitecSsg|]}t�|��qSr)�re�compile)�.0�rrrr�
<listcomp>�r�z1gatherTests.<locals>.FilteredTestSuite.<listcomp>cs�g}|D]X}t|tj�r$|�|�qt|�}|jD],}|�|�}�jsL|r2n|s2|�|�qq2q|D]}t	�|��|�qfdSrK)
rhrQ�	TestSuite�addTestrD�_regexps�searchr�append�super)rZsuiteZmatched�test�sr��m)�FilteredTestSuite�	__class__rFrrr��s



z.gatherTests.<locals>.FilteredTestSuite.addTest)r r!r"r�r��
__classcell__r�r�rF�regexps�r�rr�sr�r)�action_dZtest_z.pyz%s.%sr)�
FilterPoll)�FilterPyinotifyz9I: Skipping pyinotify backend testing. Got exception '%s')�
FilterSystemdz7I: Skipping systemd backend testing. Got exception '%s')]r�r#r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rQr�ZdefaultTestLoaderZloadTestsFromTestCaser�ZTransmitterZ	JailTestsZ
RegexTestsZLoggingTestsZServerConfigReaderTestsZCommandActionTestZExecuteActionsZTicketTestsZ
AddFailureZFailmanagerComplex�dnsZStatusExtendedCymruInfo�ImportErrorZBeautifierTestZConfigReaderTestZJailReaderTestZFilterReaderTestZJailsReaderTestZJailsReaderTestCacheZSocketZ
ClientMiscZHelpersTestZ	SetupTestZTestsUtilsTestZ
MyTimeTestZDatabaseTestZObserverTestZBanTimeIncrZ
BanTimeIncrDBZIgnoreIPZBasicFilterZLogFileZLogFileMonitorZLogFileFilterPollZIgnoreIPDNSZGetFailuresZ
DNSUtilsTestsZDNSUtilsNetworkTestsZDateDetectorTestZCustomDateFormatsTestZFilterSamplesRegexZFail2banClientTestZFail2banServerTestZFail2banRegexTestZ
TestLoaderr�rS�listdirrT�abspath�dirname�__file__�
startswith�endswithZloadTestsFromNamer rUZserver.filterpollr�Zserver.filterpyinotifyr�r�r8r~Zget_monitor_failures_testcaseZserver.filtersystemdr�Z%get_monitor_failures_journal_testcaseZTransmitterLogging)r�rFr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�ZtestsZ	loadTestsr�Z
testloaderr�Zfile_r��filtersr��eZFilter_r�rr�r�gatherTestsfs�
��
$�
$r��assertDictEqualc	Cs||�t|t�d�|�t|t�d�||krxd||f}dd�t�t�|���t�|�����}|pl||}|�	|�dS)Nz"First argument is not a dictionaryz#Second argument is not a dictionary�%r != %rr7)
Z
assertTruerh�dictrW�difflib�ndiff�pprint�pformat�
splitlines�fail)rZd1Zd2�msg�standardMsg�diffrrrr�s
�r3Fc
s�dd��|rt�n|f�fdd�	����fdd��z�|||||�Wn�ty�}zlt|t�rj|jdn
t|�d}d	d	�t�t	�
|���t	�
|�����}	|p�||	}|�|�WYd
}~n
d
}~00d
S)z�Compare complex elements (like dict, list or tuple) in sorted order until
	level 0 not reached (initial level = -1 meant all levels),
	or if nestedOnly set to True and some of the objects still contains nested lists or dicts.
	cSs2t|t�r tdd�|��D��Stdd�|D��S)Ncss|]}t|tttf�VqdSrK�rhr��list�tuple�r�r[rrr�	<genexpr>"r�z8assertSortedEqual.<locals>._is_nested.<locals>.<genexpr>css|]}t|tttf�VqdSrKr�r�rrrr�#r�)rhr��any�valuesrxrrr�
_is_nested s
z%assertSortedEqual.<locals>._is_nestedcs4t|tttf�r0tt��fdd�|D���d�S|S)Nc3s|]}�|��VqdSrKrr�)�_nest_sorted�keyrrr�)r�z:assertSortedEqual.<locals>._nest_sorted.<locals>.<genexpr>�r�)rhr�r�r��sorted)r[r�)r�r�rr�'s z'assertSortedEqual.<locals>._nest_sortedcsrt|�t|�kr td||f��|sT|rT�|�sT�|�sT||krDdStd||f��t|t�r�t|t�r�|��D]j\}}||}t|tttf�r�t|tttf�rˆ|||dkr�|dnd||�qp||krptd||f��qpn��||d�}�||d�}t||�D]l\}}t|tttf��rPt|tttf��rP�|||dk�rD|dnd||�n||k�rtd||f���qdS)Nr�rr3r�)�lenrwrhr��itemsr�r��zip)�a�br;�
nestedOnlyr��kZv1Zv2��_assertSortedEqualr�r�rrr�,s( "$$
z-assertSortedEqual.<locals>._assertSortedEqualrz
within:r7N)
r��	Exceptionrhrwr^rDrWr�r�r�r�r�r�)
rr�r�r;r�r�r�r�r�r�rr�r�assertSortedEquals 
�r�cCsh|}d}|dur6t|d�r6t|t�s6t�|�\}}d}||vrd|rJt|�}|pXd||f}|�|�dS)NF�__iter__Tz%r was not found in %r��hasattrrhrD�	itertools�teer�r��rr�r�r�ZbbZwraprrr�assertInRsr�cCsh|}d}|dur6t|d�r6t|t�s6t�|�\}}d}||vrd|rJt|�}|pXd||f}|�|�dS)NFr�Tz%r unexpectedly found in %rr�r�rrr�assertNotIn]sr�cCsLtjjtjkr*tj�d�t�	d|�
��t|�tjjdkrHt
�
�|_dS)Nr7z"========== %s ====================r)rQrHrr:r<r-�stderr�writer8�debug�id�
_org_setUprr��__startTimerrrr�_customSetUpjsr�cCs,tjjdkr(tj�dt��|jf�dS)Nrz
 %.3fs -- )rQrHrr-r�r�r�r�rrrr�_customTearDownusr�csveZdZGdd�dej�Z�fdd�Z�fdd�Zdd�Zd	d
�Z	dd�Z
ddd�Zdd�Ze
ejfdd��Z�ZS)�LogCaptureTestCasec@sDeZdZdZddd�Zddd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)zLogCaptureTestCase._MemHandlerz�Logging handler helper
		
		Affords not to delegate logging to StreamHandler at all,
		format lazily on demand in getvalue.
		Increases performance inside the LogCaptureTestCase tests, because there
		the log level set to DEBUG.
		TcCsHt��|_d|_d|_t�|_d|_t�|_	t
j�|�|rD|j
|_dS)Nr#r)�	threading�Lock�_lock�_val�_dirtyr��_recs�
_nolckCntrr�_strmr:�Handlerr�_handle_lazy�handle)rZlazyrrrr�s
z'LogCaptureTestCase._MemHandler.__init__NcCsZ|rtd|��d|_|j�*d|_t�|_|j�d�Wd�n1sL0YdS)z)Truncate the internal buffer and records.z.invalid size argument: %r, should be None or 0r#rN)r�r�r�r�r�r�r��truncate)r�sizerrrr�sz'LogCaptureTestCase._MemHandler.truncatec
Cs�zH|��d}z|j�|�Wn&tyD|j�|�dd��Yn0Wn4ty|}z|j�d|�WYd}~n
d}~00dS)Nr7zUTF-8rEzError by logging handler: %r)Z
getMessager�r��UnicodeEncodeError�encoder�)r�recordr�r�rrrZ__write�sz&LogCaptureTestCase._MemHandler.__writecCs�|js|jS|j�d�}|jd@r�|sT|jd7_|jdkrD|jSd|_|j��z*|jdM_|j}t�|_W|j��n|j��0|D]}|�|�q�n|r�|jdM_|j��|j	�
�|_|jS)z&Return current buffer as whole string.Frr3�r������)r�r�r��acquirer�r�r��release�_MemHandler__writer��getvalue)rZlckZrecsrrrrr�s,




z'LogCaptureTestCase._MemHandler.getvaluecCsB|�|�|j�|jdO_Wd�n1s40YdS)z-Handle the specified record direct (not lazy)r3N)r
r�r��rrrrrr�s
z%LogCaptureTestCase._MemHandler.handlecCsD|j�*|j�|�|jdO_Wd�n1s60YdS)z*Lazy handle the specified record on demandrN)r�r�r�r�rrrrr�sz+LogCaptureTestCase._MemHandler._handle_lazy)T)N)
r r!r"�__doc__rrr
rrrrrrr�_MemHandlers



"rcsxtj|_tj|_t�tjj	�|_
|j
gt_|jtjkrFtj|j7_|jtjdkrft�
tjd�tt|���dS)Nr3)r8r;�
_old_level�handlers�
_old_handlersr�rrQrHr�_logr:r<r9r��setUprr�rrr�s
zLogCaptureTestCase.setUpcs8|��|j��|jt_t�|j�tt	|��
�dS)zCall after every test case.N)�pruneLogr�closerr8rr9rr�r��tearDownrr�rrr�s

zLogCaptureTestCase.tearDowncOsR|j��}|�dd�s2|D]}||vrdSqdS|D]}||vr6dSq6dSdS)N�allFT)rrrP�rr�rY�logged�s_rrr�
_is_logged�s
zLogCaptureTestCase._is_loggedcs���dd�}|r6tj�|�}t����fdd�|�}n�j�i���}��dd�s�|sˆj��}��	d�|rtd|nd	|f�n@|sˆj��}�D],}||vr���	d
||r�d|nd	|f�q�dS)akAssert that one of the strings was logged

		Preferable to assertTrue(self._is_logged(..)))
		since provides message with the actual log.

		Parameters
		----------
		s : string or list/set/tuple of strings
		  Test should succeed if string (or any of the listed) is present in the log
		all : boolean (default False) if True should fail if any of s not logged
		�waitNcs�j�i���SrK)rr�rYr�rrrrr�z1LogCaptureTestCase.assertLogged.<locals>.<lambda>rFz/None among %r was found in the log%s: ===
%s===z, waited %sr#z(%r was not found in the log%s: ===
%s===)
rPrQrHrlr
�wait_forrrrr�)rr�rYr�resrrrr r�assertLoggeds$
�

�zLogCaptureTestCase.assertLoggedcOsv|j��}t|�dkrN|�dd�sN|D]}||vr&dSq&|�d||f�n$|D]}||vrR|�d||f�qRdS)aAssert that strings were not logged

		Parameters
		----------
		s : string or list/set/tuple of strings
		  Test should succeed if the string (or at least one of the listed) is not
		  present in the log
		all : boolean (default False) if True should fail if any of s logged
		r3rFNz6All of the %r were found present in the log: ===
%s===z"%r was found in the log: ===
%s===)rrr�rPr�rrrr�assertNotLogged!s

z"LogCaptureTestCase.assertNotLoggedNcCs |j�d�|rt�d|�dS)Nrz===== %s =====)rrr8r�)rZlogphaserrrr6szLogCaptureTestCase.pruneLogcCs
|j��SrK)rrrrrr�getLog;szLogCaptureTestCase.getLogcCsV|tjkst��tjkrR|d|d�t�|�D]}|�d�}||�q2|d�dS)z@Helper which outputs content of the file at HEAVYDEBUG loglevelsz---- z ----r7z------------------------------N)r8r�ZgetEffectiveLevelr:r<�	fileinput�input�rstrip)�fnr�linerrr�dumpFile>s

zLogCaptureTestCase.dumpFile)N)r r!r"r:rrrrrr#r$rr%�staticmethodr8r�r+r�rrr�rr�}sX	!
r�)r#)NN)N)N)N)M�
__author__Z
__copyright__Z__license__r&r�r:r+rSr�rnror-r�r�rQ�ior�	functoolsrrArrrr	Zserver.ipdnsr
rZ
server.mytimerZserver.utilsr
Zserverrrr8r�r�rPrXrTrVrWrO�putenvr�r�r�ZValuesrr2rGrHrqrtr�r�Zold_TZrrrsr�r�r�r�ZTestCaser��reprr�r�r�rr�r�rZ
_org_tearDownr�r�Z
pid_existsrrrr�<module>s�
�

)51V
'

4




M