class TestRackspaceCtrlDriver(unittest.TestCase): """ Test the libcloud Rackspace driver. """ class StubObject(object): def __init__(self, **kwargs): for arg in kwargs: setattr(self, arg, kwargs[arg]) def setUp(self): """ Set up the objects used by most of the tests. """ self.ctrl = RackspaceCtrl('valid_user', 'valid_api_key', 'http://foo.bar:8888') self.ctrl.post_fn = stub_rackspace_identity_post self.ctrl.driver_cls = MockLibCloudDriver self.ctrl.authenticate() self.ctrl.set_region('iad') self.ctrl.get_image = mock.MagicMock() self.ctrl.get_image.return_value = '' self.key_pair = TestRackspaceCtrlDriver.StubObject(public_key='keystr') def test_create_instance_over_limit(self): """ Ensure '413 Over Limit' error is handled properly. """ self.assertRaises(OverLimit, self.ctrl.create_instance, 'over_limit', 'size', 'image', self.key_pair) def test_create_instance_bad_request(self): """ Ensure '400 Bad Request' error is handled properly. """ self.assertRaises(BadRequest, self.ctrl.create_instance, 'bad_request', 'size', 'image', self.key_pair) def test_delete_instance_nonexistant(self): """ Ensure '404 Instance not found' error is handled properly. """ instance = TestRackspaceCtrlDriver.StubObject(name='nonexistant') self.assertRaises(ItemNotFound, self.ctrl.delete_instance, instance) def test_create_key_pair_duplicate_name(self): """ Ensure '409 Key Pair exists' error is handled properly. """ self.assertRaises(KeyPairExists, self.ctrl.create_key_pair, 'duplicate_name') def test_service_uavailable(self): """ Ensure '503 Service Unavailable' error is handled properly. """ self.assertRaises(ServiceUnavailable, self.ctrl.create_instance, 'service_unavailable', 'size', 'image', self.key_pair) def test_unauthorized(self): """ Ensure '401 Unauthroized' error is handled properly. """ self.assertRaises(Unauthorized, self.ctrl.create_instance, 'unauthorized', 'size', 'image', self.key_pair) def test_api_error(self): """ Ensure '500 ...' error is handled properly. """ self.assertRaises(ApiError, self.ctrl.create_instance, 'api_error', 'size', 'image', self.key_pair) def test_list_images(self): self.ctrl.tenant_id = '1234567890' self.ctrl._get_shared_images = mock.MagicMock() self.ctrl._get_shared_images.return_value = [ { "image_name": "foo", "schema": "/v2/schemas/member", "status": "pending", "image_id": "1c6ba38d-5960-4cc1-a3db-bab521e99afa", "member_id": "user_foo", "created_at": "2014-06-25T13:49:56Z", "updated_at": "2014-06-25T13:49:56Z" }, { "image_name": "foo2", "schema": "/v2/schemas/member", "status": "pending", "image_id": "a44a6c31-a437-498e-b4e4-3a6cb9d1d733", "member_id": "user_foo", "created_at": "2014-06-25T13:49:59Z", "updated_at": "2014-06-25T13:49:59Z" }, { "image_name": "foo3", "member_id": "user_foo", "image_id": "64c3b6e5-05c1-4407-82b9-5690cdfaa887", "status": "ALREADYREQUESTED" }, { "image_name": "foo4", "member_id": "user_foo", "image_id": "a6893756-b108-4667-9bf3-7a02d076b3e2", "status": "ALREADYREQUESTED" } ] images = self.ctrl.list_images() self.assertEqual({'foo', 'foo2', 'foo3', 'foo4'}, set(images.values()))