@@ -93,7 +93,7 @@ func TestFrontend_RequestHostHeaderWhenDownstreamURLIsConfigured(t *testing.T) {
93
93
testFrontend (t , config , nil , test , true , nil )
94
94
}
95
95
96
- func TestFrontend_LogsSlowQueriesFormValues (t * testing.T ) {
96
+ func TestFrontend_LogsSlowQueries (t * testing.T ) {
97
97
// Create an HTTP server listening locally. This server mocks the downstream
98
98
// Prometheus API-compatible server.
99
99
downstreamListen , err := net .Listen ("tcp" , "localhost:0" )
@@ -109,50 +109,77 @@ func TestFrontend_LogsSlowQueriesFormValues(t *testing.T) {
109
109
defer downstreamServer .Shutdown (context .Background ()) //nolint:errcheck
110
110
go downstreamServer .Serve (downstreamListen ) //nolint:errcheck
111
111
112
- // Configure the query-frontend with the mocked downstream server.
113
- config := defaultFrontendConfig ()
114
- config .Handler .LogQueriesLongerThan = 1 * time .Microsecond
115
- config .DownstreamURL = fmt .Sprintf ("http://%s" , downstreamListen .Addr ())
116
-
117
- var buf concurrency.SyncBuffer
118
- l := log .NewLogfmtLogger (& buf )
119
-
120
- test := func (addr string ) {
121
- data := url.Values {}
122
- data .Set ("test" , "form" )
123
- data .Set ("issue" , "3111" )
124
-
125
- req , _ := http .NewRequest (http .MethodPost , fmt .Sprintf ("http://%s/?foo=bar" , addr ), strings .NewReader (data .Encode ()))
126
- req .Header .Add ("Content-Type" , "application/x-www-form-urlencoded" )
127
- req .Header .Add ("Content-Length" , strconv .Itoa (len (data .Encode ())))
128
-
129
- ctx := context .Background ()
130
- req = req .WithContext (ctx )
131
- assert .NoError (t , err )
132
- err = user .InjectOrgIDIntoHTTPRequest (user .InjectOrgID (ctx , "1" ), req )
133
- assert .NoError (t , err )
134
-
135
- client := http.Client {
136
- Transport : & nethttp.Transport {},
137
- }
138
-
139
- resp , err := client .Do (req )
140
- assert .NoError (t , err )
141
- b , err := ioutil .ReadAll (resp .Body )
142
- resp .Body .Close ()
143
-
144
- assert .NoError (t , err )
145
- assert .Equal (t , 200 , resp .StatusCode , string (b ))
146
-
147
- logs := buf .String ()
148
- assert .NotContains (t , logs , "unable to parse form for request" )
149
- assert .Contains (t , logs , "msg=\" slow query detected\" " )
150
- assert .Contains (t , logs , "param_issue=3111" )
151
- assert .Contains (t , logs , "param_test=form" )
152
- assert .Contains (t , logs , "param_foo=bar" )
112
+ tests := map [string ]struct {
113
+ longerThan time.Duration
114
+ shouldLog bool
115
+ }{
116
+ "longer than set to > 0" : {
117
+ longerThan : 1 * time .Microsecond ,
118
+ shouldLog : true ,
119
+ },
120
+ "longer than set to < 0" : {
121
+ longerThan : - 1 * time .Microsecond ,
122
+ shouldLog : true ,
123
+ },
124
+ "logging disabled" : {
125
+ longerThan : 0 ,
126
+ shouldLog : false ,
127
+ },
153
128
}
154
129
155
- testFrontend (t , config , nil , test , false , l )
130
+ for testName , testData := range tests {
131
+ t .Run (testName , func (t * testing.T ) {
132
+ // Configure the query-frontend with the mocked downstream server.
133
+ config := defaultFrontendConfig ()
134
+ config .Handler .LogQueriesLongerThan = testData .longerThan
135
+ config .DownstreamURL = fmt .Sprintf ("http://%s" , downstreamListen .Addr ())
136
+
137
+ var buf concurrency.SyncBuffer
138
+
139
+ test := func (addr string ) {
140
+ // To assert form values are logged as well.
141
+ data := url.Values {}
142
+ data .Set ("test" , "form" )
143
+ data .Set ("issue" , "3111" )
144
+
145
+ req , _ := http .NewRequest (http .MethodPost , fmt .Sprintf ("http://%s/?foo=bar" , addr ), strings .NewReader (data .Encode ()))
146
+ req .Header .Add ("Content-Type" , "application/x-www-form-urlencoded" )
147
+ req .Header .Add ("Content-Length" , strconv .Itoa (len (data .Encode ())))
148
+
149
+ ctx := context .Background ()
150
+ req = req .WithContext (ctx )
151
+ assert .NoError (t , err )
152
+ err = user .InjectOrgIDIntoHTTPRequest (user .InjectOrgID (ctx , "1" ), req )
153
+ assert .NoError (t , err )
154
+
155
+ client := http.Client {
156
+ Transport : & nethttp.Transport {},
157
+ }
158
+
159
+ resp , err := client .Do (req )
160
+ assert .NoError (t , err )
161
+ b , err := ioutil .ReadAll (resp .Body )
162
+ resp .Body .Close ()
163
+
164
+ assert .NoError (t , err )
165
+ assert .Equal (t , 200 , resp .StatusCode , string (b ))
166
+
167
+ logs := buf .String ()
168
+ assert .NotContains (t , logs , "unable to parse form for request" )
169
+
170
+ if testData .shouldLog {
171
+ assert .Contains (t , logs , "msg=\" slow query detected\" " )
172
+ assert .Contains (t , logs , "param_issue=3111" )
173
+ assert .Contains (t , logs , "param_test=form" )
174
+ assert .Contains (t , logs , "param_foo=bar" )
175
+ } else {
176
+ assert .NotContains (t , logs , "msg=\" slow query detected\" " )
177
+ }
178
+ }
179
+
180
+ testFrontend (t , config , nil , test , false , log .NewLogfmtLogger (& buf ))
181
+ })
182
+ }
156
183
}
157
184
158
185
func TestFrontend_ReturnsRequestBodyTooLargeError (t * testing.T ) {
0 commit comments