github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/backend/combine/combine_test.go (about) 1 // Test Combine filesystem interface 2 package combine_test 3 4 import ( 5 "testing" 6 7 _ "github.com/rclone/rclone/backend/local" 8 _ "github.com/rclone/rclone/backend/memory" 9 "github.com/rclone/rclone/fstest" 10 "github.com/rclone/rclone/fstest/fstests" 11 ) 12 13 var ( 14 unimplementableFsMethods = []string{"UnWrap", "WrapFs", "SetWrapper", "UserInfo", "Disconnect", "OpenChunkWriter"} 15 unimplementableObjectMethods = []string{} 16 ) 17 18 // TestIntegration runs integration tests against the remote 19 func TestIntegration(t *testing.T) { 20 if *fstest.RemoteName == "" { 21 t.Skip("Skipping as -remote not set") 22 } 23 fstests.Run(t, &fstests.Opt{ 24 RemoteName: *fstest.RemoteName, 25 UnimplementableFsMethods: unimplementableFsMethods, 26 UnimplementableObjectMethods: unimplementableObjectMethods, 27 }) 28 } 29 30 func TestLocal(t *testing.T) { 31 if *fstest.RemoteName != "" { 32 t.Skip("Skipping as -remote set") 33 } 34 dirs := MakeTestDirs(t, 3) 35 upstreams := "dir1=" + dirs[0] + " dir2=" + dirs[1] + " dir3=" + dirs[2] 36 name := "TestCombineLocal" 37 fstests.Run(t, &fstests.Opt{ 38 RemoteName: name + ":dir1", 39 ExtraConfig: []fstests.ExtraConfigItem{ 40 {Name: name, Key: "type", Value: "combine"}, 41 {Name: name, Key: "upstreams", Value: upstreams}, 42 }, 43 QuickTestOK: true, 44 UnimplementableFsMethods: unimplementableFsMethods, 45 UnimplementableObjectMethods: unimplementableObjectMethods, 46 }) 47 } 48 49 func TestMemory(t *testing.T) { 50 if *fstest.RemoteName != "" { 51 t.Skip("Skipping as -remote set") 52 } 53 upstreams := "dir1=:memory:dir1 dir2=:memory:dir2 dir3=:memory:dir3" 54 name := "TestCombineMemory" 55 fstests.Run(t, &fstests.Opt{ 56 RemoteName: name + ":dir1", 57 ExtraConfig: []fstests.ExtraConfigItem{ 58 {Name: name, Key: "type", Value: "combine"}, 59 {Name: name, Key: "upstreams", Value: upstreams}, 60 }, 61 QuickTestOK: true, 62 UnimplementableFsMethods: unimplementableFsMethods, 63 UnimplementableObjectMethods: unimplementableObjectMethods, 64 }) 65 } 66 67 func TestMixed(t *testing.T) { 68 if *fstest.RemoteName != "" { 69 t.Skip("Skipping as -remote set") 70 } 71 dirs := MakeTestDirs(t, 2) 72 upstreams := "dir1=" + dirs[0] + " dir2=" + dirs[1] + " dir3=:memory:dir3" 73 name := "TestCombineMixed" 74 fstests.Run(t, &fstests.Opt{ 75 RemoteName: name + ":dir1", 76 ExtraConfig: []fstests.ExtraConfigItem{ 77 {Name: name, Key: "type", Value: "combine"}, 78 {Name: name, Key: "upstreams", Value: upstreams}, 79 }, 80 UnimplementableFsMethods: unimplementableFsMethods, 81 UnimplementableObjectMethods: unimplementableObjectMethods, 82 }) 83 } 84 85 // MakeTestDirs makes directories in /tmp for testing 86 func MakeTestDirs(t *testing.T, n int) (dirs []string) { 87 for i := 1; i <= n; i++ { 88 dir := t.TempDir() 89 dirs = append(dirs, dir) 90 } 91 return dirs 92 }