|
1 | 1 | package run |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "context" |
4 | 5 | "testing" |
| 6 | + "time" |
5 | 7 |
|
6 | 8 | "github.com/databricks/cli/bundle" |
7 | 9 | "github.com/databricks/cli/bundle/config" |
8 | 10 | "github.com/databricks/cli/bundle/config/resources" |
| 11 | + "github.com/databricks/databricks-sdk-go/experimental/mocks" |
9 | 12 | "github.com/databricks/databricks-sdk-go/service/jobs" |
| 13 | + "github.com/stretchr/testify/mock" |
10 | 14 | "github.com/stretchr/testify/require" |
11 | 15 | ) |
12 | 16 |
|
@@ -47,3 +51,78 @@ func TestConvertPythonParams(t *testing.T) { |
47 | 51 | require.Contains(t, opts.Job.notebookParams, "__python_params") |
48 | 52 | require.Equal(t, opts.Job.notebookParams["__python_params"], `["param1","param2","param3"]`) |
49 | 53 | } |
| 54 | + |
| 55 | +func TestJobRunnerCancel(t *testing.T) { |
| 56 | + job := &resources.Job{ |
| 57 | + ID: "123", |
| 58 | + } |
| 59 | + b := &bundle.Bundle{ |
| 60 | + Config: config.Root{ |
| 61 | + Resources: config.Resources{ |
| 62 | + Jobs: map[string]*resources.Job{ |
| 63 | + "test_job": job, |
| 64 | + }, |
| 65 | + }, |
| 66 | + }, |
| 67 | + } |
| 68 | + |
| 69 | + runner := jobRunner{key: "test", bundle: b, job: job} |
| 70 | + |
| 71 | + m := mocks.NewMockWorkspaceClient(t) |
| 72 | + b.SetWorkpaceClient(m.WorkspaceClient) |
| 73 | + |
| 74 | + jobApi := m.GetMockJobsAPI() |
| 75 | + jobApi.EXPECT().ListRunsAll(mock.Anything, jobs.ListRunsRequest{ |
| 76 | + ActiveOnly: true, |
| 77 | + JobId: 123, |
| 78 | + }).Return([]jobs.BaseRun{ |
| 79 | + {RunId: 1}, |
| 80 | + {RunId: 2}, |
| 81 | + }, nil) |
| 82 | + |
| 83 | + mockWait := &jobs.WaitGetRunJobTerminatedOrSkipped[struct{}]{ |
| 84 | + Poll: func(time time.Duration, f func(j *jobs.Run)) (*jobs.Run, error) { |
| 85 | + return nil, nil |
| 86 | + }, |
| 87 | + } |
| 88 | + jobApi.EXPECT().CancelRun(mock.Anything, jobs.CancelRun{ |
| 89 | + RunId: 1, |
| 90 | + }).Return(mockWait, nil) |
| 91 | + jobApi.EXPECT().CancelRun(mock.Anything, jobs.CancelRun{ |
| 92 | + RunId: 2, |
| 93 | + }).Return(mockWait, nil) |
| 94 | + |
| 95 | + err := runner.Cancel(context.Background()) |
| 96 | + require.NoError(t, err) |
| 97 | +} |
| 98 | + |
| 99 | +func TestJobRunnerCancelWithNoActiveRuns(t *testing.T) { |
| 100 | + job := &resources.Job{ |
| 101 | + ID: "123", |
| 102 | + } |
| 103 | + b := &bundle.Bundle{ |
| 104 | + Config: config.Root{ |
| 105 | + Resources: config.Resources{ |
| 106 | + Jobs: map[string]*resources.Job{ |
| 107 | + "test_job": job, |
| 108 | + }, |
| 109 | + }, |
| 110 | + }, |
| 111 | + } |
| 112 | + |
| 113 | + runner := jobRunner{key: "test", bundle: b, job: job} |
| 114 | + |
| 115 | + m := mocks.NewMockWorkspaceClient(t) |
| 116 | + b.SetWorkpaceClient(m.WorkspaceClient) |
| 117 | + |
| 118 | + jobApi := m.GetMockJobsAPI() |
| 119 | + jobApi.EXPECT().ListRunsAll(mock.Anything, jobs.ListRunsRequest{ |
| 120 | + ActiveOnly: true, |
| 121 | + JobId: 123, |
| 122 | + }).Return([]jobs.BaseRun{}, nil) |
| 123 | + |
| 124 | + jobApi.AssertNotCalled(t, "CancelRun") |
| 125 | + |
| 126 | + err := runner.Cancel(context.Background()) |
| 127 | + require.NoError(t, err) |
| 128 | +} |
0 commit comments