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", ®istry) 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 }