diff --git a/web/pgadmin/feature_tests/file_manager_test.py b/web/pgadmin/feature_tests/file_manager_test.py index 157e9d4fb..5daee80db 100644 --- a/web/pgadmin/feature_tests/file_manager_test.py +++ b/web/pgadmin/feature_tests/file_manager_test.py @@ -9,6 +9,8 @@ from __future__ import print_function import os +import random +import string import sys import time @@ -38,8 +40,9 @@ class CheckFileManagerFeatureTest(BaseFeatureTest): self.page.add_server(self.server) self.wait = WebDriverWait(self.page.driver, 10) - self.XSS_FILE = '/tmp/.sql' + filename = self.server_information['type'] + \ + str(self.server_information['server_version']) + self.XSS_FILE = '/tmp/.sql' # Remove any previous file if os.path.isfile(self.XSS_FILE): os.remove(self.XSS_FILE) @@ -115,9 +118,11 @@ class CheckFileManagerFeatureTest(BaseFeatureTest): self.page.click_modal('Cancel') self.page.wait_for_query_tool_loading_indicator_to_disappear() + filename = self.server_information['type'] + \ + str(self.server_information['server_version']) self._check_escaped_characters( contents, - '<img src=x ' + self.server['name'][:13] + + '<img src=x ' + filename + '=alert("1")>.sql', 'File manager' ) diff --git a/web/pgadmin/feature_tests/query_tool_journey_test.py b/web/pgadmin/feature_tests/query_tool_journey_test.py index ddb4e3caf..4b6c3679d 100644 --- a/web/pgadmin/feature_tests/query_tool_journey_test.py +++ b/web/pgadmin/feature_tests/query_tool_journey_test.py @@ -17,6 +17,7 @@ from selenium.webdriver.support.ui import WebDriverWait from regression.python_test_utils import test_utils from regression.feature_utils.base_feature_test import BaseFeatureTest from regression.feature_utils.locators import QueryToolLocators +import time class QueryToolJourneyTest(BaseFeatureTest): @@ -329,13 +330,26 @@ class QueryToolJourneyTest(BaseFeatureTest): self.page.uncheck_execute_option("auto_commit") self._update_numeric_cell(2, 10) + time.sleep(0.5) self._commit_transaction() # Turn on autocommit - query_options = self.page.find_by_css_selector( - QueryToolLocators.btn_query_dropdown) - query_options.click() + retry = 3 + while retry > 0: + query_options = self.page.find_by_css_selector( + QueryToolLocators.btn_query_dropdown) + query_options.click() + expanded = query_options.get_attribute("aria-expanded") + if expanded == "false": + print("query option not yet expanded clicking commit again", + file=sys.stderr) + self._commit_transaction() + time.sleep(0.5) + query_options.click() + break + else: + retry -= 1 self.page.check_execute_option("auto_commit") def _check_history_queries_and_icons(self, history_queries, history_icons): diff --git a/web/pgadmin/feature_tests/query_tool_tests.py b/web/pgadmin/feature_tests/query_tool_tests.py index e6091aec5..dc9faa592 100644 --- a/web/pgadmin/feature_tests/query_tool_tests.py +++ b/web/pgadmin/feature_tests/query_tool_tests.py @@ -581,6 +581,7 @@ SELECT 1, pg_sleep(300)""" commit_button = self.page.find_by_css_selector("#btn-commit") if not commit_button.get_attribute('disabled'): commit_button.click() + time.sleep(0.5) query_op = self.page.find_by_css_selector( QueryToolLocators.btn_query_dropdown) diff --git a/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py b/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py index a715a8c61..74c0e2108 100644 --- a/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py +++ b/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py @@ -38,11 +38,12 @@ class CheckForXssFeatureTest(BaseFeatureTest): scenarios = [ ("Test XSS check for panels and query tool", dict()) ] - test_table_name = "

X" + str(random.randint(1000, 3000)) # test_table_name = "

X" test_type_name = '""' def before(self): + self.test_table_name = "

X" + str(random.randint(1000, 3000)) + test_utils.create_type( self.server, self.test_db, self.test_type_name, ['"" "char"', @@ -166,7 +167,7 @@ class CheckForXssFeatureTest(BaseFeatureTest): "td[2]").get_attribute('innerHTML') retry = 0 except WebDriverException as e: - print("Exception in dependent tab {0}") + print("Exception in dependent tab {0}".format(retry)) self.page.click_tab("Dependencies") if retry == 1: raise e diff --git a/web/regression/python_test_utils/test_utils.py b/web/regression/python_test_utils/test_utils.py index 78dbfa6af..b3deb4de6 100644 --- a/web/regression/python_test_utils/test_utils.py +++ b/web/regression/python_test_utils/test_utils.py @@ -1241,7 +1241,7 @@ def is_parallel_ui_tests(args): return False -def get_selenium_grid_status_and_browser_list(selenoid_url): +def get_selenium_grid_status_and_browser_list(selenoid_url, arguments): """ This function checks selenoid status for given url :param selrnoid_url: @@ -1253,9 +1253,18 @@ def get_selenium_grid_status_and_browser_list(selenoid_url): try: selenoid_status = get_selenium_grid_status_json(selenoid_url) if selenoid_status: + # Get available browsers from selenoid available_browsers = selenoid_status["browsers"] - list_of_browsers = test_setup.config_data['selenoid_config'][ - 'browsers_list'] + + # Get browser list provided in input by user + if 'default_browser' in arguments and \ + arguments['default_browser'] is not None: + default_browser = arguments['default_browser'].lower() + list_of_browsers = [{"name": default_browser, + "version": None}] + else: + list_of_browsers = test_setup.config_data['selenoid_config'][ + 'browsers_list'] for browser in list_of_browsers: if browser["name"].lower() in available_browsers.keys(): @@ -1467,8 +1476,8 @@ def get_selenium_grid_status_json(selenoid_url): if isinstance(selenoid_status, dict): return selenoid_status except Exception as e: - print("Unable to find Selenoid Status.Kindly check url passed -'{0}'". - format(selenoid_url)) + print("Unable to find Selenoid Status.Kindly check url passed -'{0}'." + "Check parsing errors in test_config.json".format(selenoid_url)) return None diff --git a/web/regression/runtests.py b/web/regression/runtests.py index 9f639249e..763576795 100644 --- a/web/regression/runtests.py +++ b/web/regression/runtests.py @@ -499,13 +499,14 @@ def execute_test(test_module_list_passed, server_passed, driver_passed): if connection: test_utils.drop_database(connection, test_db_name) connection.close() - # Delete test server test_utils.delete_test_server(test_client) except Exception as exc: traceback.print_exc(file=sys.stderr) print(str(exc)) - print("Exception in {0}".format(threading.current_thread().ident)) + print("Exception in {0} {1}".format( + threading.current_thread().ident, + threading.currentThread().getName())) finally: # Delete web-driver instance thread_name = "parallel_tests" + server_passed['name'] @@ -616,7 +617,7 @@ def run_sequential_tests(url_client, servers_details, sequential_tests_lists, print(str(exc)) finally: # Clean driver object created - driver_object.quit() + test_utils.quit_webdriver(driver_object) def print_test_results(): @@ -739,91 +740,94 @@ if __name__ == '__main__': # Check if feature tests included & parallel tests switch passed if test_utils.is_feature_test_included(args) and \ test_utils.is_parallel_ui_tests(args): + try: + # Get selenium config dict + selenoid_config = test_setup.config_data['selenoid_config'] - # Get selenium config dict - selenoid_config = test_setup.config_data['selenoid_config'] + # Set DEFAULT_SERVER value + default_server = selenoid_config['pgAdmin_default_server'] + os.environ["PGADMIN_CONFIG_DEFAULT_SERVER"] = str(default_server) + config.DEFAULT_SERVER = str(default_server) - # Set DEFAULT_SERVER value - default_server = selenoid_config['pgAdmin_default_server'] - os.environ["PGADMIN_CONFIG_DEFAULT_SERVER"] = str(default_server) - config.DEFAULT_SERVER = str(default_server) + # Get hub url + hub_url = selenoid_config['selenoid_url'] - # Get hub url - hub_url = selenoid_config['selenoid_url'] + # Get selenium grid status & list of available browser out passed + selenium_grid_status, list_of_browsers \ + = test_utils.get_selenium_grid_status_and_browser_list(hub_url, + args) - # Get selenium grid status & list of available browser out passed - selenium_grid_status, list_of_browsers \ - = test_utils.get_selenium_grid_status_and_browser_list(hub_url) + # Execute tests if selenium-grid is up + if selenium_grid_status and len(list_of_browsers) > 0: + app_starter_local = None + # run across browsers + for browser_info in list_of_browsers: + try: + # browser info + browser_name, browser_version = \ + test_utils.get_browser_details(browser_info, + hub_url) - # Execute tests if selenium-grid is up - if selenium_grid_status and len(list_of_browsers) > 0: - app_starter_local = None - # run across browsers - for browser_info in list_of_browsers: - try: - # browser info - browser_name, browser_version = \ - test_utils.get_browser_details(browser_info, hub_url) + # test lists can be executed in parallel & sequentially + parallel_tests, sequential_tests = \ + test_utils.get_parallel_sequential_module_list( + test_module_list) - # tests lists can be executed in parallel & sequentially - parallel_tests, sequential_tests = \ - test_utils.get_parallel_sequential_module_list( - test_module_list) + # Print test summary + test_utils.print_test_summary( + test_module_list, parallel_tests, sequential_tests, + browser_name, browser_version) - # Print test summary - test_utils.print_test_summary(test_module_list, - parallel_tests, - sequential_tests, - browser_name, - browser_version) + # Create app form source code + app_starter_local = AppStarter(None, config) + client_url = app_starter_local.start_app() - # Create app form source code - app_starter_local = AppStarter(None, config) - client_url = app_starter_local.start_app() + # Running Parallel tests + if len(parallel_tests) > 0: + parallel_sessions = \ + int(selenoid_config['max_parallel_sessions']) - # Running Parallel tests - if len(parallel_tests) > 0: - parallel_sessions = int(selenoid_config[ - 'max_parallel_sessions']) + run_parallel_tests( + client_url, servers_info, parallel_tests, + browser_name, browser_version, + parallel_sessions) - run_parallel_tests(client_url, servers_info, - parallel_tests, browser_name, - browser_version, parallel_sessions) + # Sequential Tests + if len(sequential_tests) > 0: + run_sequential_tests( + client_url, servers_info, sequential_tests, + browser_name, browser_version) - # Wait till all threads started in parallel are finished - while True: - try: - if threading.activeCount() <= 1: - break - else: - time.sleep(10) - except Exception as e: - traceback.print_exc(file=sys.stderr) - print(str(e)) + # Clean up environment + if app_starter_local: + app_starter_local.stop_app() - # Sequential Tests - if len(sequential_tests) > 0: - run_sequential_tests(client_url, servers_info, - sequential_tests, browser_name, - browser_version) + # Pause before printing result in order + # not to mix output + time.sleep(5) - # Clean up environment - if app_starter_local: - app_starter_local.stop_app() + # Print note for completion of execution in a browser. + print( + "\n============= Test execution with {0} is " + "completed.=============".format(browser_name), + file=sys.stderr) + print_test_results() - except SystemExit: - if app_starter_local: - app_starter_local.stop_app() - if handle_cleanup: - handle_cleanup() - # Pause before printing result in order not to mix output - time.sleep(5) - # Print note for completion of execution in a browser. + except SystemExit: + if app_starter_local: + app_starter_local.stop_app() + if handle_cleanup: + handle_cleanup() + else: print( - "\n============= Test execution with {0} is " - "completed.=============".format(browser_name), - file=sys.stderr) - print_test_results() + "\n============= Either Selenium Grid is NOT up OR" + " browser list is 0 =============", file=sys.stderr) + failure = True + except Exception as exc: + # Print exception stack trace + traceback.print_exc(file=sys.stderr) + print(str(exc)) + failure = True del os.environ["PGADMIN_CONFIG_DEFAULT_SERVER"] else: try: