2
2
3
3
namespace React \Tests \Http \Middleware ;
4
4
5
+ use Clue \React \Block ;
5
6
use Psr \Http \Message \ServerRequestInterface ;
6
7
use React \EventLoop \Factory ;
7
8
use React \Http \Io \HttpBodyStream ;
8
9
use React \Http \Io \ServerRequest ;
9
10
use React \Http \Middleware \RequestBodyBufferMiddleware ;
11
+ use React \Http \Response ;
10
12
use React \Stream \ThroughStream ;
11
13
use React \Tests \Http \TestCase ;
12
14
use RingCentral \Psr7 \BufferStream ;
13
- use Clue \React \Block ;
14
15
15
16
final class RequestBodyBufferMiddlewareTest extends TestCase
16
17
{
@@ -65,7 +66,7 @@ function (ServerRequestInterface $request) use (&$exposedRequest) {
65
66
$ this ->assertSame ($ body , $ exposedRequest ->getBody ()->getContents ());
66
67
}
67
68
68
- public function testExcessiveSizeImmediatelyReturnsError413ForKnownSize ()
69
+ public function testKnownExcessiveSizedBodyIsDisgardedTheRequestIsPassedDownToTheNextMiddleware ()
69
70
{
70
71
$ loop = Factory::create ();
71
72
@@ -79,17 +80,18 @@ public function testExcessiveSizeImmediatelyReturnsError413ForKnownSize()
79
80
);
80
81
81
82
$ buffer = new RequestBodyBufferMiddleware (1 );
82
- $ response = $ buffer (
83
+ $ response = Block \await ( $ buffer (
83
84
$ serverRequest ,
84
85
function (ServerRequestInterface $ request ) {
85
- return $ request ;
86
+ return new Response ( 200 , array (), $ request-> getBody ()-> getContents ()) ;
86
87
}
87
- );
88
+ ), $ loop ) ;
88
89
89
- $ this ->assertSame (413 , $ response ->getStatusCode ());
90
+ $ this ->assertSame (200 , $ response ->getStatusCode ());
91
+ $ this ->assertSame ('' , $ response ->getBody ()->getContents ());
90
92
}
91
93
92
- public function testExcessiveSizeReturnsError413 ()
94
+ public function testExcessiveSizeBodyIsDisgardedTheRequestIsPassedDownToTheNextMiddleware ()
93
95
{
94
96
$ loop = Factory::create ();
95
97
@@ -105,23 +107,19 @@ public function testExcessiveSizeReturnsError413()
105
107
$ promise = $ buffer (
106
108
$ serverRequest ,
107
109
function (ServerRequestInterface $ request ) {
108
- return $ request ;
110
+ return new Response ( 200 , array (), $ request-> getBody ()-> getContents ()) ;
109
111
}
110
112
);
111
113
112
114
$ stream ->end ('aa ' );
113
115
114
- $ exposedResponse = null ;
115
- $ promise ->then (
116
- function ($ response ) use (&$ exposedResponse ) {
117
- $ exposedResponse = $ response ;
118
- },
116
+ $ exposedResponse = Block \await ($ promise ->then (
117
+ null ,
119
118
$ this ->expectCallableNever ()
120
- );
121
-
122
- $ this ->assertSame (413 , $ exposedResponse ->getStatusCode ());
119
+ ), $ loop );
123
120
124
- Block \await ($ promise , $ loop );
121
+ $ this ->assertSame (200 , $ exposedResponse ->getStatusCode ());
122
+ $ this ->assertSame ('' , $ exposedResponse ->getBody ()->getContents ());
125
123
}
126
124
127
125
/**
@@ -151,4 +149,30 @@ function (ServerRequestInterface $request) {
151
149
152
150
Block \await ($ promise , $ loop );
153
151
}
152
+
153
+ public function testFullBodyStreamedBeforeCallingNextMiddleware ()
154
+ {
155
+ $ promiseResolved = false ;
156
+ $ middleware = new RequestBodyBufferMiddleware (3 );
157
+ $ stream = new ThroughStream ();
158
+ $ serverRequest = new ServerRequest (
159
+ 'GET ' ,
160
+ 'https://example.com/ ' ,
161
+ array (),
162
+ new HttpBodyStream ($ stream , null )
163
+ );
164
+
165
+ $ middleware ($ serverRequest , function () {
166
+ return new Response ();
167
+ })->then (function () use (&$ promiseResolved ) {
168
+ $ promiseResolved = true ;
169
+ });
170
+
171
+ $ stream ->write ('aaa ' );
172
+ $ this ->assertFalse ($ promiseResolved );
173
+ $ stream ->write ('aaa ' );
174
+ $ this ->assertFalse ($ promiseResolved );
175
+ $ stream ->end ('aaa ' );
176
+ $ this ->assertTrue ($ promiseResolved );
177
+ }
154
178
}
0 commit comments