diff --git a/glance/api/v2/images.py b/glance/api/v2/images.py index bfd8fd76f3..8f8dea8131 100644 --- a/glance/api/v2/images.py +++ b/glance/api/v2/images.py @@ -817,7 +817,7 @@ class RequestDeserializer(wsgi.JSONRequestDeserializer): except KeyError: msg = _("Import request requires a 'name' field.") raise webob.exc.HTTPBadRequest(explanation=msg) - if method_name not in ['glance-direct', 'web-download']: + if method_name not in CONF.enabled_import_methods: msg = _("Unknown import method name '%s'.") % method_name raise webob.exc.HTTPBadRequest(explanation=msg) diff --git a/glance/tests/unit/v2/test_images_resource.py b/glance/tests/unit/v2/test_images_resource.py index 7aceb6ae7b..7f7bc852a0 100644 --- a/glance/tests/unit/v2/test_images_resource.py +++ b/glance/tests/unit/v2/test_images_resource.py @@ -3165,10 +3165,13 @@ class TestImagesDeserializer(test_utils.BaseTestCase): def test_image_import(self): self.config(enable_image_import=True) + # Bug 1754634: make sure that what's considered valid + # is determined by the config option + self.config(enabled_import_methods=['party-time']) request = unit_test_utils.get_fake_request() import_body = { "method": { - "name": "glance-direct" + "name": "party-time" } } request.body = jsonutils.dump_as_bytes(import_body) @@ -3209,18 +3212,29 @@ class TestImagesDeserializer(test_utils.BaseTestCase): self.deserializer.import_image, request) - def test_import_image_invalid_import_method(self): - self.config(enable_image_import=True) + def _get_request_for_method(self, method_name): request = unit_test_utils.get_fake_request() import_body = { "method": { - "name": "abcd" + "name": method_name } } request.body = jsonutils.dump_as_bytes(import_body) - self.assertRaises(webob.exc.HTTPBadRequest, - self.deserializer.import_image, - request) + return request + + KNOWN_IMPORT_METHODS = ['glance-direct', 'web-download'] + + def test_import_image_invalid_import_method(self): + self.config(enable_image_import=True) + # Bug 1754634: make sure that what's considered valid + # is determined by the config option. So put known bad + # name in config, and known good name in request + self.config(enabled_import_methods=['bad-method-name']) + for m in self.KNOWN_IMPORT_METHODS: + request = self._get_request_for_method(m) + self.assertRaises(webob.exc.HTTPBadRequest, + self.deserializer.import_image, + request) class TestImagesDeserializerWithExtendedSchema(test_utils.BaseTestCase):