Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
a

J‰rgRã@sDdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddl
mZddlmZzddlmZWney¢ddlmZYn0ejdddd	ejd
ddd	gZejZe e¡ejd
ddd	ejdddd	gZe e¡ZejZe ed¡e e¡ZdZGdd„de ƒZ!Gdd„de
j"ƒZ"dS)zzBase classes for our unit tests.

Allows overriding of CONF for use of fakes, and some black magic for
inline callbacks.

éN)Úlog)Ú	timeutils)ÚcfgZsqlite_clean_dbzclean.sqlitezFile name of clean sqlite db)ÚdefaultÚhelpZ
fake_testsTz$should we use everything for testingZoverride_blockZcinderzWby default block disk_type is mapped to cinder It can be override to lvm by this optionZcontego_staging_dirzVby default uses CONF.instances_path It can be override depending on user configurationZbackendsc@seZdZdS)ÚTestingExceptionN)Ú__name__Ú
__module__Ú__qualname__©rrú0/usr/lib/python3.9/site-packages/contego/test.pyrEsrcsHeZdZdZ‡fdd„Z‡fdd„Zdd„Zdd	d
„Zdd
d„Z‡Z	S)ÚTestCasez(Test case base class for all unit tests.cs tt|ƒ ¡tj dd¡}zt|ƒ}Wnty>d}Yn0|dkr\| t	j
|dd¡| t	 ¡¡| t	 ¡¡tj d¡dks˜tj d¡dkr¼| t	 
d¡¡j}| t	 d	|¡¡tj d
¡dksÞtj d
¡dkr| t	 
d¡¡j}| t	 d|¡¡| t	 ¡¡|_tggd
t ¡|_| t	 ¡¡|_t ¡|_t ¡|_| tj¡| |jj¡| |jj¡| |jj¡| |jj ¡g|_!g|_"dS)z;Run before each test method to initialize test environment.ZOS_TEST_TIMEOUTrT)ZgentleZOS_STDOUT_CAPTUREÚTrueÚ1Ústdoutz
sys.stdoutZOS_STDERR_CAPTUREÚstderrz
sys.stderr)Zdefault_config_filesN)#Úsuperr
ÚsetUpÚosÚenvironÚgetÚintÚ
ValueErrorZ
useFixtureÚfixturesZTimeoutZNestedTempfileZTempHomeDirZStringStreamÚstreamZMonkeyPatchZ
FakeLoggerZlog_fixtureÚCONFrZutcnowÚstartÚmoxZMoxÚstuboutZStubOutForTestingZstubsZ
addCleanupÚresetZ
UnsetStubsZUnsetAllZ
SmartUnsetAllZ	VerifyAllÚinjectedÚ	_services)ÚselfZtest_timeoutrr©Ú	__class__rrrLsF
ÿþÿþ


zTestCase.setUpcs¬|jD]$}z| ¡Wqty(Yq0q|jD]@}z| ¡Wq2typ}zt |¡WYd}~q2d}~00q2dd„t|j	 
¡ƒDƒD]}|j	|=qŒtt|ƒ 
¡dS)z:Runs after each test method to tear down test environment.NcSsg|]}|ddkr|‘qS)rÚ_r)Ú.0ÚkrrrÚ
<listcomp>óz%TestCase.tearDown.<locals>.<listcomp>)r ÚstopÚAssertionErrorr!ÚkillÚ	ExceptionÚLOGÚ	exceptionÚlistÚ__dict__Úkeysrr
ÚtearDown)r"ÚxÚexÚkeyr#rrr3{s



zTestCase.tearDowncKs"| ¡D]\}}t ||¡qdS)z#Override CONF variables for a test.N)ÚitemsrZset_override)r"Úkwr'ÚvrrrÚflags”szTestCase.flagsNcKsX|r|pt ¡j}| d|¡| dd|¡tjjfi|¤Ž}| ¡|j 	|¡|S)NÚhostZbinaryz
contego-%s)
ÚuuidZuuid4ÚhexÚ
setdefaultZserviceZServiceZcreaterr!Úappend)r"Únamer;ÚkwargsZsvcrrrÚ
start_service™szTestCase.start_serviceFçü©ñÒMbP?c
s‡‡fdd„}tˆ ¡ƒ}tˆ ¡ƒ}||krP||}||}	|d||	dœƒ|D]ª}
ˆ|
}ˆ|
}z tt|ƒt|ƒƒ}
|
|k}Wnttfy¢d}Yn0t|dƒrÆt|dƒrÆ| ||¡qTd||fvrÖqTqT|râ|râqTqT||krT|d|
||d	œƒqTd
S)aWAssert two dicts are equivalent.

        This is a 'deep' match in the sense that it handles nested
        dictionaries appropriately.

        NOTE:

            If you don't care (or don't know) a given value, you can specify
            the string DONTCARE as the value. This will cause that dict-item
            to be skipped.

        cs,tˆƒ}tˆƒ}d|||dœ}t|ƒ‚dS)Nz>Dictionaries do not match. %(msg)s d1: %(d1str)s d2: %(d2str)s)ÚmsgÚd1strÚd2str)Ústrr+)rDrErFZbase_msg©Úd1Úd2rrÚraise_assertion±s
ÿÿz1TestCase.assertDictMatch.<locals>.raise_assertionzDKeys in d1 and not d2: %(d1only)s. Keys in d2 and not d1: %(d2only)s)Úd1onlyÚd2onlyFr2ZDONTCAREz6d1['%(key)s']=%(d1value)s != d2['%(key)s']=%(d2value)s)r6Úd1valueÚd2valueN)Úsetr2ÚabsÚfloatrÚ	TypeErrorÚhasattrÚassertDictMatch)r"rIrJZapprox_equalZ	tolerancerKZd1keysZd2keysrLrMr6rNrOÚerrorZwithin_tolerancerrHrrU£s>	þÿ

þÿzTestCase.assertDictMatch)N)FrC)
rr	r
Ú__doc__rr3r:rBrUÚ
__classcell__rrr#rr
Is/

r
)#rWÚ
contextlibÚ	functoolsrÚshutilZtempfiler<rrrZ	testtoolsZ
sqlalchemyZsaZoslo_logrZloggingZcontego.tests.commonrZoslo.configrÚImportErrorZoslo_configZStrOptZBoolOptZ	test_optsrZ
register_optsZbackend_optsZ	getLoggerrr.Z	_DB_CACHEr-rr
rrrrÚ<module>sXÿÿü	
ýýù