Add feature tests for Backup/Restore and Maintenance. Fixes #3206

This commit is contained in:
Khushboo Vashi 2018-07-09 11:27:25 +01:00 committed by Dave Page
parent 2b20b387e2
commit 81312d17e2
3 changed files with 259 additions and 1 deletions

View File

@ -0,0 +1,149 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
import time
import os
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from regression.feature_utils.base_feature_test import BaseFeatureTest
from regression.python_test_utils import test_utils
class PGUtilitiesBackupFeatureTest(BaseFeatureTest):
""" This class test PG utilities - Backup and Restore test scenarios """
scenarios = [
("Test for PG utilities - Backup and Restore", dict())
]
def before(self):
if self.server['default_binary_paths'] is None:
self.skipTest(
"default_binary_paths is not set for the server {0}".format(
self.server['name']
)
)
connection = test_utils.get_db_connection(
self.server['db'],
self.server['username'],
self.server['db_password'],
self.server['host'],
self.server['port'],
self.server['sslmode']
)
test_utils.drop_database(connection, "pg_utility_test_db")
test_utils.create_database(self.server, "pg_utility_test_db")
self.page.add_server(self.server)
self.wait = WebDriverWait(self.page.driver, 20)
def runTest(self):
self.page.toggle_open_server(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item('pg_utility_test_db')
self.driver.find_element_by_link_text("Tools").click()
self.page.find_by_partial_link_text("Backup...").click()
self.wait.until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, ".browse_file_input")))
self.page.find_by_css_selector(
".ajs-dialog.pg-el-container .ajs-maximize"
).click()
self.wait.until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, ".browse_file_input"))).click()
self.page.fill_input_by_field_name("file", "test_backup")
self.page.find_by_xpath("//button[contains(@class,'fa-save') "
"and contains(.,'Backup')]").click()
self.page.wait_for_element_to_disappear(
lambda driver: driver.find_element_by_css_selector(".ajs-modal")
)
status = self.page.find_by_css_selector(
".pg-bg-bgprocess .bg-success").text
self.assertEquals(status, "Successfully completed.")
self.page.find_by_css_selector(
".pg-bg-bgprocess .pg-bg-click > span").click()
command = self.page.find_by_css_selector("p.bg-detailed-desc").text
self.assertIn(self.server['name'], str(command))
self.assertIn("from database 'pg_utility_test_db'", str(command))
self.assertIn("test_backup", str(command))
self.assertIn("pg_dump", str(command))
backup_file = None
if command:
backup_file = command[int(command.find('--file')) +
8:int(command.find('--host')) - 2]
self.page.find_by_xpath("//div[contains(@class,'wcFloatingFocus')"
"]//div[contains(@class,'fa-close')]").click()
self.driver.find_element_by_link_text("Tools").click()
self.page.find_by_partial_link_text("Restore...").click()
self.wait.until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, ".browse_file_input")))
self.page.find_by_xpath(
"//button[contains(@class,'fa-info') and "
"contains(@label, 'Restore')]"
)
self.wait.until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, ".browse_file_input"))).click()
self.page.fill_input_by_field_name("file", "test_backup")
self.page.find_by_xpath("//button[contains(@class,'fa-upload')"
" and contains(.,'Restore')]").click()
self.page.wait_for_element_to_disappear(
lambda driver: driver.find_element_by_css_selector(".ajs-modal")
)
status = self.page.find_by_css_selector(
".pg-bg-bgprocess .bg-success").text
self.assertEquals(status, "Successfully completed.")
self.page.find_by_css_selector(
".pg-bg-bgprocess .pg-bg-click > span").click()
command = self.page.find_by_css_selector("p.bg-detailed-desc").text
self.assertIn(self.server['name'], str(command))
self.assertIn("test_backup", str(command))
self.assertIn("pg_restore", str(command))
self.page.find_by_xpath("//div[contains(@class,'wcFloatingFocus')]"
"//div[contains(@class,'fa-close')]").click()
if backup_file is not None:
if os.path.isfile(backup_file):
os.remove(backup_file)
def after(self):
self.page.remove_server(self.server)
connection = test_utils.get_db_connection(
self.server['db'],
self.server['username'],
self.server['db_password'],
self.server['host'],
self.server['port'],
self.server['sslmode']
)
test_utils.drop_database(connection, "pg_utility_test_db")

View File

@ -0,0 +1,109 @@
##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from regression.feature_utils.base_feature_test import BaseFeatureTest
from regression.python_test_utils import test_utils
class PGUtilitiesMaintenanceFeatureTest(BaseFeatureTest):
""" This class test PG utilities test scenarios """
scenarios = [
("Test for PG maintenance: database", dict(
database_name='pg_maintenance',
table_name='pg_maintenance_table',
test_level='database'
)),
("Test for PG maintenance: table", dict(
database_name='pg_maintenance',
table_name='pg_maintenance_table',
test_level='table'
)),
]
def before(self):
if self.server['default_binary_paths'] is None:
self.skipTest(
"default_binary_paths is not set for the server {0}".format(
self.server['name']
)
)
connection = test_utils.get_db_connection(
self.server['db'],
self.server['username'],
self.server['db_password'],
self.server['host'],
self.server['port'],
self.server['sslmode']
)
test_utils.drop_database(connection, self.database_name)
test_utils.create_database(self.server, self.database_name)
test_utils.create_table(self.server, self.database_name,
self.table_name)
self.page.add_server(self.server)
self.wait = WebDriverWait(self.page.driver, 20)
def runTest(self):
self._open_maintenance_dialogue()
self.page.find_by_css_selector(
"button.fa-save.btn-primary.pg-alertify-button"). \
click()
self.page.wait_for_element_to_disappear(
lambda driver: driver.find_element_by_css_selector(".ajs-modal")
)
self._verify_command()
def _open_maintenance_dialogue(self):
self.page.toggle_open_server(self.server['name'])
self.page.toggle_open_tree_item('Databases')
self.page.toggle_open_tree_item(self.database_name)
if self.test_level == 'table':
self.page.toggle_open_tree_item('Schemas')
self.page.toggle_open_tree_item('public')
self.page.toggle_open_tree_item('Tables')
self.page.select_tree_item(self.table_name)
self.driver.find_element_by_link_text("Tools").click()
self.page.find_by_partial_link_text("Maintenance...").click()
time.sleep(0.5)
def _verify_command(self):
status = self.page.find_by_css_selector(
".pg-bg-bgprocess .bg-success").text
self.assertEquals(status, "Successfully completed.")
self.page.find_by_css_selector(
".pg-bg-bgprocess .pg-bg-click > span").click()
command = self.page.find_by_css_selector("p.bg-detailed-desc").text
if self.test_level == 'database':
self.assertEquals(command, "VACUUM "
"(VERBOSE)\nRunning Query:"
"\nVACUUM VERBOSE;")
else:
self.assertEquals(command, "VACUUM "
"(VERBOSE)\nRunning Query:"
"\nVACUUM VERBOSE"
" public." + self.table_name + ";")
self.page.find_by_css_selector(
"div.wcFloatingFocus div.fa-close").click()
def after(self):
self.page.remove_server(self.server)
connection = test_utils.get_db_connection(
self.server['db'],
self.server['username'],
self.server['db_password'],
self.server['host'],
self.server['port'],
self.server['sslmode']
)
test_utils.drop_database(connection, self.database_name)

View File

@ -216,7 +216,7 @@ def get_test_modules(arguments):
if 'headless_chrome' in test_setup.config_data:
if test_setup.config_data['headless_chrome']:
options.add_argument("--headless")
options.add_argument("--window-size=1280x1024")
options.add_argument("--window-size=1280,1024")
driver = webdriver.Chrome(chrome_options=options)
app_starter = AppStarter(driver, config)