Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 22 additions & 16 deletions tests/integration/test_database_iceberg_lakekeeper_catalog/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ def test_select(started_cluster):


def create_clickhouse_iceberg_database(
started_cluster, node, name, additional_settings={}
started_cluster, node, name, additional_settings={}, query_id=None
):
settings = {
"catalog_type": "rest",
Expand All @@ -263,14 +263,14 @@ def create_clickhouse_iceberg_database(

settings.update(additional_settings)

node.query(f"DROP DATABASE IF EXISTS {name}")
node.query(
f"""
DROP DATABASE IF EXISTS {name};
SET allow_experimental_database_iceberg=true;
CREATE DATABASE {name} ENGINE = DataLakeCatalog('{BASE_URL}', 'minio', '{minio_secret_key}')
SETTINGS {",".join((k+"="+repr(v) for k, v in settings.items()))}
"""
f"CREATE DATABASE {name} ENGINE = DataLakeCatalog('{BASE_URL}', 'minio', '{minio_secret_key}')\n"
f"SETTINGS {','.join((k+'='+repr(v) for k, v in settings.items()))}",
settings={"allow_experimental_database_iceberg": 1},
query_id=query_id,
)

show_result = node.query(f"SHOW DATABASE {name}")
assert minio_secret_key not in show_result
assert "HIDDEN" in show_result
Expand Down Expand Up @@ -418,11 +418,11 @@ def get_credentials_profile_events(node, query_id):
def get_auth_token_profile_events(node, query_id):
node.query("SYSTEM FLUSH LOGS")
refreshed = int(node.query(
f"SELECT ProfileEvents['DataLakeRestCatalogAuthTokenRefreshed'] "
f"SELECT ProfileEvents['DataLakeRestCatalogAuthTokenRetrieve'] "
f"FROM system.query_log WHERE query_id = '{query_id}' AND type = 'QueryFinish'"
))
cache_hits = int(node.query(
f"SELECT ProfileEvents['DataLakeRestCatalogAuthTokenCacheHits'] "
f"SELECT ProfileEvents['DataLakeRestCatalogAuthTokenCachedValid'] "
f"FROM system.query_log WHERE query_id = '{query_id}' AND type = 'QueryFinish'"
))
return refreshed, cache_hits
Expand Down Expand Up @@ -450,9 +450,11 @@ def test_auth_token_profile_events(started_cluster):
properties={"write.metadata.compression-codec": "none"},
)

# The catalog client is initialized lazily on the first database access,
# not during CREATE DATABASE. OAuth credentials must use client_id:client_secret
# format; oauth_server_uri points to a mock token endpoint in docker compose.
# On CREATE the catalog is built eagerly, so that query is the one that fetches the
# OAuth token; every later query reuses it from the cache. OAuth credentials must use
# client_id:client_secret format; oauth_server_uri points to a mock token endpoint in
# docker compose.
qid_create = f"{test_ref}-create-{uuid.uuid4()}"
create_clickhouse_iceberg_database(
started_cluster,
node,
Expand All @@ -461,18 +463,22 @@ def test_auth_token_profile_events(started_cluster):
"catalog_credential": "test:secret",
"oauth_server_uri": MOCK_OAUTH_URL,
},
query_id=qid_create,
)

retrieved, cached = get_auth_token_profile_events(node, qid_create)
assert retrieved >= 1

qid1 = f"{test_ref}-show-1-{uuid.uuid4()}"
node.query(f"SHOW TABLES FROM {db_name}", query_id=qid1)
assert table_name in node.query(f"SHOW TABLES FROM {db_name}")
refreshed, cache_hits = get_auth_token_profile_events(node, qid1)
assert refreshed >= 1
retrieved, cached = get_auth_token_profile_events(node, qid1)
assert retrieved == 0 and cached >= 1

qid2 = f"{test_ref}-show-2-{uuid.uuid4()}"
node.query(f"SHOW TABLES FROM {db_name}", query_id=qid2)
refreshed, cache_hits = get_auth_token_profile_events(node, qid2)
assert refreshed == 0 and cache_hits >= 1
retrieved, cached = get_auth_token_profile_events(node, qid2)
assert retrieved == 0 and cached >= 1


def test_vended_credentials_cache(started_cluster):
Expand Down
Loading