|
10 | 10 | from databricks.sdk import WorkspaceClient
|
11 | 11 | from databricks.sdk.errors import NotFound
|
12 | 12 | from databricks.sdk.service import compute, jobs
|
13 |
| -from databricks.sdk.service.jobs import Job, SparkPythonTask |
| 13 | +from databricks.sdk.service.jobs import Job, SparkPythonTask, BaseRun, RunResultState |
14 | 14 | from databricks.sdk.service.pipelines import (
|
15 | 15 | GetPipelineResponse,
|
16 | 16 | FileLibrary,
|
@@ -589,3 +589,67 @@ def test_workflow_linter_refresh_report(dependency_resolver, mock_path_lookup, m
|
589 | 589 | sql_backend.has_rows_written_for('test.workflow_problems')
|
590 | 590 | sql_backend.has_rows_written_for('hive_metastore.test.used_tables_in_paths')
|
591 | 591 | sql_backend.has_rows_written_for('hive_metastore.test.directfs_in_paths')
|
| 592 | + |
| 593 | + |
| 594 | +def test_workflow_linter_refresh_report_time_bound(dependency_resolver, mock_path_lookup, migration_index) -> None: |
| 595 | + ws = create_autospec(WorkspaceClient) |
| 596 | + ws.workspace.get_status.return_value = ObjectInfo(object_id=123, language=Language.PYTHON) |
| 597 | + some_things = mock_path_lookup.resolve(Path("functional/zoo.py")) |
| 598 | + assert some_things is not None |
| 599 | + ws.workspace.download.return_value = some_things.read_bytes() |
| 600 | + notebook_task = jobs.NotebookTask( |
| 601 | + notebook_path=some_things.absolute().as_posix(), |
| 602 | + base_parameters={"a": "b", "c": "dbfs:/mnt/foo"}, |
| 603 | + ) |
| 604 | + task = jobs.Task( |
| 605 | + task_key="test", |
| 606 | + job_cluster_key="main", |
| 607 | + notebook_task=notebook_task, |
| 608 | + ) |
| 609 | + settings = jobs.JobSettings( |
| 610 | + tasks=[task], |
| 611 | + name='some', |
| 612 | + job_clusters=[ |
| 613 | + jobs.JobCluster( |
| 614 | + job_cluster_key="main", |
| 615 | + new_cluster=compute.ClusterSpec( |
| 616 | + spark_version="15.2.x-photon-scala2.12", |
| 617 | + node_type_id="Standard_F4s", |
| 618 | + num_workers=2, |
| 619 | + data_security_mode=compute.DataSecurityMode.LEGACY_TABLE_ACL, |
| 620 | + spark_conf={"spark.databricks.cluster.profile": "singleNode"}, |
| 621 | + ), |
| 622 | + ), |
| 623 | + ], |
| 624 | + ) |
| 625 | + ws.jobs.list.return_value = [Job(job_id=1, settings=settings), Job(job_id=2, settings=settings)] |
| 626 | + ws.jobs.get.side_effect = [Job(job_id=1, settings=settings), Job(job_id=2, settings=settings)] |
| 627 | + ws.jobs.list_runs.side_effect = [ |
| 628 | + [ |
| 629 | + BaseRun( |
| 630 | + state=jobs.RunState(result_state=RunResultState.SUCCESS), |
| 631 | + run_id=1, |
| 632 | + job_id=2, |
| 633 | + run_page_url="http://example.com", |
| 634 | + ) |
| 635 | + ], |
| 636 | + [], |
| 637 | + ] |
| 638 | + sql_backend = MockBackend() |
| 639 | + jobs_crawler = JobsCrawler(ws, sql_backend, 'test') |
| 640 | + directfs_crawler = DirectFsAccessCrawler.for_paths(sql_backend, "test") |
| 641 | + used_tables_crawler = UsedTablesCrawler.for_paths(sql_backend, "test") |
| 642 | + linter = WorkflowLinter( |
| 643 | + ws, |
| 644 | + jobs_crawler, |
| 645 | + dependency_resolver, |
| 646 | + mock_path_lookup, |
| 647 | + migration_index, |
| 648 | + directfs_crawler, |
| 649 | + used_tables_crawler, |
| 650 | + ) |
| 651 | + linter.refresh_report(sql_backend, 'test', last_run_days=30) |
| 652 | + |
| 653 | + sql_backend.has_rows_written_for('test.workflow_problems') |
| 654 | + sql_backend.has_rows_written_for('hive_metastore.test.used_tables_in_paths') |
| 655 | + sql_backend.has_rows_written_for('hive_metastore.test.directfs_in_paths') |
0 commit comments