github.com/ncw/rclone@v1.48.1-0.20190724201158-a35aa1360e3e/fs/config/rc_test.go (about)

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