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  }