Skip to content

Commit e7ad3f5

Browse files
authored
chore: normalize host URL in MultipartUploadHttpRequestManager (#3452)
1 parent a9b9641 commit e7ad3f5

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/MultipartUploadHttpRequestManager.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,11 @@ static MultipartUploadHttpRequestManager createFrom(HttpStorageOptions options)
253253
storage.getRequestFactory(),
254254
new XmlObjectParser(new XmlMapper()),
255255
options.getMergedHeaderProvider(FixedHeaderProvider.create(stableHeaders.build())),
256-
URI.create(options.getHost()));
256+
URI.create(ensureTrailingSlash(options.getHost())));
257+
}
258+
259+
private static String ensureTrailingSlash(String host) {
260+
return host.endsWith("/") ? host : host + "/";
257261
}
258262

259263
private void addChecksumHeader(@Nullable Crc32cLengthKnown crc32c, HttpHeaders headers) {

java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/FakeHttpServer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ public void close() throws Exception {
9393
}
9494

9595
static FakeHttpServer of(HttpRequestHandler server) {
96+
return of(server, true);
97+
}
98+
99+
static FakeHttpServer of(HttpRequestHandler server, boolean trailingSlash) {
96100
// based on
97101
// https://github.com/netty/netty/blob/59aa6e635b9996cf21cd946e64353270679adc73/example/src/main/java/io/netty/example/http/helloworld/HttpHelloWorldServer.java
98102
InetSocketAddress address = new InetSocketAddress("localhost", 0);
@@ -124,7 +128,8 @@ protected void initChannel(SocketChannel ch) {
124128
Channel channel = b.bind(address).syncUninterruptibly().channel();
125129

126130
InetSocketAddress socketAddress = (InetSocketAddress) channel.localAddress();
127-
URI endpoint = URI.create("http://localhost:" + socketAddress.getPort() + "/");
131+
String suffix = trailingSlash ? "/" : "";
132+
URI endpoint = URI.create("http://localhost:" + socketAddress.getPort() + suffix);
128133
HttpStorageOptions httpStorageOptions =
129134
HttpStorageOptions.http()
130135
.setHost(endpoint.toString())

java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/ITMultipartUploadHttpRequestManagerTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,6 +1429,40 @@ public void sendListMultipartUploadsRequest_withUserProject() throws Exception {
14291429
}
14301430
}
14311431

1432+
@Test
1433+
public void hostWithoutTrailingSlash_urlConstructedCorrectly() throws Exception {
1434+
HttpRequestHandler handler =
1435+
req -> {
1436+
assertThat(req.uri()).startsWith("/test-bucket/test-key");
1437+
CreateMultipartUploadResponse response =
1438+
CreateMultipartUploadResponse.builder()
1439+
.bucket("test-bucket")
1440+
.key("test-key")
1441+
.uploadId("test-upload-id")
1442+
.build();
1443+
ByteBuf buf = Unpooled.wrappedBuffer(xmlMapper.writeValueAsBytes(response));
1444+
DefaultFullHttpResponse resp =
1445+
new DefaultFullHttpResponse(req.protocolVersion(), OK, buf);
1446+
resp.headers().set(CONTENT_TYPE, "application/xml; charset=utf-8");
1447+
return resp;
1448+
};
1449+
1450+
try (FakeHttpServer fakeHttpServer = FakeHttpServer.of(handler, false)) {
1451+
MultipartUploadHttpRequestManager manager =
1452+
MultipartUploadHttpRequestManager.createFrom(fakeHttpServer.getHttpStorageOptions());
1453+
CreateMultipartUploadRequest request =
1454+
CreateMultipartUploadRequest.builder()
1455+
.bucket("test-bucket")
1456+
.key("test-key")
1457+
.contentType("application/octet-stream")
1458+
.build();
1459+
1460+
CreateMultipartUploadResponse response = manager.sendCreateMultipartUploadRequest(request);
1461+
1462+
assertThat(response.bucket()).isEqualTo("test-bucket");
1463+
}
1464+
}
1465+
14321466
private void forceSetUploads(
14331467
ListMultipartUploadsResponse response, java.util.List<MultipartUpload> uploads) {
14341468
try {

0 commit comments

Comments
 (0)