From 10d2fed79555a5a29b63ad9b2e7d29da787f541b Mon Sep 17 00:00:00 2001 From: Miguel de la Cruz Date: Wed, 19 Aug 2020 13:54:46 +0200 Subject: [PATCH] [MM-27022] Add marketplace endpoints to local mode (#15053) * [MM-27022] Add marketplace endpoints to local mode * Fix test Co-authored-by: Mattermod --- api4/plugin_local.go | 2 + api4/plugin_test.go | 312 ++++++++++++++++++++++--------------------- 2 files changed, 159 insertions(+), 155 deletions(-) diff --git a/api4/plugin_local.go b/api4/plugin_local.go index b4c68306eb..4ddd6ac10e 100644 --- a/api4/plugin_local.go +++ b/api4/plugin_local.go @@ -10,4 +10,6 @@ func (api *API) InitPluginLocal() { api.BaseRoutes.Plugin.Handle("", api.ApiLocal(removePlugin)).Methods("DELETE") api.BaseRoutes.Plugin.Handle("/enable", api.ApiLocal(enablePlugin)).Methods("POST") api.BaseRoutes.Plugin.Handle("/disable", api.ApiLocal(disablePlugin)).Methods("POST") + api.BaseRoutes.Plugins.Handle("/marketplace", api.ApiLocal(installMarketplacePlugin)).Methods("POST") + api.BaseRoutes.Plugins.Handle("/marketplace", api.ApiLocal(getMarketplacePlugins)).Methods("GET") } diff --git a/api4/plugin_test.go b/api4/plugin_test.go index 03d2503839..5d91acf0ce 100644 --- a/api4/plugin_test.go +++ b/api4/plugin_test.go @@ -479,27 +479,27 @@ func TestGetMarketplacePlugins(t *testing.T) { *cfg.PluginSettings.EnableMarketplace = false }) - t.Run("marketplace disabled", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.EnableMarketplace = false *cfg.PluginSettings.MarketplaceUrl = "invalid.com" }) - plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + plugins, resp := client.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) CheckNotImplementedStatus(t, resp) require.Nil(t, plugins) - }) + }, "marketplace disabled") - t.Run("no server", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.EnableMarketplace = true *cfg.PluginSettings.MarketplaceUrl = "invalid.com" }) - plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + plugins, resp := client.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) CheckInternalErrorStatus(t, resp) require.Nil(t, plugins) - }) + }, "no server") t.Run("no permission", func(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { @@ -512,7 +512,7 @@ func TestGetMarketplacePlugins(t *testing.T) { require.Nil(t, plugins) }) - t.Run("empty response from server", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { res.WriteHeader(http.StatusOK) json, err := json.Marshal([]*model.MarketplacePlugin{}) @@ -526,12 +526,12 @@ func TestGetMarketplacePlugins(t *testing.T) { *cfg.PluginSettings.MarketplaceUrl = testServer.URL }) - plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + plugins, resp := client.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) CheckNoError(t, resp) require.Empty(t, plugins) - }) + }, "empty response from server") - t.Run("verify server version is passed through", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { serverVersion, ok := req.URL.Query()["server_version"] require.True(t, ok) @@ -551,12 +551,12 @@ func TestGetMarketplacePlugins(t *testing.T) { *cfg.PluginSettings.MarketplaceUrl = testServer.URL }) - plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + plugins, resp := client.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) CheckNoError(t, resp) require.Empty(t, plugins) - }) + }, "verify server version is passed through") - t.Run("verify EnterprisePlugins is false for TE", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { licenseType, ok := req.URL.Query()["enterprise_plugins"] require.True(t, ok) @@ -575,12 +575,12 @@ func TestGetMarketplacePlugins(t *testing.T) { *cfg.PluginSettings.MarketplaceUrl = testServer.URL }) - plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + plugins, resp := client.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) CheckNoError(t, resp) require.Empty(t, plugins) - }) + }, "verify EnterprisePlugins is false for TE") - t.Run("verify EnterprisePlugins is false for E10", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { licenseType, ok := req.URL.Query()["enterprise_plugins"] require.True(t, ok) @@ -604,12 +604,12 @@ func TestGetMarketplacePlugins(t *testing.T) { *l.Features.EnterprisePlugins = false th.App.Srv().SetLicense(l) - plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + plugins, resp := client.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) CheckNoError(t, resp) require.Empty(t, plugins) - }) + }, "verify EnterprisePlugins is false for E10") - t.Run("verify EnterprisePlugins is false for E20", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { licenseType, ok := req.URL.Query()["enterprise_plugins"] require.True(t, ok) @@ -630,10 +630,10 @@ func TestGetMarketplacePlugins(t *testing.T) { th.App.Srv().SetLicense(model.NewTestLicense("enterprise_plugins")) - plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + plugins, resp := client.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) CheckNoError(t, resp) require.Empty(t, plugins) - }) + }, "verify EnterprisePlugins is false for E20") } func TestGetInstalledMarketplacePlugins(t *testing.T) { @@ -1240,40 +1240,40 @@ func TestInstallMarketplacePlugin(t *testing.T) { request := &model.InstallMarketplacePluginRequest{Id: "", Version: ""} - t.Run("marketplace disabled", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.EnableMarketplace = false *cfg.PluginSettings.MarketplaceUrl = "invalid.com" }) - plugin, resp := th.SystemAdminClient.InstallMarketplacePlugin(request) + plugin, resp := client.InstallMarketplacePlugin(request) CheckNotImplementedStatus(t, resp) require.Nil(t, plugin) - }) + }, "marketplace disabled") - t.Run("RequirePluginSignature enabled", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true *cfg.PluginSettings.RequirePluginSignature = true }) - manifest, resp := th.SystemAdminClient.UploadPlugin(bytes.NewReader(tarData)) + manifest, resp := client.UploadPlugin(bytes.NewReader(tarData)) CheckNotImplementedStatus(t, resp) require.Nil(t, manifest) - manifest, resp = th.SystemAdminClient.InstallPluginFromUrl("some_url", true) + manifest, resp = client.InstallPluginFromUrl("some_url", true) CheckNotImplementedStatus(t, resp) require.Nil(t, manifest) - }) + }, "RequirePluginSignature enabled") - t.Run("no server", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.EnableMarketplace = true *cfg.PluginSettings.MarketplaceUrl = "invalid.com" }) - plugin, resp := th.SystemAdminClient.InstallMarketplacePlugin(request) + plugin, resp := client.InstallMarketplacePlugin(request) CheckInternalErrorStatus(t, resp) require.Nil(t, plugin) - }) + }, "no server") t.Run("no permission", func(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { @@ -1286,7 +1286,7 @@ func TestInstallMarketplacePlugin(t *testing.T) { require.Nil(t, plugin) }) - t.Run("plugin not found on the server", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { res.WriteHeader(http.StatusOK) json, err := json.Marshal([]*model.MarketplacePlugin{}) @@ -1300,12 +1300,12 @@ func TestInstallMarketplacePlugin(t *testing.T) { *cfg.PluginSettings.MarketplaceUrl = testServer.URL }) pRequest := &model.InstallMarketplacePluginRequest{Id: "some_plugin_id", Version: "0.0.1"} - plugin, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + plugin, resp := client.InstallMarketplacePlugin(pRequest) CheckInternalErrorStatus(t, resp) require.Nil(t, plugin) - }) + }, "plugin not found on the server") - t.Run("plugin not verified", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { res.WriteHeader(http.StatusOK) json, err := json.Marshal([]*model.MarketplacePlugin{samplePlugins[0]}) @@ -1320,12 +1320,12 @@ func TestInstallMarketplacePlugin(t *testing.T) { *cfg.PluginSettings.AllowInsecureDownloadUrl = true }) pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.2"} - plugin, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + plugin, resp := client.InstallMarketplacePlugin(pRequest) CheckInternalErrorStatus(t, resp) require.Nil(t, plugin) - }) + }, "plugin not verified") - t.Run("verify, install and remove plugin", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { serverVersion := req.URL.Query().Get("server_version") require.NotEmpty(t, serverVersion) @@ -1349,7 +1349,7 @@ func TestInstallMarketplacePlugin(t *testing.T) { require.Nil(t, appErr) pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} - manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + manifest, resp := client.InstallMarketplacePlugin(pRequest) CheckNoError(t, resp) require.NotNil(t, manifest) require.Equal(t, "testplugin2", manifest.Id) @@ -1360,7 +1360,7 @@ func TestInstallMarketplacePlugin(t *testing.T) { require.Nil(t, err) require.EqualValues(t, sigFile, savedSigFile) - ok, resp := th.SystemAdminClient.RemovePlugin(manifest.Id) + ok, resp := client.RemovePlugin(manifest.Id) CheckNoError(t, resp) assert.True(t, ok) exists, err := th.App.FileExists(filePath) @@ -1369,9 +1369,9 @@ func TestInstallMarketplacePlugin(t *testing.T) { appErr = th.App.DeletePublicKey("pub_key") require.Nil(t, appErr) - }) + }, "verify, install and remove plugin") - t.Run("verify EnterprisePlugins is false for TE", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { requestHandled := false testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { @@ -1398,13 +1398,13 @@ func TestInstallMarketplacePlugin(t *testing.T) { // The content of the request is irrelevant. This test only cares about enterprise_plugins. pRequest := &model.InstallMarketplacePluginRequest{} - manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + manifest, resp := client.InstallMarketplacePlugin(pRequest) CheckInternalErrorStatus(t, resp) require.Nil(t, manifest) assert.True(t, requestHandled) - }) + }, "verify EnterprisePlugins is false for TE") - t.Run("verify EnterprisePlugins is false for E10", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { requestHandled := false testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { @@ -1436,13 +1436,13 @@ func TestInstallMarketplacePlugin(t *testing.T) { // The content of the request is irrelevant. This test only cares about enterprise_plugins. pRequest := &model.InstallMarketplacePluginRequest{} - manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + manifest, resp := client.InstallMarketplacePlugin(pRequest) CheckInternalErrorStatus(t, resp) require.Nil(t, manifest) assert.True(t, requestHandled) - }) + }, "verify EnterprisePlugins is false for E10") - t.Run("verify EnterprisePlugins is true for E20", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { requestHandled := false testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { @@ -1470,11 +1470,11 @@ func TestInstallMarketplacePlugin(t *testing.T) { // The content of the request is irrelevant. This test only cares about enterprise_plugins. pRequest := &model.InstallMarketplacePluginRequest{} - manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + manifest, resp := client.InstallMarketplacePlugin(pRequest) CheckInternalErrorStatus(t, resp) require.Nil(t, manifest) assert.True(t, requestHandled) - }) + }, "verify EnterprisePlugins is true for E20") t.Run("install prepackaged and remote plugins through marketplace", func(t *testing.T) { prepackagedPluginsDir := "prepackaged_plugins" @@ -1492,124 +1492,126 @@ func TestInstallMarketplacePlugin(t *testing.T) { err = utils.CopyFile(filepath.Join(path, "testplugin.tar.gz.asc"), filepath.Join(prepackagedPluginsDir, "testplugin.tar.gz.sig")) require.NoError(t, err) - th := SetupConfig(t, func(cfg *model.Config) { + th2 := SetupConfig(t, func(cfg *model.Config) { // Disable auto-installing prepackaged plugins *cfg.PluginSettings.AutomaticPrepackagedPlugins = false }).InitBasic() - defer th.TearDown() + defer th2.TearDown() - pluginSignatureFile, err := os.Open(filepath.Join(path, "testplugin.tar.gz.asc")) - require.Nil(t, err) - pluginSignatureData, err := ioutil.ReadAll(pluginSignatureFile) - require.Nil(t, err) + th2.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { + pluginSignatureFile, err := os.Open(filepath.Join(path, "testplugin.tar.gz.asc")) + require.Nil(t, err) + pluginSignatureData, err := ioutil.ReadAll(pluginSignatureFile) + require.Nil(t, err) - key, err := os.Open(filepath.Join(path, "development-private-key.asc")) - require.NoError(t, err) - appErr := th.App.AddPublicKey("pub_key", key) - require.Nil(t, appErr) - - testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { - serverVersion := req.URL.Query().Get("server_version") - require.NotEmpty(t, serverVersion) - require.Equal(t, model.CurrentVersion, serverVersion) - res.WriteHeader(http.StatusOK) - json, err := json.Marshal([]*model.MarketplacePlugin{samplePlugins[1]}) + key, err := os.Open(filepath.Join(path, "development-private-key.asc")) require.NoError(t, err) - res.Write(json) - })) - defer testServer.Close() + appErr := th2.App.AddPublicKey("pub_key", key) + require.Nil(t, appErr) - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.PluginSettings.EnableMarketplace = true - *cfg.PluginSettings.EnableRemoteMarketplace = false - *cfg.PluginSettings.MarketplaceUrl = testServer.URL - *cfg.PluginSettings.AllowInsecureDownloadUrl = false - }) + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + serverVersion := req.URL.Query().Get("server_version") + require.NotEmpty(t, serverVersion) + require.Equal(t, model.CurrentVersion, serverVersion) + res.WriteHeader(http.StatusOK) + json, err := json.Marshal([]*model.MarketplacePlugin{samplePlugins[1]}) + require.NoError(t, err) + res.Write(json) + })) + defer testServer.Close() - env := th.App.GetPluginsEnvironment() + th2.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = false + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + *cfg.PluginSettings.AllowInsecureDownloadUrl = false + }) - pluginsResp, resp := th.SystemAdminClient.GetPlugins() - CheckNoError(t, resp) - require.Len(t, pluginsResp.Active, 0) - require.Len(t, pluginsResp.Inactive, 0) + env := th2.App.GetPluginsEnvironment() - // Should fail to install unknown prepackaged plugin - pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin", Version: "0.0.2"} - manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) - CheckInternalErrorStatus(t, resp) - require.Nil(t, manifest) + pluginsResp, resp := client.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Len(t, pluginsResp.Inactive, 0) - plugins := env.PrepackagedPlugins() - require.Len(t, plugins, 1) - require.Equal(t, "testplugin", plugins[0].Manifest.Id) - require.Equal(t, pluginSignatureData, plugins[0].Signature) + // Should fail to install unknown prepackaged plugin + pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin", Version: "0.0.2"} + manifest, resp := client.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) - pluginsResp, resp = th.SystemAdminClient.GetPlugins() - CheckNoError(t, resp) - require.Len(t, pluginsResp.Active, 0) - require.Len(t, pluginsResp.Inactive, 0) + plugins := env.PrepackagedPlugins() + require.Len(t, plugins, 1) + require.Equal(t, "testplugin", plugins[0].Manifest.Id) + require.Equal(t, pluginSignatureData, plugins[0].Signature) - pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin", Version: "0.0.1"} - manifest1, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) - CheckNoError(t, resp) - require.NotNil(t, manifest1) - require.Equal(t, "testplugin", manifest1.Id) - require.Equal(t, "0.0.1", manifest1.Version) + pluginsResp, resp = client.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Len(t, pluginsResp.Inactive, 0) - pluginsResp, resp = th.SystemAdminClient.GetPlugins() - CheckNoError(t, resp) - require.Len(t, pluginsResp.Active, 0) - require.Equal(t, pluginsResp.Inactive, []*model.PluginInfo{{ - Manifest: *manifest1, - }}) + pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin", Version: "0.0.1"} + manifest1, resp := client.InstallMarketplacePlugin(pRequest) + CheckNoError(t, resp) + require.NotNil(t, manifest1) + require.Equal(t, "testplugin", manifest1.Id) + require.Equal(t, "0.0.1", manifest1.Version) - // Try to install remote marketplace plugin - pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} - manifest, resp = th.SystemAdminClient.InstallMarketplacePlugin(pRequest) - CheckInternalErrorStatus(t, resp) - require.Nil(t, manifest) - - // Enable remote marketplace - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.PluginSettings.EnableMarketplace = true - *cfg.PluginSettings.EnableRemoteMarketplace = true - *cfg.PluginSettings.MarketplaceUrl = testServer.URL - *cfg.PluginSettings.AllowInsecureDownloadUrl = true - }) - - pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} - manifest2, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) - CheckNoError(t, resp) - require.NotNil(t, manifest2) - require.Equal(t, "testplugin2", manifest2.Id) - require.Equal(t, "1.2.3", manifest2.Version) - - pluginsResp, resp = th.SystemAdminClient.GetPlugins() - CheckNoError(t, resp) - require.Len(t, pluginsResp.Active, 0) - require.ElementsMatch(t, pluginsResp.Inactive, []*model.PluginInfo{ - { + pluginsResp, resp = client.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Equal(t, pluginsResp.Inactive, []*model.PluginInfo{{ Manifest: *manifest1, - }, - { - Manifest: *manifest2, - }, + }}) + + // Try to install remote marketplace plugin + pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} + manifest, resp = client.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) + + // Enable remote marketplace + th2.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + *cfg.PluginSettings.AllowInsecureDownloadUrl = true + }) + + pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} + manifest2, resp := client.InstallMarketplacePlugin(pRequest) + CheckNoError(t, resp) + require.NotNil(t, manifest2) + require.Equal(t, "testplugin2", manifest2.Id) + require.Equal(t, "1.2.3", manifest2.Version) + + pluginsResp, resp = client.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.ElementsMatch(t, pluginsResp.Inactive, []*model.PluginInfo{ + { + Manifest: *manifest1, + }, + { + Manifest: *manifest2, + }, + }) + + // Clean up + ok, resp := client.RemovePlugin(manifest1.Id) + CheckNoError(t, resp) + assert.True(t, ok) + + ok, resp = client.RemovePlugin(manifest2.Id) + CheckNoError(t, resp) + assert.True(t, ok) + + appErr = th2.App.DeletePublicKey("pub_key") + require.Nil(t, appErr) }) - - // Clean up - ok, resp := th.SystemAdminClient.RemovePlugin(manifest1.Id) - CheckNoError(t, resp) - assert.True(t, ok) - - ok, resp = th.SystemAdminClient.RemovePlugin(manifest2.Id) - CheckNoError(t, resp) - assert.True(t, ok) - - appErr = th.App.DeletePublicKey("pub_key") - require.Nil(t, appErr) }) - t.Run("missing prepackaged and remote plugin signatures", func(t *testing.T) { + th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) { prepackagedPluginsDir := "prepackaged_plugins" os.RemoveAll(prepackagedPluginsDir) @@ -1661,27 +1663,27 @@ func TestInstallMarketplacePlugin(t *testing.T) { require.Equal(t, "testplugin", plugins[0].Manifest.Id) require.Empty(t, plugins[0].Signature) - pluginsResp, resp := th.SystemAdminClient.GetPlugins() + pluginsResp, resp := client.GetPlugins() CheckNoError(t, resp) require.Len(t, pluginsResp.Active, 0) require.Len(t, pluginsResp.Inactive, 0) pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin", Version: "0.0.1"} - manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + manifest, resp := client.InstallMarketplacePlugin(pRequest) CheckInternalErrorStatus(t, resp) require.Nil(t, manifest) - pluginsResp, resp = th.SystemAdminClient.GetPlugins() + pluginsResp, resp = client.GetPlugins() CheckNoError(t, resp) require.Len(t, pluginsResp.Active, 0) require.Len(t, pluginsResp.Inactive, 0) pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} - manifest, resp = th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + manifest, resp = client.InstallMarketplacePlugin(pRequest) CheckInternalErrorStatus(t, resp) require.Nil(t, manifest) - pluginsResp, resp = th.SystemAdminClient.GetPlugins() + pluginsResp, resp = client.GetPlugins() CheckNoError(t, resp) require.Len(t, pluginsResp.Active, 0) require.Len(t, pluginsResp.Inactive, 0) @@ -1689,7 +1691,7 @@ func TestInstallMarketplacePlugin(t *testing.T) { // Clean up appErr = th.App.DeletePublicKey("pub_key") require.Nil(t, appErr) - }) + }, "missing prepackaged and remote plugin signatures") } func findClusterMessages(event string, msgs []*model.ClusterMessage) []*model.ClusterMessage {