github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/backend/union/union_test.go (about) 1 // Test Union filesystem interface 2 package union_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/backend/union" 10 "github.com/rclone/rclone/fstest" 11 "github.com/rclone/rclone/fstest/fstests" 12 ) 13 14 var ( 15 unimplementableFsMethods = []string{"UnWrap", "WrapFs", "SetWrapper", "UserInfo", "Disconnect", "PublicLink", "PutUnchecked", "MergeDirs", "OpenWriterAt", "OpenChunkWriter"} 16 unimplementableObjectMethods = []string{} 17 ) 18 19 // TestIntegration runs integration tests against the remote 20 func TestIntegration(t *testing.T) { 21 if *fstest.RemoteName == "" { 22 t.Skip("Skipping as -remote not set") 23 } 24 fstests.Run(t, &fstests.Opt{ 25 RemoteName: *fstest.RemoteName, 26 UnimplementableFsMethods: unimplementableFsMethods, 27 UnimplementableObjectMethods: unimplementableObjectMethods, 28 }) 29 } 30 31 func TestStandard(t *testing.T) { 32 if *fstest.RemoteName != "" { 33 t.Skip("Skipping as -remote set") 34 } 35 dirs := union.MakeTestDirs(t, 3) 36 upstreams := dirs[0] + " " + dirs[1] + " " + dirs[2] 37 name := "TestUnion" 38 fstests.Run(t, &fstests.Opt{ 39 RemoteName: name + ":", 40 ExtraConfig: []fstests.ExtraConfigItem{ 41 {Name: name, Key: "type", Value: "union"}, 42 {Name: name, Key: "upstreams", Value: upstreams}, 43 {Name: name, Key: "action_policy", Value: "epall"}, 44 {Name: name, Key: "create_policy", Value: "epmfs"}, 45 {Name: name, Key: "search_policy", Value: "ff"}, 46 }, 47 UnimplementableFsMethods: unimplementableFsMethods, 48 UnimplementableObjectMethods: unimplementableObjectMethods, 49 QuickTestOK: true, 50 }) 51 } 52 53 func TestRO(t *testing.T) { 54 if *fstest.RemoteName != "" { 55 t.Skip("Skipping as -remote set") 56 } 57 dirs := union.MakeTestDirs(t, 3) 58 upstreams := dirs[0] + " " + dirs[1] + ":ro " + dirs[2] + ":ro" 59 name := "TestUnionRO" 60 fstests.Run(t, &fstests.Opt{ 61 RemoteName: name + ":", 62 ExtraConfig: []fstests.ExtraConfigItem{ 63 {Name: name, Key: "type", Value: "union"}, 64 {Name: name, Key: "upstreams", Value: upstreams}, 65 {Name: name, Key: "action_policy", Value: "epall"}, 66 {Name: name, Key: "create_policy", Value: "epmfs"}, 67 {Name: name, Key: "search_policy", Value: "ff"}, 68 }, 69 UnimplementableFsMethods: unimplementableFsMethods, 70 UnimplementableObjectMethods: unimplementableObjectMethods, 71 QuickTestOK: true, 72 }) 73 } 74 75 func TestNC(t *testing.T) { 76 if *fstest.RemoteName != "" { 77 t.Skip("Skipping as -remote set") 78 } 79 dirs := union.MakeTestDirs(t, 3) 80 upstreams := dirs[0] + " " + dirs[1] + ":nc " + dirs[2] + ":nc" 81 name := "TestUnionNC" 82 fstests.Run(t, &fstests.Opt{ 83 RemoteName: name + ":", 84 ExtraConfig: []fstests.ExtraConfigItem{ 85 {Name: name, Key: "type", Value: "union"}, 86 {Name: name, Key: "upstreams", Value: upstreams}, 87 {Name: name, Key: "action_policy", Value: "epall"}, 88 {Name: name, Key: "create_policy", Value: "epmfs"}, 89 {Name: name, Key: "search_policy", Value: "ff"}, 90 }, 91 UnimplementableFsMethods: unimplementableFsMethods, 92 UnimplementableObjectMethods: unimplementableObjectMethods, 93 QuickTestOK: true, 94 }) 95 } 96 97 func TestPolicy1(t *testing.T) { 98 if *fstest.RemoteName != "" { 99 t.Skip("Skipping as -remote set") 100 } 101 dirs := union.MakeTestDirs(t, 3) 102 upstreams := dirs[0] + " " + dirs[1] + " " + dirs[2] 103 name := "TestUnionPolicy1" 104 fstests.Run(t, &fstests.Opt{ 105 RemoteName: name + ":", 106 ExtraConfig: []fstests.ExtraConfigItem{ 107 {Name: name, Key: "type", Value: "union"}, 108 {Name: name, Key: "upstreams", Value: upstreams}, 109 {Name: name, Key: "action_policy", Value: "all"}, 110 {Name: name, Key: "create_policy", Value: "lus"}, 111 {Name: name, Key: "search_policy", Value: "all"}, 112 }, 113 UnimplementableFsMethods: unimplementableFsMethods, 114 UnimplementableObjectMethods: unimplementableObjectMethods, 115 QuickTestOK: true, 116 }) 117 } 118 119 func TestPolicy2(t *testing.T) { 120 if *fstest.RemoteName != "" { 121 t.Skip("Skipping as -remote set") 122 } 123 dirs := union.MakeTestDirs(t, 3) 124 upstreams := dirs[0] + " " + dirs[1] + " " + dirs[2] 125 name := "TestUnionPolicy2" 126 fstests.Run(t, &fstests.Opt{ 127 RemoteName: name + ":", 128 ExtraConfig: []fstests.ExtraConfigItem{ 129 {Name: name, Key: "type", Value: "union"}, 130 {Name: name, Key: "upstreams", Value: upstreams}, 131 {Name: name, Key: "action_policy", Value: "all"}, 132 {Name: name, Key: "create_policy", Value: "rand"}, 133 {Name: name, Key: "search_policy", Value: "ff"}, 134 }, 135 UnimplementableFsMethods: unimplementableFsMethods, 136 UnimplementableObjectMethods: unimplementableObjectMethods, 137 QuickTestOK: true, 138 }) 139 } 140 141 func TestPolicy3(t *testing.T) { 142 if *fstest.RemoteName != "" { 143 t.Skip("Skipping as -remote set") 144 } 145 dirs := union.MakeTestDirs(t, 3) 146 upstreams := dirs[0] + " " + dirs[1] + " " + dirs[2] 147 name := "TestUnionPolicy3" 148 fstests.Run(t, &fstests.Opt{ 149 RemoteName: name + ":", 150 ExtraConfig: []fstests.ExtraConfigItem{ 151 {Name: name, Key: "type", Value: "union"}, 152 {Name: name, Key: "upstreams", Value: upstreams}, 153 {Name: name, Key: "action_policy", Value: "all"}, 154 {Name: name, Key: "create_policy", Value: "all"}, 155 {Name: name, Key: "search_policy", Value: "all"}, 156 }, 157 UnimplementableFsMethods: unimplementableFsMethods, 158 UnimplementableObjectMethods: unimplementableObjectMethods, 159 QuickTestOK: true, 160 }) 161 }