rclone: github.com/ncw/rclone/fstest Index | Files | Directories

package fstest

import "github.com/ncw/rclone/fstest"

Package fstest provides utilities for testing the Fs


Package Files

fstest.go run.go


var (
    RemoteName      = flag.String("remote", "", "Remote to test with, defaults to local filesystem")
    Verbose         = flag.Bool("verbose", false, "Set to enable logging")
    DumpHeaders     = flag.Bool("dump-headers", false, "Set to dump headers (needs -verbose)")
    DumpBodies      = flag.Bool("dump-bodies", false, "Set to dump bodies (needs -verbose)")
    Individual      = flag.Bool("individual", false, "Make individual bucket/container/directory for each test - much slower")
    LowLevelRetries = flag.Int("low-level-retries", 10, "Number of low level retries")
    UseListR        = flag.Bool("fast-list", false, "Use recursive list if available. Uses more memory but fewer transactions.")
    // SizeLimit signals tests to skip maximum test file size and skip inappropriate runs
    SizeLimit = flag.Int64("size-limit", 0, "Limit maximum test file size")
    // ListRetries is the number of times to retry a listing to overcome eventual consistency
    ListRetries = flag.Int("list-retries", 3, "Number or times to retry listing")
    // MatchTestRemote matches the remote names used for testing
    MatchTestRemote = regexp.MustCompile(`^rclone-test-[abcdefghijklmnopqrstuvwxyz0123456789]{24}$`)


func AssertTimeEqualWithPrecision Uses

func AssertTimeEqualWithPrecision(t *testing.T, remote string, want, got time.Time, precision time.Duration)

AssertTimeEqualWithPrecision checks that want is within precision of got, asserting that with t and logging remote

func CheckItems Uses

func CheckItems(t *testing.T, f fs.Fs, items ...Item)

CheckItems checks the fs to see if it has only the items passed in using a precision of fs.Config.ModifyWindow

func CheckListing Uses

func CheckListing(t *testing.T, f fs.Fs, items []Item)

CheckListing checks the fs to see if it has the expected contents

func CheckListingWithPrecision Uses

func CheckListingWithPrecision(t *testing.T, f fs.Fs, items []Item, expectedDirs []string, precision time.Duration)

CheckListingWithPrecision checks the fs to see if it has the expected contents with the given precision.

If expectedDirs is non nil then we check those too. Note that no directories returned is also OK as some remotes don't return directories.

func CheckListingWithRoot Uses

func CheckListingWithRoot(t *testing.T, f fs.Fs, dir string, items []Item, expectedDirs []string, precision time.Duration)

CheckListingWithRoot checks the fs to see if it has the expected contents with the given precision.

If expectedDirs is non nil then we check those too. Note that no directories returned is also OK as some remotes don't return directories.

dir is the directory used for the listing.

func CheckTimeEqualWithPrecision Uses

func CheckTimeEqualWithPrecision(t0, t1 time.Time, precision time.Duration) (time.Duration, bool)

CheckTimeEqualWithPrecision checks the times are equal within the precision, returns the delta and a flag

func CompareItems Uses

func CompareItems(t *testing.T, entries fs.DirEntries, items []Item, expectedDirs []string, precision time.Duration, what string)

CompareItems compares a set of DirEntries to a slice of items and a list of dirs The modtimes are compared with the precision supplied

func Initialise Uses

func Initialise()

Initialise rclone for testing

func LocalRemote Uses

func LocalRemote() (path string, err error)

LocalRemote creates a temporary directory name for local remotes

func Normalize Uses

func Normalize(name string) string

Normalize runs a utf8 normalization on the string if running on OS X. This is because OS X denormalizes file names it writes to the local file system.

func Purge Uses

func Purge(f fs.Fs)

Purge is a simplified re-implementation of operations.Purge for the test routine cleanup to avoid circular dependencies.

It logs errors rather than returning them

func RandomRemote Uses

func RandomRemote() (fs.Fs, string, func(), error)

RandomRemote makes a random bucket or subdirectory on the remote from the -remote parameter

Call the finalise function returned to Purge the fs at the end (and the parent if necessary)

Returns the remote, its url, a finaliser and an error

func RandomRemoteName Uses

func RandomRemoteName(remoteName string) (string, string, error)

RandomRemoteName makes a random bucket or subdirectory name

Returns a random remote name plus the leaf name

func TestMain Uses

func TestMain(m *testing.M)

TestMain drives the tests

func Time Uses

func Time(timeString string) time.Time

Time parses a time string or logs a fatal error

type Item Uses

type Item struct {
    Path    string
    Hashes  map[hash.Type]string
    ModTime time.Time
    Size    int64

Item represents an item for checking

func NewItem Uses

func NewItem(Path, Content string, modTime time.Time) Item

NewItem creates an item from a string content

func (*Item) Check Uses

func (i *Item) Check(t *testing.T, obj fs.Object, precision time.Duration)

Check checks all the attributes of the object are correct

func (*Item) CheckHashes Uses

func (i *Item) CheckHashes(t *testing.T, obj fs.Object)

CheckHashes checks all the hashes the object supports are correct

func (*Item) CheckModTime Uses

func (i *Item) CheckModTime(t *testing.T, obj fs.Object, modTime time.Time, precision time.Duration)

CheckModTime checks the mod time to the given precision

type Items Uses

type Items struct {
    // contains filtered or unexported fields

Items represents all items for checking

func NewItems Uses

func NewItems(items []Item) *Items

NewItems makes an Items

func (*Items) Done Uses

func (is *Items) Done(t *testing.T)

Done checks all finished

func (*Items) Find Uses

func (is *Items) Find(t *testing.T, obj fs.Object, precision time.Duration)

Find checks off an item

type Run Uses

type Run struct {
    LocalName   string
    Flocal      fs.Fs
    Fremote     fs.Fs
    FremoteName string

    Logf, Fatalf func(text string, args ...interface{})
    // contains filtered or unexported fields

Run holds the remotes for a test run

func NewRun Uses

func NewRun(t *testing.T) *Run

NewRun initialise the remote and local for testing and returns a run object. Call this from the tests.

r.Flocal is an empty local Fs r.Fremote is an empty remote Fs

Finalise() will tidy them away when done.

func NewRunIndividual Uses

func NewRunIndividual(t *testing.T) *Run

NewRunIndividual as per NewRun but makes an individual remote for this test

func (*Run) CheckWithDuplicates Uses

func (r *Run) CheckWithDuplicates(t *testing.T, items ...Item)

CheckWithDuplicates does a test but allows duplicates

func (*Run) Finalise Uses

func (r *Run) Finalise()

Finalise cleans the remote and local

func (*Run) ForceMkdir Uses

func (r *Run) ForceMkdir(ctx context.Context, f fs.Fs)

ForceMkdir creates the remote

func (*Run) Mkdir Uses

func (r *Run) Mkdir(ctx context.Context, f fs.Fs)

Mkdir creates the remote if it hasn't been created already

func (*Run) RenameFile Uses

func (r *Run) RenameFile(item Item, newpath string) Item

RenameFile renames a file in local

func (*Run) WriteBoth Uses

func (r *Run) WriteBoth(ctx context.Context, remote, content string, modTime time.Time) Item

WriteBoth calls WriteObject and WriteFile with the same arguments

func (*Run) WriteFile Uses

func (r *Run) WriteFile(filePath, content string, t time.Time) Item

WriteFile writes a file to local

func (*Run) WriteObject Uses

func (r *Run) WriteObject(ctx context.Context, remote, content string, modTime time.Time) Item

WriteObject writes an object to the remote

func (*Run) WriteObjectTo Uses

func (r *Run) WriteObjectTo(ctx context.Context, f fs.Fs, remote, content string, modTime time.Time, useUnchecked bool) Item

WriteObjectTo writes an object to the fs, remote passed in

func (*Run) WriteUncheckedObject Uses

func (r *Run) WriteUncheckedObject(ctx context.Context, remote, content string, modTime time.Time) Item

WriteUncheckedObject writes an object to the remote not checking for duplicates


fstestsPackage fstests provides generic integration tests for the Fs and Object interfaces.
mockdirPackage mockdir makes a mock fs.Directory object
mockobjectPackage mockobject provides a mock object which can be created from a string
test_allRun tests for all the remotes.
testserverPackage testserver starts and stops test servers if required

Package fstest imports 29 packages (graph) and is imported by 40 packages. Updated 2020-07-09. Refresh now. Tools for package owners.