55import pytest
66import yaml
77from databricks .sdk .core import DatabricksError
8- from databricks .sdk .service import iam
8+ from databricks .sdk .errors import OperationFailed
9+ from databricks .sdk .service import iam , jobs
910from databricks .sdk .service .sql import (
1011 Dashboard ,
1112 DataSource ,
2425
2526
2627def mock_ws (mocker ):
27- ws = mocker .Mock ()
2828 ws = mocker .patch ("databricks.sdk.WorkspaceClient.__init__" )
2929
3030 ws .
current_user .
me = lambda :
iam .
User (
user_name = "[email protected] " ,
groups = [
iam .
ComplexValue (
display = "admins" )])
@@ -44,16 +44,48 @@ def mock_ws(mocker):
4444 return ws
4545
4646
47- def test_run_for_config (mocker , tmp_path ):
48- # run_for_config(ws: WorkspaceClient, config: WorkspaceConfig, *, prefix="ucx") -> "WorkspaceInstaller":
47+ def test_replace_clusters_for_integration_tests (mocker ):
4948 ws = mock_ws (mocker )
50-
51- install = WorkspaceInstaller (ws )
52- wc = WorkspaceConfig (inventory_database = "a" , groups = GroupsConfig (auto = True ))
53- return_value = install .run_for_config (ws , wc )
49+ return_value = WorkspaceInstaller .run_for_config (
50+ ws , WorkspaceConfig (inventory_database = "a" , groups = GroupsConfig (auto = True )), override_clusters = {"main" : "abc" }
51+ )
5452 assert return_value
5553
5654
55+ def test_run_workflow_creates_proper_failure (mocker ):
56+ def run_now (job_id ):
57+ assert "bar" == job_id
58+
59+ def result ():
60+ raise OperationFailed (...)
61+
62+ waiter = mocker .Mock ()
63+ waiter .result = result
64+ waiter .run_id = "qux"
65+ return waiter
66+
67+ ws = mock_ws (mocker )
68+ ws .jobs .run_now = run_now
69+ ws .jobs .get_run .return_value = jobs .Run (
70+ state = jobs .RunState (state_message = "Stuff happens." ),
71+ tasks = [
72+ jobs .RunTask (
73+ task_key = "stuff" ,
74+ state = jobs .RunState (result_state = jobs .RunResultState .FAILED ),
75+ run_id = 123 ,
76+ )
77+ ],
78+ )
79+ ws .jobs .get_run_output .return_value = jobs .RunOutput (error = "does not compute" , error_trace = "# goes to stderr" )
80+ installer = WorkspaceInstaller (ws )
81+ installer ._deployed_steps = {"foo" : "bar" }
82+
83+ with pytest .raises (OperationFailed ) as failure :
84+ installer .run_workflow ("foo" )
85+
86+ assert "Stuff happens: stuff: does not compute" == str (failure .value )
87+
88+
5789def test_install_database_happy (mocker , tmp_path ):
5890 ws = mocker .Mock ()
5991 install = WorkspaceInstaller (ws )
0 commit comments