diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 0f4a15b34..463f92f8e 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -4,24 +4,6 @@
-
-
-
-
diff --git a/README.md b/README.md
index 476290725..fab425eb4 100644
--- a/README.md
+++ b/README.md
@@ -56,14 +56,18 @@ Chaos Engine is being actively developed, but we welcome public participation. P
## Demo Video
-[![Chaos Engine Introduction](https://img.youtube.com/vi/IX-gNYBLyDM/0.jpg)](https://www.youtube.com/watch?v=IX-gNYBLyDM)
+[![Chaos Engine Introduction](https://img.youtube.com/vi/IX-gNYBLyDM/0.jpg)](https://www.youtube.com/watch?v=IX-gNYBLyDM)
## Contact
You can [e-mail us], or find us on [Slack].
[Principles of Chaos]: http://principlesofchaos.org/
+
[documentation]: https://thalesgroup.github.io/chaos-engine/
+
[experiment modules documentation]: https://thalesgroup.github.io/chaos-engine/Experiment_Modules
+
[E-mail us]: mailto:dl_chaos_engine@gemalto.com
-[Slack]: https://join.slack.com/t/thaleschaosengine/shared_invite/enQtODY1MDk1OTY4OTgyLTZjOGI5NzM1YTA2OWE5MjgzMWYxMzkwZjIwYTE3NjBlNDM4ZTkzNzc5YmMyMTU2Zjc5ODhlMTVkZDJhMmEzMzc
+
+[Slack]: https://thalescploss.slack.com/
diff --git a/chaosengine-core/pom.xml b/chaosengine-core/pom.xml
index 9ae613d24..db6b9969f 100644
--- a/chaosengine-core/pom.xml
+++ b/chaosengine-core/pom.xml
@@ -3,7 +3,7 @@
chaosengine
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-core/src/main/resources/ssh/experiments/forkBomb.sh b/chaosengine-core/src/main/resources/ssh/experiments/forkBomb.sh
index f3ae0e4c6..a396cf1d9 100644
--- a/chaosengine-core/src/main/resources/ssh/experiments/forkBomb.sh
+++ b/chaosengine-core/src/main/resources/ssh/experiments/forkBomb.sh
@@ -2,7 +2,7 @@
# Description: Fork Bomb experiment to consume CPU
# Dependencies: sleep
-# This extra wait time is added in order to synchronize startup of parralel experiments
+# This extra wait time is added in order to synchronize startup of parallel experiments
sleep 5
bomb() { bomb | bomb & }; bomb;
\ No newline at end of file
diff --git a/chaosengine-coverage/pom.xml b/chaosengine-coverage/pom.xml
index 4a7edbe34..b4242bb3a 100644
--- a/chaosengine-coverage/pom.xml
+++ b/chaosengine-coverage/pom.xml
@@ -5,7 +5,7 @@
chaosengine
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-experiments/chaosengine-aws-ec2/pom.xml b/chaosengine-experiments/chaosengine-aws-ec2/pom.xml
index 2e21fc99e..f6c572db1 100644
--- a/chaosengine-experiments/chaosengine-aws-ec2/pom.xml
+++ b/chaosengine-experiments/chaosengine-aws-ec2/pom.xml
@@ -3,7 +3,7 @@
chaosengine-experiments
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-experiments/chaosengine-aws-rds/pom.xml b/chaosengine-experiments/chaosengine-aws-rds/pom.xml
index 80e5051a0..3d1279901 100644
--- a/chaosengine-experiments/chaosengine-aws-rds/pom.xml
+++ b/chaosengine-experiments/chaosengine-aws-rds/pom.xml
@@ -3,7 +3,7 @@
chaosengine-experiments
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-experiments/chaosengine-gcp-common/pom.xml b/chaosengine-experiments/chaosengine-gcp-common/pom.xml
index a87ca062d..5646aff3f 100644
--- a/chaosengine-experiments/chaosengine-gcp-common/pom.xml
+++ b/chaosengine-experiments/chaosengine-gcp-common/pom.xml
@@ -5,12 +5,12 @@
chaosengine-experiments
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
chaosengine-gcp-common
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
diff --git a/chaosengine-experiments/chaosengine-gcp-compute/pom.xml b/chaosengine-experiments/chaosengine-gcp-compute/pom.xml
index 543c582fa..0f62e99d0 100644
--- a/chaosengine-experiments/chaosengine-gcp-compute/pom.xml
+++ b/chaosengine-experiments/chaosengine-gcp-compute/pom.xml
@@ -24,7 +24,7 @@
com.thales.chaos
chaosengine-experiments
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
chaosengine-gcp-compute
@@ -33,7 +33,7 @@
com.thales.chaos
chaosengine-gcp-common
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
diff --git a/chaosengine-experiments/chaosengine-gcp-memorystore/pom.xml b/chaosengine-experiments/chaosengine-gcp-memorystore/pom.xml
index 230696132..468e1b798 100644
--- a/chaosengine-experiments/chaosengine-gcp-memorystore/pom.xml
+++ b/chaosengine-experiments/chaosengine-gcp-memorystore/pom.xml
@@ -5,18 +5,18 @@
chaosengine-experiments
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
chaosengine-gcp-memorystore
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
com.thales.chaos
chaosengine-gcp-common
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
com.google.cloud
diff --git a/chaosengine-experiments/chaosengine-kubernetes/pom.xml b/chaosengine-experiments/chaosengine-kubernetes/pom.xml
index 589051e38..28fcad83a 100644
--- a/chaosengine-experiments/chaosengine-kubernetes/pom.xml
+++ b/chaosengine-experiments/chaosengine-kubernetes/pom.xml
@@ -3,7 +3,7 @@
chaosengine-experiments
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
@@ -15,12 +15,11 @@
io.kubernetes
client-java
- 10.0.0
+ 15.0.1
compile
-
diff --git a/chaosengine-experiments/chaosengine-kubernetes/src/main/java/com/thales/chaos/platform/impl/KubernetesPlatform.java b/chaosengine-experiments/chaosengine-kubernetes/src/main/java/com/thales/chaos/platform/impl/KubernetesPlatform.java
index 10fa7b538..7575878c0 100644
--- a/chaosengine-experiments/chaosengine-kubernetes/src/main/java/com/thales/chaos/platform/impl/KubernetesPlatform.java
+++ b/chaosengine-experiments/chaosengine-kubernetes/src/main/java/com/thales/chaos/platform/impl/KubernetesPlatform.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 - 2020, Thales DIS CPL Canada, Inc
+ * Copyright (c) 2018 - 2022, Thales DIS CPL Canada, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,13 +37,15 @@
import io.kubernetes.client.openapi.apis.CoreApi;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.*;
-import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@@ -130,7 +132,7 @@ CoreV1Api getCoreV1Api () {
private V1PodList listAllPodsInNamespace (String namespace) {
try {
- return getCoreV1Api().listNamespacedPod(namespace, "true", false, "", "", "", 0, "", 0, false);
+ return getCoreV1Api().listNamespacedPod(namespace, "true", false, "", "", "", 0, "", "", 0, false);
} catch (ApiException e) {
log.error("Cannot list pods in namespace {}: {} ", namespace, e.getMessage(), e);
return new V1PodList();
@@ -177,7 +179,7 @@ public PlatformLevel getPlatformLevel () {
private boolean canListPodsInNamespace (String namespace) {
try {
- getCoreV1Api().listNamespacedPod(namespace, "true", false, "", "", "", 0, "", 0, false);
+ getCoreV1Api().listNamespacedPod(namespace, "true", false, "", "", "", 0, "", "", 0, false);
} catch (Exception e) {
log.error("Cannot list pods in namespace {}: {} ", namespace, e.getMessage(), e);
return false;
@@ -272,7 +274,8 @@ private boolean isContainerRestarted (KubernetesPodContainer container, String s
v("v1ContainerStateRunning", v1ContainerStateRunning)))
.map(V1ContainerStateRunning::getStartedAt)
.filter(Objects::nonNull)
- .anyMatch(dateTime -> dateTime.isAfter(container.getExperimentStartTime().toEpochMilli()));
+ .anyMatch(dateTime -> dateTime.isAfter(OffsetDateTime.ofInstant(container.getExperimentStartTime(),
+ ZoneId.systemDefault())));
}
public ContainerHealth replicaSetRecovered (KubernetesPodContainer kubernetesPodContainer) {
@@ -357,7 +360,8 @@ public void recycleContainer (KubernetesPodContainer container) {
public boolean deletePod (KubernetesPodContainer instance) {
log.debug("Deleting pod {}", v(DATADOG_CONTAINER_KEY, instance));
try {
- V1DeleteOptions deleteOptions = new V1DeleteOptionsBuilder().withGracePeriodSeconds(0L).build();
+ V1DeleteOptions deleteOptions = new V1DeleteOptions();
+ deleteOptions.setGracePeriodSeconds(0L);
getCoreV1Api().deleteNamespacedPod(instance.getPodName(),
instance.getNamespace(),
"false",
diff --git a/chaosengine-experiments/chaosengine-kubernetes/src/test/java/com/thales/chaos/platform/impl/KubernetesPlatformTest.java b/chaosengine-experiments/chaosengine-kubernetes/src/test/java/com/thales/chaos/platform/impl/KubernetesPlatformTest.java
index b5e645197..2693cd170 100644
--- a/chaosengine-experiments/chaosengine-kubernetes/src/test/java/com/thales/chaos/platform/impl/KubernetesPlatformTest.java
+++ b/chaosengine-experiments/chaosengine-kubernetes/src/test/java/com/thales/chaos/platform/impl/KubernetesPlatformTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 - 2020, Thales DIS CPL Canada, Inc
+ * Copyright (c) 2018 - 2022, Thales DIS CPL Canada, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,7 +35,6 @@
import junit.framework.TestCase;
import org.apache.http.HttpStatus;
import org.hamcrest.collection.IsIterableContainingInAnyOrder;
-import org.joda.time.DateTime;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -54,6 +53,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.time.Instant;
+import java.time.OffsetDateTime;
import java.util.*;
import static com.thales.chaos.platform.enums.ControllerKind.REPLICA_SET;
@@ -80,31 +80,17 @@ public class KubernetesPlatformTest {
@Mock
private AppsV1Api appsV1Api;
- private static V1PodList getV1PodList (boolean isBackedByController, int numberOfPods) {
- List ownerReferences = null;
- if (isBackedByController) {
- ownerReferences = new ArrayList<>();
- ownerReferences.add(new V1OwnerReferenceBuilder().withNewController("mycontroller").build());
- }
- V1ObjectMeta metadata = new V1ObjectMetaBuilder().withUid(randomUUID().toString())
- .withName(POD_NAME)
- .withNamespace(NAMESPACE_NAME)
- .withLabels(new HashMap<>())
- .withOwnerReferences(ownerReferences)
- .build();
- V1Pod pod = new V1Pod();
- pod.setMetadata(metadata);
- pod.setSpec(new V1PodSpec().containers(Collections.singletonList(new V1Container().name(randomUUID().toString()))));
- V1PodList list = new V1PodList();
- for (int i = 0; i < numberOfPods; i++) list.addItemsItem(pod);
- return list;
- }
-
@Test
public void testPodWithoutOwnerCannotBeTested () throws Exception {
- when(coreV1Api.listNamespacedPod(anyString(), anyString(), anyBoolean(), anyString(), anyString(), anyString(),
+ when(coreV1Api.listNamespacedPod(anyString(),
+ anyString(),
+ anyBoolean(),
+ anyString(),
+ anyString(),
+ anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(false));
assertEquals(1, platform.getRoster().size());
@@ -113,10 +99,7 @@ public void testPodWithoutOwnerCannotBeTested () throws Exception {
@Test
public void testContainerHealthWithException () throws ApiException {
- V1PodStatus status = new V1PodStatusBuilder().addNewContainerStatus()
- .withReady(false)
- .endContainerStatus()
- .build();
+ V1PodStatus status = getPodStatus(false);
V1Pod pod = getV1PodList(true).getItems().get(0);
pod.setStatus(status);
when(coreV1Api.listNamespacedPod(anyString(),
@@ -127,6 +110,7 @@ public void testContainerHealthWithException () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
when(coreV1Api.readNamespacedPodStatus(any(), any(), any())).thenThrow(new ApiException(HttpStatus.SC_NOT_FOUND,
@@ -145,32 +129,28 @@ public void testContainerHealthWithException () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenThrow(new ApiException());
}
- @Before
- public void setUp () {
- doReturn(coreApi).when(platform).getCoreApi();
- doReturn(coreV1Api).when(platform).getCoreV1Api();
- doReturn(appsV1Api).when(platform).getAppsV1Api();
- platform.setNamespaces(NAMESPACE_NAME);
+ private static V1PodStatus getPodStatus (boolean ready) {
+ return new V1PodStatus().addContainerStatusesItem(new V1ContainerStatus().ready(ready));
}
@Test
public void testApiStatus () throws ApiException {
- V1APIVersions v1APIVersions = new V1APIVersionsBuilder().addToVersions("1")
- .withApiVersion("apiVersion")
- .withKind("kind")
- .build();
+ V1APIVersions v1APIVersions = new V1APIVersions().addVersionsItem("1").apiVersion("apiVersion").kind("kind");
doReturn(v1APIVersions).when(coreApi).getAPIVersions();
Assert.assertEquals(ApiStatus.OK, platform.getApiStatus());
}
- @Test
- public void testApiStatusNotAvailable () throws ApiException {
- when(coreApi.getAPIVersions()).thenThrow(new ApiException());
- Assert.assertEquals(ApiStatus.ERROR, platform.getApiStatus());
+ @Before
+ public void setUp () {
+ doReturn(coreApi).when(platform).getCoreApi();
+ doReturn(coreV1Api).when(platform).getCoreV1Api();
+ doReturn(appsV1Api).when(platform).getAppsV1Api();
+ platform.setNamespaces(NAMESPACE_NAME);
}
@Test
@@ -183,11 +163,18 @@ public void testPlatformHealth () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
assertEquals(PlatformHealth.OK, platform.getPlatformHealth());
}
+ @Test
+ public void testApiStatusNotAvailable () throws ApiException {
+ when(coreApi.getAPIVersions()).thenThrow(new ApiException());
+ Assert.assertEquals(ApiStatus.ERROR, platform.getApiStatus());
+ }
+
@Test
public void testPlatformHealthCannotListPods () throws ApiException {
when(coreV1Api.listNamespacedPod(anyString(),
@@ -198,6 +185,7 @@ public void testPlatformHealthCannotListPods () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenThrow(new ApiException());
assertEquals(PlatformHealth.FAILED, platform.getPlatformHealth());
@@ -213,6 +201,7 @@ public void testPodWithOwnerCanBeTested () throws Exception {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
when(platform.getDestructionProbability()).thenReturn(1D);
@@ -222,10 +211,8 @@ public void testPodWithOwnerCanBeTested () throws Exception {
@Test
public void testContainerHealthWithOneContainerHealthy () throws ApiException {
- V1PodStatus status = new V1PodStatusBuilder().addNewContainerStatus()
- .withReady(true)
- .endContainerStatus()
- .build();
+ V1ContainerStatus containerStatus = new V1ContainerStatus().ready(true);
+ V1PodStatus status = new V1PodStatus().addContainerStatusesItem(containerStatus);
V1Pod pod = getV1PodList(true).getItems().get(0);
pod.setStatus(status);
when(coreV1Api.listNamespacedPod(anyString(),
@@ -236,6 +223,7 @@ public void testContainerHealthWithOneContainerHealthy () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
when(coreV1Api.readNamespacedPodStatus(any(), any(), any())).thenReturn(pod);
@@ -253,6 +241,7 @@ public void testDeletePod () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
boolean result = platform.deletePod((KubernetesPodContainer) platform.getRoster().get(0));
@@ -270,6 +259,7 @@ public void testDeletePodAPIException () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
when(coreV1Api.deleteNamespacedPod(any(),
@@ -295,6 +285,7 @@ public void testDeletePodJSONSyntaxException () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
when(coreV1Api.deleteNamespacedPod(any(),
@@ -320,6 +311,7 @@ public void testRoasterWithAPIException () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenThrow(new ApiException());
assertEquals(0, platform.getRoster().size());
@@ -335,11 +327,31 @@ public void testPlatformHealthNoNamespacesToTest () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true, 0));
assertEquals(PlatformHealth.DEGRADED, platform.getPlatformHealth());
}
+ private static V1PodList getV1PodList (boolean isBackedByController, int numberOfPods) {
+ List ownerReferences = null;
+ if (isBackedByController) {
+ ownerReferences = new ArrayList<>();
+ ownerReferences.add(new V1OwnerReference().name("mycontroller"));
+ }
+ V1ObjectMeta metadata = new V1ObjectMeta().uid(randomUUID().toString())
+ .name(POD_NAME)
+ .namespace(NAMESPACE_NAME)
+ .labels(new HashMap<>())
+ .ownerReferences(ownerReferences);
+ V1Pod pod = new V1Pod();
+ pod.setMetadata(metadata);
+ pod.setSpec(new V1PodSpec().containers(Collections.singletonList(new V1Container().name(randomUUID().toString()))));
+ V1PodList list = new V1PodList();
+ for (int i = 0; i < numberOfPods; i++) list.addItemsItem(pod);
+ return list;
+ }
+
@Test
public void testCheckDesiredReplicasReplicationController () throws ApiException {
V1PodList pods = getV1PodList(true);
@@ -351,6 +363,7 @@ public void testCheckDesiredReplicasReplicationController () throws ApiException
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
//Test ReplicationController
@@ -358,14 +371,10 @@ public void testCheckDesiredReplicasReplicationController () throws ApiException
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setName("dummy");
when(coreV1Api.readNamespacedReplicationControllerStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1ReplicationControllerBuilder().withStatus(new V1ReplicationControllerStatusBuilder()
- .withReplicas(1)
- .withReadyReplicas(0)
- .build()).build())
- .thenReturn(new V1ReplicationControllerBuilder().withStatus(new V1ReplicationControllerStatusBuilder()
- .withReplicas(1)
- .withReadyReplicas(1)
- .build()).build());
+ eq("true"))).thenReturn(new V1ReplicationController().status(new V1ReplicationControllerStatus().replicas(
+ 1).readyReplicas(0)))
+ .thenReturn(new V1ReplicationController().status(new V1ReplicationControllerStatus().replicas(
+ 1).readyReplicas(1)));
assertFalse(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
assertTrue(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
}
@@ -383,6 +392,7 @@ public void testPodExists () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(v1PodList)
.thenReturn(new V1PodList())
@@ -405,10 +415,7 @@ public void testCreationFromAPI () {
@Test
public void testContainerHealthWithOneContainerUnHealthy () throws ApiException {
- V1PodStatus status = new V1PodStatusBuilder().addNewContainerStatus()
- .withReady(false)
- .endContainerStatus()
- .build();
+ V1PodStatus status = getPodStatus(false);
V1Pod pod = getV1PodList(true).getItems().get(0);
pod.setStatus(status);
when(coreV1Api.listNamespacedPod(anyString(),
@@ -419,6 +426,7 @@ public void testContainerHealthWithOneContainerUnHealthy () throws ApiException
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
when(coreV1Api.readNamespacedPodStatus(any(), any(), any())).thenReturn(pod);
@@ -433,16 +441,9 @@ public void testGetPlatformLevel () {
@Test
public void testContainerHealthWithSeveralContainerAllHealthy () throws ApiException {
- V1PodStatus status = new V1PodStatusBuilder().addNewContainerStatus()
- .withReady(true)
- .endContainerStatus()
- .addNewContainerStatus()
- .withReady(true)
- .endContainerStatus()
- .addNewContainerStatus()
- .withReady(true)
- .endContainerStatus()
- .build();
+ V1PodStatus status = new V1PodStatus().addContainerStatusesItem(new V1ContainerStatus().ready(true))
+ .addContainerStatusesItem(new V1ContainerStatus().ready(true))
+ .addContainerStatusesItem(new V1ContainerStatus().ready(true));
assertEquals(3, status.getContainerStatuses().size());
V1Pod pod = getV1PodList(true).getItems().get(0);
pod.setStatus(status);
@@ -454,6 +455,7 @@ public void testContainerHealthWithSeveralContainerAllHealthy () throws ApiExcep
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
when(coreV1Api.readNamespacedPodStatus(any(), any(), any())).thenReturn(pod);
@@ -463,16 +465,9 @@ public void testContainerHealthWithSeveralContainerAllHealthy () throws ApiExcep
@Test
public void testContainerHealthWithSeveralContainerOneUnhealthy () throws ApiException {
- V1PodStatus status = new V1PodStatusBuilder().addNewContainerStatus()
- .withReady(true)
- .endContainerStatus()
- .addNewContainerStatus()
- .withReady(false)
- .endContainerStatus()
- .addNewContainerStatus()
- .withReady(true)
- .endContainerStatus()
- .build();
+ V1PodStatus status = new V1PodStatus().addContainerStatusesItem(new V1ContainerStatus().ready(true))
+ .addContainerStatusesItem(new V1ContainerStatus().ready(false))
+ .addContainerStatusesItem(new V1ContainerStatus().ready(true));
assertEquals(3, status.getContainerStatuses().size());
V1Pod pod = getV1PodList(true).getItems().get(0);
pod.setStatus(status);
@@ -484,6 +479,7 @@ public void testContainerHealthWithSeveralContainerOneUnhealthy () throws ApiExc
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
when(coreV1Api.readNamespacedPodStatus(any(), any(), any())).thenReturn(pod);
@@ -514,6 +510,7 @@ public void testContainerHealthDoesNotExist () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(list);
assertEquals(ContainerHealth.DOES_NOT_EXIST, platform.checkHealth(kubernetesPodContainer));
@@ -534,16 +531,17 @@ public void testCheckDesiredReplicasReplicaSet () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("ReplicaSet");
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setName("dummy");
when(appsV1Api.readNamespacedReplicaSetStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1ReplicaSetBuilder().withStatus(new V1ReplicaSetStatusBuilder().withReplicas(
- 1).withReadyReplicas(0).build()).build())
- .thenReturn(new V1ReplicaSetBuilder().withStatus(new V1ReplicaSetStatusBuilder().withReplicas(
- 1).withReadyReplicas(1).build()).build());
+ eq("true"))).thenReturn(new V1ReplicaSet().status(new V1ReplicaSetStatus().replicas(1)
+ .readyReplicas(0)))
+ .thenReturn(new V1ReplicaSet().status(new V1ReplicaSetStatus().replicas(1)
+ .readyReplicas(1)));
assertFalse(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
assertTrue(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
}
@@ -559,16 +557,17 @@ public void testCheckDesiredReplicasStatefulSet () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("StatefulSet");
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setName("dummy");
when(appsV1Api.readNamespacedStatefulSetStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1StatefulSetBuilder().withStatus(new V1StatefulSetStatusBuilder().withReplicas(
- 1).withReadyReplicas(0).build()).build())
- .thenReturn(new V1StatefulSetBuilder().withStatus(new V1StatefulSetStatusBuilder().withReplicas(
- 1).withReadyReplicas(1).build()).build());
+ eq("true"))).thenReturn(new V1StatefulSet().status(new V1StatefulSetStatus().replicas(1)
+ .readyReplicas(0)))
+ .thenReturn(new V1StatefulSet().status(new V1StatefulSetStatus().replicas(1)
+ .readyReplicas(1)));
assertFalse(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
assertTrue(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
}
@@ -584,16 +583,17 @@ public void testCheckDesiredReplicasDeployment () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("Deployment");
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setName("dummy");
when(appsV1Api.readNamespacedDeploymentStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1DeploymentBuilder().withStatus(new V1DeploymentStatusBuilder().withReplicas(
- 1).withReadyReplicas(0).build()).build())
- .thenReturn(new V1DeploymentBuilder().withStatus(new V1DeploymentStatusBuilder().withReplicas(
- 1).withReadyReplicas(1).build()).build());
+ eq("true"))).thenReturn(new V1Deployment().status(new V1DeploymentStatus().replicas(1)
+ .readyReplicas(0)))
+ .thenReturn(new V1Deployment().status(new V1DeploymentStatus().replicas(1)
+ .readyReplicas(1)));
assertFalse(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
assertTrue(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
}
@@ -609,16 +609,17 @@ public void testCheckDesiredReplicasDaemonSet () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("DaemonSet");
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setName("dummy");
when(appsV1Api.readNamespacedDaemonSetStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1DaemonSetBuilder().withStatus(new V1DaemonSetStatusBuilder().withDesiredNumberScheduled(
- 1).withCurrentNumberScheduled(0).build()).build())
- .thenReturn(new V1DaemonSetBuilder().withStatus(new V1DaemonSetStatusBuilder().withDesiredNumberScheduled(
- 1).withCurrentNumberScheduled(1).build()).build());
+ eq("true"))).thenReturn(new V1DaemonSet().status(new V1DaemonSetStatus().desiredNumberScheduled(1)
+ .currentNumberScheduled(0)))
+ .thenReturn(new V1DaemonSet().status(new V1DaemonSetStatus().desiredNumberScheduled(1)
+ .currentNumberScheduled(1)));
assertFalse(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
assertTrue(platform.isDesiredReplicas((KubernetesPodContainer) platform.getRoster().get(0)));
}
@@ -634,6 +635,7 @@ public void testCheckDesiredReplicasJob () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("Job");
@@ -652,6 +654,7 @@ public void testCheckDesiredReplicasException () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("DaemonSet");
@@ -673,6 +676,7 @@ public void testCheckDesiredReplicasCronJob () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("CronJob");
@@ -690,6 +694,7 @@ public void testCheckDesiredReplicasUnsupportedKind () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("Unsupported");
@@ -708,29 +713,27 @@ public void replicaSetRecovered () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("ReplicationController");
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setName("dummy");
when(coreV1Api.readNamespacedReplicationControllerStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1ReplicationControllerBuilder().withStatus(new V1ReplicationControllerStatusBuilder()
- .withReplicas(1)
- .withReadyReplicas(1)
- .build()).build());
+ eq("true"))).thenReturn(new V1ReplicationController().status(new V1ReplicationControllerStatus().replicas(
+ 1).readyReplicas(1)));
KubernetesPodContainer kubernetesPodContainer = platform.fromKubernetesAPIPod(pods.getItems().get(0));
assertEquals(ContainerHealth.NORMAL, platform.replicaSetRecovered(kubernetesPodContainer));
}
private static V1PodList getV1PodList (String UUID) {
List ownerReferences = new ArrayList<>();
- ownerReferences.add(new V1OwnerReferenceBuilder().withNewController("mycontroller").build());
- V1ObjectMeta metadata = new V1ObjectMetaBuilder().withUid(UUID)
- .withName(POD_NAME)
- .withNamespace(NAMESPACE_NAME)
- .withLabels(new HashMap<>())
- .withOwnerReferences(ownerReferences)
- .build();
+ ownerReferences.add(new V1OwnerReference().name("mycontroller"));
+ V1ObjectMeta metadata = new V1ObjectMeta().uid(UUID)
+ .name(POD_NAME)
+ .namespace(NAMESPACE_NAME)
+ .labels(new HashMap<>())
+ .ownerReferences(ownerReferences);
V1Pod pod = new V1Pod();
pod.setMetadata(metadata);
pod.setSpec(new V1PodSpec().containers(Collections.singletonList(new V1Container().name(randomUUID().toString()))));
@@ -750,16 +753,15 @@ public void replicaSetRecoveredContainerExists () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("ReplicationController");
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setName("dummy");
when(coreV1Api.readNamespacedReplicationControllerStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1ReplicationControllerBuilder().withStatus(new V1ReplicationControllerStatusBuilder()
- .withReplicas(1)
- .withReadyReplicas(1)
- .build()).build());
+ eq("true"))).thenReturn(new V1ReplicationController().status(new V1ReplicationControllerStatus().replicas(
+ 1).readyReplicas(1)));
KubernetesPodContainer kubernetesPodContainer = platform.fromKubernetesAPIPod(pods.getItems().get(0));
assertEquals(ContainerHealth.RUNNING_EXPERIMENT, platform.replicaSetRecovered(kubernetesPodContainer));
}
@@ -775,24 +777,21 @@ public void replicaSetRecoveredNotInDesiredState () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(pods);
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setKind("ReplicationController");
pods.getItems().get(0).getMetadata().getOwnerReferences().get(0).setName("dummy");
when(coreV1Api.readNamespacedReplicationControllerStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1ReplicationControllerBuilder().withStatus(new V1ReplicationControllerStatusBuilder()
- .withReplicas(1)
- .withReadyReplicas(0)
- .build()).build());
+ eq("true"))).thenReturn(new V1ReplicationController().status(new V1ReplicationControllerStatus().replicas(
+ 1).readyReplicas(0)));
KubernetesPodContainer kubernetesPodContainer = platform.fromKubernetesAPIPod(pods.getItems().get(0));
assertEquals(ContainerHealth.RUNNING_EXPERIMENT, platform.replicaSetRecovered(kubernetesPodContainer));
when(coreV1Api.readNamespacedReplicationControllerStatus(eq("dummy"),
eq(pods.getItems().get(0).getMetadata().getNamespace()),
- eq("true"))).thenReturn(new V1ReplicationControllerBuilder().withStatus(new V1ReplicationControllerStatusBuilder()
- .withReplicas(2)
- .withReadyReplicas(1)
- .build()).build());
+ eq("true"))).thenReturn(new V1ReplicationController().status(new V1ReplicationControllerStatus().replicas(
+ 2).readyReplicas(1)));
assertEquals(ContainerHealth.RUNNING_EXPERIMENT, platform.replicaSetRecovered(kubernetesPodContainer));
}
@@ -815,6 +814,7 @@ public void checkHealthNullPointerExceptionTest () throws Exception {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(UUID));
doReturn(null, v1Pod).when(coreV1Api).readNamespacedPodStatus(podName, namespace, "true");
@@ -843,9 +843,9 @@ public void testIsContainerRecycled () throws ApiException {
containerName))
.build());
V1ObjectMeta podMetadata = new V1ObjectMeta().uid(uid);
- V1ContainerState state = new V1ContainerState().running(new V1ContainerStateRunning().startedAt(DateTime.now()
- .minusMinutes(
- 1)));
+ V1ContainerState state = new V1ContainerState().running(new V1ContainerStateRunning().startedAt(OffsetDateTime.now()
+ .minusMinutes(
+ 1)));
V1PodStatus podStatus = new V1PodStatus().containerStatuses(List.of(new V1ContainerStatus().name(containerName)
.state(state)));
V1Pod pod = new V1Pod().metadata(podMetadata).status(podStatus);
@@ -858,6 +858,7 @@ public void testIsContainerRecycled () throws ApiException {
"",
0,
"",
+ "",
0,
false);
doReturn(pod).when(coreV1Api).readNamespacedPodStatus(any(), any(), any());
@@ -873,8 +874,11 @@ public void testContainerIsNotRecycledYet () throws ApiException {
.withSubcontainers(List.of(containerName))
.build());
V1ObjectMeta podMetadata = new V1ObjectMeta().uid(uid);
- V1ContainerState state = new V1ContainerState().running(new V1ContainerStateRunning().startedAt(DateTime.now().minusMinutes(10)));
- V1PodStatus podStatus = new V1PodStatus().containerStatuses(List.of(new V1ContainerStatus().name(containerName).state(state)));
+ V1ContainerState state = new V1ContainerState().running(new V1ContainerStateRunning().startedAt(OffsetDateTime.now()
+ .minusMinutes(
+ 10)));
+ V1PodStatus podStatus = new V1PodStatus().containerStatuses(List.of(new V1ContainerStatus().name(containerName)
+ .state(state)));
V1Pod pod = new V1Pod().metadata(podMetadata).status(podStatus);
doReturn(pod).when(coreV1Api).readNamespacedPodStatus(any(), any(), any());
doReturn(Instant.now().minusSeconds(60)).when(kubernetesPodContainer).getExperimentStartTime();
@@ -884,10 +888,7 @@ public void testContainerIsNotRecycledYet () throws ApiException {
@Test
public void testIsContainerRecycledNotFound () throws ApiException {
KubernetesPodContainer kubernetesPodContainer = mock(KubernetesPodContainer.class);
- V1ReplicaSet replicaSet = new V1ReplicaSetBuilder().withStatus(new V1ReplicaSetStatusBuilder().withReplicas(1)
- .withReadyReplicas(
- 1)
- .build()).build();
+ V1ReplicaSet replicaSet = new V1ReplicaSet().status(new V1ReplicaSetStatus().replicas(1).readyReplicas(1));
when(coreV1Api.listNamespacedPod(anyString(),
anyString(),
anyBoolean(),
@@ -896,6 +897,7 @@ public void testIsContainerRecycledNotFound () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(new V1PodList());
when(kubernetesPodContainer.getOwnerKind()).thenReturn(REPLICA_SET);
@@ -928,6 +930,7 @@ public void testRecycleContainer () throws ApiException {
anyString(),
anyInt(),
anyString(),
+ anyString(),
anyInt(),
anyBoolean())).thenReturn(getV1PodList(true));
KubernetesPodContainer container = mock(KubernetesPodContainer.class);
diff --git a/chaosengine-experiments/chaosengine-pcf/pom.xml b/chaosengine-experiments/chaosengine-pcf/pom.xml
index fe3a2764c..0f12ecc2c 100644
--- a/chaosengine-experiments/chaosengine-pcf/pom.xml
+++ b/chaosengine-experiments/chaosengine-pcf/pom.xml
@@ -3,7 +3,7 @@
chaosengine-experiments
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-experiments/pom.xml b/chaosengine-experiments/pom.xml
index 4eee241a5..75003a436 100644
--- a/chaosengine-experiments/pom.xml
+++ b/chaosengine-experiments/pom.xml
@@ -5,7 +5,7 @@
chaosengine
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-integration/pom.xml b/chaosengine-integration/pom.xml
index a837919ef..9805d200a 100644
--- a/chaosengine-integration/pom.xml
+++ b/chaosengine-integration/pom.xml
@@ -5,7 +5,7 @@
chaosengine
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
jar
diff --git a/chaosengine-launcher/pom.xml b/chaosengine-launcher/pom.xml
index 0f00e5854..80b8b31fb 100644
--- a/chaosengine-launcher/pom.xml
+++ b/chaosengine-launcher/pom.xml
@@ -3,7 +3,7 @@
chaosengine
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-notifications/chaosengine-notif-datadog/pom.xml b/chaosengine-notifications/chaosengine-notif-datadog/pom.xml
index 264310aeb..632d613f4 100644
--- a/chaosengine-notifications/chaosengine-notif-datadog/pom.xml
+++ b/chaosengine-notifications/chaosengine-notif-datadog/pom.xml
@@ -5,7 +5,7 @@
chaosengine-notifications
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
@@ -23,7 +23,7 @@
com.datadoghq
java-dogstatsd-client
- 2.6.1
+ 4.0.0
diff --git a/chaosengine-notifications/chaosengine-notif-datadog/src/main/java/com/thales/chaos/notification/services/DataDogNotificationService.java b/chaosengine-notifications/chaosengine-notif-datadog/src/main/java/com/thales/chaos/notification/services/DataDogNotificationService.java
index b480df857..ee870ee26 100644
--- a/chaosengine-notifications/chaosengine-notif-datadog/src/main/java/com/thales/chaos/notification/services/DataDogNotificationService.java
+++ b/chaosengine-notifications/chaosengine-notif-datadog/src/main/java/com/thales/chaos/notification/services/DataDogNotificationService.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 - 2020, Thales DIS CPL Canada, Inc
+ * Copyright (c) 2018 - 2022, Thales DIS CPL Canada, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,7 +17,7 @@
package com.thales.chaos.notification.services;
-import com.timgroup.statsd.NonBlockingStatsDClient;
+import com.timgroup.statsd.NonBlockingStatsDClientBuilder;
import com.timgroup.statsd.StatsDClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -30,7 +30,7 @@
public class DataDogNotificationService {
private int statsdPort = 8125;
private String statsdHost = "datadog";
- private static final String[] STATIC_TAGS = { "service:chaosengine" };
+ private static final String[] STATIC_TAGS = { "service:chaosengine, source:ChaosEngineNotification" };
public void setStatsdPort (int statsdPort) {
this.statsdPort = statsdPort;
@@ -41,7 +41,11 @@ public void setStatsdHost (String statsdHost) {
}
@Bean
- StatsDClient statsDClient(){
- return new NonBlockingStatsDClient("", statsdHost, statsdPort, STATIC_TAGS);
+ StatsDClient statsDClient() {
+ return new NonBlockingStatsDClientBuilder().prefix("")
+ .hostname(statsdHost)
+ .port(statsdPort)
+ .constantTags(STATIC_TAGS)
+ .build();
}
}
diff --git a/chaosengine-notifications/chaosengine-notif-slack/pom.xml b/chaosengine-notifications/chaosengine-notif-slack/pom.xml
index 3aaa33b07..146a8b477 100644
--- a/chaosengine-notifications/chaosengine-notif-slack/pom.xml
+++ b/chaosengine-notifications/chaosengine-notif-slack/pom.xml
@@ -5,7 +5,7 @@
chaosengine-notifications
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-notifications/chaosengine-notif-xmpp/pom.xml b/chaosengine-notifications/chaosengine-notif-xmpp/pom.xml
index 87dbf029e..69c50b054 100644
--- a/chaosengine-notifications/chaosengine-notif-xmpp/pom.xml
+++ b/chaosengine-notifications/chaosengine-notif-xmpp/pom.xml
@@ -5,7 +5,7 @@
chaosengine-notifications
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-notifications/pom.xml b/chaosengine-notifications/pom.xml
index 7b0b60699..d1f1b110d 100644
--- a/chaosengine-notifications/pom.xml
+++ b/chaosengine-notifications/pom.xml
@@ -3,7 +3,7 @@
4.0.0
chaosengine-notifications
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
chaosengine-notif-slack
chaosengine-notif-datadog
@@ -17,7 +17,7 @@
chaosengine
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
diff --git a/chaosengine-schedule/canada/pom.xml b/chaosengine-schedule/canada/pom.xml
index 1600f44ce..c31b21114 100644
--- a/chaosengine-schedule/canada/pom.xml
+++ b/chaosengine-schedule/canada/pom.xml
@@ -5,7 +5,7 @@
chaosengine-schedule
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-schedule/czech-republic/pom.xml b/chaosengine-schedule/czech-republic/pom.xml
index a81f48005..af73ca072 100644
--- a/chaosengine-schedule/czech-republic/pom.xml
+++ b/chaosengine-schedule/czech-republic/pom.xml
@@ -5,7 +5,7 @@
chaosengine-schedule
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-schedule/france/pom.xml b/chaosengine-schedule/france/pom.xml
index 3f1f065a7..6b92696c5 100644
--- a/chaosengine-schedule/france/pom.xml
+++ b/chaosengine-schedule/france/pom.xml
@@ -5,7 +5,7 @@
chaosengine-schedule
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-schedule/pom.xml b/chaosengine-schedule/pom.xml
index cf7293557..4e77afc08 100644
--- a/chaosengine-schedule/pom.xml
+++ b/chaosengine-schedule/pom.xml
@@ -4,11 +4,11 @@
chaosengine
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
chaosengine-schedule
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
pom
chaosengine-schedule
diff --git a/chaosengine-schedule/usa/pom.xml b/chaosengine-schedule/usa/pom.xml
index 8aebdc17f..a49a7d665 100644
--- a/chaosengine-schedule/usa/pom.xml
+++ b/chaosengine-schedule/usa/pom.xml
@@ -5,7 +5,7 @@
chaosengine-schedule
com.thales.chaos
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
4.0.0
diff --git a/chaosengine-test-utilities/pom.xml b/chaosengine-test-utilities/pom.xml
index 7cb561abc..26da6d134 100644
--- a/chaosengine-test-utilities/pom.xml
+++ b/chaosengine-test-utilities/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.thales.chaos
chaosengine-test-utilities
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
chaosengine-test-utilities
diff --git a/docs/markdown/Experiment_Modules/kubernetes_experiments.md b/docs/markdown/Experiment_Modules/kubernetes_experiments.md
index 4135893a4..793246d74 100644
--- a/docs/markdown/Experiment_Modules/kubernetes_experiments.md
+++ b/docs/markdown/Experiment_Modules/kubernetes_experiments.md
@@ -14,7 +14,7 @@ The official Kubernetes Java Client is used to interact with the cluster.
| | |
| --- | --- |
| Resource | |
-| Version | 10.0.0 |
+| Version | 15.0.1 |
| Maven Repositories | |
## Configuration
diff --git a/docs/markdown/Quick_Start_Guide/Experiments_On_AWS/index.md b/docs/markdown/Quick_Start_Guide/Experiments_On_AWS/index.md
index 06ce71d84..29ed81613 100644
--- a/docs/markdown/Quick_Start_Guide/Experiments_On_AWS/index.md
+++ b/docs/markdown/Quick_Start_Guide/Experiments_On_AWS/index.md
@@ -525,4 +525,4 @@ Best wishes and have fun unleashing the Chaos Engine! :)
* [Kubernetes Cluster setup](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
* [User defined experiments](https://thalesgroup.github.io/chaos-engine/Core_Modules/experiment_manager/#user-defined-experiments)
* [Kubernetes Experiments](https://thalesgroup.github.io/chaos-engine/Experiment_Modules/kubernetes_experiments/#required-kubernetes-cluster-configuration)
-* [Chaos Engines slack support forum](https://app.slack.com/client/TFJUJDNN9/CFJ10E27J)
\ No newline at end of file
+* [Chaos Engines slack support forum](https://thalescploss.slack.com/)
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 71f8014d5..3996af7a7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.thales.chaos
chaosengine
- 1.5.0-SNAPSHOT
+ 1.6.0-SNAPSHOT
openapi
@@ -137,7 +137,7 @@
org.springframework.boot
spring-boot-starter-parent
- 2.2.9.RELEASE
+ 2.2.13.RELEASE
@@ -185,6 +185,13 @@
0.27.0
+
+
+ org.apache.commons
+ commons-collections4
+ 4.4
+
+
org.awaitility