{
private final Log LOG = LogFactory.getLog(getClass());
private boolean value = false;
public static void main(String[] args) {
- SpringApplication.run(AppBTestApplication.class, args);
+ SpringApplication.run(AppTestApplication.class, args);
}
- @GetMapping("/app-b")
+ @GetMapping("/app")
public boolean index() {
LOG.info("Current value: " + value);
return value;
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-app-b/src/main/resources/application.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-app/src/main/resources/application.yaml
similarity index 58%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-app-b/src/main/resources/application.yaml
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-app/src/main/resources/application.yaml
index 8491ca7f..693b5f0e 100644
--- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-app-b/src/main/resources/application.yaml
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-app/src/main/resources/application.yaml
@@ -1,16 +1,13 @@
-#logging:
-# level:
-# org.springframework: DEBUG
-#
spring:
application:
- name: spring-cloud-kubernetes-client-configuration-watcher-configmap-app-b
+ name: non-app
cloud:
bus:
refresh:
enabled: false
enabled: true
- destination: multiple-apps
+ destination: app
+ id: app
stream:
default-binder: kafka
management:
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-app-b/pom.xml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/pom.xml
similarity index 73%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-app-b/pom.xml
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/pom.xml
index 036ae53f..5e6279d8 100644
--- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-app-b/pom.xml
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/pom.xml
@@ -3,28 +3,32 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps
+ spring-cloud-kubernetes-k8s-client-kafka-configmap-reload
org.springframework.cloud
3.2.1-SNAPSHOT
../../spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps
4.0.0
- jar
- kafka-configmap-app-b
+ kafka-configmap-test-app
+
+
+ true
+ true
+
org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.cloud
- spring-cloud-starter-bus-kafka
+ spring-boot-starter-test
org.springframework.boot
- spring-boot-starter-actuator
+ spring-boot-starter-webflux
+
+
+ org.springframework.cloud
+ spring-cloud-kubernetes-test-support
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherMultipleAppsIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBuKafkaIT.java
similarity index 60%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherMultipleAppsIT.java
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBuKafkaIT.java
index 72a20ab6..5acda884 100644
--- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherMultipleAppsIT.java
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBuKafkaIT.java
@@ -47,15 +47,13 @@ import static org.awaitility.Awaitility.await;
/**
* @author wind57
*/
-class ConfigurationWatcherMultipleAppsIT {
+class ConfigurationWatcherBuKafkaIT {
- private static final String CONFIG_WATCHER_APP_A_IMAGE = "kafka-configmap-app-a";
-
- private static final String CONFIG_WATCHER_APP_B_IMAGE = "kafka-configmap-app-b";
+ private static final String CONFIG_WATCHER_APP_IMAGE = "kafka-configmap-app";
private static final String SPRING_CLOUD_K8S_CONFIG_WATCHER_APP_NAME = "spring-cloud-kubernetes-configuration-watcher";
- private static final String CONFIG_MAP_NAME = "multiple-apps";
+ private static final String CONFIG_MAP_NAME = "apps";
private static final String NAMESPACE = "default";
@@ -71,11 +69,8 @@ class ConfigurationWatcherMultipleAppsIT {
Commons.validateImage(SPRING_CLOUD_K8S_CONFIG_WATCHER_APP_NAME, K3S);
Commons.loadSpringCloudKubernetesImage(SPRING_CLOUD_K8S_CONFIG_WATCHER_APP_NAME, K3S);
- Commons.validateImage(CONFIG_WATCHER_APP_A_IMAGE, K3S);
- Commons.loadSpringCloudKubernetesImage(CONFIG_WATCHER_APP_A_IMAGE, K3S);
-
- Commons.validateImage(CONFIG_WATCHER_APP_B_IMAGE, K3S);
- Commons.loadSpringCloudKubernetesImage(CONFIG_WATCHER_APP_B_IMAGE, K3S);
+ Commons.validateImage(CONFIG_WATCHER_APP_IMAGE, K3S);
+ Commons.loadSpringCloudKubernetesImage(CONFIG_WATCHER_APP_IMAGE, K3S);
Images.loadKafka(K3S);
@@ -86,19 +81,64 @@ class ConfigurationWatcherMultipleAppsIT {
@BeforeEach
void setup() {
util.kafka(NAMESPACE, Phase.CREATE);
- appA(Phase.CREATE);
- appB(Phase.CREATE);
+ app(Phase.CREATE);
configWatcher(Phase.CREATE);
}
@AfterEach
void afterEach() {
util.kafka(NAMESPACE, Phase.DELETE);
- appA(Phase.DELETE);
- appB(Phase.DELETE);
+ app(Phase.DELETE);
configWatcher(Phase.DELETE);
}
+ /**
+ *
+ *
+ * To run locally and debug.
+ *
+ * - I've enabled "Enable host networking" on docker for mac settings
+ * - docker run -p 9092:9092 confluentinc/confluent-local:7.9.0
+ * - docker run --network=host -e 'KAFKA_BROKERS=localhost:9092' redpandadata/console:v2.8.2
+ * - run 'ConfigurationWatcherApplication' with :
+ * SPRING_CLOUD_KUBERNETES_CLIENT_NAMESPACE=default
+ * SPRING_CLOUD_KUBERNETES_CONFIGURATION_WATCHER_REFRESHDELAY=1
+ * SPRING_MAIN_CLOUDPLATFORM=kubernetes
+ * SPRING_PROFILES_ACTIVE=bus-kafka
+ * SPRING_CLOUD_BUS_DESTINATION=app-bus-destination
+ *
+ *
+ * How does this test work:
+ *
+ * - 'spring.cloud.kubernetes.configmap.apps = app' will tell configuration watcher
+ * to find a service called 'app'.
+ * If such a service is found, we will call : BusRefreshTrigger::triggerRefresh
+ *
+ * - This, in turn, will publish a RefreshRemoteApplicationEvent to a randomly named topic.
+ * In this test case in kafka such a message will be present
+ *
+ * {
+ * "type": "RefreshRemoteApplicationEvent",
+ * "timestamp": 1741365164981,
+ * "originService": "spring-cloud-kubernetes-configuration-watcher:bus-kafka:8888:24d2ff91d0af65bb17b551465573db4c",
+ * "destinationService": "app:**",
+ * "id": "309dcdc5-d876-4213-bc84-198d47d2988a"
+ * }
+ *
+ * - our app under test has such a configuration:
+ *
+ * spring:
+ * application:
+ * name: non-app
+ * cloud:
+ * bus:
+ * id: app
+ *
+ * which means we "listen" on the same topic, and we are the 'destinationService'.
+ *
+ *
+ *
+ */
@Test
void testRefresh() {
@@ -107,51 +147,33 @@ class ConfigurationWatcherMultipleAppsIT {
V1ConfigMap configMap = new V1ConfigMapBuilder().editOrNewMetadata()
.withName(CONFIG_MAP_NAME)
.addToLabels("spring.cloud.kubernetes.config", "true")
- .addToAnnotations("spring.cloud.kubernetes.configmap.apps",
- "spring-cloud-kubernetes-client-configuration-watcher-configmap-app-a, "
- + "spring-cloud-kubernetes-client-configuration-watcher-configmap-app-b")
+ .addToAnnotations("spring.cloud.kubernetes.configmap.apps", "app")
.endMetadata()
- .addToData("foo", "hello world")
.build();
util.createAndWait(NAMESPACE, configMap, null);
- WebClient.Builder builderA = builder();
- WebClient serviceClientA = builderA.baseUrl("http://localhost:80/app-a").build();
+ WebClient.Builder builder = builder();
+ WebClient serviceClient = builder.baseUrl("http://localhost:80/app").build();
- WebClient.Builder builderB = builder();
- WebClient serviceClientB = builderB.baseUrl("http://localhost:80/app-b").build();
-
- Boolean[] valueA = new Boolean[1];
+ Boolean[] value = new Boolean[1];
await().pollInterval(Duration.ofSeconds(3)).atMost(Duration.ofSeconds(240)).until(() -> {
- valueA[0] = serviceClientA.method(HttpMethod.GET)
+ value[0] = serviceClient.method(HttpMethod.GET)
.retrieve()
.bodyToMono(Boolean.class)
.retryWhen(retrySpec())
.block();
- return valueA[0];
+ return value[0];
});
- Assertions.assertTrue(valueA[0]);
+ Assertions.assertTrue(value[0]);
- Boolean[] valueB = new Boolean[1];
- await().pollInterval(Duration.ofSeconds(3)).atMost(Duration.ofSeconds(240)).until(() -> {
- valueB[0] = serviceClientB.method(HttpMethod.GET)
- .retrieve()
- .bodyToMono(Boolean.class)
- .retryWhen(retrySpec())
- .block();
- return valueB[0];
- });
-
- Assertions.assertTrue(valueB[0]);
util.deleteAndWait(NAMESPACE, configMap, null);
}
- private void appA(Phase phase) {
- V1Deployment deployment = (V1Deployment) util.yaml("app-a/app-a-deployment.yaml");
- V1Service service = (V1Service) util.yaml("app-a/app-a-service.yaml");
- V1Ingress ingress = (V1Ingress) util
- .yaml("ingress/spring-cloud-kubernetes-configuration-watcher-multiple-apps-ingress.yaml");
+ private void app(Phase phase) {
+ V1Deployment deployment = (V1Deployment) util.yaml("app/app-deployment.yaml");
+ V1Service service = (V1Service) util.yaml("app/app-service.yaml");
+ V1Ingress ingress = (V1Ingress) util.yaml("ingress/ingress.yaml");
if (phase.equals(Phase.CREATE)) {
util.createAndWait(NAMESPACE, null, deployment, service, ingress, true);
@@ -161,23 +183,9 @@ class ConfigurationWatcherMultipleAppsIT {
}
}
- private void appB(Phase phase) {
- V1Deployment deployment = (V1Deployment) util.yaml("app-b/app-b-deployment.yaml");
- V1Service service = (V1Service) util.yaml("app-b/app-b-service.yaml");
-
- if (phase.equals(Phase.CREATE)) {
- util.createAndWait(NAMESPACE, null, deployment, service, null, true);
- }
- else if (phase.equals(Phase.DELETE)) {
- util.deleteAndWait(NAMESPACE, deployment, service, null);
- }
- }
-
private void configWatcher(Phase phase) {
- V1Deployment deployment = (V1Deployment) util
- .yaml("config-watcher/spring-cloud-kubernetes-configuration-watcher-bus-kafka-deployment.yaml");
- V1Service service = (V1Service) util
- .yaml("config-watcher/spring-cloud-kubernetes-configuration-watcher-service.yaml");
+ V1Deployment deployment = (V1Deployment) util.yaml("config-watcher/watcher-bus-kafka-deployment.yaml");
+ V1Service service = (V1Service) util.yaml("config-watcher/watcher-kus-kafka-service.yaml");
if (phase.equals(Phase.CREATE)) {
util.createAndWait(NAMESPACE, null, deployment, service, null, true);
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/app-b/app-b-deployment.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-deployment.yaml
similarity index 87%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/app-b/app-b-deployment.yaml
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-deployment.yaml
index b7f1e358..448232f0 100644
--- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/app-b/app-b-deployment.yaml
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-deployment.yaml
@@ -1,19 +1,19 @@
apiVersion: apps/v1
kind: Deployment
metadata:
- name: app-b-deployment
+ name: app-deployment
spec:
selector:
matchLabels:
- app: app-b
+ app: app
template:
metadata:
labels:
- app: app-b
+ app: app
spec:
containers:
- - name: app-b
- image: docker.io/springcloud/kafka-configmap-app-b
+ - name: app
+ image: docker.io/springcloud/kafka-configmap-app
imagePullPolicy: IfNotPresent
env:
- name: SPRING_PROFILES_ACTIVE
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/app-b/app-b-service.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-service.yaml
similarity index 77%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/app-b/app-b-service.yaml
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-service.yaml
index 779fce45..f9cb695f 100644
--- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/app-b/app-b-service.yaml
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-service.yaml
@@ -2,13 +2,13 @@ apiVersion: v1
kind: Service
metadata:
labels:
- app: app-b
- name: app-b
+ app: app
+ name: app
spec:
ports:
- name: http
port: 8081
targetPort: 8081
selector:
- app: app-b
+ app: app
type: ClusterIP
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/config-watcher/spring-cloud-kubernetes-configuration-watcher-bus-kafka-deployment.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/config-watcher/watcher-bus-kafka-deployment.yaml
similarity index 90%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/config-watcher/spring-cloud-kubernetes-configuration-watcher-bus-kafka-deployment.yaml
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/config-watcher/watcher-bus-kafka-deployment.yaml
index 35878d54..126afe22 100644
--- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/config-watcher/spring-cloud-kubernetes-configuration-watcher-bus-kafka-deployment.yaml
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/config-watcher/watcher-bus-kafka-deployment.yaml
@@ -20,11 +20,13 @@ spec:
- name: SPRING_PROFILES_ACTIVE
value: bus-kafka
- name: SPRING_CLOUD_BUS_DESTINATION
- value: multiple-apps
+ value: app
- name: spring.kafka.bootstrap-servers
value: kafka:9092
- name: SPRING_CLOUD_KUBERNETES_CONFIGURATION_WATCHER_REFRESHDELAY
- value: 1
+ value: "1"
+ - name: LOGGING_LEVEL_ORG_SPRING_CLOUD_KUBERNETES_CONFIGURATION_WATCHER
+ value: DEBUG
readinessProbe:
httpGet:
port: 8888
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/config-watcher/spring-cloud-kubernetes-configuration-watcher-service.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/config-watcher/watcher-kus-kafka-service.yaml
similarity index 100%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/config-watcher/spring-cloud-kubernetes-configuration-watcher-service.yaml
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/config-watcher/watcher-kus-kafka-service.yaml
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/ingress/ingress.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/ingress/ingress.yaml
new file mode 100644
index 00000000..faa02ba6
--- /dev/null
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/ingress/ingress.yaml
@@ -0,0 +1,16 @@
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: it-ingress-app
+ namespace: default
+spec:
+ rules:
+ - http:
+ paths:
+ - path: /app
+ pathType: Prefix
+ backend:
+ service:
+ name: app
+ port:
+ number: 8081
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/logback-test.xml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/logback-test.xml
similarity index 100%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/kafka-configmap-test-app/src/test/resources/logback-test.xml
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/logback-test.xml
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/pom.xml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/pom.xml
similarity index 84%
rename from spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/pom.xml
rename to spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/pom.xml
index dd1f81b0..56b30b24 100644
--- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps/pom.xml
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/pom.xml
@@ -8,12 +8,11 @@
3.2.1-SNAPSHOT
4.0.0
- spring-cloud-kubernetes-k8s-client-kafka-configmap-reload-multiple-apps
+ spring-cloud-kubernetes-k8s-client-kafka-configmap-reload
pom
- kafka-configmap-app-a
- kafka-configmap-app-b
+ kafka-configmap-app
kafka-configmap-test-app