]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: Refactor and cleanup tasks.mgr.dashboard.test_user 33743/head
authorVolker Theile <vtheile@suse.com>
Thu, 5 Mar 2020 10:27:32 +0000 (11:27 +0100)
committerVolker Theile <vtheile@suse.com>
Fri, 6 Mar 2020 08:24:16 +0000 (09:24 +0100)
* Improve @DashboardTestCase.RunAs decorator
* Use command line to create the test user in the 'test_pwd_expiration_date_update' test case.
* Test return codes of various REST API calls.

Fixes: https://tracker.ceph.com/issues/43869
Signed-off-by: Volker Theile <vtheile@suse.com>
qa/tasks/mgr/dashboard/helper.py
qa/tasks/mgr/dashboard/test_user.py

index 24d0f455da7e525440dba67bb76cd13d1b377221..c3904b3cff9a6431a18e7ebff1fe7f1070a16ee9 100644 (file)
@@ -35,7 +35,8 @@ class DashboardTestCase(MgrTestCase):
     AUTH_ROLES = ['administrator']
 
     @classmethod
-    def create_user(cls, username, password, roles=None, force_password=True):
+    def create_user(cls, username, password, roles=None,
+                    force_password=True, cmd_args=None):
         """
         :param username: The name of the user.
         :type username: str
@@ -46,6 +47,9 @@ class DashboardTestCase(MgrTestCase):
         :param force_password: Force the use of the specified password. This
           will bypass the password complexity check. Defaults to 'True'.
         :type force_password: bool
+        :param cmd_args: Additional command line arguments for the
+          'ac-user-create' command.
+        :type cmd_args: None | list[str]
         """
         try:
             cls._ceph_cmd(['dashboard', 'ac-user-show', username])
@@ -54,9 +58,13 @@ class DashboardTestCase(MgrTestCase):
             if ex.exitstatus != 2:
                 raise ex
 
-        user_create_args = ['dashboard', 'ac-user-create', username, password]
+        user_create_args = [
+            'dashboard', 'ac-user-create', username, password
+        ]
         if force_password:
             user_create_args.append('--force-password')
+        if cmd_args:
+            user_create_args.extend(cmd_args)
         cls._ceph_cmd(user_create_args)
 
         if roles:
@@ -86,6 +94,7 @@ class DashboardTestCase(MgrTestCase):
         if cls._loggedin:
             cls.logout()
         cls._post('/api/auth', {'username': username, 'password': password})
+        cls._assertEq(cls._resp.status_code, 201)
         cls._token = cls.jsonBody()['token']
         cls._loggedin = True
 
@@ -93,6 +102,7 @@ class DashboardTestCase(MgrTestCase):
     def logout(cls):
         if cls._loggedin:
             cls._post('/api/auth/logout')
+            cls._assertEq(cls._resp.status_code, 200)
             cls._token = None
             cls._loggedin = False
 
@@ -106,16 +116,22 @@ class DashboardTestCase(MgrTestCase):
                 cls._ceph_cmd(['dashboard', 'ac-role-delete', 'test_role_{}'.format(idx)])
 
     @classmethod
-    def RunAs(cls, username, password, roles):
+    def RunAs(cls, username, password, roles=None, force_password=True,
+              cmd_args=None, login=True):
         def wrapper(func):
             def execute(self, *args, **kwargs):
-                self.create_user(username, password, roles)
-                self.login(username, password)
+                self.create_user(username, password, roles,
+                                 force_password, cmd_args)
+                if login:
+                    self.login(username, password)
                 res = func(self, *args, **kwargs)
-                self.logout()
+                if login:
+                    self.logout()
                 self.delete_user(username, roles)
                 return res
+
             return execute
+
         return wrapper
 
     @classmethod
index a76183f72ad38c08ec2fffd10184e7f0405d5929..ea7beee6d7a50239aa72b9235f21a3258049cc70 100644 (file)
@@ -273,9 +273,8 @@ class UserTest(DashboardTestCase):
                          'Password must not contain repetitive characters.')
         self._reset_login_to_admin('test1')
 
+    @DashboardTestCase.RunAs('test1', 'mypassword10#', ['read-only'], False)
     def test_change_password(self):
-        self.create_user('test1', 'mypassword10#', ['read-only'], force_password=False)
-        self.login('test1', 'mypassword10#')
         self._post('/api/user/test1/change_password', {
             'old_password': 'mypassword10#',
             'new_password': 'newpassword01#'
@@ -285,8 +284,6 @@ class UserTest(DashboardTestCase):
         self._post('/api/auth', {'username': 'test1', 'password': 'mypassword10#'})
         self.assertStatus(400)
         self.assertError(code='invalid_credentials', component='auth')
-        self.delete_user('test1')
-        self.login('admin', 'admin')
 
     def test_create_user_password_cli(self):
         exitcode = self._ceph_cmd_result(['dashboard', 'ac-user-create',
@@ -294,12 +291,11 @@ class UserTest(DashboardTestCase):
         self.assertEqual(exitcode, 0)
         self.delete_user('test1')
 
+    @DashboardTestCase.RunAs('test2', 'foo_bar_10#', force_password=False, login=False)
     def test_change_user_password_cli(self):
-        self.create_user('test2', 'foo_bar_10#', force_password=False)
         exitcode = self._ceph_cmd_result(['dashboard', 'ac-user-set-password',
                                           'test2', 'foo_new-password01#'])
         self.assertEqual(exitcode, 0)
-        self.delete_user('test2')
 
     def test_create_user_password_force_cli(self):
         exitcode = self._ceph_cmd_result(['dashboard', 'ac-user-create',
@@ -308,24 +304,22 @@ class UserTest(DashboardTestCase):
         self.assertEqual(exitcode, 0)
         self.delete_user('test11')
 
+    @DashboardTestCase.RunAs('test22', 'foo_bar_10#', force_password=False, login=False)
     def test_change_user_password_force_cli(self):
-        self.create_user('test22', 'foo_bar_10#', force_password=False)
         exitcode = self._ceph_cmd_result(['dashboard', 'ac-user-set-password',
                                           '--force-password', 'test22',
                                           'bar'])
         self.assertEqual(exitcode, 0)
-        self.delete_user('test22')
 
     def test_create_user_password_cli_fail(self):
         exitcode = self._ceph_cmd_result(['dashboard', 'ac-user-create', 'test3', 'foo'])
         self.assertNotEqual(exitcode, 0)
 
+    @DashboardTestCase.RunAs('test4', 'x1z_tst+_10#', force_password=False, login=False)
     def test_change_user_password_cli_fail(self):
-        self.create_user('test4', 'x1z_tst+_10#', force_password=False)
         exitcode = self._ceph_cmd_result(['dashboard', 'ac-user-set-password',
                                           'test4', 'bar'])
         self.assertNotEqual(exitcode, 0)
-        self.delete_user('test4')
 
     def test_create_user_with_pwd_expiration_date(self):
         future_date = datetime.utcnow() + timedelta(days=10)
@@ -392,30 +386,26 @@ class UserTest(DashboardTestCase):
 
     def test_pwd_expiration_date_update(self):
         self._ceph_cmd(['dashboard', 'set-user-pwd-expiration-span', '10'])
-        self._create_user(username='user1',
-                          password='mypassword10#',
-                          name='My Name',
-                          email='my@email.com',
-                          roles=['administrator'])
-        self.assertStatus(201)
+        self.create_user('user1', 'mypassword10#', ['administrator'])
 
         user_1 = self._get('/api/user/user1')
         self.assertStatus(200)
 
-        time.sleep(10)
         self.login('user1', 'mypassword10#')
         self._post('/api/user/user1/change_password', {
             'old_password': 'mypassword10#',
             'new_password': 'newpassword01#'
         })
         self.assertStatus(200)
-        self._reset_login_to_admin()
 
+        # Compare password expiration dates.
+        self._reset_login_to_admin()
         user_1_pwd_changed = self._get('/api/user/user1')
         self.assertStatus(200)
         self.assertLess(user_1['pwdExpirationDate'], user_1_pwd_changed['pwdExpirationDate'])
 
-        self._delete('/api/user/user1')
+        # Cleanup
+        self.delete_user('user1')
         self._ceph_cmd(['dashboard', 'set-user-pwd-expiration-span', '0'])
 
     def test_pwd_update_required(self):
@@ -541,11 +531,7 @@ class UserTest(DashboardTestCase):
         })
 
     def test_create_user_pwd_update_required(self):
-        exit_code = self._ceph_cmd_result([
-            'dashboard', 'ac-user-create', '--force-password',
-            '--pwd_update_required', 'foo', 'bar'
-        ])
-        self.assertEqual(exit_code, 0)
+        self.create_user('foo', 'bar', cmd_args=['--pwd_update_required'])
         self._get('/api/user/foo')
         self.assertStatus(200)
         self.assertJsonSubset({