@@ -24,8 +24,8 @@ import (
24
24
"net/http"
25
25
"net/http/httptest"
26
26
"testing"
27
+ "time"
27
28
28
- "github.com/go-chi/chi"
29
29
"github.com/stretchr/testify/suite"
30
30
)
31
31
@@ -43,24 +43,24 @@ type RequestMetrics struct {
43
43
handler http.Handler
44
44
}
45
45
46
- func (rm * RequestMetrics ) setRoute ( metricsKey string ) {
46
+ func (rm * RequestMetrics ) SetupRoute ( key string ) {
47
47
48
- metricsMap := expvar .NewMap (metricsKey )
49
48
rm .rw = httptest .NewRecorder ()
50
49
r := httptest .NewRequest ("GET" , "/" , nil )
51
50
52
- rctx := chi .NewRouteContext ()
53
- rctx .RoutePatterns = []string {"/item/{set_item}" }
54
-
55
- rm .req = r .WithContext (context .WithValue (r .Context (), chi .RouteCtxKey , rctx ))
56
- rm .handler = http .Handler (HitCount (metricsMap )(getTestMetrics ()))
51
+ rm .req = r .WithContext (context .WithValue (r .Context (), responseTime , time .Now ()))
52
+ rm .handler = http .Handler (Metricize (key )(getTestMetrics ()))
57
53
58
54
}
59
55
60
56
func (rm RequestMetrics ) serveRoute () {
61
57
rm .handler .ServeHTTP (rm .rw , rm .req )
62
58
}
63
59
60
+ func (rm RequestMetrics ) serveSetTimehHandler () {
61
+ http .Handler (SetTime (getTestMetrics ())).ServeHTTP (rm .rw , rm .req )
62
+ }
63
+
64
64
func (rm RequestMetrics ) serveExpvarRoute () {
65
65
expvar .Handler ().ServeHTTP (rm .rw , rm .req )
66
66
}
@@ -77,36 +77,32 @@ func (rm RequestMetrics) getCode() int {
77
77
return rm .rw .(* httptest.ResponseRecorder ).Code
78
78
}
79
79
80
+ var sufixList = []string {".counts" , ".responseTime" , ".responseTimeHist.p50" , ".responseTimeHist.p90" , ".responseTimeHist.p95" , ".responseTimeHist.p99" }
81
+
80
82
func (suite * RequestMetrics ) TestUpdateMetricsHitOnce () {
81
83
82
- var metricsKey = "counter"
84
+ suite . SetupRoute ( "some_key" )
83
85
84
- suite .setRoute (metricsKey )
85
86
suite .serveRoute ()
86
87
87
88
suite .Equal (http .StatusOK , suite .getCode (), "Status code differs" )
88
-
89
89
suite .serveExpvarRoute ()
90
90
91
91
expVarMap := suite .getMetricsMap ()
92
+ for _ , item := range sufixList {
93
+ expectedKey := metricPrefix + "some_key" + item
94
+ value , ok := expVarMap [expectedKey ]
95
+ suite .True (ok )
92
96
93
- counterMap , ok := expVarMap [metricsKey ]
94
- suite .True (ok )
95
-
96
- suite .Contains (counterMap , "GET__item_{set_item}" )
97
-
98
- m := counterMap .(map [string ]interface {})
99
-
100
- suite .Equal (1.0 , m ["GET__item_{set_item}" ])
101
-
97
+ suite .NotEqual (0.0 , value )
98
+ }
102
99
}
103
100
104
101
func (suite * RequestMetrics ) TestUpdateMetricsHitMultiple () {
105
102
106
- var metricsKey = "counter1"
107
103
const hitNumber = 10.0
108
104
109
- suite .setRoute ( metricsKey )
105
+ suite .SetupRoute ( "different_key" )
110
106
111
107
for i := 0 ; i < hitNumber ; i ++ {
112
108
suite .serveRoute ()
@@ -118,15 +114,11 @@ func (suite *RequestMetrics) TestUpdateMetricsHitMultiple() {
118
114
119
115
expVarMap := suite .getMetricsMap ()
120
116
121
- counterMap , ok := expVarMap [metricsKey ]
117
+ expectedKey := metricPrefix + "different_key.counts"
118
+ value , ok := expVarMap [expectedKey ]
122
119
suite .True (ok )
123
120
124
- suite .Contains (counterMap , "GET__item_{set_item}" )
125
-
126
- m := counterMap .(map [string ]interface {})
127
-
128
- suite .Equal (hitNumber , m ["GET__item_{set_item}" ])
129
-
121
+ suite .NotEqual (0.0 , value )
130
122
}
131
123
132
124
func TestRequestMetrics (t * testing.T ) {
0 commit comments