Skip to content

Commit

Permalink
Add esti tests for lakectl local with POSIX permissions (#7962)
Browse files Browse the repository at this point in the history
* Add esti tests for lakectl local with POSIX permissions

* Fix docs

* Remove temp code

* Revert docs change

* Fix tests

* Update tests
  • Loading branch information
itaigilo authored Jul 7, 2024
1 parent bf95905 commit e7e001e
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
35 changes: 35 additions & 0 deletions esti/lakectl_local_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,41 @@ func TestLakectlLocal_clone(t *testing.T) {
require.Contains(t, sanitizedResult, vars["PREFIX"]+"test2.txt")
require.NotContains(t, sanitizedResult, vars["PREFIX"]+"nodiff.txt")
})

t.Run("diff with posix permissions", func(t *testing.T) {
dataDir, err := os.MkdirTemp(tmpDir, "")
require.NoError(t, err)
vars["LOCAL_DIR"] = dataDir
vars["PREFIX"] = "posix"

lakectl := LakectlWithPosixPerms()
RunCmdAndVerifyContainsText(t, lakectl+" local clone lakefs://"+repoName+"/"+mainBranch+"/"+vars["PREFIX"]+" "+dataDir, false, "Successfully cloned lakefs://${REPO}/${REF}/${PREFIX}/ to ${LOCAL_DIR}.", vars)
localVerifyDirContents(t, dataDir, []string{})

// Add new files to path
localCreateTestData(t, vars, []string{
vars["PREFIX"] + uri.PathSeparator + "with-diff.txt",
vars["PREFIX"] + uri.PathSeparator + "no-diff.txt",
})

res := runCmd(t, lakectl+" local pull "+dataDir, false, false, vars)
require.Contains(t, res, "download with-diff.txt")
require.Contains(t, res, "download no-diff.txt")

commitMessage := "'initialize' posix permissions for the remote repo"
runCmd(t, lakectl+" local commit "+dataDir+" -m \""+commitMessage+"\"", false, false, vars)

sanitizedResult := runCmd(t, lakectl+" local status "+dataDir, false, false, vars)
require.Contains(t, sanitizedResult, "No diff found")

err = os.Chmod(filepath.Join(dataDir, "with-diff.txt"), 0755)
require.NoError(t, err)

sanitizedResult = runCmd(t, lakectl+" local status "+dataDir, false, false, vars)

require.Contains(t, sanitizedResult, "with-diff.txt")
require.NotContains(t, sanitizedResult, "no-diff.txt")
})
}

func TestLakectlLocal_pull(t *testing.T) {
Expand Down
9 changes: 9 additions & 0 deletions esti/lakectl_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,14 @@ func lakectlLocation() string {
}

func LakectlWithParams(accessKeyID, secretAccessKey, endPointURL string) string {
return LakectlWithParamsWithPosixPerms(accessKeyID, secretAccessKey, endPointURL, false)
}

func LakectlWithParamsWithPosixPerms(accessKeyID, secretAccessKey, endPointURL string, withPosixPerms bool) string {
lakectlCmdline := "LAKECTL_CREDENTIALS_ACCESS_KEY_ID=" + accessKeyID +
" LAKECTL_CREDENTIALS_SECRET_ACCESS_KEY=" + secretAccessKey +
" LAKECTL_SERVER_ENDPOINT_URL=" + endPointURL +
" LAKECTL_EXPERIMENTAL_LOCAL_POSIX_PERMISSIONS_ENABLED=" + strconv.FormatBool(withPosixPerms) +
" " + lakectlLocation()

return lakectlCmdline
Expand All @@ -53,6 +58,10 @@ func Lakectl() string {
return LakectlWithParams(viper.GetString("access_key_id"), viper.GetString("secret_access_key"), viper.GetString("endpoint_url"))
}

func LakectlWithPosixPerms() string {
return LakectlWithParamsWithPosixPerms(viper.GetString("access_key_id"), viper.GetString("secret_access_key"), viper.GetString("endpoint_url"), true)
}

func runShellCommand(t *testing.T, command string, isTerminal bool) ([]byte, error) {
t.Helper()
t.Logf("Run shell command '%s'", command)
Expand Down
3 changes: 2 additions & 1 deletion pkg/local/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,8 @@ func (s *SyncManager) upload(ctx context.Context, rootPath string, remote *uri.U
if err := fileutil.VerifySafeFilename(source); err != nil {
return err
}
dest := strings.TrimPrefix(filepath.ToSlash(fmt.Sprintf("%s%s%s", remote.GetPath(), uri.PathSeparator, path)), uri.PathSeparator)
remotePath := strings.TrimRight(remote.GetPath(), uri.PathSeparator)
dest := strings.TrimPrefix(filepath.ToSlash(fmt.Sprintf("%s%s%s", remotePath, uri.PathSeparator, path)), uri.PathSeparator)

f, err := os.Open(source)
if err != nil {
Expand Down

0 comments on commit e7e001e

Please sign in to comment.