databricks-cli/libs/dbr/detect_test.go

84 lines
1.9 KiB
Go
Raw Permalink Normal View History

package dbr
import (
"context"
"io/fs"
"runtime"
"testing"
"github.com/databricks/cli/libs/env"
"github.com/databricks/cli/libs/fakefs"
"github.com/stretchr/testify/assert"
)
func requireLinux(t *testing.T) {
if runtime.GOOS != "linux" {
t.Skipf("skipping test on %s", runtime.GOOS)
}
}
func configureStatFunc(t *testing.T, fi fs.FileInfo, err error) {
originalFunc := statFunc
statFunc = func(name string) (fs.FileInfo, error) {
assert.Equal(t, "/databricks", name)
return fi, err
}
t.Cleanup(func() {
statFunc = originalFunc
})
}
func TestDetect_NotLinux(t *testing.T) {
if runtime.GOOS == "linux" {
t.Skip("skipping test on Linux OS")
}
ctx := context.Background()
assert.False(t, detect(ctx))
}
func TestDetect_Env(t *testing.T) {
requireLinux(t)
// Configure other checks to pass.
configureStatFunc(t, fakefs.FileInfo{FakeDir: true}, nil)
t.Run("empty", func(t *testing.T) {
ctx := env.Set(context.Background(), "DATABRICKS_RUNTIME_VERSION", "")
assert.False(t, detect(ctx))
})
t.Run("non-empty cluster", func(t *testing.T) {
ctx := env.Set(context.Background(), "DATABRICKS_RUNTIME_VERSION", "15.4")
assert.True(t, detect(ctx))
})
t.Run("non-empty serverless", func(t *testing.T) {
ctx := env.Set(context.Background(), "DATABRICKS_RUNTIME_VERSION", "client.1.13")
assert.True(t, detect(ctx))
})
}
func TestDetect_Stat(t *testing.T) {
requireLinux(t)
// Configure other checks to pass.
ctx := env.Set(context.Background(), "DATABRICKS_RUNTIME_VERSION", "non-empty")
t.Run("error", func(t *testing.T) {
configureStatFunc(t, nil, fs.ErrNotExist)
assert.False(t, detect(ctx))
})
t.Run("not a directory", func(t *testing.T) {
configureStatFunc(t, fakefs.FileInfo{}, nil)
assert.False(t, detect(ctx))
})
t.Run("directory", func(t *testing.T) {
configureStatFunc(t, fakefs.FileInfo{FakeDir: true}, nil)
assert.True(t, detect(ctx))
})
}