From c658dd3a9a09435642abc4b1dc9b443af3cb6434 Mon Sep 17 00:00:00 2001 From: Petr Vobornik Date: Thu, 15 Aug 2013 15:49:27 +0200 Subject: Web UI integration tests: CA-less Test cases according to: http://www.freeipa.org/page/V3/CA-less_install https://fedorahosted.org/freeipa/ticket/3830 --- ipatests/test_webui/test_host.py | 23 ++++++++++++++++++++ ipatests/test_webui/test_navigation.py | 6 ++++++ ipatests/test_webui/test_service.py | 37 +++++++++++++++++++++++++++++++++ ipatests/test_webui/ui_driver.py | 38 +++++++++++++++++++++++++++++++--- 4 files changed, 101 insertions(+), 3 deletions(-) diff --git a/ipatests/test_webui/test_host.py b/ipatests/test_webui/test_host.py index 962ffb17..806f2b10 100644 --- a/ipatests/test_webui/test_host.py +++ b/ipatests/test_webui/test_host.py @@ -175,6 +175,29 @@ class test_host(host_tasks): self.navigate_to_entity(ENTITY, 'search') self.delete_record(self.pkey, self.data.get('del')) + def test_ca_less(self): + """ + Test host certificate actions in CA-less install + http://www.freeipa.org/page/V3/CA-less_install + """ + if self.has_ca(): + self.skip('CA is installed') + + self.init_app() + self.add_record(ENTITY, self.data) + self.navigate_to_record(self.pkey) + + panel = 'cert_actions' + self.assert_action_panel_action(panel, 'request_cert', visible=False) + self.assert_action_panel_action(panel, 'revoke_cert', visible=False) + self.assert_action_panel_action(panel, 'restore_cert', visible=False) + + self.assert_action_panel_action(panel, 'view_cert', enabled=False) + self.assert_action_panel_action(panel, 'get_cert', enabled=False) + + self.navigate_by_breadcrumb('Hosts') + self.delete_record(self.pkey, self.data.get('del')) + def test_associations(self): """ Host direct associations diff --git a/ipatests/test_webui/test_navigation.py b/ipatests/test_webui/test_navigation.py index 021495b4..419be19d 100644 --- a/ipatests/test_webui/test_navigation.py +++ b/ipatests/test_webui/test_navigation.py @@ -106,8 +106,12 @@ class test_navigation(UI_driver): self.navigate_by_menu('identity/dns', False) self.navigate_by_menu('identity/dns/dnsconfig', False) self.navigate_by_menu('identity/dns/dnszone', False) + else: + self.assert_menu_item('identity/dns', False) if self.has_ca(): self.navigate_by_menu('identity/cert', False) + else: + self.assert_menu_item('identity/cert', False) self.navigate_by_menu('identity/realmdomains', False) self.navigate_by_menu('policy') self.navigate_by_menu('policy/hbac', False) @@ -138,6 +142,8 @@ class test_navigation(UI_driver): self.navigate_by_menu('ipaserver/trusts', False) self.navigate_by_menu('ipaserver/trusts/trust', False) self.navigate_by_menu('ipaserver/trusts/trustconfig', False) + else: + self.assert_menu_item('ipaserver/trusts', False) self.navigate_by_menu('ipaserver/config', False) def assert_e_url(self, url, e): diff --git a/ipatests/test_webui/test_service.py b/ipatests/test_webui/test_service.py index 81d638f1..fc64c6db 100644 --- a/ipatests/test_webui/test_service.py +++ b/ipatests/test_webui/test_service.py @@ -128,3 +128,40 @@ class test_service(sevice_tasks): # cleanup self.navigate_to_entity(ENTITY, 'search') self.delete_record(pkey, data.get('del')) + + def test_ca_less(self): + """ + Test service certificate actions in CA-less install + http://www.freeipa.org/page/V3/CA-less_install + """ + if self.has_ca(): + self.skip('CA is installed') + + self.init_app() + + data = self.prep_data() + pkey = data.get('pkey') + + self.add_record(ENTITY, data) + self.navigate_to_record(pkey) + + panel = 'cert_actions' + self.assert_action_panel_action(panel, 'request_cert', visible=False) + self.assert_action_panel_action(panel, 'revoke_cert', visible=False) + self.assert_action_panel_action(panel, 'restore_cert', visible=False) + + self.assert_action_panel_action(panel, 'view_cert', enabled=False) + self.assert_action_panel_action(panel, 'get_cert', enabled=False) + + self.navigate_by_breadcrumb('Services') + self.delete_record(pkey, data.get('del')) + + # test HTTP, which should have cert set by default and so 'view' and 'get' + # actions visible and enabled + host = self.config.get('ipa_server') + realm = self.config.get('ipa_realm') + pkey = 'HTTP/%s@%s' % (host, realm) + + self.navigate_to_record(pkey) + self.assert_action_panel_action(panel, 'view_cert') + self.assert_action_panel_action(panel, 'get_cert') diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py index 12d7e232..9f448840 100644 --- a/ipatests/test_webui/ui_driver.py +++ b/ipatests/test_webui/ui_driver.py @@ -567,7 +567,7 @@ class UI_driver(object): def _button_click(self, selector, parent, name=''): btn = self.find(selector, By.CSS_SELECTOR, parent, strict=True) - disabled = 'ui-state-disabled' in btn.get_attribute("class").split(' ') + disabled = 'ui-state-disabled' in btn.get_attribute("class").split() assert btn.is_displayed(), 'Button is not displayed: %s' % name assert not disabled, 'Invalid button state: disabled. Button: %s' % name btn.click() @@ -1425,7 +1425,7 @@ class UI_driver(object): facet = self.get_facet() btn = self.find(s, By.CSS_SELECTOR, facet, strict=True) cls = 'action-button-disabled' - has_cls = cls in btn.get_attribute("class").split(' ') + has_cls = cls in btn.get_attribute("class").split() valid = enabled ^ has_cls assert btn.is_displayed(), 'Button is not displayed' assert valid, 'Button has incorrect enabled state.' @@ -1510,7 +1510,7 @@ class UI_driver(object): """ Assert that element has certain class """ - valid = cls in element.get_attribute('class').split(' ') + valid = cls in element.get_attribute('class').split() if negative: assert not valid, "Element contains unwanted class: %s" % cls else: @@ -1522,3 +1522,35 @@ class UI_driver(object): """ for table in tables: self.assert_table_button_enabled('add', table, enabled) + + def assert_menu_item(self, path, present=True): + """ + Assert that menu link is not rendered or visible + """ + s = ".navigation a[href='#%s']" % path + link = self.find(s, By.CSS_SELECTOR) + is_present = link is not None and link.is_displayed() + assert present == is_present, ('Invalid state of navigation item: %s. ' + 'Presence expected: %s') % (path, str(present)) + + def assert_action_panel_action(self, panel_name, action, visible=True, enabled=True): + """ + Assert that action panel action is visible/hidden, and enabled/disabled + + Enabled is checked only if action is visible. + """ + s = "div[data-name='%s'].action-panel" % panel_name + s += " a[data-name='%s']" % action + link = self.find(s, By.CSS_SELECTOR) + + is_visible = link is not None and link.is_displayed() + is_enabled = False + if is_visible: + is_enabled = 'disabled' not in link.get_attribute("class").split() + + assert is_visible == visible, ('Invalid visibility of action button: %s. ' + 'Expected: %s') % (action, str(visible)) + + if is_visible: + assert is_enabled == enabled, ('Invalid enabled state of action button %s. ' + 'Expected: %s') % (action, str(visible)) -- cgit