--- /dev/null
+package ocagent_test
+
+import (
+ "context"
+ "errors"
+ "testing"
+
+ "golang.org/x/tools/internal/event"
+ "golang.org/x/tools/internal/event/keys"
+)
+
+func TestEncodeMetric(t *testing.T) {
+ exporter := registerExporter()
+ const prefix = testNodeStr + `
+ "metrics":[`
+ const suffix = `]}`
+ tests := []struct {
+ name string
+ run func(ctx context.Context)
+ want string
+ }{
+ {
+ name: "HistogramFloat64, HistogramInt64",
+ run: func(ctx context.Context) {
+ ctx = event.Label(ctx, keyMethod.Of("godoc.ServeHTTP"))
+ event.Metric(ctx, latencyMs.Of(96.58))
+ ctx = event.Label(ctx, keys.Err.Of(errors.New("panic: fatal signal")))
+ event.Metric(ctx, bytesIn.Of(97e2))
+ },
+ want: prefix + `
+ {
+ "metric_descriptor": {
+ "name": "latency_ms",
+ "description": "The latency of calls in milliseconds",
+ "type": 6,
+ "label_keys": [
+ {
+ "key": "method"
+ },
+ {
+ "key": "route"
+ }
+ ]
+ },
+ "timeseries": [
+ {
+ "start_timestamp": "1970-01-01T00:00:00Z",
+ "points": [
+ {
+ "timestamp": "1970-01-01T00:00:40Z",
+ "distributionValue": {
+ "count": 1,
+ "sum": 96.58,
+ "bucket_options": {
+ "explicit": {
+ "bounds": [
+ 0,
+ 5,
+ 10,
+ 25,
+ 50
+ ]
+ }
+ },
+ "buckets": [
+ {},
+ {},
+ {},
+ {},
+ {}
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "metric_descriptor": {
+ "name": "latency_ms",
+ "description": "The latency of calls in milliseconds",
+ "type": 6,
+ "label_keys": [
+ {
+ "key": "method"
+ },
+ {
+ "key": "route"
+ }
+ ]
+ },
+ "timeseries": [
+ {
+ "start_timestamp": "1970-01-01T00:00:00Z",
+ "points": [
+ {
+ "timestamp": "1970-01-01T00:00:40Z",
+ "distributionValue": {
+ "count": 1,
+ "sum": 9700,
+ "bucket_options": {
+ "explicit": {
+ "bounds": [
+ 0,
+ 10,
+ 50,
+ 100,
+ 500,
+ 1000,
+ 2000
+ ]
+ }
+ },
+ "buckets": [
+ {},
+ {},
+ {},
+ {},
+ {},
+ {},
+ {}
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }` + suffix,
+ },
+ }
+
+ ctx := context.TODO()
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ tt.run(ctx)
+ got := exporter.Output("/v1/metrics")
+ checkJSON(t, got, []byte(tt.want))
+ })
+ }
+}