Skip to content

Commit 1ac30bb

Browse files
Erno Kuvajamarkwash
andcommitted
Fixes Glance Registry V2 client
Add an optional configuration step to glance.db.get_api(). This step is then used in glance.db.registry.api in order to ensure that the registry client has been configured in time for the registry db driver's use. Closes bug: #1302345 Change-Id: Id2c52c423b411ec20bdfa76ee91837c98b1613ef Co-Authored-By: Mark J. Washenberger <mark.washenberger@markwash.net>
1 parent 0741c40 commit 1ac30bb

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

glance/db/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@
3131

3232

3333
def get_api():
34-
return importutils.import_module(CONF.data_api)
34+
api = importutils.import_module(CONF.data_api)
35+
if hasattr(api, 'configure'):
36+
api.configure()
37+
return api
3538

3639

3740
def unwrap(db_api):

glance/db/registry/api.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@
3737
LOG = logging.getLogger(__name__)
3838

3939

40+
def configure():
41+
api.configure_registry_client()
42+
43+
4044
def _get_client(func):
4145
"""Injects a client instance to the each function
4246

glance/tests/functional/db/test_registry.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,16 @@
1313
# License for the specific language governing permissions and limitations
1414
# under the License.
1515

16-
import glance.db.registry.api
17-
from glance.registry.client.v2 import api
16+
import glance.db
1817
from glance.tests import functional
1918
import glance.tests.functional.db as db_tests
2019
from glance.tests.functional.db import base
2120

2221

2322
def get_db(config):
2423
config(group='database', connection='sqlite://')
25-
api.configure_registry_client()
26-
return glance.db.registry.api
24+
config(data_api='glance.db.registry.api')
25+
return glance.db.get_api()
2726

2827

2928
def reset_db(db_api):

glance/tests/unit/test_db.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import uuid
1818

19+
import mock
1920
from oslo.config import cfg
2021

2122
from glance.common import crypt
@@ -29,6 +30,28 @@
2930
CONF = cfg.CONF
3031
CONF.import_opt('metadata_encryption_key', 'glance.common.config')
3132

33+
34+
@mock.patch('glance.openstack.common.importutils.import_module')
35+
class TestDbUtilities(test_utils.BaseTestCase):
36+
def setUp(self):
37+
super(TestDbUtilities, self).setUp()
38+
self.config(data_api='silly pants')
39+
self.api = mock.Mock()
40+
41+
def test_get_api_calls_configure_if_present(self, import_module):
42+
import_module.return_value = self.api
43+
self.assertEqual(glance.db.get_api(), self.api)
44+
import_module.assert_called_once_with('silly pants')
45+
self.api.configure.assert_called_once_with()
46+
47+
def test_get_api_skips_configure_if_missing(self, import_module):
48+
import_module.return_value = self.api
49+
del self.api.configure
50+
self.assertEqual(glance.db.get_api(), self.api)
51+
import_module.assert_called_once_with('silly pants')
52+
self.assertFalse(hasattr(self.api, 'configure'))
53+
54+
3255
UUID1 = 'c80a1a6c-bd1f-41c5-90ee-81afedb1d58d'
3356
UUID2 = 'a85abd86-55b3-4d5b-b0b4-5d0a6e6042fc'
3457
UUID3 = '971ec09a-8067-4bc8-a91f-ae3557f1c4c7'

0 commit comments

Comments
 (0)