Hi,
Please find the attached patch which covers test cases for the backup
module (RM #3206).
1. Unit test cases
2. End to end regression test cases
3. Feature test cases
Thanks,
Khushboo
diff --git a/web/pgadmin/feature_tests/pg_utilities_backup_test.py b/web/pgadmin/feature_tests/pg_utilities_backup_test.py
new file mode 100644
index 0000000..feca43a
--- /dev/null
+++ b/web/pgadmin/feature_tests/pg_utilities_backup_test.py
@@ -0,0 +1,82 @@
+##########################################################################
+#
+# 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 PGUtilitiesBackupFeatureTest(BaseFeatureTest):
+ """ This class test PG utilities - Backup test scenarios """
+
+ scenarios = [
+ ("Test for PG utilities", dict())
+ ]
+
+ def before(self):
+ 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, "acceptance_test_db")
+
+ test_utils.create_database(self.server, "acceptance_test_db")
+ test_utils.create_table(self.server, "acceptance_test_db", "acceptance_test_table")
+ self.page.add_server(self.server)
+
+ self.wait = WebDriverWait(self.page.driver, 10)
+
+ def runTest(self):
+ self.page.toggle_open_server(self.server['name'])
+ self.page.toggle_open_tree_item('Databases')
+ self.page.toggle_open_tree_item('acceptance_test_db')
+ self.driver.find_element_by_link_text("Tools").click()
+
+ self.page.find_by_partial_link_text("Backup...").click()
+
+ time.sleep(0.5)
+
+ self.page.fill_input_by_field_name("file", "test_backup_file")
+ 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_xpath("//div[contains(@class,'bg-success')]").text
+
+ self.assertEquals(status, "Successfully completed.")
+ self.page.find_by_xpath("//span[contains(string(), 'Click here for details.')]").click()
+ command = self.page.find_by_xpath("//p[contains(@class, 'bg-detailed-desc')]").text
+
+ self.assertIn(self.server['name'], str(command))
+ self.assertIn("from database 'acceptance_test_db'", str(command))
+ self.assertIn("test_backup_file", str(command))
+ self.assertIn("pg_dump", str(command))
+
+ self.page.find_by_xpath("//div[contains(@class,'wcFloatingFocus')]//div[contains(@class,'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, "acceptance_test_db")
diff --git a/web/pgadmin/tools/backup/tests/__init__.py b/web/pgadmin/tools/backup/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/web/pgadmin/tools/backup/tests/test_backup_message.py b/web/pgadmin/tools/backup/tests/test_backup_message.py
new file mode 100644
index 0000000..780106e
--- /dev/null
+++ b/web/pgadmin/tools/backup/tests/test_backup_message.py
@@ -0,0 +1,148 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2018, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+import sys
+
+from flask import Response
+import simplejson as json
+
+from pgadmin.tools.backup import BackupMessage, BACKUP
+from pgadmin.utils.route import BaseTestGenerator
+
+if sys.version_info < (3, 3):
+ from mock import patch, MagicMock
+else:
+ from unittest.mock import patch, MagicMock
+
+
+class BackupMessageTest(BaseTestGenerator):
+ """Test the BackupMessage class"""
+ scenarios = [
+ ('When backup server',
+ dict(
+ class_params=dict(
+ type=BACKUP.SERVER,
+ sid=1,
+ name='test_backup_server',
+ port=5444,
+ host='localhost',
+ database='postgres',
+ bfile='test_backup',
+ args=[
+ '--file',
+ "backup_file",
+ '--host',
+ "localhost",
+ '--port',
+ "5444",
+ '--username',
+ "postgres",
+ '--no-password',
+ '--database',
+ "postgres"
+ ],
+ cmd = "/test_path/pg_dump"
+ ),
+ extected_msg="Backing up the server 'test_backup_server (localhost:5444)'...",
+ expetced_details_cmd='/test_path/pg_dump --file "backup_file" --host "localhost"'
+ ' --port "5444" --username "postgres" --no-password --database "postgres"'
+
+ )),
+ ('When backup global',
+ dict(
+ class_params=dict(
+ type=BACKUP.GLOBALS,
+ sid=1,
+ name='test_backup_server',
+ port=5444,
+ host='localhost',
+ database='postgres',
+ bfile='test_backup',
+ args=[
+ '--file',
+ 'backup_file',
+ '--host',
+ 'localhost',
+ '--port',
+ '5444',
+ '--username',
+ 'postgres',
+ '--no-password',
+ '--database',
+ 'postgres'
+ ],
+ cmd="/test_path/pg_dump"
+ ),
+ extected_msg="Backing up the global objects on the server 'test_backup_server (localhost:5444)'...",
+ expetced_details_cmd='/test_path/pg_dump --file "backup_file" --host "localhost"'
+ ' --port "5444" --username "postgres" --no-password --database "postgres"'
+
+ )),
+ ('When backup object',
+ dict(
+ class_params=dict(
+ type=BACKUP.OBJECT,
+ sid=1,
+ name='test_backup_server',
+ port=5444,
+ host='localhost',
+ database='postgres',
+ bfile='test_backup',
+ args=[
+ '--file',
+ 'backup_file',
+ '--host',
+ 'localhost',
+ '--port',
+ '5444',
+ '--username',
+ 'postgres',
+ '--no-password',
+ '--database',
+ 'postgres'
+ ],
+ cmd="/test_path/pg_dump"
+ ),
+ extected_msg="Backing up an object on the server 'test_backup_server (localhost:5444)'"
+ " from database 'postgres'...",
+ expetced_details_cmd='/test_path/pg_dump --file "backup_file" --host "localhost"'
+ ' --port "5444" --username "postgres" --no-password --database "postgres"'
+
+ ))
+ ]
+
+ @patch('pgadmin.tools.backup.Server')
+ @patch('pgadmin.tools.backup.current_user')
+ def runTest(self, current_user_mock, server_mock):
+ current_user_mock = 1
+
+ class TestMockServer():
+ def __init__(self, name, host, port):
+ self.name = name
+ self.host = host
+ self.port = port
+ mock_obj = TestMockServer(self.class_params['name'],
+ self.class_params['host'],
+ self.class_params['port'])
+ mock_result = server_mock.query.filter_by.return_value
+ mock_result.first.return_value = mock_obj
+
+ backup_obj = BackupMessage(
+ self.class_params['type'],
+ self.class_params['sid'],
+ self.class_params['bfile'],
+ *self.class_params['args'],
+ **{'database': self.class_params['database']}
+ )
+
+ # Check the expected message returned
+ assert backup_obj.message == self.extected_msg
+
+ # Check the command
+ obj_details = backup_obj.details(self.class_params['cmd'], self.class_params['args'])
+ self.assertIn(self.expetced_details_cmd, obj_details)
diff --git a/web/pgadmin/tools/backup/tests/test_batch_process.py b/web/pgadmin/tools/backup/tests/test_batch_process.py
new file mode 100644
index 0000000..aab5fd1
--- /dev/null
+++ b/web/pgadmin/tools/backup/tests/test_batch_process.py
@@ -0,0 +1,216 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2018, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+import sys
+
+from flask import Response
+import simplejson as json
+
+from pgadmin.misc.bgprocess.processes import BatchProcess, IProcessDesc
+from pgadmin.tools.backup import BackupMessage, BACKUP
+from pgadmin.utils.route import BaseTestGenerator
+from pickle import dumps, loads
+
+if sys.version_info < (3, 3):
+ from mock import patch, MagicMock
+else:
+ from unittest.mock import patch, MagicMock
+
+
+class BatchProcessTest(BaseTestGenerator):
+ """Test the BatchProcess class"""
+ scenarios = [
+ ('When backup server',
+ dict(
+ class_params=dict(
+ type=BACKUP.SERVER,
+ sid=1,
+ name='test_backup_server',
+ port=5444,
+ host='localhost',
+ database='postgres',
+ username='postgres',
+ bfile='test_backup',
+ args=[
+ '--file',
+ "backup_file",
+ '--host',
+ "localhost",
+ '--port',
+ "5444",
+ '--username',
+ "postgres",
+ '--no-password',
+ '--database',
+ "postgres"
+ ],
+ cmd='backup_server'
+ )
+ )),
+ ('When backup globals',
+ dict(
+ class_params=dict(
+ type=BACKUP.GLOBALS,
+ sid=1,
+ name='test_backup_server',
+ port=5444,
+ host='localhost',
+ database='postgres',
+ username='postgres',
+ bfile='test_backup',
+ args=[
+ '--file',
+ "backup_file",
+ '--host',
+ "localhost",
+ '--port',
+ "5444",
+ '--username',
+ "postgres",
+ '--no-password',
+ '--database',
+ "postgres"
+ ],
+ cmd='backup'
+ )
+ )),
+ ('When backup object',
+ dict(
+ class_params=dict(
+ type=BACKUP.OBJECT,
+ sid=1,
+ name='test_backup_server',
+ port=5444,
+ host='localhost',
+ database='postgres',
+ username='postgres',
+ bfile='test_backup',
+ args=[
+ '--file',
+ "backup_file",
+ '--host',
+ "localhost",
+ '--port',
+ "5444",
+ '--username',
+ "postgres",
+ '--no-password',
+ '--database',
+ "postgres"
+ ],
+ cmd='backup'
+ )
+ ))
+ ]
+
+ @patch('pgadmin.misc.bgprocess.processes.Popen')
+ @patch('pgadmin.misc.bgprocess.processes.current_app')
+ @patch('pgadmin.misc.bgprocess.processes.db')
+ @patch('pgadmin.tools.backup.Server')
+ @patch('pgadmin.tools.backup.current_user')
+ @patch('pgadmin.misc.bgprocess.processes.current_user')
+ def runTest(self, current_user_mock, current_user, server_mock, db_mock,
+ current_app_mock, popen_mock):
+ current_user.id = 1
+ current_user_mock.id = 1
+ current_app_mock.PGADMIN_RUNTIME = False
+
+ class TestMockServer():
+ def __init__(self, name, host, port):
+ self.name = name
+ self.host = host
+ self.port = port
+
+ def db_session_add_mock(j):
+ cmd_obj = loads(j.desc)
+ assert isinstance(cmd_obj, IProcessDesc)
+ self.assertEquals(cmd_obj.backup_type, self.class_params['type'])
+ self.assertEquals(cmd_obj.bfile, self.class_params['bfile'])
+ self.assertEquals(cmd_obj.database, self.class_params['database'])
+ self.assertEquals(cmd_obj.cmd, ' --file "backup_file" --host "{0}" '
+ '--port "{1}" --username "{2}" '
+ '--no-password --database "{3}"'.format(
+ self.class_params['host'], self.class_params['port'],
+ self.class_params['username'], self.class_params['database']
+ ))
+
+ mock_obj = TestMockServer(self.class_params['name'],
+ self.class_params['host'],
+ self.class_params['port'])
+ mock_result = server_mock.query.filter_by.return_value
+ mock_result.first.return_value = mock_obj
+
+ db_mock.session.add.side_effect = db_session_add_mock
+
+ backup_obj = BackupMessage(
+ self.class_params['type'],
+ self.class_params['sid'],
+ self.class_params['bfile'],
+ *self.class_params['args'],
+ **{'database': self.class_params['database']}
+ )
+
+ p = BatchProcess(
+ desc=backup_obj,
+ cmd=self.class_params['cmd'],
+ args=self.class_params['args']
+ )
+
+ # Check that _create_process has been called
+ assert db_mock.session.add.called
+
+ # Check start method
+ self._check_start(popen_mock, p)
+
+ # Check list method
+ self._check_list(p, backup_obj)
+
+ def _check_start(self, popen_mock, p):
+ cmd_test = self.class_params['cmd']
+
+ class popenMockSideEffect():
+ def __init__(self, cmd, **kwargs):
+ assert cmd_test in cmd
+ assert 'env' in kwargs
+
+ def poll(self):
+ pass
+
+ popen_mock.side_effect = popenMockSideEffect
+ p.start()
+
+ assert popen_mock.called
+
+ @patch('pgadmin.misc.bgprocess.processes.Process')
+ @patch('pgadmin.misc.bgprocess.processes.BatchProcess.update_process_info')
+ def _check_list(self, p, backup_obj, update_process_info_mock, process_mock):
+ class TestMockProcess():
+ def __init__(self, desc, args, cmd):
+ self.pid = 1
+ self.exit_code = 1
+ self.start_time = '2018-04-17 06:18:56.315445 +0000'
+ self.end_time = None
+ self.desc = dumps(desc)
+ self.arguments = " ".join(args)
+ self.command = cmd
+ self.acknowledge = None
+
+ process_mock.query.filter_by.return_value = [TestMockProcess(backup_obj,
+ self.class_params['args'],
+ self.class_params['cmd'])]
+
+ update_process_info_mock.return_value = [True, True]
+
+ ret_value = p.list()
+ self.assertEqual(1, len(ret_value))
+ assert 'details' in ret_value[0]
+ assert 'desc' in ret_value[0]
+
+
+
+
diff --git a/web/pgadmin/tools/backup/tests/test_create_backup_job.py b/web/pgadmin/tools/backup/tests/test_create_backup_job.py
new file mode 100644
index 0000000..6c6e58e
--- /dev/null
+++ b/web/pgadmin/tools/backup/tests/test_create_backup_job.py
@@ -0,0 +1,371 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2018, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+import sys
+import time
+import random
+import config
+
+from flask import Response
+import simplejson as json
+from pickle import dumps, loads
+
+
+from pgadmin.misc.bgprocess.processes import BatchProcess, IProcessDesc
+from pgadmin.tools.backup import BackupMessage, BACKUP
+from pgadmin.utils.route import BaseTestGenerator
+from regression import parent_node_dict
+from regression.python_test_utils import test_utils as utils
+from pgadmin.utils import server_utils as server_utils
+from pgadmin.browser.server_groups.servers.databases.tests import utils as \
+ database_utils
+
+from flask import current_app
+
+if sys.version_info < (3, 3):
+ from mock import patch, MagicMock
+else:
+ from unittest.mock import patch, MagicMock
+
+
+class BackupJobTest(BaseTestGenerator):
+ """Backup api test cases"""
+ scenarios = [
+ ('When backup the object with the default options',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='custom',
+ verbose=True,
+ blobs=True,
+ schemas=[],
+ tables=[],
+ database='postgres'
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--verbose', '--format=c', '--blobs'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+ )),
+ ('When backup the object with option sections to all data',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='custom',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ data=True,
+ pre_data=True,
+ post_data=True
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--verbose', '--format=c',
+ '--section=pre-data', '--section=data',
+ '--section=post-data'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+
+ )),
+ ('When backup the object with option only_data',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='plain',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ only_data=True,
+ only_schema=False
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--verbose', '--format=p', '--data-only'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+ )),
+ ('When backup the object with option only_data',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='plain',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ only_data=True,
+ only_schema=True,
+ dns_owner=True
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--verbose', '--format=p', '--data-only'],
+ not_expected_cmd_opts=['--schema-only', '--no-owner'],
+ expected_exit_code=0
+ )),
+ ('When backup the object with option only_schema',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='plain',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ only_data=False,
+ only_schema=True
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--verbose', '--format=p', '--schema-only'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+ )),
+ ('When backup the object with option - format plain and dns_owner',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='plain',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ dns_owner=True
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--verbose', '--format=p', '--no-owner'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+ )),
+ ('When backup the object with option - Do not save privilege,'
+ ' tablespace, unlogged table data',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='custom',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ dns_privilege=True,
+ dns_unlogged_tbl_data=True,
+ dns_tablespace=True
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--no-privileges',
+ '--no-tablespaces',
+ '--no-unlogged-table-data'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+ )),
+ ('When backup the object with option - all queries',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='plain',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ use_column_inserts=True,
+ include_create_database=True,
+ use_insert_commands=True,
+ include_drop_database=True
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--create', '--clean', '--inserts',
+ '--column-inserts'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+ )),
+ ('When backup the object with option - all queries and format custom',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='custom',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ use_column_inserts=True,
+ include_create_database=True,
+ use_insert_commands=True,
+ include_drop_database=True
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--inserts',
+ '--column-inserts'],
+ not_expected_cmd_opts=['--create', '--clean'],
+ expected_exit_code=0
+ )),
+ ('When backup the object with option - miscellaneous',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='custom',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ disable_quoting=True,
+ use_set_session_auth=True,
+ with_oids=True,
+ dqoute=True
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--verbose', '--quote-all',
+ '--disable-dollar-quoting', '--oids',
+ '--use-set-session-authorization'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+ )),
+ ('When backup the object with format tar',
+ dict(
+ params=dict(
+ file='test_backup_file',
+ format='tar',
+ verbose=True,
+ schemas=[],
+ tables=[],
+ database='postgres',
+ blobs=True,
+ ),
+ url='/backup/job/{0}/object',
+ expected_cmd_opts=['--verbose',
+ '--blobs',
+ '--format=t'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=0
+ )),
+ ('When backup the server',
+ dict(
+ params=dict(
+ file='test_backup_server_file',
+ dqoute=False,
+ verbose=True,
+ type='server'
+ ),
+ url='/backup/job/{0}',
+ expected_cmd_opts=['--verbose'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=None
+ )),
+ ('When backup globals',
+ dict(
+ params=dict(
+ file='test_backup_global_file',
+ dqoute=False,
+ verbose=True,
+ type='globals'
+ ),
+ url='/backup/job/{0}',
+ expected_cmd_opts=['--verbose'],
+ not_expected_cmd_opts=[],
+ expected_exit_code=None
+ ))
+ ]
+
+ def runTest(self):
+ self.db_name = ''
+ self.server_id = parent_node_dict["server"][-1]["server_id"]
+ server_response = server_utils.connect_server(self, self.server_id)
+ if server_response["info"] == "Server connected.":
+ db_owner = server_response['data']['user']['name']
+ self.data = database_utils.get_db_data(db_owner)
+ self.db_name = self.data['name']
+
+ url = self.url.format(self.server_id)
+
+ # Create the backup job
+ response = self.tester.post(url,
+ data=json.dumps(self.params),
+ content_type='html/json')
+ self.assertEquals(response.status_code, 200)
+ response_data = json.loads(response.data.decode('utf-8'))
+ job_id = response_data['data']['job_id']
+
+ cnt = 0
+ while 1:
+ if cnt > 1:
+ break
+ # Check the process list
+ response1 = self.tester.get('/misc/bgprocess/?_='.format(random.randint(1, 9999999)))
+ self.assertEquals(response1.status_code, 200)
+ process_list = json.loads(response1.data.decode('utf-8'))
+
+ if len(process_list) > 0 and 'execution_time' in process_list[0]:
+ break
+ time.sleep(0.5)
+ cnt += 1
+
+ assert 'execution_time' in process_list[0]
+ assert 'stime' in process_list[0]
+ assert 'exit_code' in process_list[0]
+ self.assertEqual(self.expected_exit_code, process_list[0]['exit_code'])
+ if self.expected_cmd_opts:
+ for opt in self.expected_cmd_opts:
+ self.assertIn(opt, process_list[0]['details'])
+ if self.not_expected_cmd_opts:
+ for opt in self.not_expected_cmd_opts:
+ self.assertNotIn(opt, process_list[0]['details'])
+
+
+ # Check the process details
+ p_details = self.tester.get('/misc/bgprocess/{0}?_='.format(
+ job_id, random.randint(1, 9999999))
+ )
+ self.assertEquals(p_details.status_code, 200)
+ p_details_data = json.loads(p_details.data.decode('utf-8'))
+
+ p_details = self.tester.get('/misc/bgprocess/{0}/{1}/{2}/?_='.format(
+ job_id, 0, 0, random.randint(1, 9999999))
+ )
+ self.assertEquals(p_details.status_code, 200)
+ p_details_data = json.loads(p_details.data.decode('utf-8'))
+
+ # Retrieve the backup job process logs
+ while 1:
+ out, err, status = BackupJobTest.get_params(p_details_data)
+ if status:
+ break
+
+ p_details = self.tester.get('/misc/bgprocess/{0}/{1}/{2}/?_={3}'.format(
+ job_id, out, err, random.randint(1, 9999999))
+ )
+ self.assertEquals(p_details.status_code, 200)
+ p_details_data = json.loads(p_details.data.decode('utf-8'))
+
+ time.sleep(1)
+
+ # Check the job is complete.
+ backup_ack = self.tester.put('/misc/bgprocess/{0}'.format(job_id))
+ self.assertEquals(backup_ack.status_code, 200)
+ backup_ack_res = json.loads(backup_ack.data.decode('utf-8'))
+
+ self.assertEquals(backup_ack_res['success'], 1)
+
+ @staticmethod
+ def get_params(data):
+ out = 0
+ out_done = False
+ err = 0
+ err_done = False
+ if 'out' in data:
+ out = data['out'] and data['out']['pos']
+
+ if 'done' in data['out']:
+ out_done = data['out']['done']
+
+ if 'err' in data:
+ err = data['err'] and data['err']['pos']
+
+ if 'done' in data['err']:
+ err_done = data['err']['done']
+
+ return out, err, (out_done and err_done)
+
+
diff --git a/web/regression/runtests.py b/web/regression/runtests.py
index 1de9823..99846c1 100644
--- a/web/regression/runtests.py
+++ b/web/regression/runtests.py
@@ -72,6 +72,13 @@ config.UPGRADE_CHECK_ENABLED = False
pgadmin_credentials = test_setup.config_data
+config.DEFAULT_BINARY_PATHS = {
+ "pg": pgadmin_credentials['DEFAULT_BINARY_PATHS']['pg'],
+ "ppas": pgadmin_credentials['DEFAULT_BINARY_PATHS']['ppas'],
+ "gpdb": ""
+}
+
+
# Set environment variables for email and password
os.environ['PGADMIN_SETUP_EMAIL'] = ''
os.environ['PGADMIN_SETUP_PASSWORD'] = ''
@@ -112,6 +119,9 @@ test_client = app.test_client()
driver = None
app_starter = None
handle_cleanup = None
+app.PGADMIN_RUNTIME = True
+if config.SERVER_MODE is True:
+ app.PGADMIN_RUNTIME = False
setattr(unit_test.result.TestResult, "passed", [])
diff --git a/web/regression/test_config.json.in b/web/regression/test_config.json.in
index 47f8499..41f4dd0 100644
--- a/web/regression/test_config.json.in
+++ b/web/regression/test_config.json.in
@@ -28,5 +28,9 @@
{
"comment": "This is test update comment"
}
- ]
+ ],
+ "DEFAULT_BINARY_PATHS": {
+ "pg": "",
+ "ppas": ""
+ }
}