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    
dmapi / usr / lib / python2.7 / dist-packages / dmapi / tests / functional / test_servers.pyc
Size: Mime:
ó
êßbc@s¥ddlZddlZddlZddlZddlmZddlmZddl	m
Z
ddlZddlm
ZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZ ddl!m"Z"ddl#m$Z$ddl%m&Z&ddl'm(Z(ddl'm)Z)ddl'm*Z*ddl+Zddl'm,Z,ddlm-Z.ddl/m0Z0ddlm1Z1ej2e3ƒZ4dej5fd„ƒYZ6de$j7fd„ƒYZ8de8fd „ƒYZ9d!e9fd"„ƒYZ:d#e8fd$„ƒYZ;d%e8fd&„ƒYZ<d'e$j7e$j=fd(„ƒYZ>d)ej?e$j=fd*„ƒYZ@d+e@fd,„ƒYZAd-e@fd.„ƒYZBd/e@fd0„ƒYZCd1e@fd2„ƒYZDd3e@fd4„ƒYZEd5e@fd6„ƒYZFd7e@fd8„ƒYZGd9e@fd:„ƒYZHd;e8fd<„ƒYZId=eIfd>„ƒYZJd?eIfd@„ƒYZKdS(AiÿÿÿÿN(tlog(tbase64(t	timeutils(tapi(tinstance_actions(tmanager(trpcapi(tcontext(tdb(t	exception(tobjects(tblock_device(tweights(ttest(tfixtures(tclient(tintegrated_helpers(tfakes(tfake_block_device(tfake_network(t
fake_notifier(tpolicy_fixture(tuuidsentinel(tfake(tvolumetAltHostWeighercBseZdZd„ZRS(sSUsed in the alternate host tests to return a pre-determined list of
    hosts.
    cCsCidd6dd6dd6dd6d	d
6d	d6}|j|jd	ƒS(s Return a defined order of hosts.içt	selectionixt	alt_host1i	t	alt_host2išt	alt_host3ithost1thost2(tgetthost(tselft
host_statetweight_propertiesR((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt
_weigh_object.s(t__name__t
__module__t__doc__R%(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR*stServersTestBasecBsneZdZdZdZdZdZdZdZdZ	d„Z
d	„Zd
„Zd„Z
d„Zd
„ZRS(tv2tforceDeletetimageReft	flavorReft
accessIPv4t
accessIPv6treturn_reservation_idt	min_countcCsEi|_tt|ƒjƒtj|ƒ|jdddƒ|_dS(Nt	conductorRs'nova.conductor.manager.ConductorManager(tcomputestsuperR)tsetUpRtset_stub_network_methodst
start_serviceR2(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5?s
	
cCsUxNtddƒD]=}|jj|dƒ}|d|kr@PntjdƒqW|S(Nii2tidtstatusgš™™™™™¹?(trangeRt
get_serverttimetsleep(R"tservertfrom_statusti((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_wait_for_state_changeIscCs†xrtdƒD]d}y|jj|ƒ}Wn(tjk
rSd}tjdƒPnXtjd|ƒtj	dƒq
W|j
|ƒdS(Ni2sGot 404, proceedingsFound_server=%sgš™™™™™¹?(R:RR;RtOpenStackApiNotFoundExceptiontNonetLOGtdebugR<R=tassertFalse(R"t	server_idt_retriestfound_server((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_wait_for_deletionRs
cCs!|jj|ƒ|j|ƒdS(N(Rt
delete_serverRJ(R"RG((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_delete_serverfscCsid|j6d|j6S(Ns
172.19.0.2sfe80::2(t_access_ipv4_parametert_access_ipv6_parameter(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_access_ips_paramsks
cCs2|jd||jƒ|jd||jƒdS(Ns
172.19.0.2sfe80::2(tassertEqualRMRN(R"R>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_verify_access_ipsos	(R&R'tapi_major_versiont_force_delete_parametert_image_ref_parametert_flavor_ref_parameterRMRNt_return_resv_id_parametert_min_count_parameterR5RARJRLRORQ(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR)5s	
					tServersTestcBsàeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z	d„Z
d	„Zd
„Zd„Z
d„Zd
„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs4|jjƒ}x|D]}tjd|ƒqWdS(Ns
server: %s(Rtget_serversRDRE(R"tserversR>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_get_serversws
cCs,tjƒ}tjj|ƒ}d„|DƒS(NcSs1i|]'}t|jjddƒƒ|j“qS(t
failed_buildsi(tinttstatsR thypervisor_hostname(t.0tnode((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pys
<dictcomp>s	(Rtget_admin_contextR
tComputeNodeListtget_all(R"tctxtR3((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_node_build_failures}scCs‘|jj|jkr.|j|j|jj<ntjƒ}xCt|jjƒƒD],}tjd|j	jƒ|j	j
|ƒqPWtjdƒdS(sØRun the update_available_resource task on every compute manager

        This runs periodics on the computes in an undefined order; some child
        class redefined this function to force a specific order.
        s!Running periodic for compute (%s)sFinished with periodicsN(tcomputeR!R3RRbtlisttvaluesRDtinfoRtupdate_available_resource(R"tctxRg((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_run_periodics„s	
cCsùd„}|jd|ƒ|jƒ}|jji|d6ƒ}|d}|jj|ƒ}|j||dƒ|j|dƒ}|jd|dƒ|j|ƒ|jdgt|j	ƒj
ƒƒƒ|jƒ|jd	gt|j	ƒj
ƒƒƒdS(
Nc_stjddddƒ‚dS(Ntreasontt
instance_uuidR(R	tBuildAbortException(targstkwargs((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pytthrow_error˜ssnova.virt.fake.FakeDriver.spawnR>R8tBUILDtERRORR9ii(tstub_outt$_build_minimal_create_server_requestRtpost_serverR;RPRARLRhRfRiRm(R"RtR>tcreated_servertcreated_server_idRI((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_create_server_with_error•s	

%
cstjdgƒ|jtjƒ|jddƒ|jdddƒ|_|j|jd<g‰‡fd†}|jd|ƒ|j	ƒ}|j
ji|d6ƒ}|d}|j
j|ƒ}|j
||dƒ|j|d	ƒ}|j
d
|dƒ|j|ƒtˆƒS(NRR!Rgtcompute2cs ˆjdƒtjdƒ‚dS(NtonesPlease retry me(tappendR
tTestingException(RrRs(tfails(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRt»s
snova.virt.fake.FakeDriver.spawnR>R8RuRvR9(Rt	set_nodest
addCleanupt
restore_nodestflagsR7R}R3RwRxRRyR;RPRARLtlen(R"RtR>RzR{RI((RsG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt+_test_create_server_with_error_with_retries°s"

cCsh|jddddƒ|jƒ}|jd|ƒ|jƒ|jddgt|jƒjƒƒƒdS(Ntmax_attemptsitgroupt	scheduleri(R…R‡RPRmRhRfRi(R"R((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt*test_create_server_with_error_with_retriesÏs
cCsn|jddddƒ|jƒ}|jd|ƒ|jƒ|jddgtt|jƒjƒƒƒƒdS(NRˆiR‰RŠi(R…R‡RPRmRhtsortedRfRi(R"R((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt-test_create_server_with_error_with_no_retries×s
c
Csþi}|jƒ}i|d6}|jtj|jj|ƒ|jƒ||j<|jtj|jj|ƒ|j|jƒ||j<|jtj|jj|ƒ|j|j	ƒ||j	<|jtj|jj|ƒ|d|d<|jj|ƒ}t
jd|ƒ|j|dƒ|d}|jj
|ƒ}|j||dƒ|jjƒ}g|D]}|d^q[}	|j||	ƒ|j|dƒ}|jd|dƒ|jjdtƒ}x.|D]&}|jd	|ƒ|jd
|ƒqÃW|j|ƒdS(NR>tnamescreated_server: %sR8RutACTIVER9tdetailtimagetflavor(RxtassertRaisesRtOpenStackApiExceptionRRytget_invalid_imageRTR RURDREt
assertTrueR;RPRYtassertInRAtTrueRL(
R"R>tgood_servertpostRzR{RIRZtst
server_ids((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_create_and_delete_serverßsB


cCs\tjƒtjddƒ}tjd|ƒ|jtjƒtjƒ}|j	j
|ƒdS(Nthoursit
override_time(Rtutcnowtdatetimet	timedeltatset_time_overrideRƒtclear_time_overrideRRbRgt_reclaim_queued_deletes(R"tthe_pastRe((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_force_reclaim!s
cCsý|jddƒ|jƒ}|jji|d6ƒ}tjd|ƒ|j|dƒ|d}|j|dƒ}|jd|dƒ|j	t
j|jj|iid	6ƒ|jj
|ƒ|j|dƒ}|jd
|dƒ|jƒ|j|ƒdS(Ntreclaim_instance_intervaliR>screated_server: %sR8RuRR9trestoretSOFT_DELETED(R…RxRRyRDRER–RARPR“RR”tpost_server_actionRKR§RJ(R"R>RzR{RI((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_deferred_delete*s 

cCs|jddƒ|jƒ}|jji|d6ƒ}tjd|ƒ|j|dƒ|d}|j|dƒ}|jd|dƒ|jj	|ƒ|j|dƒ}|jd	|dƒ|jj
|iid
6ƒ|j|dƒ}|jd|dƒdS(NR¨iR>screated_server: %sR8RuRR9RªR©tDELETED(R…RxRRyRDRER–RARPRKR«(R"R>RzR{RI((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_deferred_delete_restoreMs
cCs”|jddddƒ|jddƒ|jƒ}|jji|d6ƒ}tjd|ƒ|j|d	ƒ|d	}|j|d
ƒ}|jd|dƒ|jj	|ƒ|j|dƒ}|jd
|dƒ|jƒ}|jji|d6ƒ}tjd|ƒ|j|d	ƒ|j|d
ƒ}|jd|dƒ|j
tj|jj
|iid6ƒ}|jd|jjƒ|jd
|dƒdS(Nt	instancesiR‰tquotaR¨iR>screated_server: %sR8RuRR9RªR©i“(R…RxRRyRDRER–RARPRKR“RR”R«tresponsetstatus_code(R"R>tcreated_server1tcreated_server_id1t
found_server1tcreated_server2t
found_server2tex((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt&test_deferred_delete_restore_overquotams.
	cCsê|jddƒ|jƒ}|jji|d6ƒ}tjd|ƒ|j|dƒ|d}|j|dƒ}|jd|dƒ|jj	|ƒ|j|dƒ}|jd	|dƒ|jj
|ii|j6ƒ|j|ƒdS(
NR¨iR>screated_server: %sR8RuRR9Rª(
R…RxRRyRDRER–RARPRKR«RSRJ(R"R>RzR{RI((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_deferred_delete_forceœs
c
Cs|jƒ}i}x&tdƒD]}d||d|<qW||d<i|d6}|jj|ƒ}tjd|ƒ|j|dƒ|d}|jj|ƒ}|j||dƒ|j||j	dƒƒ|jj
dtƒ}d	„|Dƒ}	|	j	|ƒ}|j|ƒ|j||j	dƒƒ|jj
dtƒ}d
„|Dƒ}	|	j	|ƒ}|j|ƒ|j
|j	dƒƒ|j|ƒdS(Nisvalue_%sskey_%stmetadataR>screated_server: %sR8RcSsi|]}||d“qS(R8((R`R>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pys
<dictcomp>Ôs	cSsi|]}||d“qS(R8((R`R>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pys
<dictcomp>Üs	(RxR:RRyRDRER–R;RPR RYR˜tFalseRFRL(
R"R>R»R@RšRzR{RIRZt
server_map((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt test_create_server_with_metadata¼s0




cCs|jƒ}idd6}||d<i|d6}|jj|ƒ}|j|dƒ}|jd|dƒ|j||jdƒƒ|d}|jd	d
ƒ|jj|iid6ƒ|j|dƒ}|jd|dƒid
d6}|jt	j
|jj||ƒ}|jd|jj
ƒ|jd|dƒ|jt	j
|jj|dƒ}|jd|jj
ƒ|jd|dƒ|j|ƒdS(Ntvalue_1tkey_1R»R>RuRR9R8tshelved_offload_timeiÿÿÿÿtshelvetSHELVEDtvalue_2tkey_2i™(RxRRyRARPR R…R«R“RR”tpost_server_metadataR±R²tdelete_server_metadataRL(R"R>R»RšRzRIRGR¸((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt3test_server_metadata_actions_negative_invalid_stateås2




		c	Csº|jƒ}i|d6}i}x&tdƒD]}d||d|<q,W||dd<|jj|ƒ}tjd|ƒ|j|dƒ|d}|j|dƒ}i}id	|j6d
d6d|j	6d
|j
6idd6d6|d<|dj|jƒƒ|jj
||ƒtjd|ƒ|j|dƒ|jj|ƒ}|j||dƒ|jidd6|jdƒƒ|jd
|jdƒƒ|j|d|j|jdƒdƒ|j|ƒi}id	|j6id6|d<|jj
||ƒtjd|ƒ|j|dƒ|jj|ƒ}|j||dƒ|ji|jdƒƒ|jd
|jdƒƒ|j|d|j|jdƒdƒ|j|ƒ|j|ƒdS(NR>isvalue_%sskey_%sR»screated_server: %sR8Rus$76fa36fc-c930-4bf3-8c8a-ea2a2420deb6tblahRŽs
172.19.0.2sfe80::2tthingtsometrebuildsrebuilt server: %sR‘(RxR:RRyRDRER–RARTRMRNtupdateROR«R;RPR RQRL(	R"R>tserver_postR»R@RzR{RšRI((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_create_and_rebuild_serversX




 


cCs¤|jƒ}|jji|d6ƒ}tjd|ƒ|d}|j|ƒ|jj|iidd6d6ƒ|jj|ƒ}|j|ddƒ|j	|ƒdS(NR>screated_server: %sR8snew-nameRŽ(
RxRRyRDRER–t
put_serverR;RPRL(R"R>RzRG((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_rename_serverOs

!cCsN|jƒ}d||j<t||j<i|d6}|jj|ƒ}|jd|ƒ|d}|j|ddgƒ|jƒ}i|d6}|jj|ƒ}|j	|dƒ|d}|jj
dtdi|d6ƒ}d„|Dƒ}|j|ƒ}	|j|	ƒ|j
t|ƒdƒ|j|ƒx|D]}
|j|
ƒq3WdS(	NiR>treservation_idRoR8Rtsearch_optscSsi|]}||d“qS(R8((R`R>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pys
<dictcomp>{s	(RxRWR˜RVRRyR—tassertNotInRCR–RYR tassertIsNoneRPR†RL(R"R>RšR±RÒRzR{RZR½RIRG((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_create_multiple_serverscs,








cCs g}d}|jidd6tj|ƒd6ƒtjdƒ}|jidd6tj|ƒd6ƒ|jƒ}||d<i|d6}|jj|ƒ}tj	d|ƒ|j
|d	ƒ|d	}|jj|ƒ}|j||d	ƒ|j
|d
ƒ}|jd|dƒ|j|ƒdS(
Ns
Hello, World!s/helloworld.txttpathtcontentss/helloworld.ziptpersonalityR>screated_server: %sR8RuRR9(RRtencode_as_bytestzlibtcompressRxRRyRDRER–R;RPRARL(R"RÙtdataR>RšRzR{RI((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt&test_create_server_with_injected_files‡s*		


cCs\|jƒ}|jji|d6ƒ}|d}|j|dƒ}|jd|dƒiid6}|jtj|jj||ƒ}|jd|j	j
ƒ|jd|dƒiid6}|jj||ƒ|j|dƒ}|jd	|dƒiid6}|jtj|jj||ƒ}|jd|j	j
ƒ|jd	|dƒ|j|ƒdS(
NR>R8RuRR9sos-starti™sos-stoptSHUTOFF(RxRRyRARPR“RR”R«R±R²RL(R"R>RzR{RIRšR¸((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt.test_stop_start_servers_negative_invalid_state®s,

	

	cCs¾|jƒ}|jji|d6ƒ}|d}|j|dƒ}|jd|dƒiid6}|jtj|jj||ƒ}|jd|j	j
ƒ|jd|dƒ|j|ƒdS(NR>R8RuRR9trevertResizei™(RxRRyRARPR“RR”R«R±R²RL(R"R>RzR{RIRšR¸((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt1test_revert_resized_server_negative_invalid_stateØs

	cCs0|jdtƒ|jƒ}|jji|d6ƒ}|d}|j|dƒ}|jd|dƒiidd6d	d
6d6}|jj||ƒ|j|dƒ}|jd
|dƒiidd6d	d
6d6}|jt	j
|jj||ƒ}|jd|jjƒ|jd
|dƒ|j
|ƒdS(Ntallow_resize_to_same_hostR>R8RuRR9t2R-tAUTOsOS-DCF:diskConfigtresizetRESIZEt
VERIFY_RESIZEt1i™(R…R˜RxRRyRARPR«R“RR”R±R²RL(R"R>RzR{RIRšR¸((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt)test_resize_server_negative_invalid_stateïs"
	cCs¾|jƒ}|jji|d6ƒ}|d}|j|dƒ}|jd|dƒiid6}|jtj|jj||ƒ}|jd|j	j
ƒ|jd|dƒ|j|ƒdS(NR>R8RuRR9t
confirmResizei™(RxRRyRARPR“RR”R«R±R²RL(R"R>RzR{RIRšR¸((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt2test_confirm_resized_server_negative_invalid_states

	cCsÐ|jddddƒ|jddddƒ|jƒ}|jji|d6ƒ}|d}|j|d	ƒ}|jd
|dƒiidd
6d6}|jtj|jj	||ƒ}|jd|j
jƒdS(NtcoresiR‰R°tramiR>R8RuRR9RäR-Ræi“(R…RxRRyRARPR“RR”R«R±R²(R"R>RzR{RIRšR¸((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resize_server_overquota&s
	(R&R'R[RfRmR|R‡R‹RRR§R¬R®R¹RºR¾RÈRÏRÑRÖRÞRàRâRêRìRï(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRXus0								B			#	 	/	 	)	)	A		$	'	*		 	tServersTestV21cBseZdZRS(sv2.1(R&R'RR(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRð9stServersTestV219cBs¿eZdZedd„Zedd„Zedd„Zedd„Zedd„Z	edd„Z
ded„Zd„Zd	„Z
d
„Zd„Zd„Zd
„Zd„Zd„ZRS(sv2.1cCsR|jƒ}|r||d<ni|d6}|jjd|ƒj}||dfS(NtdescriptionR>s/servers(RxRtapi_posttbody(R"tset_desctdescR>RšR±((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_create_server@s

cCsUtjdƒ}ii|d6d6}|r:||dd<n|jjd||ƒdS(NiRŽR>Ròs/servers/%s(Rtgenerate_random_alphanumericRtapi_put(R"RGRõRötnew_nameR>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_update_serverHs
cCs›tjdƒ}i}i|d6d|j6d|j6d|j6idd6d6|d	<|d	j|jƒƒ|r€||d	d
<n|jjd||ƒdS(NiRŽs$76fa36fc-c930-4bf3-8c8a-ea2a2420deb6s
172.19.0.2sfe80::2RÊRËR»RÌRòs/servers/%s/action(	RRøRTRMRNRÍRORRó(R"RGRõRöRúRš((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_rebuild_serverOs


cCs;|j||ƒdd}|j||ƒ|j|ƒdS(NiR8(R÷t_verify_server_descriptionRL(R"Rõt
expected_descR{((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_create_server_and_verify^s	cCs'|j|||ƒ|j||ƒdS(N(RûRý(R"RGRõRþ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_update_server_and_verifyfscCs'|j|||ƒ|j||ƒdS(N(RüRý(R"RGRõRþ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_rebuild_server_and_verifymscCsä|jjd|ƒ}|jd}|j||dƒ|rY|j||jdƒƒn|jd|ƒ|jjdƒjd}d„|Dƒ}|j|ƒ}|j|ƒ|rÐ|j||jdƒƒn|jd|ƒdS(Ns/servers/%sR>R8Ròs/servers/detailRZcSsi|]}||d“qS(R8((R`R>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pys
<dictcomp>ƒs	(Rtapi_getRôRPR RÔR–(R"RGRþtdesc_in_respR±RIRZR½((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRýts

cCsK|jtjdƒ0}|jt|ƒ|jd|jjjƒWdQXdS(Ns.*Unexpected status code.*i(	tassertRaisesRegexRR”R÷R˜RPR	R±R²(R"Rötcm((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_create_assertRaisesRegexscCsN|jtjdƒ3}|j|t|ƒ|jd|jjjƒWdQXdS(Ns.*Unexpected status code.*i(	RRR”RûR˜RPR	R±R²(R"RGRöR((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_update_assertRaisesRegex”scCsN|jtjdƒ3}|j|t|ƒ|jd|jjjƒWdQXdS(Ns.*Unexpected status code.*i(	RRR”RüR˜RPR	R±R²(R"RGRöR((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_rebuild_assertRaisesRegex›scCsGd|j_|jtdƒ|jtdƒ|jƒ|jtƒdS(Ns2.19stest descriptionRo(RtmicroversionRÿR˜R¼(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt#test_create_server_with_description¢s

cCsd|j_|jtdƒdd}|j|tdƒ|j|tdƒ|j|tdƒ|j|ƒ|j|tdƒ|j|ƒdS(Ns2.19stest desc 1iR8supdated descRos
updated desc2(RR	R÷R˜RR¼RL(R"RG((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt#test_update_server_with_description­s
cCs¦d|j_|jtdƒd}|d}|j|dƒ|j|tdƒ|j|tdƒ|j|tdƒ|j|ƒ|j|tdƒ|j|ƒdS(	Ns2.19stest desc 1iR8Rusupdated descRos
updated desc2(RR	R÷R˜RARR¼RL(R"R>RG((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt$test_rebuild_server_with_descriptionÀs

cCsÛd|j_|jtdƒdd}d|j_|j|dtƒ|j|dƒ|j|dƒ|j|ƒ|jtƒ\}}|d}d|j_|j||d	ƒ|j|ƒd|j_|j	d
ƒdS(Ns2.19stest desc 1iR8s2.18Rstest update 2.18stest rebuild 2.18RŽstest create 2.18(
RR	R÷R˜RýR¼RRRLR(R"RGt
server_reqR±((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_version_compatibilityÖs


cCsd|j_|jdƒ|jddƒ|jtdƒdd}|j|dƒ|j|dƒ|j|ddƒ|j|ddƒdS(	Ns2.19tinvaliddstringtxiRöiR8sinvalid\u0604string(RR	RR÷R˜RR(R"RG((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_description_errorsös
N(R&R'RRR˜RCR÷RûRüRÿRRRýRRRR
RRRR(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRñ=s&							 tServerTestV220cBsMeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z	RS(sv2.1cCs?tt|ƒjƒd|j_tj|ƒtjƒ|_	dS(Ns2.20(
R4RR5RR	RR6RRbRe(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5s
cCs?|jƒ}i|d6}|jjd|ƒj}||dfS(NR>s/servers(RxRRóRô(R"R>RšR±((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR÷s
cCsT|jƒd}|d}|j|dƒ|jj|idd6ƒ|j|dƒS(NiR8RuRÂR(R÷RARR«RC(R"R>RG((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_shelve_servers

cCs;tj|jtjidd6dd6dd6dd6ƒgƒS(Ns/dev/vdatdevice_nameRtsource_typetdestination_types$5d721593-f033-4f6d-ab6f-b5b067e61bc4t	volume_id(tblock_device_objtblock_device_make_listReRtFakeDbBlockDeviceDict(R"Re((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_fake_bdmss
c	CsÛ|jddƒ|jƒ}|jd|dƒ|d}|jdtjƒtjtj	j
tjdƒtj	j
t
jdƒtj	j
tjd	ƒƒp\}}}tjd
dƒ|_iidd
6d6}|jjd||ƒ|j|jƒ|j|jƒWdQXtjtj	j
tjjdƒtj	j
tjdƒtj	j
tjdƒƒp\}}}	|j|jƒ|_|jdd}
|jjd||
fƒ|j|jƒ|j|	jƒWdQX|j|ƒdS(NRÁiÿÿÿÿRÃR9R8snova.volume.cinder.API.gettis_microversion_supportedt _check_attach_and_reserve_volumet
attach_volumetversions3.44s$5d721593-f033-4f6d-ab6f-b5b067e61bc4tvolumeIdtvolumeAttachments!/servers/%s/os-volume_attachmentstbegin_detachingtget_by_instance_uuidt
detach_volumeiRs$/servers/%s/os-volume_attachments/%s(R…RRPRwRtstub_volume_getR
tnestedtmocktpatchtobjectRtcindertcompute_apitAPIRt
ComputeAPIR	tCinderAPIVersionNotAvailabletside_effectRRóR–tcalledR
tBlockDeviceMappingListRRetreturn_valuet
api_deleteRL(R"RIRGtmock_cinder_mvtmock_reservetmock_attachtvolume_attachmentt
mock_checkt
mock_get_bdmstmock_rpct
attachment_id((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt(test_attach_detach_vol_to_shelved_server'sF
	c	Csø|jddƒ|jƒ}|jd|dƒ|d}|jdtjƒtjtj	j
tjdƒtj	j
t
jdƒtj	j
tjjd	ƒƒŠ\}}}tjd
dƒ|_iidd
6d6}|jjd||ƒjd}|j|jƒ|j|jƒ|j|dƒWdQXtjtj	j
tjjdƒtj	j
tjdƒtj	j
t
jdƒƒp\}}	}
|j|jƒ|	_|	jdd}|jjd||fƒ|j|jƒ|j|
jƒWdQX|j|ƒdS(NRÁitSHELVED_OFFLOADEDR9R8snova.volume.cinder.API.getRRtattachRs3.44s$5d721593-f033-4f6d-ab6f-b5b067e61bc4R R!s!/servers/%s/os-volume_attachmentstdeviceR"R#t_local_cleanup_bdm_volumesRs$/servers/%s/os-volume_attachments/%s(R…RRPRwRR%R
R&R'R(R)RR*R+R,R	R.R/RRóRôR–R0RÕR
R1RReR2R3RL(R"RIRGR4R5tmock_volR7tattach_responseR8R9tmock_clean_volsR;((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt2test_attach_detach_vol_to_shelved_offloaded_serverTsF
	c	Cs8|jddƒ|jƒ}|jd|dƒ|d}|j|jƒ}|jdtjƒtj	t
jjt
jdƒt
jjtjdƒt
jjt
jjd	ƒt
jjt
jjd
ƒt
jjt
jjdƒƒ”\}}}}}itj
d6|_iidd
6d6}	|jjd||	ƒjd}
|j|jƒ|jt
jtj
ƒ|j|
dƒWdQXtj	t
jjt
jjdƒt
jjtjdƒt
jjtjdƒƒd\}}}
||_|jdd}|jjd||fƒ|j|jƒ|j|
jƒWdQX|j|ƒdS(NRÁiR=R9R8snova.volume.cinder.API.getRt*_check_volume_already_attached_to_instancetcheck_availability_zonetattachment_createtattachment_completes$5d721593-f033-4f6d-ab6f-b5b067e61bc4R R!s!/servers/%s/os-volume_attachmentsR?R"R#R@Rs$/servers/%s/os-volume_attachments/%s(R…RRPRReRwRR%R
R&R'R(R)RR*R+R,tuuidsR2RRóRôR–R0tassert_called_once_withtANYRÕR
R1R3RL(R"RIRGt	fake_bdmsR4tmock_check_vol_attachedtmock_check_av_zonetmock_attach_createtmock_attachment_completeR7RBR8R9RCR;((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt;test_attach_detach_vol_to_shelved_offloaded_server_new_flow€sV
			(
R&R'RRR5R÷RRR<RDRQ(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR	s					-	,tServerRebuildTestCasecBsPeZdZdZd„Zd„Zejddejƒd„ƒZ	d„Z
RS(sv2.1s2.38cCsH|jj|dƒ}|d}|jjjdi|d6dd6ƒdS(NR8sOS-EXT-SRV-ATTR:hosttdisableR!snova-computetbinary(RR;tapi_fixturet	admin_apitput_service(R"R>R!((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_disable_compute_for»s


cCsÎtjdgƒ|jtjƒ|jddƒ|jdddƒ|_d}ii|d6dd6dd	6d
d6d6}|jj|ƒ}|j	|j|d
ƒ|j
|ƒtjj
jjj}|jj|ddƒii|d6d6}|jjd|d|ddgƒ|j|tjd|jjƒ|jj|dƒ}|j||ddƒ|jd|dƒ|jd|ddƒ|jtj|jjd|d|ƒ}|jdtj|ƒƒdS(szCreates a server with an image that is valid for the single compute
        that we have. Then rebuilds the server, passing in an image with
        metadata that does not fit the single compute which should result in
        a NoValidHost error. The ImagePropertiesFilter filter is enabled by
        default so that should filter out the host based on the image meta.
        RR!Rgs$155d900f-4e14-4e4c-a73d-069cbf4541e6R,RéR-t#test_rebuild_with_image_novalidhostRŽtnonetnetworksR>Rthw_architecturet	unicore32RÌs/servers/%s/actionR8tcheck_response_statusiôtrebuild_serverR‘RvR9s
No valid hosttfaulttmessagetNoValidHostN(RR‚RƒR„R…R7R}RRyRARXtnovatteststunitR‘t#AUTO_DISK_CONFIG_ENABLED_IMAGE_UUIDtput_image_meta_keyRót _wait_for_action_fail_completionRtREBUILDRURVR;RPR—R“RR”tsixt	text_type(R"toriginal_image_reftserver_req_bodyR>trebuild_image_reftrebuild_req_bodyR¸((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRYÅsB
	
	
s;nova.compute.resource_tracker.ResourceTracker.rebuild_claimtnew_callablecs@ˆjj‰dˆ_‡fd†}‡fd†}‡fd†}‡fd†}‡fd†}ˆjjjdƒ}||ƒ}||ƒ}	ˆjidd6dd	6dd
6|	ƒiidd6d
d6dd6dd6d6}
ˆjj	|
ƒ}ˆj
ˆj|dƒˆjjdƒjd}||didd6ƒ||ƒ}	|||	ƒ||dƒ}
ˆj
||
ƒ|
|d}
|||
ƒtjjjjj}ii|d6d6}ˆjjd|d|ƒˆjˆj|idd6ƒ||ƒ}	|||	ƒ||dƒ}
ˆj
||
ƒ|
|d}
|||
ƒdS(sQRebuilds a server with a different image which will run it through
        the scheduler to validate the image is still OK with the compute host
        that the instance is running on.

        Validates that additional resources are not allocated against the
        instance.host in Placement due to the rebuild on same host.
        s2.53cs&ˆjd|ƒj}|dddS(Ns-os-hypervisors?hypervisor_hostname_pattern=%sthypervisorsiR8(RRô(R!tresp(RV(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_provider_uuid_by_host!scsˆjjd|ƒjdS(Ns/resource_providers/%s/usagestusages(t
placement_apiR Rô(t
provider_uuid(R"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_provider_usages&s	csˆjjd|ƒjdS(Ns/allocations/%stallocations(RuR Rô(tserver_uuid(R"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_allocations_by_server_uuid*s	csGˆjjd|ƒj}|d|d<ˆjjd||f|ƒjS(Ns/resource_providers/%st
generationtresource_provider_generations%/resource_providers/%s/inventories/%s(RuR Rôtput(trp_uuidtresource_classt	inventorytrp(R"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_set_provider_inventory.s		csLˆj|d|dƒˆj|d|dƒˆj|d|dƒdS(NtvcpustVCPURît	MEMORY_MBtdisktDISK_GB(RP(R’t
allocation(R"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pytassertFlavorMatchesAllocation7siR„R…R‡s$155d900f-4e14-4e4c-a73d-069cbf4541e6R,RéR-ttest_rebuild_with_new_imageRŽRZR[R>Rs
/flavors/1R’ittotalR8t	resourcesRÌs/servers/%s/actionsOS-EXT-STS:task_stateN(RURVR	RgRt
_get_nodenameRCRPRRyRARRôR—RcRdReR‘RRfRót_wait_for_server_parameter(R"tmock_rebuild_claimRsRwRzR‚R‰tnodenameR~t	rp_usagesRmR>R’tallocsRnRo((RVR"sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRŠsR
		%


cCs|jtj|ƒƒiidd6dd6dd6idd6tjjd	6d
d6d
d6gd
6d6}|jj|ƒ}|j|j|dƒ}|jd|dƒtj	j
jjj
}ii|d6d6}|jjd|d|ddgƒ}|jdtj|ƒƒdS(s½Tests that trying to rebuild a volume-backed instance with a
        different image than what is in the root disk of the root volume
        will result in a 400 BadRequest error.
        RéR-t*test_volume_backed_rebuild_different_imageRŽRZR[it
boot_indextuuidRRRtblock_device_mapping_v2R>RRoR‘R,RÌs/servers/%s/actionR8R^isCUnable to rebuild with a different image for a volume-backed serverN(t
useFixturet
nova_fixturestCinderFixtureNewAttachFlowtIMAGE_BACKED_VOLRRyRARPRcRdReR‘RRfRóR—RjRk(R"RmR>RnRoRr((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR“ts,
	(R&R'RRR	RXRYR'R(tNonCallableMockRŠR“(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRR´s	
	O_tProviderUsageBaseTestCasecBs¤eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z	d„Z
d	„Zd
„Zd„Z
d„Zd
„Zd„Zd„Zd„Zd„ZRS(spBase test class for functional tests that check provider usage
    and consumer allocations in Placement during various operations.

    Subclasses must define a **compute_driver** attribute for the virt driver
    to use.

    This class sets up standard fixtures and controller services but does not
    start any compute services, that is left to the subclass.
    tlatestcCs3|jd|jƒtt|ƒjƒ|jtjƒƒ|jtj	|ƒƒ|jtj
ƒƒ|jtjƒƒ}|j|_
|jtjddƒƒ}|j|_|j|j_|j|_tjjjjj|ƒ|jdƒ|jdƒ|_|jtjjjjjƒtj|ƒi|_dS(Ntcompute_drivertapi_versionsv2.1R2RŠ(R…RžR4RœR5R—RtRealPolicyFixtureR˜tNeutronFixturetAllServicesCurrenttPlacementFixtureRRutOSAPIFixtureRVR	RcRdReR‘Rtstub_out_image_serviceR7tscheduler_serviceRƒtFakeImageService_resetRR6R3(R"t	placementRU((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5±s$

cCsFtj|gƒ|jtjƒ|jdd|ƒ}||j|<|S(sØStart a nova compute service on the given host

        :param host: the name of the host that will be associated to the
                     compute service.
        :return: the nova compute service object
        RgR!(RR‚RƒR„R7R3(R"R!Rg((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_start_computeÍs

cCs)|jjd|ƒj}|dddS(Ns-os-hypervisors?hypervisor_hostname_pattern=%sRqiR8(RVRRô(R"R!Rr((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRsÚs	cCs|jjd|ƒjdS(Ns/resource_providers/%s/usagesRt(RuR Rô(R"Rv((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRwás	cCs|jjd|ƒjdS(Ns/allocations/%sRx(RuR Rô(R"Ry((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRzås	cCs|jjdddƒjdS(Ns/traitsRs1.6ttraits(RuR Rô(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_traitséscCs|jjdƒjdS(Ns/resource_providerstresource_providers(RuR Rô(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_all_providersìs	cCs!|jjd|ddƒjdS(Ns/resource_providers/%s/traitsRs1.6Rª(RuR Rô(R"Rv((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_provider_traitsðs	
cCsN|jjd|ƒj}i|dd6|d6}|jjd||ddƒS(sìThis will overwrite any existing traits.

        :param rp_uuid: UUID of the resource provider to update
        :param traits: list of trait strings to set on the provider
        :returns: APIResponse object with the results
        s/resource_providers/%sR{R|Rªs/resource_providers/%s/traitsRs1.6(RuR RôR}(R"R~Rªtprovidertput_traits_req((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_set_provider_traitsõs	
	cCs|jjd|ƒjdS(Ns"/resource_providers/%s/inventoriestinventories(RuR Rô(R"R~((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_provider_inventorys	cCsL|j|d|dƒ|j|d|dƒ|j|d|dƒdS(NRƒR„RîR…R†R‡(RP(R"R’Rˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR‰
scCsd|j|d|d|dƒ|j|d|d|dƒ|j|d|d|dƒdS(NRƒR„RîR…R†R‡(RP(R"t
old_flavort
new_flavorRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pytassertFlavorsMatchAllocationscCsStjƒ}tj|i|d6ƒ}|jdt|ƒdt|ƒƒ|djS(NRpis.Test expected a single migration, but found %ii(RRbRtmigration_get_all_by_filtersRPR†R•(R"RpRet
migrations((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pytget_migration_uuid_for_instancesc
	Csu|j|jdd|ddddgƒ}d||d<tjd	|ƒ|jji|d
6ƒ}|j|j|dƒ}|j||dƒ|j|ƒ}|j	|ƒ}|j
||ƒxygt|jj
ƒƒD]!}||krÕ|j|ƒ^qÕD]:}	|j	|	ƒ}
|jid
d6d
d6d
d6|
ƒqúW|j|dƒ}|jdt|ƒdƒ||d}|j
||ƒ|jƒ|j	|ƒ}|j
||ƒ|j|dƒ}|jdt|ƒdƒ||d}|j
||ƒxygt|jj
ƒƒD]!}||kr|j|ƒ^qD]:}	|j	|	ƒ}
|jid
d6d
d6d
d6|
ƒq3W|S(sBoot an instance and check that the resource allocation is correct

        After booting an instance on the given host with a given flavor it
        asserts that both the providers usages and resource allocations match
        with the resources requested in the flavor. It also asserts that
        running the periodic update_available_resource call does not change the
        resource state.

        :param flavor: the flavor the instance will be booted with
        :param source_hostname: the name of the host the instance will be
                                booted on
        :return: the API representation of the booted instance
        ssome-servert	flavor_idR8t
image_uuids$155d900f-4e14-4e4c-a73d-069cbf4541e6R[snova:%stavailability_zones
booting on %sR>RsOS-EXT-SRV-ATTR:hostiR„R…R‡is8No allocation for the server on the host it is booted onRŒ(RxRRDRjRyRARVRPRsRwR‰RhR3tkeysRzR†Rm(
R"R’tsource_hostnameR
RzR>tsource_rp_uuidt
source_usagesthostnameR~RtRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_boot_and_check_allocations$sR	%
%cCsË|jj|dƒ|j|ƒtjdƒxmgt|jjƒƒD]}|j|ƒ^qGD]:}|j	|ƒ}|j
idd6dd6dd6|ƒq`W|j|dƒ}|j
dt|ƒƒdS(s–Delete the instance and asserts that the allocations are cleaned

        :param server: The API representation of the instance to be deleted
        R8sinstance.delete.endiR„R…R‡N(
RRKt_wait_until_deletedRt wait_for_versioned_notificationsRhR3R½RsRwRPRzR†(R"R>RÁR~RtRx((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_delete_and_check_allocationsus

2cCsctjƒ}xCt|jjƒƒD],}tjd|jjƒ|jj	|ƒq"WtjdƒdS(sØRun the update_available_resource task on every compute manager

        This runs periodics on the computes in an undefined order; some child
        class redefined this function to force a specific order.
        s!Running periodic for compute (%s)sFinished with periodicsN(
RRbRhR3RiRDRjRR!Rk(R"RlRg((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRms	
(R&R'R(R	R5R©RsRwRzR«R­R®R±R³R‰R¶R¹RÂRÅRm(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRœ£s$
		
											
	Q	tTraitsTrackingTestscBs/eZdZejjejdƒd„ƒZRS(sfake.SmallFakeDrivert
get_traitscCsžddg}||_|jd|jƒƒ|jg|jƒƒ|jddƒ|_|jdƒ}|j|t|j	|ƒƒƒ|j
d|jƒƒdS(Nt
CUSTOM_FOOtHW_CPU_X86_VMXR!R(R2RÔR«RPR­R©RgRsRŒR®R—(R"tmock_traitsRªR~((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resource_provider_traits¡s	(	R&R'RžR'R(R)RtSmallFakeDriverRË(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRÆžstServerMovingTestscBseZdZeZdZd„Zd„Zd„Zd„Z	d„Z
d„Zd„Zd	„Z
d
„Zd„Zd„Zd
„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Ze j!dde"j#dƒƒd„ƒZ$d „Z%d!„Z&d"„Z'd#„Z(d$„Z)d)d%„Z+d&„Z,d'„Z-d(„Z.RS(*sLTests moving servers while checking the resource allocations and usages

    These tests use two compute hosts. Boot a server on one of them then try to
    move the server to the other. At every step resource allocation of the
    server and the resource usages of the computes are queried from placement
    API and asserted.
    sfake.MediumFakeDrivercCsètt|ƒjƒtj|ƒ|jtjƒ|jddƒ|_|jddƒ|_	|j
jƒ}|d|_|d|_
iidd6t|j
dd	ƒd6dd
6|j
dd	d6dd
6d6}|j
j|ƒ|_dS(NR!RRiittest_flavor3RŽRîiRƒR†s$a22d5517-147c-4147-a0d1-e698df5cd4e3R8R’(R4RÍR5Rt
stub_notifierRƒtresetR©tcompute1R}Rtget_flavorstflavor1tflavor2R]tpost_flavortflavor3(R"tflavorstflavor_body((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5¿s



cCsidd6dd6}||S(NRR((R"R!t
other_host((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_other_hostnameÕs

cCsutjƒ}tjd|jjjƒ|jjj|ƒtjd|jjjƒ|jjj|ƒtjdƒdS(Ns"Running periodic for compute1 (%s)s"Running periodic for compute2 (%s)sFinished with periodics(	RRbRDRjRÑRR!RkR}(R"Rl((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRmÚs		cCs|jddƒdS(Nt
dest_hostnameR(t_test_resize_revert(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resize_revertëscCs|jddƒdS(NRÛR(RÜ(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resize_revert_reverseîscCs|jddƒdS(NRÛR(t_test_resize_confirm(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resize_confirmñscCs|jddƒdS(NRÛR(Rß(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resize_confirm_reverseôscCsí|jdtƒii|dd6d6}|jj|d|ƒ|j|j|dƒ|j|ƒ}|j||ƒ|j|ƒ}|j||ƒ|j|dƒ}	|jdt	|	ƒƒ|	|d}
|j||
ƒ|j
|dƒ}|j|ƒ}	|	|d}|j||ƒ|jƒ|j|ƒ}|j||ƒ|j|ƒ}|j||ƒ|j|dƒ}	|jdt	|	ƒƒ|	|d}
|j||
ƒ|j
|dƒ}|j|ƒ}	|	|d}|j||ƒdS(NRãR8R-RæRèiRŒ(R…R¼RR«RARwR‰RzRPR†R¹Rm(R"R>R´RµR¿tdest_rp_uuidt
resize_reqRÀtdest_usagesRxt
dest_alloctmigration_uuidtsource_alloctdest_allocation((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_resize_and_check_allocations÷s>
cCs]|j|ƒ}|j|ƒ}|j|ƒ}|j|j|ƒ}|j||j|j||ƒidd6}|jj|d|ƒ|j	|j|dƒ|j
ƒ|j|ƒ}|j|dƒ}|j
|j|ƒ|j|ƒ}	|jidd6dd6dd6|	d|ƒ|jd	t|ƒƒ||d
}
|j
|j|
ƒ|j|ƒdS(NRáR8RiR„R…R‡sATarget host %s still has usage after the resize has been revertediRŒ(RÚRsRÂRÓRéRÔRCRR«RARmRwRzR‰RPR†RÅ(R"RÛR¾R¿RâR>RšRÀRxRätsource_allocation((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRÜ3s0	



cCs |j|ƒ}|j|ƒ}|j|ƒ}|j|j|ƒ}|j||j|j||ƒidd6}|jj|d|ddgƒ|j	|j|dƒ|j
|dƒ}|jdt|ƒƒ|j
|ƒ}|j
|ƒ}	|j|j|	ƒ|jidd6dd	6dd
6|d|ƒ|j|j|	ƒ||d}
|j|j|
ƒ|jƒ|j
|ƒ}	|j
|ƒ}|j|j|	ƒ|jidd6dd	6dd
6|d|ƒ|j
|dƒ}|jdt|ƒƒ||d}
|j|j|
ƒ|j|ƒdS(
NRëR8R^iÌRiiR„R…R‡sGThe source host %s still has usages after the resize has been confirmedRŒ(RÚRsRÂRÓRéRÔRCRR«RARzRPR†RwR‰RmRÅ(R"RÛR¾R¿RâR>RšRxRÀRäRè((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRßYsL	

	


c
CsÎ|jdtƒii|dd6d6}|jj|d|ƒ|j|j|dƒ|j|ƒ}|j|||ƒ|j|dƒ}|jdt	|ƒƒ||d}|j
||ƒ|j|dƒ}	|j|	ƒ}|jdt	|ƒƒ||d}|j
||ƒ|jƒ|j|ƒ}|j|||ƒ|j|dƒ}|jdt	|ƒƒ||d}|j
||ƒ|j|	ƒ}|jdt	|ƒƒ||d}|j
||ƒdS(NRãR8R-RæRèiRŒ(
R…R˜RR«RARwR¶RzRPR†R‰R¹Rm(
R"R>R´RµR~RãRtRxRˆRæ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt*_resize_to_same_host_and_check_allocations›s8
c	CsS|jjd|jjddƒdd}|jj|idd6ƒ|jjj}|j|ƒ}|j|j	|ƒ}|j
||j	|j|ƒidd6}|j
j|d|ƒ|j|j
|d	ƒ|jƒ|j|ƒ}|j|j	|ƒ|j|dƒ}|jd
t|ƒƒ||d}|j|j	|ƒ|j|ƒdS(NR!RTsnova-computeiR8tdisabledR9RáRiRŒ(RVtget_servicesR}R!RWRÑRRsRÂRÔRëRÖRCRR«RARmRwR‰RzRPR†RÅ(	R"tcompute2_service_idRÁR~R>RšRtRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resize_revert_same_hostÐs&

c	Cs\|jjd|jjddƒdd}|jj|idd6ƒ|jjj}|j|ƒ}|j|j	|ƒ}|j
||j	|j|ƒidd6}|j
j|d|d	d
gƒ|j|j
|dƒ|jƒ|j|ƒ}|j|j|ƒ|j|dƒ}|jdt|ƒƒ||d
}|j|j|ƒ|j|ƒdS(NR!RTsnova-computeiR8RìR9RëR^iÌRiRŒ(RVRíR}R!RWRÑRRsRÂRÔRëRÖRCRR«RARmRwR‰RzRPR†RÅ(	R"RîRÁR~R>RšRtRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resize_confirm_same_hostðs(
	
cCsÐiidd6dd6tjjdd6dd6d	6}|jj|ƒ}|jj}|j|ƒ}|j|ƒ}|j|ƒ}|j	|j
|ƒ}|jd
tƒii|dd6d
6}|jj
|d|ddgƒ}	|j|	dddƒ|jj|dƒ}|j||dƒ|j|ƒ}
|j|j
|
ƒ|j|ƒ}|jidd6dd6dd6|ƒ|j|dƒ}|jdt|ƒƒ||d}
|j|j
|
ƒ|j|ƒdS(Nttest_too_big_flavorRŽiRîiRƒiR†R’RãR8R-RæR^it
badRequestRas7No valid host was found. No valid host found for resizesOS-EXT-SRV-ATTR:hostiR„R…R‡RŒ(RtMediumFakeDriverRƒRRÕR}R!RÚRsRÂRÓR…R¼R«RPRVR;RwR‰RzR†RÅ(R"RØt
big_flavorRÛR¾R¿RâR>RãRrRÀRäRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_resize_not_enough_resourcesD
	cCso|jj}|jj}|j|j|ƒ}|jjd|ddƒdd}|jjƒ|jj|idd6ƒiid6}|j	j
|d|ƒi|d	6d
d6}|j|j	||ƒ}|j|ƒ}|j|ƒ}|j
|ƒ}	|j|j|	ƒ|j
|ƒ}
|j|j|
ƒ|j|dƒ}|jdt|ƒƒ||d
}|j|j|ƒ||d
}
|j|j|
ƒ|j|jƒ|jj|idd6ƒ|j
|ƒ}	|jidd6dd6dd6|	ƒ|j
|ƒ}
|j|j|
ƒ|j|dƒ}|jdt|ƒƒ||d
}
|j|j|
ƒ|j|ƒdS(NR!RTsnova-computeiR8ttruetforced_downtevacuatesOS-EXT-SRV-ATTR:hostRR9iRŒtfalseR„R…R‡i(RÑR!R}RÂRÓRVRítstopRWRR«RŽRsRwR‰RzRPR†trestart_compute_serviceRÅ(R"R¾RÛR>tsource_compute_idRštexpected_paramsR¿RâRÀRäRxRêRè((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt
test_evacuateHsV
	
	

		cCs‘|jj}|jj}|j|j|ƒ}|jjd|ddƒdd}|jjƒ|jj|idd6ƒii|d6t	d6d	6}|j
j|d|ƒi|d
6dd6}|j|j
||ƒ}|j
ƒ|j|ƒ}|j|ƒ}|j|ƒ}	|j|j|	ƒ|j|ƒ}
|j|j|
ƒ|j|dƒ}|jd
t|ƒƒ||d}|j|j|ƒ||d}
|j|j|
ƒ|j|jƒ|jj|idd6ƒ|j
ƒ|j|ƒ}	|jidd6dd6dd6|	ƒ|j|ƒ}
|j|j|
ƒ|j|dƒ}|jdt|ƒƒ||d}
|j|j|
ƒ|j|ƒdS(s#Evacuating a server with a forced host bypasses the scheduler
        which means conductor has to create the allocations against the
        destination node. This test recreates the scenarios and asserts
        the allocations on the source and destination nodes are as expected.
        R!RTsnova-computeiR8RöR÷tforceRøsOS-EXT-SRV-ATTR:hostRR9iRŒRùR„R…R‡iN(RÑR!R}RÂRÓRVRíRúRWR˜RR«RŽRmRsRwR‰RzRPR†RûRÅ(R"R¾RÛR>RüRšRýR¿RâRÀRäRxRêRè((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_evacuate_forced_hostˆsZ
	

	
	
c	sDˆjj}ˆjj}ˆj|ƒ‰ˆjˆj|ƒ}ˆjjd|ddƒdd}ˆjjƒˆjj	|idd6ƒ‡‡fd†}t
jd	|ƒ;ˆjj
|diid
6ƒˆjˆj|dƒ}WdQXˆjƒˆj|ƒ}ˆj|ƒ}ˆjˆj|ƒˆjˆƒ}ˆjidd
6dd6dd6|ƒˆj|dƒ}	ˆjdt|	ƒƒ|	|d}
ˆjˆj|
ƒˆjˆjƒˆjj	|idd6ƒˆjƒˆj|ƒ}ˆjˆj|ƒˆj|dƒ}	ˆjdt|	ƒƒ|	|d}
ˆjˆj|
ƒdS(s“Tests that the allocations on the destination node are cleaned up
        when the rebuild move claim fails due to insufficient resources.
        R!RTsnova-computeiR8RöR÷cs8ˆjˆƒ}ˆjˆj|ƒtjddƒ‚dS(NRnt!test_evacuate_claim_on_dest_fails(RwR‰RÓR	tComputeResourcesUnavailable(RrRsRä(RâR"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pytfake_move_claimós	snova.compute.claims.MoveClaimRøRvNRƒRîR†iRŒRù(RÑR!R}RsRÂRÓRVRíRúRWR'R(RR«RARmRwR‰RzRPR†Rû(R"R¾RÛR>RüRR¿RÀRäRxRê((RâR"sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRÙsF
		
	
c	sPˆjj}ˆjj}ˆj|ƒ‰ˆjˆj|ƒ}ˆjjd|ddƒdd}ˆjjƒˆjj	|idd6ƒ‡‡fd†}t
jjˆjj
d	|ƒ;ˆjj|diid
6ƒˆjˆj|dƒ}WdQXˆjƒˆj|ƒ}ˆj|ƒ}ˆjˆj|ƒˆjˆƒ}ˆjidd
6dd6dd6|ƒˆj|dƒ}	ˆjdt|	ƒƒ|	|d}
ˆjˆj|
ƒˆjˆjƒˆjj	|idd6ƒˆjƒˆj|ƒ}ˆjˆj|ƒˆj|dƒ}	ˆjdt|	ƒƒ|	|d}
ˆjˆj|
ƒdS(s­Tests that the allocations on the destination node are cleaned up
        automatically when the claim is made but the actual rebuild
        via the driver fails.

        R!RTsnova-computeiR8RöR÷cs5ˆjˆƒ}ˆjˆj|ƒtjdƒ‚dS(Nt#test_evacuate_rebuild_on_dest_fails(RwR‰RÓR
R€(RrRsRä(RâR"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pytfake_rebuild<	sRÌRøRvNRƒRîR†iRŒRù(RÑR!R}RsRÂRÓRVRíRúRWR'R(R)tdriverRR«RARmRwR‰RzRPR†Rû(R"R¾RÛR>RüRR¿RÀRäRxRê((RâR"sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR'	sH
		
	
cCsÏ|jddƒ|j|j|ƒ}iid6}|jj|d|ƒ|j|j|dƒ|j|ƒ}|j|j|ƒ|j|dƒ}|j	dt
|ƒƒ||d}|j|j|ƒ|S(NRÁiÿÿÿÿRÂR8RÃiRŒ(R…RÂRÓRR«RARwR‰RzRPR†(R"RÁR~R>treqRÀRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt'_boot_then_shelve_and_check_allocationsp	s
cCsä|jj}|j|ƒ}|j||ƒ}iid6}|jj|d|ƒ|j|j|dƒ|j|ƒ}|j|j	|ƒ|j
|dƒ}|jdt|ƒƒ||d}|j|j	|ƒ|j
|ƒdS(NtunshelveR8RiRŒ(RÑR!RsRRR«RARwR‰RÓRzRPR†RÅ(R"R¾R¿R>RRÀRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_shelve_unshelve†	s
cCs©iid6}|jj|d|ƒ|j|j|idd6dd6ƒ|j|ƒ}|jidd6dd6dd	6|ƒ|j|dƒ}|jdt|ƒƒdS(
Nt
shelveOffloadR8R=R9sOS-EXT-SRV-ATTR:hostiR„R…R‡(RR«RŽRCRwRPRzR†(R"R>R¿RRÀRx((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt%_shelve_offload_and_check_allocationsŸ	s
cCse|jj}|j|ƒ}|j||ƒ}|j||ƒ|jjd|ddƒdd}|jj|idd6ƒiid6}|jj	|d|ƒ|j
|j|d	ƒ}|d
}|j||j|ƒƒ|j|ƒ}|j
|ƒ}|j|j|ƒ|j|dƒ}	|jdt|	ƒƒ|	|d}
|j|j|
ƒ|j|ƒdS(
NR!RTsnova-computeiR8RìR9R	RsOS-EXT-SRV-ATTR:hostiRŒ(RÑR!RsRRRVRíRWRR«RARPRÚRwR‰RÓRzR†RÅ(R"R¾R¿R>tsource_service_idRtcurrent_hostnametcurrent_rp_uuidtcurrent_usagesRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt&test_shelve_offload_unshelve_diff_host°	s.


cCse|jj}|j|ƒ}|j||ƒ}|j||ƒ|jjd|j|ƒddƒdd}|jj|idd6ƒiid6}|j	j
|d|ƒ|j|j	|d	ƒ}|d
}|j||ƒ|j|ƒ}|j
|ƒ}|j|j|ƒ|j|dƒ}	|jdt|	ƒƒ|	|d}
|j|j|
ƒ|j|ƒdS(
NR!RTsnova-computeiR8RìR9R	RsOS-EXT-SRV-ATTR:hostiRŒ(RÑR!RsRRRVRíRÚRWRR«RARPRwR‰RÓRzR†RÅ(R"R¾R¿R>R
RRRRRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt&test_shelve_offload_unshelve_same_hostÖ	s.

cCss|jj}|jj}|j|ƒ}|j|ƒ}|j|j|ƒ}ii|d6td6td6d6}|jj|d|ƒ|j	|j|i|d6dd6ƒ|j
ƒ|j|ƒ}|jid	d
6d	d6d	d6|ƒ|j|ƒ}|j|j|ƒ|j
|dƒ}	|jd
t|	ƒƒ|j||	ƒ|	|d}
|j|j|
ƒ|j|ƒdS(NR!tblock_migrationRÿsos-migrateLiveR8sOS-EXT-SRV-ATTR:hostRR9iRîR†RƒiRŒ(RÑR!R}RsRÂRÓR˜RR«RŽRmRwR‰RzRPR†RÔRÅ(R"R¾RÛR¿RâR>RšRÀRäRxRè((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_live_migrate_forceü	s6

cCsl|jj}|jj}|j|ƒ}|j|ƒ}|j|j|ƒ}ii|d6td6d6}|jj|d|ƒ|j	|j|i|d6dd6ƒ|j
ƒ|j|ƒ}|jidd	6dd
6dd6|ƒ|j|ƒ}|j|j|ƒ|j
|dƒ}	|jdt|	ƒƒ|j||	ƒ|	|d
}
|j|j|
ƒ|j|ƒdS(NR!Rsos-migrateLiveR8sOS-EXT-SRV-ATTR:hostRR9iRîR†RƒiRŒ(RÑR!R}RsRÂRÓR˜RR«RŽRmRwR‰RzRPR†RÔRÅ(R"R¾RÛR¿RâR>RšRÀRäRxRè((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_live_migrate$
s4

cs¿d	ˆ_ˆjj}ˆjj}ˆj|ƒ}ˆj|ƒ}ˆjˆj|ƒ}tt‡fd†}t	j
dd|ƒLii|d6td6d6}ˆjj
|d|ƒˆj|dgƒ}Wd	QXˆj||d
ƒˆj|dƒˆj|ˆjƒˆj|ƒ}	ˆjˆj|	ƒˆj|ƒ}
ˆjidd
6dd6dd6|
ƒˆj|dƒ}ˆjdt|ƒƒˆj||ƒˆjˆj||dƒˆj|ƒd	S(sÚTests the case that the LiveMigrationTask in conductor has
        called the scheduler which picked a host and created allocations
        against it in Placement, but then when the conductor task calls
        check_can_live_migrate_destination on the destination compute it
        fails. The allocations on the destination compute node should be
        cleaned up before the conductor task asks the scheduler for another
        host to try the live migration.
        cs#|dˆ_tjddƒ‚dS(NR!Rnt!test_live_migrate_pre_check_fails(tfailed_hostnameR	tMigrationPreCheckError(Rtinstancetsrc_compute_infotdst_compute_infoRtdisk_over_commit(R"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt'fake_check_can_live_migrate_destination\
s
	s<nova.virt.fake.FakeDriver.check_can_live_migrate_destinationR/R!Rsos-migrateLiveR8terrorNtsource_computetdest_computeiRƒRîR†iRŒ(RCRRÑR!R}RsRÂRÓR¼R'R(R˜RR«t_wait_for_migration_statusRPRÕRwR‰RzR†R—RÅ(R"R¾RÛR¿RâR>RRšt	migrationRÀRäRx((R"sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRJ
s<		
s,nova.virt.fake.FakeDriver.pre_live_migrationR/t7test_live_migrate_rollback_cleans_dest_node_allocationscCs”|jj}|jj}|j|ƒ}|j|ƒ}|j|j|ƒ}ii|d6td6d6}|jj|d|ƒ|j	|dgƒ}|j
|j|idd6ƒ}|j||dƒ|j||dƒ|j
|ƒ}	|j|j|	ƒ|j
|ƒ}
|jid	d
6d	d6d	d6|
ƒ|j|dƒ}|jd
t|ƒƒ|j||ƒ|j|j||dƒ|j|ƒdS(s0Tests the case that when live migration fails, either during the
        call to pre_live_migration on the destination, or during the actual
        live migration in the virt driver, the allocations on the destination
        node are rolled back since the instance is still on the source node.
        R!Rsos-migrateLiveR8RsOS-EXT-STS:task_stateRR iRƒRîR†iRŒN(RÑR!R}RsRÂRÓR˜RR«R!RŽRCRPRwR‰RzR†R—RÅ(R"tmock_pre_live_migrationR¾RÛR¿RâR>RšR"RÀRäRx((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR#’
s6
cs'ˆjjj‰ˆjˆjˆƒ‰‡‡‡fd†}ˆjd|ƒˆjjˆdid
d6ƒˆj	ˆt
jdƒˆjˆƒ}ˆj
|ƒ}ˆj|ƒ}ˆjidd6dd6dd	6|ƒˆj
ˆƒ}ˆj|ƒ}ˆjˆj|ƒˆjˆdƒ}ˆj||ƒd
S(sÃTests that allocations are removed from the destination node by
        the compute service when a cold migrate / resize fails and a reschedule
        request is sent back to conductor.
        c	sوjˆƒ}ˆj|ƒ}ˆj|ƒ}ˆjˆj|ƒˆjˆdƒ}ˆj||ƒˆjˆƒ}ˆj|ƒ}ˆjˆj|ƒˆjˆdƒ}ˆj|ƒ}ˆj||ƒtj	dƒ‚dS(NR8sSimulated _prep_resize failure.(
RÚRsRwR‰RÓRzR—R¹R
R€(	RrRsRÛRâRäRxR¿RÀRæ(R"R>R¾(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pytfake_prep_resizeÖ
ss0nova.compute.manager.ComputeManager._prep_resizeR8tmigratetcompute_prep_resizeiRƒRîR†N(RÑRR!RÂRÓRwRR«RCRhRtMIGRATERÚRsRwR‰RzR—(R"R%RÛRât
failed_usagesR¿RÀRx((R"R>R¾sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt)test_rescheduling_when_migrating_instanceÍ
s&	c
s)ˆjjdˆjjddƒdd}ˆjj|idd6ƒˆjjj}ˆj|ƒ‰ˆjˆj	|ƒ}‡‡fd†}ˆj
d	||ƒˆjd
tƒiiˆj
dd6d6}ˆjj|d|ƒˆj|tj|ƒˆj|ƒ}ˆj|ƒ}	ˆjˆj	|	ƒd
S(s‘Tests that when we resize to the same host and resize fails in
        the given method, we cleanup the allocations before rescheduling.
        R!RTsnova-computeiR8RìR9cs;ˆjˆƒ}ˆjˆjˆj|ƒtjdƒ‚dS(NsSimulated resize failure.(RwR¶RÓRÔR
R€(RrRsRt(R~R"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pytfake_resize_methodss&nova.compute.manager.ComputeManager.%sRãR-RæN(RVRíR}R!RWRÑRRsRÂRÓRwR…R˜RÔRR«RhRRçRwR‰(
R"tfailing_methodt
event_nameRîRÁR>R+RãR¿RÀ((R~R"sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt(_test_resize_to_same_host_instance_failss(cCs|jddƒdS(Nt_prep_resizeR'(R.(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt*test_resize_to_same_host_prep_resize_fails-scCs|jddƒdS(Nt_resize_instancetcompute_resize_instance(R.(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt-test_resize_instance_fails_allocation_cleanup1scCs|jddƒdS(Nt_finish_resizetcompute_finish_resize(R.(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt+test_finish_resize_fails_allocation_cleanup5sc	sˆjˆjddˆjddddgƒ}ˆjji|d6ƒ}ˆjˆj|dƒ}|d	}ˆj|ƒ}ˆjd
dƒˆjd
dƒˆjd
d
ƒˆjd
dƒˆjdƒ}ˆjdƒ}	ˆjd
ƒ}
ˆjdƒ}idd6|d6idd6|	d6id
d6|
d6idd6|d6g}ˆjdtdgddƒˆj	j
ƒˆjdƒˆ_	‡‡‡fd†}
tj
j‰ˆjd|
ƒdˆ_|d%krÆdn|}tˆd|ƒ}ˆjd|ddƒ|d}iiˆjdd6d6}ˆjj||ƒ|ˆkrÓˆjˆj|dƒ}ˆj|ƒ}ˆjˆj|ƒ||	|
|f}idd6dd 6dd!6}xn|D]%}ˆj|ƒ}ˆj||ƒq§Wn>ˆjˆj|d"ƒ}|jd	ƒ}|ˆd}ˆj||ƒ|ˆd}ˆj|ƒ}ˆj|ƒ}ˆjˆj|ƒ||	|
|f}idd6dd 6dd!6}x?|D]7}||kr£q‹nˆj|ƒ}ˆj||ƒq‹Wtjƒ}i|dd#6}tjj||ƒ}ˆjd$t|jƒƒd%S(&s…Test that when a resize attempt fails, the retry comes from the
        supplied host_list, and does not call the scheduler.
        ssome-serverRºR8R»s$155d900f-4e14-4e4c-a73d-069cbf4541e6R[R>RsOS-EXT-SRV-ATTR:hostR!RRRRRŽR•tweight_classess.AltHostWeigherR‰tfilter_schedulerRŠcs>ˆjˆkr-ˆjd7_tdƒ‚nˆ||ŽdS(NiR%(t	num_failst	Exception(RrRs(tactual_prep_resizeRR"(sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR%]ss0nova.compute.manager.ComputeManager._prep_resizeiiiRˆR-RæRvR„R…R‡RèRpiN(RxRRÓRyRARsR©R…R&R¦RúR7tcompute_managertComputeManagerR/RwR9RCtminRÔR«RwR‰RPR RRbR
t
MigrationListtget_by_filtersR†(R"Rtnum_altsR
RzR>t	inst_hostt	uuid_origtuuid_selt	uuid_alt1t	uuid_alt2t	uuid_alt3thostsR%tattemptsRyRÝRÀttarget_uuidstempty_usagettarget_uuidtusagetnew_server_hostt
expected_hostt	uuid_destRäRetfiltersR¸((R;RR"sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt'_test_resize_reschedule_uses_host_lists9s„		

		
	
	
cCs|jddƒdS(NRi(RR(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt-test_resize_reschedule_uses_host_lists_1_failœscCs|jddƒdS(NRi(RR(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt.test_resize_reschedule_uses_host_lists_3_failsŸscCs|jddddƒdS(NRiRAi(RR(R"((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt6test_resize_reschedule_uses_host_lists_not_enough_alts¢sN(/R&R'R(R˜tREQUIRES_LOCKINGRžR5RÚRmRÝRÞRàRáRéRÜRßRëRïRðRõRþRRRRR
RRRRRRR'R(R
R€R#R*R.R0R3R6RCRRRSRTRU(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRͰsR								<	&	B	5	 	!	7	@	Q	N	I				&	&	(	&	H6	3	-			c		tServerLiveMigrateForceAndAbortcBs/eZdZdZd„Zd„Zd„ZRS(sìTest Server live migrations, which delete the migration or
    force_complete it, and check the allocations after the operations.

    The test are using fakedriver to handle the force_completion and deletion
    of live migration.
    sfake.FakeLiveMigrateDrivercCs]tt|ƒjƒ|jddƒ|_|jddƒ|_|jjƒ}|d|_dS(NR!RRi(	R4RWR5R©RÑR}RRÒRÓ(R"R×((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5°s
cCsœ|jj}|jj}|j|ƒ}|j|ƒ}|j|j|ƒ}ii|d6td6d6}|jj|d|ƒ|j	|dgƒ}|jj
|d|dƒ|j|j|i|d6dd6ƒ|jƒ|j
|ƒ}|jid	d
6d	d6d	d6|ƒ|j
|ƒ}	|j|j|	ƒ|j|dƒ}
|jd
t|
ƒƒ|j||
ƒ|
|d}|j|j|ƒ|j|ƒdS(NR!Rsos-migrateLiveR8trunningsOS-EXT-SRV-ATTR:hostRR9iRîR†RƒiRŒ(RÑR!R}RsRÂRÓR˜RR«R!tforce_complete_migrationRŽRmRwR‰RzRPR†RÔRÅ(R"R¾RÛR¿RâR>RšR"RÀRäRxRè((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt test_live_migrate_force_complete¹s:

cCsœ|jj}|jj}|j|ƒ}|j|ƒ}|j|j|ƒ}ii|d6td6d6}|jj|d|ƒ|j	|dgƒ}|jj
|d|dƒ|j|j|i|d6dd6ƒ|jƒ|j
|dƒ}|jd	t|ƒƒ|j||ƒ|j|ƒ}	|j|j|	ƒ||d
}
|j|j|
ƒ|j|ƒ}|jidd6dd
6dd6|ƒ|j|ƒdS(NR!Rsos-migrateLiveR8RXsOS-EXT-SRV-ATTR:hostRR9iRŒiRîR†Rƒ(RÑR!R}RsRÂRÓR˜RR«R!tdelete_migrationRŽRmRzRPR†RÔRwR‰RÅ(R"R¾RÛR¿RâR>RšR"RxRÀRêRä((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_live_migrate_deleteäs8

(R&R'R(RžR5RZR\(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRW¦s
			+tServerRescheduleTestscBs/eZdZdZd„Zd„Zd„ZRS(sèTests server create scenarios which trigger a reschedule during
    a server build and validates that allocations in Placement
    are properly cleaned up.

    Uses a fake virt driver that fails the build on the first attempt.
    sfake.FakeRescheduleDrivercCs]tt|ƒjƒ|jddƒ|_|jddƒ|_|jjƒ}|d|_dS(NR!RRi(	R4R]R5R©RÑR}RRÒRÓ(R"R×((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5s
cCsidd6dd6}||S(NRR((R"R!RÙ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRÚ!s

c
	Cs|j|jdd|jddddgƒ}|jji|d6ƒ}|j|j|dƒ}|d	}|j|ƒ}tjd
|ƒtjd|ƒ|j|ƒ}|j|ƒ}|j	|ƒ}|j
idd
6dd6dd6|ƒ|j	|ƒ}	|j
|j|	ƒdS(s±Tests that allocations, created by the scheduler, are cleaned
        from the source node when the build fails on that node and is
        rescheduled to another node.
        ssome-serverRºR8R»s$155d900f-4e14-4e4c-a73d-069cbf4541e6R[R>RsOS-EXT-SRV-ATTR:hostsfailed on %ss
booting on %siRƒRîR†N(RxRRÓRyRARÚRDRjRsRwR‰(
R"R
RzR>RÛRtfailed_rp_uuidRâR)Rä((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt'test_rescheduling_when_booting_instance&s$	
(R&R'R(RžR5RÚR_(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR]s
		tServerBuildAbortTestscBs&eZdZdZd„Zd„ZRS(sêTests server create scenarios which trigger a build abort during
    a server build and validates that allocations in Placement
    are properly cleaned up.

    Uses a fake virt driver that aborts the build on the first attempt.
    sfake.FakeBuildAbortDrivercCsHtt|ƒjƒ|jddƒ|_|jjƒ}|d|_dS(NR!Ri(R4R`R5R©RÑRRÒRÓ(R"R×((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5Psc	Cs³|j|jdd|jddddgƒ}|jji|d6ƒ}|j|j|dƒ|jjj}|j|ƒ}|j	|ƒ}|j
id	d
6d	d6d	d6|ƒd
S(s‹Tests that allocations, created by the scheduler, are cleaned
        from the source node when the build is aborted on that node.
        ssome-serverRºR8R»s$155d900f-4e14-4e4c-a73d-069cbf4541e6R[R>RviRƒRîR†N(RxRRÓRyRARÑRR!RsRwR‰(R"R
RzRR^R)((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt test_abort_when_booting_instanceXs	(R&R'R(RžR5Ra(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR`Fs	tServerUnshelveSpawnFailTestscBs&eZdZdZd„Zd„ZRS(s·Tests server unshelve scenarios which trigger a
    VirtualInterfaceCreateException during driver.spawn() and validates that
    allocations in Placement are properly cleaned up.
    s fake.FakeUnshelveSpawnFailDrivercCsEtt|ƒjƒ|jdƒ|_|jjƒ}|d|_dS(NRi(R4RbR5R©RÑRRÒRÓ(R"R×((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5usc	CsÃ|jjj}|j|ƒ}|j|ƒ}|jidd6dd6dd6|ƒ|j|jdd|jddd	d
dƒ}|jj	i|d6ƒ}|j
|j|d
ƒ|j|ƒ}|j|j|ƒ|jddƒ|jj|didd6ƒ|j|j|idd6dd6ƒ|j|ƒ}|jidd6dd6dd6|ƒ|jj|didd6ƒ|j|tjdƒ|j|ƒ}|jidd6dd6dd6|ƒdS(s–Tests that allocations, created by the scheduler, are cleaned
        from the target node when the unshelve driver.spawn fails on that node.
        iRƒRîR†sunshelve-spawn-failRºR8R»s$155d900f-4e14-4e4c-a73d-069cbf4541e6R[RZR>RRÁRÂR=R9sOS-EXT-SRV-ATTR:hostR	tcompute_unshelve_instanceN(RÑRR!RsRwR‰RxRRÓRyRAR…R«RCRŽRhRtUNSHELVE(R"RÁR~RtR
R>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt/test_driver_spawn_fail_when_unshelving_instance}s6	(R&R'R(RžR5Re(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRbms	tServerSoftDeleteTestscBs2eZdZd„Zd„Zd„Zd„ZRS(sfake.SmallFakeDrivercCsEtt|ƒjƒ|jdƒ|_|jjƒ}|d|_dS(NRi(R4RfR5R©RÑRRÒRÓ(R"R×((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5¯scCsG|jj|dƒ|j|j|dƒ}|jƒ|j|ƒ}|j|ƒ}|j|j|ƒ|j|dƒ}|j	dt
|ƒƒ||d}|j|j|ƒtjƒ}|j
j|ƒ|jƒ|j|ƒ}|j|j|ƒ|j|dƒ}|j	dt
|ƒƒ||d}|j|j|ƒdS(NR8RªiRŒ(RRKRARmRsRwR‰RÓRzRPR†RRbRÑR¥(R"R>RÁR~RtRxRˆRe((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt!_soft_delete_and_check_allocation·s&

cCs|jddƒ|jj}|j|ƒ}|j|j|ƒ}|j||ƒtjƒt	j
ddƒ}tjd|ƒ|jtj
ƒtjƒ}|jj|ƒ|j|ƒ|j|ƒ}|jidd6dd6dd	6|ƒ|j|d
ƒ}|jdt|ƒƒdS(stAsserts that the automatic reclaim of soft deleted instance cleans
        up the allocations in placement.
        R¨iRžiRŸiR„R…R‡R8N(R…RÑR!RsRÂRÓRgRR R¡R¢R£RƒR¤RRbR¥RÃRwRPRzR†(R"RÁR~R>R¦ReRtRx((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_soft_delete_then_reclaimØs"
cCs|jddƒ|jj}|j|ƒ}|j|j|ƒ}|j||ƒiid6}|jj|d|ƒ|j	|j|dƒ}|j
|ƒ}|j|j|ƒ|j|dƒ}|j
dt|ƒƒ||d}|j|j|ƒ|jddƒ|j|ƒd	S(
siAsserts that restoring a soft deleted instance keeps the proper
        allocation in placement.
        R¨iR©R8RiRŒiN(R…RÑR!RsRÂRÓRgRR«RARwR‰RzRPR†RÅ(R"RÁR~R>RšRtRxRˆ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_soft_delete_then_restoreús"
(R&R'RžR5RgRhRi(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRf«s
		!	"tTraitsBasedSchedulingTestcBs8eZdZdZd„Zd„Zd„Zd„ZRS(s?Tests for requesting a server with required traits in Placementsfake.SmallFakeDrivercCstt|ƒjƒ|jdƒ|_|jdƒ|_|jjƒ}|d|_|j	j
|jdiidd6d6ƒdS(NRRiR8trequiredstrait:HW_CPU_X86_VMXtextra_specs(R4RjR5R©RÑR}RRÒtflavor_with_traitRVtpost_extra_spec(R"R×((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR5"
s
	
c	CsE|j|jdddd|jdddƒ}|jji|d6ƒS(	Nstrait-based-serverR»s$76fa36fc-c930-4bf3-8c8a-ea2a2420deb6RºR8R[RZR>(RxRRmRy(R"R
((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR÷.
s
cCsj|j|jjƒ}|j|dgƒ|jƒ}|j|j|dƒ}|j|jj|dƒdS(s®Tests that a server create request using a required trait ends
        up on the single compute node resource provider that also has that
        trait in Placement.
        RÉRsOS-EXT-SRV-ATTR:hostN(RsRÑR!R±R÷RARVRP(R"R~R>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyttest_traits_based_scheduling6
s
cCsa|jƒ}|j|j|dƒ}|j|dƒ|jd|ƒ|jd|ddƒdS(s¦Tests that a server create request using a required trait
        fails to find a valid host since no compute node resource providers
        have the trait.
        RvsOS-EXT-SRV-ATTR:hostR`s
No valid hostRaN(R÷RARVRÕR—(R"R>((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt*test_traits_based_scheduling_no_valid_hostE
s
(R&R'R(RžR5R÷RoRp(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRj
s			tServerTestV256CommoncBs;eZdZdZeZd„Zd„Zed„ƒZ	RS(sv2.1s2.56cCsHxAdD]9}tj|gƒ|jtjƒ|jdd|ƒqWdS(NRRthost3RgR!(shost1shost2Rr(RR‚RƒR„R7(R"R!((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_setup_compute_serviceX
s
cCsS|jddƒ}|jidd6ƒi|d6}|jjd|ƒj}|dS(NR»s$a2459075-d96c-40d5-893e-577ff92e721ctautoR[R>s/servers(RxRÍRRóRô(R"R>RšR±((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR÷_
s		
cCs5iddgd6ddgd6ddgd6}||S(NRRrR((R!ttarget_other_hosts((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt_get_target_and_other_hostsg
s
(
R&R'RRR	R˜t	ADMIN_APIRsR÷tstaticmethodRv(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRqS
s		t)ServerTestV256SingleCellMultiHostTestCasecBseZdZd„ZRS(s„Happy path test where we create a server on one host, migrate it to
    another host of our choosing and ensure it lands there.
    cCsŽ|jƒ}|j|dƒ}|d}|j|ƒd}|jj|dii|d6d6ƒ|jj|dƒ}|j||dƒdS(NRusOS-EXT-SRV-ATTR:hostiR8R!R&(R÷RARvRR«R;RP(R"R>tsource_hostttarget_host((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt(test_migrate_server_to_host_in_same_cells
s
(R&R'R(R|(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyRyo
st ServerTestV256RescheduleTestCasecBs;eZejjejddejddƒƒd„ƒZ	RS(R/R/RnsTest ExceptioncCs©|jƒ}|j|dƒ}|j|dƒ\}}|jtj|jj|dii|d6d6ƒ|jd|j	ƒ|jj
|dƒ}|j||dƒdS(NRusOS-EXT-SRV-ATTR:hostR8R!R&i(R÷RARvR“RR”RR«RPt
call_countR;tassertNotEqual(R"tmock_prep_resizeR>RIR{RÙ((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt"test_migrate_server_not_reschedule
s	(
R&R'R'R(R)R<R=R	tMigrationErrorR(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyR}
s	(LR¡R<RÛR'toslo_logRtloggingtoslo_serializationRt
oslo_utilsRRjtnova.computeRR+RRR<RRcRRR	R
tnova.objectsRRtnova.schedulerRR
t
nova.testsRR˜tnova.tests.functional.apiRtnova.tests.functionalRtnova.tests.unit.api.openstackRtnova.tests.unitRRRtnova.tests.unit.image.fakeRRRIt	nova.virtRRt	getLoggerR&RDtBaseHostWeigherRt_IntegratedTestBaseR)RXRðRñRtInstanceHelperMixinRRtTestCaseRœRÆRÍRWR]R`RbRfRjRqRyR}(((sG/usr/lib/python2.7/dist-packages/dmapi/tests/functional/test_servers.pyt<module>st@ÿÿÆÌ«	î	úÿÿÿÿúi7'>r6