mirror of https://github.com/databricks/cli.git
114 lines
3.1 KiB
Go
114 lines
3.1 KiB
Go
|
package apps
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"context"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/databricks/cli/bundle"
|
||
|
"github.com/databricks/cli/bundle/config"
|
||
|
"github.com/databricks/cli/bundle/config/mutator"
|
||
|
"github.com/databricks/cli/bundle/config/resources"
|
||
|
"github.com/databricks/cli/bundle/internal/bundletest"
|
||
|
mockfiler "github.com/databricks/cli/internal/mocks/libs/filer"
|
||
|
"github.com/databricks/cli/libs/dyn"
|
||
|
"github.com/databricks/cli/libs/filer"
|
||
|
"github.com/databricks/cli/libs/vfs"
|
||
|
"github.com/databricks/databricks-sdk-go/experimental/mocks"
|
||
|
"github.com/databricks/databricks-sdk-go/service/apps"
|
||
|
"github.com/stretchr/testify/mock"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestAppDeploy(t *testing.T) {
|
||
|
root := t.TempDir()
|
||
|
err := os.MkdirAll(filepath.Join(root, "app1"), 0700)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
err = os.MkdirAll(filepath.Join(root, "app2"), 0700)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
b := &bundle.Bundle{
|
||
|
BundleRootPath: root,
|
||
|
SyncRoot: vfs.MustNew(root),
|
||
|
Config: config.Root{
|
||
|
Workspace: config.Workspace{
|
||
|
RootPath: "/Workspace/Users/foo@bar.com/",
|
||
|
},
|
||
|
Resources: config.Resources{
|
||
|
Apps: map[string]*resources.App{
|
||
|
"app1": {
|
||
|
App: &apps.App{
|
||
|
Name: "app1",
|
||
|
},
|
||
|
SourceCodePath: "./app1",
|
||
|
Config: map[string]interface{}{
|
||
|
"command": []string{"echo", "hello"},
|
||
|
"env": []map[string]string{
|
||
|
{"name": "MY_APP", "value": "my value"},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
"app2": {
|
||
|
App: &apps.App{
|
||
|
Name: "app2",
|
||
|
},
|
||
|
SourceCodePath: "./app2",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
mwc := mocks.NewMockWorkspaceClient(t)
|
||
|
b.SetWorkpaceClient(mwc.WorkspaceClient)
|
||
|
|
||
|
wait := &apps.WaitGetDeploymentAppSucceeded[apps.AppDeployment]{
|
||
|
Poll: func(_ time.Duration, _ func(*apps.AppDeployment)) (*apps.AppDeployment, error) {
|
||
|
return nil, nil
|
||
|
},
|
||
|
}
|
||
|
appApi := mwc.GetMockAppsAPI()
|
||
|
appApi.EXPECT().Deploy(mock.Anything, apps.CreateAppDeploymentRequest{
|
||
|
AppName: "app1",
|
||
|
AppDeployment: &apps.AppDeployment{
|
||
|
Mode: apps.AppDeploymentModeSnapshot,
|
||
|
SourceCodePath: "/Workspace/Users/foo@bar.com/files/app1",
|
||
|
},
|
||
|
}).Return(wait, nil)
|
||
|
|
||
|
appApi.EXPECT().Deploy(mock.Anything, apps.CreateAppDeploymentRequest{
|
||
|
AppName: "app2",
|
||
|
AppDeployment: &apps.AppDeployment{
|
||
|
Mode: apps.AppDeploymentModeSnapshot,
|
||
|
SourceCodePath: "/Workspace/Users/foo@bar.com/files/app2",
|
||
|
},
|
||
|
}).Return(wait, nil)
|
||
|
|
||
|
mockFiler := mockfiler.NewMockFiler(t)
|
||
|
mockFiler.EXPECT().Write(mock.Anything, "app1/app.yml", bytes.NewBufferString(`command:
|
||
|
- echo
|
||
|
- hello
|
||
|
env:
|
||
|
- name: MY_APP
|
||
|
value: my value
|
||
|
`), filer.OverwriteIfExists).Return(nil)
|
||
|
|
||
|
bundletest.SetLocation(b, "resources.apps.app1", []dyn.Location{{File: "./databricks.yml"}})
|
||
|
bundletest.SetLocation(b, "resources.apps.app2", []dyn.Location{{File: "./databricks.yml"}})
|
||
|
|
||
|
ctx := context.Background()
|
||
|
diags := bundle.Apply(ctx, b, bundle.Seq(
|
||
|
mutator.DefineDefaultWorkspacePaths(),
|
||
|
mutator.TranslatePaths(),
|
||
|
appsDeploy{
|
||
|
func(b *bundle.Bundle) (filer.Filer, error) {
|
||
|
return mockFiler, nil
|
||
|
},
|
||
|
}))
|
||
|
require.Empty(t, diags)
|
||
|
}
|