Example #1
0
    def test_loan_request(self):
        mail_capture_thread.start_capturing()
        b = self.browser

        # Test can send loan request succesfully
        b.get(get_server_base() + 'view/%s' % self.system.fqdn)
        b.find_element_by_link_text('Loan').click()
        b.find_element_by_xpath('//button[text()="Request Loan"]').click()
        b.find_element_by_name('message').send_keys('request loan')
        b.find_element_by_xpath('//button[text()="Request"]').click()
        # Wait for our success box
        b.find_element_by_xpath('//div[contains(@class, "alert-success")]'
                '/h4[text()="Request sent"]')
        # Check the email was sent
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEquals(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        payload = 'A Beaker user has requested you loan them the system\n' \
            '%s <%sview/%s>.\n' \
            'Here is a copy of their request:\n' \
            'request loan\n Requested by: %s' \
            % (self.system_fqdn, get_server_base(), self.system_fqdn,
                self.problem_reporter.display_name)
        self._std_check_mail(sender, rcpts, raw_msg, 'loan-request',
            payload, 'Loan request for %s' % self.system.fqdn)
Example #2
0
    def test_report_problem(self):
        mail_capture_thread.start_capturing()
        b = self.browser

        # Test can send problem report succesfully
        b.get(get_server_base() + 'view/%s' % self.system.fqdn)
        b.find_element_by_xpath('//button[text()="Report problem"]').click()
        b.find_element_by_name('message').send_keys('testing problem')
        b.find_element_by_xpath('//button[text()="Report"]').click()
        # Wait for our success box
        b.find_element_by_xpath('//div[contains(@class, "alert-success")]'
                '/h4[text()="Report sent"]')
        # Check the email was sent
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEquals(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        payload = 'A Beaker user has reported a problem with system \n' \
            '%s <%sview/%s>.\n\n' \
            'Reported by: %s\n\n' \
            'Problem description:\n' \
            'testing problem' \
            % (self.system_fqdn, get_server_base(), self.system_fqdn,
                self.problem_reporter.display_name)
        self._std_check_mail(sender, rcpts, raw_msg, 'system-problem',
            payload, 'Problem reported for %s' % self.system.fqdn)
    def test_group_modify_add_member(self):
        with session.begin():
            user = data_setup.create_user()

        mail_capture_thread.start_capturing()

        out = run_client(['bkr', 'group-modify',
                          '--add-member', user.user_name,
                          self.group.group_name],
                         config = self.client_config)

        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assert_(user.user_name in
                         [u.user_name for u in group.users])

        self.check_notification(user, group, action='Added')

        try:
            out = run_client(['bkr', 'group-modify',
                              '--add-member', 'idontexist',
                              self.group.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError, e:
            self.assert_('User idontexist does not exist' in
                         e.stderr_output, e.stderr_output)
Example #4
0
    def test_group_modify_add_member(self):
        with session.begin():
            user = data_setup.create_user()

        mail_capture_thread.start_capturing()

        out = run_client([
            'bkr', 'group-modify', '--add-member', user.user_name,
            self.group.group_name
        ],
                         config=self.client_config)

        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assert_(user.user_name in [u.user_name for u in group.users])

        self.check_notification(user, group, action='Added')

        try:
            out = run_client([
                'bkr', 'group-modify', '--add-member', 'idontexist',
                self.group.group_name
            ],
                             config=self.client_config)
            self.fail('Must fail or die')
        except ClientError, e:
            self.assert_('User idontexist does not exist' in e.stderr_output,
                         e.stderr_output)
Example #5
0
    def test_actions(self):

        with session.begin():
            owner = data_setup.create_user()
            member = data_setup.create_user()
            group = data_setup.create_group(owner=owner)
            group.add_member(member)

        mail_capture_thread.start_capturing()
        bkr.server.mail.group_membership_notify(member, group, owner, 'Added')
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)

        with session.begin():
            group.remove_member(member)

        mail_capture_thread.start_capturing()
        bkr.server.mail.group_membership_notify(member, group, owner, 'Removed')
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)

        # invalid action
        try:
            bkr.server.mail.group_membership_notify(member, group, owner, 'Unchanged')
            self.fail('Must fail or die')
        except ValueError, e:
            self.assert_('Unknown action' in str(e))
Example #6
0
    def test_actions(self):

        with session.begin():
            owner = data_setup.create_user()
            member = data_setup.create_user()
            group = data_setup.create_group(owner=owner)
            group.add_member(member)

        mail_capture_thread.start_capturing()
        bkr.server.mail.group_membership_notify(member, group, owner, 'Added')
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)

        with session.begin():
            group.remove_member(member)

        mail_capture_thread.start_capturing()
        bkr.server.mail.group_membership_notify(member, group, owner, 'Removed')
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)

        # invalid action
        try:
            bkr.server.mail.group_membership_notify(member, group, owner, 'Unchanged')
            self.fail('Must fail or die')
        except ValueError, e:
            self.assert_('Unknown action' in str(e))
Example #7
0
    def test_group_modify_add_member(self):
        with session.begin():
            user = data_setup.create_user()

        mail_capture_thread.start_capturing()

        out = run_client(['bkr', 'group-modify',
                          '--add-member', user.user_name,
                          self.group.group_name],
                         config = self.client_config)

        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assert_(user.user_name in
                         [u.user_name for u in group.users])

        self.check_notification(user, group, action='Added')

        try:
            out = run_client(['bkr', 'group-modify',
                              '--add-member', 'idontexist',
                              self.group.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('User idontexist does not exist' in
                         e.stderr_output, e.stderr_output)

        try:
            out = run_client(['bkr', 'group-modify',
                              '--add-member', user.user_name,
                              self.group.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('User %s is already a member of group %s'
                % (user.user_name, self.group.group_name)
                in e.stderr_output, e.stderr_output)

        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assertEquals(group.activity[-1].action, u'Added')
            self.assertEquals(group.activity[-1].field_name, u'User')
            self.assertEquals(group.activity[-1].user.user_id,
                              self.user.user_id)
            self.assertEquals(group.activity[-1].new_value, user.user_name)
            self.assertEquals(group.activity[-1].service, u'HTTP')

        try:
            out = run_client(['bkr', 'group-modify',
                              '--add-member', user.user_name,
                              self.fake_ldap_group.group_name])
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('Cannot edit membership of group %s'
                         % self.fake_ldap_group.group_name
                         in e.stderr_output,e.stderr_output)
Example #8
0
    def test_reserved_openstack_instance(self):
        with session.begin():
            owner = data_setup.create_user(
                    email_address=u'*****@*****.**')
            distro_tree = data_setup.create_distro_tree(distro_name=u'MicrowaveOS-20141016.1',
                    variant=u'ThreeHeats', arch=u'x86_64')
            job = data_setup.create_job(owner=owner,
                    distro_tree=distro_tree,
                    whiteboard=u'Operation Righteous Cowboy Lightning',
                    recipe_whiteboard=u'Everything Sunny All the Time Always')
            recipe = job.recipesets[0].recipes[0]
            data_setup.mark_recipe_running(recipe,
                    virt=True, instance_id=uuid.UUID('00000000-1111-2222-3333-444444444444'),
                    fqdn=u'bitenuker.ge.invalid')

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.reservesys_notify(recipe)
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        self.assertEqual(rcpts, [owner.email_address])
        msg = email.message_from_string(raw_msg)
        self.assertEqual(msg['To'], owner.email_address)
        self.assertEqual(msg['Subject'],
                '[Beaker System Reserved] bitenuker.ge.invalid')
        self.assertEqual(msg['X-Beaker-Notification'], 'system-reservation')

        expected_mail_body = u"""\
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **
                 This System is reserved by [email protected]

 To return this system early, you can click on 'Release System' against this recipe
 from the Web UI. Ensure you have your logs off the system before returning to
 Beaker.
  %(base)srecipes/%(recipeid)s

 For system details, see:
  http://openstack.example.invalid/dashboard/project/instances/00000000-1111-2222-3333-444444444444/

 For the default root password, see:
  %(base)sprefs

      Beaker Test information:
                         HOSTNAME=bitenuker.ge.invalid
                            JOBID=%(jobid)s
                         RECIPEID=%(recipeid)s
                           DISTRO=MicrowaveOS-20141016.1 ThreeHeats x86_64
                     ARCHITECTURE=x86_64

      Job Whiteboard: Operation Righteous Cowboy Lightning

      Recipe Whiteboard: Everything Sunny All the Time Always
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **""" \
            % dict(base=get_server_base(), recipeid=recipe.id, jobid=job.id)
        actual_mail_body = msg.get_payload(decode=True)
        self.assertMultiLineEqual(actual_mail_body, expected_mail_body)
Example #9
0
    def test_reserved_openstack_instance(self):
        with session.begin():
            owner = data_setup.create_user(
                    email_address=u'*****@*****.**')
            distro_tree = data_setup.create_distro_tree(distro_name=u'MicrowaveOS-20141016.1',
                    variant=u'ThreeHeats', arch=u'x86_64')
            job = data_setup.create_job(owner=owner,
                    distro_tree=distro_tree,
                    whiteboard=u'Operation Righteous Cowboy Lightning',
                    recipe_whiteboard=u'Everything Sunny All the Time Always')
            recipe = job.recipesets[0].recipes[0]
            data_setup.mark_recipe_running(recipe,
                    virt=True, instance_id=uuid.UUID('00000000-1111-2222-3333-444444444444'),
                    fqdn=u'bitenuker.ge.invalid')

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.reservesys_notify(recipe)
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        self.assertEqual(rcpts, [owner.email_address])
        msg = email.message_from_string(raw_msg)
        self.assertEqual(msg['To'], owner.email_address)
        self.assertEqual(msg['Subject'],
                '[Beaker System Reserved] bitenuker.ge.invalid')
        self.assertEqual(msg['X-Beaker-Notification'], 'system-reservation')

        expected_mail_body = u"""\
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **
                 This System is reserved by [email protected]

 To return this system early, you can click on 'Release System' against this recipe
 from the Web UI. Ensure you have your logs off the system before returning to
 Beaker.
  %(base)srecipes/%(recipeid)s

 For system details, see:
  http://openstack.example.invalid/dashboard/project/instances/00000000-1111-2222-3333-444444444444/

 For the default root password, see:
  %(base)sprefs

      Beaker Test information:
                         HOSTNAME=bitenuker.ge.invalid
                            JOBID=%(jobid)s
                         RECIPEID=%(recipeid)s
                           DISTRO=MicrowaveOS-20141016.1 ThreeHeats x86_64
                     ARCHITECTURE=x86_64

      Job Whiteboard: Operation Righteous Cowboy Lightning

      Recipe Whiteboard: Everything Sunny All the Time Always
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **""" \
            % dict(base=get_server_base(), recipeid=recipe.id, jobid=job.id)
        actual_mail_body = msg.get_payload(decode=True)
        self.assertMultiLineEqual(actual_mail_body, expected_mail_body)
Example #10
0
    def test_system_reserved_notification_on(self):
        with session.begin():
            owner = data_setup.create_user(
                    email_address=u'*****@*****.**')
            system = data_setup.create_system(fqdn=u'funcooker.ge.invalid',
                    lab_controller=data_setup.create_labcontroller())
            distro_tree = data_setup.create_distro_tree(distro_name=u'MicrowaveOS-20141016.0',
                    variant=u'ThreeHeats', arch=u'x86_64')
            job = data_setup.create_running_job(owner=owner, system=system,
                    distro_tree=distro_tree,
                    whiteboard=u'Chain Reaction of Mental Anguish',
                    recipe_whiteboard=u'Christmas Attack Zone')
            recipe = job.recipesets[0].recipes[0]

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.reservesys_notify(job.recipesets[0].recipes[0])
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        self.assertEqual(rcpts, [owner.email_address])
        msg = email.message_from_string(raw_msg)
        self.assertEqual(msg['To'], owner.email_address)
        self.assertEqual(msg['Subject'],
                '[Beaker System Reserved] funcooker.ge.invalid')
        self.assertEqual(msg['X-Beaker-Notification'], 'system-reservation')

        expected_mail_body = u"""\
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **
                 This System is reserved by [email protected]

 To return this system early, you can click on 'Release System' against this recipe
 from the Web UI. Ensure you have your logs off the system before returning to
 Beaker.
  %(base)srecipes/%(recipeid)s

 For ssh, kvm, serial and power control operations please look here:
  %(base)sview/funcooker.ge.invalid

 For the default root password, see:
  %(base)sprefs

      Beaker Test information:
                         HOSTNAME=funcooker.ge.invalid
                            JOBID=%(jobid)s
                         RECIPEID=%(recipeid)s
                           DISTRO=MicrowaveOS-20141016.0 ThreeHeats x86_64
                     ARCHITECTURE=x86_64

      Job Whiteboard: Chain Reaction of Mental Anguish

      Recipe Whiteboard: Christmas Attack Zone
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **""" \
            % dict(base=get_server_base(), recipeid=recipe.id, jobid=job.id)
        actual_mail_body = msg.get_payload(decode=True)
        self.assertEqual(actual_mail_body, expected_mail_body)
Example #11
0
    def test_system_reserved_notification_on(self):
        with session.begin():
            owner = data_setup.create_user(
                    email_address=u'*****@*****.**')
            system = data_setup.create_system(fqdn=u'funcooker.ge.invalid',
                    lab_controller=data_setup.create_labcontroller())
            distro_tree = data_setup.create_distro_tree(distro_name=u'MicrowaveOS-20141016.0',
                    variant=u'ThreeHeats', arch=u'x86_64')
            job = data_setup.create_running_job(owner=owner, system=system,
                    distro_tree=distro_tree,
                    whiteboard=u'Chain Reaction of Mental Anguish',
                    recipe_whiteboard=u'Christmas Attack Zone')
            recipe = job.recipesets[0].recipes[0]

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.reservesys_notify(job.recipesets[0].recipes[0])
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        self.assertEqual(rcpts, [owner.email_address])
        msg = email.message_from_string(raw_msg)
        self.assertEqual(msg['To'], owner.email_address)
        self.assertEqual(msg['Subject'],
                '[Beaker System Reserved] funcooker.ge.invalid')
        self.assertEqual(msg['X-Beaker-Notification'], 'system-reservation')

        expected_mail_body = u"""\
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **
                 This System is reserved by [email protected]

 To return this system early, you can click on 'Release System' against this recipe
 from the Web UI. Ensure you have your logs off the system before returning to
 Beaker.
  %(base)srecipes/%(recipeid)s

 For ssh, kvm, serial and power control operations please look here:
  %(base)sview/funcooker.ge.invalid

 For the default root password, see:
  %(base)sprefs

      Beaker Test information:
                         HOSTNAME=funcooker.ge.invalid
                            JOBID=%(jobid)s
                         RECIPEID=%(recipeid)s
                           DISTRO=MicrowaveOS-20141016.0 ThreeHeats x86_64
                     ARCHITECTURE=x86_64

      Job Whiteboard: Chain Reaction of Mental Anguish

      Recipe Whiteboard: Christmas Attack Zone
**  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **  **""" \
            % dict(base=get_server_base(), recipeid=recipe.id, jobid=job.id)
        actual_mail_body = msg.get_payload(decode=True)
        self.assertEqual(actual_mail_body, expected_mail_body)
Example #12
0
 def test_distro_name(self):
     mail_capture_thread.start_capturing()
     with session.begin():
         job = data_setup.create_job()
         data_setup.mark_job_complete(job, result=TaskResult.fail)
     captured_mails = mail_capture_thread.stop_capturing()
     self.assertEqual(len(captured_mails), 1)
     sender, rcpts, raw_msg = captured_mails[0]
     msg = email.message_from_string(raw_msg)
     self.assertNotIn('Distro(', msg.get_payload(decode=True))
Example #13
0
    def test_job_completion_notification_off(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            job_owner = data_setup.create_user(notify_job_completion=False)
            job = data_setup.create_job(owner=job_owner)
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing(wait=False)
        self.assertEqual(len(captured_mails), 0)
Example #14
0
    def test_job_completion_notification_off(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            job_owner = data_setup.create_user(notify_job_completion=False)
            job = data_setup.create_job(owner=job_owner)
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing(wait=False)
        self.assertEqual(len(captured_mails), 0)
Example #15
0
 def test_distro_name(self):
     mail_capture_thread.start_capturing()
     with session.begin():
         job = data_setup.create_job()
         data_setup.mark_job_complete(job, result=TaskResult.fail)
     captured_mails = mail_capture_thread.stop_capturing()
     self.assertEqual(len(captured_mails), 1)
     sender, rcpts, raw_msg = captured_mails[0]
     msg = email.message_from_string(raw_msg)
     self.assertNotIn('Distro(', msg.get_payload(decode=True))
Example #16
0
 def test_headers_for_avoiding_autoreplies(self):
     mail_capture_thread.start_capturing()
     with session.begin():
         job = data_setup.create_job()
         data_setup.mark_job_complete(job)
     captured_mails = mail_capture_thread.stop_capturing()
     self.assertEqual(len(captured_mails), 1)
     sender, rcpts, raw_msg = captured_mails[0]
     msg = email.message_from_string(raw_msg)
     self.assertEquals(msg['Auto-Submitted'], 'auto-generated')
     self.assertEquals(msg['Precedence'], 'bulk')
Example #17
0
 def test_headers_for_avoiding_autoreplies(self):
     mail_capture_thread.start_capturing()
     with session.begin():
         job = data_setup.create_job()
         data_setup.mark_job_complete(job)
     captured_mails = mail_capture_thread.stop_capturing()
     self.assertEqual(len(captured_mails), 1)
     sender, rcpts, raw_msg = captured_mails[0]
     msg = email.message_from_string(raw_msg)
     self.assertEquals(msg['Auto-Submitted'], 'auto-generated')
     self.assertEquals(msg['Precedence'], 'bulk')
Example #18
0
    def test_group_membership_notification_off(self):
        with session.begin():
            owner = data_setup.create_user(notify_group_membership=False)
            member = data_setup.create_user(notify_group_membership=False)

            # group data_setup has not been changed, mail may sneak thru
            group = data_setup.create_group(owner=owner)
            group.add_member(member)

        mail_capture_thread.start_capturing()
        bkr.server.mail.group_membership_notify(member, group, owner, 'Added')
        captured_mails = mail_capture_thread.stop_capturing(wait=False)
        self.assertEqual(len(captured_mails), 0)
Example #19
0
    def test_subject_format(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            job_owner = data_setup.create_user()
            job = data_setup.create_job(owner=job_owner)
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        self.assert_('[Beaker Job Completion] [Completed/Pass]' in msg['Subject'])
Example #20
0
 def test_report_problem_via_recipe(self):
     with session.begin():
         owner = data_setup.create_user()
         job = data_setup.create_completed_job(owner=owner)
     mail_capture_thread.start_capturing()
     b = self.browser
     b.get(get_server_base() + 'recipes/%s' % job.recipesets[0].recipes[0].id)
     b.find_element_by_link_text('Report Problem with System').click()
     b.find_element_by_id('problem_description').send_keys('I broke it')
     b.find_element_by_xpath('//input[@value=\'Report\']').click()
     b.find_element_by_xpath('//div/span[text()=\'Success\']')
     captured_mails = mail_capture_thread.stop_capturing()
     self.assertEqual(len(captured_mails), 1)
Example #21
0
    def test_group_membership_notification_off(self):
        with session.begin():
            owner = data_setup.create_user(notify_group_membership=False)
            member = data_setup.create_user(notify_group_membership=False)

            # group data_setup has not been changed, mail may sneak thru
            group = data_setup.create_group(owner=owner)
            group.add_member(member)

        mail_capture_thread.start_capturing()
        bkr.server.mail.group_membership_notify(member, group, owner, 'Added')
        captured_mails = mail_capture_thread.stop_capturing(wait=False)
        self.assertEqual(len(captured_mails), 0)
Example #22
0
    def test_subject_format(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            job_owner = data_setup.create_user()
            job = data_setup.create_job(owner=job_owner)
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        self.assert_('[Beaker Job Completion] [Completed/Pass]' in msg['Subject'])
Example #23
0
    def test_contains_recipe_hyperlink(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            recipe = data_setup.create_recipe()
            job = data_setup.create_job_for_recipes([recipe])
            data_setup.mark_job_complete(job, result=TaskResult.fail)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        recipe_link = u'<%srecipes/%d' % (get_server_base(), recipe.id)
        recipe_line = msg.get_payload(decode=True).splitlines()[2]
        self.assertIn(recipe_link, recipe_line)
Example #24
0
    def test_contains_recipe_hyperlink(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            recipe = data_setup.create_recipe()
            job = data_setup.create_job_for_recipes([recipe])
            data_setup.mark_job_complete(job, result=TaskResult.fail)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        recipe_link = u'<%srecipes/%d' % (get_server_base(), recipe.id)
        recipe_line = msg.get_payload(decode=True).splitlines()[2]
        self.assertIn(recipe_link, recipe_line)
Example #25
0
    def test_subject_contains_whiteboard(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            whiteboard = u'final space shuttle launch'
            job = data_setup.create_job(whiteboard=whiteboard)
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        # Subject header might be split across multiple lines
        subject = re.sub(r'\s+', ' ', msg['Subject'])
        self.assert_(whiteboard in subject, subject)
Example #26
0
    def test_subject_contains_whiteboard(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            whiteboard = u'final space shuttle launch'
            job = data_setup.create_job(whiteboard=whiteboard)
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        # Subject header might be split across multiple lines
        subject = re.sub(r'\s+', ' ', msg['Subject'])
        self.assert_(whiteboard in subject, subject)
Example #27
0
    def test_contains_job_hyperlink(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            job = data_setup.create_job()
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        job_link = u'<%sjobs/%d>' % (get_server_base(), job.id)
        first_line = msg.get_payload(decode=True).splitlines()[0]
        self.assert_(job_link in first_line,
                'Job link %r should appear in first line %r'
                    % (job_link, first_line))
Example #28
0
    def test_contains_job_hyperlink(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            job = data_setup.create_job()
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        job_link = u'<%sjobs/%d>' % (get_server_base(), job.id)
        first_line = msg.get_payload(decode=True).splitlines()[0]
        self.assert_(job_link in first_line,
                'Job link %r should appear in first line %r'
                    % (job_link, first_line))
Example #29
0
    def test_send_usage_reminder(self):
        with session.begin():
            email_content = self._create_expiring_reservation()
            email_content += self._create_open_reservation()
            email_content += self._create_delayed_job()

        beaker_usage = BeakerUsage(self.user, self.reservation_expiry,
                                   self.reservation_length,
                                   self.waiting_recipe_age,
                                   self.delayed_job_age)
        current_date = datetime.utcnow().strftime("%Y-%m-%d")
        data = {
            'user_name': self.user.user_name,
            'current_date': current_date,
            'beaker_fqdn': absolute_url('/'),
            'reservation_expiry': self.reservation_expiry,
            'reservation_length': self.reservation_length,
            'waiting_recipe_age': self.waiting_recipe_age,
            'delayed_job_age': self.delayed_job_age,
            'expiring_reservations': beaker_usage.expiring_reservations(),
            'open_reservations': beaker_usage.open_in_demand_systems(),
            'delayed_jobs': beaker_usage.delayed_jobs()
        }

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.send_usage_reminder(self.user, data)
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        self.assertEqual(rcpts, [self.user.email_address])
        msg = email.message_from_string(raw_msg)
        self.assertEqual(msg['To'], self.user.email_address)
        self.assertTrue(
            msg['Subject'], '[Beaker] Usage report for %s (%s)' %
            (self.user.user_name, current_date))
        expected_mail_body = u"""=========
[Beaker] Usage report for %s (%s)
=========

Hi %s,
%s
=========""" % (self.user.user_name, current_date, self.user.user_name,
                email_content)
        actual_mail_body = msg.get_payload(decode=True)
        self.assertEqual(actual_mail_body, expected_mail_body)
        self.assertEqual(msg['X-Beaker-Notification'], 'usage-report')
Example #30
0
    def test_broken_system_notification_on(self):
        with session.begin():
            owner = data_setup.create_user(
                email_address=u'*****@*****.**')
            lc = data_setup.create_labcontroller()
            system = data_setup.create_system(fqdn=u'home-one',
                                              owner=owner,
                                              lender=u"Uncle Bob's Dodgy Shop",
                                              location=u'shed out the back',
                                              lab_controller=lc,
                                              vendor=u'Acorn',
                                              arch=u'i386')
            system.arch.append(Arch.by_name(u'x86_64'))
            data_setup.configure_system_power(system,
                                              power_type=u'drac',
                                              address=u'pdu2.home-one',
                                              power_id=u'42')

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.broken_system_notify(system, reason="It's a tarp!")
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        self.assertEqual(rcpts, ['*****@*****.**'])
        msg = email.message_from_string(raw_msg)
        self.assertEqual(msg['To'], '*****@*****.**')
        self.assertEqual(msg['Subject'],
                         'System home-one automatically marked broken')
        self.assertEqual(msg['X-Beaker-Notification'], 'system-broken')
        self.assertEqual(msg['X-Beaker-System'], 'home-one')
        self.assertEqual(msg['X-Lender'], "Uncle Bob's Dodgy Shop")
        self.assertEqual(msg['X-Location'], 'shed out the back')
        self.assertEqual(msg['X-Lab-Controller'], lc.fqdn)
        self.assertEqual(msg['X-Vendor'], 'Acorn')
        self.assertEqual(msg['X-Type'], 'Machine')
        self.assertEqual(msg.get_all('X-Arch'), ['i386', 'x86_64'])
        self.assertEqual(
            msg.get_payload(decode=True),
            'Beaker has automatically marked system \n'
            'home-one <%sview/home-one> \n'
            'as broken, due to:\n\n'
            'It\'s a tarp!\n\n'
            'Please investigate this error and take appropriate action.\n\n'
            'Power type: drac\n'
            'Power address: pdu2.home-one\n'
            'Power id: 42' % get_server_base())
Example #31
0
    def test_system_reserved_notification_off(self):
        with session.begin():
            owner = data_setup.create_user(email_address=u'*****@*****.**',
                                           notify_reservesys=False)
            system = data_setup.create_system(fqdn=u'funcooker.ge.valid',
                    lab_controller=data_setup.create_labcontroller())
            distro_tree = data_setup.create_distro_tree(arch=u'x86_64')
            job = data_setup.create_running_job(owner=owner, system=system,
                    distro_tree=distro_tree,
                    whiteboard=u'This is a whiteboard',
                    recipe_whiteboard=u'This is another whiteboard')

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.reservesys_notify(job.recipesets[0].recipes[0])
        captured_mails = mail_capture_thread.stop_capturing(wait=False)
        self.assertEqual(len(captured_mails), 0)
Example #32
0
    def test_system_reserved_notification_off(self):
        with session.begin():
            owner = data_setup.create_user(email_address=u'*****@*****.**',
                                           notify_reservesys=False)
            system = data_setup.create_system(fqdn=u'funcooker.ge.valid',
                    lab_controller=data_setup.create_labcontroller())
            distro_tree = data_setup.create_distro_tree(arch=u'x86_64')
            job = data_setup.create_running_job(owner=owner, system=system,
                    distro_tree=distro_tree,
                    whiteboard=u'This is a whiteboard',
                    recipe_whiteboard=u'This is another whiteboard')

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.reservesys_notify(job.recipesets[0].recipes[0])
        captured_mails = mail_capture_thread.stop_capturing(wait=False)
        self.assertEqual(len(captured_mails), 0)
Example #33
0
    def test_send_usage_reminder(self):
        with session.begin():
            email_content = self._create_expiring_reservation()
            email_content += self._create_open_reservation()
            email_content += self._create_delayed_job()

        beaker_usage = BeakerUsage(self.user, self.reservation_expiry, self.reservation_length,
                                   self.waiting_recipe_age, self.delayed_job_age)
        current_date = datetime.utcnow().strftime("%Y-%m-%d")
        data = {
            'user_name': self.user.user_name,
            'current_date': current_date,
            'beaker_fqdn': absolute_url('/'),
            'reservation_expiry': self.reservation_expiry,
            'reservation_length': self.reservation_length,
            'waiting_recipe_age': self.waiting_recipe_age,
            'delayed_job_age': self.delayed_job_age,
            'expiring_reservations': beaker_usage.expiring_reservations(),
            'open_reservations': beaker_usage.open_in_demand_systems(),
            'delayed_jobs': beaker_usage.delayed_jobs()
        }

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.send_usage_reminder(self.user, data)
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails),1)
        sender, rcpts, raw_msg = captured_mails[0]
        self.assertEqual(rcpts, [self.user.email_address])
        msg = email.message_from_string(raw_msg)
        self.assertEqual(msg['To'], self.user.email_address)
        self.assertTrue(msg['Subject'], '[Beaker] Usage report for %s (%s)' % (self.user.user_name, current_date))
        expected_mail_body = u"""=========
[Beaker] Usage report for %s (%s)
=========

Hi %s,
%s
=========""" % (self.user.user_name,
                current_date,
                self.user.user_name,
                email_content)
        actual_mail_body = msg.get_payload(decode=True)
        self.assertEqual(actual_mail_body, expected_mail_body)
        self.assertEqual(msg['X-Beaker-Notification'], 'usage-report')
Example #34
0
    def test_job_cc_list_is_notified(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            job_owner = data_setup.create_user()
            job = data_setup.create_job(owner=job_owner,
                    cc=[u'*****@*****.**', u'*****@*****.**'])
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        self.assertEqual([job_owner.email_address, '*****@*****.**',
                '*****@*****.**'], rcpts)
        self.assertEqual(job_owner.email_address, msg['To'])
        self.assertEqual('[email protected], [email protected]', msg['Cc'])
        self.assert_('[Beaker Job Completion]' in msg['Subject'])
Example #35
0
    def test_job_cc_list_is_notified(self):
        mail_capture_thread.start_capturing()
        with session.begin():
            job_owner = data_setup.create_user()
            job = data_setup.create_job(owner=job_owner,
                    cc=[u'*****@*****.**', u'*****@*****.**'])
            session.flush()
            data_setup.mark_job_complete(job)

        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        msg = email.message_from_string(raw_msg)
        self.assertEqual([job_owner.email_address, '*****@*****.**',
                '*****@*****.**'], rcpts)
        self.assertEqual(job_owner.email_address, msg['To'])
        self.assertEqual('[email protected], [email protected]', msg['Cc'])
        self.assert_('[Beaker Job Completion]' in msg['Subject'])
Example #36
0
 def test_broken_system_notification_off(self):
     with session.begin():
         owner = data_setup.create_user(email_address=u'*****@*****.**',
                                        notify_broken_system=False)
         lc = data_setup.create_labcontroller()
         system = data_setup.create_system(fqdn=u'home-two', owner=owner,
                                           lender=u"Aunty Jane's Dodgy Shop",
                                           location=u'shed out the front',
                                           lab_controller=lc,
                                           vendor=u'Acorn', arch=u'i386')
         system.arch.append(Arch.by_name(u'x86_64'))
         data_setup.configure_system_power(system, power_type=u'drac',
                                           address=u'pdu3.home-one',
                                           power_id=u'42')
     mail_capture_thread.start_capturing()
     with session.begin():
         bkr.server.mail.broken_system_notify(system, reason="It's not a tarp!")
     captured_mails = mail_capture_thread.stop_capturing(wait=False)
     self.assertEqual(len(captured_mails), 0)
Example #37
0
    def test_group_modify_remove_member(self):
        with session.begin():
            user = data_setup.create_user()
            self.group.add_member(user)
            session.flush()
            self.assert_(user in self.group.users)

        mail_capture_thread.start_capturing()

        out = run_client([
            'bkr', 'group-modify', '--remove-member', user.user_name,
            self.group.group_name
        ],
                         config=self.client_config)

        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assert_(
                user.user_name not in [u.user_name for u in group.users])

        self.check_notification(user, group, action='Removed')
        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assertEquals(group.activity[-1].action, u'Removed')
            self.assertEquals(group.activity[-1].field_name, u'User')
            self.assertEquals(group.activity[-1].user.user_id,
                              self.user.user_id)
            self.assertEquals(group.activity[-1].old_value, user.user_name)
            self.assertEquals(group.activity[-1].new_value, None)
            self.assertEquals(group.activity[-1].service, u'HTTP')

        try:
            out = run_client([
                'bkr', 'group-modify', '--remove-member', 'idontexist',
                self.group.group_name
            ],
                             config=self.client_config)
            self.fail('Must fail or die')
        except ClientError, e:
            self.assert_('User idontexist does not exist' in e.stderr_output,
                         e.stderr_output)
Example #38
0
 def test_broken_system_notification_off(self):
     with session.begin():
         owner = data_setup.create_user(email_address=u'*****@*****.**',
                                        notify_broken_system=False)
         lc = data_setup.create_labcontroller()
         system = data_setup.create_system(fqdn=u'home-two', owner=owner,
                                           lender=u"Aunty Jane's Dodgy Shop",
                                           location=u'shed out the front',
                                           lab_controller=lc,
                                           vendor=u'Acorn', arch=u'i386')
         system.arch.append(Arch.by_name(u'x86_64'))
         data_setup.configure_system_power(system, power_type=u'drac',
                                           address=u'pdu3.home-one',
                                           power_id=u'42')
     mail_capture_thread.start_capturing()
     with session.begin():
         bkr.server.mail.broken_system_notify(system, reason="It's not a tarp!")
     captured_mails = mail_capture_thread.stop_capturing(wait=False)
     self.assertEqual(len(captured_mails), 0)
    def test_group_modify_remove_member(self):
        with session.begin():
            user = data_setup.create_user()
            self.group.add_member(user)
            session.flush()
            self.assert_(user in self.group.users)

        mail_capture_thread.start_capturing()

        out = run_client(['bkr', 'group-modify',
                          '--remove-member', user.user_name,
                          self.group.group_name],
                         config = self.client_config)

        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assert_(user.user_name not in
                         [u.user_name for u in group.users])

        self.check_notification(user, group, action='Removed')
        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assertEquals(group.activity[-1].action, u'Removed')
            self.assertEquals(group.activity[-1].field_name, u'User')
            self.assertEquals(group.activity[-1].user.user_id,
                              self.user.user_id)
            self.assertEquals(group.activity[-1].old_value, user.user_name)
            self.assertEquals(group.activity[-1].new_value, None)
            self.assertEquals(group.activity[-1].service, u'HTTP')

        try:
            out = run_client(['bkr', 'group-modify',
                              '--remove-member', 'idontexist',
                              self.group.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError, e:
            self.assert_('User idontexist does not exist' in
                         e.stderr_output, e.stderr_output)
Example #40
0
 def test_reporter_and_system_cc_list_are_cced(self):
     with session.begin():
         interested_party_email = data_setup.unique_name(u'*****@*****.**')
         system = data_setup.create_system()
         system.cc = [interested_party_email]
     mail_capture_thread.start_capturing()
     b = self.browser
     b.get(get_server_base() + 'view/%s' % system.fqdn)
     b.find_element_by_xpath('//button[text()="Report problem"]').click()
     b.find_element_by_name('message').send_keys('I broke it')
     b.find_element_by_xpath('//button[text()="Report"]').click()
     b.find_element_by_xpath('//div[contains(@class, "alert-success")]'
             '/h4[text()="Report sent"]')
     captured_mails = mail_capture_thread.stop_capturing()
     self.assertEqual(len(captured_mails), 1)
     sender, rcpts, raw_msg = captured_mails[0]
     self.assertEqual(rcpts, [system.owner.email_address,
             self.problem_reporter.email_address, interested_party_email])
     msg = email.message_from_string(raw_msg)
     self.assertEqual(msg['Cc'], '%s, %s' % (self.problem_reporter.email_address,
             interested_party_email))
Example #41
0
    def test_broken_system_notification_on(self):
        with session.begin():
            owner = data_setup.create_user(email_address=u'*****@*****.**')
            lc = data_setup.create_labcontroller()
            system = data_setup.create_system(fqdn=u'home-one', owner=owner,
                    lender=u"Uncle Bob's Dodgy Shop", location=u'shed out the back',
                    lab_controller=lc, vendor=u'Acorn', arch=u'i386')
            system.arch.append(Arch.by_name(u'x86_64'))
            data_setup.configure_system_power(system, power_type=u'drac',
                    address=u'pdu2.home-one', power_id=u'42')

        mail_capture_thread.start_capturing()
        with session.begin():
            bkr.server.mail.broken_system_notify(system, reason="It's a tarp!")
        captured_mails = mail_capture_thread.stop_capturing()
        self.assertEqual(len(captured_mails), 1)
        sender, rcpts, raw_msg = captured_mails[0]
        self.assertEqual(rcpts, ['*****@*****.**'])
        msg = email.message_from_string(raw_msg)
        self.assertEqual(msg['To'], '*****@*****.**')
        self.assertEqual(msg['Subject'],
                'System home-one automatically marked broken')
        self.assertEqual(msg['X-Beaker-Notification'], 'system-broken')
        self.assertEqual(msg['X-Beaker-System'], 'home-one')
        self.assertEqual(msg['X-Lender'], "Uncle Bob's Dodgy Shop")
        self.assertEqual(msg['X-Location'], 'shed out the back')
        self.assertEqual(msg['X-Lab-Controller'], lc.fqdn)
        self.assertEqual(msg['X-Vendor'], 'Acorn')
        self.assertEqual(msg['X-Type'], 'Machine')
        self.assertEqual(msg.get_all('X-Arch'), ['i386', 'x86_64'])
        self.assertEqual(msg.get_payload(decode=True),
                'Beaker has automatically marked system \n'
                'home-one <%sview/home-one> \n'
                'as broken, due to:\n\n'
                'It\'s a tarp!\n\n'
                'Please investigate this error and take appropriate action.\n\n'
                'Power type: drac\n'
                'Power address: pdu2.home-one\n'
                'Power id: 42'
                % get_server_base())
Example #42
0
 def test_sends_mail_notification_for_loan(self):
     with session.begin():
         owner = data_setup.create_user(user_name='mturnbull', email_address='*****@*****.**')
         system = data_setup.create_system(fqdn='lya3.aemo.com.au', owner=owner)
         loanee = data_setup.create_user(user_name='bshorten')
     s = requests.Session()
     requests_login(s)
     mail_capture_thread.start_capturing()
     response = post_json(get_server_base() + 'systems/%s/loans/' % system.fqdn,
             session=s, data={'recipient': {'user_name': 'bshorten'}})
     self.assertEquals(response.status_code, 200)
     captured_mails = mail_capture_thread.stop_capturing()
     self.assertEquals(len(captured_mails), 1)
     sender, rcpts, raw_msg = captured_mails[0]
     msg = email.message_from_string(raw_msg)
     self.assertEquals(['*****@*****.**'], rcpts)
     self.assertEquals('*****@*****.**', msg['To'])
     self.assertEquals('System lya3.aemo.com.au loaned to bshorten', msg['Subject'])
     self.assertEquals(
             'Beaker system lya3.aemo.com.au <%sview/lya3.aemo.com.au>\n'
             'has been loaned to bshorten by admin.'
             % get_server_base(),
             msg.get_payload(decode=True))
Example #43
0
    def test_group_modify_remove_member(self):
        with session.begin():
            user = data_setup.create_user()
            self.group.add_member(user)
            session.flush()
            self.assert_(user in self.group.users)

        mail_capture_thread.start_capturing()

        out = run_client(['bkr', 'group-modify',
                          '--remove-member', user.user_name,
                          self.group.group_name],
                         config = self.client_config)

        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assert_(user.user_name not in
                         [u.user_name for u in group.users])

        self.check_notification(user, group, action='Removed')
        with session.begin():
            session.refresh(self.group)
            group = Group.by_name(self.group.group_name)
            self.assertEquals(group.activity[-1].action, u'Removed')
            self.assertEquals(group.activity[-1].field_name, u'User')
            self.assertEquals(group.activity[-1].user.user_id,
                              self.user.user_id)
            self.assertEquals(group.activity[-1].old_value, user.user_name)
            self.assertEquals(group.activity[-1].new_value, None)
            self.assertEquals(group.activity[-1].service, u'HTTP')

        try:
            out = run_client(['bkr', 'group-modify',
                              '--remove-member', 'idontexist',
                              self.group.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('User idontexist does not exist' in
                         e.stderr_output, e.stderr_output)
        try:
            out = run_client(['bkr', 'group-modify',
                              '--remove-member', user.user_name,
                              self.group.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('User %s is not a member of group %s'
                         % (user.user_name, self.group.group_name)
                        in e.stderr_output, e.stderr_output)

        try:
            out = run_client(['bkr', 'group-modify',
                              '--remove-member', self.user.user_name,
                              self.group.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('Cannot remove user' in
                         e.stderr_output, e.stderr_output)

        # remove the last group member/owner as 'admin'
        mail_capture_thread.start_capturing()
        out = run_client(['bkr', 'group-modify',
                          '--remove-member', self.user.user_name,
                          self.group.group_name], config=self.admin_client_config)
        self.check_notification(self.user, self.group, action='Removed')

        # try to remove self from admin group
        # first remove all other users except 'admin'
        group = Group.by_name(u'admin')
        group_users = group.users
        # remove  all other users from 'admin'
        for usr in group_users:
            if usr.user_id != 1:
                out = run_client(['bkr', 'group-modify',
                                  '--remove-member', usr.user_name,
                                  'admin'], config=self.admin_client_config)

        try:
            out = run_client(['bkr', 'group-modify',
                              '--remove-member', 'admin', 'admin'])
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('Cannot remove user' in
                         e.stderr_output, e.stderr_output)

        try:
            out = run_client(['bkr', 'group-modify',
                              '--remove-member', user.user_name,
                              self.fake_ldap_group.group_name])
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('Cannot edit membership of group %s'
                          % self.fake_ldap_group.group_name
                          in e.stderr_output, e.stderr_output)
Example #44
0
                (user.user_name, self.group.group_name) in e.stderr_output,
                e.stderr_output)

        try:
            out = run_client([
                'bkr', 'group-modify', '--remove-member', self.user.user_name,
                self.group.group_name
            ],
                             config=self.client_config)
            self.fail('Must fail or die')
        except ClientError, e:
            self.assert_('Cannot remove user' in e.stderr_output,
                         e.stderr_output)

        # remove the last group member/owner as 'admin'
        mail_capture_thread.start_capturing()
        out = run_client([
            'bkr', 'group-modify', '--remove-member', self.user.user_name,
            self.group.group_name
        ],
                         config=self.admin_client_config)
        self.check_notification(self.user, self.group, action='Removed')

        # try to remove self from admin group
        # first remove all other users except 'admin'
        group = Group.by_name(u'admin')
        group_users = group.users
        # remove  all other users from 'admin'
        for usr in group_users:
            if usr.user_id != 1:
                out = run_client([
            self.assert_('User %s is not a member of group %s'
                         % (user.user_name, self.group.group_name)
                        in e.stderr_output, e.stderr_output)

        try:
            out = run_client(['bkr', 'group-modify',
                              '--remove-member', self.user.user_name,
                              self.group.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError, e:
            self.assert_('Cannot remove user' in
                         e.stderr_output, e.stderr_output)

        # remove the last group member/owner as 'admin'
        mail_capture_thread.start_capturing()
        out = run_client(['bkr', 'group-modify',
                          '--remove-member', self.user.user_name,
                          self.group.group_name], config=self.admin_client_config)
        self.check_notification(self.user, self.group, action='Removed')

        # try to remove self from admin group
        # first remove all other users except 'admin'
        group = Group.by_name(u'admin')
        group_users = group.users
        # remove  all other users from 'admin'
        for usr in group_users:
            if usr.user_id != 1:
                out = run_client(['bkr', 'group-modify',
                                  '--remove-member', usr.user_name,
                                  'admin'], config=self.admin_client_config)