25
from nova import flags
26
25
from nova.api import openstack
27
from nova.api.openstack import auth
28
26
from nova.api.openstack import extensions
29
27
from nova.tests.api.openstack import fakes
35
31
def return_create_flavor_extra_specs(context, flavor_id, extra_specs):
36
32
return stub_flavor_extra_specs()
40
36
return stub_flavor_extra_specs()
43
def return_flavor_extra_specs(context, flavor_id):
44
return stub_flavor_extra_specs()
47
39
def return_empty_flavor_extra_specs(context, flavor_id):
65
class FlavorsExtraSpecsTest(unittest.TestCase):
57
class FlavorsExtraSpecsTest(test.TestCase):
68
60
super(FlavorsExtraSpecsTest, self).setUp()
69
FLAGS.osapi_extensions_path = os.path.join(os.path.dirname(__file__),
71
self.stubs = stubout.StubOutForTesting()
72
fakes.FakeAuthManager.auth_data = {}
73
fakes.FakeAuthDatabase.data = {}
74
fakes.stub_out_auth(self.stubs)
75
61
fakes.stub_out_key_pair_funcs(self.stubs)
76
self.mware = auth.AuthMiddleware(
77
extensions.ExtensionMiddleware(
78
openstack.APIRouterV11()))
82
super(FlavorsExtraSpecsTest, self).tearDown()
84
63
def test_index(self):
85
64
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
86
65
return_flavor_extra_specs)
87
request = webob.Request.blank('/flavors/1/os-extra_specs')
88
res = request.get_response(self.mware)
66
request = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs')
67
res = request.get_response(fakes.wsgi_app())
89
68
self.assertEqual(200, res.status_int)
90
69
res_dict = json.loads(res.body)
91
70
self.assertEqual('application/json', res.headers['Content-Type'])
94
73
def test_index_no_data(self):
95
74
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
96
75
return_empty_flavor_extra_specs)
97
req = webob.Request.blank('/flavors/1/os-extra_specs')
98
res = req.get_response(self.mware)
76
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs')
77
res = req.get_response(fakes.wsgi_app())
99
78
res_dict = json.loads(res.body)
100
79
self.assertEqual(200, res.status_int)
101
80
self.assertEqual('application/json', res.headers['Content-Type'])
104
83
def test_show(self):
105
84
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
106
85
return_flavor_extra_specs)
107
req = webob.Request.blank('/flavors/1/os-extra_specs/key5')
108
res = req.get_response(self.mware)
86
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key5')
87
res = req.get_response(fakes.wsgi_app())
109
88
self.assertEqual(200, res.status_int)
110
89
res_dict = json.loads(res.body)
111
90
self.assertEqual('application/json', res.headers['Content-Type'])
114
93
def test_show_spec_not_found(self):
115
94
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
116
95
return_empty_flavor_extra_specs)
117
req = webob.Request.blank('/flavors/1/os-extra_specs/key6')
118
res = req.get_response(self.mware)
96
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key6')
97
res = req.get_response(fakes.wsgi_app())
119
98
res_dict = json.loads(res.body)
120
99
self.assertEqual(404, res.status_int)
122
101
def test_delete(self):
123
102
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_delete',
124
103
delete_flavor_extra_specs)
125
req = webob.Request.blank('/flavors/1/os-extra_specs/key5')
104
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key5')
126
105
req.method = 'DELETE'
127
res = req.get_response(self.mware)
106
res = req.get_response(fakes.wsgi_app())
128
107
self.assertEqual(200, res.status_int)
130
109
def test_create(self):
131
110
self.stubs.Set(nova.db.api,
132
111
'instance_type_extra_specs_update_or_create',
133
112
return_create_flavor_extra_specs)
134
req = webob.Request.blank('/flavors/1/os-extra_specs')
113
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs')
135
114
req.method = 'POST'
136
115
req.body = '{"extra_specs": {"key1": "value1"}}'
137
116
req.headers["content-type"] = "application/json"
138
res = req.get_response(self.mware)
117
res = req.get_response(fakes.wsgi_app())
139
118
res_dict = json.loads(res.body)
140
119
self.assertEqual(200, res.status_int)
141
120
self.assertEqual('application/json', res.headers['Content-Type'])
145
124
self.stubs.Set(nova.db.api,
146
125
'instance_type_extra_specs_update_or_create',
147
126
return_create_flavor_extra_specs)
148
req = webob.Request.blank('/flavors/1/os-extra_specs')
127
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs')
149
128
req.method = 'POST'
150
129
req.headers["content-type"] = "application/json"
151
res = req.get_response(self.mware)
130
res = req.get_response(fakes.wsgi_app())
152
131
self.assertEqual(400, res.status_int)
154
133
def test_update_item(self):
155
134
self.stubs.Set(nova.db.api,
156
135
'instance_type_extra_specs_update_or_create',
157
136
return_create_flavor_extra_specs)
158
req = webob.Request.blank('/flavors/1/os-extra_specs/key1')
137
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key1')
159
138
req.method = 'PUT'
160
139
req.body = '{"key1": "value1"}'
161
140
req.headers["content-type"] = "application/json"
162
res = req.get_response(self.mware)
141
res = req.get_response(fakes.wsgi_app())
163
142
self.assertEqual(200, res.status_int)
164
143
self.assertEqual('application/json', res.headers['Content-Type'])
165
144
res_dict = json.loads(res.body)
169
148
self.stubs.Set(nova.db.api,
170
149
'instance_type_extra_specs_update_or_create',
171
150
return_create_flavor_extra_specs)
172
req = webob.Request.blank('/flavors/1/os-extra_specs/key1')
151
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key1')
173
152
req.method = 'PUT'
174
153
req.headers["content-type"] = "application/json"
175
res = req.get_response(self.mware)
154
res = req.get_response(fakes.wsgi_app())
176
155
self.assertEqual(400, res.status_int)
178
157
def test_update_item_too_many_keys(self):
179
158
self.stubs.Set(nova.db.api,
180
159
'instance_type_extra_specs_update_or_create',
181
160
return_create_flavor_extra_specs)
182
req = webob.Request.blank('/flavors/1/os-extra_specs/key1')
161
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key1')
183
162
req.method = 'PUT'
184
163
req.body = '{"key1": "value1", "key2": "value2"}'
185
164
req.headers["content-type"] = "application/json"
186
res = req.get_response(self.mware)
165
res = req.get_response(fakes.wsgi_app())
187
166
self.assertEqual(400, res.status_int)
189
168
def test_update_item_body_uri_mismatch(self):
190
169
self.stubs.Set(nova.db.api,
191
170
'instance_type_extra_specs_update_or_create',
192
171
return_create_flavor_extra_specs)
193
req = webob.Request.blank('/flavors/1/os-extra_specs/bad')
172
req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/bad')
194
173
req.method = 'PUT'
195
174
req.body = '{"key1": "value1"}'
196
175
req.headers["content-type"] = "application/json"
197
res = req.get_response(self.mware)
176
res = req.get_response(fakes.wsgi_app())
198
177
self.assertEqual(400, res.status_int)