diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.4_plus/tests.json b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.4_plus/tests.json index 4f6fcfb..2ca0917 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.4_plus/tests.json +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.4_plus/tests.json @@ -10,7 +10,8 @@ "schema": "test_extension_schema", "version": "1.0" }, - "expected_sql_file": "create_extension_with_all_options.sql" + "expected_sql_file": "create_extension_with_all_options.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';" }, { "type": "alter", @@ -20,13 +21,15 @@ "data": { "schema": "public" }, - "expected_sql_file": "alter_extension_schema.sql" + "expected_sql_file": "alter_extension_schema.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';" }, { "type": "delete", "name": "Drop Extension with all options", "endpoint": "NODE-extension.obj_id", - "data": {} + "data": {}, + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';" }, { "type": "create", @@ -37,7 +40,8 @@ "name": "citext", "version": "1.0" }, - "expected_sql_file": "create_extension_with_default_schema.sql" + "expected_sql_file": "create_extension_with_default_schema.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='citext' and e2.version='1.0';" }, { "type": "alter", @@ -47,13 +51,15 @@ "data": { "version": "1.1" }, - "expected_sql_file": "alter_extension_version.sql" + "expected_sql_file": "alter_extension_version.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='citext' and e2.version='1.1';" }, { "type": "delete", "name": "Drop Extension default schema", "endpoint": "NODE-extension.obj_id", - "data": {} + "data": {}, + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='citext' and e2.version='1.1';" } ] } diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.5_plus/tests.json b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.5_plus/tests.json index bee44eb..db8452a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.5_plus/tests.json +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.5_plus/tests.json @@ -10,7 +10,8 @@ "schema": "test_extension_schema", "version": "1.0" }, - "expected_sql_file": "create_extension_with_all_options.sql" + "expected_sql_file": "create_extension_with_all_options.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';" }, { "type": "alter", @@ -20,13 +21,15 @@ "data": { "schema": "public" }, - "expected_sql_file": "alter_extension_schema.sql" + "expected_sql_file": "alter_extension_schema.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';" }, { "type": "delete", "name": "Drop Extension with all options", "endpoint": "NODE-extension.obj_id", - "data": {} + "data": {}, + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';" } ] } diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.6_plus/tests.json b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.6_plus/tests.json index e50ee24..44fb0ec 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.6_plus/tests.json +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/9.6_plus/tests.json @@ -10,7 +10,8 @@ "schema": "test_extension_schema", "version": "1.2" }, - "expected_sql_file": "create_extension_with_all_options.sql" + "expected_sql_file": "create_extension_with_all_options.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.2';" }, { "type": "alter", @@ -20,13 +21,15 @@ "data": { "schema": "public" }, - "expected_sql_file": "alter_extension_schema.sql" + "expected_sql_file": "alter_extension_schema.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.2';" }, { "type": "delete", "name": "Drop Extension with all options", "endpoint": "NODE-extension.obj_id", - "data": {} + "data": {}, + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.2';" }, { "type": "create", @@ -37,7 +40,8 @@ "name": "adminpack", "version": "1.0" }, - "expected_sql_file": "create_extension_with_default_schema.sql" + "expected_sql_file": "create_extension_with_default_schema.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='adminpack' and e2.version='1.0';" }, { "type": "alter", @@ -47,13 +51,15 @@ "data": { "version": "1.1" }, - "expected_sql_file": "alter_extension_version.sql" + "expected_sql_file": "alter_extension_version.sql", + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='adminpack' and e2.version='1.0';" }, { "type": "delete", "name": "Drop Extension default schema", "endpoint": "NODE-extension.obj_id", - "data": {} + "data": {}, + "precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='adminpack' and e2.version='1.0';" } ] } diff --git a/web/regression/re_sql/tests/test_resql.py b/web/regression/re_sql/tests/test_resql.py index 56a98fa..490e02a 100644 --- a/web/regression/re_sql/tests/test_resql.py +++ b/web/regression/re_sql/tests/test_resql.py @@ -178,6 +178,11 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator): object_id = None for scenario in scenarios: + if 'precondition_sql' in scenario and \ + not self.check_precondition(scenario['precondition_sql']): + print(scenario['name'] + "... skipped") + continue + if 'type' in scenario and scenario['type'] == 'create': # Get the url and create the specific node. @@ -451,3 +456,22 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator): return False return True + + def check_precondition(self, precondition_sql): + """ + This method executes precondition_sql and returns appropriate result + :param precondition_sql: SQL query in format select count(*) from ... + :return: True/False depending on precondition_sql result + """ + precondition_flag = False + self.get_db_connection() + pg_cursor = self.connection.cursor() + try: + pg_cursor.execute(precondition_sql) + precondition_result = pg_cursor.fetchone() + if len(precondition_result) >= 1 and precondition_result[0] == '1': + precondition_flag = True + except Exception as e: + traceback.print_exc() + pg_cursor.close() + return precondition_flag