diff --git a/azure-quantum/azure/quantum/job/job.py b/azure-quantum/azure/quantum/job/job.py index c1dd7c19..c018bd5f 100644 --- a/azure-quantum/azure/quantum/job/job.py +++ b/azure-quantum/azure/quantum/job/job.py @@ -125,7 +125,7 @@ def get_results(self, timeout_secs: float = DEFAULT_TIMEOUT): if not self.has_completed(): self.wait_until_completed(timeout_secs=timeout_secs) - if not self.details.status == "Succeeded" or self.details.status == "Completed": + if not self.details.status == "Succeeded" and not self.details.status == "Completed": if self.details.status == "Failed" and self._allow_failure_results(): job_blob_properties = self.download_blob_properties(self.details.output_data_uri) if job_blob_properties.size > 0: diff --git a/azure-quantum/tests/unit/test_job_results.py b/azure-quantum/tests/unit/test_job_results.py index 11ea4aab..9ee57341 100644 --- a/azure-quantum/tests/unit/test_job_results.py +++ b/azure-quantum/tests/unit/test_job_results.py @@ -258,11 +258,45 @@ def test_job_for_microsoft_quantum_results_shots_v2_wrong_type_raises_exception( except: self.assertTrue(True) + def test_job_get_results_with_succeeded_status(self): + """Test that get_results works correctly when job status is 'Succeeded'""" + job_results = self._get_job_results_with_status("Succeeded", "microsoft.quantum-results.v1", "{\"Histogram\": [\"[0]\", 0.50, \"[1]\", 0.50]}") + self.assertTrue(len(job_results.keys()) == 2) + self.assertEqual(job_results["[0]"], 0.50) + self.assertEqual(job_results["[1]"], 0.50) + + def test_job_get_results_with_completed_status(self): + """Test that get_results works correctly when job status is 'Completed'""" + job_results = self._get_job_results_with_status("Completed", "microsoft.quantum-results.v1", "{\"Histogram\": [\"[0]\", 0.50, \"[1]\", 0.50]}") + self.assertTrue(len(job_results.keys()) == 2) + self.assertEqual(job_results["[0]"], 0.50) + self.assertEqual(job_results["[1]"], 0.50) + + def test_job_get_results_with_failed_status_raises_runtime_error(self): + """Test that get_results raises RuntimeError when job status is 'Failed'""" + with self.assertRaises(RuntimeError) as context: + self._get_job_results_with_status("Failed", "microsoft.quantum-results.v1", "{\"Histogram\": [\"[0]\", 0.50, \"[1]\", 0.50]}") + self.assertIn("Cannot retrieve results as job execution failed", str(context.exception)) + self.assertIn("FAILED", str(context.exception)) + + def test_job_get_results_with_cancelled_status_raises_runtime_error(self): + """Test that get_results raises RuntimeError when job status is 'Cancelled'""" + with self.assertRaises(RuntimeError) as context: + self._get_job_results_with_status("Cancelled", "microsoft.quantum-results.v1", "{\"Histogram\": [\"[0]\", 0.50, \"[1]\", 0.50]}") + self.assertIn("Cannot retrieve results as job execution failed", str(context.exception)) + self.assertIn("CANCELLED", str(context.exception)) + def _get_job_results(self, output_data_format, results_as_json_str): job = self._mock_job(output_data_format, results_as_json_str) return job.get_results() + def _get_job_results_with_status(self, status, output_data_format, results_as_json_str): + job = self._mock_job(output_data_format, results_as_json_str) + job.details.status = status + + return job.get_results() + def _get_job_results_histogram(self, output_data_format, results_as_json_str): job = self._mock_job(output_data_format, results_as_json_str)