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'))
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"))
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)
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)
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'))
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))
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))
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)
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'))
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'))
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)
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)'))
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))
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))
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")
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")
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))
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)
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, '*****@*****.**')
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))
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'))
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))
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))
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))
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))
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'在我的办公桌')
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)
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))
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)
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)
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))
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)
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"))
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))
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)
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)
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))
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)
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)
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))
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))
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))
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')
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))
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)))
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"]')
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)
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))
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'))
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 ')