2022-09-11 11:27:46 -07:00
|
|
|
import json
|
2024-09-27 11:31:25 -05:00
|
|
|
from typing import Dict, List, Optional
|
2022-09-11 11:27:46 -07:00
|
|
|
|
2023-10-10 16:08:34 +05:30
|
|
|
from click.testing import CliRunner, Result
|
2025-01-17 23:50:13 +05:30
|
|
|
|
|
|
|
import datahub.emitter.mce_builder as builder
|
2022-09-11 11:27:46 -07:00
|
|
|
from datahub.emitter.serialization_helper import post_json_transform
|
|
|
|
from datahub.entrypoints import datahub
|
|
|
|
from datahub.metadata.schema_classes import DatasetProfileClass
|
2023-10-10 16:08:34 +05:30
|
|
|
from tests.utils import ingest_file_via_rest, wait_for_writes_to_sync
|
2022-09-11 11:27:46 -07:00
|
|
|
|
2022-12-27 17:50:11 -06:00
|
|
|
runner = CliRunner(mix_stderr=False)
|
2022-09-11 11:27:46 -07:00
|
|
|
|
|
|
|
|
|
|
|
def sync_elastic() -> None:
|
2023-06-06 14:44:52 -07:00
|
|
|
wait_for_writes_to_sync()
|
2022-09-11 11:27:46 -07:00
|
|
|
|
|
|
|
|
2024-09-27 11:31:25 -05:00
|
|
|
def datahub_rollback(auth_session, run_id: str) -> None:
|
2022-09-11 11:27:46 -07:00
|
|
|
sync_elastic()
|
|
|
|
rollback_args: List[str] = ["ingest", "rollback", "--run-id", run_id, "-f"]
|
2024-09-27 11:31:25 -05:00
|
|
|
rollback_result: Result = runner.invoke(
|
|
|
|
datahub,
|
|
|
|
rollback_args,
|
|
|
|
env={
|
|
|
|
"DATAHUB_GMS_URL": auth_session.gms_url(),
|
|
|
|
"DATAHUB_GMS_TOKEN": auth_session.gms_token(),
|
|
|
|
},
|
|
|
|
)
|
2022-09-11 11:27:46 -07:00
|
|
|
assert rollback_result.exit_code == 0
|
|
|
|
|
|
|
|
|
|
|
|
def datahub_get_and_verify_profile(
|
2024-09-27 11:31:25 -05:00
|
|
|
auth_session,
|
2022-09-11 11:27:46 -07:00
|
|
|
urn: str,
|
|
|
|
aspect_name: str,
|
|
|
|
expected_profile: Optional[DatasetProfileClass],
|
|
|
|
) -> None:
|
|
|
|
# Wait for writes to stabilize in elastic
|
|
|
|
sync_elastic()
|
|
|
|
get_args: List[str] = ["get", "--urn", urn, "-a", aspect_name]
|
2024-09-27 11:31:25 -05:00
|
|
|
get_result: Result = runner.invoke(
|
|
|
|
datahub,
|
|
|
|
get_args,
|
|
|
|
env={
|
|
|
|
"DATAHUB_GMS_URL": auth_session.gms_url(),
|
|
|
|
"DATAHUB_GMS_TOKEN": auth_session.gms_token(),
|
|
|
|
},
|
|
|
|
)
|
2022-09-11 11:27:46 -07:00
|
|
|
assert get_result.exit_code == 0
|
2022-12-26 10:09:08 -06:00
|
|
|
get_result_output_obj: Dict = json.loads(get_result.stdout)
|
2022-09-11 11:27:46 -07:00
|
|
|
if expected_profile is None:
|
|
|
|
assert not get_result_output_obj
|
|
|
|
else:
|
|
|
|
profile_as_dict: Dict = post_json_transform(
|
|
|
|
get_result_output_obj["datasetProfile"]
|
|
|
|
)
|
|
|
|
profile_from_get = DatasetProfileClass.from_obj(profile_as_dict)
|
|
|
|
assert profile_from_get == expected_profile
|
|
|
|
|
|
|
|
|
2024-09-27 11:31:25 -05:00
|
|
|
def test_timeseries_rollback(auth_session) -> None:
|
2022-09-11 11:27:46 -07:00
|
|
|
pipeline = ingest_file_via_rest(
|
2024-09-27 11:31:25 -05:00
|
|
|
auth_session, "tests/cli/ingest_cmd/test_timeseries_rollback.json"
|
2022-09-11 11:27:46 -07:00
|
|
|
)
|
|
|
|
test_aspect_name: str = "datasetProfile"
|
|
|
|
test_dataset_urn: str = builder.make_dataset_urn(
|
|
|
|
"test_rollback",
|
|
|
|
"rollback_test_dataset",
|
|
|
|
"TEST",
|
|
|
|
)
|
2024-09-27 11:31:25 -05:00
|
|
|
datahub_rollback(auth_session, pipeline.config.run_id)
|
|
|
|
datahub_get_and_verify_profile(
|
|
|
|
auth_session, test_dataset_urn, test_aspect_name, None
|
|
|
|
)
|