github.com/xhghs/rclone@v1.51.1-0.20200430155106-e186a28cced8/fs/config/rc_test.go (about)

     1  package config_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	_ "github.com/rclone/rclone/backend/local"
     8  	"github.com/rclone/rclone/fs"
     9  	"github.com/rclone/rclone/fs/config"
    10  	"github.com/rclone/rclone/fs/config/obscure"
    11  	"github.com/rclone/rclone/fs/rc"
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  const testName = "configTestNameForRc"
    17  
    18  func TestRc(t *testing.T) {
    19  	// Create the test remote
    20  	call := rc.Calls.Get("config/create")
    21  	assert.NotNil(t, call)
    22  	in := rc.Params{
    23  		"name": testName,
    24  		"type": "local",
    25  		"parameters": rc.Params{
    26  			"test_key": "sausage",
    27  		},
    28  	}
    29  	out, err := call.Fn(context.Background(), in)
    30  	require.NoError(t, err)
    31  	require.Nil(t, out)
    32  	assert.Equal(t, "local", config.FileGet(testName, "type"))
    33  	assert.Equal(t, "sausage", config.FileGet(testName, "test_key"))
    34  
    35  	// The sub tests rely on the remote created above but they can
    36  	// all be run independently
    37  
    38  	t.Run("Dump", func(t *testing.T) {
    39  		call := rc.Calls.Get("config/dump")
    40  		assert.NotNil(t, call)
    41  		in := rc.Params{}
    42  		out, err := call.Fn(context.Background(), in)
    43  		require.NoError(t, err)
    44  		require.NotNil(t, out)
    45  
    46  		require.NotNil(t, out[testName])
    47  		config := out[testName].(rc.Params)
    48  
    49  		assert.Equal(t, "local", config["type"])
    50  		assert.Equal(t, "sausage", config["test_key"])
    51  	})
    52  
    53  	t.Run("Get", func(t *testing.T) {
    54  		call := rc.Calls.Get("config/get")
    55  		assert.NotNil(t, call)
    56  		in := rc.Params{
    57  			"name": testName,
    58  		}
    59  		out, err := call.Fn(context.Background(), in)
    60  		require.NoError(t, err)
    61  		require.NotNil(t, out)
    62  
    63  		assert.Equal(t, "local", out["type"])
    64  		assert.Equal(t, "sausage", out["test_key"])
    65  	})
    66  
    67  	t.Run("ListRemotes", func(t *testing.T) {
    68  		call := rc.Calls.Get("config/listremotes")
    69  		assert.NotNil(t, call)
    70  		in := rc.Params{}
    71  		out, err := call.Fn(context.Background(), in)
    72  		require.NoError(t, err)
    73  		require.NotNil(t, out)
    74  
    75  		var remotes []string
    76  		err = out.GetStruct("remotes", &remotes)
    77  		require.NoError(t, err)
    78  
    79  		assert.Contains(t, remotes, testName)
    80  	})
    81  
    82  	t.Run("Update", func(t *testing.T) {
    83  		call := rc.Calls.Get("config/update")
    84  		assert.NotNil(t, call)
    85  		in := rc.Params{
    86  			"name": testName,
    87  			"parameters": rc.Params{
    88  				"test_key":  "rutabaga",
    89  				"test_key2": "cabbage",
    90  			},
    91  		}
    92  		out, err := call.Fn(context.Background(), in)
    93  		require.NoError(t, err)
    94  		assert.Nil(t, out)
    95  
    96  		assert.Equal(t, "local", config.FileGet(testName, "type"))
    97  		assert.Equal(t, "rutabaga", config.FileGet(testName, "test_key"))
    98  		assert.Equal(t, "cabbage", config.FileGet(testName, "test_key2"))
    99  	})
   100  
   101  	t.Run("Password", func(t *testing.T) {
   102  		call := rc.Calls.Get("config/password")
   103  		assert.NotNil(t, call)
   104  		in := rc.Params{
   105  			"name": testName,
   106  			"parameters": rc.Params{
   107  				"test_key":  "rutabaga",
   108  				"test_key2": "cabbage",
   109  			},
   110  		}
   111  		out, err := call.Fn(context.Background(), in)
   112  		require.NoError(t, err)
   113  		assert.Nil(t, out)
   114  
   115  		assert.Equal(t, "local", config.FileGet(testName, "type"))
   116  		assert.Equal(t, "rutabaga", obscure.MustReveal(config.FileGet(testName, "test_key")))
   117  		assert.Equal(t, "cabbage", obscure.MustReveal(config.FileGet(testName, "test_key2")))
   118  	})
   119  
   120  	// Delete the test remote
   121  	call = rc.Calls.Get("config/delete")
   122  	assert.NotNil(t, call)
   123  	in = rc.Params{
   124  		"name": testName,
   125  	}
   126  	out, err = call.Fn(context.Background(), in)
   127  	require.NoError(t, err)
   128  	assert.Nil(t, out)
   129  	assert.Equal(t, "", config.FileGet(testName, "type"))
   130  	assert.Equal(t, "", config.FileGet(testName, "test_key"))
   131  }
   132  
   133  func TestRcProviders(t *testing.T) {
   134  	call := rc.Calls.Get("config/providers")
   135  	assert.NotNil(t, call)
   136  	in := rc.Params{}
   137  	out, err := call.Fn(context.Background(), in)
   138  	require.NoError(t, err)
   139  	require.NotNil(t, out)
   140  	var registry []*fs.RegInfo
   141  	err = out.GetStruct("providers", &registry)
   142  	require.NoError(t, err)
   143  	foundLocal := false
   144  	for _, provider := range registry {
   145  		if provider.Name == "local" {
   146  			foundLocal = true
   147  			break
   148  		}
   149  	}
   150  	assert.True(t, foundLocal, "didn't find local provider")
   151  }