Add Root List test and fs.Limited tests for single files

This commit is contained in:
Nick Craig-Wood
2014-07-31 21:35:29 +01:00
parent ff91698fb5
commit 3e27ff1b95
10 changed files with 147 additions and 38 deletions
+39 -22
View File
@@ -125,29 +125,53 @@ func RandomString(n int) string {
return string(out)
}
// Creates a temporary directory name for local remotes
func LocalRemote() (path string, err error) {
path, err = ioutil.TempDir("", "rclone")
if err == nil {
// Now remove the directory
err = os.Remove(path)
}
return
}
// Make a random bucket or subdirectory name
//
// Returns a random remote name plus the leaf name
func RandomRemoteName(remoteName string) (string, string, error) {
var err error
var leafName string
// Make a directory if remote name is null
if remoteName == "" {
remoteName, err = LocalRemote()
if err != nil {
return "", "", err
}
} else {
if !strings.HasSuffix(remoteName, ":") {
remoteName += "/"
}
leafName = RandomString(32)
remoteName += leafName
}
return remoteName, leafName, nil
}
// Make a random bucket or subdirectory on the remote
//
// Call the finalise function returned to Purge the fs at the end (and
// the parent if necessary)
func RandomRemote(remoteName string, subdir bool) (fs.Fs, func(), error) {
// Make a directory if remote name is null
rmdir := ""
var err error
if remoteName == "" {
remoteName, err = ioutil.TempDir("", "rclone")
if err != nil {
return nil, nil, err
}
rmdir = remoteName
var parentRemote fs.Fs
remoteName, _, err = RandomRemoteName(remoteName)
if err != nil {
return nil, nil, err
}
if !strings.HasSuffix(remoteName, ":") {
remoteName += "/"
}
remoteName += RandomString(32)
var parentRemote fs.Fs
if subdir {
var err error
parentRemote, err = fs.NewFs(remoteName)
if err != nil {
return nil, nil, err
@@ -168,13 +192,6 @@ func RandomRemote(remoteName string, subdir bool) (fs.Fs, func(), error) {
log.Printf("Failed to purge %v: %v", parentRemote, err)
}
}
// Delete directory if we made one above
if rmdir != "" {
err := os.RemoveAll(rmdir)
if err != nil {
Fatalf("Failed to remove %q: %v", rmdir, err)
}
}
}
return remote, finalise, nil
@@ -191,7 +208,7 @@ func TestMkdir(remote fs.Fs) {
func TestPurge(remote fs.Fs) {
err := fs.Purge(remote)
if err != nil {
log.Fatalf("Purge failed: %v", err)
Fatalf("Purge failed: %v", err)
}
CheckListing(remote, []Item{})
}
+76 -9
View File
@@ -7,8 +7,11 @@ import (
"bytes"
"crypto/md5"
"encoding/hex"
"fmt"
"io"
"log"
"os"
"strings"
"testing"
"time"
@@ -17,11 +20,12 @@ import (
)
var (
remote fs.Fs
RemoteName = ""
remoteFinalise func()
NilObject fs.Object
file1 = fstest.Item{
remote fs.Fs
RemoteName = ""
subRemoteName = ""
subRemoteLeaf = ""
NilObject fs.Object
file1 = fstest.Item{
ModTime: fstest.Time("2001-02-03T04:05:06.499999999Z"),
Path: "file name.txt",
}
@@ -32,11 +36,22 @@ var (
)
func TestInit(t *testing.T) {
var err error
fs.LoadConfig()
fs.Config.Verbose = false
fs.Config.Quiet = true
var err error
remote, remoteFinalise, err = fstest.RandomRemote(RemoteName, false)
if RemoteName == "" {
RemoteName, err = fstest.LocalRemote()
if err != nil {
log.Fatalf("Failed to create tmp dir: %v", err)
}
}
subRemoteName, subRemoteLeaf, err = fstest.RandomRemoteName(RemoteName)
if err != nil {
t.Fatalf("Couldn't make remote name: %v", err)
}
remote, err = fs.NewFs(subRemoteName)
if err == fs.NotFoundInConfigFile {
log.Printf("Didn't find %q in config file - skipping tests", RemoteName)
return
@@ -160,6 +175,24 @@ func TestFsListDirFile2(t *testing.T) {
}
}
func TestFsListDirRoot(t *testing.T) {
skipIfNotOk(t)
rootRemote, err := fs.NewFs(RemoteName)
if err != nil {
t.Fatal("Failed to make remote %q: %v", RemoteName, err)
}
found := false
for obj := range rootRemote.ListDir() {
fmt.Printf("obj = %q\n", obj.Name)
if obj.Name == subRemoteLeaf {
found = true
}
}
if !found {
t.Errorf("Didn't find %q", subRemoteLeaf)
}
}
func TestFsListFile1(t *testing.T) {
skipIfNotOk(t)
fstest.CheckListing(remote, []fstest.Item{file1, file2})
@@ -312,6 +345,36 @@ func TestObjectStorable(t *testing.T) {
}
}
func TestLimitedFs(t *testing.T) {
skipIfNotOk(t)
remoteName := subRemoteName + "/" + file2.Path
file2Copy := file2
file2Copy.Path = "z.txt"
fileRemote, err := fs.NewFs(remoteName)
if err != nil {
t.Fatal("Failed to make remote %q: %v", remoteName, err)
}
fstest.CheckListing(fileRemote, []fstest.Item{file2Copy})
_, ok := fileRemote.(*fs.Limited)
if !ok {
t.Errorf("%v is not a fs.Limited", fileRemote)
}
}
func TestLimitedFsNotFound(t *testing.T) {
skipIfNotOk(t)
remoteName := subRemoteName + "/not found.txt"
fileRemote, err := fs.NewFs(remoteName)
if err != nil {
t.Fatal("Failed to make remote %q: %v", remoteName, err)
}
fstest.CheckListing(fileRemote, []fstest.Item{})
_, ok := fileRemote.(*fs.Limited)
if ok {
t.Errorf("%v is is a fs.Limited", fileRemote)
}
}
func TestObjectRemove(t *testing.T) {
skipIfNotOk(t)
obj := findObject(t, file1.Path)
@@ -333,7 +396,11 @@ func TestObjectPurge(t *testing.T) {
func TestFinalise(t *testing.T) {
skipIfNotOk(t)
if remoteFinalise != nil {
remoteFinalise()
if strings.HasPrefix(RemoteName, "/") {
// Remove temp directory
err := os.Remove(RemoteName)
if err != nil {
log.Printf("Failed to remove %q: %v\n", RemoteName, err)
}
}
}