Skip to content

Commit 543c8a3

Browse files
committed
Fix test submit test, update test for disabled and enabled storage key access
1 parent 62e05d9 commit 543c8a3

1 file changed

Lines changed: 62 additions & 28 deletions

File tree

src/quantum/azext_quantum/tests/latest/test_quantum_jobs.py

Lines changed: 62 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -206,34 +206,15 @@ def test_submit(self):
206206

207207
# Submit a job to Rigetti and look for SAS tokens in URIs in the output
208208
results = self.cmd("az quantum job submit -t rigetti.sim.qvm --job-input-format rigetti.quil.v1 -t rigetti.sim.qvm --job-input-file src/quantum/azext_quantum/tests/latest/input_data/bell-state.quil --job-output-format rigetti.quil-results.v1 -o json").get_output_in_json()
209-
self.assertNotIn("?sv=", results["containerUri"])
210-
self.assertNotIn("&sig=", results["containerUri"])
211-
212-
self.assertNotIn("?sv=", results["inputDataUri"])
213-
self.assertNotIn("&sig=", results["inputDataUri"])
214-
215-
self.assertNotIn("?sv=", results["outputDataUri"])
216-
self.assertNotIn("&sig=", results["outputDataUri"])
209+
self.assert_not_contains_standard_sas_params(results["containerUri"])
210+
self.assert_not_contains_standard_sas_params(results["inputDataUri"])
211+
self.assert_not_contains_standard_sas_params(results["outputDataUri"])
217212

218213
job = self.cmd(f"az quantum job show -j {results['id']} -o json").get_output_in_json()
219-
220-
self.assertIn("?sv=", job["containerUri"])
221-
self.assertIn("&st=", job["containerUri"])
222-
self.assertIn("&se=", job["containerUri"])
223-
self.assertIn("&sp=", job["containerUri"])
224-
self.assertIn("&sig=", job["containerUri"])
225-
226-
self.assertIn("?sv=", job["inputDataUri"])
227-
self.assertIn("&st=", job["inputDataUri"])
228-
self.assertIn("&se=", job["inputDataUri"])
229-
self.assertIn("&sp=", job["inputDataUri"])
230-
self.assertIn("&sig=", job["inputDataUri"])
231-
232-
self.assertIn("?sv=", job["outputDataUri"])
233-
self.assertIn("&st=", job["outputDataUri"])
234-
self.assertIn("&se=", job["outputDataUri"])
235-
self.assertIn("&sp=", job["outputDataUri"])
236-
self.assertIn("&sig=", job["outputDataUri"])
214+
215+
self.assert_contains_standard_sas_params(job["containerUri"])
216+
self.assert_contains_standard_sas_params(job["inputDataUri"])
217+
self.assert_contains_standard_sas_params(job["outputDataUri"])
237218

238219
# Run a Quil pass-through job on Rigetti
239220
results = self.cmd("az quantum run -t rigetti.sim.qvm --job-input-format rigetti.quil.v1 -t rigetti.sim.qvm --job-input-file src/quantum/azext_quantum/tests/latest/input_data/bell-state.quil --job-output-format rigetti.quil-results.v1 -o json").get_output_in_json()
@@ -291,17 +272,34 @@ def test_submit_with_disabled_then_enabled_storage_key_access(self):
291272
# Test that job submission works with disabled access keys on linked storage (/sasUri returns user delegation SAS)
292273
results = self.cmd("az quantum job submit -t rigetti.sim.qvm --job-input-format rigetti.quil.v1 --job-input-file src/quantum/azext_quantum/tests/latest/input_data/bell-state.quil --job-output-format rigetti.quil-results.v1 -o json").get_output_in_json()
293274
self.assertIn("id", results)
294-
275+
276+
job = self.cmd(f"az quantum job show -j {results['id']} -o json").get_output_in_json()
277+
self.assert_contains_standard_sas_params(job["containerUri"])
278+
self.assert_contains_standard_sas_params(job["inputDataUri"])
279+
self.assert_contains_standard_sas_params(job["outputDataUri"])
280+
self.assert_contains_user_delegation_sas_params(job["containerUri"])
281+
self.assert_contains_user_delegation_sas_params(job["inputDataUri"])
282+
self.assert_contains_user_delegation_sas_params(job["outputDataUri"])
283+
295284
# Enable access keys on the storage account
296285
updated = self.cmd(f"az storage account update -g {test_resource_group} -n {test_storage_temp} --allow-shared-key-access true -o json").get_output_in_json()
297286
self.assertTrue(updated["allowSharedKeyAccess"], "Access keys should be enabled after update")
298287

299-
time.sleep(60) # wait for the cache to update
288+
time.sleep(300) # wait for the cache to update
300289

301290
# Test that job submission works with enabled access keys on linked storage (/sasUri returns container-scoped Service SAS)
302291
results = self.cmd("az quantum job submit -t rigetti.sim.qvm --job-input-format rigetti.quil.v1 --job-input-file src/quantum/azext_quantum/tests/latest/input_data/bell-state.quil --job-output-format rigetti.quil-results.v1 -o json").get_output_in_json()
303292
self.assertIn("id", results)
304293

294+
job = self.cmd(f"az quantum job show -j {results['id']} -o json").get_output_in_json()
295+
self.assert_contains_standard_sas_params(job["containerUri"])
296+
self.assert_contains_standard_sas_params(job["inputDataUri"])
297+
self.assert_contains_standard_sas_params(job["outputDataUri"])
298+
self.assert_not_contains_user_delegation_sas_params(job["containerUri"])
299+
self.assert_not_contains_user_delegation_sas_params(job["inputDataUri"])
300+
self.assert_not_contains_user_delegation_sas_params(job["outputDataUri"])
301+
302+
# Clean up
305303
self.cmd(f'az quantum workspace delete -g {test_resource_group} -w {test_workspace_temp}')
306304
self.cmd(f'az storage account delete -g {test_resource_group} -n {test_storage_temp} --yes')
307305

@@ -397,3 +395,39 @@ def test_job_list_param_formating(self):
397395
assert False
398396
except RequiredArgumentMissingError as e:
399397
assert str(e) == ERROR_MSG_MISSING_ORDERBY_ARGUMENT
398+
399+
def assert_contains_user_delegation_sas_params(self, uri: str):
400+
"""Assert that the given URI contains user delegation SAS parameters."""
401+
self.assertIn("?skoid=", uri) # signed key object ID (service principal OID)
402+
self.assertIn("&sktid=", uri) # signed key tenant ID
403+
self.assertIn("&skt=", uri) # signed key start time
404+
self.assertIn("&ske=", uri) # signed key expiry time
405+
self.assertIn("&sks=", uri) # signed key service (b = Blob)
406+
self.assertIn("&skv=", uri) # signed key version
407+
408+
def assert_not_contains_user_delegation_sas_params(self, uri: str):
409+
"""Assert that the given URI does not contain user delegation SAS parameters."""
410+
self.assertNotIn("?skoid=", uri)
411+
self.assertNotIn("&sktid=", uri)
412+
self.assertNotIn("&skt=", uri)
413+
self.assertNotIn("&ske=", uri)
414+
self.assertNotIn("&sks=", uri)
415+
self.assertNotIn("&skv=", uri)
416+
417+
def assert_contains_standard_sas_params(self, uri: str):
418+
"""Assert that the given URI contains standard SAS parameters."""
419+
self.assertIn("sv=", uri) # SAS version
420+
self.assertIn("&st=", uri) # start time
421+
self.assertIn("&se=", uri) # expiry time
422+
self.assertIn("&sr=", uri) # signed resource (e.g. c = container)
423+
self.assertIn("&sp=", uri) # permissions
424+
self.assertIn("&sig=", uri) # signature
425+
426+
def assert_not_contains_standard_sas_params(self, uri: str):
427+
"""Assert that the given URI does not contain standard SAS parameters."""
428+
self.assertNotIn("sv=", uri)
429+
self.assertNotIn("&st=", uri)
430+
self.assertNotIn("&se=", uri)
431+
self.assertNotIn("&sr=", uri)
432+
self.assertNotIn("&sp=", uri)
433+
self.assertNotIn("&sig=", uri)

0 commit comments

Comments
 (0)