Skip to content

Commit af8eed9

Browse files
authored
fix: ApiClientUtils.getDefaultTransport() should return a cached instance to an ApacheHttp2Transport (#1059)
* fix: `ApiClientUtils.getDefaultTransport()` should return cached instance to an `ApacheHttp2Transport` * fix: lint * reduce timeout time * fix: use new transport to trigger writeTimeout
1 parent 7bc8c12 commit af8eed9

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

src/main/java/com/google/firebase/internal/ApiClientUtils.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ public static JsonFactory getDefaultJsonFactory() {
8888
}
8989

9090
public static HttpTransport getDefaultTransport() {
91-
return new ApacheHttp2Transport();
91+
return TransportInstanceHolder.INSTANCE;
92+
}
93+
94+
private static class TransportInstanceHolder {
95+
static final HttpTransport INSTANCE = new ApacheHttp2Transport();
9296
}
9397
}

src/test/java/com/google/firebase/internal/ApacheHttp2TransportIT.java

+21
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,12 @@ public void testReadTimeoutAuthorizedPost() throws FirebaseException {
198198

199199
@Test(timeout = 10_000L)
200200
public void testWriteTimeoutAuthorizedGet() throws FirebaseException {
201+
// Use a fresh transport so that writeTimeout triggers while waiting for the transport to
202+
// be ready to receive data.
201203
app = FirebaseApp.initializeApp(FirebaseOptions.builder()
202204
.setCredentials(MOCK_CREDENTIALS)
203205
.setWriteTimeout(100)
206+
.setHttpTransport(new ApacheHttp2Transport())
204207
.build(), "test-app");
205208
ErrorHandlingHttpClient<FirebaseException> httpClient = getHttpClient(true, app);
206209
HttpRequestInfo request = HttpRequestInfo.buildGetRequest(GET_URL);
@@ -217,9 +220,12 @@ public void testWriteTimeoutAuthorizedGet() throws FirebaseException {
217220

218221
@Test(timeout = 10_000L)
219222
public void testWriteTimeoutAuthorizedPost() throws FirebaseException {
223+
// Use a fresh transport so that writeTimeout triggers while waiting for the transport to
224+
// be ready to receive data.
220225
app = FirebaseApp.initializeApp(FirebaseOptions.builder()
221226
.setCredentials(MOCK_CREDENTIALS)
222227
.setWriteTimeout(100)
228+
.setHttpTransport(new ApacheHttp2Transport())
223229
.build(), "test-app");
224230
ErrorHandlingHttpClient<FirebaseException> httpClient = getHttpClient(true, app);
225231
HttpRequestInfo request = HttpRequestInfo.buildJsonPostRequest(POST_URL, payload);
@@ -292,6 +298,21 @@ public void testVerifyProxyIsRespected() {
292298
}
293299
}
294300

301+
@Test
302+
public void testVerifyDefaultTransportReused() {
303+
FirebaseOptions o1 = FirebaseOptions.builder()
304+
.setCredentials(MOCK_CREDENTIALS)
305+
.build();
306+
307+
FirebaseOptions o2 = FirebaseOptions.builder()
308+
.setCredentials(MOCK_CREDENTIALS)
309+
.build();
310+
311+
HttpTransport t1 = o1.getHttpTransport();
312+
HttpTransport t2 = o2.getHttpTransport();
313+
assertEquals(t1, t2);
314+
}
315+
295316
private static ErrorHandlingHttpClient<FirebaseException> getHttpClient(boolean authorized,
296317
FirebaseApp app) {
297318
HttpRequestFactory requestFactory;

src/test/java/com/google/firebase/internal/ApiClientUtilsTest.java

+9
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.google.api.client.http.HttpRequest;
2626
import com.google.api.client.http.HttpRequestFactory;
2727
import com.google.api.client.http.HttpResponse;
28+
import com.google.api.client.http.HttpTransport;
2829
import com.google.api.client.http.HttpUnsuccessfulResponseHandler;
2930
import com.google.api.client.testing.http.MockHttpTransport;
3031
import com.google.api.client.testing.http.MockLowLevelHttpResponse;
@@ -128,4 +129,12 @@ public void disconnect() throws IOException {
128129

129130
assertTrue(lowLevelResponse.isDisconnected());
130131
}
132+
133+
@Test
134+
public void testVerifyDefaultTransportReused() {
135+
HttpTransport t1 = ApiClientUtils.getDefaultTransport();
136+
HttpTransport t2 = ApiClientUtils.getDefaultTransport();
137+
assertEquals(t1, t2);
138+
}
139+
131140
}

0 commit comments

Comments
 (0)