def test_get_endpoints_with_defaults(self): expected_endpoints = { "endpoints": { "https://cloud.example.org:8787/": { "compute_api_type": "OCCI", "compute_api_version": "UNKNOWN", "compute_middleware": "ooi", "compute_middleware_version": "UNKNOWN", "compute_middleware_developer": "CSIC", "endpoint_issuer": "foo", "endpoint_trusted_cas": [], "compute_endpoint_id": "03e087c8fb3b495c9a360bcba3abf914", "compute_endpoint_url": "https://cloud.example.org:8787/", }, }, "compute_service_name": "http://foo.example.org:5000/v2", } with utils.nested( mock.patch.object(self.provider.static, "get_compute_endpoint_defaults"), mock.patch.object(self.provider, "get_goc_info"), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = {} m_get_goc_info.return_value = {"gocfoo": "baz"} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints( **{"auth": {"project_id": None}} ) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with("https://cloud.example.org:8787/", False) self.assertEqual("baz", endpoints.pop("gocfoo")) self.assertDictEqual(expected_endpoints, endpoints)
def test_get_public_templates(self): """Tests that only public templates/flavors are returned""" expected_templates = {} url = "http://schemas.openstack.org/template/resource" for f in FAKES.flavors: if not f.is_public: continue expected_templates[f.id] = { "template_memory": f.ram, "template_cpu": f.vcpus, "template_id": "%s#%s" % (url, f.id), "template_native_id": "%s" % f.id, "template_platform": "i686", "template_network": "private", "template_disk": f.disk, "template_ephemeral": f.ephemeral, } self.provider.select_flavors = "public" with utils.nested( mock.patch.object(self.provider.static, "get_template_defaults"), mock.patch.object(self.provider.nova.flavors, "list"), ) as (m_get_template_defaults, m_flavors_list): m_get_template_defaults.return_value = {"template_platform": "i686"} m_flavors_list.return_value = FAKES.flavors templates = self.provider.get_templates(**{"auth": {"project_id": None}}) self.assertTrue(m_get_template_defaults.called) # Extract required fields from compute.ldif template excluding fields # extracted that are not related to the flavors self.assert_resources( expected_templates, templates, template="compute.ldif", ignored_fields=[ "compute_service_name", "compute_hypervisor", "compute_api_authn_method", "compute_total_ram", "image_marketplace_id", "compute_middleware_developer", "compute_production_level", "compute_production_level", "compute_api_type", "compute_api_endpoint_technology", "compute_api_version", "compute_endpoint_url", "compute_service_production_level", "compute_capabilities", "compute_total_cores", "compute_middleware", "compute_hypervisor_version", "compute_middleware_version", "image_description", "image_id", "image_name", "image_version", ], )
def test_get_info_from_providers(self): cases = ( ({}, {}, {}), ( { "foo": "bar" }, { "bar": "bazonk" }, { "foo": "bar", "bar": "bazonk" }, ), ( { "foo": "bar" }, { "foo": "bazonk" }, { "foo": "bazonk" }, ), ( {}, { "foo": "bazonk" }, { "foo": "bazonk" }, ), ( { "foo": "bar" }, {}, { "foo": "bar" }, ), ) # pylint: disable=abstract-class-instantiated base = cloud_info_provider.collectors.base.BaseCollector( self.opts, self.providers, None) for s, d, e in cases: with utils.nested( mock.patch.object(base.static_provider, "method"), mock.patch.object(base.dynamic_provider, "method"), ) as (m_static, m_dynamic): m_static.return_value = s m_dynamic.return_value = d self.assertEqual(e, base._get_info_from_providers("method"))
def test_get_all_templates(self): """Tests that all templates/flavors are returned""" expected_templates = {} url = 'http://schemas.openstack.org/template/resource' for f in FAKES.flavors: expected_templates[f.id] = { 'template_memory': f.ram, 'template_cpu': f.vcpus, 'template_id': '%s#%s' % (url, f.id), 'template_native_id': "%s" % f.id, 'template_platform': 'i686', 'template_network': 'private', 'template_disk': f.disk, 'template_ephemeral': f.ephemeral } self.provider.select_flavors = 'all' with utils.nested( mock.patch.object(self.provider.static, 'get_template_defaults'), mock.patch.object(self.provider.nova.flavors, 'list'), ) as (m_get_template_defaults, m_flavors_list): m_get_template_defaults.return_value = { 'template_platform': 'i686' } m_flavors_list.return_value = FAKES.flavors templates = self.provider.get_templates(**{ 'auth': {'project_id': None}}) self.assertTrue(m_get_template_defaults.called) # Extract required fields from compute.ldif template excluding fields # extracted that are not related to the flavors self.assert_resources(expected_templates, templates, template="compute.ldif", ignored_fields=[ "compute_service_name", "compute_hypervisor", "compute_api_authn_method", "compute_total_ram", "image_marketplace_id", "compute_middleware_developer", "compute_production_level", "compute_production_level", "compute_api_type", "compute_api_endpoint_technology", "compute_api_version", "compute_endpoint_url", "compute_service_production_level", "compute_capabilities", "compute_total_cores", "compute_middleware", "compute_hypervisor_version", "compute_middleware_version", "image_description", "image_id", "image_name", "image_version", ])
def test_get_info_from_providers(self): cases = ( ({}, {}, {}), ( { 'foo': 'bar' }, { 'bar': 'bazonk' }, { 'foo': 'bar', 'bar': 'bazonk' }, ), ( { 'foo': 'bar' }, { 'foo': 'bazonk' }, { 'foo': 'bazonk' }, ), ( {}, { 'foo': 'bazonk' }, { 'foo': 'bazonk' }, ), ( { 'foo': 'bar' }, {}, { 'foo': 'bar' }, ), ) base = cloud_info_provider.collectors.base.BaseCollector( self.opts, self.providers) for s, d, e in cases: with utils.nested( mock.patch.object(base.static_provider, 'method'), mock.patch.object(base.dynamic_provider, 'method')) as (m_static, m_dynamic): m_static.return_value = s m_dynamic.return_value = d self.assertEqual(e, base._get_info_from_providers('method'))
def test_get_all_templates(self): """Tests that all templates/flavors are returned""" expected_templates = {} url = 'http://schemas.openstack.org/template/resource' for f in FAKES.flavors: expected_templates[f.id] = { 'template_memory': f.ram, 'template_cpu': f.vcpus, 'template_id': '%s#%s' % (url, f.id), 'template_native_id': "%s" % f.id, 'template_platform': 'i686', 'template_network': 'private', 'template_disk': f.disk, 'template_ephemeral': f.ephemeral } self.provider.select_flavors = 'all' with utils.nested( mock.patch.object(self.provider.static, 'get_template_defaults'), mock.patch.object(self.provider.nova.flavors, 'list'), ) as (m_get_template_defaults, m_flavors_list): m_get_template_defaults.return_value = { 'template_platform': 'i686' } m_flavors_list.return_value = FAKES.flavors templates = self.provider.get_templates() assert m_get_template_defaults.called # Extract required fields from compute.ldif template excluding fields # extracted that are not related to the flavors self.assert_resources(expected_templates, templates, template="compute.ldif", ignored_fields=[ "compute_service_name", "compute_hypervisor", "compute_api_authn_method", "compute_total_ram", "image_marketplace_id", "compute_middleware_developer", "compute_production_level", "compute_production_level", "compute_api_type", "compute_api_endpoint_technology", "compute_api_version", "compute_endpoint_url", "compute_service_production_level", "compute_capabilities", "compute_total_cores", "compute_middleware", "compute_hypervisor_version", "compute_middleware_version", "image_description", "image_id", "image_name", "image_version", ])
def test_get_shares(self): with utils.nested( mock.patch.object(self.provider.static, "get_compute_shares"), ) as (m_get_compute_shares,): m_get_compute_shares.return_value = { "vo1": {"auth": {"project_id": "foobar"}} } shares = self.provider.get_compute_shares(**{"auth": {"project_id": None}}) self.assertEqual("foobar", shares["vo1"]["project"]) self.assertTrue(m_get_compute_shares.called)
def test_get_shares(self): with utils.nested( mock.patch.object(self.provider.static, 'get_compute_shares'), ) as (m_get_compute_shares, ): m_get_compute_shares.return_value = { 'vo1': {'auth': {'project_id': 'foobar'}} } shares = self.provider.get_compute_shares(**{ 'auth': {'project_id': None}}) self.assertEqual('foobar', shares['vo1']['project']) self.assertTrue(m_get_compute_shares.called)
def test_rescope_simple(self): self.provider.auth_refresher = None with utils.nested( mock.patch("keystoneauth1.loading." "load_auth_from_argparse_arguments"), mock.patch("keystoneauth1.loading." "load_session_from_argparse_arguments"), ) as (_, m_load_session): session = mock.Mock() session.get_project_id.return_value = "foo" m_load_session.return_value = session self.provider._rescope_project("foo", "bar") self.assertEqual("foo", self.provider.project_id)
def test_get_templates_with_defaults(self): expected_templates = {} url = "http://schemas.openstack.org/template/resource" for f in FAKES.flavors: expected_templates[f.id] = { "template_memory": f.ram, "template_cpu": f.vcpus, "template_id": "%s#%s" % (url, f.id), "template_native_id": "%s" % f.id, "template_platform": "amd64", "template_network": "private", "template_disk": f.disk, "template_ephemeral": f.ephemeral, } with utils.nested( mock.patch.object(self.provider.static, "get_template_defaults"), mock.patch.object(self.provider.nova.flavors, "list"), ) as (m_get_template_defaults, m_flavors_list): m_get_template_defaults.return_value = {} m_flavors_list.return_value = FAKES.flavors templates = self.provider.get_templates(**{"auth": {"project_id": None}}) self.assertTrue(m_get_template_defaults.called) self.assert_resources( expected_templates, templates, template="compute.ldif", ignored_fields=[ "compute_api_type", "compute_api_version", "compute_api_endpoint_technology", "compute_capabilities", "compute_endpoint_url", "compute_hypervisor", "compute_hypervisor_version", "compute_middleware", "compute_middleware_developer", "compute_middleware_version", "compute_production_level", "compute_api_authn_method", "compute_service_name", "compute_service_production_level", "compute_total_cores", "compute_total_ram", "image_id", "image_name", "image_os_family", "image_os_name", "image_os_version", "image_platform", "image_version", "image_description", "image_marketplace_id", ], )
def test_load_templates(self): self.opts.template_dir = "foobar" tpls = ("foo", "bar") expected_tpls = { "foo": "foobar/foo.%s" % self.opts.template_extension, "bar": "foobar/bar.%s" % self.opts.template_extension, } base = cloud_info_provider.formatters.base.BaseFormatter() with utils.nested(mock.patch.object(base, "templates", tpls)): base._load_templates(self.opts.template_dir) templates_files = base.__dict__["templates_files"] self.assertEqual(templates_files, expected_tpls)
def test_load_templates(self): self.opts.template_dir = 'foobar' tpls = ('foo', 'bar') expected_tpls = { 'foo': 'foobar/foo.%s' % self.opts.template_extension, 'bar': 'foobar/bar.%s' % self.opts.template_extension } bdii = cloud_info_provider.core.BaseBDII(self.opts) with utils.nested(mock.patch.object(bdii, 'templates', tpls)): bdii.load_templates() templates_files = bdii.__dict__['templates_files'] self.assertEqual(templates_files, expected_tpls)
def test_load_templates(self): self.opts.template_dir = 'foobar' tpls = ('foo', 'bar') expected_tpls = { 'foo': 'foobar/foo.%s' % self.opts.template_extension, 'bar': 'foobar/bar.%s' % self.opts.template_extension } base = cloud_info_provider.formatters.base.BaseFormatter() with utils.nested( mock.patch.object(base, 'templates', tpls)): base._load_templates(self.opts.template_dir) templates_files = base.__dict__['templates_files'] self.assertEqual(templates_files, expected_tpls)
def test_get_markeplace_images(self): expected_images = ['foo.id'] self.provider.all_images = False with utils.nested( mock.patch.object(self.provider.static, 'get_image_defaults'), mock.patch.object(self.provider.glance.images, 'list'), ) as (m_get_image_defaults, m_images_list): m_get_image_defaults.return_value = {} m_images_list.return_value = FAKES.images images = self.provider.get_images(**{'auth': {'project_id': None}}) self.assertTrue(m_get_image_defaults.called) self.assertItemsEqual(images.keys(), expected_images)
def test_get_markeplace_images(self): expected_images = ['foo.id'] self.provider.all_images = False with utils.nested( mock.patch.object(self.provider.static, 'get_image_defaults'), mock.patch.object(self.provider.glance.images, 'list'), ) as (m_get_image_defaults, m_images_list): m_get_image_defaults.return_value = {} m_images_list.return_value = FAKES.images images = self.provider.get_images(**{'auth': {'project_id': None}}) self.assertTrue(m_get_image_defaults.called) self.assertItemsEqual(images.keys(), expected_images)
def test_format_template(self): self.opts.template_dir = 'foobar' tpl_contents = 'foo ${attributes["fobble"]}' tpl_files = { 'foo': 'foobar/foo.%s' % self.opts.template_extension, 'bar': 'foobar/bar.%s' % self.opts.template_extension } info = {'fobble': 'burble', 'brongle': 'farbla'} expected = 'foo burble' base = cloud_info_provider.formatters.base.BaseFormatter() with utils.nested( mock.patch.object(base, 'templates_files', tpl_files), mock.patch('mako.util.open', mock.mock_open(read_data=tpl_contents), create=True) ): self.assertEqual(expected, base._format_template('foo', info))
def test_get_templates_with_defaults_from_static(self): expected_templates = {} url = 'http://schemas.openstack.org/template/resource' for f in FAKES.flavors: expected_templates[f.id] = { 'template_memory': f.ram, 'template_cpu': f.vcpus, 'template_id': '%s#%s' % (url, f.id), 'template_native_id': "%s" % f.id, 'template_platform': 'i686', 'template_network': 'private', 'template_disk': f.disk, 'template_ephemeral': f.ephemeral, } with utils.nested( mock.patch.object(self.provider.static, 'get_template_defaults'), mock.patch.object(self.provider.nova.flavors, 'list'), ) as (m_get_template_defaults, m_flavors_list): m_get_template_defaults.return_value = { 'template_platform': 'i686' } m_flavors_list.return_value = FAKES.flavors templates = self.provider.get_templates( **{'auth': { 'project_id': None }}) self.assertTrue(m_get_template_defaults.called) self.assert_resources( expected_templates, templates, template="compute.ldif", ignored_fields=[ "compute_api_type", "compute_api_version", "compute_api_endpoint_technology", "compute_capabilities", "compute_endpoint_url", "compute_hypervisor", "compute_hypervisor_version", "compute_middleware", "compute_middleware_developer", "compute_middleware_version", "compute_production_level", "compute_api_authn_method", "compute_service_name", "compute_service_production_level", "compute_total_cores", "compute_total_ram", "image_id", "image_name", "image_version", "image_description", "image_marketplace_id" ])
def test_main(self): with utils.nested( mock.patch.object(cloud_info_provider.core, 'parse_opts'), mock.patch('cloud_info_provider.core.CloudBDII'), mock.patch('cloud_info_provider.core.ComputeBDII'), mock.patch('cloud_info_provider.core.StorageBDII')) as (m0, m1, m2, m3): m0.return_value = None for i in (m1, m2, m3): i = i.return_value i.render.return_value = 'foo' self.assertIsNone(cloud_info_provider.core.main()) for i in (m0, m1, m2, m3): assert i.called
def test_get_shares(self): with utils.nested( mock.patch.object( self.provider.static, 'get_compute_shares'), ) as (m_get_compute_shares, ): m_get_compute_shares.return_value = { 'vo1': { 'auth': { 'project_id': 'foobar' } } } shares = self.provider.get_compute_shares( **{'auth': { 'project_id': None }}) self.assertEqual('foobar', shares['vo1']['project']) self.assertTrue(m_get_compute_shares.called)
def test_format_template(self): self.opts.template_dir = "foobar" tpl_contents = 'foo ${attributes["fobble"]}' tpl_files = { "foo": "foobar/foo.%s" % self.opts.template_extension, "bar": "foobar/bar.%s" % self.opts.template_extension, } info = {"fobble": "burble", "brongle": "farbla"} expected = "foo burble" base = cloud_info_provider.formatters.base.BaseFormatter() with utils.nested( mock.patch.object(base, "templates_files", tpl_files), mock.patch( "mako.util.open", mock.mock_open(read_data=tpl_contents), create=True ), ): self.assertEqual(expected, base._format_template("foo", info))
def test_get_endpoints_with_defaults_from_static(self): expected_endpoints = { 'endpoints': { 'http://foo.example.org:5000/v2': { 'compute_api_type': 'OpenStack', # As version is extracted from the URL default is not used 'compute_api_version': 'v2', 'compute_endpoint_id': '1b7f14c87d8c42ad962f4d3a5fd13a77', 'compute_nova_endpoint_url': 'https://cloud.example.org:8774/v1.1/ce2d', 'compute_nova_api_version': 'v1.1', 'compute_endpoint_url': 'http://foo.example.org:5000/v2'} }, 'compute_middleware_developer': 'OpenStack', 'compute_middleware': 'OpenStack Nova', 'compute_service_name': 'http://foo.example.org:5000/v2', } with utils.nested( mock.patch.object(self.provider.static, 'get_compute_endpoint_defaults'), mock.patch('cloud_info_provider.providers.gocdb.get_goc_info'), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = { 'compute_occi_api_version': '11.11', 'compute_compute_api_version': '99.99', } m_get_goc_info.return_value = {'gocfoo': 'baz'} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints(**{ 'auth': {'project_id': None}}) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with( 'http://foo.example.org:5000/v2', 'org.openstack.nova', False) self.assertEqual('baz', endpoints.pop('gocfoo')) for k, v in expected_endpoints['endpoints'].items(): self.assertDictContainsSubset(v, endpoints['endpoints'].get(k, {}))
def test_get_endpoints_with_defaults_from_static(self): expected_endpoints = { 'endpoints': { 'http://foo.example.org:5000/v2': { 'compute_api_type': 'OpenStack', # As version is extracted from the URL default is not used 'compute_api_version': 'v2', 'compute_endpoint_id': '1b7f14c87d8c42ad962f4d3a5fd13a77', 'compute_nova_endpoint_url': 'https://cloud.example.org:8774/v1.1/ce2d', 'compute_nova_api_version': 'v1.1', 'compute_endpoint_url': 'http://foo.example.org:5000/v2' } }, 'compute_middleware_developer': 'OpenStack', 'compute_middleware': 'OpenStack Nova', 'compute_service_name': 'http://foo.example.org:5000/v2', } with utils.nested( mock.patch.object(self.provider.static, 'get_compute_endpoint_defaults'), mock.patch('cloud_info_provider.providers.gocdb.get_goc_info'), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = { 'compute_occi_api_version': '11.11', 'compute_compute_api_version': '99.99', } m_get_goc_info.return_value = {'gocfoo': 'baz'} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints( **{'auth': { 'project_id': None }}) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with('http://foo.example.org:5000/v2', 'org.openstack.nova', False) self.assertEqual('baz', endpoints.pop('gocfoo')) for k, v in expected_endpoints['endpoints'].items(): self.assertDictContainsSubset(v, endpoints['endpoints'].get(k, {}))
def test_get_endpoints_with_defaults(self): expected_endpoints = { 'endpoints': { 'http://foo.example.org:5000/v2': { 'compute_api_type': 'OpenStack', 'compute_api_version': 'v2', 'compute_nova_endpoint_url': 'https://cloud.example.org:8774/v1.1/ce2d', 'compute_nova_api_version': 'v1.1', 'compute_middleware': 'OpenStack Nova', 'compute_middleware_version': 'UNKNOWN', 'compute_middleware_developer': 'OpenStack Foundation', 'endpoint_issuer': self.provider.keystone_cert_issuer, 'endpoint_trusted_cas': [], 'compute_endpoint_id': '1b7f14c87d8c42ad962f4d3a5fd13a77', 'compute_endpoint_url': 'http://foo.example.org:5000/v2'} }, 'compute_service_name': 'http://foo.example.org:5000/v2', } with utils.nested( mock.patch.object(self.provider.static, 'get_compute_endpoint_defaults'), mock.patch('cloud_info_provider.providers.gocdb.get_goc_info'), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = {} m_get_goc_info.return_value = {'gocfoo': 'baz'} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints(**{ 'auth': {'project_id': None}}) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with( 'http://foo.example.org:5000/v2', 'org.openstack.nova', False) self.assertEqual('baz', endpoints.pop('gocfoo')) self.assertDictEqual(expected_endpoints, endpoints)
def test_get_endpoints_with_defaults(self): expected_endpoints = { 'endpoints': { 'http://foo.example.org:5000/v2': { 'compute_api_type': 'OpenStack', 'compute_api_version': 'v2', 'compute_nova_endpoint_url': 'https://cloud.example.org:8774/v1.1/ce2d', 'compute_nova_api_version': 'v1.1', 'compute_middleware': 'OpenStack Nova', 'compute_middleware_version': 'UNKNOWN', 'compute_middleware_developer': 'OpenStack Foundation', 'endpoint_issuer': self.provider.keystone_cert_issuer, 'endpoint_trusted_cas': [], 'compute_endpoint_id': '1b7f14c87d8c42ad962f4d3a5fd13a77', 'compute_endpoint_url': 'http://foo.example.org:5000/v2' } }, 'compute_service_name': 'http://foo.example.org:5000/v2', } with utils.nested( mock.patch.object(self.provider.static, 'get_compute_endpoint_defaults'), mock.patch('cloud_info_provider.providers.gocdb.get_goc_info'), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = {} m_get_goc_info.return_value = {'gocfoo': 'baz'} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints( **{'auth': { 'project_id': None }}) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with('http://foo.example.org:5000/v2', 'org.openstack.nova', False) self.assertEqual('baz', endpoints.pop('gocfoo')) self.assertDictEqual(expected_endpoints, endpoints)
def test_get_endpoints_with_defaults_from_static(self): expected_endpoints = { 'endpoints': { 'https://cloud.example.org:8787/': { 'compute_api_type': 'OCCI', 'compute_api_version': '11.11', 'compute_endpoint_id': '03e087c8fb3b495c9a360bcba3abf914', 'compute_endpoint_url': 'https://cloud.example.org:8787/' }, }, 'compute_middleware_developer': 'OpenStack', 'compute_middleware': 'OpenStack Nova', 'compute_service_name': 'http://foo.example.org:5000/v2', } with utils.nested( mock.patch.object(self.provider.static, 'get_compute_endpoint_defaults'), mock.patch('cloud_info_provider.providers.gocdb.get_goc_info'), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = { 'compute_occi_api_version': '11.11', 'compute_compute_api_version': '99.99', } m_get_goc_info.return_value = {'gocfoo': 'baz'} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints( **{'auth': { 'project_id': None }}) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with( 'https://cloud.example.org:8787/', 'eu.egi.cloud.vm-management.occi', False) self.assertEqual('baz', endpoints.pop('gocfoo')) for k, v in expected_endpoints['endpoints'].items(): self.assertDictContainsSubset(v, endpoints['endpoints'].get(k, {}))
def test_get_endpoints_with_defaults(self): expected_endpoints = { 'endpoints': { 'https://cloud.example.org:8787/': { 'compute_api_type': 'OCCI', 'compute_api_version': 'UNKNOWN', 'compute_middleware': 'ooi', 'compute_middleware_version': 'UNKNOWN', 'compute_middleware_developer': 'CSIC', 'endpoint_issuer': self.provider.keystone_cert_issuer, 'endpoint_trusted_cas': [], 'compute_endpoint_id': '03e087c8fb3b495c9a360bcba3abf914', 'compute_endpoint_url': 'https://cloud.example.org:8787/' }, }, 'compute_service_name': 'http://foo.example.org:5000/v2', } with utils.nested( mock.patch.object(self.provider.static, 'get_compute_endpoint_defaults'), mock.patch('cloud_info_provider.providers.gocdb.get_goc_info'), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = {} m_get_goc_info.return_value = {'gocfoo': 'baz'} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints( **{'auth': { 'project_id': None }}) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with( 'https://cloud.example.org:8787/', 'eu.egi.cloud.vm-management.occi', False) self.assertEqual('baz', endpoints.pop('gocfoo')) self.assertDictEqual(expected_endpoints, endpoints)
def test_get_endpoints_with_defaults_from_static(self): expected_endpoints = { 'endpoints': { 'https://cloud.example.org:8787/': { 'compute_api_type': 'OCCI', 'compute_api_version': '11.11', 'compute_endpoint_id': '03e087c8fb3b495c9a360bcba3abf914', 'compute_endpoint_url': 'https://cloud.example.org:8787/'}, }, 'compute_middleware_developer': 'OpenStack', 'compute_middleware': 'OpenStack Nova', 'compute_service_name': 'http://foo.example.org:5000/v2', } with utils.nested( mock.patch.object(self.provider.static, 'get_compute_endpoint_defaults'), mock.patch('cloud_info_provider.providers.gocdb.get_goc_info'), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = { 'compute_occi_api_version': '11.11', 'compute_compute_api_version': '99.99', } m_get_goc_info.return_value = {'gocfoo': 'baz'} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints(**{ 'auth': {'project_id': None}}) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with( 'https://cloud.example.org:8787/', 'eu.egi.cloud.vm-management.occi', False) self.assertEqual('baz', endpoints.pop('gocfoo')) for k, v in expected_endpoints['endpoints'].items(): self.assertDictContainsSubset(v, endpoints['endpoints'].get(k, {}))
def test_get_endpoints_with_defaults_from_static(self): expected_endpoints = { "endpoints": { "http://foo.example.org:5000/v2": { "compute_api_type": "OpenStack", # As version is extracted from the URL default is not used "compute_api_version": "v2", "compute_endpoint_id": "1b7f14c87d8c42ad962f4d3a5fd13a77", "compute_nova_endpoint_url": "https://cloud.example.org:8774/v1.1/ce2d", "compute_nova_api_version": "v1.1", "compute_endpoint_url": "http://foo.example.org:5000/v2", } }, "compute_middleware_developer": "OpenStack", "compute_middleware": "OpenStack Nova", "compute_service_name": "http://foo.example.org:5000/v2", } with utils.nested( mock.patch.object(self.provider.static, "get_compute_endpoint_defaults"), mock.patch.object(self.provider, "get_goc_info"), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = { "compute_occi_api_version": "11.11", "compute_compute_api_version": "99.99", } m_get_goc_info.return_value = {"gocfoo": "baz"} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints( **{"auth": {"project_id": None}} ) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with("http://foo.example.org:5000/v2", False) self.assertEqual("baz", endpoints.pop("gocfoo")) for k, v in expected_endpoints["endpoints"].items(): self.assertDictContainsSubset(v, endpoints["endpoints"].get(k, {}))
def test_get_endpoints_with_defaults(self): expected_endpoints = { 'endpoints': { 'https://cloud.example.org:8787/': { 'compute_api_type': 'OCCI', 'compute_api_version': 'UNKNOWN', 'compute_middleware': 'ooi', 'compute_middleware_version': 'UNKNOWN', 'compute_middleware_developer': 'CSIC', 'endpoint_issuer': self.provider.keystone_cert_issuer, 'endpoint_trusted_cas': [], 'compute_endpoint_id': '03e087c8fb3b495c9a360bcba3abf914', 'compute_endpoint_url': 'https://cloud.example.org:8787/'}, }, 'compute_service_name': 'http://foo.example.org:5000/v2', } with utils.nested( mock.patch.object(self.provider.static, 'get_compute_endpoint_defaults'), mock.patch('cloud_info_provider.providers.gocdb.get_goc_info'), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = {} m_get_goc_info.return_value = {'gocfoo': 'baz'} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints(**{ 'auth': {'project_id': None}}) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with( 'https://cloud.example.org:8787/', 'eu.egi.cloud.vm-management.occi', False) self.assertEqual('baz', endpoints.pop('gocfoo')) self.assertDictEqual(expected_endpoints, endpoints)
def test_get_endpoints_with_defaults(self): expected_endpoints = { "endpoints": { "http://foo.example.org:5000/v2": { "compute_api_type": "OpenStack", "compute_api_version": "v2", "compute_nova_endpoint_url": "https://cloud.example.org:8774/v1.1/ce2d", "compute_nova_api_version": "v1.1", "compute_middleware": "OpenStack Nova", "compute_middleware_version": "UNKNOWN", "compute_middleware_developer": "OpenStack Foundation", "endpoint_issuer": "foo", "endpoint_trusted_cas": [], "compute_endpoint_id": "1b7f14c87d8c42ad962f4d3a5fd13a77", "compute_endpoint_url": "http://foo.example.org:5000/v2", } }, "compute_service_name": "http://foo.example.org:5000/v2", } with utils.nested( mock.patch.object(self.provider.static, "get_compute_endpoint_defaults"), mock.patch.object(self.provider, "get_goc_info"), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = {} m_get_goc_info.return_value = {"gocfoo": "baz"} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints( **{"auth": {"project_id": None}} ) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with("http://foo.example.org:5000/v2", False) self.assertEqual("baz", endpoints.pop("gocfoo")) self.assertDictEqual(expected_endpoints, endpoints)
def test_get_endpoints_with_defaults_from_static(self): expected_endpoints = { "endpoints": { "https://cloud.example.org:8787/": { "compute_api_type": "OCCI", "compute_api_version": "11.11", "compute_endpoint_id": "03e087c8fb3b495c9a360bcba3abf914", "compute_endpoint_url": "https://cloud.example.org:8787/", }, }, "compute_middleware_developer": "OpenStack", "compute_middleware": "OpenStack Nova", "compute_service_name": "http://foo.example.org:5000/v2", } with utils.nested( mock.patch.object(self.provider.static, "get_compute_endpoint_defaults"), mock.patch.object(self.provider, "get_goc_info"), ) as (m_get_endpoint_defaults, m_get_goc_info): m_get_endpoint_defaults.return_value = { "compute_occi_api_version": "11.11", "compute_compute_api_version": "99.99", } m_get_goc_info.return_value = {"gocfoo": "baz"} r = mock.Mock() r.service_catalog = FAKES.catalog self.provider.auth_plugin.get_access.return_value = r endpoints = self.provider.get_compute_endpoints( **{"auth": {"project_id": None}} ) self.assertTrue(m_get_endpoint_defaults.called) m_get_goc_info.assert_called_with("https://cloud.example.org:8787/", False) self.assertEqual("baz", endpoints.pop("gocfoo")) for k, v in expected_endpoints["endpoints"].items(): self.assertDictContainsSubset(v, endpoints["endpoints"].get(k, {}))
def test_get_images(self): # XXX move this to a custom class? # XXX add docker information expected_images = { 'bar id': { 'name': 'barimage', 'id': 'bar id', 'metadata': {}, 'file': 'v2/bar id/file', 'image_description': None, 'image_name': 'barimage', 'image_os_family': None, 'image_os_name': None, 'image_os_version': None, 'image_platform': 'amd64', 'image_version': None, 'image_marketplace_id': "%s" % urljoin(self.provider.glance .http_client .get_endpoint(), 'v2/bar id/file'), 'image_id': 'http://schemas.openstack.org/template/os#bar_id', 'image_native_id': 'bar id', 'image_accel_type': None, 'image_access_info': 'none', 'image_minimal_cpu': None, 'image_minimal_ram': None, 'image_minimal_accel': None, 'image_recommended_cpu': None, 'image_recommended_ram': None, 'image_recommended_accel': None, 'image_size': None, 'image_software': [], 'image_traffic_in': [], 'image_traffic_out': [], 'image_context_format': None, 'other_info': [], }, 'foo.id': { 'name': 'fooimage', 'id': 'foo.id', 'metadata': {}, 'marketplace': 'http://example.org/', 'file': 'v2/foo.id/file', 'image_description': None, 'image_name': 'fooimage', 'image_os_family': None, 'image_os_name': None, 'image_os_version': None, 'image_platform': 'amd64', 'image_version': None, 'image_marketplace_id': 'http://example.org/', 'image_id': 'http://schemas.openstack.org/template/os#foo-id', 'image_native_id': 'foo.id', 'image_accel_type': None, 'image_access_info': 'none', 'image_minimal_cpu': None, 'image_minimal_ram': None, 'image_minimal_accel': None, 'image_recommended_cpu': None, 'image_recommended_ram': None, 'image_recommended_accel': None, 'image_size': None, 'image_software': [], 'image_traffic_in': [], 'image_traffic_out': [], 'image_context_format': None, 'other_info': ['base_mpuri=foobar'], 'APPLIANCE_ATTRIBUTES': '{"ad:base_mpuri": "foobar"}', }, 'baz id': { 'name': 'bazimage', 'id': 'baz id', 'file': 'v2/baz id/file', 'image_description': None, 'image_name': 'bazimage', 'image_os_family': None, 'image_os_name': None, 'image_os_version': None, 'image_platform': 'amd64', 'image_version': None, 'image_marketplace_id': "%s" % urljoin(self.provider.glance .http_client .get_endpoint(), 'v2/baz id/file'), 'image_id': 'http://schemas.openstack.org/template/os#baz_id', 'image_native_id': 'baz id', 'docker_id': 'sha1:xxxxxxxxxxxxxxxxxxxxxxxxxx', 'docker_tag': 'latest', 'docker_name': 'test/image', 'image_accel_type': None, 'image_access_info': 'none', 'image_minimal_cpu': None, 'image_minimal_ram': None, 'image_minimal_accel': None, 'image_recommended_cpu': None, 'image_recommended_ram': None, 'image_recommended_accel': None, 'image_size': None, 'image_software': [], 'image_traffic_in': [], 'image_traffic_out': [], 'image_context_format': None, 'other_info': [], } } with utils.nested( mock.patch.object(self.provider.static, 'get_image_defaults'), mock.patch.object(self.provider.glance.images, 'list'), ) as (m_get_image_defaults, m_images_list): m_get_image_defaults.return_value = {} m_images_list.return_value = FAKES.images images = self.provider.get_images(**{'auth': {'project_id': None}}) self.assertTrue(m_get_image_defaults.called) # Filter fields from the template that are not related to images self.assert_resources(expected_images, images, template="compute.ldif", ignored_fields=["compute_service_name", "compute_api_type", "compute_api_version", ("compute_api_endpoint" "_technology"), "compute_capabilities", "compute_api_authn_method", "compute_total_ram", "compute_middleware", "compute_middleware_developer", "compute_middleware_version", "compute_endpoint_url", "compute_hypervisor", "compute_hypervisor_version", "compute_production_level", ("compute_service" "_production_level"), "compute_total_cores", "compute_total_ram", "template_platform", "template_cpu", "template_memory", "template_network", "template_disk", "template_ephemeral", "template_id"])
def test_get_images(self): # XXX move this to a custom class? # XXX add docker information expected_images = { 'bar id': { 'name': 'barimage', 'id': 'bar id', 'metadata': {}, 'file': 'v2/bar id/file', 'image_description': None, 'image_name': 'barimage', 'image_os_family': None, 'image_os_name': None, 'image_os_version': None, 'image_platform': 'amd64', 'image_version': None, 'image_marketplace_id': "%s" % urljoin(self.provider.glance.http_client.get_endpoint(), 'v2/bar id/file'), 'image_id': 'http://schemas.openstack.org/template/os#bar_id', 'image_native_id': 'bar id', 'image_accel_type': None, 'image_access_info': 'none', 'image_minimal_cpu': None, 'image_minimal_ram': None, 'image_minimal_accel': None, 'image_recommended_cpu': None, 'image_recommended_ram': None, 'image_recommended_accel': None, 'image_size': None, 'image_software': [], 'image_traffic_in': [], 'image_traffic_out': [], 'image_context_format': None, 'other_info': [], }, 'foo.id': { 'name': 'fooimage', 'id': 'foo.id', 'metadata': {}, 'marketplace': 'http://example.org/', 'file': 'v2/foo.id/file', 'image_description': None, 'image_name': 'fooimage', 'image_os_family': None, 'image_os_name': None, 'image_os_version': None, 'image_platform': 'amd64', 'image_version': None, 'image_marketplace_id': 'http://example.org/', 'image_id': 'http://schemas.openstack.org/template/os#foo-id', 'image_native_id': 'foo.id', 'image_accel_type': None, 'image_access_info': 'none', 'image_minimal_cpu': None, 'image_minimal_ram': None, 'image_minimal_accel': None, 'image_recommended_cpu': None, 'image_recommended_ram': None, 'image_recommended_accel': None, 'image_size': None, 'image_software': [], 'image_traffic_in': [], 'image_traffic_out': [], 'image_context_format': None, 'other_info': ['base_mpuri=foobar'], 'APPLIANCE_ATTRIBUTES': '{"ad:base_mpuri": "foobar"}', }, 'baz id': { 'name': 'bazimage', 'id': 'baz id', 'file': 'v2/baz id/file', 'image_description': None, 'image_name': 'bazimage', 'image_os_family': None, 'image_os_name': None, 'image_os_version': None, 'image_platform': 'amd64', 'image_version': None, 'image_marketplace_id': "%s" % urljoin(self.provider.glance.http_client.get_endpoint(), 'v2/baz id/file'), 'image_id': 'http://schemas.openstack.org/template/os#baz_id', 'image_native_id': 'baz id', 'docker_id': 'sha1:xxxxxxxxxxxxxxxxxxxxxxxxxx', 'docker_tag': 'latest', 'docker_name': 'test/image', 'image_accel_type': None, 'image_access_info': 'none', 'image_minimal_cpu': None, 'image_minimal_ram': None, 'image_minimal_accel': None, 'image_recommended_cpu': None, 'image_recommended_ram': None, 'image_recommended_accel': None, 'image_size': None, 'image_software': [], 'image_traffic_in': [], 'image_traffic_out': [], 'image_context_format': None, 'other_info': [], } } with utils.nested( mock.patch.object(self.provider.static, 'get_image_defaults'), mock.patch.object(self.provider.glance.images, 'list'), ) as (m_get_image_defaults, m_images_list): m_get_image_defaults.return_value = {} m_images_list.return_value = FAKES.images images = self.provider.get_images(**{'auth': {'project_id': None}}) self.assertTrue(m_get_image_defaults.called) # Filter fields from the template that are not related to images self.assert_resources( expected_images, images, template="compute.ldif", ignored_fields=[ "compute_service_name", "compute_api_type", "compute_api_version", ("compute_api_endpoint" "_technology"), "compute_capabilities", "compute_api_authn_method", "compute_total_ram", "compute_middleware", "compute_middleware_developer", "compute_middleware_version", "compute_endpoint_url", "compute_hypervisor", "compute_hypervisor_version", "compute_production_level", ("compute_service" "_production_level"), "compute_total_cores", "compute_total_ram", "template_platform", "template_cpu", "template_memory", "template_network", "template_disk", "template_ephemeral", "template_id" ])
def test_get_images(self): # XXX move this to a custom class? # XXX add docker information expected_images = { "bar id": { "name": "barimage", "id": "bar id", "metadata": {}, "file": "v2/bar id/file", "image_description": None, "image_name": "barimage", "image_os_family": None, "image_os_name": None, "image_os_version": None, "image_platform": "amd64", "image_version": None, "image_marketplace_id": "%s" % urljoin( self.provider.glance.http_client.get_endpoint(), "v2/bar id/file" ), "image_id": "http://schemas.openstack.org/template/os#bar_id", "image_native_id": "bar id", "image_accel_type": None, "image_access_info": "none", "image_minimal_cpu": None, "image_minimal_ram": None, "image_minimal_accel": None, "image_recommended_cpu": None, "image_recommended_ram": None, "image_recommended_accel": None, "image_size": None, "image_software": [], "image_traffic_in": [], "image_traffic_out": [], "image_context_format": None, "other_info": [], }, "foo.id": { "name": "fooimage", "id": "foo.id", "metadata": {}, "marketplace": "http://example.org/", "file": "v2/foo.id/file", "image_description": None, "image_name": "fooimage", "image_os_family": None, "image_os_name": None, "image_os_version": None, "image_platform": "amd64", "image_version": None, "image_marketplace_id": "http://example.org/", "image_id": "http://schemas.openstack.org/template/os#foo-id", "image_native_id": "foo.id", "image_accel_type": None, "image_access_info": "none", "image_minimal_cpu": None, "image_minimal_ram": None, "image_minimal_accel": None, "image_recommended_cpu": None, "image_recommended_ram": None, "image_recommended_accel": None, "image_size": None, "image_software": [], "image_traffic_in": [], "image_traffic_out": [], "image_context_format": None, "other_info": ["base_mpuri=foobar"], "APPLIANCE_ATTRIBUTES": '{"ad:base_mpuri": "foobar"}', }, "baz id": { "name": "bazimage", "id": "baz id", "file": "v2/baz id/file", "image_description": None, "image_name": "bazimage", "image_os_family": None, "image_os_name": None, "image_os_version": None, "image_platform": "amd64", "image_version": None, "image_marketplace_id": "%s" % urljoin( self.provider.glance.http_client.get_endpoint(), "v2/baz id/file" ), "image_id": "http://schemas.openstack.org/template/os#baz_id", "image_native_id": "baz id", "docker_id": "sha1:xxxxxxxxxxxxxxxxxxxxxxxxxx", "docker_tag": "latest", "docker_name": "test/image", "image_accel_type": None, "image_access_info": "none", "image_minimal_cpu": None, "image_minimal_ram": None, "image_minimal_accel": None, "image_recommended_cpu": None, "image_recommended_ram": None, "image_recommended_accel": None, "image_size": None, "image_software": [], "image_traffic_in": [], "image_traffic_out": [], "image_context_format": None, "other_info": [], }, } with utils.nested( mock.patch.object(self.provider.static, "get_image_defaults"), mock.patch.object(self.provider.glance.images, "list"), ) as (m_get_image_defaults, m_images_list): m_get_image_defaults.return_value = {} m_images_list.return_value = FAKES.images images = self.provider.get_images(**{"auth": {"project_id": None}}) self.assertTrue(m_get_image_defaults.called) # Filter fields from the template that are not related to images self.assert_resources( expected_images, images, template="compute.ldif", ignored_fields=[ "compute_service_name", "compute_api_type", "compute_api_version", ("compute_api_endpoint" "_technology"), "compute_capabilities", "compute_api_authn_method", "compute_total_ram", "compute_middleware", "compute_middleware_developer", "compute_middleware_version", "compute_endpoint_url", "compute_hypervisor", "compute_hypervisor_version", "compute_production_level", ("compute_service" "_production_level"), "compute_total_cores", "compute_total_ram", "template_platform", "template_cpu", "template_memory", "template_network", "template_disk", "template_ephemeral", "template_id", ], )