| 
									
										
										
										
											2023-01-18 18:59:16 +05:30
										 |  |  | #  Copyright 2022 Collate | 
					
						
							|  |  |  | #  Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  | #  you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | #  You may obtain a copy of the License at | 
					
						
							|  |  |  | #  http://www.apache.org/licenses/LICENSE-2.0 | 
					
						
							|  |  |  | #  Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  | #  distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  | #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  | #  See the License for the specific language governing permissions and | 
					
						
							|  |  |  | #  limitations under the License. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | Test Redshift connector with CLI | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | from pathlib import Path | 
					
						
							|  |  |  | from typing import List | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from sqlalchemy.engine import Engine | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from metadata.ingestion.api.sink import SinkStatus | 
					
						
							|  |  |  | from metadata.ingestion.api.source import SourceStatus | 
					
						
							|  |  |  | from metadata.ingestion.api.workflow import Workflow | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-14 15:58:31 +02:00
										 |  |  | from .base.test_cli import PATH_TO_RESOURCES | 
					
						
							|  |  |  | from .base.test_cli_dbt import CliDBTBase | 
					
						
							| 
									
										
										
										
											2023-01-18 18:59:16 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DbtCliTest(CliDBTBase.TestSuite): | 
					
						
							|  |  |  |     engine: Engine | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls) -> None: | 
					
						
							|  |  |  |         connector = cls.get_connector_name() | 
					
						
							| 
									
										
										
										
											2023-04-14 15:58:31 +02:00
										 |  |  |         workflow: Workflow = cls.get_workflow( | 
					
						
							|  |  |  |             test_type=cls.get_test_type(), connector=connector | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2023-01-18 18:59:16 +05:30
										 |  |  |         cls.engine = workflow.source.engine | 
					
						
							|  |  |  |         cls.openmetadata = workflow.source.metadata | 
					
						
							|  |  |  |         cls.config_file_path = str( | 
					
						
							|  |  |  |             Path(PATH_TO_RESOURCES + f"/dbt/{connector}/{connector}.yaml") | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         cls.dbt_file_path = str(Path(PATH_TO_RESOURCES + f"/dbt/{connector}/dbt.yaml")) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self) -> None: | 
					
						
							|  |  |  |         self.engine.dispose() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def get_connector_name() -> str: | 
					
						
							|  |  |  |         return "redshift" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def expected_tables() -> int: | 
					
						
							|  |  |  |         return 9 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def expected_records() -> int: | 
					
						
							|  |  |  |         return 72 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def fqn_dbt_tables() -> List[str]: | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             "local_redshift.dev.dbt_jaffle.customers", | 
					
						
							|  |  |  |             "local_redshift.dev.dbt_jaffle.orders", | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def assert_for_vanilla_ingestion( | 
					
						
							|  |  |  |         self, source_status: SourceStatus, sink_status: SinkStatus | 
					
						
							|  |  |  |     ) -> None: | 
					
						
							|  |  |  |         self.assertTrue(len(source_status.failures) == 0) | 
					
						
							|  |  |  |         self.assertTrue(len(source_status.warnings) == 0) | 
					
						
							| 
									
										
										
										
											2023-03-13 12:05:52 +05:30
										 |  |  |         self.assertTrue(len(source_status.filtered) == 8) | 
					
						
							| 
									
										
										
										
											2023-03-24 17:59:06 +01:00
										 |  |  |         self.assertTrue(len(source_status.records) >= self.expected_tables()) | 
					
						
							| 
									
										
										
										
											2023-01-18 18:59:16 +05:30
										 |  |  |         self.assertTrue(len(sink_status.failures) == 0) | 
					
						
							|  |  |  |         self.assertTrue(len(sink_status.warnings) == 0) | 
					
						
							|  |  |  |         self.assertTrue(len(sink_status.records) > self.expected_tables()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def assert_for_dbt_ingestion( | 
					
						
							|  |  |  |         self, source_status: SourceStatus, sink_status: SinkStatus | 
					
						
							|  |  |  |     ) -> None: | 
					
						
							|  |  |  |         self.assertTrue(len(source_status.failures) == 0) | 
					
						
							|  |  |  |         self.assertTrue(len(source_status.warnings) == 0) | 
					
						
							|  |  |  |         self.assertTrue(len(source_status.filtered) == 0) | 
					
						
							| 
									
										
										
										
											2023-03-24 17:59:06 +01:00
										 |  |  |         self.assertTrue(len(source_status.records) >= 0) | 
					
						
							| 
									
										
										
										
											2023-01-18 18:59:16 +05:30
										 |  |  |         self.assertTrue(len(sink_status.failures) == 0) | 
					
						
							|  |  |  |         self.assertTrue(len(sink_status.warnings) == 0) | 
					
						
							|  |  |  |         self.assertTrue(len(sink_status.records) >= self.expected_records()) |