214 lines
7.1 KiB
Python
Raw Normal View History

# 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.
"""
OMeta ES Mixin integration tests. The API needs to be up
"""
import logging
import time
from unittest import TestCase
from metadata.generated.schema.api.data.createDatabase import CreateDatabaseRequest
from metadata.generated.schema.api.data.createDatabaseSchema import (
CreateDatabaseSchemaRequest,
)
from metadata.generated.schema.api.data.createTable import CreateTableRequest
from metadata.generated.schema.api.services.createDatabaseService import (
CreateDatabaseServiceRequest,
)
from metadata.generated.schema.entity.data.table import Column, DataType, Table
from metadata.generated.schema.entity.services.connections.database.common.basicAuth import (
BasicAuth,
)
from metadata.generated.schema.entity.services.connections.database.mysqlConnection import (
MysqlConnection,
)
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
OpenMetadataConnection,
)
from metadata.generated.schema.entity.services.databaseService import (
DatabaseConnection,
DatabaseService,
DatabaseServiceType,
)
from metadata.generated.schema.security.client.openMetadataJWTClientConfig import (
OpenMetadataJWTClientConfig,
)
from metadata.ingestion.ometa.ometa_api import OpenMetadata
from metadata.utils import fqn
class OMetaESTest(TestCase):
"""
Run this integration test with the local API available
Install the ingestion package before running the tests
"""
server_config = OpenMetadataConnection(
hostPort="http://localhost:8585/api",
authProvider="openmetadata",
securityConfig=OpenMetadataJWTClientConfig(
jwtToken="eyJraWQiOiJHYjM4OWEtOWY3Ni1nZGpzLWE5MmotMDI0MmJrOTQzNTYiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlzQm90IjpmYWxzZSwiaXNzIjoib3Blbi1tZXRhZGF0YS5vcmciLCJpYXQiOjE2NjM5Mzg0NjIsImVtYWlsIjoiYWRtaW5Ab3Blbm1ldGFkYXRhLm9yZyJ9.tS8um_5DKu7HgzGBzS1VTA5uUjKWOCU0B_j08WXBiEC0mr0zNREkqVfwFDD-d24HlNEbrqioLsBuFRiwIWKc1m_ZlVQbG7P36RUxhuv2vbSp80FKyNM-Tj93FDzq91jsyNmsQhyNv_fNr3TXfzzSPjHt8Go0FMMP66weoKMgW2PbXlhVKwEuXUHyakLLzewm9UMeQaEiRzhiTMU3UkLXcKbYEJJvfNFcLwSl9W8JCO_l0Yj3ud-qt_nQYEZwqW6u5nfdQllN133iikV4fM5QZsMCnm8Rq1mvLR0y9bmJiD7fwM1tmJ791TUWqmKaTnP49U493VanKpUAfzIiOiIbhg"
),
)
metadata = OpenMetadata(server_config)
assert metadata.health_check()
service = CreateDatabaseServiceRequest(
name="test-service-es",
serviceType=DatabaseServiceType.Mysql,
connection=DatabaseConnection(
config=MysqlConnection(
username="username",
authType=BasicAuth(
password="password",
),
hostPort="http://localhost:1234",
)
),
)
service_type = "databaseService"
@classmethod
def check_es_index(cls) -> None:
"""
Wait until the index has been updated with the test table.
"""
logging.info("Checking ES index status...")
tries = 0
res = None
while not res and tries <= 5: # Kill in 5 seconds
res = cls.metadata.es_search_from_fqn(
entity_type=Table,
fqn_search_string="test-service-es.test-db-es.test-schema-es.test-es",
)
if not res:
tries += 1
time.sleep(1)
@classmethod
def setUpClass(cls) -> None:
"""
Prepare ingredients
"""
cls.service_entity = cls.metadata.create_or_update(data=cls.service)
create_db = CreateDatabaseRequest(
name="test-db-es",
service=cls.service_entity.fullyQualifiedName,
)
cls.create_db_entity = cls.metadata.create_or_update(data=create_db)
create_schema = CreateDatabaseSchemaRequest(
name="test-schema-es",
database=cls.create_db_entity.fullyQualifiedName,
)
cls.create_schema_entity = cls.metadata.create_or_update(data=create_schema)
create = CreateTableRequest(
name="test-es",
databaseSchema=cls.create_schema_entity.fullyQualifiedName,
columns=[Column(name="id", dataType=DataType.BIGINT)],
)
cls.entity = cls.metadata.create_or_update(create)
# Leave some time for indexes to get updated, otherwise this happens too fast
cls.check_es_index()
@classmethod
def tearDownClass(cls) -> None:
"""
Clean up
"""
service_id = str(
cls.metadata.get_by_name(
entity=DatabaseService, fqn=cls.service.name.__root__
).id.__root__
)
cls.metadata.delete(
entity=DatabaseService,
entity_id=service_id,
recursive=True,
hard_delete=True,
)
Open search elastic search client task (#11879) * Added diffrent clients for elasticSearch and openSearch and did the interface implementation * removed some comments and some changes * Add Elastic Search Test Container * upgarded es version * added test cases for elastic search * added test case for, when tag is deleted cehck its relationships also get deleted * changed package of open,elastic to openSearch and elasticSearch * added support for skip search test case if index is not present of that entity * Refactor bunch of files * unnecessary semicolon * refactor test case indexing * fix checkstyle * checkstyle * added hardcoded configs and changed package name * fixed no response from hits * stopped elasticsearch container and some fixes * closed elasticsearch container * revert * closed client after used in test * style * edit es config in junit * checking if using already es version release memory for maven ci * revert docker file changes * remove es container for testing the ci * commented out all test cases for elasticsearch * fix * creating elastic search with reusable enabled * trying to fix ci error * start container only if it is not running * revert docker changes and done changes for elastic search container * changed var name of sort_order for es * lower the version of es client * fixes * all latest version of es including docker * Use Single sort order * Fix Keyword issue * Immediate refresh policy for entity created * increase sleep time * disable test * added reindexing logic in run_local_docker.sh * enabled test case --------- Co-authored-by: Himank Mehta <himankmehta@Himanks-MacBook-Air.local> Co-authored-by: mohitdeuex <mohit.y@deuexsolutions.com> Co-authored-by: Mohit Yadav <105265192+mohityadav766@users.noreply.github.com> Co-authored-by: ulixius9 <mayursingal9@gmail.com>
2023-06-22 16:55:05 +05:30
# Disabling this test because it fails with
# this pr: https://github.com/open-metadata/OpenMetadata/pull/11879
# and failure is repoducible only with docker deployment
def test_es_search_from_service_table(self):
"""
We can fetch tables from a service
"""
fqn_search_string = fqn._build(
self.service.name.__root__, "*", "*", self.entity.name.__root__
)
res = self.metadata.es_search_from_fqn(
entity_type=Table,
fqn_search_string=fqn_search_string,
size=100,
)
# We get the created table back
self.assertIsNotNone(res)
self.assertIn(self.entity, res)
fqn_search_string = fqn._build(
self.service.name.__root__,
self.create_db_entity.name.__root__,
"*",
self.entity.name.__root__,
)
res = self.metadata.es_search_from_fqn(
entity_type=Table,
fqn_search_string=fqn_search_string,
size=100,
)
self.assertIsNotNone(res)
self.assertIn(self.entity, res)
fqn_search_string = fqn._build(
self.service.name.__root__,
self.create_db_entity.name.__root__,
self.create_schema_entity.name.__root__,
self.entity.name.__root__,
)
res = self.metadata.es_search_from_fqn(
entity_type=Table,
fqn_search_string=fqn_search_string,
size=100,
)
self.assertIsNotNone(res)
self.assertIn(self.entity, res)
def test_es_search_from_service_table_empty(self):
"""
Wrong filters return none
"""
res = self.metadata.es_search_from_fqn(
entity_type=Table,
fqn_search_string="random",
)
self.assertIsNone(res)