@@ -123,6 +123,7 @@ use self::inner::OneOrTuple;
123
123
/// Starts a new test `RequestBuilder`.
124
124
pub fn request ( ) -> RequestBuilder {
125
125
RequestBuilder {
126
+ local_addr : None ,
126
127
remote_addr : None ,
127
128
req : Request :: default ( ) ,
128
129
}
@@ -140,6 +141,7 @@ pub fn ws() -> WsBuilder {
140
141
#[ must_use = "RequestBuilder does nothing on its own" ]
141
142
#[ derive( Debug ) ]
142
143
pub struct RequestBuilder {
144
+ local_addr : Option < SocketAddr > ,
143
145
remote_addr : Option < SocketAddr > ,
144
146
req : Request ,
145
147
}
@@ -237,6 +239,22 @@ impl RequestBuilder {
237
239
self
238
240
}
239
241
242
+ /// Set the local address of this request
243
+ ///
244
+ /// Default is no local address.
245
+ ///
246
+ /// # Example
247
+ /// ```
248
+ /// use std::net::{IpAddr, Ipv4Addr, SocketAddr};
249
+ ///
250
+ /// let req = warp::test::request()
251
+ /// .local_addr(SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080));
252
+ /// ```
253
+ pub fn local_addr ( mut self , addr : SocketAddr ) -> Self {
254
+ self . local_addr = Some ( addr) ;
255
+ self
256
+ }
257
+
240
258
/// Set the remote address of this request
241
259
///
242
260
/// Default is no remote address.
@@ -376,7 +394,7 @@ impl RequestBuilder {
376
394
// TODO: de-duplicate this and apply_filter()
377
395
assert ! ( !route:: is_set( ) , "nested test filter calls" ) ;
378
396
379
- let route = Route :: new ( self . req , self . remote_addr ) ;
397
+ let route = Route :: new ( self . req , self . local_addr , self . remote_addr ) ;
380
398
let mut fut = Box :: pin (
381
399
route:: set ( & route, move || f. filter ( crate :: filter:: Internal ) ) . then ( |result| {
382
400
let res = match result {
@@ -405,7 +423,7 @@ impl RequestBuilder {
405
423
{
406
424
assert ! ( !route:: is_set( ) , "nested test filter calls" ) ;
407
425
408
- let route = Route :: new ( self . req , self . remote_addr ) ;
426
+ let route = Route :: new ( self . req , self . local_addr , self . remote_addr ) ;
409
427
let mut fut = Box :: pin ( route:: set ( & route, move || {
410
428
f. filter ( crate :: filter:: Internal )
411
429
} ) ) ;
0 commit comments