Merge "Added method to return OpenStackVmInstance from Heat."
[snaps.git] / snaps / openstack / utils / tests / keystone_utils_tests.py
index 347b8e0..bd0086b 100644 (file)
@@ -17,7 +17,7 @@ import uuid
 from snaps.openstack.create_project import ProjectSettings
 from snaps.openstack.create_user import UserSettings
 from snaps.openstack.tests.os_source_file_test import OSComponentTestCase
 from snaps.openstack.create_project import ProjectSettings
 from snaps.openstack.create_user import UserSettings
 from snaps.openstack.tests.os_source_file_test import OSComponentTestCase
-from snaps.openstack.utils import keystone_utils
+from snaps.openstack.utils import keystone_utils, neutron_utils
 
 __author__ = 'spisarski'
 
 
 __author__ = 'spisarski'
 
@@ -59,12 +59,13 @@ class KeystoneUtilsTests(OSComponentTestCase):
         Instantiates the CreateImage object that is responsible for downloading
         and creating an OS image file within OpenStack
         """
         Instantiates the CreateImage object that is responsible for downloading
         and creating an OS image file within OpenStack
         """
-        guid = uuid.uuid4()
-        self.username = self.__class__.__name__ + '-' + str(guid)
+        self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
+        self.username = self.guid + '-username'
         self.user = None
 
         self.user = None
 
-        self.project_name = self.__class__.__name__ + '-' + str(guid)
+        self.project_name = self.guid + '-projName'
         self.project = None
         self.project = None
+        self.role = None
         self.keystone = keystone_utils.keystone_client(self.os_creds)
 
     def tearDown(self):
         self.keystone = keystone_utils.keystone_client(self.os_creds)
 
     def tearDown(self):
@@ -72,16 +73,33 @@ class KeystoneUtilsTests(OSComponentTestCase):
         Cleans the remote OpenStack objects
         """
         if self.project:
         Cleans the remote OpenStack objects
         """
         if self.project:
-                keystone_utils.delete_project(self.keystone, self.project)
+            neutron = neutron_utils.neutron_client(self.os_creds)
+            default_sec_grp = neutron_utils.get_security_group(
+                neutron, sec_grp_name='default',
+                project_id=self.project.id)
+            if default_sec_grp:
+                try:
+                    neutron_utils.delete_security_group(
+                        neutron, default_sec_grp)
+                except:
+                    pass
+
+            keystone_utils.delete_project(self.keystone, self.project)
 
         if self.user:
             keystone_utils.delete_user(self.keystone, self.user)
 
 
         if self.user:
             keystone_utils.delete_user(self.keystone, self.user)
 
+        if self.role:
+            keystone_utils.delete_role(self.keystone, self.role)
+
     def test_create_user_minimal(self):
         """
         Tests the keystone_utils.create_user() function
         """
     def test_create_user_minimal(self):
         """
         Tests the keystone_utils.create_user() function
         """
-        user_settings = UserSettings(name=self.username, password='test123')
+        user_settings = UserSettings(
+            name=self.username,
+            password=str(uuid.uuid4()),
+            domain_name=self.os_creds.user_domain_name)
         self.user = keystone_utils.create_user(self.keystone, user_settings)
         self.assertEqual(self.username, self.user.name)
 
         self.user = keystone_utils.create_user(self.keystone, user_settings)
         self.assertEqual(self.username, self.user.name)
 
@@ -93,23 +111,29 @@ class KeystoneUtilsTests(OSComponentTestCase):
         """
         Tests the keyston_utils.create_project() funtion
         """
         """
         Tests the keyston_utils.create_project() funtion
         """
-        project_settings = ProjectSettings(name=self.project_name)
+        project_settings = ProjectSettings(
+            name=self.project_name, domain=self.os_creds.project_domain_name)
         self.project = keystone_utils.create_project(self.keystone,
                                                      project_settings)
         self.assertEqual(self.project_name, self.project.name)
 
         project = keystone_utils.get_project(
         self.project = keystone_utils.create_project(self.keystone,
                                                      project_settings)
         self.assertEqual(self.project_name, self.project.name)
 
         project = keystone_utils.get_project(
-            keystone=self.keystone, project_name=project_settings.name)
+            keystone=self.keystone, project_settings=project_settings)
         self.assertIsNotNone(project)
         self.assertEqual(self.project_name, self.project.name)
 
         self.assertIsNotNone(project)
         self.assertEqual(self.project_name, self.project.name)
 
+        domain = keystone_utils.get_domain_by_id(
+            self.keystone, project.domain_id)
+        self.assertIsNotNone(domain)
+        self.assertEqual(domain.id, project.domain_id)
+
     def test_get_endpoint_success(self):
         """
         Tests to ensure that proper credentials and proper service type can
         succeed.
         """
         endpoint = keystone_utils.get_endpoint(self.os_creds,
     def test_get_endpoint_success(self):
         """
         Tests to ensure that proper credentials and proper service type can
         succeed.
         """
         endpoint = keystone_utils.get_endpoint(self.os_creds,
-                                               service_type="identity")
+                                               service_type='identity')
         self.assertIsNotNone(endpoint)
 
     def test_get_endpoint_fail_without_proper_service(self):
         self.assertIsNotNone(endpoint)
 
     def test_get_endpoint_fail_without_proper_service(self):
@@ -118,7 +142,7 @@ class KeystoneUtilsTests(OSComponentTestCase):
         cannot succeed.
         """
         with self.assertRaises(Exception):
         cannot succeed.
         """
         with self.assertRaises(Exception):
-            keystone_utils.get_endpoint(self.os_creds, service_type="glance")
+            keystone_utils.get_endpoint(self.os_creds, service_type='glance')
 
     def test_get_endpoint_fail_without_proper_credentials(self):
         """
 
     def test_get_endpoint_fail_without_proper_credentials(self):
         """
@@ -131,4 +155,52 @@ class KeystoneUtilsTests(OSComponentTestCase):
             keystone_utils.get_endpoint(
                 OSCreds(username='user', password='pass', auth_url='url',
                         project_name='project'),
             keystone_utils.get_endpoint(
                 OSCreds(username='user', password='pass', auth_url='url',
                         project_name='project'),
-                service_type="image")
+                service_type='image')
+
+    def test_get_endpoint_with_each_interface(self):
+        """
+        Tests to ensure that endpoint urls are obtained with
+        'public', 'internal' and 'admin' interface
+        """
+        endpoint_public = keystone_utils.get_endpoint(self.os_creds,
+                                                      service_type='image',
+                                                      interface='public')
+        endpoint_internal = keystone_utils.get_endpoint(self.os_creds,
+                                                        service_type='image',
+                                                        interface='internal')
+        endpoint_admin = keystone_utils.get_endpoint(self.os_creds,
+                                                     service_type='image',
+                                                     interface='admin')
+        self.assertIsNotNone(endpoint_public)
+        self.assertIsNotNone(endpoint_internal)
+        self.assertIsNotNone(endpoint_admin)
+
+    def test_grant_user_role_to_project(self):
+        """
+        Tests the keystone_utils function grant_user_role_to_project()
+        :return:
+        """
+        user_settings = UserSettings(
+            name=self.username, password=str(uuid.uuid4()),
+            domain_name=self.os_creds.user_domain_name)
+        self.user = keystone_utils.create_user(self.keystone, user_settings)
+        self.assertEqual(self.username, self.user.name)
+
+        project_settings = ProjectSettings(
+            name=self.project_name, domain=self.os_creds.project_domain_name)
+        self.project = keystone_utils.create_project(self.keystone,
+                                                     project_settings)
+        self.assertEqual(self.project_name, self.project.name)
+
+        role_name = self.guid + '-role'
+        self.role = keystone_utils.create_role(self.keystone, role_name)
+        self.assertEqual(role_name, self.role.name)
+
+        keystone_utils.grant_user_role_to_project(
+            self.keystone, self.role, self.user, self.project)
+
+        user_roles = keystone_utils.get_roles_by_user(
+            self.keystone, self.user, self.project)
+        self.assertIsNotNone(user_roles)
+        self.assertEqual(1, len(user_roles))
+        self.assertEqual(self.role.id, user_roles[0].id)