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  }