event: merge the print and common tests to be a better test suite
Also add some extra tests to cover more functionality.
Change-Id: I1c5504afdc07c494722f190ba0409f5b9ba9696c
Reviewed-on: https://go-review.googlesource.com/c/exp/+/333074
Trust: Ian Cottrell <iancottrell@google.com>
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/event/adapter/gokit/gokit_test.go b/event/adapter/gokit/gokit_test.go
index d76dfaf..5db17dd 100644
--- a/event/adapter/gokit/gokit_test.go
+++ b/event/adapter/gokit/gokit_test.go
@@ -30,7 +30,7 @@
event.String("msg", "mess"),
},
}}
- if diff := cmp.Diff(want, h.Got, eventtest.CmpOption()); diff != "" {
+ if diff := cmp.Diff(want, h.Got, eventtest.CmpOptions()...); diff != "" {
t.Errorf("mismatch (-want, +got):\n%s", diff)
}
}
diff --git a/event/adapter/logr/logr_test.go b/event/adapter/logr/logr_test.go
index 66a60f0..8dcb87b 100644
--- a/event/adapter/logr/logr_test.go
+++ b/event/adapter/logr/logr_test.go
@@ -32,7 +32,7 @@
event.String("msg", "mess"),
},
}}
- if diff := cmp.Diff(want, th.Got, eventtest.CmpOption()); diff != "" {
+ if diff := cmp.Diff(want, th.Got, eventtest.CmpOptions()...); diff != "" {
t.Errorf("mismatch (-want, +got):\n%s", diff)
}
}
diff --git a/event/adapter/logrus/logrus_test.go b/event/adapter/logrus/logrus_test.go
index 467485e..bf8b850 100644
--- a/event/adapter/logrus/logrus_test.go
+++ b/event/adapter/logrus/logrus_test.go
@@ -11,7 +11,6 @@
"testing"
"github.com/google/go-cmp/cmp"
- "github.com/google/go-cmp/cmp/cmpopts"
"github.com/sirupsen/logrus"
"golang.org/x/exp/event"
elogrus "golang.org/x/exp/event/adapter/logrus"
@@ -39,8 +38,7 @@
}}
// logrus fields are stored in a map, so we have to sort to overcome map
// iteration indeterminacy.
- less := func(a, b event.Label) bool { return a.Name < b.Name }
- if diff := cmp.Diff(want, th.Got, cmpopts.SortSlices(less), eventtest.CmpOption()); diff != "" {
+ if diff := cmp.Diff(want, th.Got, eventtest.CmpOptions()...); diff != "" {
t.Errorf("mismatch (-want, +got):\n%s", diff)
}
}
diff --git a/event/adapter/zap/zap_test.go b/event/adapter/zap/zap_test.go
index 55461bf..95f6849 100644
--- a/event/adapter/zap/zap_test.go
+++ b/event/adapter/zap/zap_test.go
@@ -34,7 +34,7 @@
event.String("msg", "mess"),
},
}}
- if diff := cmp.Diff(want, h.Got, eventtest.CmpOption()); diff != "" {
+ if diff := cmp.Diff(want, h.Got, eventtest.CmpOptions()...); diff != "" {
t.Errorf("mismatch (-want, +got):\n%s", diff)
}
}
diff --git a/event/common_test.go b/event/common_test.go
deleted file mode 100644
index 35d021e..0000000
--- a/event/common_test.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !disable_events
-
-package event_test
-
-import (
- "context"
- "testing"
-
- "github.com/google/go-cmp/cmp"
- "golang.org/x/exp/event"
- "golang.org/x/exp/event/eventtest"
-)
-
-func TestCommon(t *testing.T) {
- m := event.NewCounter("m", "")
- for _, test := range []struct {
- method string
- events func(context.Context)
- expect []event.Event
- }{{
- method: "Log",
- events: func(ctx context.Context) { event.Log(ctx, "simple message") },
- expect: []event.Event{{
- ID: 1,
- Kind: event.LogKind,
- Labels: []event.Label{event.String("msg", "simple message")},
- }},
- }, {
- method: "Logf",
- events: func(ctx context.Context) { event.Logf(ctx, "logf %s message", "to") },
- expect: []event.Event{{
- ID: 1,
- Kind: event.LogKind,
- Labels: []event.Label{event.String("msg", "logf to message")},
- }},
- }, {
- method: "Metric",
- events: func(ctx context.Context) {
- m.Record(ctx, 3)
- },
- expect: []event.Event{{
- ID: 1,
- Kind: event.MetricKind,
- Labels: []event.Label{
- event.Int64("metricValue", 3),
- event.Value("metric", m),
- },
- }},
- }, {
- method: "Annotate",
- events: func(ctx context.Context) { event.Annotate(ctx, event.String("other", "some value")) },
- expect: []event.Event{{
- ID: 1,
- Labels: []event.Label{event.String("other", "some value")},
- }},
- }, {
- method: "Start",
- events: func(ctx context.Context) {
- ctx = event.Start(ctx, `a trace`)
- event.End(ctx)
- },
- expect: []event.Event{{
- ID: 1,
- Kind: event.StartKind,
- Labels: []event.Label{event.String("name", "a trace")},
- }, {
- ID: 2,
- Parent: 1,
- Kind: event.EndKind,
- Labels: []event.Label{},
- }},
- }} {
- t.Run(test.method, func(t *testing.T) {
- ctx, h := eventtest.NewCapture()
- test.events(ctx)
- if diff := cmp.Diff(test.expect, h.Got, eventtest.CmpOption()); diff != "" {
- t.Errorf("mismatch (-want, +got):\n%s", diff)
- }
- })
- }
-}
diff --git a/event/event_test.go b/event/event_test.go
index 8bedc21..d918bcd 100644
--- a/event/event_test.go
+++ b/event/event_test.go
@@ -8,12 +8,13 @@
import (
"context"
+ "errors"
"fmt"
"os"
- "strings"
"testing"
"time"
+ "github.com/google/go-cmp/cmp"
"golang.org/x/exp/event"
"golang.org/x/exp/event/adapter/logfmt"
"golang.org/x/exp/event/eventtest"
@@ -26,41 +27,84 @@
counter = event.NewCounter("hits", "cache hits")
gauge = event.NewFloatGauge("temperature", "CPU board temperature in Celsius")
latency = event.NewDuration("latency", "how long it took")
+ err = errors.New("an error")
)
-func TestPrint(t *testing.T) {
- ctx := context.Background()
+func TestCommon(t *testing.T) {
for _, test := range []struct {
- name string
+ method string
events func(context.Context)
- expect string
+ expect []event.Event
}{{
- name: "simple",
+ method: "simple",
events: func(ctx context.Context) { event.Log(ctx, "a message") },
- expect: `time="2020/03/05 14:27:48" msg="a message"
-`}, {
- name: "log 1",
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.LogKind,
+ Labels: []event.Label{event.String("msg", "a message")},
+ }},
+ }, {
+ method: "log 1",
events: func(ctx context.Context) { event.Log(ctx, "a message", l1) },
- expect: `time="2020/03/05 14:27:48" l1=1 msg="a message"`,
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.LogKind,
+ Labels: []event.Label{event.String("msg", "a message"), l1},
+ }},
}, {
- name: "log 2",
+ method: "log 2",
events: func(ctx context.Context) { event.Log(ctx, "a message", l1, l2) },
- expect: `time="2020/03/05 14:27:48" l1=1 l2=2 msg="a message"`,
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.LogKind,
+ Labels: []event.Label{event.String("msg", "a message"), l1, l2},
+ }},
}, {
- name: "log 3",
+ method: "log 3",
events: func(ctx context.Context) { event.Log(ctx, "a message", l1, l2, l3) },
- expect: `time="2020/03/05 14:27:48" l1=1 l2=2 l3=3 msg="a message"`,
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.LogKind,
+ Labels: []event.Label{event.String("msg", "a message"), l1, l2, l3},
+ }},
}, {
- name: "span",
+ method: "logf",
+ events: func(ctx context.Context) { event.Logf(ctx, "logf %s message", "to") },
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.LogKind,
+ Labels: []event.Label{event.String("msg", "logf to message")},
+ }},
+ }, {
+ method: "error",
+ events: func(ctx context.Context) { event.Error(ctx, "failed", err, l1) },
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.LogKind,
+ Labels: []event.Label{
+ event.String("msg", "failed"),
+ event.Value("error", err),
+ l1,
+ },
+ }},
+ }, {
+ method: "span",
events: func(ctx context.Context) {
- ctx = event.Start(ctx, "span")
+ ctx = event.Start(ctx, `span`)
event.End(ctx)
},
- expect: `
-time="2020/03/05 14:27:48" name=span trace=1
-time="2020/03/05 14:27:49" parent=1 end
-`}, {
- name: "span nested",
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.StartKind,
+ Labels: []event.Label{event.String("name", "span")},
+ }, {
+ ID: 2,
+ Parent: 1,
+ Kind: event.EndKind,
+ Labels: []event.Label{},
+ }},
+ }, {
+ method: "span nested",
events: func(ctx context.Context) {
ctx = event.Start(ctx, "parent")
defer event.End(ctx)
@@ -68,36 +112,83 @@
defer event.End(child)
event.Log(child, "message")
},
- expect: `
-time="2020/03/05 14:27:48" name=parent trace=1
-time="2020/03/05 14:27:49" parent=1 name=child trace=2
-time="2020/03/05 14:27:50" parent=2 msg=message
-time="2020/03/05 14:27:51" parent=2 end
-time="2020/03/05 14:27:52" parent=1 end
-`}, {
- name: "counter",
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.StartKind,
+ Labels: []event.Label{event.String("name", "parent")},
+ }, {
+ ID: 2,
+ Parent: 1,
+ Kind: event.StartKind,
+ Labels: []event.Label{event.String("name", "child")},
+ }, {
+ ID: 3,
+ Parent: 2,
+ Kind: event.LogKind,
+ Labels: []event.Label{event.String("msg", "message")},
+ }, {
+ ID: 4,
+ Parent: 2,
+ Kind: event.EndKind,
+ Labels: []event.Label{},
+ }, {
+ ID: 5,
+ Parent: 1,
+ Kind: event.EndKind,
+ Labels: []event.Label{},
+ }},
+ }, {
+ method: "counter",
events: func(ctx context.Context) { counter.Record(ctx, 2, l1) },
- expect: `time="2020/03/05 14:27:48" metricValue=2 metric="Metric(\"golang.org/x/exp/event_test/hits\")" l1=1`,
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.MetricKind,
+ Labels: []event.Label{
+ event.Int64("metricValue", 2),
+ event.Value("metric", counter),
+ l1,
+ },
+ }},
}, {
- name: "gauge",
+ method: "gauge",
events: func(ctx context.Context) { gauge.Record(ctx, 98.6, l1) },
- expect: `time="2020/03/05 14:27:48" metricValue=98.6 metric="Metric(\"golang.org/x/exp/event_test/temperature\")" l1=1`,
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.MetricKind,
+ Labels: []event.Label{
+ event.Float64("metricValue", 98.6),
+ event.Value("metric", gauge),
+ l1,
+ },
+ }},
}, {
- name: "duration",
- events: func(ctx context.Context) {
- latency.Record(ctx, 3*time.Second, l1, l2)
- },
- expect: `time="2020/03/05 14:27:48" metricValue=3s metric="Metric(\"golang.org/x/exp/event_test/latency\")" l1=1 l2=2`,
+ method: "duration",
+ events: func(ctx context.Context) { latency.Record(ctx, 3*time.Second, l1, l2) },
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.MetricKind,
+ Labels: []event.Label{
+ event.Duration("metricValue", 3*time.Second),
+ event.Value("metric", latency),
+ l1, l2,
+ },
+ }},
}, {
- name: "annotate",
+ method: "annotate",
events: func(ctx context.Context) { event.Annotate(ctx, l1) },
- expect: `time="2020/03/05 14:27:48" l1=1`,
+ expect: []event.Event{{
+ ID: 1,
+ Labels: []event.Label{l1},
+ }},
}, {
- name: "annotate 2",
+ method: "annotate 2",
events: func(ctx context.Context) { event.Annotate(ctx, l1, l2) },
- expect: `time="2020/03/05 14:27:48" l1=1 l2=2`,
+ expect: []event.Event{{
+ ID: 1,
+ Labels: []event.Label{l1, l2},
+ }},
}, {
- name: "multiple events",
+ method: "multiple events",
events: func(ctx context.Context) {
/*TODO: this is supposed to be using a cached target
t := event.To(ctx)
@@ -108,18 +199,29 @@
event.Log(ctx, "my event", event.Int64("myInt", 6))
event.Log(ctx, "string event", event.String("myString", "some string value"))
},
- expect: `
-time="2020/03/05 14:27:48" myInt=6 msg="my event"
-time="2020/03/05 14:27:49" myString="some string value" msg="string event"
-`}} {
- buf := &strings.Builder{}
- ctx := event.WithExporter(ctx, event.NewExporter(logfmt.NewHandler(buf), eventtest.ExporterOptions()))
- test.events(ctx)
- got := strings.TrimSpace(buf.String())
- expect := strings.TrimSpace(test.expect)
- if got != expect {
- t.Errorf("%s failed\ngot : %s\nexpect: %s", test.name, got, expect)
- }
+ expect: []event.Event{{
+ ID: 1,
+ Kind: event.LogKind,
+ Labels: []event.Label{
+ event.String("msg", "my event"),
+ event.Int64("myInt", 6),
+ },
+ }, {
+ ID: 2,
+ Kind: event.LogKind,
+ Labels: []event.Label{
+ event.String("msg", "string event"),
+ event.String("myString", "some string value"),
+ },
+ }},
+ }} {
+ t.Run(test.method, func(t *testing.T) {
+ ctx, h := eventtest.NewCapture()
+ test.events(ctx)
+ if diff := cmp.Diff(test.expect, h.Got, eventtest.CmpOptions()...); diff != "" {
+ t.Errorf("mismatch (-want, +got):\n%s", diff)
+ }
+ })
}
}
diff --git a/event/eventtest/eventtest.go b/event/eventtest/eventtest.go
index dd55a43..8081159 100644
--- a/event/eventtest/eventtest.go
+++ b/event/eventtest/eventtest.go
@@ -55,6 +55,11 @@
}
}
-func CmpOption() cmp.Option {
- return cmpopts.IgnoreFields(event.Event{}, "At", "ctx", "target", "labels")
+func CmpOptions() []cmp.Option {
+ return []cmp.Option{
+ cmpopts.SortSlices(func(x, y event.Label) bool {
+ return x.Name < y.Name
+ }),
+ cmpopts.IgnoreFields(event.Event{}, "At", "ctx", "target", "labels"),
+ }
}
diff --git a/event/label_test.go b/event/label_test.go
index 7ca43a8..0bf3ae1 100644
--- a/event/label_test.go
+++ b/event/label_test.go
@@ -35,6 +35,10 @@
if got := v.String(); got != s {
t.Errorf("got %v, want %v", got, s)
}
+ v = event.Bytes("key", []byte(s))
+ if got := v.Bytes(); string(got) != s {
+ t.Errorf("got %v, want %v", got, s)
+ }
tm := time.Now()
v = event.Value("key", tm)
if got := v.Interface(); got != tm {
@@ -91,6 +95,8 @@
{"uint64", func() { event.Int64("key", 3).Uint64() }},
{"float64", func() { event.Uint64("key", 3).Float64() }},
{"bool", func() { event.Int64("key", 3).Bool() }},
+ {"duration", func() { event.Value("key", "value").Duration() }},
+ {"bytes", func() { event.String("key", "value").Bytes() }},
} {
if !panics(test.f) {
t.Errorf("%s: got no panic, want panic", test.name)