github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/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 pw2 := obscure.MustObscure("password") 105 in := rc.Params{ 106 "name": testName, 107 "parameters": rc.Params{ 108 "test_key": "rutabaga", 109 "test_key2": pw2, // check we encode an already encoded password 110 }, 111 } 112 out, err := call.Fn(context.Background(), in) 113 require.NoError(t, err) 114 assert.Nil(t, out) 115 116 assert.Equal(t, "local", config.FileGet(testName, "type")) 117 assert.Equal(t, "rutabaga", obscure.MustReveal(config.FileGet(testName, "test_key"))) 118 assert.Equal(t, pw2, obscure.MustReveal(config.FileGet(testName, "test_key2"))) 119 }) 120 121 // Delete the test remote 122 call = rc.Calls.Get("config/delete") 123 assert.NotNil(t, call) 124 in = rc.Params{ 125 "name": testName, 126 } 127 out, err = call.Fn(context.Background(), in) 128 require.NoError(t, err) 129 assert.Nil(t, out) 130 assert.Equal(t, "", config.FileGet(testName, "type")) 131 assert.Equal(t, "", config.FileGet(testName, "test_key")) 132 } 133 134 func TestRcProviders(t *testing.T) { 135 call := rc.Calls.Get("config/providers") 136 assert.NotNil(t, call) 137 in := rc.Params{} 138 out, err := call.Fn(context.Background(), in) 139 require.NoError(t, err) 140 require.NotNil(t, out) 141 var registry []*fs.RegInfo 142 err = out.GetStruct("providers", ®istry) 143 require.NoError(t, err) 144 foundLocal := false 145 for _, provider := range registry { 146 if provider.Name == "local" { 147 foundLocal = true 148 break 149 } 150 } 151 assert.True(t, foundLocal, "didn't find local provider") 152 }