mirror of https://github.com/databricks/cli.git
126 lines
3.4 KiB
Go
126 lines
3.4 KiB
Go
|
package deploy
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"errors"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/databricks/databricks-sdk-go/experimental/mocks"
|
||
|
"github.com/databricks/databricks-sdk-go/service/jobs"
|
||
|
"github.com/databricks/databricks-sdk-go/service/pipelines"
|
||
|
tfjson "github.com/hashicorp/terraform-json"
|
||
|
"github.com/stretchr/testify/mock"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestIsAnyResourceRunningWithEmptyState(t *testing.T) {
|
||
|
mock := mocks.NewMockWorkspaceClient(t)
|
||
|
state := &tfjson.State{}
|
||
|
err := checkAnyResourceRunning(context.Background(), mock.WorkspaceClient, state)
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
func TestIsAnyResourceRunningWithJob(t *testing.T) {
|
||
|
m := mocks.NewMockWorkspaceClient(t)
|
||
|
state := &tfjson.State{
|
||
|
Values: &tfjson.StateValues{
|
||
|
RootModule: &tfjson.StateModule{
|
||
|
Resources: []*tfjson.StateResource{
|
||
|
{
|
||
|
Type: "databricks_job",
|
||
|
AttributeValues: map[string]interface{}{
|
||
|
"id": "123",
|
||
|
},
|
||
|
Mode: tfjson.ManagedResourceMode,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
jobsApi := m.GetMockJobsAPI()
|
||
|
jobsApi.EXPECT().ListRunsAll(mock.Anything, jobs.ListRunsRequest{
|
||
|
JobId: 123,
|
||
|
ActiveOnly: true,
|
||
|
}).Return([]jobs.BaseRun{
|
||
|
{RunId: 1234},
|
||
|
}, nil).Once()
|
||
|
|
||
|
err := checkAnyResourceRunning(context.Background(), m.WorkspaceClient, state)
|
||
|
require.ErrorContains(t, err, "job 123 is running")
|
||
|
|
||
|
jobsApi.EXPECT().ListRunsAll(mock.Anything, jobs.ListRunsRequest{
|
||
|
JobId: 123,
|
||
|
ActiveOnly: true,
|
||
|
}).Return([]jobs.BaseRun{}, nil).Once()
|
||
|
|
||
|
err = checkAnyResourceRunning(context.Background(), m.WorkspaceClient, state)
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
func TestIsAnyResourceRunningWithPipeline(t *testing.T) {
|
||
|
m := mocks.NewMockWorkspaceClient(t)
|
||
|
state := &tfjson.State{
|
||
|
Values: &tfjson.StateValues{
|
||
|
RootModule: &tfjson.StateModule{
|
||
|
Resources: []*tfjson.StateResource{
|
||
|
{
|
||
|
Type: "databricks_pipeline",
|
||
|
AttributeValues: map[string]interface{}{
|
||
|
"id": "123",
|
||
|
},
|
||
|
Mode: tfjson.ManagedResourceMode,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
pipelineApi := m.GetMockPipelinesAPI()
|
||
|
pipelineApi.EXPECT().Get(mock.Anything, pipelines.GetPipelineRequest{
|
||
|
PipelineId: "123",
|
||
|
}).Return(&pipelines.GetPipelineResponse{
|
||
|
PipelineId: "123",
|
||
|
State: pipelines.PipelineStateRunning,
|
||
|
}, nil).Once()
|
||
|
|
||
|
err := checkAnyResourceRunning(context.Background(), m.WorkspaceClient, state)
|
||
|
require.ErrorContains(t, err, "pipeline 123 is running")
|
||
|
|
||
|
pipelineApi.EXPECT().Get(mock.Anything, pipelines.GetPipelineRequest{
|
||
|
PipelineId: "123",
|
||
|
}).Return(&pipelines.GetPipelineResponse{
|
||
|
PipelineId: "123",
|
||
|
State: pipelines.PipelineStateIdle,
|
||
|
}, nil).Once()
|
||
|
err = checkAnyResourceRunning(context.Background(), m.WorkspaceClient, state)
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
func TestIsAnyResourceRunningWithAPIFailure(t *testing.T) {
|
||
|
m := mocks.NewMockWorkspaceClient(t)
|
||
|
state := &tfjson.State{
|
||
|
Values: &tfjson.StateValues{
|
||
|
RootModule: &tfjson.StateModule{
|
||
|
Resources: []*tfjson.StateResource{
|
||
|
{
|
||
|
Type: "databricks_pipeline",
|
||
|
AttributeValues: map[string]interface{}{
|
||
|
"id": "123",
|
||
|
},
|
||
|
Mode: tfjson.ManagedResourceMode,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
pipelineApi := m.GetMockPipelinesAPI()
|
||
|
pipelineApi.EXPECT().Get(mock.Anything, pipelines.GetPipelineRequest{
|
||
|
PipelineId: "123",
|
||
|
}).Return(nil, errors.New("API failure")).Once()
|
||
|
|
||
|
err := checkAnyResourceRunning(context.Background(), m.WorkspaceClient, state)
|
||
|
require.NoError(t, err)
|
||
|
}
|