1919from pyVmomi import SoapAdapter
2020from pyVmomi import SoapStubAdapter
2121from pyVmomi import vim
22+ from pyVmomi .VmomiSupport import GetRequestContext
2223
2324
2425class SerializerTests (tests .VCRTestBase ):
26+ def test_serialize_object (self ):
27+ val = vim .vm .device .VirtualDeviceSpec .FileOperation ()
28+ # This line should not raise an exception, especially on Python 3.
29+ SoapAdapter .Serialize (val )
2530
26- def test_simple_request_serializer (self ):
27- def request_matcher (r1 , r2 ):
28- soap_msg = ('<soapenv:Body>'
29- '<RetrieveServiceContent xmlns="urn:vim25">'
30- '<_this type="ServiceInstance">'
31- 'ServiceInstance'
32- '</_this>'
33- '</RetrieveServiceContent>'
34- '</soapenv:Body>' )
35- if soap_msg in r1 .body .decode ("utf-8" ):
36- return True
37- raise SystemError ('serialization error occurred' )
31+ def test_serialize_integer (self ):
32+ lp = vim .LongPolicy ()
33+ lp .inherited = False
34+ lp .value = 100
35+ SoapAdapter .Serialize (lp , version = 'vim.version.version10' )
36+
37+ def test_serialize_float (self ):
38+ pc = vim .host .VsanInternalSystem .PolicyCost ()
39+ pc .diskSpaceToAddressSpaceRatio = 1.0
40+ SoapAdapter .Serialize (pc , version = 'vim.version.version10' )
3841
42+ def _base_serialize_test (self , soap_creator , request_matcher ):
3943 my_vcr = vcr .VCR ()
4044 my_vcr .register_matcher ('request_matcher' , request_matcher )
4145
@@ -44,28 +48,51 @@ def request_matcher(r1, r2):
4448 cassette_library_dir = tests .fixtures_path ,
4549 record_mode = 'none' ,
4650 match_on = ['request_matcher' ]) as cass :
47- host = 'vcsa'
48- port = 443
49- stub = SoapStubAdapter (host , port )
51+ stub = soap_creator ()
5052 si = vim .ServiceInstance ("ServiceInstance" , stub )
5153 content = si .RetrieveContent ()
5254 self .assertTrue (content is not None )
5355 self .assertTrue (
5456 '<_this type="ServiceInstance">ServiceInstance</_this>'
5557 in cass .requests [0 ].body .decode ("utf-8" ))
5658
57- def test_serialize_object (self ):
58- val = vim .vm .device .VirtualDeviceSpec .FileOperation ()
59- # This line should not raise an exception, especially on Python 3.
60- SoapAdapter .Serialize (val )
59+ def _body_request_matcher (self , r1 , r2 ):
60+ soap_msg = ('<soapenv:Body>'
61+ '<RetrieveServiceContent xmlns="urn:vim25">'
62+ '<_this type="ServiceInstance">'
63+ 'ServiceInstance'
64+ '</_this>'
65+ '</RetrieveServiceContent>'
66+ '</soapenv:Body>' )
67+ if soap_msg in r1 .body .decode ("utf-8" ):
68+ return True
69+ raise SystemError ('serialization error occurred' )
6170
62- def test_serialize_integer (self ):
63- lp = vim . LongPolicy ( )
64- lp . inherited = False
65- lp . value = 100
66- SoapAdapter . Serialize ( lp , version = 'vim.version.version10 ' )
71+ def _request_context_request_matcher (self , r1 , r2 ):
72+ request_context = ( '<soapenv:Header><vcSessionCookie>123456789</vcSessionCookie></soapenv:Header>' )
73+ if request_context in r1 . body . decode ( "utf-8" ):
74+ return True
75+ raise SystemError ( 'serialization error occurred ' )
6776
68- def test_serialize_float (self ):
69- pc = vim .host .VsanInternalSystem .PolicyCost ()
70- pc .diskSpaceToAddressSpaceRatio = 1.0
71- SoapAdapter .Serialize (pc , version = 'vim.version.version10' )
77+ def test_simple_request_serializer (self ):
78+ def soap_creator ():
79+ return SoapStubAdapter ('vcsa' , 443 )
80+ self ._base_serialize_test (soap_creator , self ._body_request_matcher )
81+
82+ def test_request_context_serializer_instance (self ):
83+ def request_matcher (r1 , r2 ):
84+ return self ._request_context_request_matcher (r1 , r2 ) and self ._body_request_matcher (r1 , r2 )
85+ def soap_creator ():
86+ return SoapStubAdapter ('vcsa' , 443 , requestContext = {'vcSessionCookie' : '123456789' })
87+ self ._base_serialize_test (soap_creator , request_matcher )
88+
89+ def test_request_context_serializer_global (self ):
90+ def request_matcher (r1 , r2 ):
91+ return self ._request_context_request_matcher (r1 , r2 ) and self ._body_request_matcher (r1 , r2 )
92+ def soap_creator ():
93+ return SoapStubAdapter ('vcsa' , 443 )
94+ GetRequestContext ()['vcSessionCookie' ] = '123456789'
95+ try :
96+ self ._base_serialize_test (soap_creator , request_matcher )
97+ finally :
98+ GetRequestContext ().pop ("vcSessionCookie" )
0 commit comments