github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/backend/union/union_test.go (about) 1 // Test Union filesystem interface 2 package union_test 3 4 import ( 5 "os" 6 "path/filepath" 7 "testing" 8 9 _ "github.com/rclone/rclone/backend/local" 10 "github.com/rclone/rclone/fstest" 11 "github.com/rclone/rclone/fstest/fstests" 12 "github.com/stretchr/testify/require" 13 ) 14 15 // TestIntegration runs integration tests against the remote 16 func TestIntegration(t *testing.T) { 17 if *fstest.RemoteName == "" { 18 t.Skip("Skipping as -remote not set") 19 } 20 fstests.Run(t, &fstests.Opt{ 21 RemoteName: *fstest.RemoteName, 22 UnimplementableFsMethods: []string{"OpenWriterAt", "DuplicateFiles"}, 23 UnimplementableObjectMethods: []string{"MimeType"}, 24 }) 25 } 26 27 func TestStandard(t *testing.T) { 28 if *fstest.RemoteName != "" { 29 t.Skip("Skipping as -remote set") 30 } 31 tempdir1 := filepath.Join(os.TempDir(), "rclone-union-test-standard1") 32 tempdir2 := filepath.Join(os.TempDir(), "rclone-union-test-standard2") 33 tempdir3 := filepath.Join(os.TempDir(), "rclone-union-test-standard3") 34 require.NoError(t, os.MkdirAll(tempdir1, 0744)) 35 require.NoError(t, os.MkdirAll(tempdir2, 0744)) 36 require.NoError(t, os.MkdirAll(tempdir3, 0744)) 37 upstreams := tempdir1 + " " + tempdir2 + " " + tempdir3 38 name := "TestUnion" 39 fstests.Run(t, &fstests.Opt{ 40 RemoteName: name + ":", 41 ExtraConfig: []fstests.ExtraConfigItem{ 42 {Name: name, Key: "type", Value: "union"}, 43 {Name: name, Key: "upstreams", Value: upstreams}, 44 {Name: name, Key: "action_policy", Value: "epall"}, 45 {Name: name, Key: "create_policy", Value: "epmfs"}, 46 {Name: name, Key: "search_policy", Value: "ff"}, 47 }, 48 UnimplementableFsMethods: []string{"OpenWriterAt", "DuplicateFiles"}, 49 UnimplementableObjectMethods: []string{"MimeType"}, 50 }) 51 } 52 53 func TestRO(t *testing.T) { 54 if *fstest.RemoteName != "" { 55 t.Skip("Skipping as -remote set") 56 } 57 tempdir1 := filepath.Join(os.TempDir(), "rclone-union-test-ro1") 58 tempdir2 := filepath.Join(os.TempDir(), "rclone-union-test-ro2") 59 tempdir3 := filepath.Join(os.TempDir(), "rclone-union-test-ro3") 60 require.NoError(t, os.MkdirAll(tempdir1, 0744)) 61 require.NoError(t, os.MkdirAll(tempdir2, 0744)) 62 require.NoError(t, os.MkdirAll(tempdir3, 0744)) 63 upstreams := tempdir1 + " " + tempdir2 + ":ro " + tempdir3 + ":ro" 64 name := "TestUnionRO" 65 fstests.Run(t, &fstests.Opt{ 66 RemoteName: name + ":", 67 ExtraConfig: []fstests.ExtraConfigItem{ 68 {Name: name, Key: "type", Value: "union"}, 69 {Name: name, Key: "upstreams", Value: upstreams}, 70 {Name: name, Key: "action_policy", Value: "epall"}, 71 {Name: name, Key: "create_policy", Value: "epmfs"}, 72 {Name: name, Key: "search_policy", Value: "ff"}, 73 }, 74 UnimplementableFsMethods: []string{"OpenWriterAt", "DuplicateFiles"}, 75 UnimplementableObjectMethods: []string{"MimeType"}, 76 }) 77 } 78 79 func TestNC(t *testing.T) { 80 if *fstest.RemoteName != "" { 81 t.Skip("Skipping as -remote set") 82 } 83 tempdir1 := filepath.Join(os.TempDir(), "rclone-union-test-nc1") 84 tempdir2 := filepath.Join(os.TempDir(), "rclone-union-test-nc2") 85 tempdir3 := filepath.Join(os.TempDir(), "rclone-union-test-nc3") 86 require.NoError(t, os.MkdirAll(tempdir1, 0744)) 87 require.NoError(t, os.MkdirAll(tempdir2, 0744)) 88 require.NoError(t, os.MkdirAll(tempdir3, 0744)) 89 upstreams := tempdir1 + " " + tempdir2 + ":nc " + tempdir3 + ":nc" 90 name := "TestUnionNC" 91 fstests.Run(t, &fstests.Opt{ 92 RemoteName: name + ":", 93 ExtraConfig: []fstests.ExtraConfigItem{ 94 {Name: name, Key: "type", Value: "union"}, 95 {Name: name, Key: "upstreams", Value: upstreams}, 96 {Name: name, Key: "action_policy", Value: "epall"}, 97 {Name: name, Key: "create_policy", Value: "epmfs"}, 98 {Name: name, Key: "search_policy", Value: "ff"}, 99 }, 100 UnimplementableFsMethods: []string{"OpenWriterAt", "DuplicateFiles"}, 101 UnimplementableObjectMethods: []string{"MimeType"}, 102 }) 103 } 104 105 func TestPolicy1(t *testing.T) { 106 if *fstest.RemoteName != "" { 107 t.Skip("Skipping as -remote set") 108 } 109 tempdir1 := filepath.Join(os.TempDir(), "rclone-union-test-policy11") 110 tempdir2 := filepath.Join(os.TempDir(), "rclone-union-test-policy12") 111 tempdir3 := filepath.Join(os.TempDir(), "rclone-union-test-policy13") 112 require.NoError(t, os.MkdirAll(tempdir1, 0744)) 113 require.NoError(t, os.MkdirAll(tempdir2, 0744)) 114 require.NoError(t, os.MkdirAll(tempdir3, 0744)) 115 upstreams := tempdir1 + " " + tempdir2 + " " + tempdir3 116 name := "TestUnionPolicy1" 117 fstests.Run(t, &fstests.Opt{ 118 RemoteName: name + ":", 119 ExtraConfig: []fstests.ExtraConfigItem{ 120 {Name: name, Key: "type", Value: "union"}, 121 {Name: name, Key: "upstreams", Value: upstreams}, 122 {Name: name, Key: "action_policy", Value: "all"}, 123 {Name: name, Key: "create_policy", Value: "lus"}, 124 {Name: name, Key: "search_policy", Value: "all"}, 125 }, 126 UnimplementableFsMethods: []string{"OpenWriterAt", "DuplicateFiles"}, 127 UnimplementableObjectMethods: []string{"MimeType"}, 128 }) 129 } 130 131 func TestPolicy2(t *testing.T) { 132 if *fstest.RemoteName != "" { 133 t.Skip("Skipping as -remote set") 134 } 135 tempdir1 := filepath.Join(os.TempDir(), "rclone-union-test-policy21") 136 tempdir2 := filepath.Join(os.TempDir(), "rclone-union-test-policy22") 137 tempdir3 := filepath.Join(os.TempDir(), "rclone-union-test-policy23") 138 require.NoError(t, os.MkdirAll(tempdir1, 0744)) 139 require.NoError(t, os.MkdirAll(tempdir2, 0744)) 140 require.NoError(t, os.MkdirAll(tempdir3, 0744)) 141 upstreams := tempdir1 + " " + tempdir2 + " " + tempdir3 142 name := "TestUnionPolicy2" 143 fstests.Run(t, &fstests.Opt{ 144 RemoteName: name + ":", 145 ExtraConfig: []fstests.ExtraConfigItem{ 146 {Name: name, Key: "type", Value: "union"}, 147 {Name: name, Key: "upstreams", Value: upstreams}, 148 {Name: name, Key: "action_policy", Value: "all"}, 149 {Name: name, Key: "create_policy", Value: "rand"}, 150 {Name: name, Key: "search_policy", Value: "ff"}, 151 }, 152 UnimplementableFsMethods: []string{"OpenWriterAt", "DuplicateFiles"}, 153 UnimplementableObjectMethods: []string{"MimeType"}, 154 }) 155 }