From 376cbc0cc183c0da46c92afb5ec6455b67ea0df6 Mon Sep 17 00:00:00 2001 From: Noah Treuhaft Date: Wed, 8 Feb 2017 11:38:44 -0800 Subject: [PATCH] notifications: fix expvar for Go 1.7 Remove EndpointConfig.Transport from the return value of the registry.notifications.endpoints expvar.Func. It results in an empty value for that expvar variable under Go 1.7 because it is a non-nil *http.Transport, which Go 1.7 can no longer encode as JSON. Signed-off-by: Noah Treuhaft (cherry picked from commit 9a58c91051e03b46f1461e371a7bf527c1284612) --- notifications/endpoint.go | 2 +- notifications/metrics_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 notifications/metrics_test.go diff --git a/notifications/endpoint.go b/notifications/endpoint.go index 29a9e27b..44d0f6d7 100644 --- a/notifications/endpoint.go +++ b/notifications/endpoint.go @@ -13,7 +13,7 @@ type EndpointConfig struct { Threshold int Backoff time.Duration IgnoredMediaTypes []string - Transport *http.Transport + Transport *http.Transport `json:"-"` } // defaults set any zero-valued fields to a reasonable default. diff --git a/notifications/metrics_test.go b/notifications/metrics_test.go new file mode 100644 index 00000000..03a08e2c --- /dev/null +++ b/notifications/metrics_test.go @@ -0,0 +1,28 @@ +package notifications + +import ( + "encoding/json" + "expvar" + "testing" +) + +func TestMetricsExpvar(t *testing.T) { + endpointsVar := expvar.Get("registry").(*expvar.Map).Get("notifications").(*expvar.Map).Get("endpoints") + + var v interface{} + if err := json.Unmarshal([]byte(endpointsVar.String()), &v); err != nil { + t.Fatalf("unexpected error unmarshaling endpoints: %v", err) + } + if v != nil { + t.Fatalf("expected nil, got %#v", v) + } + + NewEndpoint("x", "y", EndpointConfig{}) + + if err := json.Unmarshal([]byte(endpointsVar.String()), &v); err != nil { + t.Fatalf("unexpected error unmarshaling endpoints: %v", err) + } + if slice, ok := v.([]interface{}); !ok || len(slice) != 1 { + t.Logf("expected one-element []interface{}, got %#v", v) + } +}