@@ -51,3 +51,33 @@ func TestBodyLimit(t *testing.T) {
51
51
he = BodyLimit ("2B" )(h )(c ).(* echo.HTTPError )
52
52
assert .Equal (t , http .StatusRequestEntityTooLarge , he .Code )
53
53
}
54
+
55
+ func TestBodyLimitReader (t * testing.T ) {
56
+ hw := []byte ("Hello, World!" )
57
+ e := echo .New ()
58
+ req := httptest .NewRequest (echo .POST , "/" , bytes .NewReader (hw ))
59
+ rec := httptest .NewRecorder ()
60
+
61
+ config := BodyLimitConfig {
62
+ Skipper : DefaultSkipper ,
63
+ Limit : "2B" ,
64
+ limit : 2 ,
65
+ }
66
+ reader := & limitedReader {
67
+ BodyLimitConfig : config ,
68
+ reader : ioutil .NopCloser (bytes .NewReader (hw )),
69
+ context : e .NewContext (req , rec ),
70
+ }
71
+
72
+ // read all should return ErrStatusRequestEntityTooLarge
73
+ _ , err := ioutil .ReadAll (reader )
74
+ he := err .(* echo.HTTPError )
75
+ assert .Equal (t , http .StatusRequestEntityTooLarge , he .Code )
76
+
77
+ // reset reader and read two bytes must succeed
78
+ bt := make ([]byte , 2 )
79
+ reader .Reset (ioutil .NopCloser (bytes .NewReader (hw )), e .NewContext (req , rec ))
80
+ n , err := reader .Read (bt )
81
+ assert .Equal (t , 2 , n )
82
+ assert .Equal (t , nil , err )
83
+ }
0 commit comments