Beispiel #1
0
    def test_remove_user_role(self):
        """ Remove all roles on a user from our project """
        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {'user_id_1': ['_member_']}

        user1 = mock.Mock()
        user1.id = 'user_id_1'
        user1.name = '*****@*****.**'
        user1.password = '******'
        user1.email = '*****@*****.**'

        setup_temp_cache({'test_project': project}, {'user_id_1': user1})

        admin_headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "project_admin,_member_,project_mod",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }

        # admins removes role from the test user
        url = "/v1/openstack/users/%s/roles" % user1.id
        data = {'roles': ["_member_"]}
        response = self.client.delete(url,
                                      data,
                                      format='json',
                                      headers=admin_headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(),
                         {'notes': ['Task completed successfully.']})
Beispiel #2
0
    def test_reset_admin(self):
        """
        Ensure that you cannot issue a password reset for an
        admin user.
        """

        user = mock.Mock()
        user.id = 'user_id'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'
        user.password = "******"

        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {user.id: ['admin']}

        setup_temp_cache({'test_project': project}, {user.id: user})

        url = "/v1/actions/ResetPassword"
        data = {'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(
            response.data['notes'],
            ['If user with email exists, reset token will be issued.'])
        self.assertEqual(0, Token.objects.count())
Beispiel #3
0
    def test_update_email_task_username_not_email(self):

        user = mock.Mock()
        user.id = 'test_user_id'
        user.name = "test_user"
        user.email = "*****@*****.**"
        user.domain = 'default'

        setup_temp_cache({}, {user.id: user})

        url = "/v1/actions/UpdateEmail"
        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "project_admin,_member_,project_mod",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }

        data = {'new_email': "*****@*****.**"}
        response = self.client.post(url, data, format='json', headers=headers)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data, {'notes': ['created token']})

        new_token = Token.objects.all()[0]
        url = "/v1/tokens/" + new_token.token

        data = {'confirm': True}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEquals(user.name, "test_user")
        self.assertEquals(user.email, '*****@*****.**')
    def test_add_default_users(self):
        """
        Base case, adds admin user with admin role to project.

        NOTE(adriant): both the lists of users, and the roles to add
        come from test_settings. This test assumes the conf setting of:
        default_users = ['admin']
        default_roles = ['admin']
        """
        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        setup_temp_cache({'test_project': project}, {})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={'roles': ['admin']})

        task.cache = {'project_id': "test_project_id"}

        action = AddDefaultUsersToProjectAction({'domain_id': 'default'},
                                                task=task,
                                                order=1)

        action.pre_approve()
        self.assertEquals(action.valid, True)

        action.post_approve()
        self.assertEquals(action.valid, True)

        project = tests.temp_cache['projects']['test_project']
        self.assertEquals(project.roles['user_id_0'], ['admin'])
Beispiel #5
0
    def test_update_email_task_invalid_email(self):

        user = mock.Mock()
        user.id = 'test_user_id'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'

        setup_temp_cache({}, {user.id: user})

        url = "/v1/actions/UpdateEmail"
        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "project_admin,_member_,project_mod",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }

        data = {'new_email': "new_test@examplecom"}
        response = self.client.post(url, data, format='json', headers=headers)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(response.data,
                         {'new_email': [u'Enter a valid email address.']})
Beispiel #6
0
    def test_update_email_pre_existing_user_with_email(self):

        user = mock.Mock()
        user.id = 'test_user_id'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'

        user2 = mock.Mock()
        user2.id = 'new_user_id'
        user2.name = "*****@*****.**"
        user2.email = "*****@*****.**"
        user2.domain = 'default'

        setup_temp_cache({}, {user.id: user, user2.id: user2})

        url = "/v1/actions/UpdateEmail"
        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "project_admin,_member_,project_mod",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True,
            'project_domain_id': 'default',
        }

        data = {'new_email': "*****@*****.**"}
        response = self.client.post(url, data, format='json', headers=headers)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(response.data, ['actions invalid'])
        self.assertEqual(len(Token.objects.all()), 0)

        self.assertEqual(len(mail.outbox), 0)
Beispiel #7
0
    def test_notification_createproject(self):
        """
        CreateProject should create a notification.
        We should be able to grab it.
        """
        setup_temp_cache({}, {})

        url = "/v1/actions/CreateProject"
        data = {'project_name': "test_project", 'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        new_task = Task.objects.all()[0]

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "admin,_member_",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }

        url = "/v1/notifications"
        response = self.client.get(url, headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['notifications'][0]['task'],
                         new_task.uuid)
    def test_add_default_users_reapprove(self):
        """
        Ensure nothing happens or changes during rerun of approve.
        """
        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        setup_temp_cache({'test_project': project}, {})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={'roles': ['admin']})

        task.cache = {'project_id': "test_project_id"}

        action = AddDefaultUsersToProjectAction({'domain_id': 'default'},
                                                task=task,
                                                order=1)

        action.pre_approve()
        self.assertEquals(action.valid, True)

        action.post_approve()
        self.assertEquals(action.valid, True)

        project = tests.temp_cache['projects']['test_project']
        self.assertEquals(project.roles['user_id_0'], ['admin'])

        action.post_approve()
        self.assertEquals(action.valid, True)

        project = tests.temp_cache['projects']['test_project']
        self.assertEquals(project.roles['user_id_0'], ['admin'])
Beispiel #9
0
    def test_new_project(self):
        """
        Ensure the new project workflow goes as expected.
        """

        setup_temp_cache({}, {})

        url = "/v1/actions/CreateProject"
        data = {'project_name': "test_project", 'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "admin,_member_",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }
        new_task = Task.objects.all()[0]
        url = "/v1/tasks/" + new_task.uuid
        response = self.client.post(url, {'approved': True},
                                    format='json',
                                    headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data, {'notes': ['created token']})

        new_token = Token.objects.all()[0]
        url = "/v1/tokens/" + new_token.token
        data = {'password': '******'}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
Beispiel #10
0
    def test_reset_user(self):
        """
        Ensure the reset user workflow goes as expected.
        Create task + create token, submit token.
        """

        user = mock.Mock()
        user.id = 'user_id'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'
        user.password = "******"

        setup_temp_cache({}, {user.id: user})

        url = "/v1/actions/ResetPassword"
        data = {'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(
            response.data['notes'],
            ['If user with email exists, reset token will be issued.'])

        new_token = Token.objects.all()[0]
        url = "/v1/tokens/" + new_token.token
        data = {'password': '******'}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(user.password, 'new_test_password')
Beispiel #11
0
    def test_email_additional_action_invalid(self):
        """
        The additional email actions should not send an email if the
        action is invalid.
        """

        setup_temp_cache({}, {})

        url = "/v1/actions/InviteUser"
        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "project_admin,_member_,project_mod",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }
        data = {
            'email': "*****@*****.**",
            'roles': ["_member_"],
            'project_id': 'test_project_id'
        }
        response = self.client.post(url, data, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(response.data, {'errors': ['actions invalid']})
        self.assertEqual(len(mail.outbox), 0)
    def test_new_project_action_rerun_post_approve(self):
        """
        Tests the new project action for an existing user.
        """

        user = mock.Mock()
        user.id = "test_user_id"
        user.name = "test_user"
        user.domain = 'default'

        project = mock.Mock()
        project.id = "parent_project"
        project.domain = "default"

        setup_temp_cache({project.id: project}, {user.id: user})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={
                                       "user_id": "test_user_id",
                                       "project_id": "parent_project",
                                       "project_domain_id": 'default'
                                   })

        data = {
            'domain_id': 'default',
            'parent_id': "parent_project",
            'project_name': 'test_project',
        }

        action = NewProjectAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEquals(action.valid, True)

        action.post_approve()
        self.assertEquals(action.valid, True)
        self.assertEquals(tests.temp_cache['projects']['test_project'].name,
                          'test_project')

        self.assertEquals(tests.temp_cache['projects']['test_project'].parent,
                          'parent_project')

        action.post_approve()
        # Nothing should change
        self.assertEquals(action.valid, True)
        self.assertEquals(tests.temp_cache['projects']['test_project'].name,
                          'test_project')

        self.assertEquals(tests.temp_cache['projects']['test_project'].parent,
                          'parent_project')

        project = tests.temp_cache['projects']['test_project']
        self.assertEquals(
            sorted(project.roles["test_user_id"]),
            sorted([
                '_member_', 'project_admin', 'project_mod', 'heat_stack_owner'
            ]))

        action.submit({})
        self.assertEquals(action.valid, True)
Beispiel #13
0
    def test_reset_user_password_no_user(self):
        """
        Reset password for a non-existant user.
        """

        setup_temp_cache({}, {})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={
                                       'roles': ['admin', 'project_mod'],
                                       'project_id': 'test_project_id',
                                       'project_domain_id': 'default',
                                   })

        data = {
            'domain_name': 'Default',
            'email': '*****@*****.**',
            'project_name': 'test_project',
        }

        action = ResetUserPasswordAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEquals(action.valid, False)

        action.post_approve()
        self.assertEquals(action.valid, False)

        token_data = {}
        action.submit(token_data)
        self.assertEquals(action.valid, False)
Beispiel #14
0
    def test_new_user_no_tenant(self):
        """
        No user, no tenant.
        """

        setup_temp_cache({}, {})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={
                                       'roles': ['admin', 'project_mod'],
                                       'project_id': 'test_project_id',
                                       'project_domain_id': 'default',
                                   })

        data = {
            'email': '*****@*****.**',
            'project_id': 'test_project_id',
            'roles': ['_member_'],
            'domain_id': 'default',
        }

        action = NewUserAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEquals(action.valid, False)

        action.post_approve()
        self.assertEquals(action.valid, False)

        token_data = {}
        action.submit(token_data)
        self.assertEquals(action.valid, False)
Beispiel #15
0
    def test_return_task_id_if_admin_fail(self):
        """
        Confirm that the task id is not returned unless admin.
        """

        user = mock.Mock()
        user.id = 'user_id'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'
        user.password = "******"

        setup_temp_cache({}, {user.id: user})

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "_member_",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }
        url = "/v1/actions/ResetPassword"
        data = {'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        self.assertFalse(response.data.get('task'))
Beispiel #16
0
    def test_task_complete(self):
        """
        Can't approve a completed task.
        """
        setup_temp_cache({}, {})

        url = "/v1/actions/CreateProject"
        data = {'project_name': "test_project", 'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "admin,_member_",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }
        new_task = Task.objects.all()[0]
        new_task.completed = True
        new_task.save()
        url = "/v1/tasks/" + new_task.uuid
        response = self.client.post(url, {'approved': True},
                                    format='json',
                                    headers=headers)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(response.data,
                         {'errors': ['This task has already been completed.']})
Beispiel #17
0
    def test_user_detail(self):
        """
        Confirm that the user detail view functions as expected
        """

        user = mock.Mock()
        user.id = 'test_user_id'
        user.name = '*****@*****.**'
        user.email = '*****@*****.**'

        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {user.id: ['_member_']}

        setup_temp_cache({'test_project': project}, {user.id: user})

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "project_admin,_member_,project_mod",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }

        url = "/v1/openstack/users/%s" % user.id
        response = self.client.get(url, headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json()['username'], '*****@*****.**')
        self.assertEqual(response.json()['roles'], ["_member_"])
    def test_new_project_invalid_domain_id(self):
        """ Create a project using an invalid domain """

        setup_temp_cache({}, {})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={
                                       'roles': ['admin', 'project_mod'],
                                       'project_id': 'test_project_id',
                                       'project_domain_id': 'default',
                                   })

        data = {
            'domain_id': 'not_default_id',
            'parent_id': None,
            'email': '*****@*****.**',
            'project_name': 'test_project',
        }

        action = NewProjectWithUserAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEquals(action.valid, False)

        action.post_approve()
        self.assertEquals(action.valid, False)
    def test_new_project_existing_project(self):
        """
        Create a project that already exists.
        """

        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        setup_temp_cache({project.name: project}, {})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={
                                       'roles': ['admin', 'project_mod'],
                                       'project_id': 'test_project_id',
                                       'project_domain_id': 'default',
                                   })

        data = {
            'domain_id': 'default',
            'parent_id': None,
            'email': '*****@*****.**',
            'project_name': 'test_project',
        }

        action = NewProjectWithUserAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEquals(action.valid, False)

        action.post_approve()
        self.assertEquals(action.valid, False)
Beispiel #20
0
    def test_token_expired_get(self):
        """
        Expired token should do nothing, then delete itself.
        """

        user = mock.Mock()
        user.id = 'user_id'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'
        user.password = "******"

        setup_temp_cache({}, {user.id: user})

        url = "/v1/actions/ResetPassword"
        data = {'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(
            response.data['notes'],
            ['If user with email exists, reset token will be issued.'])

        new_token = Token.objects.all()[0]
        new_token.expires = timezone.now() - timedelta(hours=24)
        new_token.save()
        url = "/v1/tokens/" + new_token.token
        response = self.client.get(url)
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
        self.assertEqual(
            response.data,
            {'errors': ['This token does not exist or has expired.']})
        self.assertEqual(0, Token.objects.count())
    def test_add_default_users_invalid_project(self):
        """Add default users to a project that doesn't exist.

        Action should become invalid at the post_approve state, it's ok if
        the project isn't created yet during pre_approve.
        """
        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        setup_temp_cache({'test_project': project}, {})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={'roles': ['admin']})

        task.cache = {'project_id': "invalid_project_id"}

        action = AddDefaultUsersToProjectAction({'domain_id': 'default'},
                                                task=task,
                                                order=1)
        action.pre_approve()
        # No need to test project yet - it's ok if it doesn't exist
        self.assertEquals(action.valid, True)

        action.post_approve()
        # Now the missing project should make the action invalid
        self.assertEquals(action.valid, False)
Beispiel #22
0
    def test_cancel_task_sent_token(self):
        """
        Ensure the ability to cancel a task after the token is sent.
        """

        setup_temp_cache({}, {})

        url = "/v1/actions/CreateProject"
        data = {'project_name': "test_project", 'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "admin,_member_",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }
        new_task = Task.objects.all()[0]
        url = "/v1/tasks/" + new_task.uuid
        response = self.client.post(url, {'approved': True},
                                    format='json',
                                    headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        response = self.client.delete(url, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        new_token = Token.objects.all()[0]
        url = "/v1/tokens/" + new_token.token
        data = {'password': '******'}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
    def test_new_project_disabled_user(self):
        """
        Create a project for a user that is disabled.
        """

        user = mock.Mock()
        user.id = 'user_id_1'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'
        user.enabled = False

        # create disabled user
        setup_temp_cache({}, {user.id: user})

        task = Task.objects.create(ip_address="0.0.0.0", keystone_user={})

        data = {
            'domain_id': 'default',
            'parent_id': None,
            'email': '*****@*****.**',
            'project_name': 'test_project',
        }

        # Sign up, approve
        action = NewProjectWithUserAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEquals(action.valid, True)

        action.post_approve()
        self.assertEquals(action.valid, True)
        self.assertEquals(tests.temp_cache['projects']['test_project'].name,
                          'test_project')
        self.assertEquals(
            task.cache, {
                'user_id': 'user_id_1',
                'project_id': 'project_id_1',
                'user_state': 'disabled'
            })
        self.assertEquals(action.action.cache["token_fields"], ['password'])

        # submit password reset
        token_data = {'password': '******'}
        action.submit(token_data)
        self.assertEquals(action.valid, True)

        # check that user has been created correctly
        self.assertEquals(tests.temp_cache['users'][user.id].email,
                          '*****@*****.**')
        self.assertEquals(tests.temp_cache['users'][user.id].enabled, True)

        # Check user has correct roles in new project
        project = tests.temp_cache['projects']['test_project']
        self.assertEquals(
            sorted(project.roles[user.id]),
            sorted([
                '_member_', 'project_admin', 'project_mod', 'heat_stack_owner'
            ]))
Beispiel #24
0
    def test_token_expired_delete(self):
        """
        test deleting of expired tokens.
        """

        user = mock.Mock()
        user.id = 'user_id'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'
        user.password = "******"

        user2 = mock.Mock()
        user2.id = 'user_id2'
        user2.name = "*****@*****.**"
        user2.email = "*****@*****.**"
        user2.domain = 'default'
        user2.password = "******"

        setup_temp_cache({}, {user.id: user, user2.name: user2})

        url = "/v1/actions/ResetPassword"
        data = {'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(
            response.data['notes'],
            ['If user with email exists, reset token will be issued.'])

        url = "/v1/actions/ResetPassword"
        data = {'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(
            response.data['notes'],
            ['If user with email exists, reset token will be issued.'])

        tokens = Token.objects.all()

        self.assertEqual(len(tokens), 2)

        new_token = tokens[0]
        new_token.expires = timezone.now() - timedelta(hours=24)
        new_token.save()

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "admin,_member_",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }
        url = "/v1/tokens/"
        response = self.client.delete(url, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data,
                         {'notes': ['Deleted all expired tokens.']})
        self.assertEqual(Token.objects.count(), 1)
    def test_new_project_user_disabled_during_signup(self):
        """
        Create a project for a user that is created and disabled during signup.

        This exercises the tasks ability to correctly act based on changed
        circumstances between two states.
        """

        # Start with nothing created
        setup_temp_cache({}, {})

        # Sign up for the project+user, validate.
        task = Task.objects.create(ip_address="0.0.0.0", keystone_user={})

        data = {
            'domain_id': 'default',
            'parent_id': None,
            'email': '*****@*****.**',
            'project_name': 'test_project',
        }

        # Sign up
        action = NewProjectWithUserAction(data, task=task, order=1)
        action.pre_approve()
        self.assertEquals(action.valid, True)

        # Create the disabled user directly with the Identity Manager.
        fm = FakeManager()
        user = fm.create_user(name="*****@*****.**",
                              password='******',
                              email="*****@*****.**",
                              created_on=None,
                              domain='default',
                              default_project=None)
        fm.disable_user(user.id)

        # approve previous signup
        action.post_approve()
        self.assertEquals(action.valid, True)
        project = tests.temp_cache['projects']['test_project']
        self.assertEquals(project.name, 'test_project')
        self.assertEquals(task.cache, {
            'user_id': user.id,
            'project_id': project.id,
            'user_state': 'disabled'
        })

        # check that user has been re-enabled with a generated password.
        self.assertEquals(user.enabled, True)
        self.assertNotEquals(user.password, 'origpass')

        # submit password reset
        token_data = {'password': '******'}
        action.submit(token_data)
        self.assertEquals(action.valid, True)

        # Ensure user has new password:
        self.assertEquals(user.password, '123456')
    def test_new_project_reapprove(self):
        """
        Project created at post_approve step,
        ensure reapprove does nothing.
        """

        setup_temp_cache({}, {})

        task = Task.objects.create(ip_address="0.0.0.0", keystone_user={})

        data = {
            'domain_id': 'default',
            'parent_id': None,
            'email': '*****@*****.**',
            'project_name': 'test_project',
        }

        action = NewProjectWithUserAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEquals(action.valid, True)

        action.post_approve()
        self.assertEquals(action.valid, True)
        self.assertEquals(tests.temp_cache['projects']['test_project'].name,
                          'test_project')
        self.assertEquals(
            task.cache, {
                'project_id': 'project_id_1',
                'user_id': 'user_id_1',
                'user_state': 'default'
            })

        action.post_approve()
        self.assertEquals(action.valid, True)
        self.assertEquals(tests.temp_cache['projects']['test_project'].name,
                          'test_project')
        self.assertEquals(
            task.cache, {
                'project_id': 'project_id_1',
                'user_id': 'user_id_1',
                'user_state': 'default'
            })

        token_data = {'password': '******'}
        action.submit(token_data)
        self.assertEquals(action.valid, True)

        self.assertEquals(tests.temp_cache['users']["user_id_1"].email,
                          '*****@*****.**')
        project = tests.temp_cache['projects']['test_project']
        self.assertEquals(
            sorted(project.roles["user_id_1"]),
            sorted([
                '_member_', 'project_admin', 'project_mod', 'heat_stack_owner'
            ]))
Beispiel #27
0
    def test_task_list(self):
        """
        """
        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        setup_temp_cache({'test_project': project}, {})

        url = "/v1/actions/InviteUser"
        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "project_admin,_member_,project_mod",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }
        data = {
            'email': "*****@*****.**",
            'roles': ["_member_"],
            'project_id': 'test_project_id'
        }
        response = self.client.post(url, data, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        data = {
            'email': "*****@*****.**",
            'roles': ["_member_"],
            'project_id': 'test_project_id'
        }
        response = self.client.post(url, data, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        data = {
            'email': "*****@*****.**",
            'roles': ["_member_"],
            'project_id': 'test_project_id'
        }
        response = self.client.post(url, data, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "admin,_member_",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }
        url = "/v1/tasks"
        response = self.client.get(url, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data['tasks']), 3)
Beispiel #28
0
    def test_new_user_disabled(self):
        """
        Disabled user, valid existing tenant, no role.
        """
        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        user = mock.Mock()
        user.id = 'user_id_1'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'
        user.enabled = False

        setup_temp_cache({'test_project': project}, {user.id: user})

        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={
                                       'roles': ['admin', 'project_mod'],
                                       'project_id': 'test_project_id',
                                       'project_domain_id': 'default',
                                   })

        data = {
            'email': '*****@*****.**',
            'project_id': 'test_project_id',
            'roles': ['_member_'],
            'domain_id': 'default',
        }

        action = NewUserAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEquals(action.valid, True)

        action.post_approve()
        self.assertEquals(action.valid, True)

        token_data = {'password': '******'}
        action.submit(token_data)
        self.assertEquals(action.valid, True)
        self.assertEquals(len(tests.temp_cache['users']), 2)
        # The new user id in this case will be "user_id_1"
        self.assertEquals(tests.temp_cache['users']["user_id_1"].email,
                          '*****@*****.**')
        self.assertEquals(tests.temp_cache['users']["user_id_1"].password,
                          '123456')
        self.assertEquals(tests.temp_cache['users']["user_id_1"].enabled, True)

        self.assertEquals(project.roles["user_id_1"], ['_member_'])
Beispiel #29
0
    def test_email_additional_addresses(self):
        """
        Tests the sending of additional emails an admin email set in
        the conf
        """

        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'

        user = mock.Mock()
        user.id = 'test_user_id'
        user.name = "*****@*****.**"
        user.email = "*****@*****.**"
        user.domain = 'default'

        project.roles = {user.id: ['project_admin', '_member_']}
        setup_temp_cache({'test_project': project}, {
            user.id: user,
        })

        url = "/v1/actions/InviteUser"
        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "project_admin,_member_,project_mod",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }

        data = {'email': "*****@*****.**", 'roles': ['_member_']}
        response = self.client.post(url, data, format='json', headers=headers)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data, {'notes': ['created token']})

        self.assertEqual(len(mail.outbox), 2)

        self.assertEqual(set(mail.outbox[0].to), set(['*****@*****.**']))
        self.assertEqual(mail.outbox[0].subject, 'invite_user_additional')

        # Test that the token email gets sent to the other addresses
        self.assertEqual(mail.outbox[1].to[0], '*****@*****.**')

        new_token = Token.objects.all()[0]
        url = "/v1/tokens/" + new_token.token
        data = {'password': '******'}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
Beispiel #30
0
    def test_task_update(self):
        """
        Creates a invalid task.

        Updates it and attempts to reapprove.
        """

        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        setup_temp_cache({'test_project': project}, {})

        url = "/v1/actions/CreateProject"
        data = {'project_name': "test_project", 'email': "*****@*****.**"}
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        headers = {
            'project_name': "test_project",
            'project_id': "test_project_id",
            'roles': "admin,_member_",
            'username': "******",
            'user_id': "test_user_id",
            'authenticated': True
        }

        new_task = Task.objects.all()[0]
        url = "/v1/tasks/" + new_task.uuid
        response = self.client.post(url, {'approved': True},
                                    format='json',
                                    headers=headers)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        data = {
            'project_name': "test_project2",
            'email': "*****@*****.**",
            'region': 'RegionOne',
        }
        response = self.client.put(url, data, format='json', headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data,
                         {'notes': ['Task successfully updated.']})

        response = self.client.post(url, {'approved': True},
                                    format='json',
                                    headers=headers)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data, {'notes': ['created token']})