Skip to content

Commit b6f2bc9

Browse files
shawkinsmanusa
authored andcommitted
fix #4908: using the response headers in the vertx response
1 parent dee63d4 commit b6f2bc9

File tree

4 files changed

+46
-66
lines changed

4 files changed

+46
-66
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* Fix #4885: addresses a potential hang in the jdk client with exec stream reading
1919
* Fix #4891: address vertx not completely reading exec streams
2020
* Fix #4899: BuildConfigs.instantiateBinary().fromFile() does not time out
21+
* Fix #4908: using the response headers in the vertx response
2122

2223
#### Improvements
2324
* Fix #4675: adding a fully client side timeout for informer watches

httpclient-tests/src/test/java/io/fabric8/kubernetes/client/http/OkHttpClientTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,15 @@ void testAsyncBody() throws Exception {
186186
@ParameterizedTest(name = "{index}: {0}")
187187
@ValueSource(classes = { String.class, byte[].class, Reader.class, InputStream.class })
188188
void supportedResponseBodyTypes(Class<?> type) throws Exception {
189-
String value = new String(new byte[16384]);
189+
int length = 16384;
190+
String value = new String(new byte[length]);
190191
server.expect().withPath("/type").andReturn(200, value).always();
191192
final HttpResponse<?> result = client.getHttpClient()
192193
.sendAsync(client.getHttpClient().newHttpRequestBuilder()
193194
.uri(URI.create(client.getConfiguration().getMasterUrl() + "type")).build(), type)
194195
.get(10, TimeUnit.SECONDS);
195196
assertThat(result)
197+
.satisfies(r -> assertThat(r.headers("Content-Length")).first().isEqualTo(String.valueOf(length)))
196198
.satisfies(r -> assertThat(r.body()).isInstanceOf(type))
197199
.satisfies(r -> assertThat(r.bodyString()).isEqualTo(value));
198200
}

httpclient-vertx/src/main/java/io/fabric8/kubernetes/client/vertx/VertxHttpClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public CompletableFuture<HttpResponse<AsyncBody>> consumeBytesDirect(StandardHtt
154154
options.putHeader(io.vertx.core.http.HttpHeaders.EXPECT, io.vertx.core.http.HttpHeaders.CONTINUE);
155155
}
156156

157-
return new VertxHttpRequest(vertx, options, request.body()).consumeBytes(this.client, consumer);
157+
return new VertxHttpRequest(vertx, options, request).consumeBytes(this.client, consumer);
158158
}
159159

160160
void addDerivedClient(VertxHttpClient<F> client) {

httpclient-vertx/src/main/java/io/fabric8/kubernetes/client/vertx/VertxHttpRequest.java

Lines changed: 41 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import io.fabric8.kubernetes.client.http.AsyncBody;
2020
import io.fabric8.kubernetes.client.http.HttpRequest;
2121
import io.fabric8.kubernetes.client.http.HttpResponse;
22+
import io.fabric8.kubernetes.client.http.StandardHttpHeaders;
2223
import io.fabric8.kubernetes.client.http.StandardHttpRequest;
24+
import io.fabric8.kubernetes.client.http.StandardHttpRequest.BodyContent;
2325
import io.vertx.core.Future;
2426
import io.vertx.core.MultiMap;
2527
import io.vertx.core.Vertx;
@@ -30,7 +32,6 @@
3032
import io.vertx.core.streams.ReadStream;
3133

3234
import java.io.InputStream;
33-
import java.net.URI;
3435
import java.nio.ByteBuffer;
3536
import java.util.Arrays;
3637
import java.util.LinkedHashMap;
@@ -40,36 +41,49 @@
4041
import java.util.concurrent.CompletableFuture;
4142
import java.util.function.Function;
4243

43-
class VertxHttpRequest implements HttpRequest {
44+
class VertxHttpRequest {
45+
46+
private static final class VertxHttpResponse extends StandardHttpHeaders implements HttpResponse<AsyncBody> {
47+
private final AsyncBody result;
48+
private final HttpClientResponse resp;
49+
private final HttpRequest request;
50+
51+
private VertxHttpResponse(AsyncBody result, HttpClientResponse resp, HttpRequest request) {
52+
super(toHeadersMap(resp.headers()));
53+
this.result = result;
54+
this.resp = resp;
55+
this.request = request;
56+
}
57+
58+
@Override
59+
public int code() {
60+
return resp.statusCode();
61+
}
62+
63+
@Override
64+
public AsyncBody body() {
65+
return result;
66+
}
67+
68+
@Override
69+
public HttpRequest request() {
70+
return request;
71+
}
72+
73+
@Override
74+
public Optional<HttpResponse<?>> previousResponse() {
75+
return Optional.empty();
76+
}
77+
}
4478

4579
final Vertx vertx;
4680
private final RequestOptions options;
47-
private final StandardHttpRequest.BodyContent body;
81+
private StandardHttpRequest request;
4882

49-
public VertxHttpRequest(Vertx vertx, RequestOptions options, StandardHttpRequest.BodyContent body) {
83+
public VertxHttpRequest(Vertx vertx, RequestOptions options, StandardHttpRequest request) {
5084
this.vertx = vertx;
5185
this.options = options;
52-
this.body = body;
53-
}
54-
55-
@Override
56-
public URI uri() {
57-
return URI.create(options.getURI());
58-
}
59-
60-
@Override
61-
public String method() {
62-
return options.getMethod().name();
63-
}
64-
65-
@Override
66-
public String bodyString() {
67-
return body.toString();
68-
}
69-
70-
@Override
71-
public List<String> headers(String key) {
72-
return options.getHeaders().getAll(key);
86+
this.request = request;
7387
}
7488

7589
public CompletableFuture<HttpResponse<AsyncBody>> consumeBytes(HttpClient client,
@@ -106,42 +120,11 @@ public void cancel() {
106120
result.done().completeExceptionally(e);
107121
}
108122
}).endHandler(end -> result.done().complete(null));
109-
return new HttpResponse<AsyncBody>() {
110-
111-
@Override
112-
public List<String> headers(String key) {
113-
return VertxHttpRequest.this.headers().get(key);
114-
}
115-
116-
@Override
117-
public Map<String, List<String>> headers() {
118-
return VertxHttpRequest.this.headers();
119-
}
120-
121-
@Override
122-
public int code() {
123-
return resp.statusCode();
124-
}
125-
126-
@Override
127-
public AsyncBody body() {
128-
return result;
129-
}
130-
131-
@Override
132-
public HttpRequest request() {
133-
return VertxHttpRequest.this;
134-
}
135-
136-
@Override
137-
public Optional<HttpResponse<?>> previousResponse() {
138-
return Optional.empty();
139-
}
140-
141-
};
123+
return new VertxHttpResponse(result, resp, request);
142124
};
143125
return client.request(options).compose(request -> {
144126
Future<HttpClientResponse> fut;
127+
BodyContent body = this.request.body();
145128
if (body != null) {
146129
if (body instanceof StandardHttpRequest.StringBodyContent) {
147130
Buffer buffer = Buffer.buffer(((StandardHttpRequest.StringBodyContent) body).getContent());
@@ -165,12 +148,6 @@ public Optional<HttpResponse<?>> previousResponse() {
165148
}).toCompletionStage().toCompletableFuture();
166149
}
167150

168-
@Override
169-
public Map<String, List<String>> headers() {
170-
MultiMap multiMap = options.getHeaders();
171-
return toHeadersMap(multiMap);
172-
}
173-
174151
static Map<String, List<String>> toHeadersMap(MultiMap multiMap) {
175152
Map<String, List<String>> headers = new LinkedHashMap<>();
176153
multiMap.names().stream().forEach(k -> headers.put(k, multiMap.getAll(k)));

0 commit comments

Comments
 (0)