diff --git a/README.md b/README.md index b5c4e7a..72e0c5b 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ git clone https://github.com/Hawkular-QE/cf-ui.git cd cf-ui ./setup.sh +source .cf-ui/bin/activate ``` ## Configuration ```shell @@ -13,7 +14,9 @@ Edit the following property values in the conf/properties.properties file so tha MIQ_HOSTNAME= HAWKULAR_HOSTNAME= HAWKULAR_PORT= - + OPENSHIFT_HOSTNAME= + OPENSHIFT_USERNAME= + OPENSHIFT_PASSWORD= ``` ### Using Chrome web driver Chrome driver is by default installed into .cf-ui directory and it is necessary to set PATH to it so Python Interpreter would know where to find the driver. diff --git a/common/db.py b/common/db.py index 9c9c587..a7e4d5a 100644 --- a/common/db.py +++ b/common/db.py @@ -22,6 +22,7 @@ class db(): sql_domains = 'select * from middleware_domains' sql_server_groups = 'select * from middleware_server_groups' sql_messagings = 'select * from middleware_messagings' + sql_containers = "select * from middleware_servers where lives_on_type LIKE '%Container%'" def __init__(self, web_session, miq_ip = None, username = None, password = None, db_port = None): @@ -85,29 +86,15 @@ def get_messagings(self): return self.execute(self.sql_messagings) # Container Provider - def get_container_providers(self): - providers = [] - rows = self.execute(self.sql_providers) - - for row in rows: - if 'ContainerManager' in row.get('type'): - providers.append(row) - return providers - - def is_container_provider_present(self): + def is_container_provider_present(self, name): rows = self.execute(self.sql_providers) - if len(rows) == 0: - self.get_container_module() - for row in rows: - if (self.web_session.OPENSHIFT_HOSTNAME in row.get('name')) \ - or (self.web_session.OPENSHIFT_PROVIDER_NAME in row.get('name')): + if name in row.get('name'): return True return False - def get_container_nodes(self): - return self.execute(self.sql_container_nodes) - + def get_container_servers(self): + return self.execute(self.sql_containers) \ No newline at end of file diff --git a/scripts/automation/docker/deploy-eap.yaml b/scripts/automation/docker/deploy-eap.yaml index 96af4e6..956b8ce 100644 --- a/scripts/automation/docker/deploy-eap.yaml +++ b/scripts/automation/docker/deploy-eap.yaml @@ -3,24 +3,23 @@ remote_user: root vars: - OS_URL: - - OS_USERNAME: - OS_PASSWORD: - OS_PROJECT: - # Set to "yes" to delete project or leave undefined to not delete project - OS_DELETE_PROJECT: - OC: "/usr/bin/oc" - - EAP_APP: EAP_IMAGE: "jboss-eap-7/eap70-openshift" - HAWKULAR_REST_URL: - HAWKULAR_REST_USER: "jdoe" - HAWKULAR_REST_PASSWORD: "password" - tasks: + - block: + - name: Set Facts + set_fact: + OS_URL: "{{os_url}}" + OS_USERNAME: "{{os_username}}" + OS_PASSWORD: "{{os_password}}" + OS_PROJECT: "{{os_project}}" + OS_DELETE_PROJECT: "{{os_delete_proeject}}" + EAP_APP: "{{eap_app}}" + HAWKULAR_REST_URL: "{{hawkular_rest_url}}" + HAWKULAR_REST_USERNAME: "{{hawkular_rest_username}}" + HAWKULAR_REST_PASSWORD: "{{hawkular_rest_password}}" + - block: - name: Check OS_URL shell: "echo {{OS_URL}}" @@ -39,6 +38,12 @@ shell: "echo {{HAWKULAR_REST_URL}}" failed_when: (echo.stdout|length == 0) + - block: + - name: Check 'oc' version is v3.5 + shell: "{{OC}} version" + register: version + failed_when: "('v3.5' not in version.stdout)" + - block: - name: Login to "{{OS_URL}}" shell: "{{OC}} login {{OS_URL}} -u={{OS_USERNAME}} -p={{OS_PASSWORD}} --insecure-skip-tls-verify" @@ -49,14 +54,14 @@ - name: Detete Project "{{OS_PROJECT}}" shell: "{{OC}} delete project {{OS_PROJECT}}" register: delete_project - when: OS_DELETE_PROJECT != 'yes' + when: OS_DELETE_PROJECT == 'yes' failed_when: "('Now using project' not in delete_project.stdout) and ('not found' in delete_project.stdout)" - block: - name: Wait for Project "{{OS_PROJECT}}" to be deleted shell: "{{OC}} get project {{OS_PROJECT}}" register: get_project - when: OS_DELETE_PROJECT != 'yes' + when: OS_DELETE_PROJECT == 'yes' failed_when: (get_project.stderr.find("Error from server") == -1) and (get_project.stdout.find("Terminating") == -1) until: ("Error from server" in get_project.stderr) retries: 100 @@ -72,11 +77,11 @@ - name: Oc Project "{{OS_PROJECT}}" shell: "{{OC}} project {{OS_PROJECT}}" register: oc_project - failed_when: "('Now using project' not in oc_project.stdout) or ('does not exist on' in oc_project.stdout)" + failed_when: "('Already on project' not in oc_project.stdout) and ('Now using project' not in oc_project.stdout)" - block: - name: Deploy App {{EAP_APP}} - shell: '{{OC}} process -f {{EAP_APP}} -v "AB_HAWKULAR_REST_URL={{HAWKULAR_REST_URL}},AB_HAWKULAR_REST_USER={{HAWKULAR_REST_USER}},AB_HAWKULAR_REST_PASSWORD={{HAWKULAR_REST_PASSWORD}},IMAGE={{EAP_IMAGE}}" | {{OC}} create -f -' + shell: '{{OC}} process -f {{EAP_APP}} -p AB_HAWKULAR_REST_URL={{HAWKULAR_REST_URL}} -p AB_HAWKULAR_REST_USER={{HAWKULAR_REST_USERNAME}} -p AB_HAWKULAR_REST_PASSWORD={{HAWKULAR_REST_PASSWORD}} -p IMAGE={{EAP_IMAGE}} | {{OC}} create -f -' - block: - name: Wait for deploy complete diff --git a/scripts/automation/docker/deploy-hawkular.yaml b/scripts/automation/docker/deploy-hawkular.yaml index 81dd0c1..1305c01 100644 --- a/scripts/automation/docker/deploy-hawkular.yaml +++ b/scripts/automation/docker/deploy-hawkular.yaml @@ -1,23 +1,27 @@ ---- -- hosts: [OpenShiftServers] +--- +- + hosts: + - OpenShiftServers remote_user: root vars: - OS_URL: - OS_USERNAME: - OS_PASSWORD: - OS_PROJECT: - OC: "/usr/bin/oc" HAWKULAR_APP: "https://raw.githubusercontent.com/hawkular/hawkular-services/master/openshift/hawkular-services-ephemeral.yaml" - HAWKULAR_IMAGE: 'jboss-mm-7-tech-preview/middleware-manager' + HAWKULAR_IMAGE: "jboss-mm-7-tech-preview/middleware-manager" HAWKULAR_USERNAME: "jdoe" HAWKULAR_PASSWORD: "password" - HAWKULAR_TEST_MODE: "true" HAWKULAR_ROUTE_FILE: "./hawkular-route.txt" tasks: + - block: + - name: Set Facts + set_fact: + OS_URL: "{{os_url}}" + OS_USERNAME: "{{os_username}}" + OS_PASSWORD: "{{os_password}}" + OS_PROJECT: "{{os_project}}" + - block: - name: Check OS_URL shell: "echo {{OS_URL}}" @@ -33,6 +37,12 @@ shell: "echo {{OS_PROJECT}}" failed_when: (echo.stdout|length == 0) + - block: + - name: Check 'oc' version is v3.5 + shell: "{{OC}} version" + register: version + failed_when: "('v3.5' not in version.stdout)" + - block: - name: Login to "{{OS_URL}}" shell: "{{OC}} login {{OS_URL}} -u={{OS_USERNAME}} -p={{OS_PASSWORD}} --insecure-skip-tls-verify" @@ -58,11 +68,11 @@ - name: Create New Project "{{OS_PROJECT}}" shell: "{{OC}} new-project {{OS_PROJECT}}" register: new_project - failed_when: (new_project.stdout.find("Now using project") == -1) + failed_when: (new_project.stdout.find("Now using project") == -1) and (new_project.stdout.find("Already on project") == -1) - block: - name: Deploy App "{{HAWKULAR_APP}}" - shell: '{{OC}} process -f {{HAWKULAR_APP}} -v "HAWKULAR_SERVICES_IMAGE={{HAWKULAR_IMAGE}},HAWKULAR_USER={{HAWKULAR_USERNAME}},HAWKULAR_PASSWORD={{HAWKULAR_PASSWORD}},TEST_MODE={{HAWKULAR_TEST_MODE}}" | {{OC}} create -f -' + shell: '{{OC}} process -f {{HAWKULAR_APP}} -p HAWKULAR_SERVICES_IMAGE={{HAWKULAR_IMAGE}} -p HAWKULAR_USER={{HAWKULAR_USERNAME}} -p HAWKULAR_PASSWORD={{HAWKULAR_PASSWORD}} | {{OC}} create -f -' - block: - name: Wait for deploy complete @@ -84,3 +94,4 @@ - name: Writing Route "{{get_route.stdout}}" to file "{{HAWKULAR_ROUTE_FILE}}" copy: content="{{get_route.stdout}}" dest={{HAWKULAR_ROUTE_FILE}} + diff --git a/scripts/automation/docker/hosts b/scripts/automation/docker/hosts deleted file mode 100644 index d268e13..0000000 --- a/scripts/automation/docker/hosts +++ /dev/null @@ -1,2 +0,0 @@ -[OpenShiftServers] - diff --git a/scripts/automation/docker/inventory-eap b/scripts/automation/docker/inventory-eap new file mode 100644 index 0000000..51b7948 --- /dev/null +++ b/scripts/automation/docker/inventory-eap @@ -0,0 +1,14 @@ +[OpenShiftServers] + + +[OpenShiftServers:vars] +os_url="https://changeme.openshift.ui.com:8443" +os_username="username" +os_password="password" +os_project="openshift-project" +os_delete_proeject='no' +eap_app="openshift-eap-7-hawkular-agent-template.yaml" +hawkular_rest_url="http://hawkular-services.com" +hawkular_rest_username="jdoe" +hawkular_rest_password="password" + diff --git a/scripts/automation/docker/inventory-hawkular b/scripts/automation/docker/inventory-hawkular new file mode 100644 index 0000000..770e171 --- /dev/null +++ b/scripts/automation/docker/inventory-hawkular @@ -0,0 +1,9 @@ +[OpenShiftServers] + + +[OpenShiftServers:vars] +os_url="https://changeme.openshift.ui.com:8443" +os_username="username" +os_password="password" +os_project="openshift-project" + diff --git a/tests/test_openshift_provider.py b/tests/test_openshift_provider.py index 023d655..a4045e0 100644 --- a/tests/test_openshift_provider.py +++ b/tests/test_openshift_provider.py @@ -1,6 +1,10 @@ import pytest from common.session import session from views.mm_openshift_provider import mm_openshift_providers +from views.eap_crosslink import eap_crosslink +from views.topology_crosslink import topology_crosslink +from views.providers import providers +from views.eap_crosslink import eap_crosslink @pytest.fixture (scope='session') @@ -13,3 +17,12 @@ def web_session(request): def test_cfui_add_provider(web_session): provs = mm_openshift_providers(web_session) provs.add_mm_openshift_provider() + +def test_cfui_eap_crosslink(web_session): + provs = eap_crosslink(web_session) + provs.crosslink_eap() + +def test_cfui_topology_crosslink(web_session): + provs= topology_crosslink(web_session) + provs.crosslink_topology() + diff --git a/tests/test_topology.py b/tests/test_topology.py index 09be879..694afc1 100644 --- a/tests/test_topology.py +++ b/tests/test_topology.py @@ -1,7 +1,7 @@ import pytest from common.session import session from views.topology import topology - +from common.db import db @pytest.fixture (scope='session') def web_session(request): @@ -37,3 +37,9 @@ def test_cfui_domains_entities(web_session): def test_cfui_messaging_entities(web_session): assert topology(web_session).validate_middleware_messaging_entities() + +def test_cfui_container_entities(web_session): + if not db(web_session).is_container_provider_present(web_session.OPENSHIFT_PROVIDER_NAME): + pytest.skip("Skip test - No Container Provider found.") + assert topology(web_session).validate_middleware_container_entities() + diff --git a/views/eap_crosslink.py b/views/eap_crosslink.py new file mode 100644 index 0000000..745de17 --- /dev/null +++ b/views/eap_crosslink.py @@ -0,0 +1,35 @@ +from common.ui_utils import ui_utils +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions as EC +from hawkular.hawkular_api import hawkular_api +from common.view import view +from common.db import db +from common.openshift_utils import openshift_utils +import time +from common.timeout import timeout + +class eap_crosslink(): + web_session = None + MIQ_BASE_VERSION = "master" + ui_utils = None + + def __init__(self, web_session): + self.web_session = web_session + self.web_driver = web_session.web_driver + self.hawkular_api = hawkular_api(self.web_session) + + def crosslink_eap(self): + self.web_session.web_driver.get("{}/middleware_server/show_list".format(self.web_session.MIQ_URL)) + ui_utils(self.web_session).sleep(10) + assert ui_utils(self.web_session).waitForTextOnPage("Middleware Servers", 40) + self.web_driver.find_element_by_xpath("//span[contains(.,'Local')]").click() + assert ui_utils(self.web_session).waitForTextOnPage("Local (Summary)", 15) + self.web_driver.find_element_by_xpath("//td[contains(.,'Underlying Container')]").click() + assert ui_utils(self.web_session).waitForTextOnPage("hawkular-services (Summary)", 15) + self.web_driver.find_element_by_xpath("//td[contains(.,'Containers Provider')]").click() + assert ui_utils(self.web_session).waitForTextOnPage("Aggregated Node Utilization", 15) + + return True + + diff --git a/views/mm_openshift_provider.py b/views/mm_openshift_provider.py index 56eb0b7..a834cea 100644 --- a/views/mm_openshift_provider.py +++ b/views/mm_openshift_provider.py @@ -31,13 +31,10 @@ def add_mm_openshift_provider(self, delete_if_provider_present=True, port=None, # Check if any provider already exist. If exist, first delete all the providers and then add a provider. if self.does_provider_exist(): - self.web_session.logger.info("Middleware Provider already exist.") - if delete_if_provider_present: - self.delete_provider(delete_all_providers=True) - else: - return - else: - self.web_session.logger.info("Adding openshift Middleware Provider to ManageIQ instance") + self.web_session.logger.info("Openshift Provider already exist.") + return + + self.web_session.logger.info("Adding openshift Provider to ManageIQ instance") self.web_session.web_driver.get("{}//ems_container/show_list".format(self.web_session.MIQ_URL)) assert ui_utils(self.web_session).waitForTextOnPage("Containers Providers", 15) @@ -83,58 +80,26 @@ def does_provider_exist(self): self.web_session.logger.info("Checking if provider exists") # For performance reasons, check if the provider is present via DB - providers = db(self.web_session).get_providers() - provider = ui_utils(self.web_session).find_row_in_list(providers, 'name', self.web_session.OPENSHIFT_PROVIDER_NAME) - if provider: - return True - else: - return False - - - def verify_refresh_status_success(self): - refresh_value_success = "Success" - - self.refresh_provider() - - # Refresh the page till till the table value for Last Refresh shows the value - Success - - assert self.wait_for_provider_refresh_status(refresh_value_success, 600) - provider_details = ui_utils(self.web_session).get_generic_table_as_dict() - - # Verify if the 'Last Refresh' value from table contains 'Success: - refresh_status = provider_details.get("Last Refresh") - if str(refresh_status).__contains__(refresh_value_success): - self.web_session.logger.info("The Last refresh status is - " + refresh_status) + if db(self.web_session).is_container_provider_present(self.provider_name): + self.web_session.logger.info("Container Provider already exist.") return True else: + self.web_session.logger.info("Adding Container Provider to ManageIQ instance") return False + def delete_provider(self, delete_all_providers=True): - def refresh_provider(self): - self.web_driver.find_element_by_xpath("//button[@title='Configuration']").click() - el = self.web_driver.find_element_by_xpath("//a[@id='ems_container_vmdb_choice__ems_container_refresh']") - assert self.ui_utils.wait_until_element_displayed(el, 5) - el.click() - ui_utils(self.web_session).accept_alert(10) - ui_utils(self.web_session).waitForTextOnPage("Refresh Provider initiated", 15) - - def validate_providers_list(self): - - # Test to validate provider list page in UI and validate matching providers hostname, port number - - self.web_session.logger.info("Begin providers list test.") self.web_session.web_driver.get("{}//ems_container/show_list".format(self.web_session.MIQ_URL)) - providers_ui = self.ui_utils.get_list_table() - assert len(providers_ui) > 0, "Providers list is empty." - - for prov_ui in providers_ui: + assert ui_utils(self.web_session).waitForTextOnPage("Containers Providers", 30) + # self.ui_utils.sleep(15) - if prov_ui.get('Name') == self.web_session.OPENSHIFT_PROVIDER_NAME: - assert (prov_ui.get('Hostname') == self.web_session.OPENSHIFT_HOSTNAME), "Hostname mismatch" - assert (prov_ui.get('Port') == self.web_session.OPENSHIFT_PORT), "Port Number mismatch" + # Delete the provider + if delete_all_providers: + self.clear_all_providers() + else: + self.delete_hawkular_provider() - return True def verify_add_provider_success(self): @@ -178,16 +143,3 @@ def save_provider(self): time.sleep(1) - def add_provider_invalid_port(self): - if self.does_provider_exist(): - self.web_session.logger.info("Container Provider exist - Delete the provider.") - self.delete_provider(delete_all_providers=True) - - try: - self.add_provider(port="1234") - raise Exception('Add Provider Unexpectedly passed.') - except: - # Expected timeout waiting for form Add button to be clickable, since button should not be clickable. - pass - - return True; diff --git a/views/monitoring.py b/views/monitoring.py index c584bec..0ddffae 100644 --- a/views/monitoring.py +++ b/views/monitoring.py @@ -14,7 +14,7 @@ def __init__(self, web_session): def validate_provider_monitoring_timelines(self): self.web_session.web_driver.get("{}/ems_middleware/show_list".format(self.web_session.MIQ_URL)) view(self.web_session).list_View() - + assert self.ui_utils.waitForTextOnPage(self.web_session.HAWKULAR_PROVIDER_NAME, 10) self.ui_utils.click_on_row_containing_text(self.web_session.HAWKULAR_PROVIDER_NAME) assert self.ui_utils.waitForTextOnPage("Summary", 10) @@ -29,7 +29,7 @@ def validate_provider_monitoring_timelines(self): def validate_eap_servers_monitoring_utilization(self): self.web_session.web_driver.get("{}/middleware_server/show_list".format(self.web_session.MIQ_URL)) - + assert self.ui_utils.waitForTextOnPage(self.web_session.HAWKULAR_PROVIDER_NAME, 10) servers(self.web_session).navigate_to_non_container_eap() self.web_driver.find_element_by_xpath("//*[@title='Monitoring']").click() @@ -79,13 +79,14 @@ def validate_messagings_monitoring_utilization_jms_queues(self): def validate_messagings_monitoring_utilization_jms_topics(self): self.web_session.web_driver.get("{}/middleware_messaging/show_list".format(self.web_session.MIQ_URL)) - + assert self.ui_utils.waitForTextOnPage("Messaging Type", 10) self.ui_utils.click_on_row_containing_text('JMS Topic') assert self.ui_utils.waitForTextOnPage("Summary", 10) self.web_driver.find_element_by_xpath("//*[@title='Monitoring']").click() self.ui_utils.waitForElementOnPage(By.ID, 'middleware_messaging_monitoring_choice__middleware_messaging_perf', 5) self.web_driver.find_element_by_id('middleware_messaging_monitoring_choice__middleware_messaging_perf').click() + assert self.ui_utils.waitForTextOnPage('Options', 30) # Validate that graphs are present diff --git a/views/servers.py b/views/servers.py index 357885e..9f3a09c 100644 --- a/views/servers.py +++ b/views/servers.py @@ -18,6 +18,7 @@ class servers(): ui_utils = None hawkular_api = None db = None + MIQ_BASE_VERSION = "master" power_stop = {'action':'Stop Server', 'wait_for':'Stop initiated for selected server', 'start_state':'running', 'end_state':None} power_restart = {'action': 'Restart Server', 'wait_for': 'Restart initiated for selected server', 'start_state': 'running', 'end_state': 'running'} @@ -47,6 +48,7 @@ def __init__(self, web_session): self.web_driver = web_session.web_driver self.ui_utils = ui_utils(self.web_session) self.hawkular_api = hawkular_api(self.web_session) + self.appliance_version = self.web_session.appliance_version try: self.db = db(self.web_session) @@ -212,6 +214,11 @@ def eap_power_restart(self): # assert orig_pid != new_pid, "Orig Pid: {} New Pid: {}".format(orig_pid, new_pid) + # Validate eap server state on Summary Page in MIQ UI + + if self.appliance_version == self.MIQ_BASE_VERSION: + self.verify_eap_status_in_ui(eap_hawk, "Running") + return True def eap_power_stop(self): @@ -237,7 +244,14 @@ def eap_power_stop(self): if ssh_.get_pid('standalone.sh') == None: break + # Validate eap server state on Summary Page in MIQ UI + + if self.appliance_version == self.MIQ_BASE_VERSION: + self.web_session.logger.info("Verify IN UI") + self.verify_eap_status_in_ui(eap_hawk, "Down") + # Start EAP Standalone server, as to leave the EAP server in the starting state + assert self.start_eap_standalone_server(eap_hawk) with timeout(15, error_message="Timeout waiting for EAP Standalone server to Start on host: {}".format(eap_hostname)): @@ -245,6 +259,11 @@ def eap_power_stop(self): if ssh_.get_pid('standalone.sh') != None: break + # Validate eap server state on Summary Page in MIQ UI + + if self.appliance_version == self.MIQ_BASE_VERSION: + self.verify_eap_status_in_ui(eap_hawk, "Running") + return True def eap_power_reload(self): @@ -312,6 +331,10 @@ def eap_power_graceful_shutdown(self): # TO-DO - Validate + # Validate eap server state on Summary Page in MIQ UI + if self.appliance_version == self.MIQ_BASE_VERSION: + self.verify_eap_status_in_ui(eap_hawk, "Down") + return True def eap_power_action(self, power, eap_hawk, alert_button_name = None): @@ -349,11 +372,17 @@ def deploy_application_archive(self, app_to_deploy = APPLICATION_WAR): self.add_server_deployment(self.APPLICATION_WAR) self.navigate_and_refresh_provider() + self.web_session.logger.info("Waiting for the archive to appear") # Validate UI self.web_session.web_driver.get("{}/middleware_deployment/show_list".format(self.web_session.MIQ_URL)) assert self.ui_utils.refresh_until_text_appears(self.APPLICATION_WAR, 300) - self.navigate_and_refresh_provider() + + if not self.appliance_version == self.MIQ_BASE_VERSION: + self.navigate_and_refresh_provider() + else: + self.web_session.logger.info("Waiting for the archive to be enabled") + self.web_session.web_driver.get("{}/middleware_deployment/show_list".format(self.web_session.MIQ_URL)) assert self.ui_utils.refresh_until_text_appears('Enabled', 300) @@ -405,7 +434,11 @@ def restart_application_archive(self, app_to_redeploy=APPLICATION_WAR): # Redeploy self.restart_server_deployment(app_to_redeploy) - self.navigate_and_refresh_provider() + + if not self.appliance_version == self.MIQ_BASE_VERSION: + self.navigate_and_refresh_provider() + else: + self.web_session.logger.info("Waiting for the archive to be enabled") # Validate that application status is enabled: # ( Existing issues: https://github.com/ManageIQ/manageiq/issues/9876, Issue#10138 ) @@ -424,7 +457,11 @@ def disable_application_archive(self, app_to_stop=APPLICATION_WAR): # Stop the application archive self.disable_server_deployment(app_to_stop) - self.navigate_and_refresh_provider() + + if not self.appliance_version == self.MIQ_BASE_VERSION: + self.navigate_and_refresh_provider() + else: + self.web_session.logger.info("Waiting for the archive to be disabled") # Validate that application status is Disabled: # ( Existing issues: https://github.com/ManageIQ/manageiq/issues/10138 ) @@ -443,7 +480,11 @@ def enable_application_archive(self, app_to_start=APPLICATION_WAR): # Start the application archive self.enable_server_deployment(app_to_start) - self.navigate_and_refresh_provider() + + if not self.appliance_version == self.MIQ_BASE_VERSION: + self.navigate_and_refresh_provider() + else: + self.web_session.logger.info("Waiting for the archive to be enabled") # Validate that application status is Enabled: # ( Existing issues: https://github.com/ManageIQ/manageiq/issues/10138 ) @@ -771,11 +812,16 @@ def add_deployment_disable(self, app_to_deploy=APPLICATION_JAR): self.add_server_deployment(self.APPLICATION_JAR, enable_deploy=False) self.navigate_and_refresh_provider() + self.web_session.logger.info("Waiting for the archive to appear") # Validate UI self.web_session.web_driver.get("{}/middleware_deployment/show_list".format(self.web_session.MIQ_URL)) assert self.ui_utils.refresh_until_text_appears(self.APPLICATION_JAR, 300) - self.navigate_and_refresh_provider() + + if not self.appliance_version == self.MIQ_BASE_VERSION: + self.navigate_and_refresh_provider() + else: + self.web_session.logger.info("Waiting for the archive to be disabled") self.web_session.web_driver.get("{}/middleware_deployment/show_list".format(self.web_session.MIQ_URL)) assert self.ui_utils.refresh_until_text_appears('Disabled', 300) @@ -792,7 +838,11 @@ def add_deployment_overwrite(self, app_to_deploy=APPLICATION_JAR): self.navigate_and_refresh_provider() self.web_session.web_driver.get("{}/middleware_deployment/show_list".format(self.web_session.MIQ_URL)) assert self.ui_utils.refresh_until_text_appears(self.APPLICATION_JAR, 300) - self.navigate_and_refresh_provider() + + if not self.appliance_version == self.MIQ_BASE_VERSION: + self.navigate_and_refresh_provider() + else: + self.web_session.logger.info("Waiting for the archive to be enabled") self.web_session.web_driver.get("{}/middleware_deployment/show_list".format(self.web_session.MIQ_URL)) assert self.ui_utils.refresh_until_text_appears('Enabled', 300) @@ -813,7 +863,12 @@ def add_deployment_runtime_name(self, app_to_deploy=APPLICATION_JAR): self.navigate_and_refresh_provider() self.web_session.web_driver.get("{}/middleware_deployment/show_list".format(self.web_session.MIQ_URL)) assert self.ui_utils.refresh_until_text_appears(self.runtime_name, 300) - self.navigate_and_refresh_provider() + + if not self.appliance_version == self.MIQ_BASE_VERSION: + self.navigate_and_refresh_provider() + else: + self.web_session.logger.info("Waiting for the archive to be enabled") + self.web_session.web_driver.get("{}/middleware_deployment/show_list".format(self.web_session.MIQ_URL)) assert self.ui_utils.refresh_until_text_appears('Enabled', 300) self.undeploy_application_archive(self.runtime_name) @@ -866,3 +921,16 @@ def navigate_to_non_container_eap(self): assert self.ui_utils.waitForTextOnPage('Version', 15) return True + + def verify_eap_status_in_ui(self, eap_hawk, expected_status): + + feed = eap_hawk.get('Feed') + + self.web_session.logger.info("Beginning UI verification") + + self.web_session.web_driver.get("{}//middleware_server/show_list".format(self.web_session.MIQ_URL)) + assert self.ui_utils.waitForTextOnPage(feed, 15) + self.ui_utils.click_on_row_containing_text(feed) + assert self.ui_utils.waitForTextOnPage("Properties", 15) + assert self.ui_utils.refresh_until_text_appears(expected_status, 300) + self.web_session.logger.info("EAP is in {} status".format(expected_status)) diff --git a/views/topology.py b/views/topology.py index a6503de..f3338e0 100644 --- a/views/topology.py +++ b/views/topology.py @@ -12,9 +12,9 @@ class topology(): LEGENDS = '//kubernetes-topology-icon' - entities = {'servers':'Middleware Servers','deployments':'Middleware Deployments', - 'datasources':'Middleware Datasources','server_groups':'Middleware Server Groups', - 'domains':'Middleware Domains','messagings':'Middleware Messaging'} + entities = {'servers': 'Servers', 'deployments': 'Deployments', + 'datasources': 'Datasources', 'server_groups': 'Server Groups', + 'domains': 'Domains', 'messagings': 'Messaging', 'containers': 'Containers'} def __init__(self, web_session): self.web_session = web_session @@ -222,6 +222,36 @@ def validate_middleware_messaging_entities(self): return True + def validate_middleware_container_entities(self): + self.web_session.logger.info("Validate that Topology View expected Containers") + self.__navigate_to_topology__() + + self.__display_names__(select=True) + + entity_name = self.entities.get('containers') + assert self.ui_utils.isTextOnPage(entity_name), "{} not found".format(self.entities.get('containers')) + + # Select "Containers Entities" + self.__select_entities_view__(entity_name, 'hawkular-services') + + ## Compair DB and UI until there is a way to determine Container list via Hawkular-API + + containers_db = db(self.web_session).get_container_servers() + containers_el = self.web_driver.find_elements_by_class_name('Container') + + assert len(containers_db) == len(containers_el) + for el in containers_el: + name = el.text.split()[1] + foundIt = False + for container in containers_db: + if name in container.get('feed'): + foundIt = True + break + + assert foundIt, "Container {} not found in DB Container list.".format(name) + + return True + def __get_actual_name__(self, text): # Filter all but the actual Name. Ex: 'Deployment [hawkular-command-gateway-war.war]' return re.match(r"[^[]*\[([^]]*)\]", text).groups()[0] diff --git a/views/topology_crosslink.py b/views/topology_crosslink.py new file mode 100644 index 0000000..b022bc9 --- /dev/null +++ b/views/topology_crosslink.py @@ -0,0 +1,19 @@ +from common.ui_utils import ui_utils +from hawkular.hawkular_api import hawkular_api + + +class topology_crosslink(): + web_session = None + MIQ_BASE_VERSION = "master" + ui_utils = None + + def __init__(self, web_session): + self.web_session = web_session + self.web_driver = web_session.web_driver + self.hawkular_api = hawkular_api(self.web_session) + + def crosslink_topology(self): + self.web_session.web_driver.get("{}/middleware_topology/show".format(self.web_session.MIQ_URL)) + ui_utils(self.web_session).sleep(10) + assert ui_utils(self.web_session).waitForTextOnPage("Servers", 40) + return True