github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/fs/rc/webgui/rc_test.go (about) 1 package webgui 2 3 import ( 4 "context" 5 "path/filepath" 6 "strings" 7 "testing" 8 9 "github.com/rclone/rclone/fs/rc" 10 "github.com/rclone/rclone/fs/rc/rcflags" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 const testPluginName = "rclone-test-plugin" 16 const testPluginAuthor = "rclone" 17 const testPluginKey = testPluginAuthor + "/" + testPluginName 18 const testPluginURL = "https://github.com/" + testPluginAuthor + "/" + testPluginName + "/" 19 20 func init() { 21 rcflags.Opt.WebUI = true 22 } 23 24 func setCacheDir(t *testing.T) { 25 cacheDir := t.TempDir() 26 PluginsPath = filepath.Join(cacheDir, "plugins") 27 pluginsConfigPath = filepath.Join(cacheDir, "config") 28 29 loadedPlugins = newPlugins(availablePluginsJSONPath) 30 err := loadedPlugins.readFromFile() 31 assert.Nil(t, err) 32 } 33 34 func addPlugin(t *testing.T) { 35 addPlugin := rc.Calls.Get("pluginsctl/addPlugin") 36 assert.NotNil(t, addPlugin) 37 in := rc.Params{ 38 "url": testPluginURL, 39 } 40 out, err := addPlugin.Fn(context.Background(), in) 41 if err != nil && strings.Contains(err.Error(), "bad HTTP status") { 42 t.Skipf("skipping test as plugin download failed: %v", err) 43 } 44 require.Nil(t, err) 45 assert.Nil(t, out) 46 47 } 48 49 func removePlugin(t *testing.T) { 50 addPlugin := rc.Calls.Get("pluginsctl/removePlugin") 51 assert.NotNil(t, addPlugin) 52 53 in := rc.Params{ 54 "name": testPluginKey, 55 } 56 out, err := addPlugin.Fn(context.Background(), in) 57 assert.NotNil(t, err) 58 assert.Nil(t, out) 59 } 60 61 //func TestListTestPlugins(t *testing.T) { 62 // addPlugin := rc.Calls.Get("pluginsctl/listTestPlugins") 63 // assert.NotNil(t, addPlugin) 64 // in := rc.Params{} 65 // out, err := addPlugin.Fn(context.Background(), in) 66 // assert.Nil(t, err) 67 // expected := rc.Params{ 68 // "loadedTestPlugins": map[string]PackageJSON{}, 69 // } 70 // assert.Equal(t, expected, out) 71 //} 72 73 //func TestRemoveTestPlugin(t *testing.T) { 74 // addPlugin := rc.Calls.Get("pluginsctl/removeTestPlugin") 75 // assert.NotNil(t, addPlugin) 76 // in := rc.Params{ 77 // "name": "", 78 // } 79 // out, err := addPlugin.Fn(context.Background(), in) 80 // assert.NotNil(t, err) 81 // assert.Nil(t, out) 82 //} 83 84 func TestAddPlugin(t *testing.T) { 85 setCacheDir(t) 86 87 addPlugin(t) 88 _, ok := loadedPlugins.LoadedPlugins[testPluginKey] 89 assert.True(t, ok) 90 91 //removePlugin(t) 92 //_, ok = loadedPlugins.LoadedPlugins[testPluginKey] 93 //assert.False(t, ok) 94 } 95 96 func TestListPlugins(t *testing.T) { 97 setCacheDir(t) 98 99 addPlugin := rc.Calls.Get("pluginsctl/listPlugins") 100 assert.NotNil(t, addPlugin) 101 in := rc.Params{} 102 out, err := addPlugin.Fn(context.Background(), in) 103 assert.Nil(t, err) 104 expected := rc.Params{ 105 "loadedPlugins": map[string]PackageJSON{}, 106 "loadedTestPlugins": map[string]PackageJSON{}, 107 } 108 assert.Equal(t, expected, out) 109 } 110 111 func TestRemovePlugin(t *testing.T) { 112 setCacheDir(t) 113 114 addPlugin(t) 115 removePluginCall := rc.Calls.Get("pluginsctl/removePlugin") 116 assert.NotNil(t, removePlugin) 117 118 in := rc.Params{ 119 "name": testPluginKey, 120 } 121 out, err := removePluginCall.Fn(context.Background(), in) 122 assert.Nil(t, err) 123 assert.Nil(t, out) 124 removePlugin(t) 125 assert.Equal(t, len(loadedPlugins.LoadedPlugins), 0) 126 127 } 128 129 func TestPluginsForType(t *testing.T) { 130 addPlugin := rc.Calls.Get("pluginsctl/getPluginsForType") 131 assert.NotNil(t, addPlugin) 132 in := rc.Params{ 133 "type": "", 134 "pluginType": "FileHandler", 135 } 136 out, err := addPlugin.Fn(context.Background(), in) 137 assert.Nil(t, err) 138 assert.NotNil(t, out) 139 140 in = rc.Params{ 141 "type": "video/mp4", 142 "pluginType": "", 143 } 144 _, err = addPlugin.Fn(context.Background(), in) 145 assert.Nil(t, err) 146 assert.NotNil(t, out) 147 }