mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
ui_tests: add more test cases
Add more test cases to test_services. Details in the ticket. https://pagure.io/freeipa/issue/7441 Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
This commit is contained in:
parent
735d48d820
commit
cd86fd21c5
@ -25,6 +25,13 @@ from ipatests.test_webui.ui_driver import UI_driver
|
||||
from ipatests.test_webui.ui_driver import screenshot
|
||||
import pytest
|
||||
|
||||
try:
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.common.action_chains import ActionChains
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
ENTITY = 'service'
|
||||
|
||||
|
||||
@ -95,6 +102,8 @@ class sevice_tasks(UI_driver):
|
||||
self.dialog_button_click('add')
|
||||
self.wait(0.3)
|
||||
self.assert_no_error_dialog()
|
||||
|
||||
|
||||
@pytest.mark.tier1
|
||||
class test_service(sevice_tasks):
|
||||
|
||||
@ -353,3 +362,280 @@ class test_service(sevice_tasks):
|
||||
self.validate_fields([('checkbox', name, checked)])
|
||||
self.mod_record(ENTITY, mod)
|
||||
self.validate_fields([('checkbox', name, [])])
|
||||
|
||||
@screenshot
|
||||
def test_add_remove_services(self):
|
||||
"""
|
||||
Test add/remove common services on default host
|
||||
"""
|
||||
self.init_app()
|
||||
|
||||
services = ['cifs', 'ftp', 'imap', 'libvirt', 'nfs', 'qpidd', 'smtp']
|
||||
added_services = []
|
||||
|
||||
# add services
|
||||
for service in services:
|
||||
pkey = self.get_service_pkey(service)
|
||||
self.add_service(service)
|
||||
self.wait(0.5)
|
||||
assert self.has_record(pkey)
|
||||
added_services.append(pkey)
|
||||
|
||||
# delete single service
|
||||
svc_tbd = added_services.pop()
|
||||
self.delete_record(svc_tbd)
|
||||
self.assert_notification()
|
||||
assert not self.has_record(svc_tbd)
|
||||
|
||||
# delete multiple services (rest of them)
|
||||
self.delete_record(added_services)
|
||||
self.assert_notification()
|
||||
for service in added_services:
|
||||
assert not self.has_record(service)
|
||||
|
||||
@screenshot
|
||||
def test_add_remove_services_force(self):
|
||||
"""
|
||||
Test add/remove services using force (on different host)
|
||||
"""
|
||||
self.init_app()
|
||||
|
||||
services = ['DNS', 'HTTP', 'ldap']
|
||||
added_services = []
|
||||
|
||||
# add temp host without DNS
|
||||
temp_host = 'host-no-dns.ipa.test'
|
||||
self.add_host('host-no-dns', 'ipa.test', force=True)
|
||||
|
||||
for service in services:
|
||||
pkey = self.get_service_pkey(service, host=temp_host)
|
||||
self.add_service(service, host=temp_host, force=True)
|
||||
assert self.has_record(pkey)
|
||||
added_services.append(pkey)
|
||||
|
||||
# delete single service
|
||||
svc_tbd = added_services.pop()
|
||||
self.delete_record(svc_tbd)
|
||||
self.assert_notification()
|
||||
assert not self.has_record(svc_tbd)
|
||||
|
||||
# delete multiple services (rest of them)
|
||||
self.delete_record(added_services)
|
||||
self.assert_notification()
|
||||
for service in added_services:
|
||||
assert not self.has_record(service)
|
||||
|
||||
# host cleanup
|
||||
self.navigate_to_entity('host')
|
||||
self.delete_record(temp_host)
|
||||
|
||||
@screenshot
|
||||
def test_add_custom_service(self):
|
||||
"""
|
||||
Test add custom service using textbox
|
||||
"""
|
||||
self.init_app()
|
||||
pkey = self.get_service_pkey('test_service')
|
||||
self.add_service('test_service', textbox='service')
|
||||
assert self.has_record(pkey)
|
||||
|
||||
# service cleanup
|
||||
self.delete_record(pkey)
|
||||
self.assert_notification()
|
||||
assert not self.has_record(pkey)
|
||||
|
||||
@screenshot
|
||||
def test_cancel_adding_service(self):
|
||||
"""
|
||||
Test cancel when adding a service
|
||||
"""
|
||||
self.init_app()
|
||||
pkey = self.get_service_pkey('cifs')
|
||||
self.add_service('cifs', cancel=True)
|
||||
assert not self.has_record(pkey)
|
||||
|
||||
@screenshot
|
||||
def test_cancel_delete_service(self):
|
||||
"""
|
||||
Test cancel deleting a service
|
||||
"""
|
||||
self.init_app()
|
||||
pkey = self.get_service_pkey('HTTP')
|
||||
self.navigate_to_entity(ENTITY)
|
||||
self.delete_record(pkey, confirm_btn='cancel')
|
||||
assert self.has_record(pkey)
|
||||
|
||||
@screenshot
|
||||
def test_cancel_add_delete_managedby_host(self):
|
||||
"""
|
||||
Test cancel/add/delete managed by host
|
||||
"""
|
||||
pkey = self.get_service_pkey('HTTP')
|
||||
temp_host = 'host-no-dns.ipa.test'
|
||||
self.init_app()
|
||||
|
||||
# add another host for "managedby" testing
|
||||
self.add_host('host-no-dns', 'ipa.test', force=True)
|
||||
|
||||
self.navigate_to_record(pkey, entity=ENTITY)
|
||||
self.add_associations([temp_host], facet='managedby_host',
|
||||
confirm_btn='cancel')
|
||||
self.add_associations([temp_host], facet='managedby_host',
|
||||
delete=True)
|
||||
|
||||
# host cleanup
|
||||
self.navigate_to_entity('host')
|
||||
self.delete_record(temp_host)
|
||||
|
||||
@screenshot
|
||||
def test_add_service_missing_hostname_field(self):
|
||||
"""
|
||||
Test add service "hostname" field required
|
||||
"""
|
||||
self.init_app()
|
||||
self.navigate_to_entity(ENTITY)
|
||||
self.facet_button_click('add')
|
||||
self.select_combobox('service', 'cifs', combobox_input='service')
|
||||
self.dialog_button_click('add')
|
||||
host_elem = self.find(".widget[name='host']", By.CSS_SELECTOR)
|
||||
self.assert_field_validation_required(parent=host_elem)
|
||||
|
||||
@screenshot
|
||||
def test_add_service_missing_service_field(self):
|
||||
"""
|
||||
Test add service "service field required
|
||||
"""
|
||||
self.init_app()
|
||||
host = self.config.get('ipa_server')
|
||||
self.navigate_to_entity(ENTITY)
|
||||
self.facet_button_click('add')
|
||||
self.select_combobox('host', host)
|
||||
self.dialog_button_click('add')
|
||||
self.wait()
|
||||
service_elem = self.find(".widget[name='service']", By.CSS_SELECTOR)
|
||||
self.assert_field_validation_required(parent=service_elem)
|
||||
|
||||
@screenshot
|
||||
def test_search_services(self):
|
||||
"""
|
||||
Search different services
|
||||
"""
|
||||
# keywords to search (find_record accepts data dict)
|
||||
http_search = {'pkey': self.get_service_pkey('HTTP')}
|
||||
ldap_search = {'pkey': self.get_service_pkey('ldap')}
|
||||
dns_search = {'pkey': self.get_service_pkey('DNS')}
|
||||
self.init_app()
|
||||
self.navigate_to_entity(ENTITY)
|
||||
self.find_record('service', http_search)
|
||||
self.find_record('service', ldap_search)
|
||||
self.find_record('service', dns_search)
|
||||
|
||||
@screenshot
|
||||
def test_dropdown(self):
|
||||
"""
|
||||
Test service combobox dropdowns with UP/DOWN arrows
|
||||
"""
|
||||
self.init_app()
|
||||
self.navigate_to_entity(ENTITY)
|
||||
self.facet_button_click('add')
|
||||
|
||||
actions = ActionChains(self.driver)
|
||||
actions.send_keys(Keys.ARROW_DOWN)
|
||||
# all actions are performed at once with perform()
|
||||
actions.send_keys(Keys.ARROW_DOWN).perform()
|
||||
actions.send_keys(Keys.ENTER)
|
||||
actions.send_keys(Keys.TAB)
|
||||
actions.send_keys(Keys.ARROW_DOWN)
|
||||
actions.send_keys(Keys.ARROW_DOWN)
|
||||
actions.send_keys(Keys.ENTER).perform()
|
||||
|
||||
# evaluate value fields are not empty
|
||||
service_cb = "input[name='service']"
|
||||
service = self.find(service_cb, By.CSS_SELECTOR)
|
||||
assert service.get_attribute('value') != ""
|
||||
host_cb = "[name='host'].combobox-widget"
|
||||
host = self.find(host_cb, By.CSS_SELECTOR)
|
||||
assert host.get_attribute('value') != ""
|
||||
|
||||
@screenshot
|
||||
def test_add_service_using_enter(self):
|
||||
"""
|
||||
Add a service using enter key
|
||||
"""
|
||||
self.init_app()
|
||||
pkey = self.get_service_pkey('smtp')
|
||||
self.add_service('smtp', confirm=False)
|
||||
actions = ActionChains(self.driver)
|
||||
actions.send_keys(Keys.ENTER).perform()
|
||||
self.wait(1)
|
||||
assert self.has_record(pkey)
|
||||
|
||||
# service cleanup
|
||||
self.delete_record(pkey)
|
||||
assert not self.has_record(pkey)
|
||||
|
||||
@screenshot
|
||||
def test_delete_service_using_enter(self):
|
||||
"""
|
||||
Delete a service using enter key
|
||||
"""
|
||||
self.init_app()
|
||||
pkey = self.get_service_pkey('smtp')
|
||||
self.add_service('smtp')
|
||||
assert self.has_record(pkey)
|
||||
self.delete_record(pkey, confirm_btn=None)
|
||||
actions = ActionChains(self.driver)
|
||||
actions.send_keys(Keys.ENTER).perform()
|
||||
self.wait(1)
|
||||
assert not self.has_record(pkey)
|
||||
|
||||
@screenshot
|
||||
def test_provision_unprovision_keytab(self):
|
||||
"""
|
||||
Test provision / unprovision keytab
|
||||
|
||||
Requires to run a ipa-get/rmkeytab on UI host.
|
||||
"""
|
||||
if not self.has_ca():
|
||||
self.skip('CA is not configured')
|
||||
|
||||
csr_path = self.config.get('service_csr_path')
|
||||
if not csr_path:
|
||||
self.skip('CSR file is not configured')
|
||||
|
||||
csr = self.load_file(csr_path)
|
||||
|
||||
self.init_app()
|
||||
pkey = self.get_service_pkey('cifs')
|
||||
|
||||
self.navigate_to_entity(ENTITY)
|
||||
|
||||
# provision service
|
||||
self.add_service('cifs')
|
||||
self.navigate_to_record(pkey, entity=ENTITY)
|
||||
self.action_list_action('request_cert', confirm=False)
|
||||
self.assert_dialog()
|
||||
self.fill_text("textarea[name='csr'", csr)
|
||||
self.dialog_button_click('issue')
|
||||
self.run_keytab_on_host(pkey, 'get')
|
||||
self.wait(1)
|
||||
self.facet_button_click('refresh')
|
||||
|
||||
# assert key present
|
||||
no_key_selector = 'div[name="kerberos-key-valid"] label'
|
||||
provisioned_assert = 'Kerberos Key Present, Service Provisioned'
|
||||
self.assert_text(no_key_selector, provisioned_assert)
|
||||
|
||||
# unprovision service
|
||||
self.action_list_action('unprovision', confirm_btn='unprovision')
|
||||
self.facet_button_click('refresh')
|
||||
self.run_keytab_on_host(pkey, 'rm')
|
||||
|
||||
# assert key not present
|
||||
no_key_selector = 'div[name="kerberos-key-missing"] label'
|
||||
provisioned_assert = 'Kerberos Key Not Present'
|
||||
self.assert_text(no_key_selector, provisioned_assert)
|
||||
|
||||
# service cleanup
|
||||
self.navigate_to_entity(ENTITY)
|
||||
self.delete_record(pkey)
|
||||
|
Loading…
Reference in New Issue
Block a user