110 lines
2.8 KiB
Go
110 lines
2.8 KiB
Go
package version
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"runtime"
|
|
"testing"
|
|
|
|
"github.com/ncw/rclone/cmd"
|
|
"github.com/ncw/rclone/fs/config"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestVersionWorksWithoutAccessibleConfigFile(t *testing.T) {
|
|
// create temp config file
|
|
tempFile, err := ioutil.TempFile("", "unreadable_config.conf")
|
|
assert.NoError(t, err)
|
|
path := tempFile.Name()
|
|
defer func() {
|
|
err := os.Remove(path)
|
|
assert.NoError(t, err)
|
|
}()
|
|
assert.NoError(t, tempFile.Close())
|
|
if runtime.GOOS != "windows" {
|
|
assert.NoError(t, os.Chmod(path, 0000))
|
|
}
|
|
// re-wire
|
|
oldOsStdout := os.Stdout
|
|
oldConfigPath := config.ConfigPath
|
|
config.ConfigPath = path
|
|
os.Stdout = nil
|
|
defer func() {
|
|
os.Stdout = oldOsStdout
|
|
config.ConfigPath = oldConfigPath
|
|
}()
|
|
|
|
cmd.Root.SetArgs([]string{"version"})
|
|
assert.NotPanics(t, func() {
|
|
assert.NoError(t, cmd.Root.Execute())
|
|
})
|
|
|
|
// This causes rclone to exit and the tests to stop!
|
|
// cmd.Root.SetArgs([]string{"--version"})
|
|
// assert.NotPanics(t, func() {
|
|
// assert.NoError(t, cmd.Root.Execute())
|
|
// })
|
|
}
|
|
|
|
func TestVersionNew(t *testing.T) {
|
|
for _, test := range []struct {
|
|
in string
|
|
want version
|
|
wantErr bool
|
|
}{
|
|
{"v1.41", version{1, 41}, false},
|
|
{"rclone v1.41", version{1, 41}, false},
|
|
{"rclone v1.41.23", version{1, 41, 23}, false},
|
|
{"rclone v1.41.23-100", version{1, 41, 23, 100}, false},
|
|
{"rclone v1.41-100", version{1, 41, 0, 100}, false},
|
|
{"rclone v1.41.23-100-g12312a", version{1, 41, 23, 100}, false},
|
|
{"rclone v1.41-100-g12312a", version{1, 41, 0, 100}, false},
|
|
{"rclone v1.42-005-g56e1e820β", version{1, 42, 0, 5}, false},
|
|
{"rclone v1.42-005-g56e1e820-feature-branchβ", version{1, 42, 0, 5}, false},
|
|
|
|
{"v1.41s", nil, true},
|
|
{"rclone v1-41", nil, true},
|
|
{"rclone v1.41.2c3", nil, true},
|
|
{"rclone v1.41.23-100 potato", nil, true},
|
|
{"rclone 1.41-100", nil, true},
|
|
{"rclone v1.41.23-100-12312a", nil, true},
|
|
} {
|
|
what := fmt.Sprintf("in=%q", test.in)
|
|
got, err := newVersion(test.in)
|
|
if test.wantErr {
|
|
assert.Error(t, err, what)
|
|
} else {
|
|
assert.NoError(t, err, what)
|
|
}
|
|
assert.Equal(t, test.want, got, what)
|
|
}
|
|
|
|
}
|
|
|
|
func TestVersionCmp(t *testing.T) {
|
|
for _, test := range []struct {
|
|
a, b version
|
|
want int
|
|
}{
|
|
{version{1}, version{1}, 0},
|
|
{version{1}, version{2}, -1},
|
|
{version{2}, version{1}, 1},
|
|
{version{2}, version{2, 1}, -1},
|
|
{version{2, 1}, version{2}, 1},
|
|
{version{2, 1}, version{2, 1}, 0},
|
|
{version{2, 1}, version{2, 2}, -1},
|
|
{version{2, 2}, version{2, 1}, 1},
|
|
} {
|
|
got := test.a.cmp(test.b)
|
|
if got < 0 {
|
|
got = -1
|
|
} else if got > 0 {
|
|
got = 1
|
|
}
|
|
assert.Equal(t, test.want, got, fmt.Sprintf("%v cmp %v", test.a, test.b))
|
|
// test the reverse
|
|
got = -test.b.cmp(test.a)
|
|
assert.Equal(t, test.want, got, fmt.Sprintf("%v cmp %v", test.b, test.a))
|
|
}
|
|
}
|