(t *testing.T)
| 46 | } |
| 47 | |
| 48 | func 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 | |
| 99 | func TestRenameOnWindows(t *testing.T) { |
| 100 | testy.SkipUnreliable(t) |
nothing calls this directly
no test coverage detected
searching dependent graphs…