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 ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers