mirror of https://github.com/databricks/cli.git
198 lines
6.2 KiB
Go
198 lines
6.2 KiB
Go
|
package mutator
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/databricks/cli/bundle"
|
||
|
"github.com/databricks/cli/bundle/config"
|
||
|
"github.com/databricks/cli/bundle/config/variable"
|
||
|
"github.com/databricks/databricks-sdk-go/service/compute"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
type MockClusterService struct{}
|
||
|
|
||
|
// ChangeOwner implements compute.ClustersService.
|
||
|
func (MockClusterService) ChangeOwner(ctx context.Context, request compute.ChangeClusterOwner) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Create implements compute.ClustersService.
|
||
|
func (MockClusterService) Create(ctx context.Context, request compute.CreateCluster) (*compute.CreateClusterResponse, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Delete implements compute.ClustersService.
|
||
|
func (MockClusterService) Delete(ctx context.Context, request compute.DeleteCluster) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Edit implements compute.ClustersService.
|
||
|
func (MockClusterService) Edit(ctx context.Context, request compute.EditCluster) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Events implements compute.ClustersService.
|
||
|
func (MockClusterService) Events(ctx context.Context, request compute.GetEvents) (*compute.GetEventsResponse, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Get implements compute.ClustersService.
|
||
|
func (MockClusterService) Get(ctx context.Context, request compute.GetClusterRequest) (*compute.ClusterDetails, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// GetPermissionLevels implements compute.ClustersService.
|
||
|
func (MockClusterService) GetPermissionLevels(ctx context.Context, request compute.GetClusterPermissionLevelsRequest) (*compute.GetClusterPermissionLevelsResponse, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// GetPermissions implements compute.ClustersService.
|
||
|
func (MockClusterService) GetPermissions(ctx context.Context, request compute.GetClusterPermissionsRequest) (*compute.ClusterPermissions, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// List implements compute.ClustersService.
|
||
|
func (MockClusterService) List(ctx context.Context, request compute.ListClustersRequest) (*compute.ListClustersResponse, error) {
|
||
|
return &compute.ListClustersResponse{
|
||
|
Clusters: []compute.ClusterDetails{
|
||
|
{ClusterId: "1234-5678-abcd", ClusterName: "Some Custom Cluster"},
|
||
|
{ClusterId: "9876-5432-xywz", ClusterName: "Some Other Name"},
|
||
|
},
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
// ListNodeTypes implements compute.ClustersService.
|
||
|
func (MockClusterService) ListNodeTypes(ctx context.Context) (*compute.ListNodeTypesResponse, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// ListZones implements compute.ClustersService.
|
||
|
func (MockClusterService) ListZones(ctx context.Context) (*compute.ListAvailableZonesResponse, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// PermanentDelete implements compute.ClustersService.
|
||
|
func (MockClusterService) PermanentDelete(ctx context.Context, request compute.PermanentDeleteCluster) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Pin implements compute.ClustersService.
|
||
|
func (MockClusterService) Pin(ctx context.Context, request compute.PinCluster) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Resize implements compute.ClustersService.
|
||
|
func (MockClusterService) Resize(ctx context.Context, request compute.ResizeCluster) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Restart implements compute.ClustersService.
|
||
|
func (MockClusterService) Restart(ctx context.Context, request compute.RestartCluster) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// SetPermissions implements compute.ClustersService.
|
||
|
func (MockClusterService) SetPermissions(ctx context.Context, request compute.ClusterPermissionsRequest) (*compute.ClusterPermissions, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// SparkVersions implements compute.ClustersService.
|
||
|
func (MockClusterService) SparkVersions(ctx context.Context) (*compute.GetSparkVersionsResponse, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Start implements compute.ClustersService.
|
||
|
func (MockClusterService) Start(ctx context.Context, request compute.StartCluster) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Unpin implements compute.ClustersService.
|
||
|
func (MockClusterService) Unpin(ctx context.Context, request compute.UnpinCluster) error {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// UpdatePermissions implements compute.ClustersService.
|
||
|
func (MockClusterService) UpdatePermissions(ctx context.Context, request compute.ClusterPermissionsRequest) (*compute.ClusterPermissions, error) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
func TestResolveClusterReference(t *testing.T) {
|
||
|
clusterRef1 := "Some Custom Cluster"
|
||
|
clusterRef2 := "Some Other Name"
|
||
|
justString := "random string"
|
||
|
b := &bundle.Bundle{
|
||
|
Config: config.Root{
|
||
|
Variables: map[string]*variable.Variable{
|
||
|
"my-cluster-id-1": {
|
||
|
Lookup: &variable.Lookup{
|
||
|
Cluster: clusterRef1,
|
||
|
},
|
||
|
},
|
||
|
"my-cluster-id-2": {
|
||
|
Lookup: &variable.Lookup{
|
||
|
Cluster: clusterRef2,
|
||
|
},
|
||
|
},
|
||
|
"some-variable": {
|
||
|
Value: &justString,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
b.WorkspaceClient().Clusters.WithImpl(MockClusterService{})
|
||
|
|
||
|
err := bundle.Apply(context.Background(), b, ResolveResourceReferences())
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, "1234-5678-abcd", *b.Config.Variables["my-cluster-id-1"].Value)
|
||
|
require.Equal(t, "9876-5432-xywz", *b.Config.Variables["my-cluster-id-2"].Value)
|
||
|
}
|
||
|
|
||
|
func TestResolveNonExistentClusterReference(t *testing.T) {
|
||
|
clusterRef := "Random"
|
||
|
justString := "random string"
|
||
|
b := &bundle.Bundle{
|
||
|
Config: config.Root{
|
||
|
Variables: map[string]*variable.Variable{
|
||
|
"my-cluster-id": {
|
||
|
Lookup: &variable.Lookup{
|
||
|
Cluster: clusterRef,
|
||
|
},
|
||
|
},
|
||
|
"some-variable": {
|
||
|
Value: &justString,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
b.WorkspaceClient().Clusters.WithImpl(MockClusterService{})
|
||
|
|
||
|
err := bundle.Apply(context.Background(), b, ResolveResourceReferences())
|
||
|
require.ErrorContains(t, err, "failed to resolve cluster: Random, err: ClusterDetails named 'Random' does not exist")
|
||
|
}
|
||
|
|
||
|
func TestNoLookupIfVariableIsSet(t *testing.T) {
|
||
|
clusterRef := "donotexist"
|
||
|
b := &bundle.Bundle{
|
||
|
Config: config.Root{
|
||
|
Variables: map[string]*variable.Variable{
|
||
|
"my-cluster-id": {
|
||
|
Lookup: &variable.Lookup{
|
||
|
Cluster: clusterRef,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
b.WorkspaceClient().Clusters.WithImpl(MockClusterService{})
|
||
|
b.Config.Variables["my-cluster-id"].Set("random value")
|
||
|
|
||
|
err := bundle.Apply(context.Background(), b, ResolveResourceReferences())
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, "random value", *b.Config.Variables["my-cluster-id"].Value)
|
||
|
}
|