Fix failing tests change logic (#1815)

* dirty

* fix failing tests
This commit is contained in:
erabii
2024-12-06 01:23:54 +02:00
committed by GitHub
parent e99a781cfa
commit f7e7ce3d64
6 changed files with 184 additions and 140 deletions

View File

@@ -24,6 +24,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.stubbing.Scenario;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.JSON;
@@ -60,8 +61,10 @@ import org.springframework.core.env.PropertySource;
import org.springframework.mock.env.MockEnvironment;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
/**
@@ -82,6 +85,10 @@ class EventReloadConfigMapTest {
private static final String NAMESPACE = "spring-k8s";
private static final String SCENARIO_NAME = "reload-test";
private static final String PATH = "/api/v1/namespaces/spring-k8s/configmaps";
private static final AtomicBoolean STRATEGY_CALLED = new AtomicBoolean(false);
private static CoreV1Api coreV1Api;
@@ -99,6 +106,12 @@ class EventReloadConfigMapTest {
wireMockServer.start();
WireMock.configureFor("localhost", wireMockServer.port());
// something that the informer can work with. Since we do not care about this one
// in the test, we mock it to return a 500 as it does not matter anyway.
stubFor(get(urlPathMatching(PATH)).withQueryParam("resourceVersion", equalTo("0"))
.withQueryParam("watch", equalTo("false"))
.willReturn(aResponse().withStatus(500).withBody("Error From Informer")));
ApiClient client = new ClientBuilder().setBasePath("http://localhost:" + wireMockServer.port()).build();
client.setDebugging(true);
MOCK_STATIC.when(KubernetesClientUtils::createApiClientForInformerClient).thenReturn(client);
@@ -108,30 +121,6 @@ class EventReloadConfigMapTest {
.thenReturn(NAMESPACE);
Configuration.setDefaultApiClient(client);
coreV1Api = new CoreV1Api();
String path = "/api/v1/namespaces/spring-k8s/configmaps";
V1ConfigMap configMapOne = configMap(CONFIG_MAP_NAME, Map.of());
V1ConfigMapList listOne = new V1ConfigMapList().addItemsItem(configMapOne);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
stubFor(get(path).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listOne)))
.inScenario("mine-test")
.willSetStateTo("go-to-fail"));
// first call will fail
stubFor(get(path).willReturn(aResponse().withStatus(500).withBody("Internal Server Error"))
.inScenario("mine-test")
.whenScenarioStateIs("go-to-fail")
.willSetStateTo("go-to-ok"));
// second call passes (change data so that reload is triggered)
configMapOne = configMap(CONFIG_MAP_NAME, Map.of("a", "b"));
listOne = new V1ConfigMapList().addItemsItem(configMapOne);
stubFor(get(path).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listOne)))
.inScenario("mine-test")
.whenScenarioStateIs("go-to-ok")
.willSetStateTo("done"));
}
@AfterAll
@@ -150,6 +139,13 @@ class EventReloadConfigMapTest {
*/
@Test
void test(CapturedOutput output) {
// first call will fail
stubFor(get(PATH).willReturn(aResponse().withStatus(500).withBody("Internal Server Error"))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs("go-to-fail")
.willSetStateTo("go-to-ok"));
V1ConfigMap configMapNotMine = configMap("not" + CONFIG_MAP_NAME, Map.of());
kubernetesClientEventBasedConfigMapChangeDetector.onEvent(configMapNotMine);
@@ -163,6 +159,14 @@ class EventReloadConfigMapTest {
return one && two && three && updateStrategyNotCalled;
});
// second call passes (change data so that reload is triggered)
V1ConfigMap configMap = configMap(CONFIG_MAP_NAME, Map.of("a", "b"));
V1ConfigMapList configMapList = new V1ConfigMapList().addItemsItem(configMap);
stubFor(get(PATH).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(configMapList)))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs("go-to-ok")
.willSetStateTo("done"));
// trigger the call again
V1ConfigMap configMapMine = configMap(CONFIG_MAP_NAME, Map.of());
kubernetesClientEventBasedConfigMapChangeDetector.onEvent(configMapMine);
@@ -194,6 +198,17 @@ class EventReloadConfigMapTest {
@Bean
@Primary
AbstractEnvironment environment() {
V1ConfigMap configMap = configMap(CONFIG_MAP_NAME, Map.of());
V1ConfigMapList configMapList = new V1ConfigMapList().addItemsItem(configMap);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
stubFor(get(PATH).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(configMapList)))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs(Scenario.STARTED)
.willSetStateTo("go-to-fail"));
MockEnvironment mockEnvironment = new MockEnvironment();
mockEnvironment.setProperty("spring.cloud.kubernetes.client.namespace", NAMESPACE);
@@ -217,7 +232,7 @@ class EventReloadConfigMapTest {
@Primary
ConfigReloadProperties configReloadProperties() {
return new ConfigReloadProperties(true, true, false, ConfigReloadProperties.ReloadStrategy.REFRESH,
ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("non-default"),
ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("spring-k8s"),
false, Duration.ofSeconds(2));
}

View File

@@ -26,6 +26,7 @@ import java.util.stream.Collectors;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.stubbing.Scenario;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.JSON;
@@ -62,8 +63,10 @@ import org.springframework.core.env.PropertySource;
import org.springframework.mock.env.MockEnvironment;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
/**
@@ -84,6 +87,10 @@ class EventReloadSecretTest {
private static final String NAMESPACE = "spring-k8s";
private static final String PATH = "/api/v1/namespaces/spring-k8s/secrets";
private static final String SCENARIO_NAME = "reload-test";
private static final AtomicBoolean STRATEGY_CALLED = new AtomicBoolean(false);
private static CoreV1Api coreV1Api;
@@ -101,6 +108,12 @@ class EventReloadSecretTest {
wireMockServer.start();
WireMock.configureFor("localhost", wireMockServer.port());
// something that the informer can work with. Since we do not care about this one
// in the test, we mock it to return a 500 as it does not matter anyway.
stubFor(get(urlPathMatching(PATH)).withQueryParam("resourceVersion", equalTo("0"))
.withQueryParam("watch", equalTo("false"))
.willReturn(aResponse().withStatus(500).withBody("Error From Informer")));
ApiClient client = new ClientBuilder().setBasePath("http://localhost:" + wireMockServer.port()).build();
client.setDebugging(true);
MOCK_STATIC.when(KubernetesClientUtils::createApiClientForInformerClient).thenReturn(client);
@@ -110,30 +123,6 @@ class EventReloadSecretTest {
.thenReturn(NAMESPACE);
Configuration.setDefaultApiClient(client);
coreV1Api = new CoreV1Api();
String path = "/api/v1/namespaces/spring-k8s/secrets";
V1Secret secretOne = secret(SECRET_NAME, Map.of());
V1SecretList listOne = new V1SecretList().addItemsItem(secretOne);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
stubFor(get(path).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listOne)))
.inScenario("mine-test")
.willSetStateTo("go-to-fail"));
// first call will fail
stubFor(get(path).willReturn(aResponse().withStatus(500).withBody("Internal Server Error"))
.inScenario("mine-test")
.whenScenarioStateIs("go-to-fail")
.willSetStateTo("go-to-ok"));
// second call passes (change data so that reload is triggered)
secretOne = secret(SECRET_NAME, Map.of("a", "b"));
listOne = new V1SecretList().addItemsItem(secretOne);
stubFor(get(path).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listOne)))
.inScenario("mine-test")
.whenScenarioStateIs("go-to-ok")
.willSetStateTo("done"));
}
@AfterAll
@@ -152,6 +141,12 @@ class EventReloadSecretTest {
*/
@Test
void test(CapturedOutput output) {
// first call will fail
stubFor(get(PATH).willReturn(aResponse().withStatus(500).withBody("Internal Server Error"))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs("go-to-fail")
.willSetStateTo("go-to-ok"));
V1Secret secretNotMine = secret("not" + SECRET_NAME, Map.of());
kubernetesClientEventBasedSecretsChangeDetector.onEvent(secretNotMine);
@@ -165,6 +160,14 @@ class EventReloadSecretTest {
return one && two && three && updateStrategyNotCalled;
});
// second call passes (change data so that reload is triggered)
V1Secret secret = secret(SECRET_NAME, Map.of("a", "b"));
V1SecretList secretList = new V1SecretList().addItemsItem(secret);
stubFor(get(PATH).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(secretList)))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs("go-to-ok")
.willSetStateTo("done"));
// trigger the call again
V1Secret secretMine = secret(SECRET_NAME, Map.of());
kubernetesClientEventBasedSecretsChangeDetector.onEvent(secretMine);
@@ -200,6 +203,17 @@ class EventReloadSecretTest {
@Bean
@Primary
AbstractEnvironment environment() {
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
V1Secret secret = secret(SECRET_NAME, Map.of());
V1SecretList secretList = new V1SecretList().addItemsItem(secret);
stubFor(get(PATH).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(secretList)))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs(Scenario.STARTED)
.willSetStateTo("go-to-fail"));
MockEnvironment mockEnvironment = new MockEnvironment();
mockEnvironment.setProperty("spring.cloud.kubernetes.client.namespace", NAMESPACE);
@@ -222,7 +236,7 @@ class EventReloadSecretTest {
@Primary
ConfigReloadProperties configReloadProperties() {
return new ConfigReloadProperties(true, true, false, ConfigReloadProperties.ReloadStrategy.REFRESH,
ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("non-default"),
ConfigReloadProperties.ReloadDetectionMode.POLLING, Duration.ofMillis(2000), Set.of("spring-k8s"),
false, Duration.ofSeconds(2));
}

View File

@@ -24,6 +24,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.stubbing.Scenario;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.JSON;
@@ -72,18 +73,22 @@ import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options
@ExtendWith(OutputCaptureExtension.class)
class PollingReloadConfigMapTest {
private static WireMockServer wireMockServer;
private static final boolean FAIL_FAST = false;
private static final String CONFIG_MAP_NAME = "mine";
private static final String PATH = "/api/v1/namespaces/spring-k8s/configmaps";
private static final String NAMESPACE = "spring-k8s";
private static final String SCENARIO_NAME = "reload-test";
private static final AtomicBoolean STRATEGY_CALLED = new AtomicBoolean(false);
private static CoreV1Api coreV1Api;
private static WireMockServer wireMockServer;
@BeforeAll
static void setup() {
wireMockServer = new WireMockServer(options().dynamicPort());
@@ -95,30 +100,6 @@ class PollingReloadConfigMapTest {
client.setDebugging(true);
Configuration.setDefaultApiClient(client);
coreV1Api = new CoreV1Api();
String path = "/api/v1/namespaces/spring-k8s/configmaps";
V1ConfigMap configMapOne = configMap(CONFIG_MAP_NAME, Map.of());
V1ConfigMapList listOne = new V1ConfigMapList().addItemsItem(configMapOne);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
stubFor(get(path).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listOne)))
.inScenario("my-test")
.willSetStateTo("go-to-fail"));
// first reload call fails
stubFor(get(path).willReturn(aResponse().withStatus(500).withBody("Internal Server Error"))
.inScenario("my-test")
.whenScenarioStateIs("go-to-fail")
.willSetStateTo("go-to-ok"));
// second reload call passes
V1ConfigMap configMapTwo = configMap(CONFIG_MAP_NAME, Map.of("a", "b"));
V1ConfigMapList listTwo = new V1ConfigMapList().addItemsItem(configMapTwo);
stubFor(get(path).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listTwo)))
.inScenario("my-test")
.whenScenarioStateIs("go-to-ok"));
}
@AfterAll
@@ -135,17 +116,33 @@ class PollingReloadConfigMapTest {
*/
@Test
void test(CapturedOutput output) {
// first reload call fails
stubFor(get(PATH).willReturn(aResponse().withStatus(500).withBody("Internal Server Error"))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs("go-to-fail")
.willSetStateTo("go-to-ok"));
// we fail while reading 'configMapOne'
Awaitility.await().atMost(Duration.ofSeconds(20)).pollInterval(Duration.ofSeconds(1)).until(() -> {
Awaitility.await().atMost(Duration.ofSeconds(10)).pollInterval(Duration.ofSeconds(1)).until(() -> {
boolean one = output.getOut().contains("Failure in reading named sources");
boolean two = output.getOut().contains("Failed to load source");
boolean three = output.getOut()
.contains("Reloadable condition was not satisfied, reload will not be triggered");
boolean updateStrategyNotCalled = !STRATEGY_CALLED.get();
System.out.println("one: " + one + " two: " + two + " three: " + three + " updateStrategyNotCalled: " + updateStrategyNotCalled);
System.out.println("one: " + one + " two: " + two + " three: " + three + " updateStrategyNotCalled: "
+ updateStrategyNotCalled);
return one && two && three && updateStrategyNotCalled;
});
// second reload call passes
V1ConfigMap configMapTwo = configMap(CONFIG_MAP_NAME, Map.of("a", "b"));
V1ConfigMapList listTwo = new V1ConfigMapList().addItemsItem(configMapTwo);
stubFor(get(PATH).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listTwo)))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs("go-to-ok")
.willSetStateTo("done"));
System.out.println("first assertion passed");
// it passes while reading 'configMapTwo'
@@ -177,6 +174,17 @@ class PollingReloadConfigMapTest {
@Bean
@Primary
AbstractEnvironment environment() {
V1ConfigMap configMapOne = configMap(CONFIG_MAP_NAME, Map.of());
V1ConfigMapList listOne = new V1ConfigMapList().addItemsItem(configMapOne);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
stubFor(get(PATH).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listOne)))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs(Scenario.STARTED)
.willSetStateTo("go-to-fail"));
MockEnvironment mockEnvironment = new MockEnvironment();
mockEnvironment.setProperty("spring.cloud.kubernetes.client.namespace", NAMESPACE);

View File

@@ -26,6 +26,7 @@ import java.util.stream.Collectors;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.stubbing.Scenario;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.JSON;
@@ -74,18 +75,22 @@ import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options
@ExtendWith(OutputCaptureExtension.class)
class PollingReloadSecretTest {
private static WireMockServer wireMockServer;
private static final boolean FAIL_FAST = false;
private static final String SECRET_NAME = "mine";
private static final String PATH = "/api/v1/namespaces/spring-k8s/secrets";
private static final String NAMESPACE = "spring-k8s";
private static final String SCENARIO_NAME = "reload-test";
private static final AtomicBoolean STRATEGY_CALLED = new AtomicBoolean(false);
private static CoreV1Api coreV1Api;
private static WireMockServer wireMockServer;
@BeforeAll
static void setup() {
wireMockServer = new WireMockServer(options().dynamicPort());
@@ -97,29 +102,6 @@ class PollingReloadSecretTest {
client.setDebugging(true);
Configuration.setDefaultApiClient(client);
coreV1Api = new CoreV1Api();
String path = "/api/v1/namespaces/spring-k8s/secrets";
V1Secret secretOne = secret(SECRET_NAME, Map.of());
V1SecretList listOne = new V1SecretList().addItemsItem(secretOne);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
stubFor(get(path).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listOne)))
.inScenario("my-test")
.willSetStateTo("go-to-fail"));
// first reload call fails
stubFor(get(path).willReturn(aResponse().withStatus(500).withBody("Internal Server Error"))
.inScenario("my-test")
.whenScenarioStateIs("go-to-fail")
.willSetStateTo("go-to-ok"));
V1Secret secretTwo = secret(SECRET_NAME, Map.of("a", "b"));
V1SecretList listTwo = new V1SecretList().addItemsItem(secretTwo);
stubFor(get(path).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listTwo)))
.inScenario("my-test")
.whenScenarioStateIs("go-to-ok"));
}
@AfterAll
@@ -136,8 +118,15 @@ class PollingReloadSecretTest {
*/
@Test
void test(CapturedOutput output) {
// first reload call fails
stubFor(get(PATH).willReturn(aResponse().withStatus(500).withBody("Internal Server Error"))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs("go-to-fail")
.willSetStateTo("go-to-ok"));
// we fail while reading 'secretOne'
Awaitility.await().atMost(Duration.ofSeconds(20)).pollInterval(Duration.ofSeconds(1)).until(() -> {
Awaitility.await().atMost(Duration.ofSeconds(10)).pollInterval(Duration.ofSeconds(1)).until(() -> {
boolean one = output.getOut().contains("Failure in reading named sources");
boolean two = output.getOut().contains("Failed to load source");
boolean three = output.getOut()
@@ -146,6 +135,13 @@ class PollingReloadSecretTest {
return one && two && three && updateStrategyNotCalled;
});
V1Secret secretTwo = secret(SECRET_NAME, Map.of("a", "b"));
V1SecretList listTwo = new V1SecretList().addItemsItem(secretTwo);
stubFor(get(PATH).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listTwo)))
.inScenario(SCENARIO_NAME)
.willSetStateTo("done")
.whenScenarioStateIs("go-to-ok"));
// it passes while reading 'secretTwo'
Awaitility.await()
.atMost(Duration.ofSeconds(20))
@@ -180,6 +176,17 @@ class PollingReloadSecretTest {
@Bean
@Primary
AbstractEnvironment environment() {
V1Secret secretOne = secret(SECRET_NAME, Map.of());
V1SecretList listOne = new V1SecretList().addItemsItem(secretOne);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
stubFor(get(PATH).willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(listOne)))
.inScenario(SCENARIO_NAME)
.whenScenarioStateIs(Scenario.STARTED)
.willSetStateTo("go-to-fail"));
MockEnvironment mockEnvironment = new MockEnvironment();
mockEnvironment.setProperty("spring.cloud.kubernetes.client.namespace", NAMESPACE);

View File

@@ -70,6 +70,8 @@ class PollingReloadConfigMapTest {
private static final String NAMESPACE = "spring-k8s";
private static final String PATH = "/api/v1/namespaces/spring-k8s/configmaps";
private static KubernetesMockServer kubernetesMockServer;
private static KubernetesClient kubernetesClient;
@@ -78,25 +80,7 @@ class PollingReloadConfigMapTest {
@BeforeAll
static void beforeAll() {
kubernetesClient.getConfiguration().setRequestRetryBackoffLimit(0);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
ConfigMap configMapOne = configMap(CONFIG_MAP_NAME, Map.of());
ConfigMap configMapTwo = configMap(CONFIG_MAP_NAME, Map.of("a", "b"));
String path = "/api/v1/namespaces/spring-k8s/configmaps";
kubernetesMockServer.expect()
.withPath(path)
.andReturn(200, new ConfigMapListBuilder().withItems(configMapOne).build())
.once();
kubernetesMockServer.expect().withPath(path).andReturn(500, "Internal Server Error").once();
kubernetesMockServer.expect()
.withPath(path)
.andReturn(200, new ConfigMapListBuilder().withItems(configMapTwo).build())
.once();
}
/**
@@ -109,6 +93,7 @@ class PollingReloadConfigMapTest {
@Test
void test(CapturedOutput output) {
// we fail while reading 'configMapOne'
kubernetesMockServer.expect().withPath(PATH).andReturn(500, "Internal Server Error").once();
Awaitility.await().atMost(Duration.ofSeconds(20)).pollInterval(Duration.ofSeconds(1)).until(() -> {
boolean one = output.getOut().contains("Failure in reading named sources");
boolean two = output.getOut().contains("Failed to load source");
@@ -118,6 +103,12 @@ class PollingReloadConfigMapTest {
return one && two && three && updateStrategyNotCalled;
});
ConfigMap configMapTwo = configMap(CONFIG_MAP_NAME, Map.of("a", "b"));
kubernetesMockServer.expect()
.withPath(PATH)
.andReturn(200, new ConfigMapListBuilder().withItems(configMapTwo).build())
.once();
// it passes while reading 'configMapTwo'
Awaitility.await()
.atMost(Duration.ofSeconds(20))
@@ -146,6 +137,15 @@ class PollingReloadConfigMapTest {
@Bean
@Primary
AbstractEnvironment environment() {
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
ConfigMap configMapOne = configMap(CONFIG_MAP_NAME, Map.of());
kubernetesMockServer.expect()
.withPath(PATH)
.andReturn(200, new ConfigMapListBuilder().withItems(configMapOne).build())
.once();
MockEnvironment mockEnvironment = new MockEnvironment();
mockEnvironment.setProperty("spring.cloud.kubernetes.client.namespace", NAMESPACE);

View File

@@ -73,6 +73,8 @@ public class PollingReloadSecretTest {
private static final String NAMESPACE = "spring-k8s";
private static final String PATH = "/api/v1/namespaces/spring-k8s/secrets";
private static KubernetesMockServer kubernetesMockServer;
private static KubernetesClient kubernetesClient;
@@ -81,25 +83,7 @@ public class PollingReloadSecretTest {
@BeforeAll
static void beforeAll() {
kubernetesClient.getConfiguration().setRequestRetryBackoffLimit(0);
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
Secret secretOne = secret(SECRET_NAME, Map.of());
Secret secretTwo = secret(SECRET_NAME, Map.of("a", "b"));
String path = "/api/v1/namespaces/spring-k8s/secrets";
kubernetesMockServer.expect()
.withPath(path)
.andReturn(200, new SecretListBuilder().withItems(secretOne).build())
.once();
kubernetesMockServer.expect().withPath(path).andReturn(500, "Internal Server Error").once();
kubernetesMockServer.expect()
.withPath(path)
.andReturn(200, new SecretListBuilder().withItems(secretTwo).build())
.once();
}
/**
@@ -112,6 +96,7 @@ public class PollingReloadSecretTest {
@Test
void test(CapturedOutput output) {
// we fail while reading 'secretOne'
kubernetesMockServer.expect().withPath(PATH).andReturn(500, "Internal Server Error").once();
Awaitility.await().atMost(Duration.ofSeconds(20)).pollInterval(Duration.ofSeconds(1)).until(() -> {
boolean one = output.getOut().contains("Failure in reading named sources");
boolean two = output.getOut().contains("Failed to load source");
@@ -121,6 +106,12 @@ public class PollingReloadSecretTest {
return one && two && three && updateStrategyNotCalled;
});
Secret secretTwo = secret(SECRET_NAME, Map.of("a", "b"));
kubernetesMockServer.expect()
.withPath(PATH)
.andReturn(200, new SecretListBuilder().withItems(secretTwo).build())
.once();
// it passes while reading 'secretTwo'
Awaitility.await()
.atMost(Duration.ofSeconds(20))
@@ -153,6 +144,15 @@ public class PollingReloadSecretTest {
@Bean
@Primary
AbstractEnvironment environment() {
// needed so that our environment is populated with 'something'
// this call is done in the method that returns the AbstractEnvironment
Secret secretOne = secret(SECRET_NAME, Map.of());
kubernetesMockServer.expect()
.withPath(PATH)
.andReturn(200, new SecretListBuilder().withItems(secretOne).build())
.once();
MockEnvironment mockEnvironment = new MockEnvironment();
mockEnvironment.setProperty("spring.cloud.kubernetes.client.namespace", NAMESPACE);