@@ -33,59 +33,74 @@ void whenCreatingClientWithoutOverrides_thenUsesDoubledDefaults() {
3333 }
3434
3535 @ Test
36- @ DisplayName ("DefaultClient uses configured HTTP properties" )
37- void givenHttpProperties_whenCreatingClient_thenUsesConfiguredValues () {
36+ @ DisplayName ("README and DOCS property snippet configures the documented settings" )
37+ void docsPropertySnippetConfiguresDocumentedSettings () {
38+ var originalInstance = getDefaultClientInstance ();
39+ try {
40+ var properties = new Properties ();
41+ properties .put (DefaultClient .API_KEY_PROP_NAME , "test-key" );
42+ properties .put (DefaultClient .API_SECRET_PROP_NAME , "test-secret" );
43+ properties .put (DefaultClient .DISPATCHER_MAX_REQUESTS_PROP_NAME , "128" );
44+ properties .put (DefaultClient .DISPATCHER_MAX_REQUESTS_PER_HOST_PROP_NAME , "32" );
45+ properties .put (DefaultClient .CONNECTION_POOL_MAX_IDLE_CONNECTIONS_PROP_NAME , "20" );
46+ properties .put (DefaultClient .CONNECTION_POOL_KEEP_ALIVE_DURATION_PROP_NAME , "59000" );
47+ properties .put (DefaultClient .API_CONNECT_TIMEOUT_PROP_NAME , "10000" );
48+ properties .put (DefaultClient .API_READ_TIMEOUT_PROP_NAME , "30000" );
49+ properties .put (DefaultClient .API_WRITE_TIMEOUT_PROP_NAME , "30000" );
50+ properties .put (DefaultClient .API_TIMEOUT_PROP_NAME , "30000" );
51+
52+ var client = new DefaultClient (properties );
53+ client .setDispatcher (128 , 32 );
54+ client .setConnectionPool (20 , Duration .ofSeconds (59 ));
55+ client .setTimeouts (
56+ Duration .ofSeconds (10 ),
57+ Duration .ofSeconds (30 ),
58+ Duration .ofSeconds (30 ),
59+ Duration .ofSeconds (30 ));
60+ DefaultClient .setInstance (client );
61+
62+ Assertions .assertSame (client , DefaultClient .getInstance ());
63+ assertConfiguredHttpClient (client , 128 , 32 , 20 , 59 , 10_000 , 30_000 , 30_000 , 30_000 );
64+ } finally {
65+ setDefaultClientInstance (originalInstance );
66+ }
67+ }
68+
69+ @ Test
70+ @ DisplayName ("README and DOCS options plus client snippet configures the documented settings" )
71+ void docsOptionsAndClientSnippetConfiguresDocumentedSettings () {
3872 var properties = baseProperties ();
39- properties .put (DefaultClient .DISPATCHER_MAX_REQUESTS_PROP_NAME , "80" );
40- properties .put (DefaultClient .DISPATCHER_MAX_REQUESTS_PER_HOST_PROP_NAME , "24" );
41- properties .put (DefaultClient .CONNECTION_POOL_MAX_IDLE_CONNECTIONS_PROP_NAME , "20" );
42- properties .put (DefaultClient .CONNECTION_POOL_KEEP_ALIVE_DURATION_PROP_NAME , "120000" );
43- properties .put (DefaultClient .API_CONNECT_TIMEOUT_PROP_NAME , "5000" );
44- properties .put (DefaultClient .API_READ_TIMEOUT_PROP_NAME , "15000" );
45- properties .put (DefaultClient .API_WRITE_TIMEOUT_PROP_NAME , "25000" );
46- properties .put (DefaultClient .API_TIMEOUT_PROP_NAME , "30000" );
47-
48- var client = new DefaultClient (properties );
49- var okHttpClient = getOkHttpClient (client );
50- var pool = okHttpClient .connectionPool ();
73+ var options =
74+ DefaultClient .HttpClientOptions .builder ()
75+ .dispatcher (128 , 32 )
76+ .connectionPool (20 , Duration .ofSeconds (59 ))
77+ .connectTimeout (Duration .ofSeconds (10 ))
78+ .readTimeout (Duration .ofSeconds (30 ))
79+ .writeTimeout (Duration .ofSeconds (30 ))
80+ .callTimeout (Duration .ofSeconds (30 ))
81+ .build ();
5182
52- Assertions .assertEquals (20 , readIntField (poolDelegate (pool ), "maxIdleConnections" ));
53- Assertions .assertEquals (
54- Duration .ofMinutes (2 ).toNanos (), readLongField (poolDelegate (pool ), "keepAliveDurationNs" ));
55- Assertions .assertEquals (80 , readIntField (okHttpClient .dispatcher (), "maxRequests" ));
56- Assertions .assertEquals (24 , readIntField (okHttpClient .dispatcher (), "maxRequestsPerHost" ));
57- Assertions .assertEquals (5_000 , okHttpClient .connectTimeoutMillis ());
58- Assertions .assertEquals (15_000 , okHttpClient .readTimeoutMillis ());
59- Assertions .assertEquals (25_000 , okHttpClient .writeTimeoutMillis ());
60- Assertions .assertEquals (30_000 , okHttpClient .callTimeoutMillis ());
83+ var client = new DefaultClient (properties , options );
84+
85+ assertConfiguredHttpClient (client , 128 , 32 , 20 , 59 , 10_000 , 30_000 , 30_000 , 30_000 );
6186 }
6287
6388 @ Test
64- @ DisplayName ("DefaultClient uses option-based HTTP configuration " )
65- void givenHttpOptions_whenCreatingClient_thenUsesConfiguredValues () {
89+ @ DisplayName ("README and DOCS options builder snippet builds the documented settings " )
90+ void docsOptionsBuilderSnippetBuildsDocumentedSettings () {
6691 var options =
6792 DefaultClient .HttpClientOptions .builder ()
68- .dispatcher (96 , 32 )
69- .connectionPool (30 , Duration .ofSeconds (90 ))
70- .connectTimeout (Duration .ofSeconds (3 ))
71- .readTimeout (Duration .ofSeconds (12 ))
72- .writeTimeout (Duration .ofSeconds (18 ))
73- .callTimeout (Duration .ofSeconds (25 ))
93+ .dispatcher (128 , 32 )
94+ .connectionPool (20 , Duration .ofSeconds (59 ))
95+ .connectTimeout (Duration .ofSeconds (10 ))
96+ .readTimeout (Duration .ofSeconds (30 ))
97+ .writeTimeout (Duration .ofSeconds (30 ))
98+ .callTimeout (Duration .ofSeconds (30 ))
7499 .build ();
75100
76101 var client = new DefaultClient (baseProperties (), options );
77- var okHttpClient = getOkHttpClient (client );
78- var pool = okHttpClient .connectionPool ();
79102
80- Assertions .assertEquals (30 , readIntField (poolDelegate (pool ), "maxIdleConnections" ));
81- Assertions .assertEquals (
82- Duration .ofSeconds (90 ).toNanos (), readLongField (poolDelegate (pool ), "keepAliveDurationNs" ));
83- Assertions .assertEquals (96 , readIntField (okHttpClient .dispatcher (), "maxRequests" ));
84- Assertions .assertEquals (32 , readIntField (okHttpClient .dispatcher (), "maxRequestsPerHost" ));
85- Assertions .assertEquals (3_000 , okHttpClient .connectTimeoutMillis ());
86- Assertions .assertEquals (12_000 , okHttpClient .readTimeoutMillis ());
87- Assertions .assertEquals (18_000 , okHttpClient .writeTimeoutMillis ());
88- Assertions .assertEquals (25_000 , okHttpClient .callTimeoutMillis ());
103+ assertConfiguredHttpClient (client , 128 , 32 , 20 , 59 , 10_000 , 30_000 , 30_000 , 30_000 );
89104 }
90105
91106 @ Test
@@ -101,17 +116,7 @@ void whenSettingHttpConfiguration_thenRebuildsClientWithNewValues() {
101116 Duration .ofSeconds (16 ),
102117 Duration .ofSeconds (22 ));
103118
104- var okHttpClient = getOkHttpClient (client );
105- var pool = okHttpClient .connectionPool ();
106- Assertions .assertEquals (15 , readIntField (poolDelegate (pool ), "maxIdleConnections" ));
107- Assertions .assertEquals (
108- Duration .ofSeconds (30 ).toNanos (), readLongField (poolDelegate (pool ), "keepAliveDurationNs" ));
109- Assertions .assertEquals (72 , readIntField (okHttpClient .dispatcher (), "maxRequests" ));
110- Assertions .assertEquals (16 , readIntField (okHttpClient .dispatcher (), "maxRequestsPerHost" ));
111- Assertions .assertEquals (4_000 , okHttpClient .connectTimeoutMillis ());
112- Assertions .assertEquals (14_000 , okHttpClient .readTimeoutMillis ());
113- Assertions .assertEquals (16_000 , okHttpClient .writeTimeoutMillis ());
114- Assertions .assertEquals (22_000 , okHttpClient .callTimeoutMillis ());
119+ assertConfiguredHttpClient (client , 72 , 16 , 15 , 30 , 4_000 , 14_000 , 16_000 , 22_000 );
115120 }
116121
117122 private static Properties baseProperties () {
@@ -126,6 +131,41 @@ private static OkHttpClient getOkHttpClient(DefaultClient client) {
126131 return (OkHttpClient ) readField (retrofit , "callFactory" );
127132 }
128133
134+ private static DefaultClient getDefaultClientInstance () {
135+ return (DefaultClient ) readStaticField (DefaultClient .class , "defaultInstance" );
136+ }
137+
138+ private static void setDefaultClientInstance (DefaultClient client ) {
139+ writeStaticField (DefaultClient .class , "defaultInstance" , client );
140+ }
141+
142+ private static void assertConfiguredHttpClient (
143+ DefaultClient client ,
144+ int maxRequests ,
145+ int maxRequestsPerHost ,
146+ int maxIdleConnections ,
147+ long keepAliveSeconds ,
148+ int connectTimeoutMillis ,
149+ int readTimeoutMillis ,
150+ int writeTimeoutMillis ,
151+ int callTimeoutMillis ) {
152+ var okHttpClient = getOkHttpClient (client );
153+ var pool = okHttpClient .connectionPool ();
154+
155+ Assertions .assertEquals (
156+ maxIdleConnections , readIntField (poolDelegate (pool ), "maxIdleConnections" ));
157+ Assertions .assertEquals (
158+ Duration .ofSeconds (keepAliveSeconds ).toNanos (),
159+ readLongField (poolDelegate (pool ), "keepAliveDurationNs" ));
160+ Assertions .assertEquals (maxRequests , readIntField (okHttpClient .dispatcher (), "maxRequests" ));
161+ Assertions .assertEquals (
162+ maxRequestsPerHost , readIntField (okHttpClient .dispatcher (), "maxRequestsPerHost" ));
163+ Assertions .assertEquals (connectTimeoutMillis , okHttpClient .connectTimeoutMillis ());
164+ Assertions .assertEquals (readTimeoutMillis , okHttpClient .readTimeoutMillis ());
165+ Assertions .assertEquals (writeTimeoutMillis , okHttpClient .writeTimeoutMillis ());
166+ Assertions .assertEquals (callTimeoutMillis , okHttpClient .callTimeoutMillis ());
167+ }
168+
129169 private static Object poolDelegate (ConnectionPool pool ) {
130170 return readField (pool , "delegate" );
131171 }
@@ -155,4 +195,24 @@ private static Object readField(Object target, String fieldName) {
155195 throw new IllegalStateException (
156196 String .format ("Field '%s' not found on %s" , fieldName , target .getClass ().getName ()));
157197 }
198+
199+ private static Object readStaticField (Class <?> type , String fieldName ) {
200+ try {
201+ Field field = type .getDeclaredField (fieldName );
202+ field .setAccessible (true );
203+ return field .get (null );
204+ } catch (NoSuchFieldException | IllegalAccessException ex ) {
205+ throw new IllegalStateException (ex );
206+ }
207+ }
208+
209+ private static void writeStaticField (Class <?> type , String fieldName , Object value ) {
210+ try {
211+ Field field = type .getDeclaredField (fieldName );
212+ field .setAccessible (true );
213+ field .set (null , value );
214+ } catch (NoSuchFieldException | IllegalAccessException ex ) {
215+ throw new IllegalStateException (ex );
216+ }
217+ }
158218}
0 commit comments