1package metrics
2
3import (
4	"fmt"
5	"go.opencensus.io/stats"
6	"testing"
7
8	"go.opencensus.io/stats/view"
9)
10
11func newTestMeasure(name string) stats.Measure {
12	return stats.Int64(fmt.Sprintf("test/measure/%s", name),
13		fmt.Sprintf("Test measurement %s", name),
14		stats.UnitDimensionless,
15	)
16}
17
18func newTestView(name string) *view.View {
19	return &view.View{
20		Name:        fmt.Sprintf("test/%s", name),
21		Description: fmt.Sprintf("Test view %s", name),
22		Measure:     newTestMeasure(name),
23		Aggregation: view.LastValue(),
24	}
25}
26
27func TestRegisteringViews(t *testing.T) {
28	registeredViews = make(map[string][]*view.View)
29
30	t.Run("test registering first views", func(t *testing.T) {
31		testView := newTestView("empty-map-0")
32
33		if err := RegisterViews("test", testView); err != nil {
34			t.Fatal("unable to register view in empty map", err)
35		}
36	})
37
38	t.Run("test registering with existing views", func(t *testing.T) {
39		testView := newTestView("empty-map-1")
40		testView2 := newTestView("existing-entity-0")
41
42		if err := RegisterViews("test2", testView); err != nil {
43			t.Fatal("unable to register view in empty map", err)
44		}
45		if err := RegisterViews("test3", testView2); err != nil {
46			t.Fatal("unable to register view in map", err)
47		}
48	})
49
50	t.Run("test registering duplicate views", func(t *testing.T) {
51		testView := newTestView("empty-map-2")
52		testView2 := newTestView("existing-entity-1")
53
54		if err := RegisterViews("test4", testView); err != nil {
55			t.Fatal("unable to register view in empty map", err)
56		}
57		if err := RegisterViews("test4", testView2); err == nil {
58			t.Fatal("allowed duplicate view registration")
59		}
60	})
61
62	t.Run("test looking up views", func(t *testing.T) {
63		testView := newTestView("empty-map-3")
64
65		if err := RegisterViews("test5", testView); err != nil {
66			t.Fatal("unable to register view in empty map", err)
67		}
68
69		views, err := LookupViews("test5")
70		if err != nil {
71			t.Fatal("error looking up views", err)
72		}
73
74		if views[0].Name != testView.Name {
75			t.Fatal("incorrect view lookup, received name:", views[0].Name)
76		}
77	})
78}
79
80func TestAllViews(t *testing.T) {
81	registeredViews = make(map[string][]*view.View)
82	t.Run("test retrieving all views", func(t *testing.T) {
83		views := []*view.View{newTestView("all-views-0"), newTestView("all-views-1"), newTestView("all-views-2")}
84
85		if err := RegisterViews("test6", views...); err != nil {
86			t.Fatal("unable to register multiple views at once", err)
87		}
88
89		allViews := AllViews()
90		if len(allViews) != len(views) {
91			t.Fatalf("didn't receive equal number of views: %d %d", len(views), len(allViews))
92		}
93	})
94}
95