Skip to content

Commit 5018807

Browse files
authored
test: KubernetesClientBuilder withConfig tests
Signed-off-by: Marc Nuri <[email protected]>
1 parent eb7fee6 commit 5018807

File tree

3 files changed

+76
-22
lines changed

3 files changed

+76
-22
lines changed

kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/KubernetesClientBuilder.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
*/
3434
public class KubernetesClientBuilder {
3535

36+
private static final String DEFAULT_IMPLEMENTATION = "io.fabric8.kubernetes.client.impl.KubernetesClientImpl";
37+
3638
@FunctionalInterface
3739
public interface ExecutorSupplier extends Supplier<Executor> {
3840

@@ -51,12 +53,11 @@ default void onClose(Executor executor) {
5153

5254
public KubernetesClientBuilder() {
5355
// basically the same logic as in KubernetesResourceUtil for finding list types
54-
String className = "io.fabric8.kubernetes.client.impl.KubernetesClientImpl";
5556
try {
56-
clazz = (Class<KubernetesClient>) Thread.currentThread().getContextClassLoader().loadClass(className);
57+
clazz = (Class<KubernetesClient>) Thread.currentThread().getContextClassLoader().loadClass(DEFAULT_IMPLEMENTATION);
5758
} catch (ClassNotFoundException | ClassCastException | NullPointerException e) {
5859
try {
59-
clazz = (Class<KubernetesClient>) KubernetesClient.class.getClassLoader().loadClass(className);
60+
clazz = (Class<KubernetesClient>) KubernetesClient.class.getClassLoader().loadClass(DEFAULT_IMPLEMENTATION);
6061
} catch (Exception ex) {
6162
throw KubernetesClientException.launderThrowable(ex);
6263
}
@@ -93,24 +94,22 @@ HttpClient getHttpClient() {
9394
return builder.build();
9495
}
9596

96-
public KubernetesClientBuilder withConfig(Config config) {
97-
this.config = config;
97+
public KubernetesClientBuilder withKubernetesSerialization(KubernetesSerialization kubernetesSerialization) {
98+
this.kubernetesSerialization = Utils.checkNotNull(kubernetesSerialization, "kubernetesSerialization must not be null");
9899
return this;
99100
}
100101

101-
public KubernetesClientBuilder withKubernetesSerialization(KubernetesSerialization kubernetesSerialization) {
102-
this.kubernetesSerialization = Utils.checkNotNull(kubernetesSerialization, "kubernetesSerialization must not be null");
102+
public KubernetesClientBuilder withConfig(Config config) {
103+
this.config = config;
103104
return this;
104105
}
105106

106107
public KubernetesClientBuilder withConfig(String config) {
107-
this.config = kubernetesSerialization.unmarshal(config, Config.class);
108-
return this;
108+
return withConfig(kubernetesSerialization.unmarshal(config, Config.class));
109109
}
110110

111111
public KubernetesClientBuilder withConfig(InputStream config) {
112-
this.config = kubernetesSerialization.unmarshal(config, Config.class);
113-
return this;
112+
return withConfig(kubernetesSerialization.unmarshal(config, Config.class));
114113
}
115114

116115
public KubernetesClientBuilder withHttpClientFactory(HttpClient.Factory factory) {

kubernetes-client-api/src/test/java/io/fabric8/kubernetes/client/KubernetesClientBuilderTest.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,30 @@
1616
package io.fabric8.kubernetes.client;
1717

1818
import io.fabric8.kubernetes.client.KubernetesClientBuilder.ConfigNested;
19-
import io.fabric8.kubernetes.client.http.HttpClient;
20-
import io.fabric8.kubernetes.client.http.HttpClient.Factory;
19+
import io.fabric8.kubernetes.client.http.TestStandardHttpClient;
20+
import io.fabric8.kubernetes.client.http.TestStandardHttpClientFactory;
21+
import org.assertj.core.api.InstanceOfAssertFactories;
2122
import org.junit.jupiter.api.Test;
22-
import org.mockito.Mockito;
2323

24+
import static org.assertj.core.api.Assertions.assertThat;
2425
import static org.junit.jupiter.api.Assertions.assertEquals;
2526
import static org.junit.jupiter.api.Assertions.assertThrows;
2627

2728
class KubernetesClientBuilderTest {
2829

2930
@Test
30-
void testHttpClientConfiguration() {
31+
void httpClientConfiguration() {
3132
KubernetesClientBuilder builder = new KubernetesClientBuilder(null);
32-
Factory mockFactory = Mockito.mock(HttpClient.Factory.class);
33-
HttpClient.Builder mockBuilder = Mockito.mock(HttpClient.Builder.class);
34-
Mockito.when(mockFactory.newBuilder(Mockito.any())).thenReturn(mockBuilder);
35-
builder.withHttpClientFactory(mockFactory).withHttpClientBuilderConsumer(b -> b.proxyAuthorization("something"));
36-
builder.getHttpClient();
37-
Mockito.verify(mockBuilder).proxyAuthorization("something");
33+
builder.withConfig(Config.empty());
34+
builder.withHttpClientFactory(new TestStandardHttpClientFactory());
35+
builder.withHttpClientBuilderConsumer(b -> b.tag("string-tag-value"));
36+
assertThat(builder.getHttpClient())
37+
.asInstanceOf(InstanceOfAssertFactories.type(TestStandardHttpClient.class))
38+
.returns("string-tag-value", c -> c.getTag(String.class));
3839
}
3940

4041
@Test
41-
void testConfigNested() {
42+
void nestedConfigPreservesOriginalValues() {
4243
KubernetesClientBuilder builder = new KubernetesClientBuilder(null);
4344
builder.withConfig(new ConfigBuilder().withWatchReconnectLimit(600).build());
4445
builder.editOrNewConfig().withApiVersion("x.y").endConfig();
@@ -65,4 +66,5 @@ void testNullContextClassLoader() {
6566
Thread.currentThread().setContextClassLoader(currContextClassLoader);
6667
}
6768
}
69+
6870
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright (C) 2015 Red Hat, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.fabric8.kubernetes.client.behavior;
17+
18+
import io.fabric8.kubernetes.client.Config;
19+
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
20+
import org.junit.jupiter.api.Nested;
21+
import org.junit.jupiter.api.Test;
22+
23+
import java.io.ByteArrayInputStream;
24+
import java.nio.charset.StandardCharsets;
25+
26+
import static org.assertj.core.api.Assertions.assertThat;
27+
28+
class KubernetesClientBuilderTest {
29+
30+
@Nested
31+
class WithConfig {
32+
33+
@Test
34+
void fromStringDoesntAutoconfigure() {
35+
final var config = "{\"masterUrl\":\"https://example.com\"}";
36+
try (var client = new KubernetesClientBuilder().withConfig(config).build()) {
37+
assertThat(client.getConfiguration())
38+
.returns(false, c -> Boolean.TRUE.equals(c.getAutoConfigure()))
39+
.returns("https://example.com/", Config::getMasterUrl);
40+
}
41+
}
42+
43+
@Test
44+
void fromInputStreamDoesntAutoconfigure() {
45+
final var config = new ByteArrayInputStream("{\"masterUrl\":\"https://example.com\"}".getBytes(StandardCharsets.UTF_8));
46+
try (var client = new KubernetesClientBuilder().withConfig(config).build()) {
47+
assertThat(client.getConfiguration())
48+
.returns(false, c -> Boolean.TRUE.equals(c.getAutoConfigure()))
49+
.returns("https://example.com/", Config::getMasterUrl);
50+
}
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)