MCPcopy
hub / github.com/rclone/rclone / TestInstallOnLinux

Function TestInstallOnLinux

cmd/selfupdate/selfupdate_test.go:48–97  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

46}
47
48func TestInstallOnLinux(t *testing.T) {
49 testy.SkipUnreliable(t)
50 if runtime.GOOS != "linux" {
51 t.Skip("this is a Linux only test")
52 }
53
54 // Prepare for test
55 ctx := context.Background()
56 testDir := t.TempDir()
57 path := filepath.Join(testDir, "rclone")
58
59 regexVer := regexp.MustCompile(`v[0-9]\S+`)
60
61 betaVer, _, err := GetVersion(ctx, true, "")
62 assert.NoError(t, err)
63
64 // Must do nothing if version isn't changing
65 assert.NoError(t, InstallUpdate(ctx, &Options{Beta: true, Output: path, Version: fs.Version}))
66
67 // Must fail on non-writable file
68 assert.NoError(t, os.WriteFile(path, []byte("test"), 0644))
69 assert.NoError(t, os.Chmod(path, 0000))
70 defer func() {
71 _ = os.Chmod(path, 0644)
72 }()
73 err = (InstallUpdate(ctx, &Options{Beta: true, Output: path}))
74 assert.Error(t, err)
75 assert.Contains(t, err.Error(), "run self-update as root")
76
77 // Must keep non-standard permissions
78 assert.NoError(t, os.Chmod(path, 0644))
79 require.NoError(t, InstallUpdate(ctx, &Options{Beta: true, Output: path}))
80
81 info, err := os.Stat(path)
82 assert.NoError(t, err)
83 assert.Equal(t, os.FileMode(0644), info.Mode().Perm())
84
85 // Must remove temporary files
86 files, err := os.ReadDir(testDir)
87 assert.NoError(t, err)
88 assert.Equal(t, 1, len(files))
89
90 // Must contain valid executable
91 assert.NoError(t, os.Chmod(path, 0755))
92 cmd := exec.Command(path, "version")
93 output, err := cmd.CombinedOutput()
94 assert.NoError(t, err)
95 assert.True(t, cmd.ProcessState.Success())
96 assert.Equal(t, betaVer, regexVer.FindString(string(output)))
97}
98
99func TestRenameOnWindows(t *testing.T) {
100 testy.SkipUnreliable(t)

Callers

nothing calls this directly

Calls 13

SkipUnreliableFunction · 0.92
InstallUpdateFunction · 0.85
JoinMethod · 0.80
ContainsMethod · 0.80
GetVersionFunction · 0.70
ChmodMethod · 0.65
ErrorMethod · 0.65
StatMethod · 0.65
ReadDirMethod · 0.65
CommandMethod · 0.65
WriteFileMethod · 0.45
EqualMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…