@@ -7,7 +7,6 @@ use std::sync::mpsc;
7
7
use std:: time:: Duration ;
8
8
9
9
use hyper:: client:: { Handler , Request , Response , HttpConnector } ;
10
- use hyper:: header;
11
10
use hyper:: { Method , StatusCode , Next , Encoder , Decoder } ;
12
11
use hyper:: net:: HttpStream ;
13
12
@@ -158,33 +157,91 @@ fn client() -> Client {
158
157
}
159
158
}
160
159
160
+ macro_rules! test {
161
+ (
162
+ name: $name: ident,
163
+ server:
164
+ expected: $server_expected: expr,
165
+ reply: $server_reply: expr,
166
+ client:
167
+ request:
168
+ method: $client_method: ident,
169
+ url: $client_url: expr,
170
+ response:
171
+ status: $client_status: ident,
172
+ headers: [ $( $client_headers: expr, ) * ] ,
173
+ body: $client_body: expr
174
+ ) => (
175
+ #[ test]
176
+ fn $name( ) {
177
+ let server = TcpListener :: bind( "127.0.0.1:0" ) . unwrap( ) ;
178
+ let addr = server. local_addr( ) . unwrap( ) ;
179
+ let client = client( ) ;
180
+ let res = client. request( format!( $client_url, addr=addr) , opts( ) . method( Method :: $client_method) ) ;
161
181
162
- #[ test]
163
- fn client_get ( ) {
164
- let server = TcpListener :: bind ( "127.0.0.1:0" ) . unwrap ( ) ;
165
- let addr = server. local_addr ( ) . unwrap ( ) ;
166
- let client = client ( ) ;
167
- let res = client. request ( format ! ( "http://{}/" , addr) , opts ( ) . method ( Method :: Get ) ) ;
182
+ let mut inc = server. accept( ) . unwrap( ) . 0 ;
183
+ inc. set_read_timeout( Some ( Duration :: from_secs( 5 ) ) ) . unwrap( ) ;
184
+ inc. set_write_timeout( Some ( Duration :: from_secs( 5 ) ) ) . unwrap( ) ;
185
+ let mut buf = [ 0 ; 4096 ] ;
186
+ let n = inc. read( & mut buf) . unwrap( ) ;
187
+ let expected = format!( $server_expected, addr=addr) ;
188
+ assert_eq!( s( & buf[ ..n] ) , expected) ;
168
189
169
- let mut inc = server. accept ( ) . unwrap ( ) . 0 ;
170
- inc. set_read_timeout ( Some ( Duration :: from_secs ( 5 ) ) ) . unwrap ( ) ;
171
- inc. set_write_timeout ( Some ( Duration :: from_secs ( 5 ) ) ) . unwrap ( ) ;
172
- let mut buf = [ 0 ; 4096 ] ;
173
- let n = inc. read ( & mut buf) . unwrap ( ) ;
174
- let expected = format ! ( "GET / HTTP/1.1\r \n Host: {}\r \n \r \n " , addr) ;
175
- assert_eq ! ( s( & buf[ ..n] ) , expected) ;
190
+ inc. write_all( $server_reply. as_ref( ) ) . unwrap( ) ;
176
191
177
- inc. write_all ( b"HTTP/1.1 200 OK\r \n Content-Length: 0\r \n \r \n " ) . unwrap ( ) ;
192
+ if let Msg :: Head ( head) = res. recv( ) . unwrap( ) {
193
+ use hyper:: header:: * ;
194
+ assert_eq!( head. status( ) , & StatusCode :: $client_status) ;
195
+ $(
196
+ assert_eq!( head. headers( ) . get( ) , Some ( & $client_headers) ) ;
197
+ ) *
198
+ } else {
199
+ panic!( "we lost the head!" ) ;
200
+ }
201
+ //drop(inc);
178
202
179
- if let Msg :: Head ( head) = res. recv ( ) . unwrap ( ) {
180
- assert_eq ! ( head. status( ) , & StatusCode :: Ok ) ;
181
- assert_eq ! ( head. headers( ) . get( ) , Some ( & header:: ContentLength ( 0 ) ) ) ;
182
- } else {
183
- panic ! ( "we lost the head!" ) ;
184
- }
185
- //drop(inc);
203
+ assert!( res. recv( ) . is_err( ) ) ;
204
+ }
205
+ ) ;
206
+ }
207
+
208
+ test ! {
209
+ name: client_get,
210
+
211
+ server:
212
+ expected: "GET / HTTP/1.1\r \n Host: {addr}\r \n \r \n " ,
213
+ reply: "HTTP/1.1 200 OK\r \n Content-Length: 0\r \n \r \n " ,
214
+
215
+ client:
216
+ request:
217
+ method: Get ,
218
+ url: "http://{addr}/" ,
219
+ response:
220
+ status: Ok ,
221
+ headers: [
222
+ ContentLength ( 0 ) ,
223
+ ] ,
224
+ body: None
225
+ }
226
+
227
+ test ! {
228
+ name: client_get_query,
229
+
230
+ server:
231
+ expected: "GET /foo?key=val HTTP/1.1\r \n Host: {addr}\r \n \r \n " ,
232
+ reply: "HTTP/1.1 200 OK\r \n Content-Length: 0\r \n \r \n " ,
233
+
234
+ client:
235
+ request:
236
+ method: Get ,
237
+ url: "http://{addr}/foo?key=val#dont_send_me" ,
238
+ response:
239
+ status: Ok ,
240
+ headers: [
241
+ ContentLength ( 0 ) ,
242
+ ] ,
243
+ body: None
186
244
187
- assert ! ( res. recv( ) . is_err( ) ) ;
188
245
}
189
246
190
247
#[ test]
0 commit comments