mirror of
				https://github.com/open-metadata/OpenMetadata.git
				synced 2025-11-04 04:29:13 +00:00 
			
		
		
		
	* tests(datalake): use minio 1. use minio instead of moto for mimicking s3 behavior. 2. removed moto dependency as it is not compatible with aiobotocore (https://github.com/getmoto/moto/issues/7070#issuecomment-1828484982) * - moved test_datalake_profiler_e2e.py to datalake/test_profiler - use minio instead of moto * fixed tests * fixed tests * removed default name for minio container
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#  Copyright 2021 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.
 | 
						|
"""Common containers for integration tests"""
 | 
						|
import sys
 | 
						|
from dataclasses import asdict, dataclass
 | 
						|
from typing import Optional
 | 
						|
 | 
						|
from testcontainers.mysql import MySqlContainer
 | 
						|
 | 
						|
# HACK: This test is only possible for Python3.9 or higher.
 | 
						|
# This allows pytest to parse the file even on lower versions.
 | 
						|
if sys.version_info >= (3, 9):
 | 
						|
    from testcontainers.core.network import Network
 | 
						|
    from testcontainers.minio import MinioContainer
 | 
						|
else:
 | 
						|
    from unittest.mock import MagicMock
 | 
						|
 | 
						|
    Network = MagicMock()
 | 
						|
    MinioContainer = MagicMock()
 | 
						|
 | 
						|
 | 
						|
# ------------------------------------------------------------
 | 
						|
# Container Configurations
 | 
						|
# ------------------------------------------------------------
 | 
						|
@dataclass
 | 
						|
class MySqlContainerConfigs:
 | 
						|
    """MySQL Configurations"""
 | 
						|
 | 
						|
    image: str = "mysql:8"
 | 
						|
    username: str = "user"
 | 
						|
    password: str = "password"
 | 
						|
    dbname: str = "db"
 | 
						|
    port: int = 3306
 | 
						|
    container_name: str = "test-db"
 | 
						|
    exposed_port: Optional[int] = None
 | 
						|
 | 
						|
    def with_exposed_port(self, container):
 | 
						|
        self.exposed_port = container.get_exposed_port(self.port)
 | 
						|
 | 
						|
 | 
						|
@dataclass
 | 
						|
class MinioContainerConfigs:
 | 
						|
    """MinIO Configurations"""
 | 
						|
 | 
						|
    access_key: str = "minio"
 | 
						|
    secret_key: str = "password"
 | 
						|
    port: int = 9000
 | 
						|
    container_name: Optional[str] = None
 | 
						|
    exposed_port: Optional[int] = None
 | 
						|
 | 
						|
    def with_exposed_port(self, container):
 | 
						|
        self.exposed_port = container.get_exposed_port(self.port)
 | 
						|
 | 
						|
 | 
						|
# ------------------------------------------------------------
 | 
						|
# Utility functions
 | 
						|
# ------------------------------------------------------------
 | 
						|
def get_docker_network(name: str):
 | 
						|
    network = Network()
 | 
						|
    network.name = name
 | 
						|
    return network
 | 
						|
 | 
						|
 | 
						|
def get_mysql_container(mysql_config: MySqlContainerConfigs):
 | 
						|
    container = MySqlContainer(
 | 
						|
        **{
 | 
						|
            k: v
 | 
						|
            for k, v in asdict(mysql_config).items()
 | 
						|
            if k not in ["exposed_port", "container_name"]
 | 
						|
        }
 | 
						|
    )
 | 
						|
    container.with_name(mysql_config.container_name)
 | 
						|
 | 
						|
    return container
 | 
						|
 | 
						|
 | 
						|
def get_minio_container(minio_config: MinioContainerConfigs):
 | 
						|
    container = MinioContainer(
 | 
						|
        **{
 | 
						|
            k: v
 | 
						|
            for k, v in asdict(minio_config).items()
 | 
						|
            if k not in ["exposed_port", "container_name"]
 | 
						|
        }
 | 
						|
    )
 | 
						|
    container.with_name(minio_config.container_name)
 | 
						|
 | 
						|
    return container
 |