コード例 #1
0
    def test_jobs_group_column(self):
        with session.begin():
            user = data_setup.create_user(password='******')
            group1 = data_setup.create_group(owner=user)
            group2 = data_setup.create_group()
            user.groups.append(group2)
            job1 = data_setup.create_job(owner=user, group=None)
            job2 = data_setup.create_job(owner=user, group=group1)
            job3 = data_setup.create_job(owner=user, group=group2)

        b = self.browser

        # jobs/mine
        login(b, user=user.user_name, password='******')
        b.find_element_by_link_text('My Jobs').click()
        b.find_element_by_xpath('//title[normalize-space(text())="My Jobs"]')

        self.check_job_row(rownum=1, job_t_id=job3.t_id, group=group2)
        self.check_job_row(rownum=2, job_t_id=job2.t_id, group=group1)
        self.check_job_row(rownum=3, job_t_id=job1.t_id, group=None)

        # jobs
        logout(b)
        b.get(get_server_base() + 'jobs/')
        self.check_job_row(rownum=1, job_t_id=job3.t_id, group=group2)
        self.check_job_row(rownum=2, job_t_id=job2.t_id, group=group1)
        self.check_job_row(rownum=3, job_t_id=job1.t_id, group=None)
コード例 #2
0
ファイル: test_activity.py プロジェクト: ustbgaofan/beaker
    def setUp(self):
        self.distro = data_setup.create_distro()
        self.distro_tree1 = data_setup.create_distro_tree(distro=self.distro,
            arch='x86_64')
        self.distro_tree2 = data_setup.create_distro_tree(distro=self.distro,
            arch='i386')

        self.distro_tree1.activity.append(DistroTreeActivity(
            user=User.by_user_name(data_setup.ADMIN_USER),
            service=u'testdata', field_name=u'Nonesente',
            old_value=u'sdfas', new_value=u'sdfa', action='Added'))
        self.distro_tree2.activity.append(DistroTreeActivity(
            user=User.by_user_name(data_setup.ADMIN_USER), 
            service=u'testdata', field_name=u'Noneseonce',
            old_value=u'bsdf', new_value=u'sdfas', action='Added'))

        self.distro.activity.append(DistroActivity(
                user=User.by_user_name(data_setup.ADMIN_USER), service=u'testdata',
                action=u'Nothing', field_name=u'Nonsense',
                old_value=u'asdf', new_value=u'omgwtfbbq'))
        self.system = data_setup.create_system()
        self.system.activity.append(SystemActivity(
                user=User.by_user_name(data_setup.ADMIN_USER), service=u'testdata',
                action=u'Nothing', field_name=u'Nonsense',
                old_value=u'asdf', new_value=u'omgwtfbbq'))
        self.group2 = data_setup.create_group()
        self.group = data_setup.create_group()
        self.group.activity.append(GroupActivity(
                user=User.by_user_name(data_setup.ADMIN_USER), service=u'testdata',
                action=u'Nothing', field_name=u'Nonsense',
                old_value=u'asdf', new_value=u'omgwtfbbq'))
        self.browser = self.get_browser()
コード例 #3
0
ファイル: test_group_list.py プロジェクト: xhernandez/beaker
 def test_list_groups(self):
     with session.begin():
         group1 = data_setup.create_group()
         group2 = data_setup.create_group()
     out = run_client(['bkr', 'group-list'])
     self.assertIn(group1.group_name, out)
     self.assertIn(group2.group_name, out)
コード例 #4
0
ファイル: test_jobs.py プロジェクト: omps/beaker
    def test_jobs_group_column(self):
        with session.begin():
            user = data_setup.create_user(password='******')
            group1 = data_setup.create_group(owner=user)
            group2 = data_setup.create_group()
            user.groups.append(group2)
            job1 = data_setup.create_job(owner=user, group=None)
            job2 = data_setup.create_job(owner=user, group=group1)
            job3 = data_setup.create_job(owner=user, group=group2)

        b = self.browser

        # jobs/mine
        login(b, user=user.user_name, password='******')
        b.find_element_by_link_text('My Jobs').click()
        b.find_element_by_xpath('//title[normalize-space(text())="My Jobs"]')

        self.check_job_row(rownum=1, job_t_id=job3.t_id, group=group2)
        self.check_job_row(rownum=2, job_t_id=job2.t_id, group=group1)
        self.check_job_row(rownum=3, job_t_id=job1.t_id, group=None)

        # jobs
        logout(b)
        b.get(get_server_base() + 'jobs/')
        self.check_job_row(rownum=1, job_t_id=job3.t_id, group=group2)
        self.check_job_row(rownum=2, job_t_id=job2.t_id, group=group1)
        self.check_job_row(rownum=3, job_t_id=job1.t_id, group=None)
コード例 #5
0
 def test_list_groups(self):
     with session.begin():
         group1 = data_setup.create_group()
         group2 = data_setup.create_group()
     out = run_client(['bkr', 'group-list'])
     self.assertIn(group1.group_name, out)
     self.assertIn(group2.group_name, out)
コード例 #6
0
 def test_group_not_in_cache(self):
     b = self.browser
     login(b, user=self.pool_owner.user_name, password='******')
     self.go_to_pool_edit()
     b.find_element_by_link_text('System Access Policy').click()
     pane = b.find_element_by_id('access-policy')
     # type the group name before it exists
     with session.begin():
         self.assertEquals(
             Group.query.filter_by(group_name=u'anotherbeatles').first(),
             None)
     group_input = pane.find_element_by_xpath(
         './/input[@placeholder="Group name"]')
     group_input.send_keys('anotherbeatles')
     # group is created
     with session.begin():
         data_setup.create_group(group_name=u'anotherbeatles')
     # type it again
     group_input.clear()
     group_input.send_keys('anotherbeatles')
     # suggestion should appear
     pane.find_element_by_xpath('.//div[@class="tt-suggestion" and '
                                'contains(string(.), "anotherbeatles")]')
     group_input.send_keys('\n')
     find_policy_checkbox(b, 'anotherbeatles', 'Edit this policy')
コード例 #7
0
ファイル: test_job_submit.py プロジェクト: tcler/beaker
 def setUp(self):
     data_setup.create_product(product_name=u'the_product')
     data_setup.create_group(group_name=u'somegroup')
     self.user_foo = data_setup.create_user(password=u'foo')
     self.user_bar = data_setup.create_user(password=u'bar')
     self.bot = data_setup.create_user(password=u'bot')
     # Add bot as delegate submission of foo
     self.user_foo.add_submission_delegate(self.bot, service=u'testdata')
コード例 #8
0
    def test_grant_policy_pool(self):
        with session.begin():
            pool = data_setup.create_system_pool()
            user = data_setup.create_user()
            group = data_setup.create_group()
            group.add_member(user)
            user1 = data_setup.create_user()

        # group
        run_client(['bkr', 'policy-grant', '--pool', pool.name,
                    '--permission', 'edit_system', '--group', group.group_name])
        with session.begin():
            session.refresh(pool)
            self.assertTrue(pool.access_policy.grants(
                user, SystemPermission.edit_system))
        # non-existent group
        try:
            run_client(['bkr', 'policy-grant', '--pool', pool.name,
                        '--permission', 'edit_system', '--group', 'idontexist'])
            self.fail('Must fail or die')
        except ClientError as e:
            self.assertIn("Group 'idontexist' does not exist", e.stderr_output)

        # Everybody edit_system
        run_client(['bkr', 'policy-grant', '--pool', pool.name,
                '--permission', 'edit_system', '--everybody'])
        with session.begin():
            session.refresh(pool)
            self.assertTrue(pool.access_policy.grants(
                    user1, SystemPermission.edit_system))

        # test_multiple_permissions_and_targets
        with session.begin():
            user = data_setup.create_user()
            group = data_setup.create_group()
            user1 = data_setup.create_user()
            group.add_member(user1)
        run_client(['bkr', 'policy-grant', '--pool', pool.name,
                    '--permission=reserve', '--permission=view_power', \
                    '--user', user.user_name, '--group', group.group_name])
        with session.begin():
            session.refresh(pool)
            self.assertTrue(pool.access_policy.grants(
                    user, SystemPermission.view_power))
            self.assertTrue(pool.access_policy.grants(
                    user, SystemPermission.reserve))
            self.assertTrue(pool.access_policy.grants(
                user1, SystemPermission.view_power))
            self.assertTrue(pool.access_policy.grants(
                    user1, SystemPermission.reserve))
        # non-existent pool
        try:
            run_client(['bkr', 'policy-grant', '--pool', 'idontexist',
                        '--permission=reserve', '--permission=view_power', \
                        '--user', user.user_name, '--group', group.group_name])
        except ClientError as e:
            self.assertIn("System pool idontexist does not exist", e.stderr_output)
コード例 #9
0
 def test_list_groups_by_owner(self):
     with session.begin():
         user1 = data_setup.create_user()
         user2 = data_setup.create_user()
         group1 = data_setup.create_group(owner=user1)
         group2 = data_setup.create_group(owner=user2)
     out = run_client(['bkr', 'group-list', '--owner', str(user1.user_name)])
     self.assertIn(group1.group_name, out)
     self.assertNotIn(group2.group_name, out)
コード例 #10
0
 def test_list_groups_limit(self):
     with session.begin():
         data_setup.create_group()
         data_setup.create_group()
     out1 = run_client(['bkr', 'group-list'])
     groups1 = out1.split()
     out2 = run_client(['bkr', 'group-list', '--limit=1'])
     groups2 = out2.split()
     self.assertEquals(len(groups2), 1)
     self.assertEquals(groups1[0], groups2[0])
コード例 #11
0
ファイル: test_group_list.py プロジェクト: xhernandez/beaker
 def test_list_groups_limit(self):
     with session.begin():
         data_setup.create_group()
         data_setup.create_group()
     out1 = run_client(['bkr', 'group-list'])
     groups1 = out1.split()
     out2 = run_client(['bkr', 'group-list', '--limit=1'])
     groups2 = out2.split()
     self.assertEquals(len(groups2), 1)
     self.assertEquals(groups1[0], groups2[0])
コード例 #12
0
 def test_can_search_by_group_name(self):
     with session.begin():
         group = data_setup.create_group()
         other_group = data_setup.create_group(
             group_name=data_setup.unique_name(u'aardvark%s'))
     b = self.browser
     b.get(get_server_base() + 'groups/')
     b.find_element_by_class_name('search-query').send_keys(
         'group_name:"%s"' % group.group_name)
     b.find_element_by_class_name('grid-filter').submit()
     check_group_search_results(b, present=[group], absent=[other_group])
コード例 #13
0
 def test_list_pools_by_ownergroup(self):
     with session.begin():
         group1 = data_setup.create_group()
         pool1 = data_setup.create_system_pool(owning_group=group1)
         group2 = data_setup.create_group()
         pool2 = data_setup.create_system_pool(owning_group=group2)
     out = run_client(
         ['bkr', 'pool-list', '--owning-group',
          str(group1.group_name)])
     self.assertIn(pool1.name, out)
     self.assertNotIn(pool2.name, out)
コード例 #14
0
 def test_can_search_by_group_name(self):
     with session.begin():
         group = data_setup.create_group()
         other_group = data_setup.create_group(
                 group_name=data_setup.unique_name(u'aardvark%s'))
     b = self.browser
     b.get(get_server_base() + 'groups/')
     b.find_element_by_class_name('search-query').send_keys(
             'group_name:"%s"' % group.group_name)
     b.find_element_by_class_name('grid-filter').submit()
     check_group_search_results(b, present=[group], absent=[other_group])
コード例 #15
0
ファイル: test_group_list.py プロジェクト: xhernandez/beaker
 def test_list_groups_by_owner(self):
     with session.begin():
         user1 = data_setup.create_user()
         user2 = data_setup.create_user()
         group1 = data_setup.create_group(owner=user1)
         group2 = data_setup.create_group(owner=user2)
     out = run_client(
         ['bkr', 'group-list', '--owner',
          str(user1.user_name)])
     self.assertIn(group1.group_name, out)
     self.assertNotIn(group2.group_name, out)
コード例 #16
0
ファイル: test_groups.py プロジェクト: sibiaoluo/beaker
    def setUp(self):
        with session.begin():
            self.user = data_setup.create_user(password="******")
            self.system = data_setup.create_system()
            self.group = data_setup.create_group()
            self.user.groups.append(self.group)
            self.system.groups.append(self.group)
            self.rand_group = data_setup.create_group(group_name=data_setup.unique_name(u"aardvark%s"))

        session.flush()
        self.browser = self.get_browser()
コード例 #17
0
    def test_group_modify_group_name_duplicate(self):
        with session.begin():
            group1 = data_setup.create_group(owner=self.user)
            group2 = data_setup.create_group(owner=self.user)

        try:
            out = run_client(['bkr', 'group-modify',
                              '--group-name', group1.group_name,
                              group2.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError, e:
            self.assert_('Group name already exists' in e.stderr_output)
コード例 #18
0
    def test_group_modify_group_name_duplicate(self):
        with session.begin():
            group1 = data_setup.create_group(owner=self.user)
            group2 = data_setup.create_group(owner=self.user)

        try:
            out = run_client(['bkr', 'group-modify',
                              '--group-name', group1.group_name,
                              group2.group_name],
                             config = self.client_config)
            self.fail('Must fail or die')
        except ClientError as e:
            self.assert_('Group %s already exists' % group1.group_name in e.stderr_output)
コード例 #19
0
 def test_can_search_normal_groups_by_member_username(self):
     with session.begin():
         group = data_setup.create_group(
                 group_name=data_setup.unique_name(u'aardvark%s'))
         member = data_setup.create_user()
         group.add_member(member)
         other_group = data_setup.create_group(
                 group_name=data_setup.unique_name(u'aardvark%s'))
     b = self.browser
     b.get(get_server_base() + 'groups/')
     b.find_element_by_class_name('search-query').send_keys(
             'member.user_name:%s' % member.user_name)
     b.find_element_by_class_name('grid-filter').submit()
     check_group_search_results(b, present=[group], absent=[other_group])
コード例 #20
0
 def test_can_search_inverted_groups_by_member_username(self):
     with session.begin():
         member = data_setup.create_user()
         group = data_setup.create_group(
             group_name=data_setup.unique_name(u'aardvark%s'))
         inverted_group = data_setup.create_group(
             group_name=data_setup.unique_name(u'aardvark%s'),
             membership_type=GroupMembershipType.inverted)
     b = self.browser
     b.get(get_server_base() + 'groups/')
     b.find_element_by_class_name('search-query').send_keys(
         'member.user_name:%s' % member.user_name)
     b.find_element_by_class_name('grid-filter').submit()
     check_group_search_results(b, present=[inverted_group], absent=[group])
コード例 #21
0
 def test_can_search_normal_groups_by_member_username(self):
     with session.begin():
         group = data_setup.create_group(
             group_name=data_setup.unique_name(u'aardvark%s'))
         member = data_setup.create_user()
         group.add_member(member)
         other_group = data_setup.create_group(
             group_name=data_setup.unique_name(u'aardvark%s'))
     b = self.browser
     b.get(get_server_base() + 'groups/')
     b.find_element_by_class_name('search-query').send_keys(
         'member.user_name:%s' % member.user_name)
     b.find_element_by_class_name('grid-filter').submit()
     check_group_search_results(b, present=[group], absent=[other_group])
コード例 #22
0
 def test_can_search_inverted_groups_by_member_username(self):
     with session.begin():
         member = data_setup.create_user()
         group = data_setup.create_group(
                 group_name=data_setup.unique_name(u'aardvark%s'))
         inverted_group = data_setup.create_group(
            group_name=data_setup.unique_name(u'aardvark%s'),
            membership_type=GroupMembershipType.inverted)
     b = self.browser
     b.get(get_server_base() + 'groups/')
     b.find_element_by_class_name('search-query').send_keys(
             'member.user_name:%s' % member.user_name)
     b.find_element_by_class_name('grid-filter').submit()
     check_group_search_results(b, present=[inverted_group],
             absent=[group])
コード例 #23
0
ファイル: test_group_edit.py プロジェクト: ShaolongHu/beaker
    def test_edit_group_name_duplicate(self):
        with session.begin():
            user = data_setup.create_user(password='******')
            group1 = data_setup.create_group(owner=user)
            group2 = data_setup.create_group(owner=user)

        b = self.browser
        login(b, user=user.user_name, password='******')

        b.get(get_server_base() + 'groups/mine')
        b.find_element_by_link_text(group2.group_name).click()
        self._edit_group_details(b, group1.group_name, group2.display_name)

        flash_text = b.find_element_by_class_name('flash').text
        self.assert_('Group name already exists' in flash_text, flash_text)
コード例 #24
0
ファイル: test_group_edit.py プロジェクト: ShaolongHu/beaker
    def test_edit_group_name_duplicate(self):
        with session.begin():
            user = data_setup.create_user(password='******')
            group1 = data_setup.create_group(owner=user)
            group2 = data_setup.create_group(owner=user)

        b = self.browser
        login(b, user=user.user_name, password='******')

        b.get(get_server_base() + 'groups/mine')
        b.find_element_by_link_text(group2.group_name).click()
        self._edit_group_details(b, group1.group_name, group2.display_name)

        flash_text = b.find_element_by_class_name('flash').text
        self.assert_('Group name already exists' in flash_text, flash_text)
コード例 #25
0
 def test_system_restricted_to_different_group(self):
     with session.begin():
         system = data_setup.create_system(status=SystemStatus.automated,
                 shared=False, lab_controller=self.lc)
         wrong_group = data_setup.create_group()
         user = data_setup.create_user(password=u'testing')
         # user is not in the same group as system
         wrong_group.add_member(user)
         group = data_setup.create_group()
         system.custom_access_policy.add_rule(
                 permission=SystemPermission.reserve, group=group)
     b = self.browser
     login(b, user=user.user_name, password='******')
     self.check_system_is_not_available(system)
     self.check_cannot_take(system)
コード例 #26
0
 def test_group(self):
     group_a = data_setup.create_group()
     group_b = data_setup.create_group()
     system_0 = data_setup.create_system()
     system_a = data_setup.create_system()
     system_a.groups.append(group_a)
     system_ab = data_setup.create_system()
     system_ab.groups.append(group_a)
     system_ab.groups.append(group_b)
     system_b = data_setup.create_system()
     system_b.groups.append(group_b)
     self.check_filter("""
         <hostRequires>
             <and>
                 <group op="=" value="%s" />
             </and>
         </hostRequires>
         """ % group_a.group_name,
         present=[system_a, system_ab],
         absent=[system_b, system_0])
     self.check_filter("""
         <hostRequires>
             <and>
                 <group op="!=" value="%s" />
             </and>
         </hostRequires>
         """ % group_a.group_name,
         present=[system_b, system_0],
         absent=[system_a, system_ab])
     # https://bugzilla.redhat.com/show_bug.cgi?id=601952
     self.check_filter("""
         <hostRequires>
             <and>
                 <group op="==" value="" />
             </and>
         </hostRequires>
         """,
         present=[system_0],
         absent=[system_a, system_ab, system_b])
     self.check_filter("""
         <hostRequires>
             <and>
                 <group op="!=" value="" />
             </and>
         </hostRequires>
         """,
         present=[system_a, system_ab, system_b],
         absent=[system_0])
コード例 #27
0
 def test_group(self):
     group_a = data_setup.create_group()
     group_b = data_setup.create_group()
     system_0 = data_setup.create_system()
     system_a = data_setup.create_system()
     system_a.groups.append(group_a)
     system_ab = data_setup.create_system()
     system_ab.groups.append(group_a)
     system_ab.groups.append(group_b)
     system_b = data_setup.create_system()
     system_b.groups.append(group_b)
     self.check_filter("""
         <hostRequires>
             <and>
                 <group op="=" value="%s" />
             </and>
         </hostRequires>
         """ % group_a.group_name,
         present=[system_a, system_ab],
         absent=[system_b, system_0])
     self.check_filter("""
         <hostRequires>
             <and>
                 <group op="!=" value="%s" />
             </and>
         </hostRequires>
         """ % group_a.group_name,
         present=[system_b, system_0],
         absent=[system_a, system_ab])
     # https://bugzilla.redhat.com/show_bug.cgi?id=601952
     self.check_filter("""
         <hostRequires>
             <and>
                 <group op="==" value="" />
             </and>
         </hostRequires>
         """,
         present=[system_0],
         absent=[system_a, system_ab, system_b])
     self.check_filter("""
         <hostRequires>
             <and>
                 <group op="!=" value="" />
             </and>
         </hostRequires>
         """,
         present=[system_a, system_ab, system_b],
         absent=[system_0])
コード例 #28
0
ファイル: test_groups.py プロジェクト: sibiaoluo/beaker
    def test_group_remove_link_visibility(self):
        with session.begin():
            user = data_setup.create_user(password="******")
            user.groups.append(self.group)
            group = data_setup.create_group(owner=user)

        b = self.browser
        # login as admin
        login(b)
        b.get(get_server_base() + "groups/")
        b.find_element_by_xpath("//input[@name='group.text']").clear()
        b.find_element_by_xpath("//input[@name='group.text']").send_keys(self.group.group_name)
        b.find_element_by_xpath("//input[@value='Search']").submit()
        self.assert_(
            "Remove (-)" in b.find_element_by_xpath("//tr[(td[1]/a[text()='%s'])]" % self.group.group_name).text
        )
        logout(b)

        # login as another user
        login(b, user=user.user_name, password="******")
        b.get(get_server_base() + "groups/")
        b.find_element_by_xpath("//input[@name='group.text']").clear()
        b.find_element_by_xpath("//input[@name='group.text']").send_keys(self.group.group_name)
        b.find_element_by_xpath("//input[@value='Search']").submit()
        self.assert_(
            "Remove (-)" not in b.find_element_by_xpath("//tr[(td[1]/a[text()='%s'])]" % self.group.group_name).text
        )
        b.find_element_by_xpath("//input[@name='group.text']").clear()
        b.find_element_by_xpath("//input[@name='group.text']").send_keys(group.group_name)
        b.find_element_by_xpath("//input[@value='Search']").submit()
        self.assert_("Remove (-)" in b.find_element_by_xpath("//tr[(td[1]/a[text()='%s'])]" % group.group_name).text)
コード例 #29
0
 def test_reserve_via_external_service(self):
     with session.begin():
         service_group = data_setup.create_group(
             permissions=[u'proxy_auth'])
         service_user = data_setup.create_user(password=u'password')
         data_setup.add_user_to_group(service_user, service_group)
         user = data_setup.create_user(password=u'notused')
         system = data_setup.create_system(owner=User.by_user_name(
             data_setup.ADMIN_USER),
                                           status=u'Manual',
                                           shared=True)
         self.assert_(system.user is None)
     server = self.get_server()
     server.auth.login_password(service_user.user_name, 'password',
                                user.user_name)
     server.systems.reserve(system.fqdn)
     with session.begin():
         session.refresh(system)
         self.assertEqual(system.user, user)
         self.assertEqual(system.reservations[0].type, u'manual')
         self.assertEqual(system.reservations[0].user, user)
         self.assert_(system.reservations[0].finish_time is None)
         assert_durations_not_overlapping(system.reservations)
         reserved_activity = system.activity[0]
         self.assertEqual(reserved_activity.action, 'Reserved')
         self.assertEqual(reserved_activity.service, service_user.user_name)
コード例 #30
0
ファイル: test_activity.py プロジェクト: ShaolongHu/beaker
    def test_system_pool_activity(self):
        with session.begin():
            pool1 = data_setup.create_system_pool()
            act1 = pool1.record_activity(service=u'testdata',
                    user=User.by_user_name(data_setup.ADMIN_USER),
                    action=u'Nothing', field=u'Nonsense',
                    old=u'asdf', new=u'omgwtfbbq')
            pool2 = data_setup.create_system_pool()
            act2 = pool2.record_activity(service=u'testdata',
                    user=User.by_user_name(data_setup.ADMIN_USER),
                    action=u'Nothing', field=u'Nonsense',
                    old=u'asdf', new=u'lollercopter')
        b = self.browser
        b.get(get_server_base() + 'activity/pool')
        b.find_element_by_class_name('search-query').send_keys(
            'pool.name:%s' % pool1.name)
        b.find_element_by_class_name('grid-filter').submit()
        check_activity_search_results(b, present=[act1], absent=[act2])

        # search by pool owner
        b.get(get_server_base() + 'activity/pool')
        b.find_element_by_class_name('search-query').send_keys(
            'pool.owner.user_name:%s' % pool2.owner.user_name)
        b.find_element_by_class_name('grid-filter').submit()
        check_activity_search_results(b, present=[act2], absent=[act1])

        with session.begin():
            pool1.owning_user = None
            pool1.owning_group = data_setup.create_group()

        b.get(get_server_base() + 'activity/pool')
        b.find_element_by_class_name('search-query').send_keys(
            'pool.owner.group_name:%s' % pool1.owner.group_name)
        b.find_element_by_class_name('grid-filter').submit()
        check_activity_search_results(b, present=[act1], absent=[act2])
コード例 #31
0
    def test_grant_group(self):
        with session.begin():
            user = data_setup.create_user()
            group = data_setup.create_group()
            group.add_member(user)
            self.assertFalse(
                self.system.custom_access_policy.grants(
                    user, SystemPermission.edit_system))
        run_client([
            'bkr', 'policy-grant', '--system', self.system.fqdn,
            '--permission', 'edit_system', '--group', group.group_name
        ])
        with session.begin():
            session.expire_all()
            self.assertTrue(
                self.system.custom_access_policy.grants(
                    user, SystemPermission.edit_system))

        # non-existent group
        try:
            run_client([
                'bkr', 'policy-grant', '--system', self.system.fqdn,
                '--permission', 'edit_system', '--group', 'idontexist'
            ])
            self.fail('Must fail or die')
        except ClientError as e:
            self.assertIn("Group 'idontexist' does not exist", e.stderr_output)
コード例 #32
0
ファイル: test_mail.py プロジェクト: walbon/beaker
    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))
コード例 #33
0
ファイル: test_job_ack.py プロジェクト: sujithshankar/beaker
    def test_disable_legacy_perms(self):
        try:
            stop_process('gunicorn')
        except ValueError:
            # It seems gunicorn is not a running process
            raise SkipTest('Can only run this test against gunicorn')
        try:
            tmp_config = edit_file(CONFIG_FILE,
                'beaker.deprecated_job_group_permissions.on = True',
                'beaker.deprecated_job_group_permissions.on = False')
            start_process('gunicorn', env={'BEAKER_CONFIG_FILE': tmp_config.name})

            with session.begin():
                owner = data_setup.create_user()
                member = data_setup.create_user(password=u'group_member')
                group = data_setup.create_group()
                data_setup.add_user_to_group(owner, group)
                data_setup.add_user_to_group(member, group)
                job = data_setup.create_job(owner=owner, group=None)
                data_setup.mark_job_complete(job, result=TaskResult.fail)
            b = self.browser
            login(b, user=member.user_name, password='******')
            b.get(get_server_base() + 'jobs/%s' % job.id)
            self.check_cannot_review()
        finally:
            stop_process('gunicorn')
            start_process('gunicorn')
コード例 #34
0
 def setUp(self):
     with session.begin():
         self.group_owner = data_setup.create_user(password='******')
         self.group = data_setup.create_group()
         self.group.user_group_assocs.append(
             UserGroup(user=self.group_owner, is_owner=True))
     self.browser = self.get_browser()
コード例 #35
0
    def test_inverted_group_modify_grant_owner(self):
        with session.begin():
            group = data_setup.create_group(
                owner=self.user, membership_type=GroupMembershipType.inverted)
            user1 = data_setup.create_user()
            group.add_member(user1)
            user2 = data_setup.create_user()
            group.add_member(user2)
            # user3 is not associated but can also be set as the group owner.
            user3 = data_setup.create_user()

        out = run_client([
            'bkr', 'group-modify', '--grant-owner', user1.user_name,
            '--grant-owner', user2.user_name, '--grant-owner', user3.user_name,
            group.group_name
        ],
                         config=self.client_config)

        with session.begin():
            session.expire_all()
            self.assertTrue(group.has_owner(user1))
            self.assertTrue(group.has_owner(user2))
            self.assertTrue(group.has_owner(user3))
            self.assertEquals(group.activity[-1].action, u'Added')
            self.assertEquals(group.activity[-1].field_name, u'Owner')
            self.assertEquals(group.activity[-1].new_value, user3.user_name)
            self.assertEquals(group.activity[-1].service, u'HTTP')
コード例 #36
0
ファイル: test_group_edit.py プロジェクト: ShaolongHu/beaker
    def test_show_group_owners(self):
        with session.begin():
            owner = data_setup.create_user(user_name='zzzz', password='******')
            group = data_setup.create_group(owner=owner)
            member1 = data_setup.create_user(user_name='aaaa', password='******')
            member1.groups.append(group)
            member2 = data_setup.create_user(user_name='bbbb', password='******')
            member2.groups.append(group)

        b = self.browser
        login(b, user=member1.user_name, password='******')
        b.get(get_server_base() + 'groups/edit?group_id=%d' % group.group_id)

        # the first entry should always be the owner(s)
        user_name, ownership = b.find_element_by_xpath('//table[@id="group_members_grid"]//tr[1]/td[1]').text, \
            b.find_element_by_xpath('//table[@id="group_members_grid"]//tr[1]/td[2]').text

        self.assertTrue(user_name, owner.user_name)
        self.assertTrue(ownership, 'Yes')

        user_name, ownership = b.find_element_by_xpath('//table[@id="group_members_grid"]//tr[2]/td[1]').text, \
            b.find_element_by_xpath('//table[@id="group_members_grid"]//tr[2]/td[2]').text

        self.assertTrue(user_name in [member1.user_name, member2.user_name])
        self.assertTrue(ownership, 'No')
コード例 #37
0
 def test_group_column(self):
     with session.begin():
         group = data_setup.create_group()
         system_with_group = data_setup.create_system()
         system_with_group.groups.append(group)
         system_without_group = data_setup.create_system()
     b = self.browser
     b.get(get_server_base())
     b.find_element_by_link_text('Show Search Options').click()
     wait_for_animation(b, '#searchform')
     Select(b.find_element_by_name('systemsearch-0.table'))\
         .select_by_visible_text('System/Group')
     Select(b.find_element_by_name('systemsearch-0.operation'))\
         .select_by_visible_text('is')
     b.find_element_by_name('systemsearch-0.value').send_keys(group.group_name)
     b.find_element_by_link_text('Toggle Result Columns').click()
     wait_for_animation(b, '#selectablecolumns')
     b.find_element_by_link_text('Select None').click()
     b.find_element_by_name('systemsearch_column_System/Name').click()
     b.find_element_by_name('systemsearch_column_System/Group').click()
     b.find_element_by_id('searchform').submit()
     check_system_search_results(b, present=[system_with_group],
             absent=[system_without_group])
     b.find_element_by_xpath('//table[@id="widget"]'
             '//td[2][normalize-space(text())="%s"]' % group.group_name)
コード例 #38
0
 def test_group_column(self):
     with session.begin():
         group = data_setup.create_group()
         system_with_group = data_setup.create_system()
         system_with_group.groups.append(group)
         system_without_group = data_setup.create_system()
     b = self.browser
     b.get(get_server_base())
     b.find_element_by_link_text('Show Search Options').click()
     wait_for_animation(b, '#searchform')
     Select(b.find_element_by_name('systemsearch-0.table'))\
         .select_by_visible_text('System/Group')
     Select(b.find_element_by_name('systemsearch-0.operation'))\
         .select_by_visible_text('is')
     b.find_element_by_name('systemsearch-0.value').send_keys(
         group.group_name)
     b.find_element_by_link_text('Toggle Result Columns').click()
     wait_for_animation(b, '#selectablecolumns')
     b.find_element_by_link_text('Select None').click()
     b.find_element_by_name('systemsearch_column_System/Name').click()
     b.find_element_by_name('systemsearch_column_System/Group').click()
     b.find_element_by_id('searchform').submit()
     check_system_search_results(b,
                                 present=[system_with_group],
                                 absent=[system_without_group])
     b.find_element_by_xpath('//table[@id="widget"]'
                             '//td[2][normalize-space(text())="%s"]' %
                             group.group_name)
コード例 #39
0
ファイル: test_job_search.py プロジェクト: omps/beaker
    def test_search_group(self):
        with session.begin():
            group = data_setup.create_group()
            whiteboard = data_setup.unique_name(u'whiteboard%s')
            job = data_setup.create_job(group=group, whiteboard=whiteboard)
            job2 = data_setup.create_job(whiteboard=whiteboard)

        b = self.browser
        # Ensures that both jobs are present
        b.get(get_server_base() + 'jobs')
        b.find_element_by_link_text('Show Search Options').click()
        wait_for_animation(b, '#searchform')
        b.find_element_by_xpath("//select[@id='jobsearch_0_table'] \
            /option[@value='Whiteboard']").click()
        b.find_element_by_xpath("//select[@id='jobsearch_0_operation'] \
            /option[@value='is']").click()
        b.find_element_by_xpath("//input[@id='jobsearch_0_value']"). \
            send_keys(whiteboard)
        b.find_element_by_id('searchform').submit()
        check_job_search_results(b, present=[job, job2])

        # Now do the actual test
        b.find_element_by_xpath("//select[@id='jobsearch_0_table'] \
            /option[@value='Group']").click()
        b.find_element_by_xpath("//select[@id='jobsearch_0_operation'] \
            /option[@value='is']").click()
        b.find_element_by_xpath("//input[@id='jobsearch_0_value']").clear()
        b.find_element_by_xpath("//input[@id='jobsearch_0_value']"). \
            send_keys(job.group.group_name)
        b.find_element_by_id('searchform').submit()
        check_job_search_results(b, present=[job], absent=[job2])
コード例 #40
0
ファイル: test_users.py プロジェクト: walbon/beaker
 def test_user_resource_counts_are_accurate_when_removing(self):
     with session.begin():
         user = data_setup.create_user()
         job = data_setup.create_job(owner=user)
         data_setup.mark_job_running(job)
         owned_system = data_setup.create_system(owner=user)
         loaned_system = data_setup.create_system()
         loaned_system.loaned = user
         owned_pool = data_setup.create_system_pool(owning_user=user)
         group = data_setup.create_group(owner=user)
     s = requests.Session()
     requests_login(s)
     response = s.get(get_server_base() + 'users/%s' % user.user_name,
             headers={'Accept': 'application/json'})
     response.raise_for_status()
     self.assertEquals(response.json()['job_count'], 1)
     self.assertEquals(response.json()['reservation_count'], 1)
     self.assertEquals(response.json()['loan_count'], 1)
     self.assertEquals(response.json()['owned_system_count'], 1)
     self.assertEquals(response.json()['owned_pool_count'], 1)
     response = patch_json(get_server_base() + 'users/%s' % user.user_name,
             data={'removed': 'now'}, session=s)
     response.raise_for_status()
     # The bug was that the counts in the PATCH response would still show 
     # their old values, because the queries for producing the counts were 
     # being run before all the removals were flushed to the database.
     # Note that job_count stays as 1, because the job has been cancelled 
     # but it will still be running until the next iteration of beakerd's 
     # update_dirty_jobs.
     self.assertEquals(response.json()['job_count'], 1)
     self.assertEquals(response.json()['reservation_count'], 0)
     self.assertEquals(response.json()['loan_count'], 0)
     self.assertEquals(response.json()['owned_system_count'], 0)
     self.assertEquals(response.json()['owned_pool_count'], 0)
コード例 #41
0
ファイル: test_group_edit.py プロジェクト: sibiaoluo/beaker
 def setUp(self):
     with session.begin():
         self.group_owner = data_setup.create_user(password='******')
         self.group = data_setup.create_group()
         self.group.user_group_assocs.append(
                 UserGroup(user=self.group_owner, is_owner=True))
     self.browser = self.get_browser()
コード例 #42
0
ファイル: test_group_members.py プロジェクト: walbon/beaker
 def test_escapes_uri_characters_in_group_name(self):
     bad_group_name = u'!@#$%^&*()_+{}|:><?'
     with session.begin():
         group = data_setup.create_group(group_name=bad_group_name)
     out = run_client(['bkr', 'group-members', bad_group_name])
     out = json.loads(out)
     self.assertEquals(len(out), 1)
コード例 #43
0
 def test_system_restricted_to_different_group(self):
     with session.begin():
         system = data_setup.create_system(status=SystemStatus.automated,
                                           shared=False,
                                           lab_controller=self.lc)
         wrong_group = data_setup.create_group()
         user = data_setup.create_user(password=u'testing')
         # user is not in the same group as system
         wrong_group.add_member(user)
         group = data_setup.create_group()
         system.custom_access_policy.add_rule(
             permission=SystemPermission.reserve, group=group)
     b = self.browser
     login(b, user=user.user_name, password='******')
     self.check_system_is_not_available(system)
     self.check_cannot_take(system)
コード例 #44
0
 def test_cant_delete_group_mates_job(self):
     # XXX This whole test can go away with BZ#1000861
     try:
         stop_process('gunicorn')
     except ValueError:
         # It seems gunicorn is not a running process
         raise SkipTest('Can only run this test against gunicorn')
     try:
         tmp_config = edit_file(
             CONFIG_FILE,
             'beaker.deprecated_job_group_permissions.on = True',
             'beaker.deprecated_job_group_permissions.on = False')
         start_process('gunicorn',
                       env={'BEAKER_CONFIG_FILE': tmp_config.name})
         with session.begin():
             group = data_setup.create_group()
             mate = data_setup.create_user(password=u'asdf')
             test_job = data_setup.create_completed_job(owner=mate)
             data_setup.add_user_to_group(self.user, group)
             data_setup.add_user_to_group(mate, group)
         try:
             run_client(['bkr', 'job-delete', test_job.t_id],
                        config=self.client_config)
             self.fail('We should not have permission to delete %s' % \
                 test_job.t_id)
         except ClientError, e:
             self.assertIn(
                 "You don't have permission to delete job %s" %
                 test_job.t_id, e.stderr_output)
     finally:
         stop_process('gunicorn')
         start_process('gunicorn')
コード例 #45
0
    def test_inverted_group_modify_grant_owner(self):
        with session.begin():
            group = data_setup.create_group(owner=self.user,
                    membership_type=GroupMembershipType.inverted)
            user1 = data_setup.create_user()
            group.add_member(user1)
            user2 = data_setup.create_user()
            group.add_member(user2)
            # user3 is not associated but can also be set as the group owner.
            user3 = data_setup.create_user()

        out = run_client(['bkr', 'group-modify',
                          '--grant-owner', user1.user_name,
                          '--grant-owner', user2.user_name,
                          '--grant-owner', user3.user_name,
                          group.group_name],
                         config = self.client_config)

        with session.begin():
            session.expire_all()
            self.assertTrue(group.has_owner(user1))
            self.assertTrue(group.has_owner(user2))
            self.assertTrue(group.has_owner(user3))
            self.assertEquals(group.activity[-1].action, u'Added')
            self.assertEquals(group.activity[-1].field_name, u'Owner')
            self.assertEquals(group.activity[-1].new_value, user3.user_name)
            self.assertEquals(group.activity[-1].service, u'HTTP')
コード例 #46
0
    def test_add_group(self):
        with session.begin():
            group = data_setup.create_group()
            user_password = '******'
            user = data_setup.create_user(password=user_password)
            data_setup.add_user_to_group(user, group)
            orig_date_modified = self.system.date_modified

        # as admin, assign the system to our test group
        b = self.browser
        login(b)
        self.go_to_system_view(tab='Groups')
        b.find_element_by_name('group.text').send_keys(group.group_name)
        b.find_element_by_name('groups').submit()
        b.find_element_by_xpath(
                '//div[@id="groups"]'
                '//td[normalize-space(text())="%s"]' % group.group_name)
        with session.begin():
            session.refresh(self.system)
            self.assert_(self.system.date_modified > orig_date_modified)

        # as a user in the group, can we see it?
        logout(b)
        login(b, user.user_name, user_password)
        click_menu_item(b, 'Systems', 'Available')
        b.find_element_by_name('simplesearch').send_keys(self.system.fqdn)
        b.find_element_by_name('systemsearch_simple').submit()
        check_system_search_results(b, present=[self.system])
コード例 #47
0
ファイル: test_job_list.py プロジェクト: xhernandez/beaker
    def setUp(self):
        jobs_to_generate = 2
        self.products = [
            data_setup.create_product() for _ in range(jobs_to_generate)
        ]
        self.users = [
            data_setup.create_user(password='******')
            for _ in range(jobs_to_generate)
        ]
        self.groups = [
            data_setup.create_group() for _ in range(jobs_to_generate)
        ]
        _ = [
            group.add_member(self.users[i])
            for i, group in enumerate(self.groups)
        ]

        self.jobs = [
            data_setup.create_completed_job(product=self.products[x],
                                            owner=self.users[x],
                                            group=self.groups[x])
            for x in range(jobs_to_generate)
        ]
        self.client_configs = [
            create_client_config(username=user.user_name, password='******')
            for user in self.users
        ]
コード例 #48
0
    def test_disable_legacy_perms(self):
        try:
            stop_process('gunicorn')
        except ValueError:
            # It seems gunicorn is not a running process
            raise SkipTest('Can only run this test against gunicorn')
        try:
            tmp_config = edit_file(
                CONFIG_FILE,
                'beaker.deprecated_job_group_permissions.on = True',
                'beaker.deprecated_job_group_permissions.on = False')
            start_process('gunicorn',
                          env={'BEAKER_CONFIG_FILE': tmp_config.name})

            with session.begin():
                owner = data_setup.create_user()
                member = data_setup.create_user(password=u'group_member')
                group = data_setup.create_group()
                data_setup.add_user_to_group(owner, group)
                data_setup.add_user_to_group(member, group)
                job = data_setup.create_job(owner=owner, group=None)
                data_setup.mark_job_complete(job, result=TaskResult.fail)
            b = self.browser
            login(b, user=member.user_name, password='******')
            b.get(get_server_base() + 'jobs/%s' % job.id)
            self.check_cannot_review()
        finally:
            stop_process('gunicorn')
            start_process('gunicorn')
コード例 #49
0
ファイル: test_group_edit.py プロジェクト: ShaolongHu/beaker
    def test_show_group_owners(self):
        with session.begin():
            owner = data_setup.create_user(user_name='zzzz',
                                           password='******')
            group = data_setup.create_group(owner=owner)
            member1 = data_setup.create_user(user_name='aaaa',
                                             password='******')
            member1.groups.append(group)
            member2 = data_setup.create_user(user_name='bbbb',
                                             password='******')
            member2.groups.append(group)

        b = self.browser
        login(b, user=member1.user_name, password='******')
        b.get(get_server_base() + 'groups/edit?group_id=%d' % group.group_id)

        # the first entry should always be the owner(s)
        user_name, ownership = b.find_element_by_xpath('//table[@id="group_members_grid"]//tr[1]/td[1]').text, \
            b.find_element_by_xpath('//table[@id="group_members_grid"]//tr[1]/td[2]').text

        self.assertTrue(user_name, owner.user_name)
        self.assertTrue(ownership, 'Yes')

        user_name, ownership = b.find_element_by_xpath('//table[@id="group_members_grid"]//tr[2]/td[1]').text, \
            b.find_element_by_xpath('//table[@id="group_members_grid"]//tr[2]/td[2]').text

        self.assertTrue(user_name in [member1.user_name, member2.user_name])
        self.assertTrue(ownership, 'No')
コード例 #50
0
    def test_group_remove_link_visibility(self):
        with session.begin():
            user = data_setup.create_user(password='******')
            user.groups.append(self.group)
            group = data_setup.create_group(owner=user)

        b = self.browser
        #login as admin
        login(b)
        b.get(get_server_base() + 'groups/')
        b.find_element_by_xpath("//input[@name='group.text']").clear()
        b.find_element_by_xpath("//input[@name='group.text']").send_keys(
            self.group.group_name)
        b.find_element_by_id('Search').submit()
        self.assert_('Delete' in b.find_element_by_xpath(
            "//tr[(td[1]/a[text()='%s'])]" % self.group.group_name).text)
        logout(b)

        # login as another user
        login(b, user=user.user_name, password='******')
        b.get(get_server_base() + 'groups/')
        b.find_element_by_xpath("//input[@name='group.text']").clear()
        b.find_element_by_xpath("//input[@name='group.text']").send_keys(
            self.group.group_name)
        b.find_element_by_id('Search').submit()
        self.assert_('Delete' not in b.find_element_by_xpath(
            "//tr[(td[1]/a[text()='%s'])]" % self.group.group_name).text)
        b.find_element_by_xpath("//input[@name='group.text']").clear()
        b.find_element_by_xpath("//input[@name='group.text']").send_keys(
            group.group_name)
        b.find_element_by_id('Search').submit()
        self.assert_('Delete' in b.find_element_by_xpath(
            "//tr[(td[1]/a[text()='%s'])]" % group.group_name).text)
コード例 #51
0
    def setUp(self):
        self.selenium = self.get_selenium()
        self.password = '******'

        # create users
        self.user_1 = data_setup.create_user(password=self.password)
        self.user_2 = data_setup.create_user(password=self.password)
        self.user_3 = data_setup.create_user(password=self.password)

        # create admin users
        self.admin_1 = data_setup.create_user(password=self.password)
        self.admin_1.groups.append(Group.by_name(u'admin'))
        self.admin_2 = data_setup.create_user(password=self.password)
        self.admin_2.groups.append(Group.by_name(u'admin'))

        # create systems
        self.system_1 = data_setup.create_system(shared=True)
        self.system_2 = data_setup.create_system(shared=True)
        self.system_3 = data_setup.create_system(shared=False,
                                                 owner=self.user_3)

        # create group and add users/systems to it
        self.group_1 = data_setup.create_group()
        self.user_3.groups.append(self.group_1)
        self.admin_2.groups.append(self.group_1)
        self.system_2.groups.append(self.group_1)

        lc = data_setup.create_labcontroller()
        self.system_1.lab_controller = lc
        self.system_2.lab_controller = lc
        self.system_3.lab_controller = lc

        self.selenium.start()
コード例 #52
0
    def test_create_pool_set_owner(self):
        pool_name = data_setup.unique_name(u'mypool%s')
        owner = data_setup.create_user()
        run_client(['bkr', 'pool-create',
                    '--owner', owner.user_name,
                    pool_name])
        with session.begin():
            p = SystemPool.by_name(pool_name)
            self.assertFalse(p.owning_group)
            self.assertTrue(p.owning_user.user_name,
                            owner.user_name)

        pool_name = data_setup.unique_name(u'mypool%s')

        owning_group = data_setup.create_group()
        run_client(['bkr', 'pool-create',
                    '--owning-group', owning_group.group_name,
                    pool_name])
        with session.begin():
            p = SystemPool.by_name(pool_name)
            self.assertTrue(p.owning_group, owning_group)
            self.assertFalse(p.owning_user)

        # specifying both should error out
        try:
            run_client(['bkr', 'pool-create',
                        '--owner', owner.user_name,
                        '--owning-group', owning_group.group_name,
                    pool_name])
            self.fail('Must error out')
        except ClientError as e:
            self.assertIn('Only one of owner or owning-group must be specified',
                          e.stderr_output)
コード例 #53
0
 def test_group_remove_should_not_remove_system_pool(self):
     with session.begin():
         user = data_setup.create_user(password='******')
         group = data_setup.create_group(owner=user)
         pool = data_setup.create_system_pool(owning_group=group)
     b = self.browser
     login(b, user=user.user_name, password='******')
     b.get(get_server_base() + 'groups/')
     b.find_element_by_xpath("//input[@name='group.text']").clear()
     b.find_element_by_xpath("//input[@name='group.text']").send_keys(group.group_name)
     b.find_element_by_id('Search').submit()
     delete_and_confirm(b, "//tr[td/a[normalize-space(text())='%s']]" %
                        group.group_name, delete_text='Delete Group')
     self.assertEqual(
         b.find_element_by_class_name('flash').text,
         '%s deleted' % group.display_name)
     with session.begin():
         session.refresh(pool)
         self.assertFalse(pool.owning_group)
         self.assertEquals(pool.owning_user, user)
         self.assertEquals(pool.activity[-1].action, u'Changed')
         self.assertEquals(pool.activity[-1].field_name, u'Owner')
         self.assertEquals(pool.activity[-1].old_value, 'Group %s' % group.group_name)
         self.assertEquals(pool.activity[-1].new_value, user.user_name)
         self.assertEquals(pool.activity[-1].service, u'WEBUI')
コード例 #54
0
    def test_search_group(self):
        with session.begin():
            group = data_setup.create_group()
            whiteboard = data_setup.unique_name(u'whiteboard%s')
            job = data_setup.create_job(group=group, whiteboard=whiteboard)
            job2 = data_setup.create_job(whiteboard=whiteboard)

        b = self.browser
        # Ensures that both jobs are present
        b.get(get_server_base() + 'jobs')
        b.find_element_by_link_text('Show Search Options').click()
        wait_for_animation(b, '#searchform')
        b.find_element_by_xpath("//select[@id='jobsearch_0_table'] \
            /option[@value='Whiteboard']").click()
        b.find_element_by_xpath("//select[@id='jobsearch_0_operation'] \
            /option[@value='is']").click()
        b.find_element_by_xpath("//input[@id='jobsearch_0_value']"). \
            send_keys(whiteboard)
        b.find_element_by_id('searchform').submit()
        check_job_search_results(b, present=[job, job2])

        # Now do the actual test
        b.find_element_by_xpath("//select[@id='jobsearch_0_table'] \
            /option[@value='Group']").click()
        b.find_element_by_xpath("//select[@id='jobsearch_0_operation'] \
            /option[@value='is']").click()
        b.find_element_by_xpath("//input[@id='jobsearch_0_value']").clear()
        b.find_element_by_xpath("//input[@id='jobsearch_0_value']"). \
            send_keys(job.group.group_name)
        b.find_element_by_id('searchform').submit()
        check_job_search_results(b, present=[job], absent=[job2])
コード例 #55
0
ファイル: test_job_delete.py プロジェクト: ShaolongHu/beaker
 def test_cant_delete_group_mates_job(self):
     # XXX This whole test can go away with BZ#1000861
     try:
         stop_process('gunicorn')
     except ValueError:
         # It seems gunicorn is not a running process
         raise SkipTest('Can only run this test against gunicorn')
     try:
         tmp_config = edit_file(CONFIG_FILE, 'beaker.deprecated_job_group_permissions.on = True',
             'beaker.deprecated_job_group_permissions.on = False')
         start_process('gunicorn', env={'BEAKER_CONFIG_FILE': tmp_config.name})
         with session.begin():
             group = data_setup.create_group()
             mate = data_setup.create_user(password=u'asdf')
             test_job = data_setup.create_completed_job(owner=mate)
             data_setup.add_user_to_group(self.user, group)
             data_setup.add_user_to_group(mate, group)
         try:
             run_client(['bkr', 'job-delete', test_job.t_id],
                 config=self.client_config)
             self.fail('We should not have permission to delete %s' % \
                 test_job.t_id)
         except ClientError, e:
             self.assertIn("You don't have permission to delete job %s" %
             test_job.t_id, e.stderr_output)
     finally:
         stop_process('gunicorn')
         start_process('gunicorn')
コード例 #56
0
    def test_job_group(self):
        with session.begin():
            user_in_group = data_setup.create_user(password='******')
            group = data_setup.create_group()
            user_in_group.groups.append(group)
            user_not_in_group = data_setup.create_user(password='******')

        # Test submitting on behalf of user's group
        config1 = create_client_config(username=user_in_group.user_name,
            password='******')
        out = run_client(['bkr', 'workflow-simple', '--random',
                '--arch', self.distro_tree.arch.arch,
                '--family', self.distro.osversion.osmajor.osmajor,
                '--job-group', group.group_name,
                '--task', self.task.name], config=config1)
        self.assertTrue(out.startswith('Submitted:'), out)
        m = re.search('J:(\d+)', out)
        job_id = m.group(1)
        with session.begin():
            job = Job.by_id(job_id)
        self.assertEqual(group, job.group)

        # Test submitting on behalf of group user does not belong to
        config2 = create_client_config(username=user_not_in_group.user_name,
            password='******')
        try:
            out2 = run_client(['bkr', 'workflow-simple', '--random',
                    '--arch', self.distro_tree.arch.arch,
                    '--family', self.distro.osversion.osmajor.osmajor,
                    '--job-group', group.group_name,
                    '--task', self.task.name], config=config2)
            fail('should raise')
        except ClientError, e:
            self.assertTrue('You are not a member of the %s group' % \
                group.group_name in e.stderr_output, e)