test: move test commands under "rclone test" and make them visible

This commit is contained in:
Nick Craig-Wood 2020-08-08 18:02:18 +01:00
parent fd94b3a473
commit f88a5542cf
10 changed files with 60 additions and 18 deletions

View File

@ -333,8 +333,8 @@ Getting going
* Try to implement as many optional methods as possible as it makes the remote more usable. * Try to implement as many optional methods as possible as it makes the remote more usable.
* Use lib/encoder to make sure we can encode any path name and `rclone info` to help determine the encodings needed * Use lib/encoder to make sure we can encode any path name and `rclone info` to help determine the encodings needed
* `rclone purge -v TestRemote:rclone-info` * `rclone purge -v TestRemote:rclone-info`
* `rclone info --remote-encoding None -vv --write-json remote.json TestRemote:rclone-info` * `rclone test info --all --remote-encoding None -vv --write-json remote.json TestRemote:rclone-info`
* `go run cmd/info/internal/build_csv/main.go -o remote.csv remote.json` * `go run cmd/test/info/internal/build_csv/main.go -o remote.csv remote.json`
* open `remote.csv` in a spreadsheet and examine * open `remote.csv` in a spreadsheet and examine
Unit tests Unit tests

View File

@ -25,7 +25,6 @@ import (
_ "github.com/rclone/rclone/cmd/genautocomplete" _ "github.com/rclone/rclone/cmd/genautocomplete"
_ "github.com/rclone/rclone/cmd/gendocs" _ "github.com/rclone/rclone/cmd/gendocs"
_ "github.com/rclone/rclone/cmd/hashsum" _ "github.com/rclone/rclone/cmd/hashsum"
_ "github.com/rclone/rclone/cmd/info"
_ "github.com/rclone/rclone/cmd/link" _ "github.com/rclone/rclone/cmd/link"
_ "github.com/rclone/rclone/cmd/listremotes" _ "github.com/rclone/rclone/cmd/listremotes"
_ "github.com/rclone/rclone/cmd/ls" _ "github.com/rclone/rclone/cmd/ls"
@ -34,7 +33,6 @@ import (
_ "github.com/rclone/rclone/cmd/lsjson" _ "github.com/rclone/rclone/cmd/lsjson"
_ "github.com/rclone/rclone/cmd/lsl" _ "github.com/rclone/rclone/cmd/lsl"
_ "github.com/rclone/rclone/cmd/md5sum" _ "github.com/rclone/rclone/cmd/md5sum"
_ "github.com/rclone/rclone/cmd/memtest"
_ "github.com/rclone/rclone/cmd/mkdir" _ "github.com/rclone/rclone/cmd/mkdir"
_ "github.com/rclone/rclone/cmd/mount" _ "github.com/rclone/rclone/cmd/mount"
_ "github.com/rclone/rclone/cmd/mount2" _ "github.com/rclone/rclone/cmd/mount2"
@ -54,6 +52,9 @@ import (
_ "github.com/rclone/rclone/cmd/sha1sum" _ "github.com/rclone/rclone/cmd/sha1sum"
_ "github.com/rclone/rclone/cmd/size" _ "github.com/rclone/rclone/cmd/size"
_ "github.com/rclone/rclone/cmd/sync" _ "github.com/rclone/rclone/cmd/sync"
_ "github.com/rclone/rclone/cmd/test"
_ "github.com/rclone/rclone/cmd/test/info"
_ "github.com/rclone/rclone/cmd/test/memory"
_ "github.com/rclone/rclone/cmd/touch" _ "github.com/rclone/rclone/cmd/touch"
_ "github.com/rclone/rclone/cmd/tree" _ "github.com/rclone/rclone/cmd/tree"
_ "github.com/rclone/rclone/cmd/version" _ "github.com/rclone/rclone/cmd/version"

View File

@ -1,7 +1,7 @@
package info package info
// FIXME once translations are implemented will need a no-escape // FIXME once translations are implemented will need a no-escape
// option for Put so we can make these tests work agaig // option for Put so we can make these tests work again
import ( import (
"bytes" "bytes"
@ -9,6 +9,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"log"
"os" "os"
"path" "path"
"regexp" "regexp"
@ -20,7 +21,8 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/rclone/rclone/cmd" "github.com/rclone/rclone/cmd"
"github.com/rclone/rclone/cmd/info/internal" "github.com/rclone/rclone/cmd/test"
"github.com/rclone/rclone/cmd/test/info/internal"
"github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs"
"github.com/rclone/rclone/fs/config/flags" "github.com/rclone/rclone/fs/config/flags"
"github.com/rclone/rclone/fs/hash" "github.com/rclone/rclone/fs/hash"
@ -35,6 +37,7 @@ var (
checkControl bool checkControl bool
checkLength bool checkLength bool
checkStreaming bool checkStreaming bool
all bool
uploadWait time.Duration uploadWait time.Duration
positionLeftRe = regexp.MustCompile(`(?s)^(.*)-position-left-([[:xdigit:]]+)$`) positionLeftRe = regexp.MustCompile(`(?s)^(.*)-position-left-([[:xdigit:]]+)$`)
positionMiddleRe = regexp.MustCompile(`(?s)^position-middle-([[:xdigit:]]+)-(.*)-$`) positionMiddleRe = regexp.MustCompile(`(?s)^position-middle-([[:xdigit:]]+)-(.*)-$`)
@ -42,14 +45,15 @@ var (
) )
func init() { func init() {
cmd.Root.AddCommand(commandDefinition) test.Command.AddCommand(commandDefinition)
cmdFlags := commandDefinition.Flags() cmdFlags := commandDefinition.Flags()
flags.StringVarP(cmdFlags, &writeJSON, "write-json", "", "", "Write results to file.") flags.StringVarP(cmdFlags, &writeJSON, "write-json", "", "", "Write results to file.")
flags.BoolVarP(cmdFlags, &checkNormalization, "check-normalization", "", true, "Check UTF-8 Normalization.") flags.BoolVarP(cmdFlags, &checkNormalization, "check-normalization", "", false, "Check UTF-8 Normalization.")
flags.BoolVarP(cmdFlags, &checkControl, "check-control", "", true, "Check control characters.") flags.BoolVarP(cmdFlags, &checkControl, "check-control", "", false, "Check control characters.")
flags.DurationVarP(cmdFlags, &uploadWait, "upload-wait", "", 0, "Wait after writing a file.") flags.DurationVarP(cmdFlags, &uploadWait, "upload-wait", "", 0, "Wait after writing a file.")
flags.BoolVarP(cmdFlags, &checkLength, "check-length", "", true, "Check max filename length.") flags.BoolVarP(cmdFlags, &checkLength, "check-length", "", false, "Check max filename length.")
flags.BoolVarP(cmdFlags, &checkStreaming, "check-streaming", "", true, "Check uploads with indeterminate file size.") flags.BoolVarP(cmdFlags, &checkStreaming, "check-streaming", "", false, "Check uploads with indeterminate file size.")
flags.BoolVarP(cmdFlags, &all, "all", "", false, "Run all tests.")
} }
var commandDefinition = &cobra.Command{ var commandDefinition = &cobra.Command{
@ -59,10 +63,20 @@ var commandDefinition = &cobra.Command{
to write to the paths passed in and how long they can be. It can take some to write to the paths passed in and how long they can be. It can take some
time. It will write test files into the remote:path passed in. It outputs time. It will write test files into the remote:path passed in. It outputs
a bit of go code for each one. a bit of go code for each one.
**NB** this can create undeletable files and other hazards - use with care
`, `,
Hidden: true,
Run: func(command *cobra.Command, args []string) { Run: func(command *cobra.Command, args []string) {
cmd.CheckArgs(1, 1e6, command, args) cmd.CheckArgs(1, 1e6, command, args)
if !checkNormalization && !checkControl && !checkLength && !checkStreaming && !all {
log.Fatalf("no tests selected - select a test or use -all")
}
if all {
checkNormalization = true
checkControl = true
checkLength = true
checkStreaming = true
}
for i := range args { for i := range args {
f := cmd.NewFsDir(args[i : i+1]) f := cmd.NewFsDir(args[i : i+1])
cmd.Run(false, false, command, func() error { cmd.Run(false, false, command, func() error {

View File

@ -11,7 +11,7 @@ import (
"sort" "sort"
"strconv" "strconv"
"github.com/rclone/rclone/cmd/info/internal" "github.com/rclone/rclone/cmd/test/info/internal"
) )
func main() { func main() {

View File

@ -1,4 +1,4 @@
package memtest package memory
import ( import (
"context" "context"
@ -6,19 +6,19 @@ import (
"sync" "sync"
"github.com/rclone/rclone/cmd" "github.com/rclone/rclone/cmd"
"github.com/rclone/rclone/cmd/test"
"github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs"
"github.com/rclone/rclone/fs/operations" "github.com/rclone/rclone/fs/operations"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
func init() { func init() {
cmd.Root.AddCommand(commandDefinition) test.Command.AddCommand(commandDefinition)
} }
var commandDefinition = &cobra.Command{ var commandDefinition = &cobra.Command{
Use: "memtest remote:path", Use: "memory remote:path",
Short: `Load all the objects at remote:path and report memory stats.`, Short: `Load all the objects at remote:path into memory and report memory stats.`,
Hidden: true,
Run: func(command *cobra.Command, args []string) { Run: func(command *cobra.Command, args []string) {
cmd.CheckArgs(1, 1, command, args) cmd.CheckArgs(1, 1, command, args)
fsrc := cmd.NewFsSrc(args) fsrc := cmd.NewFsSrc(args)

27
cmd/test/test.go Normal file
View File

@ -0,0 +1,27 @@
package test
import (
"github.com/rclone/rclone/cmd"
"github.com/spf13/cobra"
)
func init() {
cmd.Root.AddCommand(Command)
}
// Command definition for cobra
var Command = &cobra.Command{
Use: "test <subcommand>",
Short: `Run a test command`,
Long: `Rclone test is used to run test commands.
Select which test comand you want with the subcommand, eg
rclone test memory remote:
Each subcommand has its own options which you can see in their help.
**NB** Be careful running these commands, they may do strange things
so reading their documentation first is recommended.
`,
}