Implement pre and post scenario SQL execution in subscription ResQL tests to manage publication lifecycle. #8932
							parent
							
								
									04024c7f61
								
							
						
					
					
						commit
						c6af61afd3
					
				| 
						 | 
				
			
			@ -13,7 +13,7 @@
 | 
			
		|||
 add empty bracket with table name
 | 
			
		||||
#}
 | 
			
		||||
{% set empty_bracket = ""%}
 | 
			
		||||
{% if data.coll_inherits|length == 0 and  data.columns|length == 0 and not data.typname and not data.like_relation and data.primary_key|length == 0 and data.unique_constraint|length == 0 and data.foreign_key|length == 0 and data.check_constraint|length == 0 and data.exclude_constraint|length == 0 %}
 | 
			
		||||
{% if not (data.coll_inherits or data.columns or data.typname or data.like_relation or data.primary_key or data.unique_constraint or data.foreign_key or data.check_constraint or data.exclude_constraint) %}
 | 
			
		||||
{% set empty_bracket = "\n(\n)"%}
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% set with_clause = false%}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,7 @@
 | 
			
		|||
      "endpoint": "NODE-publication.obj",
 | 
			
		||||
      "sql_endpoint": "NODE-publication.sql_id",
 | 
			
		||||
      "msql_endpoint": "NODE-publication.msql",
 | 
			
		||||
      "precondition_sql": "SELECT 1 FROM pg_replication_slots WHERE slot_name = 'test_create_subscription' UNION ALL SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'test_create_subscription') AND pg_create_logical_replication_slot('test_create_subscription', 'pgoutput', false) IS NOT NULL LIMIT 1;",
 | 
			
		||||
      "data": {
 | 
			
		||||
        "name": "test_publication",
 | 
			
		||||
        "evnt_insert": true,
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +117,8 @@
 | 
			
		|||
      "endpoint": "NODE-subscription.delete_id",
 | 
			
		||||
      "data": {
 | 
			
		||||
        "name": "test_create_subscription"
 | 
			
		||||
      }
 | 
			
		||||
      },
 | 
			
		||||
      "post_scenario_sql": "SELECT 1 WHERE EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'test_create_subscription') AND (SELECT pg_drop_replication_slot('test_create_subscription')) IS NOT NULL UNION ALL SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'test_create_subscription') LIMIT 1;"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
      "endpoint": "NODE-subscription.obj",
 | 
			
		||||
      "sql_endpoint": "NODE-subscription.sql_id",
 | 
			
		||||
      "msql_endpoint": "NODE-subscription.msql",
 | 
			
		||||
      "precondition_sql": "SELECT 1 FROM pg_replication_slots WHERE slot_name = 'test_create_subscription' UNION ALL SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'test_create_subscription') AND pg_create_logical_replication_slot('test_create_subscription', 'pgoutput', false) IS NOT NULL LIMIT 1;",
 | 
			
		||||
      "data": {
 | 
			
		||||
          "name": "test_create_subscription",
 | 
			
		||||
          "subowner": "postgres",
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +67,8 @@
 | 
			
		|||
      "endpoint": "NODE-subscription.delete_id",
 | 
			
		||||
      "data": {
 | 
			
		||||
        "name": "test_create_subscription"
 | 
			
		||||
      }
 | 
			
		||||
      },
 | 
			
		||||
      "post_scenario_sql": "SELECT 1 WHERE EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'test_create_subscription') AND (SELECT pg_drop_replication_slot('test_create_subscription')) IS NOT NULL UNION ALL SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'test_create_subscription') LIMIT 1;"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,35 +95,6 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
 | 
			
		|||
        # Added line break after scenario name
 | 
			
		||||
        print("")
 | 
			
		||||
 | 
			
		||||
        # Create replication slot if it does not exist for the
 | 
			
		||||
        # RESQL test-cases of Subscriptions for PGv17 and above
 | 
			
		||||
        if self.server_information['server_version'] >= 170000:
 | 
			
		||||
            try:
 | 
			
		||||
                self.get_db_connection()
 | 
			
		||||
                pg_cursor = self.connection.cursor()
 | 
			
		||||
                pg_cursor.execute("""
 | 
			
		||||
                    SELECT 1 FROM pg_replication_slots
 | 
			
		||||
                    WHERE slot_name = 'test_create_subscription'
 | 
			
		||||
                """)
 | 
			
		||||
                exists = pg_cursor.fetchone()
 | 
			
		||||
                if not exists:
 | 
			
		||||
                    pg_cursor.execute("""
 | 
			
		||||
                        SELECT pg_create_logical_replication_slot(
 | 
			
		||||
                            'test_create_subscription',
 | 
			
		||||
                            'pgoutput',
 | 
			
		||||
                            failover := false
 | 
			
		||||
                        );
 | 
			
		||||
                    """)
 | 
			
		||||
                    self.connection.commit()
 | 
			
		||||
                    print("Replication slot "
 | 
			
		||||
                          "'test_create_subscription' created.")
 | 
			
		||||
                else:
 | 
			
		||||
                    print("Replication slot 'test_create_subscription' "
 | 
			
		||||
                          "already exists.")
 | 
			
		||||
                pg_cursor.close()
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print("Could not create replication slot: ", e)
 | 
			
		||||
 | 
			
		||||
    def runTest(self):
 | 
			
		||||
        """ Create the module list on which reverse engineeredsql test
 | 
			
		||||
        cases will be executed."""
 | 
			
		||||
| 
						 | 
				
			
			@ -182,30 +153,6 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
 | 
			
		|||
        # Check the final status of the test case
 | 
			
		||||
        self.assertEqual(self.final_test_status, True)
 | 
			
		||||
 | 
			
		||||
    def tearDown(self):
 | 
			
		||||
        # Drop the replication slot created for the RESQL test-cases of
 | 
			
		||||
        # Subscriptions, if it exists before disconnecting for PGv17 and above
 | 
			
		||||
        if self.server_information['server_version'] >= 170000:
 | 
			
		||||
            try:
 | 
			
		||||
                self.get_db_connection()
 | 
			
		||||
                pg_cursor = self.connection.cursor()
 | 
			
		||||
                pg_cursor.execute("""
 | 
			
		||||
                    SELECT 1 FROM pg_replication_slots
 | 
			
		||||
                    WHERE slot_name = 'test_create_subscription'
 | 
			
		||||
                """)
 | 
			
		||||
                exists = pg_cursor.fetchone()
 | 
			
		||||
                if exists:
 | 
			
		||||
                    pg_cursor.execute("""
 | 
			
		||||
                        SELECT
 | 
			
		||||
                        pg_drop_replication_slot('test_create_subscription');
 | 
			
		||||
                    """)
 | 
			
		||||
                    self.connection.commit()
 | 
			
		||||
                    print("Replication slot "
 | 
			
		||||
                          "'test_create_subscription' dropped.")
 | 
			
		||||
                pg_cursor.close()
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print("Could not drop replication slot: ", e)
 | 
			
		||||
 | 
			
		||||
        database_utils.disconnect_database(
 | 
			
		||||
            self, self.server_information['server_id'],
 | 
			
		||||
            self.server_information['db_id'])
 | 
			
		||||
| 
						 | 
				
			
			@ -653,7 +600,10 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
 | 
			
		|||
        try:
 | 
			
		||||
            pg_cursor.execute(precondition_sql)
 | 
			
		||||
            precondition_result = pg_cursor.fetchone()
 | 
			
		||||
            if len(precondition_result) >= 1 and precondition_result[0] == '1':
 | 
			
		||||
            if ((len(precondition_result) >= 1 and
 | 
			
		||||
                precondition_result[0] == '1') or
 | 
			
		||||
                (isinstance(precondition_result, tuple) and
 | 
			
		||||
                 precondition_result[0] == 1)):
 | 
			
		||||
                precondition_flag = True
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            traceback.print_exc()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue