Example #1
0
    def test_system_pools_import(self):
        with session.begin():
            system = data_setup.create_system()
            pool1 = data_setup.create_system_pool()
            pool2 = data_setup.create_system_pool()

        login(self.browser)
        self.import_csv((u'csv_type,fqdn,pool,deleted\n'
                         u'system_pool,%s,%s,False\n'
                         u'system_pool,%s,%s,False'%(system.fqdn, pool1.name,
                                                     system.fqdn, pool2.name)) \
                        .encode('utf8'))
        self.failUnless(is_text_present(self.browser, 'No Errors'))
        with session.begin():
            session.refresh(system)
            self.assertEquals([pool1.name, pool2.name],
                              [pool.name for pool in system.pools])
        # test deletion
        self.import_csv((u'csv_type,fqdn,pool,deleted\n'
                         u'system_pool,%s,%s,True' % (system.fqdn, pool2.name)) \
                         .encode('utf8'))
        self.failUnless(is_text_present(self.browser, 'No Errors'))
        with session.begin():
            session.refresh(system)
            self.assertNotIn(pool2.name, [pool.name for pool in system.pools])

        # Attempting to add a system to a Non existent pool should throw an error
        self.import_csv((u'csv_type,fqdn,pool,deleted\n'
                         u'system_pool,%s,poolpool,True' % system.fqdn) \
                         .encode('utf8'))
        self.assertTrue(is_text_present(self.browser, 'poolpool: pool does not exist'))
Example #2
0
    def test_modifying_email(self):
        current_user_email = self.user.email_address
        b = self.browser

        # Try and use the same email as an existing user
        e = b.find_element_by_name("email_address")
        e.clear()
        e.send_keys(self.user2.email_address)
        b.find_element_by_id("UserPrefs").submit()
        self.assert_(is_text_present(b, "Email address is not unique"))

        # Check invalid email
        self.browser.get(get_server_base() + "prefs")
        e = b.find_element_by_name("email_address")
        e.clear()
        e.send_keys("InvalidEmailAddress")
        b.find_element_by_id("UserPrefs").submit()
        self.assert_(is_text_present(b, "An email address must contain a single @"))

        # Check new unused  and valid email
        self.browser.get(get_server_base() + "prefs")
        e = b.find_element_by_name("email_address")
        e.clear()
        e.send_keys("*****@*****.**" % data_setup.unique_name("dude%s"))
        b.find_element_by_id("UserPrefs").submit()
        self.assert_(is_text_present(b, "Email address changed"))
Example #3
0
    def test_add_invalid_details_existing_user(self):
        with session.begin():
            existing_name = data_setup.unique_name('user%s')
            existing_email = data_setup.unique_name('*****@*****.**')
            data_setup.create_user(user_name=existing_name,
                                   email_address=existing_email)

            existing_name2 = data_setup.unique_name('user%s')
            existing_email2 = data_setup.unique_name('*****@*****.**')
            data_setup.create_user(user_name=existing_name2,
                                   email_address=existing_email2)

        b = self.browser
        b.get(get_server_base() + 'users')
        # Test with duplicate name
        b.find_element_by_name('user.text').send_keys(existing_name)
        b.find_element_by_xpath('//form[@id=\'Search\']').submit()
        b.find_element_by_link_text(existing_name).click()
        b.find_element_by_name('user_name').clear()
        b.find_element_by_name('user_name').send_keys(existing_name2)
        b.find_element_by_xpath('//form[@id=\'User\']').submit()
        self.assert_(b.find_element_by_xpath('//form[@id=\'User\'] \
            //input[@name=\'user_name\']/following-sibling::span'                                                                 ).text == \
                'Login name is not unique')
        # Reset back to current name
        b.find_element_by_name('user_name').clear()
        b.find_element_by_name('user_name').send_keys(existing_name)

        # Verify our exiting details submit ok
        b.find_element_by_name('email_address').clear()
        b.find_element_by_name('email_address').send_keys(existing_email)
        b.find_element_by_xpath('//form[@id=\'User\']').submit()
        is_text_present(b, '%s saved' % existing_name)
Example #4
0
    def test_add_invalid_details_existing_user(self):
        with session.begin():
            existing_name = data_setup.unique_name("user%s")
            existing_email = data_setup.unique_name("*****@*****.**")
            data_setup.create_user(user_name=existing_name, email_address=existing_email)

            existing_name2 = data_setup.unique_name("user%s")
            existing_email2 = data_setup.unique_name("*****@*****.**")
            data_setup.create_user(user_name=existing_name2, email_address=existing_email2)

        b = self.browser
        b.get(get_server_base() + "users")
        # Test with duplicate name
        b.find_element_by_name("user.text").send_keys(existing_name)
        b.find_element_by_xpath("//form[@id='Search']").submit()
        b.find_element_by_link_text(existing_name).click()
        b.find_element_by_name("user_name").clear()
        b.find_element_by_name("user_name").send_keys(existing_name2)
        b.find_element_by_xpath("//form[@id='User']").submit()
        self.assert_(
            b.find_element_by_xpath(
                "//form[@id='User'] \
            //input[@name='user_name']/following-sibling::span"
            ).text
            == "Login name is not unique"
        )
        # Reset back to current name
        b.find_element_by_name("user_name").clear()
        b.find_element_by_name("user_name").send_keys(existing_name)

        # Verify our exiting details submit ok
        b.find_element_by_name("email_address").clear()
        b.find_element_by_name("email_address").send_keys(existing_email)
        b.find_element_by_xpath("//form[@id='User']").submit()
        is_text_present(b, "%s saved" % existing_name)
Example #5
0
    def test_system_pools_import(self):
        with session.begin():
            system = data_setup.create_system()
            pool1 = data_setup.create_system_pool()
            pool2 = data_setup.create_system_pool()

        login(self.browser)
        self.import_csv((u'csv_type,fqdn,pool,deleted\n'
                         u'system_pool,%s,%s,False\n'
                         u'system_pool,%s,%s,False'%(system.fqdn, pool1.name,
                                                     system.fqdn, pool2.name)) \
                        .encode('utf8'))
        self.failUnless(is_text_present(self.browser, 'No Errors'))
        with session.begin():
            session.refresh(system)
            self.assertEquals([pool1.name, pool2.name],
                              [pool.name for pool in system.pools])
        # test deletion
        self.import_csv((u'csv_type,fqdn,pool,deleted\n'
                         u'system_pool,%s,%s,True' % (system.fqdn, pool2.name)) \
                         .encode('utf8'))
        self.failUnless(is_text_present(self.browser, 'No Errors'))
        with session.begin():
            session.refresh(system)
            self.assertNotIn(pool2.name, [pool.name for pool in system.pools])

        # Attempting to add a system to a Non existent pool should throw an error
        self.import_csv((u'csv_type,fqdn,pool,deleted\n'
                         u'system_pool,%s,poolpool,True' % system.fqdn) \
                         .encode('utf8'))
        self.assertTrue(
            is_text_present(self.browser, 'poolpool: pool does not exist'))
Example #6
0
 def test_group(self):
     b = self.browser
     login(b, user=self.user.user_name, password="******")
     b.get(get_server_base() + "groups/mine")
     b.find_element_by_xpath('//h2[text()="My Groups"]')
     self.assert_(not is_text_present(b, self.rand_group.group_name))
     b.find_element_by_link_text("System count: 1").click()
     self.assert_(is_text_present(b, "Systems in Group %s" % self.group.group_name))
     self.assert_(is_text_present(b, self.system.fqdn))
Example #7
0
 def test_group(self):
     b = self.browser
     login(b, user=self.user.user_name, password='******')
     b.get(get_server_base() + 'groups/mine')
     b.find_element_by_xpath('//h1[text()="My Groups"]')
     self.assert_(not is_text_present(b, self.rand_group.group_name))
     b.find_element_by_link_text('System count: 1').click()
     self.assert_(
         is_text_present(b, 'Systems in Group %s' % self.group.group_name))
     self.assert_(is_text_present(b, self.system.fqdn))
Example #8
0
    def test_add_invalid_details_new_user(self):
        with session.begin():
            existing_name = data_setup.unique_name('user%s')
            existing_email = data_setup.unique_name('*****@*****.**')
            data_setup.create_user(user_name=existing_name,
                                   password='******',
                                   email_address=existing_email)
        b = self.browser
        b.get(get_server_base() + 'users')
        b.find_element_by_link_text('Add').click()

        # Test with all blank fields
        b.find_element_by_xpath('//form[@id=\'User\']').submit()
        self.assert_(b.find_element_by_xpath('//form[@id=\'User\'] \
            //input[@name=\'user_name\']/following-sibling::span'                                                                 ).text == \
                'Please enter a value')
        self.assert_(b.find_element_by_xpath('//form[@id=\'User\'] \
            //input[@name=\'display_name\']/following-sibling::span'                                                                    ).text == \
                'Please enter a value')
        self.assert_(b.find_element_by_xpath('//form[@id=\'User\'] \
            //input[@name=\'email_address\']/following-sibling::span'                                                                     ).text == \
                'Please enter an email address')

        # Submit valid details to make sure it recovers
        valid_user_1 = data_setup.unique_name('user%s')
        b.find_element_by_name('user_name').send_keys(valid_user_1)
        b.find_element_by_name('display_name').send_keys(valid_user_1)
        b.find_element_by_name('email_address').send_keys(
            data_setup.unique_name('*****@*****.**'))
        b.find_element_by_xpath('//form[@id=\'User\']').submit()
        is_text_present(b, '%s saved' % valid_user_1)

        # Enter duplicate user name
        b.get(get_server_base() + 'users')
        b.find_element_by_link_text('Add').click()
        b.find_element_by_name('user_name').send_keys(existing_name)
        b.find_element_by_name('display_name').send_keys(
            data_setup.unique_name('display%s'))
        b.find_element_by_name('email_address').send_keys(
            data_setup.unique_name('*****@*****.**'))

        # Check our custom user name validator
        b.find_element_by_xpath('//form[@id=\'User\']').submit()
        self.assert_(b.find_element_by_xpath('//form[@id=\'User\'] \
            //input[@name=\'user_name\']/following-sibling::span'                                                                 ).text == \
                'Login name is not unique')

        valid_user_2 = data_setup.unique_name('user%s')
        b.find_element_by_name('user_name').send_keys(valid_user_2)
        b.find_element_by_id('User').submit()
        is_text_present(b, '%s saved' % valid_user_2)
Example #9
0
 def test_dictionary_password_rejected(self):
     b = self.browser
     e = b.find_element_by_name("_root_password")
     e.clear()
     e.send_keys(self.simple_password)
     b.find_element_by_id('UserPrefs').submit()
     self.assert_(is_text_present(b, 'Root password not changed'))
Example #10
0
 def test_missing_field(self):
     login(self.browser)
     orig_date_modified = self.system.date_modified
     self.import_csv((u'csv_type,fqdn,location,arch\n'
             u'system,%s,Under my desk' % self.system.fqdn)
             .encode('utf8'))
     self.assert_(is_text_present(self.browser, 'Missing fields on line 2: arch'))
Example #11
0
 def test_system_export_reimport(self):
     login(self.browser)
     orig_date_modified = self.system.date_modified
     self.import_csv(''.join([row for row in self.get_csv('system')]))
     self.failUnless(is_text_present(self.browser, "No Errors"))
     session.refresh(self.system)
     self.assert_(orig_date_modified != self.system.date_modified)
Example #12
0
 def test_extraneous_field(self):
     login(self.browser)
     orig_date_modified = self.system.date_modified
     self.import_csv((u'csv_type,fqdn,location,arch\n'
             u'system,%s,Under my desk,ppc64,what is this field doing here' % self.system.fqdn)
             .encode('utf8'))
     self.assert_(is_text_present(self.browser, 'Too many fields on line 2 (expecting 4)'))
Example #13
0
 def job_delete_jobpage(self, job):
     b = self.browser
     b.get(get_server_base() + 'jobs/%d' % \
         job.id)
     delete_and_confirm(b, "//form[@action='delete_job_page']")
     self.assertTrue(is_text_present(b, "Succesfully deleted J:%s" %
         job.id))
Example #14
0
 def test_extraneous_field(self):
     login(self.browser)
     orig_date_modified = self.system.date_modified
     self.import_csv((u'csv_type,fqdn,location,arch\n'
             u'system,%s,Under my desk,ppc64,what is this field doing here' % self.system.fqdn)
             .encode('utf8'))
     self.assert_(is_text_present(self.browser, 'Too many fields on line 2 (expecting 4)'))
Example #15
0
 def test_missing_field(self):
     login(self.browser)
     orig_date_modified = self.system.date_modified
     self.import_csv((u'csv_type,fqdn,location,arch\n'
             u'system,%s,Under my desk' % self.system.fqdn)
             .encode('utf8'))
     self.assert_(is_text_present(self.browser, 'Missing fields on line 2: arch'))
Example #16
0
 def test_owner_cancel_recipeset(self):
     b = self.browser
     login(b, self.user.user_name, self.password)
     b.get(get_server_base() + "jobs/%s" % self.job.id)
     b.find_element_by_xpath('//div[@class="recipeset"]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(is_text_present(b, "Successfully cancelled recipeset %s" % self.job.recipesets[0].id))
Example #17
0
    def test_system(self):
        login(self.browser)
        orig_date_modified = self.system.date_modified
        self.import_csv((u'csv_type,fqdn,location,arch\n'
                         u'system,%s,Under my desk,ia64' %
                         self.system.fqdn).encode('utf8'))
        self.failUnless(is_text_present(self.browser, "No Errors"))
        with session.begin():
            session.refresh(self.system)
            self.assertEquals(self.system.location, u'Under my desk')
            self.assert_(Arch.by_name(u'ia64') in self.system.arch)
            self.assert_(self.system.date_modified > orig_date_modified)

        # attempting to import a system with no FQDN should fail
        self.import_csv((u'csv_type,fqdn,location,arch\n'
                         u'system,'
                         ',Under my desk,ia64').encode('utf8'))
        self.assertEquals(
            self.browser.find_element_by_xpath(
                '//table[@id="csv-import-log"]//td').text,
            "Error importing line 2: "
            "System must have an associated FQDN")

        # attempting to import a system with an invalid FQDN should fail
        self.import_csv(
            (u'csv_type,fqdn,location,arch\n'
             u'system,invalid--fqdn,Under my desk,ia64').encode('utf8'))
        self.assertEquals(
            self.browser.find_element_by_xpath(
                '//table[@id="csv-import-log"]//td').text,
            "Error importing line 2: "
            "Invalid FQDN for system: invalid--fqdn")
Example #18
0
 def job_delete_jobpage(self, job):
     b = self.browser
     b.get(get_server_base() + 'jobs/%d' % \
         job.id)
     delete_and_confirm(b, "//form[@action='delete_job_page']")
     self.assertTrue(is_text_present(b,
                                     "Succesfully deleted J:%s" % job.id))
Example #19
0
    def test_system(self):
        login(self.browser)
        orig_date_modified = self.system.date_modified
        self.import_csv((u'csv_type,fqdn,location,arch\n'
                u'system,%s,Under my desk,ia64' % self.system.fqdn)
                .encode('utf8'))
        self.failUnless(is_text_present(self.browser, "No Errors"))
        with session.begin():
            session.refresh(self.system)
            self.assertEquals(self.system.location, u'Under my desk')
            self.assert_(Arch.by_name(u'ia64') in self.system.arch)
            self.assert_(self.system.date_modified > orig_date_modified)

        # attempting to import a system with no FQDN should fail
        self.import_csv((u'csv_type,fqdn,location,arch\n'
                         u'system,'',Under my desk,ia64').encode('utf8'))
        self.assertEquals(self.browser.find_element_by_xpath(
            '//table[@id="csv-import-log"]//td').text,
                          "Error importing line 2: "
                          "System must have an associated FQDN")

        # attempting to import a system with an invalid FQDN should fail
        self.import_csv((u'csv_type,fqdn,location,arch\n'
                         u'system,invalid--fqdn,Under my desk,ia64').encode('utf8'))
        self.assertEquals(self.browser.find_element_by_xpath(
            '//table[@id="csv-import-log"]//td').text,
                          "Error importing line 2: "
                          "Invalid FQDN for system: invalid--fqdn")
Example #20
0
 def test_dictionary_password_rejected(self):
     b = self.browser
     e = b.find_element_by_name("_root_password")
     e.clear()
     e.send_keys(self.simple_password)
     b.find_element_by_id('UserPrefs').submit()
     self.assert_(is_text_present(b, 'Root password not changed'))
Example #21
0
 def test_owner_cancel_job(self):
     b = self.browser
     login(b, self.user.user_name, self.password)
     b.get(get_server_base() + "jobs/%s" % self.job.id)
     b.find_element_by_xpath('//div[contains(@class, "job-action-container")]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(is_text_present(b, "Successfully cancelled job %s" % self.job.id))
Example #22
0
    def test_remove_self_admin_group(self):

        with session.begin():
            user = data_setup.create_admin(password='******')

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

        # admin should be in groups/mine
        b.get(get_server_base() + 'groups/mine')
        b.find_element_by_link_text('admin').click()

        # remove self
        b.find_element_by_xpath('//td/a[text()="Remove (-)" and ../preceding-sibling::td[2]/text()="%s"]'
                                % user.user_name).click()

        # admin should not be in groups/mine
        b.get(get_server_base() + 'groups/mine')
        self.assertTrue(not is_text_present(b, 'admin'))
        logout(b)

        # login as admin
        login(b)
        group = Group.by_name('admin')
        group_users = group.users
        # remove  all other users from 'admin'
        b.get(get_server_base() + 'groups/edit?group_id=1')
        for usr in group_users:
            if usr.user_id != 1:
                b.find_element_by_xpath('//td/a[text()="Remove (-)" and ../preceding-sibling::td[2]/text()="%s"]'
                                        % usr.user_name).click()

        # attempt to remove admin user
        b.find_element_by_xpath('//a[@href="removeUser?group_id=1&id=1"]').click()
        self.assert_('Cannot remove member' in b.find_element_by_class_name('flash').text)
Example #23
0
 def test_ssh_key_trailing_whitespace_is_stripped(self):
     b = self.browser
     key = 'ssh-rsa AAAAw00t [email protected]  \n\n'
     b.find_element_by_name('ssh_pub_key').send_keys(key)
     b.find_element_by_id('ssh_key_add').submit()
     self.assert_(is_text_present(b, 'SSH public key added'))
     with session.begin():
         self.assertEquals(self.user.sshpubkeys[-1].ident, '*****@*****.**')
Example #24
0
 def test_owner_cancel_job(self):
     b = self.browser
     login(b, self.user.user_name, self.password)
     b.get(get_server_base() + 'jobs/%s' % self.job.id)
     b.find_element_by_xpath('//div[contains(@class, "job-action-container")]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(is_text_present(b, "Successfully cancelled job %s"
         % self.job.id))
Example #25
0
    def test_loaned_not_used_system_not_shown(self):
        with session.begin():
            pass_ ='password'
            user_1 = data_setup.create_user(password=pass_)
            user_2 = data_setup.create_user(password=pass_)
            self.system.loaned = user_1
        b = self.browser
        login(b, user=user_1.user_name, password=pass_)
        go_to_reserve_systems(b, self.distro_tree)
        search_for_system(b, self.system)
        self.assert_(is_text_present(b, 'Reserve Now'))

        logout(b)
        login(b, user=user_2.user_name, password=pass_)
        go_to_reserve_systems(b, self.distro_tree)
        search_for_system(b, self.system)
        self.assert_(is_text_present(b, 'Queue Reservation'))
Example #26
0
 def test_ssh_key_trailing_whitespace_is_stripped(self):
     b = self.browser
     key = 'ssh-rsa AAAAw00t [email protected]  \n\n'
     b.find_element_by_name('ssh_pub_key').send_keys(key)
     b.find_element_by_id('ssh_key_add').submit()
     self.assert_(is_text_present(b, 'SSH public key added'))
     with session.begin():
         self.assertEquals(self.user.sshpubkeys[-1].ident, '*****@*****.**')
Example #27
0
 def test_owner_cancel_recipeset(self):
     b = self.browser
     login(b, self.user.user_name, self.password)
     b.get(get_server_base() + 'jobs/%s' % self.job.id)
     b.find_element_by_xpath('//div[@class="recipeset"]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(is_text_present(b, "Successfully cancelled recipeset %s"
         % self.job.recipesets[0].id))
Example #28
0
 def test_myjobs_individual(self):
     with session.begin():
         user = data_setup.create_user(password='******')
         job = data_setup.create_job(owner=user, group=None)
     b = self.browser
     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.assertTrue(is_text_present(b, job.t_id))
Example #29
0
 def test_myjobs_individual(self):
     with session.begin():
         user = data_setup.create_user(password='******')
         job = data_setup.create_job(owner=user, group=None)
     b = self.browser
     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.assertTrue(is_text_present(b, job.t_id))
Example #30
0
 def test_myjobs_group(self):
     with session.begin():
         user = data_setup.create_user(password='******')
         user2 = data_setup.create_user(password='******')
         group = data_setup.create_group()
         user.groups.append(group)
         user2.groups.append(group)
         job = data_setup.create_job(owner=user, group=group)
     b = self.browser
     login(b, user=user2.user_name, password='******')
     b.get(get_server_base() + 'jobs/mygroups')
     b.find_element_by_xpath('//title[normalize-space(text())="My Group Jobs"]')
     self.assertTrue(is_text_present(b, job.t_id))
     logout(b)
     login(b, user=user.user_name, password='******')
     b.get(get_server_base() + 'jobs/mygroups')
     b.find_element_by_xpath('//title[normalize-space(text())="My Group Jobs"]')
     self.assertTrue(is_text_present(b, job.t_id))
Example #31
0
 def test_myjobs_group(self):
     with session.begin():
         user = data_setup.create_user(password='******')
         user2 = data_setup.create_user(password='******')
         group = data_setup.create_group()
         user.groups.append(group)
         user2.groups.append(group)
         job = data_setup.create_job(owner=user, group=group)
     b = self.browser
     login(b, user=user2.user_name, password='******')
     b.get(get_server_base() + 'jobs/mygroups')
     b.find_element_by_xpath('//title[normalize-space(text())="My Group Jobs"]')
     self.assertTrue(is_text_present(b, job.t_id))
     logout(b)
     login(b, user=user.user_name, password='******')
     b.get(get_server_base() + 'jobs/mygroups')
     b.find_element_by_xpath('//title[normalize-space(text())="My Group Jobs"]')
     self.assertTrue(is_text_present(b, job.t_id))
Example #32
0
 def delete_group_from_system(self, b, system=None, group=None):
     if not system:
         system = self.system
     if not group:
         group = self.group
     b.get(get_server_base() + "view/%s" % system.fqdn)
     b.find_element_by_link_text("Groups").click()
     delete_and_confirm(b, '//table[@id="systemgroups"]')
     self.assert_(is_text_present(b, "%s Removed" % group.display_name))
Example #33
0
 def test_system_unicode(self):
     login(self.browser)
     self.import_csv((u'csv_type,fqdn,location,arch\n'
                      u'system,%s,在我的办公桌,ia64' % self.system.fqdn) \
                     .encode('utf8'))
     self.failUnless(is_text_present(self.browser, "No Errors"))
     with session.begin():
         session.refresh(self.system)
         self.assertEquals(self.system.location, u'在我的办公桌')
Example #34
0
 def test_set_hashed_password(self):
     b = self.browser
     e = b.find_element_by_name("_root_password")
     e.clear()
     e.send_keys(self.hashed_password)
     b.find_element_by_id('UserPrefs').submit()
     self.assert_(is_text_present(b, 'root password hash changed'))
     new_hash = b.find_element_by_name('_root_password').get_attribute('value')
     self.failUnless(crypt.crypt(self.clear_password, new_hash) == self.hashed_password)
Example #35
0
 def test_system_unicode(self):
     login(self.browser)
     self.import_csv((u'csv_type,fqdn,location,arch\n'
                      u'system,%s,在我的办公桌,ia64' % self.system.fqdn) \
                     .encode('utf8'))
     self.failUnless(is_text_present(self.browser, "No Errors"))
     with session.begin():
         session.refresh(self.system)
         self.assertEquals(self.system.location, u'在我的办公桌')
Example #36
0
 def delete_group_from_system(self, b, system=None, group=None):
     if not system:
         system = self.system
     if not group:
         group = self.group
     b.get(get_server_base() + 'view/%s' % system.fqdn)
     b.find_element_by_link_text('Groups').click()
     delete_and_confirm(b, '//table[@id="systemgroups"]')
     self.assert_(is_text_present(b, '%s Removed' % group.display_name))
Example #37
0
 def test_set_plaintext_password(self):
     b = self.browser
     e = b.find_element_by_name("_root_password")
     e.clear()
     e.send_keys(self.clear_password)
     b.find_element_by_id("UserPrefs").submit()
     self.assert_(is_text_present(b, "root password hash changed"))
     new_hash = b.find_element_by_name("_root_password").get_attribute("value")
     self.failUnless(new_hash)
     self.failUnless(crypt.crypt(self.clear_password, new_hash) == new_hash)
Example #38
0
 def test_keyvalue(self):
     orig_date_modified = self.system.date_modified
     self.import_csv((u'csv_type,fqdn,key,key_value,deleted\n'
             u'keyvalue,%s,COMMENT,UTF 8 –,False' % self.system.fqdn)
             .encode('utf8'))
     self.failUnless(is_text_present(self.browser, "No Errors"))
     with session.begin():
         session.refresh(self.system)
         assert_has_key_with_value(self.system, 'COMMENT', u'UTF 8 –')
         self.assert_(self.system.date_modified > orig_date_modified)
Example #39
0
 def delete_group_from_system(self, b, system=None, group=None):
     if not system:
         system = self.system
     if not group:
         group = self.group
     b.get(get_server_base() + 'view/%s' % system.fqdn)
     b.find_element_by_link_text('Groups').click()
     b.find_element_by_link_text('Delete ( - )').click()
     b.find_element_by_xpath("//button[@type='button' and text()='Yes']").click()
     self.assert_(is_text_present(b, '%s Removed' % group.display_name))
Example #40
0
 def test_by_distro(self):
     login(self.browser)
     b = self.browser
     go_to_reserve_systems(b, self.distro_tree)
     search_for_system(b, self.system)
     self.failUnless(is_text_present(b, self.system.fqdn))
     b.find_element_by_link_text('Reserve Now').click()
     b.find_element_by_name('whiteboard').send_keys(unicode(self.distro_tree))
     b.find_element_by_id('form').submit()
     self.assert_('Success' in b.find_element_by_css_selector('.flash').text)
Example #41
0
 def test_no_quotes(self):
     with session.begin():
         data_setup.create_labcontroller(fqdn=u'imhoff.bkr')
     b = self.browser
     login(b)
     b.get(get_server_base() + 'csv/csv_import')
     b.find_element_by_name('csv_file').send_keys(
         pkg_resources.resource_filename(self.__module__, 'bz787519.csv'))
     b.find_element_by_name('csv_file').submit()
     self.failUnless(is_text_present(self.browser, "No Errors"))
Example #42
0
 def test_no_quotes(self):
     with session.begin():
         data_setup.create_labcontroller(fqdn=u'imhoff.bkr')
     b = self.browser
     login(b)
     b.get(get_server_base() + 'csv/csv_import')
     b.find_element_by_name('csv_file').send_keys(
             pkg_resources.resource_filename(self.__module__, 'bz787519.csv'))
     b.find_element_by_name('csv_file').submit()
     self.failUnless(is_text_present(self.browser, "No Errors"))
Example #43
0
    def test_adduser(self):
        user_1_name = data_setup.unique_name('anonymous%s')
        user_1_email = data_setup.unique_name('*****@*****.**')
        user_1_pass = '******'

        user_2_name = data_setup.unique_name('anonymous%s')
        user_2_email = data_setup.unique_name('*****@*****.**')
        user_2_pass = '******'

        b = self.browser
        b.get(get_server_base())
        click_menu_item(b, 'Admin', 'Accounts')
        b.find_element_by_link_text('Add').click()
        b.find_element_by_name('user_name').send_keys(user_1_name)
        b.find_element_by_name('display_name').send_keys(user_1_name)
        b.find_element_by_name('email_address').send_keys(user_1_email)
        b.find_element_by_name('password').send_keys(user_1_pass)
        b.find_element_by_id('User').submit()
        #Test Saved message came up
        self.assertEquals(
            b.find_element_by_class_name('flash').text,
            '%s saved' % user_1_name)

        b.get(get_server_base() + 'users')
        #Test that user 1 is listed as part of users
        self.failUnless(is_text_present(b, user_1_name))

        #Add user 2
        b.find_element_by_link_text('Add').click()
        b.find_element_by_name('user_name').send_keys(user_2_name)
        b.find_element_by_name('display_name').send_keys(user_2_name)
        b.find_element_by_name('email_address').send_keys(user_2_email)
        b.find_element_by_name('password').send_keys(user_2_pass)
        b.find_element_by_id('User').submit()
        #Test Saved message came up
        self.assertEquals(
            b.find_element_by_class_name('flash').text,
            '%s saved' % user_2_name)

        b.get(get_server_base() + 'users')
        #Test that user 2 is listed as part of users
        self.failUnless(is_text_present(b, user_2_name))
Example #44
0
 def test_keyvalue(self):
     login(self.browser)
     orig_date_modified = self.system.date_modified
     self.import_csv((u'csv_type,fqdn,key,key_value,deleted\n'
                      u'keyvalue,%s,COMMENT,UTF 8 –,False' %
                      self.system.fqdn).encode('utf8'))
     self.failUnless(is_text_present(self.browser, "No Errors"))
     with session.begin():
         session.refresh(self.system)
         assert_has_key_with_value(self.system, 'COMMENT', u'UTF 8 –')
         self.assert_(self.system.date_modified > orig_date_modified)
Example #45
0
 def test_system(self):
     orig_date_modified = self.system.date_modified
     self.import_csv((u'csv_type,fqdn,location,arch\n'
             u'system,%s,Under my desk,ia64' % self.system.fqdn)
             .encode('utf8'))
     self.failUnless(is_text_present(self.browser, "No Errors"))
     with session.begin():
         session.refresh(self.system)
         self.assertEquals(self.system.location, u'Under my desk')
         self.assert_(Arch.by_name(u'ia64') in self.system.arch)
         self.assert_(self.system.date_modified > orig_date_modified)
Example #46
0
 def test_add_group(self):
     b = self.browser
     b.get(get_server_base())
     login(b)
     click_menu_item(b, 'Admin', 'Groups')
     b.find_element_by_link_text('Add').click()
     b.find_element_by_name('display_name').send_keys(self.group_display_name)
     b.find_element_by_name('group_name').send_keys(self.group_name)
     b.find_element_by_id('Group').submit()
     self.assertEquals(b.find_element_by_class_name('flash').text, 'OK')
     self.assert_(is_text_present(b, self.group_display_name))
Example #47
0
 def test_set_hashed_password(self):
     b = self.browser
     e = b.find_element_by_name("_root_password")
     e.clear()
     e.send_keys(self.hashed_password)
     b.find_element_by_id('UserPrefs').submit()
     self.assert_(is_text_present(b, 'root password hash changed'))
     new_hash = b.find_element_by_name('_root_password').get_attribute(
         'value')
     self.failUnless(
         crypt.crypt(self.clear_password, new_hash) == self.hashed_password)
Example #48
0
 def test_add_group(self):
     b = self.browser
     b.get(get_server_base())
     login(b)
     click_menu_item(b, 'Admin', 'Groups')
     b.find_element_by_link_text('Add').click()
     b.find_element_by_name('display_name').send_keys(self.group_display_name)
     b.find_element_by_name('group_name').send_keys(self.group_name)
     b.find_element_by_id('Group').submit()
     self.assertEquals(b.find_element_by_class_name('flash').text, 'OK')
     self.assert_(is_text_present(b, self.group_display_name))
Example #49
0
    def test_add_invalid_details_existing_user(self):
        with session.begin():
            existing_name = data_setup.unique_name('user%s')
            existing_email = data_setup.unique_name('*****@*****.**')
            data_setup.create_user(user_name=existing_name,
                email_address=existing_email)

            existing_name2 = data_setup.unique_name('user%s')
            existing_email2 = data_setup.unique_name('*****@*****.**')
            data_setup.create_user(user_name=existing_name2,
                email_address=existing_email2)

        b = self.browser
        b.get(get_server_base() + 'users')
        # Test with duplicate name
        b.find_element_by_name('user.text').send_keys(existing_name)
        b.find_element_by_xpath('//form[@id=\'Search\']').submit()
        b.find_element_by_link_text(existing_name).click()
        b.find_element_by_name('user_name').clear()
        b.find_element_by_name('user_name').send_keys(existing_name2)
        b.find_element_by_xpath('//form[@id=\'User\']').submit()
        self.assert_(b.find_element_by_xpath('//form[@id=\'User\'] \
            //input[@name=\'user_name\']/following-sibling::span').text == \
                'Login name is not unique')
        # Reset back to current name
        b.find_element_by_name('user_name').clear()
        b.find_element_by_name('user_name').send_keys(existing_name)

        # Test with duplicate email
        b.find_element_by_name('email_address').clear()
        b.find_element_by_name('email_address').send_keys(existing_email2)
        b.find_element_by_xpath('//form[@id=\'User\']').submit()
        self.assert_(b.find_element_by_xpath('//form[@id=\'User\'] \
            //input[@name=\'email_address\']/following-sibling::span').text == \
                'Email address is not unique')

        # Verify our exiting details submit ok
        b.find_element_by_name('email_address').clear()
        b.find_element_by_name('email_address').send_keys(existing_email)
        b.find_element_by_xpath('//form[@id=\'User\']').submit()
        is_text_present(b, '%s saved' % existing_name)
Example #50
0
 def test_cancel_group_job(self):
     b = self.browser
     with session.begin():
         group = data_setup.create_group()
         user = data_setup.create_user(password="******")
         user.groups.append(group)
         self.job.group = group
     login(b, user.user_name, "password")
     b.get(get_server_base() + "jobs/%s" % self.job.id)
     b.find_element_by_xpath('//div[contains(@class, "job-action-container")]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(is_text_present(b, "Successfully cancelled job %s" % self.job.id))
Example #51
0
    def test_task_pagination(self):
        with session.begin():
            num_of_tasks = 35
            the_tasks = [data_setup.create_task() for t in range(num_of_tasks)]
            the_recipe = data_setup.create_recipe(task_list=the_tasks)
            the_job = data_setup.create_job_for_recipes([the_recipe], owner=self.user)

        b = self.browser
        self.go_to_recipe_view(the_recipe)
        b.find_element_by_id("all_recipe_%s" % the_recipe.id).click()
        for t in the_job.recipesets[0].recipes[0].tasks:
            self.assertTrue(is_text_present(b, "T:%s" %t.id))
Example #52
0
 def test_cancel_group_job(self):
     b = self.browser
     with session.begin():
         group = data_setup.create_group()
         user = data_setup.create_user(password='******')
         user.groups.append(group)
         self.job.group = group
     login(b, user.user_name, 'password')
     b.get(get_server_base() + 'jobs/%s' % self.job.id)
     b.find_element_by_xpath('//div[contains(@class, "job-action-container")]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(is_text_present(b, "Successfully cancelled job %s"
         % self.job.id))
Example #53
0
 def test_record_job_cancel(self):
     b = self.browser
     login(b, self.user.user_name, self.password)
     b.get(get_server_base() + 'jobs/%s' % self.job.id)
     b.find_element_by_xpath('//div[contains(@class, "job-action-container")]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(is_text_present(b, "Successfully cancelled job %s"
                     % self.job.id))
     with session.begin():
         self.assertEquals(self.job.activity[0].service, u'WEBUI')
         self.assertEquals(self.job.activity[0].field_name, 'Status')
         self.assertEquals(self.job.activity[0].object_name(), 'Job: %s' % self.job.id)
         self.assertEquals(self.job.activity[0].action, u'Cancelled')
Example #54
0
    def test_task_pagination(self):
        with session.begin():
            num_of_tasks = 35
            the_tasks = [data_setup.create_task() for t in range(num_of_tasks)]
            the_recipe = data_setup.create_recipe(task_list=the_tasks)
            the_job = data_setup.create_job_for_recipes([the_recipe], owner=self.user)

        b = self.browser
        self.go_to_recipe_view(the_recipe)
        b.find_element_by_xpath('//div[@id="recipe%s"]//a[text()="Show Results"]'
                % the_recipe.id).click()
        for t in the_job.recipesets[0].recipes[0].tasks:
            self.assertTrue(is_text_present(b, "T:%s" %t.id))
Example #55
0
 def test_max_whiteboard(self):
     max = Job.max_by_whiteboard
     c = 0
     whiteboard =u'whiteboard'
     with session.begin():
         while c <= max:
             data_setup.create_completed_job(whiteboard=whiteboard)
             c += 1
     b = self.browser
     b.get(get_server_base() + 'matrix')
     b.find_element_by_xpath("//select[@name='whiteboard']/option[@value='%s']" % whiteboard).click()
     b.find_element_by_xpath('//button[@type="submit" and text()="Generate"]').click()
     self.failUnless(is_text_present(b, "Your whiteboard contains %d jobs, only %s will be used" % (c, Job.max_by_whiteboard)))
Example #56
0
    def test_modifying_beaker_password(self):
        b = self.browser
        pass_field = b.find_element_by_name("password")
        pass_field.clear()
        pass_field.send_keys('AlbiDoubleyou')
        b.find_element_by_id('UserPrefs').submit()
        self.assert_(is_text_present(b, 'Beaker password changed'))

        # Test that we can login with new creds
        # If we can't make the prefs page, we are not logged in
        logout(b)
        login(b, user=self.user.user_name, password='******')
        self.browser.get(get_server_base() + 'prefs')
        b.find_element_by_xpath('//h1[text()="User Preferences"]')
Example #57
0
 def test_clear_rows_in_system_recipe_map(self):
     with session.begin():
         system = data_setup.create_system(owner=self.user)
         self.job.recipesets[0].recipes[0].systems[:] = [system]
     # check if rows in system_recipe_map
     self.assertNotEqual(len(self.job.recipesets[0].recipes[0].systems), 0)
     b = self.browser
     login(b, self.user.user_name, self.password)
     b.get(get_server_base() + 'jobs/%s' % self.job.id)
     b.find_element_by_xpath('//div[@class="recipeset"]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(is_text_present(b, "Successfully cancelled recipeset %s"
         % self.job.recipesets[0].id))
     with session.begin():
         session.expire_all()
         self.assertEqual(len(self.job.recipesets[0].recipes[0].systems), 0)
Example #58
0
 def test_cancel_recipeset_group_job(self):
     b = self.browser
     with session.begin():
         group = data_setup.create_group()
         user = data_setup.create_user(password='******')
         user.use_old_job_page = True
         group.add_member(user)
         self.job.group = group
     login(b, user.user_name, 'password')
     b.get(get_server_base() + 'jobs/%s' % self.job.id)
     b.find_element_by_xpath(
         '//div[@class="recipeset"]//a[text()="Cancel"]').click()
     b.find_element_by_xpath("//input[@value='Yes']").click()
     self.assertTrue(
         is_text_present(
             b, "Successfully cancelled recipeset %s" %
             self.job.recipesets[0].id))
Example #59
0
    def test_correct_items_count(self):
        with session.begin():
            lc_1 = data_setup.create_labcontroller()
            lc_2 = data_setup.create_labcontroller()
            distro_name = data_setup.unique_name(u'distroname%s')
            distro_osmajor = data_setup.unique_name(u'osmajor%s')
            distro_osminor = u'2'
            distro_tags = None

            distro = data_setup.create_distro(name=distro_name,
                osmajor=distro_osmajor, osminor=distro_osminor,
                tags=distro_tags)
            data_setup.create_distro_tree(distro=distro)

        b = self.browser
        b.get(get_server_base() + 'distros')
        b.find_element_by_name('simplesearch').send_keys(distro.name)
        b.find_element_by_id('simpleform').submit()
        self.assert_(is_text_present(b, 'Items found: 1'))
Example #60
0
 def test_doubled_quotes(self):
     with session.begin():
         system = data_setup.create_system(fqdn=u'mymainframe.funtimes.invalid', arch=u's390x')
         OSMajor.lazy_create(osmajor=u'RedHatEnterpriseLinux7')
     b = self.browser
     login(b)
     b.get(get_server_base() + 'csv/csv_import')
     b.find_element_by_name('csv_file').send_keys(
             pkg_resources.resource_filename(self.__module__, 'bz802842.csv'))
     b.find_element_by_name('csv_file').submit()
     self.failUnless(is_text_present(self.browser, "No Errors"))
     with session.begin():
         session.refresh(system)
         self.assertEquals(system.provisions[Arch.by_name(u's390x')]\
                 .provision_families[OSMajor.by_name(u'RedHatEnterpriseLinux7')]\
                 .kernel_options,
                 'rd.znet="qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=lol,portno=0" '
                 'ip=1.2.3.4::1.2.3.4:255.255.248.0::eth0:none MTU=1500 nameserver=1.2.3.4 '
                 'DASD=20A1,21A1,22A1,23A1 MACADDR=02:DE:AD:BE:EF:16 '
                 '!LAYER2 !DNS !PORTNO !IPADDR !GATEWAY !HOSTNAME !NETMASK ')