Skip to content

Commit 34d3744

Browse files
rohanKanojiamanusa
authored andcommitted
fix(mock-server): KubernetesMockServer provides a valid, complete configuration (6069)
fix (kubernetes-server-mock) : Add opinionated current context to KubernetesMockServer's initConfig Add values for username, oauthToken and currentContext to Config created by the Kubernetes Mock Server for KubernetesClient used in tests Signed-off-by: Rohan Kumar <[email protected]> --- review: kubernetes-mock-server config Signed-off-by: Marc Nuri <[email protected]> (cherry picked from commit b9ee9b0)
1 parent d264884 commit 34d3744

File tree

9 files changed

+83
-31
lines changed

9 files changed

+83
-31
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#### Bugs
66
* Fix #6059: Swallow rejected execution from internal usage of the informer executor
7+
* Fix #6068: KubernetesMockServer provides incomplete Configuration while creating test Config for KubernetesClient
78

89
### 6.13.0 (2024-05-29)
910

junit/kubernetes-server-mock/src/main/java/io/fabric8/kubernetes/client/server/mock/KubernetesMockServer.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import io.fabric8.kubernetes.api.model.APIResourceBuilder;
2020
import io.fabric8.kubernetes.api.model.APIResourceList;
2121
import io.fabric8.kubernetes.api.model.APIResourceListBuilder;
22+
import io.fabric8.kubernetes.api.model.NamedContext;
23+
import io.fabric8.kubernetes.api.model.NamedContextBuilder;
2224
import io.fabric8.kubernetes.api.model.RootPathsBuilder;
2325
import io.fabric8.kubernetes.client.Client;
2426
import io.fabric8.kubernetes.client.Config;
@@ -205,12 +207,24 @@ public void clearExpectations() {
205207
}
206208

207209
protected Config initConfig() {
210+
final NamedContext mockServerContext = new NamedContextBuilder()
211+
.withName("fabric8-mock-server-context")
212+
.withNewContext()
213+
.withNamespace("test")
214+
.withCluster(String.format("localhost:%d", getPort()))
215+
.withUser("fabric8-mock-server-user")
216+
.endContext()
217+
.build();
208218
return new ConfigBuilder(Config.empty())
209219
.withMasterUrl(url("/"))
210220
.withTrustCerts(true)
211221
.withTlsVersions(TlsVersion.TLS_1_2)
212222
.withNamespace("test")
213223
.withHttp2Disable(true)
224+
.addToContexts(mockServerContext)
225+
.withCurrentContext(mockServerContext)
226+
.withUsername("fabric8-mock-server-user")
227+
.withOauthToken("secret")
214228
.build();
215229
}
216230

junit/kubernetes-server-mock/src/test/java/io/fabric8/kubernetes/client/server/mock/KubernetesMockServerExtensionTest.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
*/
1616
package io.fabric8.kubernetes.client.server.mock;
1717

18+
import io.fabric8.kubernetes.client.Client;
1819
import io.fabric8.kubernetes.client.KubernetesClient;
1920
import io.fabric8.kubernetes.client.VersionInfo;
20-
import org.junit.jupiter.api.Assertions;
2121
import org.junit.jupiter.api.DisplayName;
2222
import org.junit.jupiter.api.Test;
2323

@@ -29,16 +29,22 @@ class KubernetesMockServerExtensionTest {
2929
KubernetesClient client;
3030

3131
@Test
32-
void testExample() {
33-
Assertions.assertNotNull(client);
34-
Assertions.assertNull(client.getConfiguration().getOauthToken());
35-
Assertions.assertNull(client.getConfiguration().getCurrentContext());
36-
Assertions.assertTrue(client.getConfiguration().getContexts().isEmpty());
32+
void mockServerConfiguration() {
33+
assertThat(client)
34+
.isNotNull()
35+
.extracting(Client::getConfiguration)
36+
.hasFieldOrPropertyWithValue("oauthToken", "secret")
37+
.hasFieldOrPropertyWithValue("username", "fabric8-mock-server-user")
38+
.hasFieldOrPropertyWithValue("currentContext.name", "fabric8-mock-server-context")
39+
.hasFieldOrPropertyWithValue("currentContext.context.namespace", "test")
40+
.hasFieldOrPropertyWithValue("currentContext.context.user", "fabric8-mock-server-user")
41+
.satisfies(c -> assertThat(c.getCurrentContext().getContext().getCluster()).startsWith("localhost:"))
42+
.satisfies(c -> assertThat(c.getContexts()).hasSize(1));
3743
}
3844

3945
@Test
4046
@DisplayName("KubernetesMockServerExtension uses KubernetesMixedDispatcher and provides expectation for GET /version")
41-
void testGetKubernetesVersion() {
47+
void getKubernetesVersion() {
4248
// When
4349
final VersionInfo result = client.getKubernetesVersion();
4450
// Then

junit/kubernetes-server-mock/src/test/java/io/fabric8/kubernetes/client/server/mock/MockServerKubeconfigTest.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,17 @@
1515
*/
1616
package io.fabric8.kubernetes.client.server.mock;
1717

18+
import io.fabric8.kubernetes.api.model.NamedContext;
1819
import io.fabric8.kubernetes.client.KubernetesClient;
20+
import org.assertj.core.api.InstanceOfAssertFactories;
1921
import org.junit.jupiter.api.AfterEach;
20-
import org.junit.jupiter.api.Assertions;
2122
import org.junit.jupiter.api.BeforeEach;
2223
import org.junit.jupiter.api.Test;
2324

2425
import java.util.Objects;
2526

27+
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
28+
2629
class MockServerKubeconfigTest {
2730

2831
@BeforeEach
@@ -39,10 +42,16 @@ void mockServerShouldNotPickTokenAndNameContextIfKubeConfigFound() {
3942
KubernetesClient client = server.createClient();
4043

4144
// Then
42-
Assertions.assertNotNull(client);
43-
Assertions.assertNull(client.getConfiguration().getOauthToken());
44-
Assertions.assertNull(client.getConfiguration().getCurrentContext());
45-
Assertions.assertTrue(client.getConfiguration().getContexts().isEmpty());
45+
assertThat(client).isNotNull();
46+
assertThat(client.getConfiguration())
47+
.isNotNull()
48+
.satisfies(c -> assertThat(c.getCurrentContext().getName()).isNotEqualTo("default/api-crc-testing:6443/kubeadmin"))
49+
.satisfies(c -> assertThat(c.getOauthToken()).isNotEqualTo("sha256~iYtvbJNJEE0_QSxYE0Wl1MJJxpSvDUsNyYfzkCIoDkw"))
50+
.satisfies(c -> assertThat(c.getContexts())
51+
.hasSize(1)
52+
.singleElement(InstanceOfAssertFactories.type(NamedContext.class))
53+
.extracting(NamedContext::getName)
54+
.isNotEqualTo("default/api-crc-testing:6443/kubeadmin"));
4655
}
4756

4857
@AfterEach

junit/openshift-server-mock/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
<artifactId>openshift-client</artifactId>
4040
</dependency>
4141

42+
<dependency>
43+
<groupId>org.assertj</groupId>
44+
<artifactId>assertj-core</artifactId>
45+
<scope>test</scope>
46+
</dependency>
4247
<dependency>
4348
<groupId>org.junit.jupiter</groupId>
4449
<artifactId>junit-jupiter-api</artifactId>

junit/openshift-server-mock/src/test/java/io/fabric8/openshift/client/server/mock/OpenShiftMockServerExtensionStaticTests.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,27 @@
1515
*/
1616
package io.fabric8.openshift.client.server.mock;
1717

18+
import io.fabric8.kubernetes.client.Client;
1819
import io.fabric8.openshift.client.OpenShiftClient;
1920
import org.junit.jupiter.api.Test;
2021

21-
import static org.junit.jupiter.api.Assertions.assertNotNull;
22-
import static org.junit.jupiter.api.Assertions.assertNull;
23-
import static org.junit.jupiter.api.Assertions.assertTrue;
22+
import static org.assertj.core.api.Assertions.assertThat;
2423

2524
@EnableOpenShiftMockClient(crud = true)
2625
class OpenShiftMockServerExtensionStaticTests {
2726
static OpenShiftClient openShiftClient;
2827

2928
@Test
3029
void testStaticOpenShiftClientGetsInitialized() {
31-
assertNotNull(openShiftClient);
32-
assertNull(openShiftClient.getConfiguration().getOauthToken());
33-
assertNull(openShiftClient.getConfiguration().getCurrentContext());
34-
assertTrue(openShiftClient.getConfiguration().getContexts().isEmpty());
30+
assertThat(openShiftClient)
31+
.isNotNull()
32+
.extracting(Client::getConfiguration)
33+
.hasFieldOrPropertyWithValue("oauthToken", "secret")
34+
.hasFieldOrPropertyWithValue("username", "fabric8-mock-server-user")
35+
.hasFieldOrPropertyWithValue("currentContext.name", "fabric8-mock-server-context")
36+
.hasFieldOrPropertyWithValue("currentContext.context.namespace", "test")
37+
.hasFieldOrPropertyWithValue("currentContext.context.user", "fabric8-mock-server-user")
38+
.satisfies(c -> assertThat(c.getCurrentContext().getContext().getCluster()).startsWith("localhost:"))
39+
.satisfies(c -> assertThat(c.getContexts()).hasSize(1));
3540
}
3641
}

junit/openshift-server-mock/src/test/java/io/fabric8/openshift/client/server/mock/OpenShiftMockServerExtensionTests.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,27 @@
1515
*/
1616
package io.fabric8.openshift.client.server.mock;
1717

18+
import io.fabric8.kubernetes.client.Client;
1819
import io.fabric8.openshift.client.OpenShiftClient;
1920
import org.junit.jupiter.api.Test;
2021

21-
import static org.junit.jupiter.api.Assertions.assertNotNull;
22-
import static org.junit.jupiter.api.Assertions.assertNull;
23-
import static org.junit.jupiter.api.Assertions.assertTrue;
22+
import static org.assertj.core.api.Assertions.assertThat;
2423

2524
@EnableOpenShiftMockClient(crud = true)
2625
class OpenShiftMockServerExtensionTests {
2726
OpenShiftClient client;
2827

2928
@Test
3029
void testOpenShiftClientGetsInitialized() {
31-
assertNotNull(client);
32-
assertNull(client.getConfiguration().getOauthToken());
33-
assertNull(client.getConfiguration().getCurrentContext());
34-
assertTrue(client.getConfiguration().getContexts().isEmpty());
30+
assertThat(client)
31+
.isNotNull()
32+
.extracting(Client::getConfiguration)
33+
.hasFieldOrPropertyWithValue("oauthToken", "secret")
34+
.hasFieldOrPropertyWithValue("username", "fabric8-mock-server-user")
35+
.hasFieldOrPropertyWithValue("currentContext.name", "fabric8-mock-server-context")
36+
.hasFieldOrPropertyWithValue("currentContext.context.namespace", "test")
37+
.hasFieldOrPropertyWithValue("currentContext.context.user", "fabric8-mock-server-user")
38+
.satisfies(c -> assertThat(c.getCurrentContext().getContext().getCluster()).startsWith("localhost:"))
39+
.satisfies(c -> assertThat(c.getContexts()).hasSize(1));
3540
}
3641
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import java.nio.file.Paths;
5353
import java.util.ArrayList;
5454
import java.util.Arrays;
55+
import java.util.Collections;
5556
import java.util.HashMap;
5657
import java.util.List;
5758
import java.util.Locale;
@@ -338,7 +339,7 @@ public Config(String masterUrl, String apiVersion, String namespace, boolean tru
338339
errorMessages, userAgent, tlsVersions, websocketPingInterval, proxyUsername, proxyPassword,
339340
trustStoreFile, trustStorePassphrase, keyStoreFile, keyStorePassphrase, impersonateUsername, impersonateGroups,
340341
impersonateExtras, null, null, DEFAULT_REQUEST_RETRY_BACKOFFLIMIT, DEFAULT_REQUEST_RETRY_BACKOFFINTERVAL,
341-
DEFAULT_UPLOAD_REQUEST_TIMEOUT, false);
342+
DEFAULT_UPLOAD_REQUEST_TIMEOUT, false, null, Collections.emptyList());
342343
}
343344

344345
@Buildable(builderPackage = "io.fabric8.kubernetes.api.builder", editableEnabled = false)
@@ -353,7 +354,8 @@ public Config(String masterUrl, String apiVersion, String namespace, boolean tru
353354
String proxyPassword, String trustStoreFile, String trustStorePassphrase, String keyStoreFile, String keyStorePassphrase,
354355
String impersonateUsername, String[] impersonateGroups, Map<String, List<String>> impersonateExtras,
355356
OAuthTokenProvider oauthTokenProvider, Map<String, String> customHeaders, int requestRetryBackoffLimit,
356-
int requestRetryBackoffInterval, int uploadRequestTimeout, boolean onlyHttpWatches) {
357+
int requestRetryBackoffInterval, int uploadRequestTimeout, boolean onlyHttpWatches, NamedContext currentContext,
358+
List<NamedContext> contexts) {
357359
this.apiVersion = apiVersion;
358360
this.namespace = namespace;
359361
this.trustCerts = trustCerts;
@@ -403,6 +405,8 @@ public Config(String masterUrl, String apiVersion, String namespace, boolean tru
403405
this.maxConcurrentRequestsPerHost = maxConcurrentRequestsPerHost;
404406
this.autoOAuthToken = autoOAuthToken;
405407
this.onlyHttpWatches = onlyHttpWatches;
408+
this.contexts = contexts;
409+
this.currentContext = currentContext;
406410
}
407411

408412
public static void configFromSysPropsOrEnvVars(Config config) {

openshift-client-api/src/main/java/io/fabric8/openshift/client/OpenShiftConfig.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.fasterxml.jackson.annotation.JsonIgnore;
1919
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
2020
import com.fasterxml.jackson.annotation.JsonInclude;
21+
import io.fabric8.kubernetes.api.model.NamedContext;
2122
import io.fabric8.kubernetes.client.Config;
2223
import io.fabric8.kubernetes.client.OAuthTokenProvider;
2324
import io.fabric8.kubernetes.client.http.TlsVersion;
@@ -87,7 +88,7 @@ public OpenShiftConfig(String openShiftUrl, String oapiVersion, String masterUrl
8788
String[] impersonateGroups, Map<String, List<String>> impersonateExtras, OAuthTokenProvider oauthTokenProvider,
8889
Map<String, String> customHeaders, int requestRetryBackoffLimit, int requestRetryBackoffInterval,
8990
int uploadRequestTimeout, boolean onlyHttpWatches, long buildTimeout,
90-
boolean disableApiGroupCheck) {
91+
boolean disableApiGroupCheck, NamedContext currentContext, List<NamedContext> contexts) {
9192
super(masterUrl, apiVersion, namespace, trustCerts, disableHostnameVerification, caCertFile, caCertData,
9293
clientCertFile,
9394
clientCertData, clientKeyFile, clientKeyData, clientKeyAlgo, clientKeyPassphrase, username, password,
@@ -100,7 +101,7 @@ public OpenShiftConfig(String openShiftUrl, String oapiVersion, String masterUrl
100101
impersonateExtras, oauthTokenProvider, customHeaders,
101102
requestRetryBackoffLimit,
102103
requestRetryBackoffInterval,
103-
uploadRequestTimeout, onlyHttpWatches);
104+
uploadRequestTimeout, onlyHttpWatches, currentContext, contexts);
104105
this.setOapiVersion(oapiVersion);
105106
this.setBuildTimeout(buildTimeout);
106107
this.setDisableApiGroupCheck(disableApiGroupCheck);
@@ -143,7 +144,9 @@ public OpenShiftConfig(Config kubernetesConfig, String openShiftUrl, String oapi
143144
kubernetesConfig.getUploadRequestTimeout(),
144145
kubernetesConfig.isOnlyHttpWatches(),
145146
buildTimeout,
146-
false);
147+
false,
148+
kubernetesConfig.getCurrentContext(),
149+
kubernetesConfig.getContexts());
147150
}
148151

149152
public static OpenShiftConfig wrap(Config config) {

0 commit comments

Comments
 (0)