diff --git a/test/decorators.py b/test/decorators.py index 96addeaf1..99e3067e7 100644 --- a/test/decorators.py +++ b/test/decorators.py @@ -29,13 +29,14 @@ import os from functools import wraps from unittest import SkipTest -from typing import Tuple +from typing import Tuple, Optional from qiskit.test.testing_options import get_test_options from qiskit_ibm_runtime import least_busy from qiskit_ibm_runtime import IBMRuntimeService from qiskit_ibm_runtime.credentials import (Credentials, discover_credentials) +from qiskit_ibm_runtime.hub_group_project import HubGroupProject def requires_qe_access(func): @@ -88,7 +89,9 @@ def _wrapper(*args, **kwargs): qe_url = kwargs.pop('qe_url') service = IBMRuntimeService(qe_token, qe_url) # Get open access hgp - open_hgp = service._get_hgp() + open_hgp = _get_open_hgp(service) + if not open_hgp: + raise SkipTest('Requires open access hub/group/project.') # Get a premium hgp premium_hub, premium_group, premium_project = _get_custom_hgp() if not all([premium_hub, premium_group, premium_project]): @@ -278,6 +281,19 @@ def _get_credentials(): raise Exception('Unable to locate valid credentials.') +def _get_open_hgp(service: IBMRuntimeService) -> Optional[HubGroupProject]: + """Get open hub/group/project + + Returns: + Open hub/group/project or ``None``. + """ + hgps = service._get_hgps() + for hgp in hgps: + if hgp.is_open: + return hgp + return None + + def _get_custom_hgp() -> Tuple[str, str, str]: """Get a custom hub/group/project diff --git a/test/ibm/test_basic_server_paths.py b/test/ibm/test_basic_server_paths.py index ff627c416..9748a0ffc 100644 --- a/test/ibm/test_basic_server_paths.py +++ b/test/ibm/test_basic_server_paths.py @@ -51,6 +51,6 @@ def test_device_status_and_job_limit(self): with self.subTest(desc=desc, backend=backend): self.assertTrue(backend.status()) job_limit = backend.job_limit() - if desc == 'public_provider': + if desc == 'open_hgp': self.assertIsNotNone(job_limit.maximum_jobs) self.assertTrue(job_limit) diff --git a/test/ibm/test_ibm_provider.py b/test/ibm/test_ibm_provider.py index 5a07cea9a..0b5b78ee1 100644 --- a/test/ibm/test_ibm_provider.py +++ b/test/ibm/test_ibm_provider.py @@ -17,7 +17,6 @@ from unittest import skipIf, mock from configparser import ConfigParser from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister -from qiskit.test import providers from qiskit.providers.exceptions import QiskitBackendNotFoundError from qiskit.providers.models.backendproperties import BackendProperties @@ -317,30 +316,24 @@ def test_get_hgps_no_filter(self): self.assertIn(self.service._default_hgp, hgps) -class TestIBMProviderServices(IBMTestCase, providers.ProviderTestCase): +class TestIBMProviderServices(IBMTestCase): """Tests for services provided by the IBMRuntimeService class.""" - provider_cls = IBMRuntimeService - backend_name = 'ibmq_qasm_simulator' - - def setUp(self): + @requires_provider + def setUp(self, service, hub, group, project): """Initial test setup.""" + # pylint: disable=arguments-differ super().setUp() + self.service = service + self.hub = hub + self.group = group + self.project = project qr = QuantumRegister(1) cr = ClassicalRegister(1) self.qc1 = QuantumCircuit(qr, cr, name='circuit0') self.qc1.h(qr[0]) self.qc1.measure(qr, cr) - @requires_provider - def _get_provider(self, provider, hub, group, project): - """Return an instance of a provider.""" - # pylint: disable=arguments-differ - self.hub = hub - self.group = group - self.project = project - return provider - def test_remote_backends_exist_real_device(self): """Test if there are remote backends that are devices.""" remotes = self.service.backends(simulator=False, hub=self.hub, @@ -420,7 +413,7 @@ def test_remote_backend_properties_filter_date(self): def test_provider_backends(self): """Test provider_backends have correct attributes.""" - provider_backends = {back for back in dir(self.service.backend) - if isinstance(getattr(self.service.backend, back), IBMBackend)} + provider_backends = {back for back in dir(self.service) + if isinstance(getattr(self.service, back), IBMBackend)} backends = {back.name().lower() for back in self.service._backends.values()} self.assertEqual(provider_backends, backends) diff --git a/test/ibm/test_jupyter.py b/test/ibm/test_jupyter.py index cca208f35..1297b4913 100644 --- a/test/ibm/test_jupyter.py +++ b/test/ibm/test_jupyter.py @@ -28,13 +28,13 @@ class TestBackendInfo(IBMTestCase): @classmethod @requires_provider - def setUpClass(cls, provider, hub, group, project): + def setUpClass(cls, service, hub, group, project): # pylint: disable=arguments-differ super().setUpClass() cls.hub = hub cls.group = group cls.project = project - cls.backends = _get_backends(provider) + cls.backends = _get_backends(service) def test_config_tab(self): """Test config tab."""