@@ -170,11 +170,11 @@ impl Drop for Client {
170
170
171
171
impl Client {
172
172
/// Create a new fetch client.
173
- pub fn new ( ) -> Result < Self , Error > {
173
+ pub fn new ( num_dns_threads : usize ) -> Result < Self , Error > {
174
174
let ( tx_start, rx_start) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
175
175
let ( tx_proto, rx_proto) = mpsc:: channel ( 64 ) ;
176
176
177
- Client :: background_thread ( tx_start, rx_proto) ?;
177
+ Client :: background_thread ( tx_start, rx_proto, num_dns_threads ) ?;
178
178
179
179
match rx_start. recv_timeout ( Duration :: from_secs ( 10 ) ) {
180
180
Err ( RecvTimeoutError :: Timeout ) => {
@@ -199,7 +199,7 @@ impl Client {
199
199
} )
200
200
}
201
201
202
- fn background_thread ( tx_start : TxStartup , rx_proto : mpsc:: Receiver < ChanItem > ) -> io:: Result < thread:: JoinHandle < ( ) > > {
202
+ fn background_thread ( tx_start : TxStartup , rx_proto : mpsc:: Receiver < ChanItem > , num_dns_threads : usize ) -> io:: Result < thread:: JoinHandle < ( ) > > {
203
203
thread:: Builder :: new ( ) . name ( "fetch" . into ( ) ) . spawn ( move || {
204
204
let mut core = match reactor:: Core :: new ( ) {
205
205
Ok ( c) => c,
@@ -208,7 +208,7 @@ impl Client {
208
208
209
209
let handle = core. handle ( ) ;
210
210
let hyper = hyper:: Client :: configure ( )
211
- . connector ( hyper_rustls:: HttpsConnector :: new ( 4 , & core. handle ( ) ) )
211
+ . connector ( hyper_rustls:: HttpsConnector :: new ( num_dns_threads , & core. handle ( ) ) )
212
212
. build ( & core. handle ( ) ) ;
213
213
214
214
let future = rx_proto. take_while ( |item| Ok ( item. is_some ( ) ) )
@@ -640,7 +640,18 @@ mod test {
640
640
#[ test]
641
641
fn it_should_fetch ( ) {
642
642
let server = TestServer :: run ( ) ;
643
- let client = Client :: new ( ) . unwrap ( ) ;
643
+ let client = Client :: new ( 4 ) . unwrap ( ) ;
644
+ let future = client. get ( & format ! ( "http://{}?123" , server. addr( ) ) , Default :: default ( ) ) ;
645
+ let resp = future. wait ( ) . unwrap ( ) ;
646
+ assert ! ( resp. is_success( ) ) ;
647
+ let body = resp. concat2 ( ) . wait ( ) . unwrap ( ) ;
648
+ assert_eq ! ( & body[ ..] , b"123" )
649
+ }
650
+
651
+ #[ test]
652
+ fn it_should_fetch_in_light_mode ( ) {
653
+ let server = TestServer :: run ( ) ;
654
+ let client = Client :: new ( 1 ) . unwrap ( ) ;
644
655
let future = client. get ( & format ! ( "http://{}?123" , server. addr( ) ) , Default :: default ( ) ) ;
645
656
let resp = future. wait ( ) . unwrap ( ) ;
646
657
assert ! ( resp. is_success( ) ) ;
@@ -651,7 +662,7 @@ mod test {
651
662
#[ test]
652
663
fn it_should_timeout ( ) {
653
664
let server = TestServer :: run ( ) ;
654
- let client = Client :: new ( ) . unwrap ( ) ;
665
+ let client = Client :: new ( 4 ) . unwrap ( ) ;
655
666
let abort = Abort :: default ( ) . with_max_duration ( Duration :: from_secs ( 1 ) ) ;
656
667
match client. get ( & format ! ( "http://{}/delay?3" , server. addr( ) ) , abort) . wait ( ) {
657
668
Err ( Error :: Timeout ) => { }
@@ -662,7 +673,7 @@ mod test {
662
673
#[ test]
663
674
fn it_should_follow_redirects ( ) {
664
675
let server = TestServer :: run ( ) ;
665
- let client = Client :: new ( ) . unwrap ( ) ;
676
+ let client = Client :: new ( 4 ) . unwrap ( ) ;
666
677
let abort = Abort :: default ( ) ;
667
678
let future = client. get ( & format ! ( "http://{}/redirect?http://{}/" , server. addr( ) , server. addr( ) ) , abort) ;
668
679
assert ! ( future. wait( ) . unwrap( ) . is_success( ) )
@@ -671,7 +682,7 @@ mod test {
671
682
#[ test]
672
683
fn it_should_follow_relative_redirects ( ) {
673
684
let server = TestServer :: run ( ) ;
674
- let client = Client :: new ( ) . unwrap ( ) ;
685
+ let client = Client :: new ( 4 ) . unwrap ( ) ;
675
686
let abort = Abort :: default ( ) . with_max_redirects ( 4 ) ;
676
687
let future = client. get ( & format ! ( "http://{}/redirect?/" , server. addr( ) ) , abort) ;
677
688
assert ! ( future. wait( ) . unwrap( ) . is_success( ) )
@@ -680,7 +691,7 @@ mod test {
680
691
#[ test]
681
692
fn it_should_not_follow_too_many_redirects ( ) {
682
693
let server = TestServer :: run ( ) ;
683
- let client = Client :: new ( ) . unwrap ( ) ;
694
+ let client = Client :: new ( 4 ) . unwrap ( ) ;
684
695
let abort = Abort :: default ( ) . with_max_redirects ( 3 ) ;
685
696
match client. get ( & format ! ( "http://{}/loop" , server. addr( ) ) , abort) . wait ( ) {
686
697
Err ( Error :: TooManyRedirects ) => { }
@@ -691,7 +702,7 @@ mod test {
691
702
#[ test]
692
703
fn it_should_read_data ( ) {
693
704
let server = TestServer :: run ( ) ;
694
- let client = Client :: new ( ) . unwrap ( ) ;
705
+ let client = Client :: new ( 4 ) . unwrap ( ) ;
695
706
let abort = Abort :: default ( ) ;
696
707
let future = client. get ( & format ! ( "http://{}?abcdefghijklmnopqrstuvwxyz" , server. addr( ) ) , abort) ;
697
708
let resp = future. wait ( ) . unwrap ( ) ;
@@ -702,7 +713,7 @@ mod test {
702
713
#[ test]
703
714
fn it_should_not_read_too_much_data ( ) {
704
715
let server = TestServer :: run ( ) ;
705
- let client = Client :: new ( ) . unwrap ( ) ;
716
+ let client = Client :: new ( 4 ) . unwrap ( ) ;
706
717
let abort = Abort :: default ( ) . with_max_size ( 3 ) ;
707
718
let resp = client. get ( & format ! ( "http://{}/?1234" , server. addr( ) ) , abort) . wait ( ) . unwrap ( ) ;
708
719
assert ! ( resp. is_success( ) ) ;
@@ -715,7 +726,7 @@ mod test {
715
726
#[ test]
716
727
fn it_should_not_read_too_much_data_sync ( ) {
717
728
let server = TestServer :: run ( ) ;
718
- let client = Client :: new ( ) . unwrap ( ) ;
729
+ let client = Client :: new ( 4 ) . unwrap ( ) ;
719
730
let abort = Abort :: default ( ) . with_max_size ( 3 ) ;
720
731
let resp = client. get ( & format ! ( "http://{}/?1234" , server. addr( ) ) , abort) . wait ( ) . unwrap ( ) ;
721
732
assert ! ( resp. is_success( ) ) ;
0 commit comments