Hi, PFA patch for package node test cases.
-- *Harshal Dhumal* *Software Engineer* EnterpriseDB India: http://www.enterprisedb.com The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/__init__.py new file mode 100644 index 0000000..133b58a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/__init__.py @@ -0,0 +1,8 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_add.py new file mode 100644 index 0000000..8099e86 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_add.py @@ -0,0 +1,74 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression import test_utils as utils +from pgadmin.utils.route import BaseTestGenerator +from pgadmin.browser.server_groups.servers.tests import utils as server_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from . import utils as package_utils + + +class PackageAddTestCase(BaseTestGenerator): + """ This class will add new package under schema node. """ + + scenarios = [ + # Fetching default URL for package node. + ('Fetch Package Node URL', dict( + url='/browser/package/obj/')) + ] + + @classmethod + def setUpClass(cls): + """ + This function perform the three tasks + 1. Add the test server + 2. Connect to server + 3. Add the databases + 4. Add the schemas + + :return: None + """ + + # Firstly, add the server + server_utils.add_server(cls.tester) + # Connect to server + cls.server_connect_response, cls.server_group, cls.server_ids = \ + server_utils.connect_server(cls.tester) + if len(cls.server_connect_response) == 0: + raise Exception("No Server(s) connected to add the database!!!") + # Add database + database_utils.add_database(cls.tester, cls.server_connect_response, + cls.server_ids) + # Add schemas + schema_utils.add_schemas(cls.tester) + + def runTest(self): + """ This function will add package under schema node. """ + + package_utils.add_package( + self.tester, self.server_connect_response, self.server_ids) + + @classmethod + def tearDownClass(cls): + """ + This function deletes the added package, schemas, database, + server and the 'parent_id.pkl' file which is created in setup() + function. + + :return: None + """ + + package_utils.delete_package(cls.tester) + schema_utils.delete_schema(cls.tester) + database_utils.delete_database(cls.tester) + server_utils.delete_server(cls.tester) + utils.delete_parent_id_file() diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_delete.py new file mode 100644 index 0000000..0d97991 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_delete.py @@ -0,0 +1,77 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression import test_utils as utils +from pgadmin.utils.route import BaseTestGenerator +from pgadmin.browser.server_groups.servers.tests import utils as server_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from . import utils as package_utils + + +class TriggerFuncDeleteTestCase(BaseTestGenerator): + """ This class will delete the package under schema node. """ + + scenarios = [ + # Fetching default URL for package node. + ('Fetch package Node URL', + dict(url='/browser/package/obj/')) + ] + + @classmethod + def setUpClass(cls): + """ + This function perform the three tasks + 1. Add the test server + 2. Connect to server + 3. Add the databases + 4. Add the schemas + 5. Add the packages + + :return: None + """ + + # Firstly, add the server + server_utils.add_server(cls.tester) + # Connect to server + cls.server_connect_response, cls.server_group, cls.server_ids = \ + server_utils.connect_server(cls.tester) + if len(cls.server_connect_response) == 0: + raise Exception("No Server(s) connected to add the database!!!") + # Add database + database_utils.add_database(cls.tester, cls.server_connect_response, + cls.server_ids) + # Add schemas + schema_utils.add_schemas(cls.tester) + + # Add packages + package_utils.add_package( + cls.tester, cls.server_connect_response, cls.server_ids) + + def runTest(self): + """ This function will delete package under database node. """ + + package_utils.delete_package(self.tester) + + @classmethod + def tearDownClass(cls): + """ + This function deletes the added package, schemas, database, + server and the 'parent_id.pkl' file which is created in setup() + function. + + :return: None + """ + + schema_utils.delete_schema(cls.tester) + database_utils.delete_database(cls.tester) + server_utils.delete_server(cls.tester) + utils.delete_parent_id_file() diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_get.py new file mode 100644 index 0000000..fb304b7 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_get.py @@ -0,0 +1,98 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression import test_utils as utils +from pgadmin.utils.route import BaseTestGenerator +from pgadmin.browser.server_groups.servers.tests import utils as server_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from . import utils as package_utils + + +class PackageGetTestCase(BaseTestGenerator): + """This class will fetch added package under schema node.""" + + scenarios = [ + # Fetching default URL for package node. + ('Fetch package Node URL', + dict(url='/browser/package/obj/')) + ] + + @classmethod + def setUpClass(cls): + """ + This function perform the three tasks + 1. Add the test server + 2. Connect to server + 3. Add the databases + 4. Add the schemas + 5. Add the packages + + :return: None + """ + + # Firstly, add the server + server_utils.add_server(cls.tester) + # Connect to server + cls.server_connect_response, cls.server_group, cls.server_ids = \ + server_utils.connect_server(cls.tester) + if len(cls.server_connect_response) == 0: + raise Exception("No Server(s) connected to add the database!!!") + # Add database + database_utils.add_database(cls.tester, cls.server_connect_response, + cls.server_ids) + # Add schemas + schema_utils.add_schemas(cls.tester) + # Add packages + package_utils.add_package( + cls.tester, cls.server_connect_response, cls.server_ids) + + def runTest(self): + """ This function will delete package under database node. """ + + all_id = utils.get_ids() + server_ids = all_id["sid"] + db_ids_dict = all_id["did"][0] + schema_ids_dict = all_id["scid"][0] + package_ids_dict = all_id["pkgid"][0] + for server_id in server_ids: + db_id = db_ids_dict[int(server_id)] + db_con = database_utils.verify_database( + self.tester, utils.SERVER_GROUP, server_id, db_id) + if db_con['data']["connected"]: + schema_id = schema_ids_dict[int(server_id)][0] + schema_response = schema_utils.verify_schemas( + self.tester, server_id, db_id, schema_id) + if schema_response.status_code == 200: + package_list = package_ids_dict[int(server_id)] + for package in package_list: + package_id = package[0] + package_response = \ + package_utils.verify_package( + self.tester, server_id, db_id, schema_id, + package_id) + self.assertTrue(package_response.status_code, 200) + + @classmethod + def tearDownClass(cls): + """ + This function deletes the added package, schemas, database, + server and the 'parent_id.pkl' file which is created in setup() + function. + + :return: None + """ + + package_utils.delete_package(cls.tester) + schema_utils.delete_schema(cls.tester) + database_utils.delete_database(cls.tester) + server_utils.delete_server(cls.tester) + utils.delete_parent_id_file() diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_put.py new file mode 100644 index 0000000..f2f3dd0 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/test_package_put.py @@ -0,0 +1,120 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +import json + +from regression import test_utils as utils +from pgadmin.utils.route import BaseTestGenerator +from regression.test_setup import advanced_config_data +from pgadmin.browser.server_groups.servers.tests import utils as server_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from . import utils as package_utils + + +class PacakgePutTestCase(BaseTestGenerator): + """ This class will update new package under schema node. """ + + scenarios = [ + # Fetching default URL for package node. + ('Fetch package Node URL', + dict(url='/browser/package/obj/')) + ] + + @classmethod + def setUpClass(cls): + """ + This function perform the three tasks + 1. Add the test server + 2. Connect to server + 3. Add the databases + 4. Add the schemas + 5. Add the packages + + :return: None + """ + + # Firstly, add the server + server_utils.add_server(cls.tester) + # Connect to server + cls.server_connect_response, cls.server_group, cls.server_ids = \ + server_utils.connect_server(cls.tester) + if len(cls.server_connect_response) == 0: + raise Exception("No Server(s) connected to add the database!!!") + # Add database + database_utils.add_database(cls.tester, cls.server_connect_response, + cls.server_ids) + # Add schemas + schema_utils.add_schemas(cls.tester) + # Add packages + package_utils.add_package( + cls.tester, cls.server_connect_response, cls.server_ids) + + def runTest(self): + """ This function will update package under database node. """ + + all_id = utils.get_ids() + server_ids = all_id["sid"] + db_ids_dict = all_id["did"][0] + schema_ids_dict = all_id["scid"][0] + package_ids_dict = all_id["pkgid"][0] + for server_id in server_ids: + db_id = db_ids_dict[int(server_id)] + db_con = database_utils.verify_database(self.tester, + utils.SERVER_GROUP, + server_id, db_id) + if db_con['data']["connected"]: + schema_id = schema_ids_dict[int(server_id)] + schema_response = schema_utils.verify_schemas(self.tester, + server_id, + db_id, + schema_id) + if schema_response.status_code == 200: + package_list = package_ids_dict[int(server_id)] + for package in package_list: + package_id = package[0] + package_response = \ + package_utils.verify_package( + self.tester, server_id, db_id, schema_id, + package_id) + if package_response.status_code == 200: + data = { + "description": advanced_config_data[ + 'package_update_data']['comment'], + "id": package_id + } + + put_response = self.tester.put( + self.url + str(utils.SERVER_GROUP) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(package_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) + + @classmethod + def tearDownClass(cls): + """ + This function deletes the added package, schemas, database, + server and the 'parent_id.pkl' file which is created in setup() + function. + + :return: None + """ + + package_utils.delete_package(cls.tester) + schema_utils.delete_schema(cls.tester) + database_utils.delete_database(cls.tester) + server_utils.delete_server(cls.tester) + utils.delete_parent_id_file() diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/utils.py new file mode 100644 index 0000000..c7c9cb2 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/tests/utils.py @@ -0,0 +1,160 @@ +# ########################################################################## +# +# #pgAdmin 4 - PostgreSQL Tools +# +# #Copyright (C) 2013 - 2016, The pgAdmin Development Team +# #This software is released under the PostgreSQL Licence +# +# ########################################################################## + +import json +import os +import pickle +import uuid + +from regression.test_setup import pickle_path, advanced_config_data +from pgadmin.browser.server_groups.servers.databases.tests import \ + utils as database_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from regression import test_utils as utils + +PACKAGE_URL = '/browser/package/obj/' +PACKAGE_DELETE_URL = '/browser/package/delete/' + + +def get_package_data(server_connect_data): + """This function returns the package config data""" + + adv_config_data = None + data = None + db_user = server_connect_data['data']['user']['name'] + + # Get the config data of appropriate db user + for config_test_data in \ + advanced_config_data['package_credentials']: + if db_user == config_test_data['owner']: + adv_config_data = config_test_data + + if adv_config_data is not None: + data = { + "name": adv_config_data['name'], + "description": adv_config_data['description'], + "pkgacl": adv_config_data['pkgacl'], + "pkgbodysrc": adv_config_data['pkgbodysrc'], + "pkgheadsrc": adv_config_data['pkgheadsrc'] + } + return data + + +def write_package_id(package_ids_list, server_id): + """ + This function writes the server and package related data like + server id and package name + + :param package_ids_list: list of package ids + :param server_id: server id + :return: None + """ + + pickle_id_dict = utils.get_pickle_id_dict() + + if os.path.isfile(pickle_path): + existing_server_id = open(pickle_path, 'rb') + tol_server_id = pickle.load(existing_server_id) + pickle_id_dict = tol_server_id + if 'pkgid' in pickle_id_dict: + if pickle_id_dict['pkgid']: + # Add the db_id as value in dict + pickle_id_dict["pkgid"][0].update( + {int(server_id): package_ids_list}) + else: + # Create new dict with server_id and db_id + pickle_id_dict["pkgid"].append( + {int(server_id): package_ids_list}) + db_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, db_output) + db_output.close() + + +def add_package(tester, server_connect_response, server_ids): + """This function add the package to schema""" + + all_id = utils.get_ids() + db_ids_dict = all_id["did"][0] + schema_ids_dict = all_id["scid"][0] + for server_connect_response, server_id in zip(server_connect_response, + server_ids): + db_id = db_ids_dict[int(server_id)] + db_con = database_utils.verify_database(tester, utils.SERVER_GROUP, + server_id, db_id) + if db_con['data']["connected"]: + schema_id = schema_ids_dict[int(server_id)][0] + schema_utils.verify_schemas(tester, server_id, db_id, + schema_id) + data = get_package_data(server_connect_response) + package_ids_list = [] + + data["name"] = "package_{}".format(str(uuid.uuid4())[1:8]) + + response = tester.post( + PACKAGE_URL + str(utils.SERVER_GROUP) + '/' + + str(server_id) + '/' + str(db_id) + '/' + str(schema_id) + + '/', data=json.dumps(data), content_type='html/json') + + assert response.status_code == 200 + response_data = json.loads(response.data.decode('utf-8')) + package_id = response_data['node']['_id'] + package_name = str(response_data['node']['label']) + package_ids_list.append( + (package_id, package_name)) + + write_package_id(package_ids_list, server_id) + + +def verify_package(tester, server_id, db_id, schema_id, + package_id): + """This function verifies the package with GET API""" + + get_response = tester.get( + PACKAGE_URL + str(utils.SERVER_GROUP) + '/' + + str(server_id) + '/' + str(db_id) + '/' + + str(schema_id) + '/' + str(package_id), + content_type='html/json') + assert get_response.status_code == 200 + return get_response + + +def delete_package(tester): + """This function add the package to schema""" + + all_id = utils.get_ids() + server_ids = all_id["sid"] + db_ids_dict = all_id["did"][0] + schema_ids_dict = all_id["scid"][0] + package_ids_dict = all_id["pkgid"][0] + for server_id in server_ids: + db_id = db_ids_dict[int(server_id)] + db_con = database_utils.verify_database(tester, utils.SERVER_GROUP, + server_id, db_id) + if db_con['data']["connected"]: + schema_id = schema_ids_dict[int(server_id)][0] + schema_response = schema_utils.verify_schemas( + tester, server_id, db_id, schema_id) + if schema_response.status_code == 200: + package_list = package_ids_dict[int(server_id)] + for package in package_list: + package_id = package[0] + package_response = verify_package( + tester, server_id, db_id, schema_id, package_id) + if package_response.status_code == 200: + del_response = tester.delete( + PACKAGE_DELETE_URL + str( + utils.SERVER_GROUP) + '/' + + str(server_id) + '/' + str(db_id) + '/' + + str(schema_id) + '/' + str(package_id), + follow_redirects=True) + assert del_response.status_code == 200 + del_response_data = json.loads( + del_response.data.decode('utf-8')) + assert del_response_data['success'] == 1 diff --git a/web/regression/test_advanced_config.json.in b/web/regression/test_advanced_config.json.in index b339c92..a62cdb1 100644 --- a/web/regression/test_advanced_config.json.in +++ b/web/regression/test_advanced_config.json.in @@ -488,7 +488,52 @@ "sequnce_update_data": { "comment": "This is sequence update comment" - } + }, + + "package_credentials": [ + { + "name": "pkg", + "description": "comment", + "owner": "enterprisedb", + "pkgacl": [ + { "grantee": "enterprisedb", + "grantor": "enterprisedb", + "privileges": + [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + } + ], + "pkgheadsrc": "FUNCTION get_dept_name(p_deptno numeric) RETURN character varying;", + "pkgbodysrc":"todays_date timestamp without time zone DEFAULT sysdate;\n base_sal integer DEFAULT 35525;\n FUNCTION get_dept_name(p_deptno numeric) RETURN character varying IS \n v_dname varchar2(14);\n t_dept_max integer := 1;\n begin\n select dname into v_dname from dept where deptno = p_deptno;\n return v_dname;\n exception\n when no_data_found then\n dbms_output.put_line('invalid department number ' || p_deptno);\n return '';\n end;" + } + ], + + "package_update_data": [ + { + "description": "This is package comment", + "owner": "enterprisedb", + "pkgacl": [ + { "grantee": "enterprisedb", + "grantor": "enterprisedb", + "privileges": + [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": true + } + ] + } + ], + "pkgheadsrc": "FUNCTION get_dept_name1(p_deptno numeric) RETURN character varying;", + "pkgbodysrc":"todays_date timestamp without time zone DEFAULT sysdate;\n base_sal integer DEFAULT 35525;\n FUNCTION get_dept_name1(p_deptno numeric) RETURN character varying IS\n v_dname varchar2(14);\n t_dept_max integer := 1;\n begin\n select dname into v_dname from dept where deptno = p_deptno;\n return v_dname;\n exception\n when no_data_found then\n dbms_output.put_line('invalid department number ' || p_deptno);\n return '';\n end;" + } + ] }
-- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers