|
20 | 20 |
|
21 | 21 | from openstackclient.common import exceptions |
22 | 22 | from openstackclient.common import utils |
| 23 | +from openstackclient.tests import fakes |
23 | 24 | from openstackclient.tests import utils as test_utils |
24 | 25 |
|
25 | 26 | PASSWORD = "Pa$$w0rd" |
26 | 27 | WASSPORD = "Wa$$p0rd" |
27 | 28 | DROWSSAP = "dr0w$$aP" |
28 | 29 |
|
29 | 30 |
|
| 31 | +class FakeOddballResource(fakes.FakeResource): |
| 32 | + |
| 33 | + def get(self, attr): |
| 34 | + """get() is needed for utils.find_resource()""" |
| 35 | + if attr == 'id': |
| 36 | + return self.id |
| 37 | + elif attr == 'name': |
| 38 | + return self.name |
| 39 | + else: |
| 40 | + return None |
| 41 | + |
| 42 | + |
30 | 43 | class TestUtils(test_utils.TestCase): |
31 | 44 |
|
32 | 45 | def test_get_password_good(self): |
@@ -242,6 +255,47 @@ def test_find_resource_find_no_unique(self): |
242 | 255 | self.manager.get.assert_called_with(self.name) |
243 | 256 | self.manager.find.assert_called_with(name=self.name) |
244 | 257 |
|
| 258 | + def test_find_resource_silly_resource(self): |
| 259 | + # We need a resource with no resource_class for this test, start fresh |
| 260 | + self.manager = mock.Mock() |
| 261 | + self.manager.get = mock.Mock(side_effect=Exception('Boom!')) |
| 262 | + self.manager.find = mock.Mock( |
| 263 | + side_effect=AttributeError( |
| 264 | + "'Controller' object has no attribute 'find'", |
| 265 | + ) |
| 266 | + ) |
| 267 | + silly_resource = FakeOddballResource( |
| 268 | + None, |
| 269 | + {'id': '12345', 'name': self.name}, |
| 270 | + loaded=True, |
| 271 | + ) |
| 272 | + self.manager.list = mock.Mock( |
| 273 | + return_value=[silly_resource, ], |
| 274 | + ) |
| 275 | + result = utils.find_resource(self.manager, self.name) |
| 276 | + self.assertEqual(silly_resource, result) |
| 277 | + self.manager.get.assert_called_with(self.name) |
| 278 | + self.manager.find.assert_called_with(name=self.name) |
| 279 | + |
| 280 | + def test_find_resource_silly_resource_not_found(self): |
| 281 | + # We need a resource with no resource_class for this test, start fresh |
| 282 | + self.manager = mock.Mock() |
| 283 | + self.manager.get = mock.Mock(side_effect=Exception('Boom!')) |
| 284 | + self.manager.find = mock.Mock( |
| 285 | + side_effect=AttributeError( |
| 286 | + "'Controller' object has no attribute 'find'", |
| 287 | + ) |
| 288 | + ) |
| 289 | + self.manager.list = mock.Mock(return_value=[]) |
| 290 | + result = self.assertRaises(exceptions.CommandError, |
| 291 | + utils.find_resource, |
| 292 | + self.manager, |
| 293 | + self.name) |
| 294 | + self.assertEqual("Could not find resource legos", |
| 295 | + str(result)) |
| 296 | + self.manager.get.assert_called_with(self.name) |
| 297 | + self.manager.find.assert_called_with(name=self.name) |
| 298 | + |
245 | 299 | def test_format_dict(self): |
246 | 300 | expected = "a='b', c='d', e='f'" |
247 | 301 | self.assertEqual(expected, |
|
0 commit comments