]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Unit tests: Create User for testing AccessKey
authorZane Bitter <zbitter@redhat.com>
Fri, 14 Jun 2013 10:31:22 +0000 (12:31 +0200)
committerZane Bitter <zbitter@redhat.com>
Fri, 14 Jun 2013 10:31:27 +0000 (12:31 +0200)
An AccessKey resource is not independent of its associated User resource,
which must be present in the same stack. Consequently, we need to create a
real User resource that is a member of the same stack in order to test the
AccessKey in a realistic environment.

Change-Id: I4b732c93fe9823552baf65c3f9c87c8ebab061a4

heat/tests/test_user.py

index c444df669bf55b3d693b45be85f71f6f4f1d4bd4..21b630d6dc3a935cd301d9e662530270614902e4 100644 (file)
@@ -267,22 +267,26 @@ class AccessKeyTest(UserPolicyTestCase):
                          rsrc.state)
         return rsrc
 
+    def create_user(self, t, stack, resource_name):
+        rsrc = stack[resource_name]
+        self.assertEqual(None, rsrc.validate())
+        scheduler.TaskRunner(rsrc.create)()
+        self.assertEqual(rsrc.CREATE_COMPLETE, rsrc.state)
+        return rsrc
+
     def test_access_key(self):
         self.m.StubOutWithMock(user.AccessKey, 'keystone')
+        self.m.StubOutWithMock(user.User, 'keystone')
         user.AccessKey.keystone().MultipleTimes().AndReturn(self.fc)
+        user.User.keystone().MultipleTimes().AndReturn(self.fc)
 
         self.m.ReplayAll()
 
         t = template_format.parse(user_accesskey_template)
-        # Override the Ref for UserName with a hard-coded name,
-        # so we don't need to create the User resource
-        username = str(utils.PhysName('test_stack', 'CfnUser'))
-        t['Resources']['HostKeys']['Properties']['UserName'] = username
 
         stack = parse_stack(t)
-        stack.resources['CfnUser'].resource_id = self.fc.user_id
-        stack.resources['CfnUser'].state = 'CREATE_COMPLETE'
 
+        self.create_user(t, stack, 'CfnUser')
         rsrc = self.create_access_key(t, stack, 'HostKeys')
 
         self.assertRaises(resource.UpdateReplace,
@@ -304,17 +308,29 @@ class AccessKeyTest(UserPolicyTestCase):
         self.assertEqual(None, rsrc.delete())
         self.m.VerifyAll()
 
-        # Check for double delete
-        test_key = object()
+    def test_access_key_deleted(self):
+        self.m.StubOutWithMock(user.AccessKey, 'keystone')
+        self.m.StubOutWithMock(user.User, 'keystone')
+        user.AccessKey.keystone().MultipleTimes().AndReturn(self.fc)
+        user.User.keystone().MultipleTimes().AndReturn(self.fc)
+
+        self.m.ReplayAll()
+
+        t = template_format.parse(user_accesskey_template)
+        stack = parse_stack(t)
+
+        self.create_user(t, stack, 'CfnUser')
+        rsrc = self.create_access_key(t, stack, 'HostKeys')
+        self.assertEqual(rsrc.CREATE_COMPLETE, rsrc.state)
+
         self.m.StubOutWithMock(self.fc, 'delete_ec2_keypair')
         NotFound = keystoneclient.exceptions.NotFound
         self.fc.delete_ec2_keypair(self.fc.user_id,
-                                   test_key).AndRaise(NotFound('Gone'))
-
+                                   rsrc.resource_id).AndRaise(NotFound('Gone'))
         self.m.ReplayAll()
-        rsrc.state = rsrc.CREATE_COMPLETE
-        rsrc.resource_id = test_key
+
         self.assertEqual(None, rsrc.delete())
+
         self.m.VerifyAll()
 
     def test_access_key_no_user(self):