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