From 9a58c91051e03b46f1461e371a7bf527c1284612 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 --- 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/src/github.com/docker/distribution/notifications/endpoint.go b/src/github.com/docker/distribution/notifications/endpoint.go index 29a9e27b5..44d0f6d7b 100644 --- a/src/github.com/docker/distribution/notifications/endpoint.go +++ b/src/github.com/docker/distribution/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/src/github.com/docker/distribution/notifications/metrics_test.go b/src/github.com/docker/distribution/notifications/metrics_test.go new file mode 100644 index 000000000..03a08e2c8 --- /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) + } +}