Improve code coverage and API test cases for Foreign Tables. Fixes #5328
parent
55e50144f3
commit
b54cf2edca
|
@ -13,6 +13,7 @@ New features
|
||||||
Housekeeping
|
Housekeeping
|
||||||
************
|
************
|
||||||
|
|
||||||
|
| `Issue #5328 <https://redmine.postgresql.org/issues/5328>`_ - Improve code coverage and API test cases for Foreign Tables.
|
||||||
| `Issue #5337 <https://redmine.postgresql.org/issues/5337>`_ - Improve code coverage and API test cases for Views and Materialized Views.
|
| `Issue #5337 <https://redmine.postgresql.org/issues/5337>`_ - Improve code coverage and API test cases for Views and Materialized Views.
|
||||||
| `Issue #6033 <https://redmine.postgresql.org/issues/6033>`_ - Update the cryptography python package for Python 3.5 and above.
|
| `Issue #6033 <https://redmine.postgresql.org/issues/6033>`_ - Update the cryptography python package for Python 3.5 and above.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,602 @@
|
||||||
|
{
|
||||||
|
"foreign_table_create": [
|
||||||
|
{
|
||||||
|
"name": "Create Foreign Table: With valid data.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {
|
||||||
|
"acl": [],
|
||||||
|
"basensp": "schema_name",
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"attname": "ename",
|
||||||
|
"datatype": "text",
|
||||||
|
"coloptions": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [],
|
||||||
|
"ftoptions": [],
|
||||||
|
"inherits": [],
|
||||||
|
"ftsrvname": "fsrv_name",
|
||||||
|
"name": "ft_name",
|
||||||
|
"owner": "server user name",
|
||||||
|
"relacl": [],
|
||||||
|
"seclabels": [],
|
||||||
|
"stracl": []
|
||||||
|
},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Create Foreign Table: With insufficient data.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {
|
||||||
|
"acl": [],
|
||||||
|
"basensp": "schema_name",
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"attname": "ename",
|
||||||
|
"datatype": "text",
|
||||||
|
"coloptions": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [],
|
||||||
|
"ftoptions": [],
|
||||||
|
"inherits": [],
|
||||||
|
"name": "ft_name",
|
||||||
|
"owner": "server user name",
|
||||||
|
"relacl": [],
|
||||||
|
"seclabels": [],
|
||||||
|
"stracl": []
|
||||||
|
},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 410,
|
||||||
|
"error_msg": "Could not find the required parameter (ftsrvname).",
|
||||||
|
"test_result_data": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Create Foreign Table: With valid data while server down.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {
|
||||||
|
"acl": [],
|
||||||
|
"basensp": "schema_name",
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"attname": "ename",
|
||||||
|
"datatype": "text",
|
||||||
|
"coloptions": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [],
|
||||||
|
"ftoptions": [],
|
||||||
|
"inherits": [],
|
||||||
|
"ftsrvname": "fsrv_name",
|
||||||
|
"name": "ft_name",
|
||||||
|
"owner": "server user name",
|
||||||
|
"relacl": [],
|
||||||
|
"seclabels": [],
|
||||||
|
"stracl": []
|
||||||
|
},
|
||||||
|
"mocking_required": true,
|
||||||
|
"mock_data": {
|
||||||
|
"function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
|
||||||
|
"return_value": "[(False,'Mocked Internal Server Error')]"
|
||||||
|
},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 500,
|
||||||
|
"error_msg": "Mocked Internal Server Error",
|
||||||
|
"test_result_data": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreign_table_get": [
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table: With existing foreign table having precision data type column.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {
|
||||||
|
"query": "\"CREATE FOREIGN TABLE %s.%s (col1 character varying(10) NULL COLLATE pg_catalog.default) SERVER %s; \" %(schema_name, foreign_table_name, fsrv_name)"
|
||||||
|
},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table list: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table: With Non-existing foreign table.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {
|
||||||
|
"ft_id": 999999
|
||||||
|
},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 410,
|
||||||
|
"error_msg": "could not find the specified foreign table.",
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table: With existing foreign table while server is down.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": true,
|
||||||
|
"mock_data": {
|
||||||
|
"function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
|
||||||
|
"return_value": "(False,'Mocked Internal Server Error')"
|
||||||
|
},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 500,
|
||||||
|
"error_msg": "Mocked Internal Server Error",
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table list: With existing foreign table while server is down.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": true,
|
||||||
|
"mock_data": {
|
||||||
|
"function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
|
||||||
|
"return_value": "(False,'Mocked Internal Server Error')"
|
||||||
|
},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 500,
|
||||||
|
"error_msg": "Mocked Internal Server Error",
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreign_table_delete": [
|
||||||
|
{
|
||||||
|
"name": "Delete Foreign Table: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Delete Multiple Foreign Tables: With existing foreign tables.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Delete Foreign Table: With existing foreign table while server is down.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": true,
|
||||||
|
"mock_data": {
|
||||||
|
"function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
|
||||||
|
"return_value": "(False,'Mocked Internal Server Error')"
|
||||||
|
},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 500,
|
||||||
|
"error_msg": "Mocked Internal Server Error",
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreign_table_put": [
|
||||||
|
{
|
||||||
|
"name": "Update Foreign Table: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {
|
||||||
|
"query": "\"CREATE FOREIGN TABLE %s.%s (col1 character varying(10) OPTIONS (columnoptionkey 'columnOptionVal') NULL ) SERVER %s;\" %(schema_name, foreign_table_name, fsrv_name)"
|
||||||
|
},
|
||||||
|
"test_data": {
|
||||||
|
"description": "This is foreign table update comment",
|
||||||
|
"fsrvacl": {
|
||||||
|
"added": [
|
||||||
|
{
|
||||||
|
"grantee": "PUBLIC",
|
||||||
|
"grantor": "postgres",
|
||||||
|
"privileges": [
|
||||||
|
{
|
||||||
|
"privilege_type": "U",
|
||||||
|
"privilege": true,
|
||||||
|
"with_grant": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"columns": {
|
||||||
|
"added": [
|
||||||
|
{
|
||||||
|
"attname": "col2",
|
||||||
|
"datatype": "character varying[]",
|
||||||
|
"coloptions": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"changed": [
|
||||||
|
{
|
||||||
|
"coloptions": [
|
||||||
|
{
|
||||||
|
"option": "OptionKey",
|
||||||
|
"value": "OptionValue"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"attname": "emp",
|
||||||
|
"datatype": "\"char\"",
|
||||||
|
"typdefault": null,
|
||||||
|
"attnotnull": false,
|
||||||
|
"collname": "pg_catalog.\"default\"",
|
||||||
|
"attnum": 1,
|
||||||
|
"inheritedfrom": null,
|
||||||
|
"inheritedid": null,
|
||||||
|
"attstattarget": -1,
|
||||||
|
"attoptions": null,
|
||||||
|
"attfdwoptions": [
|
||||||
|
"ColOptionKey=ColOptionValue"
|
||||||
|
],
|
||||||
|
"attndims": 0,
|
||||||
|
"atttypmod": -1,
|
||||||
|
"fulltype": "text",
|
||||||
|
"isdup": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Update Foreign Table: With existing foreign table while server is down.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": true,
|
||||||
|
"mock_data": {
|
||||||
|
"function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
|
||||||
|
"return_value": "(False,'Mocked Internal Server Error')"
|
||||||
|
},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 500,
|
||||||
|
"error_msg": "Mocked Internal Server Error",
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreign_table_sql": [
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Sql: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/sql/",
|
||||||
|
"inventory_data": {
|
||||||
|
"query": "\"CREATE FOREIGN TABLE %s.%s (col1 character varying(10) NULL COLLATE pg_catalog.default) SERVER %s; GRANT SELECT ON TABLE %s.%s TO PUBLIC;\" %(schema_name, foreign_table_name, fsrv_name, schema_name, foreign_table_name)"
|
||||||
|
},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Sql: With existing foreign table having inheritted table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/sql/",
|
||||||
|
"inventory_data": {
|
||||||
|
"query": "\"CREATE TABLE %s.toinherittable (col1 character varying(10) NULL); CREATE FOREIGN TABLE %s.%s () INHERITS (%s.toinherittable) SERVER %s; GRANT SELECT ON TABLE %s.%s TO PUBLIC;\" %(schema_name, schema_name, foreign_table_name, schema_name, fsrv_name, schema_name, foreign_table_name)"
|
||||||
|
},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Sql: With existing foreign table while server is down.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"url": "/browser/foreign_table/sql/",
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": true,
|
||||||
|
"mock_data": {
|
||||||
|
"function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
|
||||||
|
"return_value": "(False,'Mocked Internal Server Error')"
|
||||||
|
},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 500,
|
||||||
|
"error_msg": "Mocked Internal Server Error",
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Sql: With Non-existing foreign table.",
|
||||||
|
"is_positive_test": false,
|
||||||
|
"url": "/browser/foreign_table/sql/",
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {
|
||||||
|
"ft_id": 999999
|
||||||
|
},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 410,
|
||||||
|
"error_msg": "could not find the specified foreign table.",
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Insert Sql: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/insert_sql/",
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Update Sql: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/update_sql/",
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Delete Sql: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/delete_sql/",
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Insert Sql: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/select_sql/",
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreign_table_dependencies_dependents": [
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Dependents: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_dependent": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Dependency: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_dependent": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreign_table_get_nodes": [
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Nodes: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table list node: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreign_table_get_msql": [
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table msql: With existing foreign table.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {},
|
||||||
|
"test_data": {
|
||||||
|
"description": "Testing Msql API"
|
||||||
|
},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table msql: Modify existing foreign table by inheriting.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"inventory_data": {
|
||||||
|
"query": "\"CREATE FOREIGN TABLE %s.%s (col1 character varying(10) NULL COLLATE pg_catalog.default) SERVER %s; \" %(schema_name, foreign_table_name, fsrv_name)"
|
||||||
|
},
|
||||||
|
"test_data": {
|
||||||
|
"description": "Testing Msql API",
|
||||||
|
"inherits": [
|
||||||
|
"table_id"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreign_table_get_creation_parameters": [
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Pre Creation parameters: Get collation.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/get_collations/",
|
||||||
|
"inventory_data": {
|
||||||
|
"query": "\"CREATE FOREIGN TABLE %s.%s (col1 character varying(10) NULL COLLATE pg_catalog.default) SERVER %s; GRANT SELECT ON TABLE %s.%s TO PUBLIC;\" %(schema_name, foreign_table_name, fsrv_name, schema_name, foreign_table_name)"
|
||||||
|
},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Pre Creation parameters: Get tables.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/get_tables/",
|
||||||
|
"inventory_data": {
|
||||||
|
"query": "\"CREATE FOREIGN TABLE %s.%s (col1 character varying(10) NULL COLLATE pg_catalog.default) SERVER %s; GRANT SELECT ON TABLE %s.%s TO PUBLIC;\" %(schema_name, foreign_table_name, fsrv_name, schema_name, foreign_table_name)"
|
||||||
|
},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Get Foreign Table Pre Creation parameters: Get types.",
|
||||||
|
"is_positive_test": true,
|
||||||
|
"url": "/browser/foreign_table/get_types/",
|
||||||
|
"inventory_data": {
|
||||||
|
"query": "\"CREATE FOREIGN TABLE %s.%s (col1 character varying(10) NULL COLLATE pg_catalog.default) SERVER %s; GRANT SELECT ON TABLE %s.%s TO PUBLIC;\" %(schema_name, foreign_table_name, fsrv_name, schema_name, foreign_table_name)"
|
||||||
|
},
|
||||||
|
"test_data": {},
|
||||||
|
"mocking_required": false,
|
||||||
|
"mock_data": {},
|
||||||
|
"expected_data": {
|
||||||
|
"status_code": 200,
|
||||||
|
"error_msg": null,
|
||||||
|
"test_result_data": {}
|
||||||
|
},
|
||||||
|
"is_list": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -8,8 +8,8 @@
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
|
||||||
import json
|
|
||||||
import uuid
|
import uuid
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
foreign_servers.tests import utils as fsrv_utils
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
@ -29,22 +29,32 @@ class ForeignTableAddTestCase(BaseTestGenerator):
|
||||||
"""
|
"""
|
||||||
skip_on_database = ['gpdb']
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
scenarios = [
|
# url
|
||||||
# Fetching default URL for foreign server node.
|
url = '/browser/foreign_table/obj/'
|
||||||
('Check foreign table Node', dict(url='/browser/foreign_table/obj/'))
|
|
||||||
]
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios("foreign_table_create",
|
||||||
|
ft_utils.test_cases)
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
""" This function will create foreign data wrapper and
|
""" This function will create foreign data wrapper and
|
||||||
foreign server. """
|
foreign server. """
|
||||||
super(ForeignTableAddTestCase, self).setUp()
|
super(ForeignTableAddTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
self.schema_data = parent_node_dict['schema'][-1]
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
self.server_id = self.schema_data['server_id']
|
self.server_id = self.schema_data['server_id']
|
||||||
self.db_id = self.schema_data['db_id']
|
self.db_id = self.schema_data['db_id']
|
||||||
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
|
|
||||||
|
# Create schema
|
||||||
self.schema_name = self.schema_data['schema_name']
|
self.schema_name = self.schema_data['schema_name']
|
||||||
self.schema_id = self.schema_data['schema_id']
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW & server
|
||||||
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
|
self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
|
||||||
|
@ -53,9 +63,14 @@ class ForeignTableAddTestCase(BaseTestGenerator):
|
||||||
self.fsrv_name, self.fdw_name)
|
self.fsrv_name, self.fdw_name)
|
||||||
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
|
||||||
|
self.data['basensp'] = self.schema_name
|
||||||
|
self.data['ftsrvname'] = self.fsrv_name
|
||||||
|
self.data['name'] = self.ft_name
|
||||||
|
self.data['owner'] = self.server["username"]
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
"""This function will add foreign table under test database."""
|
"""This function will add foreign table under test database."""
|
||||||
|
# Create db connection
|
||||||
db_con = database_utils.connect_database(self,
|
db_con = database_utils.connect_database(self,
|
||||||
utils.SERVER_GROUP,
|
utils.SERVER_GROUP,
|
||||||
self.server_id,
|
self.server_id,
|
||||||
|
@ -69,40 +84,40 @@ class ForeignTableAddTestCase(BaseTestGenerator):
|
||||||
if not fsrv_response:
|
if not fsrv_response:
|
||||||
raise Exception("Could not find Foreign Server.")
|
raise Exception("Could not find Foreign Server.")
|
||||||
|
|
||||||
data = {
|
if self.is_positive_test:
|
||||||
"acl": [],
|
response = ft_utils.api_create(self)
|
||||||
"basensp": self.schema_name,
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"attname": "ename",
|
|
||||||
"datatype": "text",
|
|
||||||
"coloptions": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"constraints": [],
|
|
||||||
"ftoptions": [],
|
|
||||||
"inherits": [],
|
|
||||||
"ftsrvname": self.fsrv_name,
|
|
||||||
"name": self.ft_name,
|
|
||||||
"owner": self.server["username"],
|
|
||||||
"relacl": [],
|
|
||||||
"seclabels": [],
|
|
||||||
"stracl": []
|
|
||||||
}
|
|
||||||
|
|
||||||
response = self.tester.post(
|
# Assert response
|
||||||
self.url + str(utils.SERVER_GROUP) + '/' +
|
utils.assert_status_code(self, response)
|
||||||
str(self.server_id) + '/' + str(self.db_id) + '/' +
|
|
||||||
str(self.schema_id) + '/', data=json.dumps(data),
|
|
||||||
content_type='html/json')
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, 200)
|
# Verify in backend
|
||||||
|
cross_check_res = ft_utils.verify_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.fsrv_name)
|
||||||
|
|
||||||
|
self.assertIsNotNone(cross_check_res, "Could not find the newly"
|
||||||
|
" created foreign table.")
|
||||||
|
else:
|
||||||
|
if self.mocking_required:
|
||||||
|
with patch(self.mock_data["function_name"],
|
||||||
|
side_effect=eval(self.mock_data["return_value"])):
|
||||||
|
response = ft_utils.api_create(self)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
utils.assert_error_message(self, response)
|
||||||
|
else:
|
||||||
|
del self.data['ftsrvname']
|
||||||
|
response = ft_utils.api_create(self)
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
utils.assert_error_message(self, response)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
""" This function disconnect the test database and delete test
|
""" This function disconnect the test database and delete test
|
||||||
foreign table object. """
|
foreign table object. """
|
||||||
ft_utils.delete_foregin_table(self.server, self.db_name,
|
if self.is_positive_test:
|
||||||
self.schema_name, self.ft_name
|
ft_utils.delete_foregin_table(self.server, self.db_name,
|
||||||
)
|
self.schema_name, self.ft_name)
|
||||||
|
|
||||||
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
foreign_servers.tests import utils as fsrv_utils
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
@ -28,22 +29,30 @@ class ForeignTableDeleteTestCase(BaseTestGenerator):
|
||||||
"""
|
"""
|
||||||
skip_on_database = ['gpdb']
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
scenarios = [
|
# url
|
||||||
# Fetching default URL for foreign table node.
|
url = '/browser/foreign_table/obj/'
|
||||||
('Check foreign table Node', dict(url='/browser/foreign_table/obj/'))
|
|
||||||
]
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios("foreign_table_delete",
|
||||||
|
ft_utils.test_cases)
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
""" This function will create foreign data wrapper, foreign server
|
""" This function will create foreign data wrapper, foreign server
|
||||||
and foreign table. """
|
and foreign table. """
|
||||||
super(ForeignTableDeleteTestCase, self).setUp()
|
super(ForeignTableDeleteTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
self.schema_data = parent_node_dict['schema'][-1]
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
self.server_id = self.schema_data['server_id']
|
self.server_id = self.schema_data['server_id']
|
||||||
self.db_id = self.schema_data['db_id']
|
self.db_id = self.schema_data['db_id']
|
||||||
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
self.schema_name = self.schema_data['schema_name']
|
self.schema_name = self.schema_data['schema_name']
|
||||||
self.schema_id = self.schema_data['schema_id']
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW, server & table
|
||||||
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
@ -56,6 +65,16 @@ class ForeignTableDeleteTestCase(BaseTestGenerator):
|
||||||
self.fsrv_name,
|
self.fsrv_name,
|
||||||
self.ft_name)
|
self.ft_name)
|
||||||
|
|
||||||
|
# In case of multiple foreign tables
|
||||||
|
if self.is_list:
|
||||||
|
self.ft_name_2 = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.ft_id_2 = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name_2)
|
||||||
|
self.data['ids'] = [self.ft_id, self.ft_id_2]
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
"""This function will delete foreign table under test database."""
|
"""This function will delete foreign table under test database."""
|
||||||
|
|
||||||
|
@ -78,15 +97,15 @@ class ForeignTableDeleteTestCase(BaseTestGenerator):
|
||||||
if not ft_response:
|
if not ft_response:
|
||||||
raise Exception("Could not find Foreign Table.")
|
raise Exception("Could not find Foreign Table.")
|
||||||
|
|
||||||
delete_response = self.tester.delete(
|
if self.is_positive_test:
|
||||||
self.url + str(utils.SERVER_GROUP) + '/' +
|
|
||||||
str(self.server_id) + '/' +
|
|
||||||
str(self.db_id) + '/' +
|
|
||||||
str(self.schema_id) + '/' +
|
|
||||||
str(self.ft_id),
|
|
||||||
follow_redirects=True)
|
|
||||||
|
|
||||||
self.assertEqual(delete_response.status_code, 200)
|
if self.is_list:
|
||||||
|
response = ft_utils.api_delete(self)
|
||||||
|
else:
|
||||||
|
response = ft_utils.api_delete(self, self.ft_id)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
""" This function disconnect the test database. """
|
""" This function disconnect the test database. """
|
||||||
|
|
|
@ -0,0 +1,104 @@
|
||||||
|
##########################################################################
|
||||||
|
#
|
||||||
|
# pgAdmin 4 - PostgreSQL Tools
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||||
|
# This software is released under the PostgreSQL Licence
|
||||||
|
#
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
|
tests import utils as fdw_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.tests import \
|
||||||
|
utils as database_utils
|
||||||
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
|
from regression import parent_node_dict
|
||||||
|
from regression.python_test_utils import test_utils as utils
|
||||||
|
from . import utils as ft_utils
|
||||||
|
|
||||||
|
|
||||||
|
class ForeignTableDependenciesDependentsTestCase(BaseTestGenerator):
|
||||||
|
"""
|
||||||
|
This class will fetch foreign table under database node.
|
||||||
|
"""
|
||||||
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
|
# url
|
||||||
|
url = '/browser/foreign_table/'
|
||||||
|
|
||||||
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios(
|
||||||
|
"foreign_table_dependencies_dependents", ft_utils.test_cases)
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
""" This function will create foreign data wrapper, foreign server
|
||||||
|
and foreign table. """
|
||||||
|
super(ForeignTableDependenciesDependentsTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
|
self.server_id = self.schema_data['server_id']
|
||||||
|
self.db_id = self.schema_data['db_id']
|
||||||
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
|
|
||||||
|
# Create schema
|
||||||
|
self.schema_name = self.schema_data['schema_name']
|
||||||
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW, server & table
|
||||||
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
|
||||||
|
self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
|
||||||
|
self.fdw_name)
|
||||||
|
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
||||||
|
self.fsrv_name, self.fdw_name)
|
||||||
|
self.ft_id = ft_utils.create_foreign_table(self.server, self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name)
|
||||||
|
|
||||||
|
def runTest(self):
|
||||||
|
"""This function will fetch foreign table under test database."""
|
||||||
|
# Create db connection
|
||||||
|
db_con = database_utils.connect_database(self,
|
||||||
|
utils.SERVER_GROUP,
|
||||||
|
self.server_id,
|
||||||
|
self.db_id)
|
||||||
|
|
||||||
|
if not db_con["info"] == "Database connected.":
|
||||||
|
raise Exception("Could not connect to database.")
|
||||||
|
|
||||||
|
fsrv_response = fsrv_utils.verify_fsrv(self.server, self.db_name,
|
||||||
|
self.fsrv_name)
|
||||||
|
|
||||||
|
if not fsrv_response:
|
||||||
|
raise Exception("Could not find Foreign Server.")
|
||||||
|
|
||||||
|
if self.is_positive_test:
|
||||||
|
if self.is_dependent:
|
||||||
|
self.url = self.url + 'dependent/'
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
else:
|
||||||
|
self.url = self.url + 'dependency/'
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
""" This function disconnect the test database and delete test
|
||||||
|
foreign table object. """
|
||||||
|
ft_utils.delete_foregin_table(self.server, self.db_name,
|
||||||
|
self.schema_name, self.ft_name)
|
||||||
|
|
||||||
|
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
foreign_servers.tests import utils as fsrv_utils
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
@ -28,22 +29,32 @@ class ForeignTableGetTestCase(BaseTestGenerator):
|
||||||
"""
|
"""
|
||||||
skip_on_database = ['gpdb']
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
scenarios = [
|
# url
|
||||||
# Fetching default URL for foreign server node.
|
url = '/browser/foreign_table/obj/'
|
||||||
('Check foreign table Node', dict(url='/browser/foreign_table/obj/'))
|
|
||||||
]
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios("foreign_table_get",
|
||||||
|
ft_utils.test_cases)
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
""" This function will create foreign data wrapper, foreign server
|
""" This function will create foreign data wrapper, foreign server
|
||||||
and foreign table. """
|
and foreign table. """
|
||||||
super(ForeignTableGetTestCase, self).setUp()
|
super(ForeignTableGetTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
self.schema_data = parent_node_dict['schema'][-1]
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
self.server_id = self.schema_data['server_id']
|
self.server_id = self.schema_data['server_id']
|
||||||
self.db_id = self.schema_data['db_id']
|
self.db_id = self.schema_data['db_id']
|
||||||
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
|
|
||||||
|
# Create schema
|
||||||
self.schema_name = self.schema_data['schema_name']
|
self.schema_name = self.schema_data['schema_name']
|
||||||
self.schema_id = self.schema_data['schema_id']
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW, server & table
|
||||||
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
@ -52,14 +63,35 @@ class ForeignTableGetTestCase(BaseTestGenerator):
|
||||||
self.fdw_name)
|
self.fdw_name)
|
||||||
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
||||||
self.fsrv_name, self.fdw_name)
|
self.fsrv_name, self.fdw_name)
|
||||||
self.ft_id = ft_utils.create_foreign_table(self.server, self.db_name,
|
|
||||||
self.schema_name,
|
if bool(self.inventory_data):
|
||||||
self.fsrv_name,
|
query = self.inventory_data['query']
|
||||||
self.ft_name)
|
self.ft_id = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name, query)
|
||||||
|
else:
|
||||||
|
self.ft_id = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name)
|
||||||
|
|
||||||
|
# In case of multiple foreign tables
|
||||||
|
if self.is_list:
|
||||||
|
self.ft_name_2 = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.ft_id_2 = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name_2)
|
||||||
|
|
||||||
|
self.data['ids'] = [self.ft_id, self.ft_id_2]
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
"""This function will fetch foreign table under test database."""
|
"""This function will fetch foreign table under test database."""
|
||||||
|
# Create db connection
|
||||||
db_con = database_utils.connect_database(self,
|
db_con = database_utils.connect_database(self,
|
||||||
utils.SERVER_GROUP,
|
utils.SERVER_GROUP,
|
||||||
self.server_id,
|
self.server_id,
|
||||||
|
@ -74,20 +106,35 @@ class ForeignTableGetTestCase(BaseTestGenerator):
|
||||||
if not fsrv_response:
|
if not fsrv_response:
|
||||||
raise Exception("Could not find Foreign Server.")
|
raise Exception("Could not find Foreign Server.")
|
||||||
|
|
||||||
response = self.tester.get(self.url + str(utils.SERVER_GROUP) + '/' +
|
if self.is_positive_test:
|
||||||
str(self.server_id) + '/' +
|
if self.is_list:
|
||||||
str(self.db_id) + '/' +
|
response = ft_utils.api_get(self, '')
|
||||||
str(self.schema_id) + '/' +
|
else:
|
||||||
str(self.ft_id),
|
response = ft_utils.api_get(self)
|
||||||
content_type='html/json')
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, 200)
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
else:
|
||||||
|
if self.mocking_required:
|
||||||
|
with patch(self.mock_data["function_name"],
|
||||||
|
side_effect=[eval(self.mock_data["return_value"])]):
|
||||||
|
if self.is_list:
|
||||||
|
response = ft_utils.api_get(self, '')
|
||||||
|
else:
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
elif 'ft_id' in self.data:
|
||||||
|
# Non-existing ft_id id
|
||||||
|
self.ft_id = self.data["ft_id"]
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
utils.assert_error_message(self, response)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
""" This function disconnect the test database and delete test
|
""" This function disconnect the test database and delete test
|
||||||
foreign table object. """
|
foreign table object. """
|
||||||
ft_utils.delete_foregin_table(self.server, self.db_name,
|
ft_utils.delete_foregin_table(self.server, self.db_name,
|
||||||
self.schema_name, self.ft_name
|
self.schema_name, self.ft_name)
|
||||||
)
|
|
||||||
|
|
||||||
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
##########################################################################
|
||||||
|
#
|
||||||
|
# pgAdmin 4 - PostgreSQL Tools
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||||
|
# This software is released under the PostgreSQL Licence
|
||||||
|
#
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
|
tests import utils as fdw_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.tests import \
|
||||||
|
utils as database_utils
|
||||||
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
|
from regression import parent_node_dict
|
||||||
|
from regression.python_test_utils import test_utils as utils
|
||||||
|
from . import utils as ft_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.schemas.tables.tests \
|
||||||
|
import utils as table_utils
|
||||||
|
|
||||||
|
|
||||||
|
class ForeignTableGetMsqlTestCase(BaseTestGenerator):
|
||||||
|
"""
|
||||||
|
This class will fetch foreign table msql under database node.
|
||||||
|
"""
|
||||||
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
|
# url
|
||||||
|
url = '/browser/foreign_table/msql/'
|
||||||
|
|
||||||
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios("foreign_table_get_msql",
|
||||||
|
ft_utils.test_cases)
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
""" This function will create foreign data wrapper, foreign server
|
||||||
|
and foreign table. """
|
||||||
|
super(ForeignTableGetMsqlTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
|
self.server_id = self.schema_data['server_id']
|
||||||
|
self.db_id = self.schema_data['db_id']
|
||||||
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
|
|
||||||
|
# Create schema
|
||||||
|
self.schema_name = self.schema_data['schema_name']
|
||||||
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW, server & table
|
||||||
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
|
||||||
|
self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
|
||||||
|
self.fdw_name)
|
||||||
|
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
||||||
|
self.fsrv_name, self.fdw_name)
|
||||||
|
self.ft_id = ft_utils.create_foreign_table(self.server, self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name)
|
||||||
|
|
||||||
|
def runTest(self):
|
||||||
|
"""This function will fetch foreign table msql under test database."""
|
||||||
|
# Create db connection
|
||||||
|
db_con = database_utils.connect_database(self,
|
||||||
|
utils.SERVER_GROUP,
|
||||||
|
self.server_id,
|
||||||
|
self.db_id)
|
||||||
|
|
||||||
|
if not db_con["info"] == "Database connected.":
|
||||||
|
raise Exception("Could not connect to database.")
|
||||||
|
|
||||||
|
fsrv_response = fsrv_utils.verify_fsrv(self.server, self.db_name,
|
||||||
|
self.fsrv_name)
|
||||||
|
|
||||||
|
if not fsrv_response:
|
||||||
|
raise Exception("Could not find Foreign Server.")
|
||||||
|
|
||||||
|
if self.is_positive_test:
|
||||||
|
self.data['oid'] = self.ft_id
|
||||||
|
|
||||||
|
if 'inherits' in self.data:
|
||||||
|
tid = table_utils.create_table(self.server, self.db_name,
|
||||||
|
self.schema_name, 'toinherit',
|
||||||
|
"'CREATE TABLE %s.%s ()' "
|
||||||
|
"%(schema_name, table_name)")
|
||||||
|
self.data['inherits'] = [tid]
|
||||||
|
|
||||||
|
url_encode_data = self.data
|
||||||
|
response = ft_utils.api_get_msql(self, url_encode_data)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
""" This function disconnect the test database and delete test
|
||||||
|
foreign table object. """
|
||||||
|
ft_utils.delete_foregin_table(self.server, self.db_name,
|
||||||
|
self.schema_name, self.ft_name)
|
||||||
|
|
||||||
|
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
|
@ -0,0 +1,130 @@
|
||||||
|
##########################################################################
|
||||||
|
#
|
||||||
|
# pgAdmin 4 - PostgreSQL Tools
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||||
|
# This software is released under the PostgreSQL Licence
|
||||||
|
#
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
|
tests import utils as fdw_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.tests import \
|
||||||
|
utils as database_utils
|
||||||
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
|
from regression import parent_node_dict
|
||||||
|
from regression.python_test_utils import test_utils as utils
|
||||||
|
from . import utils as ft_utils
|
||||||
|
|
||||||
|
|
||||||
|
class ForeignTableGetNodesTestCase(BaseTestGenerator):
|
||||||
|
"""
|
||||||
|
This class will fetch foreign table nodes under database node.
|
||||||
|
"""
|
||||||
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
|
# url
|
||||||
|
url = '/browser/foreign_table/nodes/'
|
||||||
|
|
||||||
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios("foreign_table_get_nodes",
|
||||||
|
ft_utils.test_cases)
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
""" This function will create foreign data wrapper, foreign server
|
||||||
|
and foreign table. """
|
||||||
|
super(ForeignTableGetNodesTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
|
self.server_id = self.schema_data['server_id']
|
||||||
|
self.db_id = self.schema_data['db_id']
|
||||||
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
|
|
||||||
|
# Create schema
|
||||||
|
self.schema_name = self.schema_data['schema_name']
|
||||||
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW, server & table
|
||||||
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
|
||||||
|
self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
|
||||||
|
self.fdw_name)
|
||||||
|
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
||||||
|
self.fsrv_name, self.fdw_name)
|
||||||
|
self.ft_id = ft_utils.create_foreign_table(self.server, self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name)
|
||||||
|
|
||||||
|
# In case of multiple foreign tables
|
||||||
|
if self.is_list:
|
||||||
|
self.ft_name_2 = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.ft_id_2 = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name_2)
|
||||||
|
|
||||||
|
self.data['ids'] = [self.ft_id, self.ft_id_2]
|
||||||
|
|
||||||
|
def runTest(self):
|
||||||
|
"""This function will fetch foreign table nodes under test database."""
|
||||||
|
# Create db connection
|
||||||
|
db_con = database_utils.connect_database(self,
|
||||||
|
utils.SERVER_GROUP,
|
||||||
|
self.server_id,
|
||||||
|
self.db_id)
|
||||||
|
|
||||||
|
if not db_con["info"] == "Database connected.":
|
||||||
|
raise Exception("Could not connect to database.")
|
||||||
|
|
||||||
|
fsrv_response = fsrv_utils.verify_fsrv(self.server, self.db_name,
|
||||||
|
self.fsrv_name)
|
||||||
|
|
||||||
|
if not fsrv_response:
|
||||||
|
raise Exception("Could not find Foreign Server.")
|
||||||
|
|
||||||
|
if self.is_positive_test:
|
||||||
|
if self.is_list:
|
||||||
|
response = ft_utils.api_get(self, '')
|
||||||
|
else:
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
else:
|
||||||
|
if self.mocking_required:
|
||||||
|
with patch(self.mock_data["function_name"],
|
||||||
|
side_effect=[eval(self.mock_data["return_value"])]):
|
||||||
|
if self.is_list:
|
||||||
|
response = ft_utils.api_get(self, '')
|
||||||
|
else:
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
elif 'ft_id' in self.data:
|
||||||
|
# Non-existing ft_id id
|
||||||
|
self.ft_id = self.data["ft_id"]
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
utils.assert_error_message(self, response)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
""" This function disconnect the test database and delete test
|
||||||
|
foreign table object. """
|
||||||
|
ft_utils.delete_foregin_table(self.server, self.db_name,
|
||||||
|
self.schema_name, self.ft_name)
|
||||||
|
|
||||||
|
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
import json
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
foreign_servers.tests import utils as fsrv_utils
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
@ -23,48 +23,52 @@ from regression.python_test_utils import test_utils as utils
|
||||||
from . import utils as ft_utils
|
from . import utils as ft_utils
|
||||||
|
|
||||||
|
|
||||||
class ForeignTableDeleteMultipleTestCase(BaseTestGenerator):
|
class ForeignTableGetTestCase(BaseTestGenerator):
|
||||||
"""
|
"""
|
||||||
This class will delete foreign table under database node.
|
This class will fetch foreign table pre creation parameters under
|
||||||
|
database node.
|
||||||
"""
|
"""
|
||||||
skip_on_database = ['gpdb']
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
scenarios = [
|
# url
|
||||||
# Fetching default URL for foreign table node.
|
url = '/browser/foreign_table/obj/'
|
||||||
('Check foreign table Node', dict(url='/browser/foreign_table/obj/'))
|
|
||||||
]
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios(
|
||||||
|
"foreign_table_get_creation_parameters", ft_utils.test_cases)
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
""" This function will create foreign data wrapper, foreign server
|
""" This function will create foreign data wrapper, foreign server
|
||||||
and foreign table. """
|
and foreign table. """
|
||||||
super(ForeignTableDeleteMultipleTestCase, self).setUp()
|
super(ForeignTableGetTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
self.schema_data = parent_node_dict['schema'][-1]
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
self.server_id = self.schema_data['server_id']
|
self.server_id = self.schema_data['server_id']
|
||||||
self.db_id = self.schema_data['db_id']
|
self.db_id = self.schema_data['db_id']
|
||||||
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
|
|
||||||
|
# Create schema
|
||||||
self.schema_name = self.schema_data['schema_name']
|
self.schema_name = self.schema_data['schema_name']
|
||||||
self.schema_id = self.schema_data['schema_id']
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW, server & table
|
||||||
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
|
||||||
self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
|
self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
|
||||||
self.fdw_name)
|
self.fdw_name)
|
||||||
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
||||||
self.fsrv_name, self.fdw_name)
|
self.fsrv_name, self.fdw_name)
|
||||||
self.ft_ids = [ft_utils.create_foreign_table(
|
|
||||||
self.server, self.db_name,
|
|
||||||
self.schema_name, self.fsrv_name,
|
|
||||||
"ft_%s" % (str(uuid.uuid4())[1:8])),
|
|
||||||
ft_utils.create_foreign_table(
|
|
||||||
self.server, self.db_name,
|
|
||||||
self.schema_name, self.fsrv_name,
|
|
||||||
"ft_%s" % (str(uuid.uuid4())[1:8]))
|
|
||||||
]
|
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
"""This function will delete foreign table under test database."""
|
"""This function will fetch foreign table pre creation
|
||||||
|
under test database."""
|
||||||
|
# Create db connection
|
||||||
db_con = database_utils.connect_database(self,
|
db_con = database_utils.connect_database(self,
|
||||||
utils.SERVER_GROUP,
|
utils.SERVER_GROUP,
|
||||||
self.server_id,
|
self.server_id,
|
||||||
|
@ -79,20 +83,12 @@ class ForeignTableDeleteMultipleTestCase(BaseTestGenerator):
|
||||||
if not fsrv_response:
|
if not fsrv_response:
|
||||||
raise Exception("Could not find Foreign Server.")
|
raise Exception("Could not find Foreign Server.")
|
||||||
|
|
||||||
data = {'ids': self.ft_ids}
|
if self.is_positive_test:
|
||||||
|
response = ft_utils.api_get(self, '')
|
||||||
|
|
||||||
delete_response = self.tester.delete(
|
# Assert response
|
||||||
self.url + str(utils.SERVER_GROUP) + '/' +
|
utils.assert_status_code(self, response)
|
||||||
str(self.server_id) + '/' +
|
|
||||||
str(self.db_id) + '/' +
|
|
||||||
str(self.schema_id) + '/',
|
|
||||||
content_type='html/json',
|
|
||||||
follow_redirects=True,
|
|
||||||
data=json.dumps(data))
|
|
||||||
|
|
||||||
self.assertEqual(delete_response.status_code, 200)
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
""" This function disconnect the test database. """
|
""" This function disconnect the test database """
|
||||||
|
|
||||||
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import uuid
|
import uuid
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
foreign_servers.tests import utils as fsrv_utils
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
@ -29,22 +30,30 @@ class ForeignTablePutTestCase(BaseTestGenerator):
|
||||||
"""
|
"""
|
||||||
skip_on_database = ['gpdb']
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
scenarios = [
|
# url
|
||||||
# Fetching default URL for foreign server node.
|
url = '/browser/foreign_table/obj/'
|
||||||
('Check foreign table Node', dict(url='/browser/foreign_table/obj/'))
|
|
||||||
]
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios("foreign_table_put",
|
||||||
|
ft_utils.test_cases)
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
""" This function will create foreign data wrapper, foreign server
|
""" This function will create foreign data wrapper, foreign server
|
||||||
and foreign table. """
|
and foreign table. """
|
||||||
super(ForeignTablePutTestCase, self).setUp()
|
super(ForeignTablePutTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
self.schema_data = parent_node_dict['schema'][-1]
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
self.server_id = self.schema_data['server_id']
|
self.server_id = self.schema_data['server_id']
|
||||||
self.db_id = self.schema_data['db_id']
|
self.db_id = self.schema_data['db_id']
|
||||||
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
self.schema_name = self.schema_data['schema_name']
|
self.schema_name = self.schema_data['schema_name']
|
||||||
self.schema_id = self.schema_data['schema_id']
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW, server & table
|
||||||
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
@ -53,14 +62,23 @@ class ForeignTablePutTestCase(BaseTestGenerator):
|
||||||
self.fdw_name)
|
self.fdw_name)
|
||||||
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
||||||
self.fsrv_name, self.fdw_name)
|
self.fsrv_name, self.fdw_name)
|
||||||
self.ft_id = ft_utils.create_foreign_table(self.server, self.db_name,
|
|
||||||
self.schema_name,
|
if bool(self.inventory_data):
|
||||||
self.fsrv_name,
|
query = self.inventory_data['query']
|
||||||
self.ft_name)
|
self.ft_id = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name, query)
|
||||||
|
else:
|
||||||
|
self.ft_id = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name)
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
"""This function will update foreign table under test database."""
|
"""This function will update foreign table under test database."""
|
||||||
|
|
||||||
db_con = database_utils.connect_database(self,
|
db_con = database_utils.connect_database(self,
|
||||||
utils.SERVER_GROUP,
|
utils.SERVER_GROUP,
|
||||||
self.server_id,
|
self.server_id,
|
||||||
|
@ -80,28 +98,27 @@ class ForeignTablePutTestCase(BaseTestGenerator):
|
||||||
if not ft_response:
|
if not ft_response:
|
||||||
raise Exception("Could not find Foreign Table.")
|
raise Exception("Could not find Foreign Table.")
|
||||||
|
|
||||||
data = \
|
self.data['id'] = self.ft_id
|
||||||
{
|
|
||||||
"description": "This is foreign table update comment",
|
|
||||||
"id": self.ft_id,
|
|
||||||
}
|
|
||||||
|
|
||||||
put_response = self.tester.put(
|
if self.is_positive_test:
|
||||||
self.url + str(utils.SERVER_GROUP) + '/' +
|
response = ft_utils.api_put(self)
|
||||||
str(self.server_id) + '/' +
|
|
||||||
str(self.db_id) + '/' +
|
|
||||||
str(self.schema_id) + '/' +
|
|
||||||
str(self.ft_id),
|
|
||||||
data=json.dumps(data),
|
|
||||||
follow_redirects=True)
|
|
||||||
|
|
||||||
self.assertEqual(put_response.status_code, 200)
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
else:
|
||||||
|
if self.mocking_required:
|
||||||
|
with patch(self.mock_data["function_name"],
|
||||||
|
side_effect=[eval(self.mock_data["return_value"])]):
|
||||||
|
response = ft_utils.api_put(self)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
utils.assert_error_message(self, response)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
""" This function disconnect the test database and delete test
|
""" This function disconnect the test database and delete test
|
||||||
foreign table object. """
|
foreign table object. """
|
||||||
ft_utils.delete_foregin_table(self.server, self.db_name,
|
ft_utils.delete_foregin_table(self.server, self.db_name,
|
||||||
self.schema_name, self.ft_name
|
self.schema_name, self.ft_name)
|
||||||
)
|
|
||||||
|
|
||||||
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
||||||
|
|
|
@ -0,0 +1,123 @@
|
||||||
|
##########################################################################
|
||||||
|
#
|
||||||
|
# pgAdmin 4 - PostgreSQL Tools
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||||
|
# This software is released under the PostgreSQL Licence
|
||||||
|
#
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
|
foreign_servers.tests import utils as fsrv_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.foreign_data_wrappers. \
|
||||||
|
tests import utils as fdw_utils
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.tests import \
|
||||||
|
utils as database_utils
|
||||||
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
|
from regression import parent_node_dict
|
||||||
|
from regression.python_test_utils import test_utils as utils
|
||||||
|
from . import utils as ft_utils
|
||||||
|
|
||||||
|
|
||||||
|
class ForeignTableSqlTestCase(BaseTestGenerator):
|
||||||
|
"""
|
||||||
|
This class will fetch foreign table under database node.
|
||||||
|
"""
|
||||||
|
skip_on_database = ['gpdb']
|
||||||
|
|
||||||
|
# Generates scenarios
|
||||||
|
scenarios = utils.generate_scenarios("foreign_table_sql",
|
||||||
|
ft_utils.test_cases)
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
""" This function will create foreign data wrapper, foreign server
|
||||||
|
and foreign table. """
|
||||||
|
super(ForeignTableSqlTestCase, self).setUp()
|
||||||
|
|
||||||
|
# Load test data
|
||||||
|
self.data = self.test_data
|
||||||
|
|
||||||
|
# Get parent schema info
|
||||||
|
self.schema_data = parent_node_dict['schema'][-1]
|
||||||
|
self.server_id = self.schema_data['server_id']
|
||||||
|
self.db_id = self.schema_data['db_id']
|
||||||
|
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||||
|
|
||||||
|
# Create schema
|
||||||
|
self.schema_name = self.schema_data['schema_name']
|
||||||
|
self.schema_id = self.schema_data['schema_id']
|
||||||
|
|
||||||
|
# Create FDW, server & table
|
||||||
|
self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])
|
||||||
|
|
||||||
|
self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
|
||||||
|
self.fdw_name)
|
||||||
|
self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
|
||||||
|
self.fsrv_name, self.fdw_name)
|
||||||
|
|
||||||
|
if bool(self.inventory_data):
|
||||||
|
query = self.inventory_data['query']
|
||||||
|
self.ft_id = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name, query)
|
||||||
|
else:
|
||||||
|
self.ft_id = ft_utils.create_foreign_table(self.server,
|
||||||
|
self.db_name,
|
||||||
|
self.schema_name,
|
||||||
|
self.fsrv_name,
|
||||||
|
self.ft_name)
|
||||||
|
|
||||||
|
def runTest(self):
|
||||||
|
"""This function will fetch foreign table under test database."""
|
||||||
|
# Create db connection
|
||||||
|
db_con = database_utils.connect_database(self,
|
||||||
|
utils.SERVER_GROUP,
|
||||||
|
self.server_id,
|
||||||
|
self.db_id)
|
||||||
|
|
||||||
|
if not db_con["info"] == "Database connected.":
|
||||||
|
raise Exception("Could not connect to database.")
|
||||||
|
|
||||||
|
fsrv_response = fsrv_utils.verify_fsrv(self.server, self.db_name,
|
||||||
|
self.fsrv_name)
|
||||||
|
|
||||||
|
if not fsrv_response:
|
||||||
|
raise Exception("Could not find Foreign Server.")
|
||||||
|
|
||||||
|
if self.is_positive_test:
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
else:
|
||||||
|
if self.mocking_required:
|
||||||
|
with patch(self.mock_data["function_name"],
|
||||||
|
side_effect=[eval(self.mock_data["return_value"])]):
|
||||||
|
if self.is_list:
|
||||||
|
response = ft_utils.api_get(self, '')
|
||||||
|
else:
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
elif 'ft_id' in self.data:
|
||||||
|
# Non-existing ft_id id
|
||||||
|
self.ft_id = self.data["ft_id"]
|
||||||
|
response = ft_utils.api_get(self)
|
||||||
|
|
||||||
|
# Assert response
|
||||||
|
utils.assert_status_code(self, response)
|
||||||
|
utils.assert_error_message(self, response)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
""" This function disconnect the test database and delete test
|
||||||
|
foreign table object. """
|
||||||
|
ft_utils.delete_foregin_table(self.server, self.db_name,
|
||||||
|
self.schema_name, self.ft_name)
|
||||||
|
|
||||||
|
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
|
@ -6,19 +6,67 @@
|
||||||
# This software is released under the PostgreSQL Licence
|
# This software is released under the PostgreSQL Licence
|
||||||
#
|
#
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
import json
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
from regression.python_test_utils.test_utils import get_db_connection
|
from regression.python_test_utils.test_utils import get_db_connection
|
||||||
|
from regression.python_test_utils import test_utils as utils
|
||||||
|
|
||||||
|
# Load test data from json file.
|
||||||
|
CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
with open(CURRENT_PATH + "/foreign_tables_test_data.json") as data_file:
|
||||||
|
test_cases = json.load(data_file)
|
||||||
|
|
||||||
file_name = os.path.basename(__file__)
|
file_name = os.path.basename(__file__)
|
||||||
|
|
||||||
|
|
||||||
|
def api_create(self):
|
||||||
|
return self.tester.post("{0}{1}/{2}/{3}/{4}/".
|
||||||
|
format(self.url, utils.SERVER_GROUP,
|
||||||
|
self.server_id, self.db_id, self.schema_id),
|
||||||
|
data=json.dumps(self.data),
|
||||||
|
content_type='html/json')
|
||||||
|
|
||||||
|
|
||||||
|
def api_get(self, ft_table_id=None):
|
||||||
|
if ft_table_id is None:
|
||||||
|
ft_table_id = self.ft_id
|
||||||
|
return self.tester.get("{0}{1}/{2}/{3}/{4}/{5}".
|
||||||
|
format(self.url, utils.SERVER_GROUP, self.server_id,
|
||||||
|
self.db_id, self.schema_id, ft_table_id),
|
||||||
|
content_type='html/json')
|
||||||
|
|
||||||
|
|
||||||
|
def api_delete(self, ft_tbl_id=''):
|
||||||
|
return self.tester.delete("{0}{1}/{2}/{3}/{4}/{5}".
|
||||||
|
format(self.url, utils.SERVER_GROUP,
|
||||||
|
self.server_id, self.db_id,
|
||||||
|
self.schema_id, ft_tbl_id),
|
||||||
|
data=json.dumps(self.data),
|
||||||
|
follow_redirects=True)
|
||||||
|
|
||||||
|
|
||||||
|
def api_put(self):
|
||||||
|
return self.tester.put("{0}{1}/{2}/{3}/{4}/{5}".
|
||||||
|
format(self.url, utils.SERVER_GROUP, self.server_id,
|
||||||
|
self.db_id, self.schema_id, self.ft_id),
|
||||||
|
data=json.dumps(self.data),
|
||||||
|
follow_redirects=True)
|
||||||
|
|
||||||
|
|
||||||
|
def api_get_msql(self, url_encode_data):
|
||||||
|
return self.tester.get("{0}{1}/{2}/{3}/{4}/{5}?{6}".
|
||||||
|
format(self.url, utils.SERVER_GROUP, self.server_id,
|
||||||
|
self.db_id, self.schema_id, self.ft_id,
|
||||||
|
urlencode(url_encode_data)),
|
||||||
|
follow_redirects=True)
|
||||||
|
|
||||||
|
|
||||||
def create_foreign_table(server, db_name, schema_name, fsrv_name,
|
def create_foreign_table(server, db_name, schema_name, fsrv_name,
|
||||||
foreign_table_name):
|
foreign_table_name, sql_query=None):
|
||||||
"""
|
"""
|
||||||
This function will create foreign table under the existing
|
This function will create foreign table under the existing
|
||||||
dummy schema.
|
dummy schema.
|
||||||
|
@ -28,6 +76,12 @@ def create_foreign_table(server, db_name, schema_name, fsrv_name,
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
query = "CREATE FOREIGN TABLE " + schema_name + "." + \
|
||||||
|
foreign_table_name + "(emp_name text NULL) SERVER %s" % \
|
||||||
|
fsrv_name
|
||||||
|
|
||||||
|
if sql_query is not None:
|
||||||
|
query = eval(sql_query)
|
||||||
connection = get_db_connection(db_name,
|
connection = get_db_connection(db_name,
|
||||||
server['username'],
|
server['username'],
|
||||||
server['db_password'],
|
server['db_password'],
|
||||||
|
@ -36,11 +90,7 @@ def create_foreign_table(server, db_name, schema_name, fsrv_name,
|
||||||
old_isolation_level = connection.isolation_level
|
old_isolation_level = connection.isolation_level
|
||||||
connection.set_isolation_level(0)
|
connection.set_isolation_level(0)
|
||||||
pg_cursor = connection.cursor()
|
pg_cursor = connection.cursor()
|
||||||
|
pg_cursor.execute(query)
|
||||||
pg_cursor.execute(
|
|
||||||
"CREATE FOREIGN TABLE " + schema_name + "." + foreign_table_name +
|
|
||||||
"(emp_name text NULL) SERVER %s" % fsrv_name)
|
|
||||||
|
|
||||||
connection.set_isolation_level(old_isolation_level)
|
connection.set_isolation_level(old_isolation_level)
|
||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue