diff options
author | Christopher Speller <crspeller@gmail.com> | 2017-04-03 07:01:32 -0400 |
---|---|---|
committer | George Goldberg <george@gberg.me> | 2017-04-03 12:01:32 +0100 |
commit | 67a8770118a7e8902efe537c4257b7442cb651fd (patch) | |
tree | ba3e81222aaa9131cc5b1b4ed4a79837cf31b648 /app | |
parent | c3d095b465ed87c086409992ef78b62a06c09909 (diff) | |
download | chat-67a8770118a7e8902efe537c4257b7442cb651fd.tar.gz chat-67a8770118a7e8902efe537c4257b7442cb651fd.tar.bz2 chat-67a8770118a7e8902efe537c4257b7442cb651fd.zip |
Creating unit tests for diagnostics (#5932)
Diffstat (limited to 'app')
-rw-r--r-- | app/diagnostics.go | 13 | ||||
-rw-r--r-- | app/diagnostics_test.go | 144 |
2 files changed, 155 insertions, 2 deletions
diff --git a/app/diagnostics.go b/app/diagnostics.go index d3eee29c5..2c8211f42 100644 --- a/app/diagnostics.go +++ b/app/diagnostics.go @@ -4,6 +4,8 @@ package app import ( + "log" + "os" "runtime" "github.com/mattermost/platform/model" @@ -44,7 +46,7 @@ var client *analytics.Client func SendDailyDiagnostics() { if *utils.Cfg.LogSettings.EnableDiagnostics { - initDiagnostics() + initDiagnostics("") trackActivity() trackConfig() trackLicense() @@ -52,9 +54,16 @@ func SendDailyDiagnostics() { } } -func initDiagnostics() { +func initDiagnostics(endpoint string) { if client == nil { client = analytics.New(SEGMENT_KEY) + // For testing + if endpoint != "" { + client.Endpoint = endpoint + client.Verbose = true + client.Size = 1 + client.Logger = log.New(os.Stdout, "segment ", log.LstdFlags) + } client.Identify(&analytics.Identify{ UserId: utils.CfgDiagnosticId, }) diff --git a/app/diagnostics_test.go b/app/diagnostics_test.go new file mode 100644 index 000000000..21b077bd8 --- /dev/null +++ b/app/diagnostics_test.go @@ -0,0 +1,144 @@ +// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package app + +import ( + "bytes" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "github.com/mattermost/platform/utils" +) + +func newTestServer() (chan string, *httptest.Server) { + result := make(chan string, 100) + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + buf := bytes.NewBuffer(nil) + io.Copy(buf, r.Body) + + result <- buf.String() + })) + + return result, server +} + +func TestDiagnostics(t *testing.T) { + Setup().InitBasic() + + if testing.Short() { + t.SkipNow() + } + + data, server := newTestServer() + defer server.Close() + + oldId := utils.CfgDiagnosticId + utils.CfgDiagnosticId = "i am not real" + defer func() { + utils.CfgDiagnosticId = oldId + }() + initDiagnostics(server.URL) + + // Should send a client identify message + select { + case identifyMessage := <-data: + t.Log("Got idmessage:\n" + identifyMessage) + if !strings.Contains(identifyMessage, utils.CfgDiagnosticId) { + t.Fail() + } + case <-time.After(time.Second * 1): + t.Fatal("Did not recieve ID message") + } + + t.Run("Send", func(t *testing.T) { + const TEST_VALUE = "stuff548959847" + SendDiagnostic("Testing Diagnostic", map[string]interface{}{ + "hey": TEST_VALUE, + }) + select { + case result := <-data: + t.Log("Got diagnostic:\n" + result) + if !strings.Contains(result, TEST_VALUE) { + t.Fail() + } + case <-time.After(time.Second * 1): + t.Fatal("Did not recieve diagnostic") + } + }) + + t.Run("SendDailyDiagnostics", func(t *testing.T) { + SendDailyDiagnostics() + + info := "" + // Collect the info sent. + for { + done := false + select { + case result := <-data: + info += result + case <-time.After(time.Second * 1): + // Done recieving + done = true + break + } + + if done { + break + } + } + + for _, item := range []string{ + TRACK_CONFIG_SERVICE, + TRACK_CONFIG_TEAM, + TRACK_CONFIG_SERVICE, + TRACK_CONFIG_TEAM, + TRACK_CONFIG_SQL, + TRACK_CONFIG_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_WEBRTC, + TRACK_CONFIG_SUPPORT, + TRACK_CONFIG_NATIVEAPP, + TRACK_CONFIG_ANALYTICS, + TRACK_ACTIVITY, + TRACK_SERVER, + } { + if !strings.Contains(info, item) { + t.Fatal("Sent diagnostics missing item: " + item) + } + } + }) + + t.Run("SendDailyDiagnosticsDisabled", func(t *testing.T) { + oldSetting := *utils.Cfg.LogSettings.EnableDiagnostics + *utils.Cfg.LogSettings.EnableDiagnostics = false + defer func() { + *utils.Cfg.LogSettings.EnableDiagnostics = oldSetting + }() + + SendDailyDiagnostics() + + select { + case <-data: + t.Fatal("Should not send diagnostics when they are disabled") + case <-time.After(time.Second * 1): + // Did not recieve diagnostics + } + }) +} |