summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/armon/go-metrics/circonus/circonus_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/armon/go-metrics/circonus/circonus_test.go')
-rw-r--r--vendor/github.com/armon/go-metrics/circonus/circonus_test.go153
1 files changed, 153 insertions, 0 deletions
diff --git a/vendor/github.com/armon/go-metrics/circonus/circonus_test.go b/vendor/github.com/armon/go-metrics/circonus/circonus_test.go
new file mode 100644
index 000000000..234a3cb89
--- /dev/null
+++ b/vendor/github.com/armon/go-metrics/circonus/circonus_test.go
@@ -0,0 +1,153 @@
+package circonus
+
+import (
+ "errors"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+)
+
+func TestNewCirconusSink(t *testing.T) {
+
+ // test with invalid config (nil)
+ expectedError := errors.New("Invalid check manager configuration (no API token AND no submission url).")
+ _, err := NewCirconusSink(nil)
+ if err == nil || err.Error() != expectedError.Error() {
+ t.Errorf("Expected an '%#v' error, got '%#v'", expectedError, err)
+ }
+
+ // test w/submission url and w/o token
+ cfg := &Config{}
+ cfg.CheckManager.Check.SubmissionURL = "http://127.0.0.1:43191/"
+ _, err = NewCirconusSink(cfg)
+ if err != nil {
+ t.Errorf("Expected no error, got '%v'", err)
+ }
+
+ // note: a test with a valid token is *not* done as it *will* create a
+ // check resulting in testing the api more than the circonus sink
+ // see circonus-gometrics/checkmgr/checkmgr_test.go for testing of api token
+}
+
+func TestFlattenKey(t *testing.T) {
+ var testKeys = []struct {
+ input []string
+ expected string
+ }{
+ {[]string{"a", "b", "c"}, "a`b`c"},
+ {[]string{"a-a", "b_b", "c/c"}, "a-a`b_b`c/c"},
+ {[]string{"spaces must", "flatten", "to", "underscores"}, "spaces_must`flatten`to`underscores"},
+ }
+
+ c := &CirconusSink{}
+
+ for _, test := range testKeys {
+ if actual := c.flattenKey(test.input); actual != test.expected {
+ t.Fatalf("Flattening %v failed, expected '%s' got '%s'", test.input, test.expected, actual)
+ }
+ }
+}
+
+func fakeBroker(q chan string) *httptest.Server {
+ handler := func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(200)
+ w.Header().Set("Content-Type", "application/json")
+ defer r.Body.Close()
+ body, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ q <- err.Error()
+ fmt.Fprintln(w, err.Error())
+ } else {
+ q <- string(body)
+ fmt.Fprintln(w, `{"stats":1}`)
+ }
+ }
+
+ return httptest.NewServer(http.HandlerFunc(handler))
+}
+
+func TestSetGauge(t *testing.T) {
+ q := make(chan string)
+
+ server := fakeBroker(q)
+ defer server.Close()
+
+ cfg := &Config{}
+ cfg.CheckManager.Check.SubmissionURL = server.URL
+
+ cs, err := NewCirconusSink(cfg)
+ if err != nil {
+ t.Errorf("Expected no error, got '%v'", err)
+ }
+
+ go func() {
+ cs.SetGauge([]string{"foo", "bar"}, 1)
+ cs.Flush()
+ }()
+
+ expect := "{\"foo`bar\":{\"_type\":\"n\",\"_value\":1}}"
+ actual := <-q
+
+ if actual != expect {
+ t.Errorf("Expected '%s', got '%s'", expect, actual)
+
+ }
+}
+
+func TestIncrCounter(t *testing.T) {
+ q := make(chan string)
+
+ server := fakeBroker(q)
+ defer server.Close()
+
+ cfg := &Config{}
+ cfg.CheckManager.Check.SubmissionURL = server.URL
+
+ cs, err := NewCirconusSink(cfg)
+ if err != nil {
+ t.Errorf("Expected no error, got '%v'", err)
+ }
+
+ go func() {
+ cs.IncrCounter([]string{"foo", "bar"}, 1)
+ cs.Flush()
+ }()
+
+ expect := "{\"foo`bar\":{\"_type\":\"n\",\"_value\":1}}"
+ actual := <-q
+
+ if actual != expect {
+ t.Errorf("Expected '%s', got '%s'", expect, actual)
+
+ }
+}
+
+func TestAddSample(t *testing.T) {
+ q := make(chan string)
+
+ server := fakeBroker(q)
+ defer server.Close()
+
+ cfg := &Config{}
+ cfg.CheckManager.Check.SubmissionURL = server.URL
+
+ cs, err := NewCirconusSink(cfg)
+ if err != nil {
+ t.Errorf("Expected no error, got '%v'", err)
+ }
+
+ go func() {
+ cs.AddSample([]string{"foo", "bar"}, 1)
+ cs.Flush()
+ }()
+
+ expect := "{\"foo`bar\":{\"_type\":\"n\",\"_value\":[\"H[1.0e+00]=1\"]}}"
+ actual := <-q
+
+ if actual != expect {
+ t.Errorf("Expected '%s', got '%s'", expect, actual)
+
+ }
+}