diff --git a/doc/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json b/doc/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json index b6c1bc77df37..e637ad85ae35 100644 --- a/doc/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json +++ b/doc/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json @@ -3,6 +3,10 @@ { "flavor_id": "10", "tenant_id": "fake_tenant" + }, + { + "flavor_id": "10", + "tenant_id": "openstack" } ] } \ No newline at end of file diff --git a/doc/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml b/doc/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml index 1e55ad2f958c..cc102aeed1e2 100644 --- a/doc/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml +++ b/doc/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/doc/api_samples/os-flavor-access/flavor-access-list-resp.json b/doc/api_samples/os-flavor-access/flavor-access-list-resp.json index b6c1bc77df37..e637ad85ae35 100644 --- a/doc/api_samples/os-flavor-access/flavor-access-list-resp.json +++ b/doc/api_samples/os-flavor-access/flavor-access-list-resp.json @@ -3,6 +3,10 @@ { "flavor_id": "10", "tenant_id": "fake_tenant" + }, + { + "flavor_id": "10", + "tenant_id": "openstack" } ] } \ No newline at end of file diff --git a/doc/api_samples/os-flavor-access/flavor-access-list-resp.xml b/doc/api_samples/os-flavor-access/flavor-access-list-resp.xml index 1e55ad2f958c..cc102aeed1e2 100644 --- a/doc/api_samples/os-flavor-access/flavor-access-list-resp.xml +++ b/doc/api_samples/os-flavor-access/flavor-access-list-resp.xml @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/doc/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json b/doc/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json index 5cab03334d89..ebe0423e82f7 100644 --- a/doc/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json +++ b/doc/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json @@ -1,3 +1,6 @@ { - "flavor_access": [] + "flavor_access": [{ + "flavor_id": "10", + "tenant_id": "openstack" + }] } \ No newline at end of file diff --git a/doc/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml b/doc/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml index 862e02872492..3c5ef1c5cc5d 100644 --- a/doc/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml +++ b/doc/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + + diff --git a/doc/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json b/doc/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json index b6c1bc77df37..e637ad85ae35 100644 --- a/doc/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json +++ b/doc/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json @@ -3,6 +3,10 @@ { "flavor_id": "10", "tenant_id": "fake_tenant" + }, + { + "flavor_id": "10", + "tenant_id": "openstack" } ] } \ No newline at end of file diff --git a/doc/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml b/doc/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml index 1e55ad2f958c..cc102aeed1e2 100644 --- a/doc/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml +++ b/doc/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/doc/v3/api_samples/os-flavor-access/flavor-access-list-resp.json b/doc/v3/api_samples/os-flavor-access/flavor-access-list-resp.json index b6c1bc77df37..e637ad85ae35 100644 --- a/doc/v3/api_samples/os-flavor-access/flavor-access-list-resp.json +++ b/doc/v3/api_samples/os-flavor-access/flavor-access-list-resp.json @@ -3,6 +3,10 @@ { "flavor_id": "10", "tenant_id": "fake_tenant" + }, + { + "flavor_id": "10", + "tenant_id": "openstack" } ] } \ No newline at end of file diff --git a/doc/v3/api_samples/os-flavor-access/flavor-access-list-resp.xml b/doc/v3/api_samples/os-flavor-access/flavor-access-list-resp.xml index 1e55ad2f958c..cc102aeed1e2 100644 --- a/doc/v3/api_samples/os-flavor-access/flavor-access-list-resp.xml +++ b/doc/v3/api_samples/os-flavor-access/flavor-access-list-resp.xml @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/doc/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json b/doc/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json index 5cab03334d89..ebe0423e82f7 100644 --- a/doc/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json +++ b/doc/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json @@ -1,3 +1,6 @@ { - "flavor_access": [] + "flavor_access": [{ + "flavor_id": "10", + "tenant_id": "openstack" + }] } \ No newline at end of file diff --git a/doc/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml b/doc/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml index 862e02872492..3c5ef1c5cc5d 100644 --- a/doc/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml +++ b/doc/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + + diff --git a/nova/api/openstack/compute/contrib/flavormanage.py b/nova/api/openstack/compute/contrib/flavormanage.py index 268c13d68ff1..b2103a8b2909 100644 --- a/nova/api/openstack/compute/contrib/flavormanage.py +++ b/nova/api/openstack/compute/contrib/flavormanage.py @@ -75,6 +75,9 @@ class FlavorManageController(wsgi.Controller): flavorid=flavorid, swap=swap, rxtx_factor=rxtx_factor, is_public=is_public) + if not flavor['is_public']: + flavors.add_flavor_access(flavor['flavorid'], + context.project_id, context) req.cache_db_flavor(flavor) except (exception.InstanceTypeExists, exception.InstanceTypeIdExists) as err: diff --git a/nova/api/openstack/compute/plugins/v3/flavor_manage.py b/nova/api/openstack/compute/plugins/v3/flavor_manage.py index 2fe99a340075..5815de9c0f80 100644 --- a/nova/api/openstack/compute/plugins/v3/flavor_manage.py +++ b/nova/api/openstack/compute/plugins/v3/flavor_manage.py @@ -79,6 +79,9 @@ class FlavorManageController(wsgi.Controller): flavorid=flavorid, swap=swap, rxtx_factor=rxtx_factor, is_public=is_public) + if not flavor['is_public']: + flavors.add_flavor_access(flavor['flavorid'], + context.project_id, context) req.cache_db_flavor(flavor) except (exception.InstanceTypeExists, exception.InstanceTypeIdExists) as err: diff --git a/nova/tests/api/openstack/compute/contrib/test_flavor_manage.py b/nova/tests/api/openstack/compute/contrib/test_flavor_manage.py index 58ad01b608a5..1816b19eb62b 100644 --- a/nova/tests/api/openstack/compute/contrib/test_flavor_manage.py +++ b/nova/tests/api/openstack/compute/contrib/test_flavor_manage.py @@ -17,8 +17,10 @@ import datetime import webob +from nova.api.openstack.compute.contrib import flavor_access from nova.api.openstack.compute.contrib import flavormanage from nova.compute import flavors +from nova import context from nova import db from nova import exception from nova.openstack.common import jsonutils @@ -391,3 +393,92 @@ class FlavorManageTest(test.NoDBTestCase): 512, 2, None, 1, 1234, 512, 1, True) self.assertRaises(exception.InvalidInput, flavors.create, "abcdef", "test_memory_mb", 2, None, 1, 1234, 512, 1, True) + + +class FakeRequest(object): + environ = {"nova.context": context.get_admin_context()} + + +class PrivateFlavorManageTest(test.TestCase): + def setUp(self): + super(PrivateFlavorManageTest, self).setUp() + # self.stubs.Set(flavors, + # "get_flavor_by_flavor_id", + # fake_get_flavor_by_flavor_id) + # self.stubs.Set(flavors, "destroy", fake_destroy) + # self.stubs.Set(flavors, "create", fake_create) + self.flags( + osapi_compute_extension=[ + 'nova.api.openstack.compute.contrib.select_extensions'], + osapi_compute_ext_list=['Flavormanage', 'Flavorextradata', + 'Flavor_access', 'Flavor_rxtx', 'Flavor_swap']) + + self.controller = flavormanage.FlavorManageController() + self.flavor_access_controller = flavor_access.FlavorAccessController() + self.app = fakes.wsgi_app(init_only=('flavors',)) + + def test_create_private_flavor_should_create_flavor_access(self): + expected = { + "flavor": { + "name": "test", + "ram": 512, + "vcpus": 2, + "disk": 1, + "OS-FLV-EXT-DATA:ephemeral": 1, + "swap": 512, + "rxtx_factor": 1, + "os-flavor-access:is_public": False + } + } + + ctxt = context.RequestContext('fake', 'fake', + is_admin=True, auth_token=True) + self.app = fakes.wsgi_app(init_only=('flavors',), + fake_auth_context=ctxt) + url = '/v2/fake/flavors' + req = webob.Request.blank(url) + req.headers['Content-Type'] = 'application/json' + req.method = 'POST' + req.body = jsonutils.dumps(expected) + res = req.get_response(self.app) + body = jsonutils.loads(res.body) + for key in expected["flavor"]: + self.assertEquals(body["flavor"][key], expected["flavor"][key]) + flavor_access_body = self.flavor_access_controller.index( + FakeRequest(), body["flavor"]["id"]) + expected_flavor_access_body = { + "tenant_id": "%s" % ctxt.project_id, + "flavor_id": "%s" % body["flavor"]["id"] + } + self.assertTrue(expected_flavor_access_body in + flavor_access_body["flavor_access"]) + + def test_create_public_flavor_should_not_create_flavor_access(self): + expected = { + "flavor": { + "name": "test", + "ram": 512, + "vcpus": 2, + "disk": 1, + "OS-FLV-EXT-DATA:ephemeral": 1, + "swap": 512, + "rxtx_factor": 1, + "os-flavor-access:is_public": True + } + } + + ctxt = context.RequestContext('fake', 'fake', + is_admin=True, auth_token=True) + self.app = fakes.wsgi_app(init_only=('flavors',), + fake_auth_context=ctxt) + self.mox.StubOutWithMock(flavors, "add_flavor_access") + self.mox.ReplayAll() + url = '/v2/fake/flavors' + req = webob.Request.blank(url) + req.headers['Content-Type'] = 'application/json' + req.method = 'POST' + req.body = jsonutils.dumps(expected) + res = req.get_response(self.app) + body = jsonutils.loads(res.body) + for key in expected["flavor"]: + self.assertEquals(body["flavor"][key], expected["flavor"][key]) diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_flavor_manage.py b/nova/tests/api/openstack/compute/plugins/v3/test_flavor_manage.py index 9eb4530049f3..87c661b8ae0d 100644 --- a/nova/tests/api/openstack/compute/plugins/v3/test_flavor_manage.py +++ b/nova/tests/api/openstack/compute/plugins/v3/test_flavor_manage.py @@ -17,8 +17,10 @@ import datetime import webob +from nova.api.openstack.compute.plugins.v3 import flavor_access from nova.api.openstack.compute.plugins.v3 import flavor_manage from nova.compute import flavors +from nova import context from nova import exception from nova.openstack.common import jsonutils from nova import test @@ -209,3 +211,89 @@ class FlavorManageTest(test.NoDBTestCase): 512, 2, None, 1, 1234, 512, 1, True) self.assertRaises(exception.InvalidInput, flavors.create, "abcdef", "test_memory_mb", 2, None, 1, 1234, 512, 1, True) + + +class FakeRequest(object): + environ = {"nova.context": context.get_admin_context()} + + +class PrivateFlavorManageTest(test.TestCase): + def setUp(self): + super(PrivateFlavorManageTest, self).setUp() + # self.stubs.Set(flavors, + # "get_flavor_by_flavor_id", + # fake_get_flavor_by_flavor_id) + # self.stubs.Set(flavors, "destroy", fake_destroy) + # self.stubs.Set(flavors, "create", fake_create) + + self.controller = flavor_manage.FlavorManageController() + self.flavor_access_controller = flavor_access.FlavorAccessController() + self.app = fakes.wsgi_app(init_only=('flavors',)) + + def test_create_private_flavor_should_create_flavor_access(self): + req_body = { + "flavor": { + "name": "test", + "ram": 512, + "vcpus": 2, + "disk": 1, + "OS-FLV-EXT-DATA:ephemeral": 1, + "swap": 512, + "rxtx_factor": 1, + "os-flavor-access:is_public": False + } + } + expected = { + "flavor": { + "name": "test", + "ram": 512, + "vcpus": 2, + "disk": 1 + } + } + + ctxt = context.RequestContext('fake', 'fake', + is_admin=True, auth_token=True) + url = '/os-flavor-manage' + req = fakes.HTTPRequestV3.blank(url, use_admin_context=True) + body = self.controller._create(req, req_body) + for key in expected["flavor"]: + self.assertEquals(body["flavor"][key], expected["flavor"][key]) + flavor_access_body = self.flavor_access_controller.index( + FakeRequest(), body["flavor"]["id"]) + expected_flavor_access_body = { + "tenant_id": "%s" % ctxt.project_id, + "flavor_id": "%s" % body["flavor"]["id"] + } + self.assertTrue(expected_flavor_access_body in + flavor_access_body["flavor_access"]) + + def test_create_public_flavor_should_not_create_flavor_access(self): + req_body = { + "flavor": { + "name": "test", + "ram": 512, + "vcpus": 2, + "disk": 1, + "OS-FLV-EXT-DATA:ephemeral": 1, + "swap": 512, + "rxtx_factor": 1, + "os-flavor-access:is_public": True + } + } + expected = { + "flavor": { + "name": "test", + "ram": 512, + "vcpus": 2, + "disk": 1 + } + } + + self.mox.StubOutWithMock(flavors, "add_flavor_access") + self.mox.ReplayAll() + url = '/os-flavor-manage' + req = fakes.HTTPRequestV3.blank(url, use_admin_context=True) + body = self.controller._create(req, req_body) + for key in expected["flavor"]: + self.assertEquals(body["flavor"][key], expected["flavor"][key]) diff --git a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json.tpl b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json.tpl index d797155795e5..5266ae08406a 100644 --- a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json.tpl +++ b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json.tpl @@ -1,5 +1,9 @@ { "flavor_access": [ + { + "flavor_id": "%(flavor_id)s", + "tenant_id": "openstack" + }, { "flavor_id": "%(flavor_id)s", "tenant_id": "%(tenant_id)s" diff --git a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml.tpl b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml.tpl index 2223052aaefd..9c0b4ec1ce1d 100644 --- a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml.tpl @@ -1,4 +1,5 @@ + diff --git a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-list-resp.json.tpl b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-list-resp.json.tpl index a6b6dbdcda07..87e337e39c5f 100644 --- a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-list-resp.json.tpl +++ b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-list-resp.json.tpl @@ -3,6 +3,10 @@ { "flavor_id": "%(flavor_id)s", "tenant_id": "fake_tenant" + }, + { + "flavor_id": "%(flavor_id)s", + "tenant_id": "openstack" } ] } diff --git a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-list-resp.xml.tpl b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-list-resp.xml.tpl index 2223052aaefd..cc102aeed1e2 100644 --- a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-list-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-list-resp.xml.tpl @@ -1,4 +1,5 @@ - - + + + \ No newline at end of file diff --git a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json.tpl b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json.tpl index 5cab03334d89..4fb4296a30b7 100644 --- a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json.tpl +++ b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json.tpl @@ -1,3 +1,6 @@ { - "flavor_access": [] + "flavor_access": [{ + "tenant_id": "openstack", + "flavor_id": "%(flavor_id)s" + }] } \ No newline at end of file diff --git a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml.tpl b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml.tpl index 80d1ecc48c3a..480191c726b8 100644 --- a/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml.tpl @@ -1,2 +1,4 @@ - + + + diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index e40d0d2f1464..586e1cb0c5ec 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -3386,8 +3386,12 @@ class FlavorAccessSampleJsonTests(ApiSampleTestBaseV2): response = self._do_post('flavors/10/action', "flavor-access-remove-tenant-req", subs) + exp_subs = { + "tenant_id": self.api.project_id, + "flavor_id": "10" + } self._verify_response('flavor-access-remove-tenant-resp', - {}, response, 200) + exp_subs, response, 200) class FlavorAccessSampleXmlTests(FlavorAccessSampleJsonTests): diff --git a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json.tpl b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json.tpl index d797155795e5..5266ae08406a 100644 --- a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json.tpl +++ b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.json.tpl @@ -1,5 +1,9 @@ { "flavor_access": [ + { + "flavor_id": "%(flavor_id)s", + "tenant_id": "openstack" + }, { "flavor_id": "%(flavor_id)s", "tenant_id": "%(tenant_id)s" diff --git a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml.tpl b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml.tpl index 2223052aaefd..9c0b4ec1ce1d 100644 --- a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml.tpl +++ b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-add-tenant-resp.xml.tpl @@ -1,4 +1,5 @@ + diff --git a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-list-resp.json.tpl b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-list-resp.json.tpl index a6b6dbdcda07..87e337e39c5f 100644 --- a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-list-resp.json.tpl +++ b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-list-resp.json.tpl @@ -3,6 +3,10 @@ { "flavor_id": "%(flavor_id)s", "tenant_id": "fake_tenant" + }, + { + "flavor_id": "%(flavor_id)s", + "tenant_id": "openstack" } ] } diff --git a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-list-resp.xml.tpl b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-list-resp.xml.tpl index 2223052aaefd..cc102aeed1e2 100644 --- a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-list-resp.xml.tpl +++ b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-list-resp.xml.tpl @@ -1,4 +1,5 @@ - - + + + \ No newline at end of file diff --git a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json.tpl b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json.tpl index 5cab03334d89..4fb4296a30b7 100644 --- a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json.tpl +++ b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.json.tpl @@ -1,3 +1,6 @@ { - "flavor_access": [] + "flavor_access": [{ + "tenant_id": "openstack", + "flavor_id": "%(flavor_id)s" + }] } \ No newline at end of file diff --git a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml.tpl b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml.tpl index 80d1ecc48c3a..480191c726b8 100644 --- a/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml.tpl +++ b/nova/tests/integrated/v3/api_samples/os-flavor-access/flavor-access-remove-tenant-resp.xml.tpl @@ -1,2 +1,4 @@ - + + + diff --git a/nova/tests/integrated/v3/test_flavor_access.py b/nova/tests/integrated/v3/test_flavor_access.py index 53799de27ea6..558738915a5b 100644 --- a/nova/tests/integrated/v3/test_flavor_access.py +++ b/nova/tests/integrated/v3/test_flavor_access.py @@ -83,8 +83,12 @@ class FlavorAccessSampleJsonTests(api_sample_base.ApiSampleTestBaseV3): response = self._do_post('flavors/10/action', "flavor-access-remove-tenant-req", subs) + exp_subs = { + "tenant_id": self.api.project_id, + "flavor_id": "10" + } self._verify_response('flavor-access-remove-tenant-resp', - {}, response, 200) + exp_subs, response, 200) class FlavorAccessSampleXmlTests(FlavorAccessSampleJsonTests):