4141import org .junit .jupiter .api .Nested ;
4242import org .junit .jupiter .api .Timeout ;
4343import org .junit .jupiter .params .ParameterizedTest ;
44- import org .junit .jupiter .params .provider .ValueSource ;
44+ import org .junit .jupiter .params .provider .CsvSource ;
4545
4646import java .net .SocketTimeoutException ;
4747import java .net .URI ;
48- import java .util .concurrent .TimeUnit ;
4948
50- import static java .lang .String .format ;
5149import static java .util .concurrent .TimeUnit .MILLISECONDS ;
5250import static org .junit .jupiter .api .Assertions .assertThrows ;
53- import static org .junit .jupiter .api .Assertions .assertTrue ;
5451
5552abstract class AbstractTestSocketTimeout extends AbstractIntegrationTestBase {
5653 protected AbstractTestSocketTimeout (final URIScheme scheme , final ClientProtocolLevel clientProtocolLevel ,
@@ -60,27 +57,16 @@ protected AbstractTestSocketTimeout(final URIScheme scheme, final ClientProtocol
6057
6158 @ Timeout (5 )
6259 @ ParameterizedTest
63- @ ValueSource (strings = {
64- "150,0,0,150,false" ,
65- "0,150,0,150,false" ,
66- "150,0,0,150,true" ,
67- "0,150,0,150,true" ,
60+ @ CsvSource ({
61+ "10,0,0" ,
62+ "0,10,0" ,
6863 // ConnectionConfig overrides SocketConfig
69- "50,150,0,150,false" ,
70- "1000,150,0,150,false" ,
71- "50,150,0,150,true" ,
72- "1000,150,0,150,true" ,
64+ "10000,10,0" ,
7365 // ResponseTimeout overrides socket timeout
74- "2000,2000,150,150,false" ,
75- "2000,2000,150,150,true"
66+ "10000,10000,10" ,
7667 })
77- void testReadTimeouts (final String param ) throws Exception {
78- final String [] params = param .split ("," );
79- final int socketConfigTimeout = Integer .parseInt (params [0 ]);
80- final int connConfigTimeout = Integer .parseInt (params [1 ]);
81- final long responseTimeout = Integer .parseInt (params [2 ]);
82- final long expectedDelayMs = Long .parseLong (params [3 ]);
83- final boolean drip = Boolean .parseBoolean (params [4 ]);
68+ void testReadTimeouts (final int socketConfigTimeout , final int connConfigTimeout , final int responseTimeout )
69+ throws Exception {
8470 configureServer (bootstrap -> bootstrap
8571 .register ("/random/*" , new RandomHandler ()));
8672 final HttpHost target = startServer ();
@@ -97,23 +83,24 @@ void testReadTimeouts(final String param) throws Exception {
9783 .setSocketTimeout (connConfigTimeout , MILLISECONDS )
9884 .build ());
9985 }
100- final HttpGet request = new HttpGet (new URI ("/random/10240?delay=1000&drip=" + (drip ? 1 : 0 )));
86+
87+ for (final boolean drip : new boolean []{ false , true }) {
88+ final HttpGet request = getRequest (responseTimeout , drip );
89+
90+ assertThrows (SocketTimeoutException .class , () ->
91+ client .execute (target , request , new BasicHttpClientResponseHandler ()));
92+ }
93+ }
94+
95+ private HttpGet getRequest (final int responseTimeout , final boolean drip ) throws Exception {
96+ final HttpGet request = new HttpGet (new URI ("/random/10240?delay=2500&drip=" + (drip ? 1 : 0 )));
10197 if (responseTimeout > 0 ) {
10298 request .setConfig (RequestConfig .custom ()
10399 .setUnixDomainSocket (getUnixDomainSocket ())
104100 .setResponseTimeout (responseTimeout , MILLISECONDS )
105101 .build ());
106102 }
107-
108- final long startTime = System .nanoTime ();
109- assertThrows (SocketTimeoutException .class , () ->
110- client .execute (target , request , new BasicHttpClientResponseHandler ()));
111- final long actualDelayMs = TimeUnit .NANOSECONDS .toMillis (System .nanoTime () - startTime );
112-
113- assertTrue (actualDelayMs > expectedDelayMs / 2 ,
114- format ("Socket read timed out too soon (only %,d out of %,d ms)" , actualDelayMs , expectedDelayMs ));
115- assertTrue (actualDelayMs < expectedDelayMs * 3 ,
116- format ("Socket read timed out too late (%,d out of %,d ms)" , actualDelayMs , expectedDelayMs ));
103+ return request ;
117104 }
118105}
119106
@@ -128,7 +115,7 @@ public Http() {
128115 @ Nested
129116 class Https extends AbstractTestSocketTimeout {
130117 public Https () {
131- super (URIScheme .HTTP , ClientProtocolLevel .STANDARD , false );
118+ super (URIScheme .HTTPS , ClientProtocolLevel .STANDARD , false );
132119 }
133120 }
134121
0 commit comments