internal/telemetry: make test event with functions

This will allow us to use the public API to generate the events.
This avoids creating the structs by hand.
It also helps tests the other API.

Change-Id: Ic90cbbaf6fc97c2a3e6a5ff64dccdff0d65ec865
Reviewed-on: https://go-review.googlesource.com/c/tools/+/206885
Run-TryBot: Ian Cottrell <iancottrell@google.com>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
This commit is contained in:
Ian Cottrell 2019-08-15 21:10:50 -04:00 committed by Ian Cottrell
parent 023c5eeaf4
commit 95cb2a1a7e
1 changed files with 51 additions and 41 deletions

View File

@ -5,6 +5,7 @@
package ocagent
import (
"context"
"encoding/json"
"errors"
"reflect"
@ -17,20 +18,23 @@ import (
func TestConvert_annotation(t *testing.T) {
tests := []struct {
name string
event telemetry.Event
event func(ctx context.Context) telemetry.Event
want string
}{
{
name: "no tags",
want: "null",
name: "no tags",
event: func(ctx context.Context) telemetry.Event { return telemetry.Event{} },
want: "null",
},
{
name: "description no error",
event: telemetry.Event{
Message: "cache miss",
Tags: telemetry.TagList{
tag.Of("db", "godb"),
},
event: func(ctx context.Context) telemetry.Event {
return telemetry.Event{
Message: "cache miss",
Tags: telemetry.TagList{
tag.Of("db", "godb"),
},
}
},
want: `{
"description": {
@ -50,12 +54,14 @@ func TestConvert_annotation(t *testing.T) {
{
name: "description and error",
event: telemetry.Event{
Message: "cache miss",
Error: errors.New("no network connectivity"),
Tags: telemetry.TagList{
tag.Of("db", "godb"),
},
event: func(ctx context.Context) telemetry.Event {
return telemetry.Event{
Message: "cache miss",
Error: errors.New("no network connectivity"),
Tags: telemetry.TagList{
tag.Of("db", "godb"),
},
}
},
want: `{
"description": {
@ -79,11 +85,13 @@ func TestConvert_annotation(t *testing.T) {
},
{
name: "no description, but error",
event: telemetry.Event{
Error: errors.New("no network connectivity"),
Tags: telemetry.TagList{
tag.Of("db", "godb"),
},
event: func(ctx context.Context) telemetry.Event {
return telemetry.Event{
Error: errors.New("no network connectivity"),
Tags: telemetry.TagList{
tag.Of("db", "godb"),
},
}
},
want: `{
"description": {
@ -102,30 +110,32 @@ func TestConvert_annotation(t *testing.T) {
},
{
name: "enumerate all attribute types",
event: telemetry.Event{
Message: "cache miss",
Tags: telemetry.TagList{
tag.Of("db", "godb"),
event: func(ctx context.Context) telemetry.Event {
return telemetry.Event{
Message: "cache miss",
Tags: telemetry.TagList{
tag.Of("db", "godb"),
tag.Of("age", 0.456), // Constant converted into "float64"
tag.Of("ttl", float32(5000)),
tag.Of("expiry_ms", float64(1e3)),
tag.Of("age", 0.456), // Constant converted into "float64"
tag.Of("ttl", float32(5000)),
tag.Of("expiry_ms", float64(1e3)),
tag.Of("retry", false),
tag.Of("stale", true),
tag.Of("retry", false),
tag.Of("stale", true),
tag.Of("max", 0x7fff), // Constant converted into "int"
tag.Of("opcode", int8(0x7e)),
tag.Of("base", int16(1<<9)),
tag.Of("checksum", int32(0x11f7e294)),
tag.Of("mode", int64(0644)),
tag.Of("max", 0x7fff), // Constant converted into "int"
tag.Of("opcode", int8(0x7e)),
tag.Of("base", int16(1<<9)),
tag.Of("checksum", int32(0x11f7e294)),
tag.Of("mode", int64(0644)),
tag.Of("min", uint(1)),
tag.Of("mix", uint8(44)),
tag.Of("port", uint16(55678)),
tag.Of("min_hops", uint32(1<<9)),
tag.Of("max_hops", uint64(0xffffff)),
},
tag.Of("min", uint(1)),
tag.Of("mix", uint8(44)),
tag.Of("port", uint16(55678)),
tag.Of("min_hops", uint32(1<<9)),
tag.Of("max_hops", uint64(0xffffff)),
},
}
},
want: `{
"description": {
@ -186,10 +196,10 @@ func TestConvert_annotation(t *testing.T) {
}`,
},
}
ctx := context.TODO()
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := marshaled(convertAnnotation(tt.event))
got := marshaled(convertAnnotation(tt.event(ctx)))
if !reflect.DeepEqual(got, tt.want) {
t.Fatalf("Got:\n%s\nWant:\n%s", got, tt.want)
}