summaryrefslogtreecommitdiffstats
path: root/event/otel/metric_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'event/otel/metric_test.go')
-rw-r--r--event/otel/metric_test.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/event/otel/metric_test.go b/event/otel/metric_test.go
new file mode 100644
index 0000000..300f4a7
--- /dev/null
+++ b/event/otel/metric_test.go
@@ -0,0 +1,75 @@
+// Copyright 2021 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.
+
+package otel_test
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/google/go-cmp/cmp"
+ "go.opentelemetry.io/otel/attribute"
+ "go.opentelemetry.io/otel/metric/metrictest"
+ "go.opentelemetry.io/otel/metric/number"
+ "golang.org/x/exp/event"
+ "golang.org/x/exp/event/otel"
+)
+
+func TestMeter(t *testing.T) {
+ ctx := context.Background()
+ mp := metrictest.NewMeterProvider()
+ mh := otel.NewMetricHandler(mp.Meter("test"))
+ ctx = event.WithExporter(ctx, event.NewExporter(mh, nil))
+ recordMetrics(ctx)
+
+ lib := metrictest.Library{InstrumentationName: "test"}
+ emptyLabels := map[attribute.Key]attribute.Value{}
+ got := metrictest.AsStructs(mp.MeasurementBatches)
+ want := []metrictest.Measured{
+ {
+ Name: "golang.org/x/exp/event/otel_test/hits",
+ Number: number.NewInt64Number(8),
+ Labels: emptyLabels,
+ Library: lib,
+ },
+ {
+ Name: "golang.org/x/exp/event/otel_test/temp",
+ Number: number.NewFloat64Number(-100),
+ Labels: map[attribute.Key]attribute.Value{"location": attribute.StringValue("Mare Imbrium")},
+ Library: lib,
+ },
+ {
+ Name: "golang.org/x/exp/event/otel_test/latency",
+ Number: number.NewInt64Number(int64(1248 * time.Millisecond)),
+ Labels: emptyLabels,
+ Library: lib,
+ },
+ {
+ Name: "golang.org/x/exp/event/otel_test/latency",
+ Number: number.NewInt64Number(int64(1255 * time.Millisecond)),
+ Labels: emptyLabels,
+ Library: lib,
+ },
+ }
+
+ if diff := cmp.Diff(want, got, cmp.Comparer(valuesEqual)); diff != "" {
+ t.Errorf("mismatch (-want, got):\n%s", diff)
+ }
+}
+
+func valuesEqual(v1, v2 attribute.Value) bool {
+ return v1.AsInterface() == v2.AsInterface()
+}
+
+func recordMetrics(ctx context.Context) {
+ c := event.NewCounter("hits", &event.MetricOptions{Description: "Earth meteorite hits"})
+ g := event.NewFloatGauge("temp", &event.MetricOptions{Description: "moon surface temperature in Kelvin"})
+ d := event.NewDuration("latency", &event.MetricOptions{Description: "Earth-moon comms lag, milliseconds"})
+
+ c.Record(ctx, 8)
+ g.Record(ctx, -100, event.String("location", "Mare Imbrium"))
+ d.Record(ctx, 1248*time.Millisecond)
+ d.Record(ctx, 1255*time.Millisecond)
+}