Skip to content

Commit f813e3f

Browse files
committed
Add cloud-only acceptance tests for ssh tunnel
1 parent 6afa56c commit f813e3f

File tree

5 files changed

+85
-5
lines changed

5 files changed

+85
-5
lines changed

acceptance/acceptance_test.go

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func testAccept(t *testing.T, inprocessMode bool, singleTest string) int {
163163
}
164164

165165
// Download terraform and provider and create config.
166-
RunCommand(t, []string{"python3", filepath.Join(cwd, "install_terraform.py"), "--targetdir", terraformDir}, ".")
166+
RunCommand(t, []string{"python3", filepath.Join(cwd, "install_terraform.py"), "--targetdir", terraformDir}, ".", []string{})
167167

168168
wheelPath := buildDatabricksBundlesWheel(t, buildDir)
169169
if wheelPath != "" {
@@ -234,6 +234,12 @@ func testAccept(t *testing.T, inprocessMode bool, singleTest string) int {
234234
}
235235
}
236236

237+
if cloudEnv != "" && UseVersion == "" {
238+
// Create linux release artifacts, to be used by the cloud-only ssh tunnel tests
239+
releasesDir := CreateReleaseArtifacts(t, cwd, "linux")
240+
t.Setenv("CLI_RELEASES_DIR", releasesDir)
241+
}
242+
237243
testDefaultWarehouseId := os.Getenv("TEST_DEFAULT_WAREHOUSE_ID")
238244
if testDefaultWarehouseId != "" {
239245
repls.Set(testDefaultWarehouseId, "[TEST_DEFAULT_WAREHOUSE_ID]")
@@ -899,10 +905,62 @@ func BuildCLI(t *testing.T, buildDir, coverDir string) string {
899905
args = append(args, "-buildvcs=false")
900906
}
901907

902-
RunCommand(t, args, "..")
908+
RunCommand(t, args, "..", []string{})
903909
return execPath
904910
}
905911

912+
// CreateReleaseArtifacts builds release artifacts for the given OS using amd64 and arm64 architectures,
913+
// archives them into zip files, and returns the directory containing the release artifacts.
914+
func CreateReleaseArtifacts(t *testing.T, cwd, osName string) string {
915+
releasesDir := filepath.Join(cwd, "build", "releases")
916+
require.NoError(t, os.MkdirAll(releasesDir, os.ModePerm))
917+
arches := []string{"amd64", "arm64"}
918+
for _, arch := range arches {
919+
CreateReleaseArtifact(t, cwd, releasesDir, osName, arch)
920+
}
921+
return releasesDir
922+
}
923+
924+
func CreateReleaseArtifact(t *testing.T, cwd, releasesDir, osName, arch string) {
925+
tempBuildDir := filepath.Join(releasesDir, "tmp_"+arch)
926+
require.NoError(t, os.MkdirAll(tempBuildDir, os.ModePerm))
927+
defer os.RemoveAll(tempBuildDir)
928+
929+
execPath := filepath.Join(tempBuildDir, "databricks")
930+
args := []string{"go", "build", "-o", execPath}
931+
RunCommand(t, args, "..", []string{"GOOS=" + osName, "GOARCH=" + arch})
932+
933+
zipName := fmt.Sprintf("databricks_cli_%s_%s.zip", osName, arch)
934+
zipPath := filepath.Join(releasesDir, zipName)
935+
936+
zipFile, err := os.Create(zipPath)
937+
require.NoError(t, err)
938+
defer zipFile.Close()
939+
940+
zipWriter := zip.NewWriter(zipFile)
941+
defer zipWriter.Close()
942+
943+
info, err := os.Stat(execPath)
944+
require.NoError(t, err)
945+
946+
header, err := zip.FileInfoHeader(info)
947+
require.NoError(t, err)
948+
header.Name = "databricks"
949+
header.Method = zip.Deflate
950+
951+
writer, err := zipWriter.CreateHeader(header)
952+
require.NoError(t, err)
953+
954+
binaryFile, err := os.Open(execPath)
955+
require.NoError(t, err)
956+
defer binaryFile.Close()
957+
958+
_, err = io.Copy(writer, binaryFile)
959+
require.NoError(t, err)
960+
961+
t.Logf("Created %s %s release: %s", osName, arch, zipPath)
962+
}
963+
906964
// DownloadCLI downloads a released CLI binary archive for the given version,
907965
// extracts the executable, and returns its path.
908966
func DownloadCLI(t *testing.T, buildDir, version string) string {
@@ -1123,10 +1181,11 @@ func getUVDefaultCacheDir(t *testing.T) string {
11231181
}
11241182
}
11251183

1126-
func RunCommand(t *testing.T, args []string, dir string) {
1184+
func RunCommand(t *testing.T, args []string, dir string, env []string) {
11271185
start := time.Now()
11281186
cmd := exec.Command(args[0], args[1:]...)
11291187
cmd.Dir = dir
1188+
cmd.Env = append(os.Environ(), env...)
11301189
out, err := cmd.CombinedOutput()
11311190
elapsed := time.Since(start)
11321191
t.Logf("%s took %s", args, elapsed)
@@ -1248,7 +1307,7 @@ func buildDatabricksBundlesWheel(t *testing.T, buildDir string) string {
12481307
// so we prepare here by keeping only one.
12491308
_ = prepareWheelBuildDirectory(t, buildDir)
12501309

1251-
RunCommand(t, []string{"uv", "build", "--no-cache", "-q", "--wheel", "--out-dir", buildDir}, "../experimental/python")
1310+
RunCommand(t, []string{"uv", "build", "--no-cache", "-q", "--wheel", "--out-dir", buildDir}, "../experimental/python", []string{})
12521311

12531312
latestWheel := prepareWheelBuildDirectory(t, buildDir)
12541313
if latestWheel == "" {
@@ -1376,7 +1435,7 @@ func BuildYamlfmt(t *testing.T) {
13761435
args := []string{
13771436
"make", "-s", "tools/yamlfmt" + exeSuffix,
13781437
}
1379-
RunCommand(t, args, "..")
1438+
RunCommand(t, args, "..", []string{})
13801439
}
13811440

13821441
func loadUserReplacements(t *testing.T, repls *testdiff.ReplacementsContext, tmpDir string) {

acceptance/ssh/connection/out.test.toml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Connection successful

acceptance/ssh/connection/script

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
errcode $CLI ssh connect --cluster=$TEST_DEFAULT_CLUSTER_ID --releases-dir=$CLI_RELEASES_DIR -- "echo 'Connection successful'" >LOG.stdout 2>LOG.stderr
2+
3+
cat LOG.stdout
4+
5+
if ! grep -q "Connection successful" LOG.stdout; then
6+
run_id=$(cat LOG.stderr | grep -o "Job submitted successfully with run ID: [0-9]*" | grep -o "[0-9]*$")
7+
trace $CLI jobs get-run "$run_id" > LOG.job
8+
fi
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Local = false
2+
Cloud = true
3+
RequiresCluster = true
4+
5+
[EnvMatrix]
6+
DATABRICKS_BUNDLE_ENGINE = ["direct-exp"]

0 commit comments

Comments
 (0)