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:


ì]¹ã@sÕdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddl
mZddlmZyddlmZWn"ek
râddlmZYnXejdddd	d
ƒejdddd	d
ƒgZejZejeƒejdddd	dƒejdddd	dƒgZejeƒZejZejedƒejeƒ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_dbÚdefaultzclean.sqliteÚhelpzFile name of clean sqlite dbZ
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@seZdZdS)ÚTestingExceptionN)Ú__name__Ú
__module__Ú__qualname__©rrú./usr/lib/python3/dist-packages/contego/test.pyr@srcsgeZdZdZ‡fdd†Z‡fdd†Zdd„Zdd	d
„Zddd
d„Z‡S)ÚTestCasez(Test case base class for all unit tests.c
sHtt|ƒjƒtjjddƒ}yt|ƒ}Wntk
rRd}YnX|dkr{|jt	j
|ddƒƒ|jt	jƒƒ|jt	jƒƒtjjdƒdksÑtjjdƒdkr|jt	j
dƒƒj}|jt	jd	|ƒƒtjjd
ƒdks5tjjd
ƒdkri|jt	j
dƒƒj}|jt	jd|ƒƒ|jt	jƒƒ|_tgd
gƒtjƒ|_|jt	jƒƒ|_tjƒ|_tjƒ|_|jtjƒ|j|jjƒ|j|jjƒ|j|jjƒ|j|jj ƒg|_!g|_"dS)z;Run before each test method to initialize test environment.ZOS_TEST_TIMEOUTrZgentleTZOS_STDOUT_CAPTUREÚTrueÚ1Ústdoutz
sys.stdoutZOS_STDERR_CAPTUREÚstderrz
sys.stderrZdefault_config_filesN)#Úsuperr
ÚsetUpÚosÚenvironÚgetÚintÚ
ValueErrorZ
useFixtureÚfixturesZTimeoutZNestedTempfileZTempHomeDirZStringStreamÚstreamZMonkeyPatchZ
FakeLoggerZlog_fixtureÚCONFrÚutcnowÚstartÚmoxZMoxÚstuboutZStubOutForTestingZstubsZ
addCleanupÚresetZ
UnsetStubsZUnsetAllZ
SmartUnsetAllZ	VerifyAllÚinjectedÚ	_services)ÚselfZtest_timeoutrr)Ú	__class__rrrGs>
	zTestCase.setUpcs¼x4|jD])}y|jƒWq
tk
r2Yq
Xq
Wx4|jD])}y|jƒWqAtk
riYqAXqAWx4dd„t|jjƒƒDƒD]}|j|=q‘Wt	t
|ƒjƒdS)z:Runs after each test method to tear down test environment.cSs&g|]}|ddkr|‘qS)rÚ_r)Ú.0Úkrrrú
<listcomp>†s	z%TestCase.tearDown.<locals>.<listcomp>N)r!ÚstopÚAssertionErrorr"ÚkillÚ	ExceptionÚlistÚ__dict__Úkeysrr
ÚtearDown)r#ÚxÚkey)r$rrr0rs
	
	)zTestCase.tearDowncKs1x*|jƒD]\}}tj||ƒq
WdS)z#Override CONF variables for a test.N)ÚitemsrZset_override)r#Úkwr'ÚvrrrÚflagsŠszTestCase.flagsNcKso|r|ptjƒj}|jd|ƒ|jdd|ƒtjj|}|jƒ|jj	|ƒ|S)NÚhostÚbinaryz
contego-%s)
ÚuuidZuuid4ÚhexÚ
setdefaultÚserviceZServiceÚcreaterr"Úappend)r#Únamer7ÚkwargsZsvcrrrÚ
start_services
zTestCase.start_serviceFgü©ñÒMbP?csp‡‡fdd†}tˆjƒƒ}tˆjƒƒ}||krs||}||}	|dd|d|	iƒxö|D]î}
ˆ|
}ˆ|
}y,tt|ƒt|ƒƒ}
|
|k}Wnttfk
ràd}YnXt|dƒrt|dƒr|j||ƒqzd||fkr*qzqz|r<|r<qzqz||krz|d	d
|
d|d|iƒqzWd
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.

        csDtˆƒ}tˆƒ}dd|d|d|i}t|ƒ‚dS)Nz>Dictionaries do not match. %(msg)s d1: %(d1str)s d2: %(d2str)sÚmsgÚd1strÚd2str)Ústrr*)rBrCrDZbase_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Úd2onlyFr/ZDONTCAREz6d1['%(key)s']=%(d1value)s != d2['%(key)s']=%(d2value)sr2Úd1valueÚd2valueN)Úsetr/ÚabsÚfloatrÚ	TypeErrorÚhasattrÚassertDictMatch)r#rFrGZapprox_equalZ	tolerancerHZd1keysZd2keysrIrJr2rKrLÚerrorZwithin_tolerancer)rFrGrrR™s6





zTestCase.assertDictMatch)	rr	r
Ú__doc__rr0r6rArRrr)r$rr
Ds+
r
)#rTÚ
contextlibÚ	functoolsrÚshutilÚtempfiler9rrrZ	testtoolsZ
sqlalchemyÚsaZoslo_logrÚloggingZcontego.tests.commonrZoslo.configrÚImportErrorZoslo_configZStrOptZBoolOptZ	test_optsrZ
register_optsZbackend_optsÚ	getLoggerrZLOGZ	_DB_CACHEr,rr
rrrrÚ<module>	sL