Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix 1583 #1584

Merged
merged 134 commits into from
Mar 8, 2024
Merged
Show file tree
Hide file tree
Changes from 128 commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
032014e
test
wind57 Dec 4, 2021
c3d0ad2
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 13, 2021
10889fd
fix @Nested tests not running
wind57 Dec 16, 2021
8f0375a
merged main
wind57 Dec 17, 2021
96ebf42
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jan 5, 2022
db8403e
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jan 12, 2022
90a5345
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jan 12, 2022
b041c00
trigger again
wind57 Jan 13, 2022
9580444
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 15, 2022
a34ac47
Add renovate.json
renovate[bot] Jul 13, 2022
6613f78
Merge branch 'spring-cloud:main' into main
wind57 Jul 13, 2022
1b3eae9
Merge pull request #1 from wind57/renovate/configure
wind57 Jul 13, 2022
4275382
Merge branch 'spring-cloud:main' into main
wind57 Mar 13, 2023
618f25a
Delete renovate.json
wind57 Mar 14, 2023
100a9cd
Delete delme.sh
wind57 Mar 14, 2023
4b9056b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 14, 2023
315a85b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 15, 2023
ed3c264
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 15, 2023
446d630
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 16, 2023
6821a28
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 16, 2023
9e95a8a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 16, 2023
02840b1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 16, 2023
7e31d65
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 20, 2023
926f4d7
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 20, 2023
344e1d4
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 21, 2023
e91ac12
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 23, 2023
ba6e088
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Mar 28, 2023
49025e8
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 1, 2023
a647bb3
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 4, 2023
16b09ab
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 4, 2023
c8d8a72
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 5, 2023
591f340
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 6, 2023
c331bd0
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 6, 2023
f48b22b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 7, 2023
900843d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 8, 2023
76ecdd5
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 8, 2023
b69d4a6
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 11, 2023
df2ddcc
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 14, 2023
3ff1cdd
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 18, 2023
bd89cc8
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 18, 2023
39ef510
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 19, 2023
d389953
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 19, 2023
b676bac
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 21, 2023
b1473c9
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 24, 2023
83ff113
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 24, 2023
33dfbb7
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 24, 2023
316af58
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 25, 2023
425d30b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 26, 2023
763280a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 26, 2023
3afbaef
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 27, 2023
cb97ba1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Apr 28, 2023
b33edc8
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 1, 2023
7a1fdf1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 2, 2023
a8beed9
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 2, 2023
2e445d9
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 9, 2023
5b51db1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 12, 2023
b0ce76c
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 12, 2023
918bb7f
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 12, 2023
c629951
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 15, 2023
ccfc0bf
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 22, 2023
0f3fa24
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 23, 2023
b60a283
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 25, 2023
901cb66
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 26, 2023
251002b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 27, 2023
fedeb17
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 May 30, 2023
004f95b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 3, 2023
10168be
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 5, 2023
dc811cf
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 6, 2023
3dfe77d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 8, 2023
619c8d0
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 16, 2023
12ca211
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 17, 2023
a91c1e1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 22, 2023
be2e809
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jun 24, 2023
1c84e33
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jul 17, 2023
1319fe7
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jul 18, 2023
9424c2e
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jul 25, 2023
cddd550
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 2, 2023
f8d34f2
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 3, 2023
31d2fb8
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 5, 2023
fa9fd09
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 8, 2023
22f3f51
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 16, 2023
bb44f4b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 21, 2023
9714f2c
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Aug 22, 2023
0f9cb3d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 2, 2023
6e60174
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 11, 2023
78c5575
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 12, 2023
5eb5c51
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 16, 2023
48f7cb0
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 18, 2023
8a18085
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 20, 2023
e4cab39
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 21, 2023
ba4cab0
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 21, 2023
bbc6e30
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 23, 2023
0e9f1ad
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 26, 2023
8a5243c
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 28, 2023
cbf83c4
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 29, 2023
3dd0260
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Sep 30, 2023
1408d44
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 2, 2023
2925ee1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 2, 2023
af3a12b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 5, 2023
f5a27dc
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 7, 2023
494454a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 7, 2023
add0f67
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 13, 2023
b6a4b45
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 20, 2023
00a559d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 27, 2023
882f9c1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Oct 31, 2023
6c9071e
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 3, 2023
09c10bb
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 8, 2023
3615396
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 14, 2023
116c199
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 16, 2023
f1447cd
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 18, 2023
14b165b
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 21, 2023
3ce8fac
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Nov 30, 2023
41eaa8d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 4, 2023
4f89298
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 7, 2023
ee1031d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 19, 2023
f6707d5
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 22, 2023
9930c7d
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Dec 27, 2023
0043006
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Jan 16, 2024
4e292ec
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 2, 2024
3129276
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 16, 2024
1c90fc2
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 16, 2024
fa0888a
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 22, 2024
bf89ebb
fix issue
wind57 Feb 22, 2024
4eb0951
fix issue
wind57 Feb 22, 2024
dd4e91d
checkstyle
wind57 Feb 22, 2024
ea5ec18
fix
wind57 Feb 23, 2024
d708e25
fix test
wind57 Feb 23, 2024
d479efa
augment liveness probe
wind57 Feb 23, 2024
439fe01
augment readiness probe
wind57 Feb 24, 2024
420bfa8
fix tests failure
wind57 Feb 25, 2024
ab680d1
Merge branch 'main' of https://github.com/spring-cloud/spring-cloud-k…
wind57 Feb 25, 2024
7e975ef
Merge branch 'main' into fix-1853
wind57 Feb 25, 2024
56b9648
placeholder commit
wind57 Mar 7, 2024
e64557c
review comments
wind57 Mar 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public KubernetesNamespaceProvider kubernetesNamespaceProvider(Environment envir
@ConditionalOnMissingBean
public KubernetesClientPodUtils kubernetesPodUtils(CoreV1Api client,
KubernetesNamespaceProvider kubernetesNamespaceProvider) {
return new KubernetesClientPodUtils(client, kubernetesNamespaceProvider.getNamespace());
return new KubernetesClientPodUtils(client, kubernetesNamespaceProvider.getNamespace(), true);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public KubernetesClientHealthIndicator(PodUtils<V1Pod> utils) {

@Override
protected Map<String, Object> getDetails() {
V1Pod current = this.utils.currentPod().get();
V1Pod current = utils.currentPod().get();
if (current != null) {
Map<String, Object> details = CollectionUtils.newHashMap(8);
details.put(INSIDE, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public KubernetesClientInfoContributor(PodUtils<V1Pod> utils) {

@Override
public Map<String, Object> getDetails() {
V1Pod current = this.utils.currentPod().get();
V1Pod current = utils.currentPod().get();
if (current != null) {
Map<String, Object> details = CollectionUtils.newHashMap(7);
details.put(INSIDE, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ public class KubernetesClientPodUtils implements PodUtils<V1Pod> {

private final String serviceHost;

private final boolean failFast;

@Deprecated(forRemoval = true)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

deprecate this constructor

public KubernetesClientPodUtils(CoreV1Api client, String namespace) {
if (client == null) {
throw new IllegalArgumentException("Must provide an instance of KubernetesClient");
Expand All @@ -68,6 +71,22 @@ public KubernetesClientPodUtils(CoreV1Api client, String namespace) {
this.serviceHost = EnvReader.getEnv(KUBERNETES_SERVICE_HOST);
this.current = LazilyInstantiate.using(this::internalGetPod);
this.namespace = namespace;
this.failFast = false;
}

// mainly needed for the health and info contributors, so that they report DOWN
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

introduce a new constructor that takes a failFast as argument. For the health and info stuff, use failFast=true. For the environment post processor use failFast=false, in order to preserve compatibility

// correctly
public KubernetesClientPodUtils(CoreV1Api client, String namespace, boolean failFast) {
if (client == null) {
throw new IllegalArgumentException("Must provide an instance of KubernetesClient");
}

this.client = client;
this.hostName = EnvReader.getEnv(HOSTNAME);
this.serviceHost = EnvReader.getEnv(KUBERNETES_SERVICE_HOST);
this.current = LazilyInstantiate.using(this::internalGetPod);
this.namespace = namespace;
this.failFast = failFast;
}

@Override
Expand All @@ -84,10 +103,14 @@ private V1Pod internalGetPod() {
try {
if (isServiceHostEnvVarPresent() && isHostNameEnvVarPresent() && isServiceAccountFound()) {
LOG.debug("reading pod in namespace : " + namespace);
// The hostname of your pod is typically also its name.
return client.readNamespacedPod(hostName, namespace, null);
}
}
catch (Throwable t) {
if (failFast) {
throw new RuntimeException(t);
}
if (t instanceof ApiException apiException) {
LOG.warn("error reading pod, with error : " + apiException.getResponseBody());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ public class KubernetesClientProfileEnvironmentPostProcessor extends AbstractKub
@Override
protected boolean isInsideKubernetes(Environment environment) {
CoreV1Api api = new CoreV1Api();
KubernetesClientPodUtils utils = new KubernetesClientPodUtils(api, environment.getProperty(NAMESPACE_PROPERTY));
KubernetesClientPodUtils utils = new KubernetesClientPodUtils(api, environment.getProperty(NAMESPACE_PROPERTY),
false);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

false in here as the argument to fail-fast, to preserver the previous logic.

return environment.containsProperty(ENV_SERVICE_HOST) || utils.isInsideKubernetes();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/*
* Copyright 2013-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springframework.cloud.kubernetes.client;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.util.Config;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.Status;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.cloud.kubernetes.client.example.App;
import org.springframework.cloud.kubernetes.commons.EnvReader;
import org.springframework.context.annotation.Bean;

/**
* @author wind57
*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = { App.class, ActuatorEnabledFailFastExceptionTest.ActuatorConfig.class },
properties = { "management.endpoint.health.show-details=always",
"management.endpoint.health.show-components=always", "management.endpoints.web.exposure.include=health",
"spring.main.cloud-platform=KUBERNETES" })
class ActuatorEnabledFailFastExceptionTest {

private static final boolean FAIL_FAST = true;

private static MockedStatic<EnvReader> envReaderMockedStatic;

private static MockedStatic<Paths> pathsMockedStatic;

private static final CoreV1Api coreV1Api = Mockito.mock(CoreV1Api.class);

@Autowired
private KubernetesClientHealthIndicator healthIndicator;

@AfterEach
void afterEach() {
envReaderMockedStatic.close();
pathsMockedStatic.close();
}

@Test
void test() throws ApiException {
Health health = healthIndicator.getHealth(true);
Assertions.assertEquals(health.getStatus(), Status.DOWN);
Mockito.verify(coreV1Api).readNamespacedPod("host", "my-namespace", null);
}

private static void mocks() {
envReaderMockedStatic = Mockito.mockStatic(EnvReader.class);
pathsMockedStatic = Mockito.mockStatic(Paths.class);

envReaderMockedStatic.when(() -> EnvReader.getEnv(KubernetesClientPodUtils.KUBERNETES_SERVICE_HOST))
.thenReturn("k8s-host");
envReaderMockedStatic.when(() -> EnvReader.getEnv(KubernetesClientPodUtils.HOSTNAME)).thenReturn("host");

Path serviceAccountTokenPath = Mockito.mock(Path.class);
File serviceAccountTokenFile = Mockito.mock(File.class);
Mockito.when(serviceAccountTokenPath.toFile()).thenReturn(serviceAccountTokenFile);
Mockito.when(serviceAccountTokenFile.exists()).thenReturn(true);
pathsMockedStatic.when(() -> Paths.get(Config.SERVICEACCOUNT_TOKEN_PATH)).thenReturn(serviceAccountTokenPath);

Path serviceAccountCAPath = Mockito.mock(Path.class);
File serviceAccountCAFile = Mockito.mock(File.class);
Mockito.when(serviceAccountCAPath.toFile()).thenReturn(serviceAccountCAFile);
Mockito.when(serviceAccountCAFile.exists()).thenReturn(true);
pathsMockedStatic.when(() -> Paths.get(Config.SERVICEACCOUNT_CA_PATH)).thenReturn(serviceAccountCAPath);
}

@TestConfiguration
static class ActuatorConfig {

// will be created "instead" of
// KubernetesClientAutoConfiguration::kubernetesPodUtils
@Bean
KubernetesClientPodUtils kubernetesPodUtils() throws ApiException {

mocks();

Mockito.when(coreV1Api.readNamespacedPod("host", "my-namespace", null))
.thenThrow(new RuntimeException("just because"));

return new KubernetesClientPodUtils(coreV1Api, "my-namespace", FAIL_FAST);
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/*
* Copyright 2013-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springframework.cloud.kubernetes.client;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.util.Config;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.Status;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.cloud.kubernetes.client.example.App;
import org.springframework.cloud.kubernetes.commons.EnvReader;
import org.springframework.context.annotation.Bean;

/**
* @author wind57
*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = { App.class, ActuatorEnabledNoFailFastExceptionTest.ActuatorConfig.class },
properties = { "management.endpoint.health.show-details=always",
"management.endpoint.health.show-components=always", "management.endpoints.web.exposure.include=health",
"spring.main.cloud-platform=KUBERNETES" })

class ActuatorEnabledNoFailFastExceptionTest {

private static final boolean FAIL_FAST = false;

private static MockedStatic<EnvReader> envReaderMockedStatic;

private static MockedStatic<Paths> pathsMockedStatic;

private static final CoreV1Api coreV1Api = Mockito.mock(CoreV1Api.class);

@Autowired
private KubernetesClientHealthIndicator healthIndicator;

@AfterEach
void afterEach() {
envReaderMockedStatic.close();
pathsMockedStatic.close();
}

// without a fail-fast, we would not fail and actuator would return "UP"
// This is not a real case we have, it just makes sure
@Test
void test() throws ApiException {
Health health = healthIndicator.getHealth(true);
Assertions.assertEquals(health.getStatus(), Status.UP);
Mockito.verify(coreV1Api).readNamespacedPod("host", "my-namespace", null);
}

private static void mocks() {
envReaderMockedStatic = Mockito.mockStatic(EnvReader.class);
pathsMockedStatic = Mockito.mockStatic(Paths.class);

envReaderMockedStatic.when(() -> EnvReader.getEnv(KubernetesClientPodUtils.KUBERNETES_SERVICE_HOST))
.thenReturn("k8s-host");
envReaderMockedStatic.when(() -> EnvReader.getEnv(KubernetesClientPodUtils.HOSTNAME)).thenReturn("host");

Path serviceAccountTokenPath = Mockito.mock(Path.class);
File serviceAccountTokenFile = Mockito.mock(File.class);
Mockito.when(serviceAccountTokenPath.toFile()).thenReturn(serviceAccountTokenFile);
Mockito.when(serviceAccountTokenFile.exists()).thenReturn(true);
pathsMockedStatic.when(() -> Paths.get(Config.SERVICEACCOUNT_TOKEN_PATH)).thenReturn(serviceAccountTokenPath);

Path serviceAccountCAPath = Mockito.mock(Path.class);
File serviceAccountCAFile = Mockito.mock(File.class);
Mockito.when(serviceAccountCAPath.toFile()).thenReturn(serviceAccountCAFile);
Mockito.when(serviceAccountCAFile.exists()).thenReturn(true);
pathsMockedStatic.when(() -> Paths.get(Config.SERVICEACCOUNT_CA_PATH)).thenReturn(serviceAccountCAPath);
}

@TestConfiguration
static class ActuatorConfig {

// will be created "instead" of
// KubernetesClientAutoConfiguration::kubernetesPodUtils
@Bean
KubernetesClientPodUtils kubernetesPodUtils() throws ApiException {

mocks();

Mockito.when(coreV1Api.readNamespacedPod("host", "my-namespace", null))
.thenThrow(new RuntimeException("just because"));

return new KubernetesClientPodUtils(coreV1Api, "my-namespace", FAIL_FAST);
}

}

}
Loading
Loading