From 9a51c73f6428b70e31fc8c35de770b91270e6bba Mon Sep 17 00:00:00 2001 From: Jesse Hallam Date: Sat, 15 Feb 2020 18:46:26 -0400 Subject: [PATCH] MM-22619: check for nil plugins environment (#13901) * MM-22619: check for nil plugins environment Check if plugins were disabled before attempting to collect metrics and emit telemetry for same. Fixes: https://mattermost.atlassian.net/browse/MM-22619 * Update app/diagnostics_test.go --- app/diagnostics.go | 33 ++++++++++++------------ app/diagnostics_test.go | 56 ++++++++++++++++++++++++++++++++++++++++- app/helper_test.go | 13 +++++++--- 3 files changed, 82 insertions(+), 20 deletions(-) diff --git a/app/diagnostics.go b/app/diagnostics.go index 0e98f60a51..d482f84e6a 100644 --- a/app/diagnostics.go +++ b/app/diagnostics.go @@ -636,22 +636,23 @@ func (a *App) trackConfig() { } pluginsEnvironment := a.GetPluginsEnvironment() - - if plugins, appErr := pluginsEnvironment.Available(); appErr != nil { - mlog.Error("Unable to add plugin versions to diagnostics", mlog.Err(appErr)) - } else { - pluginConfigData["version_antivirus"] = pluginVersion(plugins, "antivirus") - pluginConfigData["version_autolink"] = pluginVersion(plugins, "mattermost-autolink") - pluginConfigData["version_aws_sns"] = pluginVersion(plugins, "com.mattermost.aws-sns") - pluginConfigData["version_custom_user_attributes"] = pluginVersion(plugins, "com.mattermost.custom-attributes") - pluginConfigData["version_github"] = pluginVersion(plugins, "github") - pluginConfigData["version_gitlab"] = pluginVersion(plugins, "com.github.manland.mattermost-plugin-gitlab") - pluginConfigData["version_jenkins"] = pluginVersion(plugins, "jenkins") - pluginConfigData["version_jira"] = pluginVersion(plugins, "jira") - pluginConfigData["version_nps"] = pluginVersion(plugins, "com.mattermost.nps") - pluginConfigData["version_webex"] = pluginVersion(plugins, "com.mattermost.webex") - pluginConfigData["version_welcome_bot"] = pluginVersion(plugins, "com.mattermost.welcomebot") - pluginConfigData["version_zoom"] = pluginVersion(plugins, "zoom") + if pluginsEnvironment != nil { + if plugins, appErr := pluginsEnvironment.Available(); appErr != nil { + mlog.Error("Unable to add plugin versions to diagnostics", mlog.Err(appErr)) + } else { + pluginConfigData["version_antivirus"] = pluginVersion(plugins, "antivirus") + pluginConfigData["version_autolink"] = pluginVersion(plugins, "mattermost-autolink") + pluginConfigData["version_aws_sns"] = pluginVersion(plugins, "com.mattermost.aws-sns") + pluginConfigData["version_custom_user_attributes"] = pluginVersion(plugins, "com.mattermost.custom-attributes") + pluginConfigData["version_github"] = pluginVersion(plugins, "github") + pluginConfigData["version_gitlab"] = pluginVersion(plugins, "com.github.manland.mattermost-plugin-gitlab") + pluginConfigData["version_jenkins"] = pluginVersion(plugins, "jenkins") + pluginConfigData["version_jira"] = pluginVersion(plugins, "jira") + pluginConfigData["version_nps"] = pluginVersion(plugins, "com.mattermost.nps") + pluginConfigData["version_webex"] = pluginVersion(plugins, "com.mattermost.webex") + pluginConfigData["version_welcome_bot"] = pluginVersion(plugins, "com.mattermost.welcomebot") + pluginConfigData["version_zoom"] = pluginVersion(plugins, "zoom") + } } a.SendDiagnostic(TRACK_CONFIG_PLUGIN, pluginConfigData) diff --git a/app/diagnostics_test.go b/app/diagnostics_test.go index d401e8cd1a..054d0b9b50 100644 --- a/app/diagnostics_test.go +++ b/app/diagnostics_test.go @@ -68,7 +68,9 @@ func TestDiagnostics(t *testing.T) { t.SkipNow() } - th := Setup(t) + th := SetupWithCustomConfig(t, func(config *model.Config) { + *config.PluginSettings.Enable = false + }) defer th.TearDown() type payload struct { @@ -147,6 +149,58 @@ func TestDiagnostics(t *testing.T) { } }) + // Plugins remain disabled at this point + t.Run("SendDailyDiagnosticsPluginsDisabled", func(t *testing.T) { + th.App.sendDailyDiagnostics(true) + + var info []string + // Collect the info sent. + Loop: + for { + select { + case result := <-data: + assertPayload(t, result, "", nil) + info = append(info, result.Batch[0].Event) + case <-time.After(time.Second * 1): + break Loop + } + } + + for _, item := range []string{ + TRACK_CONFIG_SERVICE, + TRACK_CONFIG_TEAM, + TRACK_CONFIG_SQL, + TRACK_CONFIG_LOG, + TRACK_CONFIG_NOTIFICATION_LOG, + TRACK_CONFIG_FILE, + TRACK_CONFIG_RATE, + TRACK_CONFIG_EMAIL, + TRACK_CONFIG_PRIVACY, + TRACK_CONFIG_OAUTH, + TRACK_CONFIG_LDAP, + TRACK_CONFIG_COMPLIANCE, + TRACK_CONFIG_LOCALIZATION, + TRACK_CONFIG_SAML, + TRACK_CONFIG_PASSWORD, + TRACK_CONFIG_CLUSTER, + TRACK_CONFIG_METRICS, + TRACK_CONFIG_SUPPORT, + TRACK_CONFIG_NATIVEAPP, + TRACK_CONFIG_EXPERIMENTAL, + TRACK_CONFIG_ANALYTICS, + TRACK_CONFIG_PLUGIN, + TRACK_ACTIVITY, + TRACK_SERVER, + TRACK_CONFIG_MESSAGE_EXPORT, + // TRACK_PLUGINS, + } { + require.Contains(t, info, item) + } + }) + + // Enable plugins for the remainder of the tests. + th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true }) + t.Run("SendDailyDiagnostics", func(t *testing.T) { th.App.sendDailyDiagnostics(true) diff --git a/app/helper_test.go b/app/helper_test.go index a3374b9cac..7e986fa1d0 100644 --- a/app/helper_test.go +++ b/app/helper_test.go @@ -33,7 +33,7 @@ type TestHelper struct { tempWorkspace string } -func setupTestHelper(enterprise bool, tb testing.TB) *TestHelper { +func setupTestHelper(enterprise bool, tb testing.TB, configSet func(*model.Config)) *TestHelper { store := mainHelper.GetStore() store.DropAllTables() @@ -48,6 +48,9 @@ func setupTestHelper(enterprise bool, tb testing.TB) *TestHelper { } config := memoryStore.Get() + if configSet != nil { + configSet(config) + } *config.PluginSettings.Directory = filepath.Join(tempWorkspace, "plugins") *config.PluginSettings.ClientDirectory = filepath.Join(tempWorkspace, "webapp") memoryStore.Set(config) @@ -105,11 +108,15 @@ func setupTestHelper(enterprise bool, tb testing.TB) *TestHelper { } func SetupEnterprise(tb testing.TB) *TestHelper { - return setupTestHelper(true, tb) + return setupTestHelper(true, tb, nil) } func Setup(tb testing.TB) *TestHelper { - return setupTestHelper(false, tb) + return setupTestHelper(false, tb, nil) +} + +func SetupWithCustomConfig(tb testing.TB, configSet func(*model.Config)) *TestHelper { + return setupTestHelper(false, tb, configSet) } func (me *TestHelper) InitBasic() *TestHelper {