@@ -51,3 +51,33 @@ func TestBodyLimit(t *testing.T) {
5151 he = BodyLimit ("2B" )(h )(c ).(* echo.HTTPError )
5252 assert .Equal (t , http .StatusRequestEntityTooLarge , he .Code )
5353}
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