@@ -17,6 +17,7 @@ limitations under the License.
17
17
package http
18
18
19
19
import (
20
+ "bytes"
20
21
"fmt"
21
22
"net"
22
23
"net/http"
@@ -368,3 +369,70 @@ func TestHTTPProbeChecker_HostHeaderPreservedAfterRedirect(t *testing.T) {
368
369
})
369
370
}
370
371
}
372
+
373
+ func TestHTTPProbeChecker_PayloadTruncated (t * testing.T ) {
374
+ successHostHeader := "www.success.com"
375
+ oversizePayload := bytes .Repeat ([]byte ("a" ), maxRespBodyLength + 1 )
376
+ truncatedPayload := bytes .Repeat ([]byte ("a" ), maxRespBodyLength )
377
+
378
+ handler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
379
+ switch r .URL .Path {
380
+ case "/success" :
381
+ if r .Host == successHostHeader {
382
+ w .WriteHeader (http .StatusOK )
383
+ w .Write (oversizePayload )
384
+ } else {
385
+ http .Error (w , "" , http .StatusBadRequest )
386
+ }
387
+ default :
388
+ http .Error (w , "" , http .StatusInternalServerError )
389
+ }
390
+ })
391
+ server := httptest .NewServer (handler )
392
+ defer server .Close ()
393
+
394
+ headers := http.Header {}
395
+ headers .Add ("Host" , successHostHeader )
396
+ t .Run ("truncated payload" , func (t * testing.T ) {
397
+ prober := New (false )
398
+ target , err := url .Parse (server .URL + "/success" )
399
+ require .NoError (t , err )
400
+ result , body , err := prober .Probe (target , headers , wait .ForeverTestTimeout )
401
+ assert .NoError (t , err )
402
+ assert .Equal (t , result , probe .Success )
403
+ assert .Equal (t , body , string (truncatedPayload ))
404
+ })
405
+ }
406
+
407
+ func TestHTTPProbeChecker_PayloadNormal (t * testing.T ) {
408
+ successHostHeader := "www.success.com"
409
+ normalPayload := bytes .Repeat ([]byte ("a" ), maxRespBodyLength - 1 )
410
+
411
+ handler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
412
+ switch r .URL .Path {
413
+ case "/success" :
414
+ if r .Host == successHostHeader {
415
+ w .WriteHeader (http .StatusOK )
416
+ w .Write (normalPayload )
417
+ } else {
418
+ http .Error (w , "" , http .StatusBadRequest )
419
+ }
420
+ default :
421
+ http .Error (w , "" , http .StatusInternalServerError )
422
+ }
423
+ })
424
+ server := httptest .NewServer (handler )
425
+ defer server .Close ()
426
+
427
+ headers := http.Header {}
428
+ headers .Add ("Host" , successHostHeader )
429
+ t .Run ("normal payload" , func (t * testing.T ) {
430
+ prober := New (false )
431
+ target , err := url .Parse (server .URL + "/success" )
432
+ require .NoError (t , err )
433
+ result , body , err := prober .Probe (target , headers , wait .ForeverTestTimeout )
434
+ assert .NoError (t , err )
435
+ assert .Equal (t , result , probe .Success )
436
+ assert .Equal (t , body , string (normalPayload ))
437
+ })
438
+ }
0 commit comments