blob: a0b250e6fadef095fe62441839c74c4660338581 [file] [log] [blame]
Joe H. Rahmefe75f932015-03-19 11:30:05 +01001#!/usr/bin/env python
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15import mock
16from oslotest import mockpatch
17from tempest_lib import exceptions as lib_exc
18
19from tempest.cmd import javelin
20from tempest.tests import base
21
22
23class JavelinUnitTest(base.TestCase):
24
25 def setUp(self):
26 super(JavelinUnitTest, self).setUp()
27 javelin.setup_logging()
28 self.fake_client = mock.MagicMock()
29 self.fake_object = mock.MagicMock()
30
Joe H. Rahmeb8658f42015-05-22 14:39:37 +020031 def test_load_resources(self):
32 with mock.patch('six.moves.builtins.open', mock.mock_open(),
33 create=True) as open_mock:
34 with mock.patch('yaml.load', mock.MagicMock(),
35 create=True) as load_mock:
36 javelin.load_resources(self.fake_object)
37 load_mock.assert_called_once_with(open_mock(self.fake_object))
38
39 def test_keystone_admin(self):
40 self.useFixture(mockpatch.PatchObject(javelin, "OSClient"))
41 javelin.OPTS = self.fake_object
42 javelin.keystone_admin()
43 javelin.OSClient.assert_called_once_with(
44 self.fake_object.os_username,
45 self.fake_object.os_password,
46 self.fake_object.os_tenant_name)
47
48 def test_client_for_user(self):
49 fake_user = mock.MagicMock()
50 javelin.USERS = {fake_user['name']: fake_user}
51 self.useFixture(mockpatch.PatchObject(javelin, "OSClient"))
52 javelin.client_for_user(fake_user['name'])
53 javelin.OSClient.assert_called_once_with(
54 fake_user['name'], fake_user['pass'], fake_user['tenant'])
55
56 def test_client_for_non_existing_user(self):
57 fake_non_existing_user = self.fake_object
58 fake_user = mock.MagicMock()
59 javelin.USERS = {fake_user['name']: fake_user}
60 self.useFixture(mockpatch.PatchObject(javelin, "OSClient"))
61 javelin.client_for_user(fake_non_existing_user['name'])
62 self.assertFalse(javelin.OSClient.called)
63
Joe H. Rahme5a4da642015-06-09 17:24:12 +020064 def test_attach_volumes(self):
65 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
66 return_value=self.fake_client))
67
68 self.useFixture(mockpatch.PatchObject(
69 javelin, "_get_volume_by_name",
70 return_value=self.fake_object.volume))
71
72 self.useFixture(mockpatch.PatchObject(
73 javelin, "_get_server_by_name",
74 return_value=self.fake_object.server))
75
76 javelin.attach_volumes([self.fake_object])
77
78 mocked_function = self.fake_client.volumes.attach_volume
79 mocked_function.assert_called_once_with(
80 self.fake_object.volume['id'],
81 self.fake_object.server['id'],
82 self.fake_object['device'])
83
Joe H. Rahmefe75f932015-03-19 11:30:05 +010084
85class TestCreateResources(JavelinUnitTest):
86 def test_create_tenants(self):
87
88 self.fake_client.identity.list_tenants.return_value = []
89 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
90 return_value=self.fake_client))
91
92 javelin.create_tenants([self.fake_object['name']])
93
94 mocked_function = self.fake_client.identity.create_tenant
95 mocked_function.assert_called_once_with(self.fake_object['name'])
96
97 def test_create_duplicate_tenant(self):
98 self.fake_client.identity.list_tenants.return_value = [
99 {'name': self.fake_object['name']}]
100 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
101 return_value=self.fake_client))
102
103 javelin.create_tenants([self.fake_object['name']])
104
105 mocked_function = self.fake_client.identity.create_tenant
106 self.assertFalse(mocked_function.called)
107
108 def test_create_users(self):
109 self.fake_client.identity.get_tenant_by_name.return_value = \
110 self.fake_object['tenant']
111 self.fake_client.identity.get_user_by_username.side_effect = \
112 lib_exc.NotFound()
113 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
114 return_value=self.fake_client))
115
116 javelin.create_users([self.fake_object])
117
118 fake_tenant_id = self.fake_object['tenant']['id']
119 fake_email = "%s@%s" % (self.fake_object['user'], fake_tenant_id)
120 mocked_function = self.fake_client.identity.create_user
121 mocked_function.assert_called_once_with(self.fake_object['name'],
122 self.fake_object['password'],
123 fake_tenant_id,
124 fake_email,
125 enabled=True)
126
127 def test_create_user_missing_tenant(self):
128 self.fake_client.identity.get_tenant_by_name.side_effect = \
129 lib_exc.NotFound()
130 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
131 return_value=self.fake_client))
132
133 javelin.create_users([self.fake_object])
134
135 mocked_function = self.fake_client.identity.create_user
136 self.assertFalse(mocked_function.called)
137
138 def test_create_objects(self):
139
140 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
141 return_value=self.fake_client))
142 self.useFixture(mockpatch.PatchObject(javelin, "_assign_swift_role"))
143 self.useFixture(mockpatch.PatchObject(javelin, "_file_contents",
144 return_value=self.fake_object.content))
145
146 javelin.create_objects([self.fake_object])
147
148 mocked_function = self.fake_client.containers.create_container
149 mocked_function.assert_called_once_with(self.fake_object['container'])
150 mocked_function = self.fake_client.objects.create_object
151 mocked_function.assert_called_once_with(self.fake_object['container'],
152 self.fake_object['name'],
153 self.fake_object.content)
154
155 def test_create_images(self):
156 self.fake_client.images.create_image.return_value = \
157 self.fake_object['body']
158
159 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
160 return_value=self.fake_client))
161 self.useFixture(mockpatch.PatchObject(javelin, "_get_image_by_name",
162 return_value=[]))
163 self.useFixture(mockpatch.PatchObject(javelin, "_resolve_image",
164 return_value=(None, None)))
165
166 with mock.patch('six.moves.builtins.open', mock.mock_open(),
167 create=True) as open_mock:
168 javelin.create_images([self.fake_object])
169
170 mocked_function = self.fake_client.images.create_image
171 mocked_function.assert_called_once_with(self.fake_object['name'],
172 self.fake_object['format'],
173 self.fake_object['format'])
174
Ken'ichi Ohmichi66494e92015-06-08 04:28:10 +0000175 mocked_function = self.fake_client.images.store_image_file
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100176 fake_image_id = self.fake_object['body'].get('id')
177 mocked_function.assert_called_once_with(fake_image_id, open_mock())
178
179 def test_create_networks(self):
180 self.fake_client.networks.list_networks.return_value = {
181 'networks': []}
182
183 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
184 return_value=self.fake_client))
185
186 javelin.create_networks([self.fake_object])
187
188 mocked_function = self.fake_client.networks.create_network
189 mocked_function.assert_called_once_with(name=self.fake_object['name'])
190
191 def test_create_subnet(self):
192
193 fake_network = self.fake_object['network']
194
195 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
196 return_value=self.fake_client))
197 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
198 return_value=fake_network))
199
200 fake_netaddr = mock.MagicMock()
201 self.useFixture(mockpatch.PatchObject(javelin, "netaddr",
202 return_value=fake_netaddr))
203 fake_version = javelin.netaddr.IPNetwork().version
204
205 javelin.create_subnets([self.fake_object])
206
207 mocked_function = self.fake_client.networks.create_subnet
208 mocked_function.assert_called_once_with(network_id=fake_network['id'],
209 cidr=self.fake_object['range'],
210 name=self.fake_object['name'],
211 ip_version=fake_version)
212
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200213 def test_create_volumes(self):
214
215 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
216 return_value=self.fake_client))
217 self.useFixture(mockpatch.PatchObject(javelin, "_get_volume_by_name",
218 return_value=None))
219 self.fake_client.volumes.create_volume.return_value = \
220 self.fake_object.body
221
222 javelin.create_volumes([self.fake_object])
223
224 mocked_function = self.fake_client.volumes.create_volume
225 mocked_function.assert_called_once_with(
226 size=self.fake_object['gb'],
227 display_name=self.fake_object['name'])
228 mocked_function = self.fake_client.volumes.wait_for_volume_status
229 mocked_function.assert_called_once_with(
230 self.fake_object.body['id'],
231 'available')
232
233 def test_create_volume_existing(self):
234 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
235 return_value=self.fake_client))
236 self.useFixture(mockpatch.PatchObject(javelin, "_get_volume_by_name",
237 return_value=self.fake_object))
238 self.fake_client.volumes.create_volume.return_value = \
239 self.fake_object.body
240
241 javelin.create_volumes([self.fake_object])
242
243 mocked_function = self.fake_client.volumes.create_volume
244 self.assertFalse(mocked_function.called)
245 mocked_function = self.fake_client.volumes.wait_for_volume_status
246 self.assertFalse(mocked_function.called)
247
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100248
249class TestDestroyResources(JavelinUnitTest):
250
251 def test_destroy_tenants(self):
252
253 fake_tenant = self.fake_object['tenant']
254
255 fake_auth = mock.MagicMock()
256 fake_auth.identity.get_tenant_by_name.return_value = fake_tenant
257
258 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
259 return_value=fake_auth))
260 javelin.destroy_tenants([fake_tenant])
261
262 mocked_function = fake_auth.identity.delete_tenant
263 mocked_function.assert_called_once_with(fake_tenant['id'])
264
265 def test_destroy_users(self):
266
267 fake_user = self.fake_object['user']
268 fake_tenant = self.fake_object['tenant']
269
270 fake_auth = mock.MagicMock()
271 fake_auth.identity.get_tenant_by_name.return_value = fake_tenant
272 fake_auth.identity.get_user_by_username.return_value = fake_user
273
274 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
275 return_value=fake_auth))
276
277 javelin.destroy_users([fake_user])
278
279 mocked_function = fake_auth.identity.delete_user
280 mocked_function.assert_called_once_with(fake_user['id'])
281
282 def test_destroy_objects(self):
283
284 fake_client = mock.MagicMock()
285 fake_client.objects.delete_object.return_value = {'status': "200"}, ""
286 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
287 return_value=fake_client))
288 javelin.destroy_objects([self.fake_object])
289
290 mocked_function = fake_client.objects.delete_object
291 mocked_function.asswert_called_once(self.fake_object['container'],
292 self.fake_object['name'])
293
294 def test_destroy_images(self):
295
296 fake_client = mock.MagicMock()
297 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
298 return_value=fake_client))
299 self.useFixture(mockpatch.PatchObject(javelin, "_get_image_by_name",
300 return_value=self.fake_object['image']))
301
302 javelin.destroy_images([self.fake_object])
303
304 mocked_function = fake_client.images.delete_image
305 mocked_function.assert_called_once_with(
306 self.fake_object['image']['id'])
307
308 def test_destroy_networks(self):
309
310 fake_client = mock.MagicMock()
311 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
312 return_value=fake_client))
313 self.useFixture(mockpatch.PatchObject(
314 javelin, "_get_resource_by_name",
315 return_value=self.fake_object['resource']))
316
317 javelin.destroy_networks([self.fake_object])
318
319 mocked_function = fake_client.networks.delete_network
320 mocked_function.assert_called_once_with(
321 self.fake_object['resource']['id'])
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200322
323 def test_destroy_volumes(self):
324 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
325 return_value=self.fake_client))
326
327 self.useFixture(mockpatch.PatchObject(
328 javelin, "_get_volume_by_name",
329 return_value=self.fake_object.volume))
330
331 javelin.destroy_volumes([self.fake_object])
332
333 mocked_function = self.fake_client.volumes.detach_volume
334 mocked_function.assert_called_once_with(self.fake_object.volume['id'])
335 mocked_function = self.fake_client.volumes.delete_volume
336 mocked_function.assert_called_once_with(self.fake_object.volume['id'])