github.com/databricks/cli@v0.203.0/internal/fs_ls_test.go (about) 1 package internal 2 3 import ( 4 "context" 5 "encoding/json" 6 "io/fs" 7 "path" 8 "regexp" 9 "strings" 10 "testing" 11 12 _ "github.com/databricks/cli/cmd/fs" 13 "github.com/databricks/cli/libs/filer" 14 "github.com/databricks/databricks-sdk-go" 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17 ) 18 19 func TestAccFsLsForDbfs(t *testing.T) { 20 t.Log(GetEnvOrSkipTest(t, "CLOUD_ENV")) 21 22 ctx := context.Background() 23 w, err := databricks.NewWorkspaceClient() 24 require.NoError(t, err) 25 26 tmpDir := temporaryDbfsDir(t, w) 27 28 f, err := filer.NewDbfsClient(w, tmpDir) 29 require.NoError(t, err) 30 31 err = f.Mkdir(ctx, "a") 32 require.NoError(t, err) 33 err = f.Write(ctx, "a/hello.txt", strings.NewReader("abc"), filer.CreateParentDirectories) 34 require.NoError(t, err) 35 err = f.Write(ctx, "bye.txt", strings.NewReader("def")) 36 require.NoError(t, err) 37 38 stdout, stderr := RequireSuccessfulRun(t, "fs", "ls", "dbfs:"+tmpDir, "--output=json") 39 assert.Equal(t, "", stderr.String()) 40 var parsedStdout []map[string]any 41 err = json.Unmarshal(stdout.Bytes(), &parsedStdout) 42 require.NoError(t, err) 43 44 // assert on ls output 45 assert.Len(t, parsedStdout, 2) 46 assert.Equal(t, "a", parsedStdout[0]["name"]) 47 assert.Equal(t, true, parsedStdout[0]["is_directory"]) 48 assert.Equal(t, float64(0), parsedStdout[0]["size"]) 49 assert.Equal(t, "bye.txt", parsedStdout[1]["name"]) 50 assert.Equal(t, false, parsedStdout[1]["is_directory"]) 51 assert.Equal(t, float64(3), parsedStdout[1]["size"]) 52 } 53 54 func TestAccFsLsForDbfsWithAbsolutePaths(t *testing.T) { 55 t.Log(GetEnvOrSkipTest(t, "CLOUD_ENV")) 56 57 ctx := context.Background() 58 w, err := databricks.NewWorkspaceClient() 59 require.NoError(t, err) 60 61 tmpDir := temporaryDbfsDir(t, w) 62 63 f, err := filer.NewDbfsClient(w, tmpDir) 64 require.NoError(t, err) 65 66 err = f.Mkdir(ctx, "a") 67 require.NoError(t, err) 68 err = f.Write(ctx, "a/hello.txt", strings.NewReader("abc"), filer.CreateParentDirectories) 69 require.NoError(t, err) 70 err = f.Write(ctx, "bye.txt", strings.NewReader("def")) 71 require.NoError(t, err) 72 73 stdout, stderr := RequireSuccessfulRun(t, "fs", "ls", "dbfs:"+tmpDir, "--output=json", "--absolute") 74 assert.Equal(t, "", stderr.String()) 75 var parsedStdout []map[string]any 76 err = json.Unmarshal(stdout.Bytes(), &parsedStdout) 77 require.NoError(t, err) 78 79 // assert on ls output 80 assert.Len(t, parsedStdout, 2) 81 assert.Equal(t, path.Join("dbfs:", tmpDir, "a"), parsedStdout[0]["name"]) 82 assert.Equal(t, true, parsedStdout[0]["is_directory"]) 83 assert.Equal(t, float64(0), parsedStdout[0]["size"]) 84 85 assert.Equal(t, path.Join("dbfs:", tmpDir, "bye.txt"), parsedStdout[1]["name"]) 86 assert.Equal(t, false, parsedStdout[1]["is_directory"]) 87 assert.Equal(t, float64(3), parsedStdout[1]["size"]) 88 } 89 90 func TestAccFsLsForDbfsOnFile(t *testing.T) { 91 t.Log(GetEnvOrSkipTest(t, "CLOUD_ENV")) 92 93 ctx := context.Background() 94 w, err := databricks.NewWorkspaceClient() 95 require.NoError(t, err) 96 97 tmpDir := temporaryDbfsDir(t, w) 98 99 f, err := filer.NewDbfsClient(w, tmpDir) 100 require.NoError(t, err) 101 102 err = f.Mkdir(ctx, "a") 103 require.NoError(t, err) 104 err = f.Write(ctx, "a/hello.txt", strings.NewReader("abc"), filer.CreateParentDirectories) 105 require.NoError(t, err) 106 107 _, _, err = RequireErrorRun(t, "fs", "ls", "dbfs:"+path.Join(tmpDir, "a", "hello.txt"), "--output=json") 108 assert.Regexp(t, regexp.MustCompile("not a directory: .*/a/hello.txt"), err.Error()) 109 } 110 111 func TestAccFsLsForDbfsOnEmptyDir(t *testing.T) { 112 t.Log(GetEnvOrSkipTest(t, "CLOUD_ENV")) 113 114 w, err := databricks.NewWorkspaceClient() 115 require.NoError(t, err) 116 117 tmpDir := temporaryDbfsDir(t, w) 118 119 stdout, stderr := RequireSuccessfulRun(t, "fs", "ls", "dbfs:"+tmpDir, "--output=json") 120 assert.Equal(t, "", stderr.String()) 121 var parsedStdout []map[string]any 122 err = json.Unmarshal(stdout.Bytes(), &parsedStdout) 123 require.NoError(t, err) 124 125 // assert on ls output 126 assert.Equal(t, 0, len(parsedStdout)) 127 } 128 129 func TestAccFsLsForDbfsForNonexistingDir(t *testing.T) { 130 t.Log(GetEnvOrSkipTest(t, "CLOUD_ENV")) 131 132 _, _, err := RequireErrorRun(t, "fs", "ls", "dbfs:/john-cena", "--output=json") 133 assert.ErrorIs(t, err, fs.ErrNotExist) 134 } 135 136 func TestAccFsLsWithoutScheme(t *testing.T) { 137 t.Log(GetEnvOrSkipTest(t, "CLOUD_ENV")) 138 139 _, _, err := RequireErrorRun(t, "fs", "ls", "/ray-mysterio", "--output=json") 140 assert.ErrorIs(t, err, fs.ErrNotExist) 141 }