From 8be84431bc2e2a64122846e27a206cff3e99bd17 Mon Sep 17 00:00:00 2001 From: Georgios Andrianakis Date: Tue, 25 Sep 2018 11:13:28 +0300 Subject: [PATCH] Replace RestAssured.when with Spring WebTestClient Fixes gh-221 --- pom.xml | 8 ----- spring-cloud-kubernetes-config/pom.xml | 4 +-- .../config/ConfigMapsSpringBootTest.java | 35 +++++++------------ ...ProfilesNoActiveProfileSpringBootTest.java | 29 ++++++--------- .../ConfigMapsWithProfilesSpringBootTest.java | 27 +++++++------- ...nfigMapsWithoutProfilesSpringBootTest.java | 33 +++++++---------- .../config/HealthIndicatorTest.java | 25 +++++++------ .../MultipleConfigMapsSpringBootTest.java | 28 +++++---------- 8 files changed, 73 insertions(+), 116 deletions(-) diff --git a/pom.xml b/pom.xml index a83b806f..19028baa 100644 --- a/pom.xml +++ b/pom.xml @@ -71,7 +71,6 @@ 3.5.37 1.6 2.4.12 - 3.0.2 1.1-groovy-2.4 @@ -123,13 +122,6 @@ ${groovy.version} - - io.rest-assured - rest-assured - ${restassured.version} - test - - org.spockframework spock-spring diff --git a/spring-cloud-kubernetes-config/pom.xml b/spring-cloud-kubernetes-config/pom.xml index f16f512c..7fa46484 100644 --- a/spring-cloud-kubernetes-config/pom.xml +++ b/spring-cloud-kubernetes-config/pom.xml @@ -162,8 +162,8 @@ test - io.rest-assured - rest-assured + org.springframework.boot + spring-boot-starter-webflux test diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsSpringBootTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsSpringBootTest.java index 3b8fdd9a..d46c9b9d 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsSpringBootTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsSpringBootTest.java @@ -17,28 +17,23 @@ package org.springframework.cloud.kubernetes.config; -import java.util.HashMap; - import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; -import io.restassured.RestAssured; -import org.junit.Before; +import java.util.HashMap; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; - import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.kubernetes.config.example.App; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.WebTestClient; -import static io.restassured.RestAssured.when; -import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; /** @@ -48,6 +43,7 @@ import static org.junit.Assert.assertEquals; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class, properties = { "spring.application.name=configmap-example", "spring.cloud.kubernetes.reload.enabled=false" }) +@AutoConfigureWebTestClient public class ConfigMapsSpringBootTest { @ClassRule @@ -56,12 +52,12 @@ public class ConfigMapsSpringBootTest { private static KubernetesClient mockClient; @Autowired(required = false) - Config config; + private Config config; private static final String APPLICATION_NAME = "configmap-example"; - @Value("${local.server.port}") - private int port; + @Autowired + private WebTestClient webClient; @BeforeClass public static void setUpBeforeClass() { @@ -84,23 +80,12 @@ public class ConfigMapsSpringBootTest { .always(); } - @Before - public void setUp() { - RestAssured.baseURI = String.format("http://localhost:%d/api/greeting", port); - } - @Test public void testConfig() { assertEquals(config.getMasterUrl(), mockClient.getConfiguration().getMasterUrl()); assertEquals(config.getNamespace(), mockClient.getNamespace()); } - @Test - public void testGreetingEndpoint() { - when().get().then().statusCode(200).body("content", - is("Hello ConfigMap, World!")); - } - @Test public void testConfigMap() { ConfigMap configmap = mockClient.configMaps().inNamespace("test") @@ -109,4 +94,10 @@ public class ConfigMapsSpringBootTest { assertEquals(keys.get("bean.greeting"), "Hello ConfigMap, %s!"); } + @Test + public void testGreetingEndpoint() { + this.webClient.get().uri("/api/greeting").exchange().expectStatus().isOk() + .expectBody().jsonPath("content").isEqualTo("Hello ConfigMap, World!"); + } + } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithProfilesNoActiveProfileSpringBootTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithProfilesNoActiveProfileSpringBootTest.java index 6844f2da..dbae4f36 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithProfilesNoActiveProfileSpringBootTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithProfilesNoActiveProfileSpringBootTest.java @@ -17,26 +17,22 @@ package org.springframework.cloud.kubernetes.config; -import java.util.HashMap; - import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; -import io.restassured.RestAssured; +import java.util.HashMap; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; - import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.kubernetes.config.example.App; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.WebTestClient; -import static io.restassured.RestAssured.when; -import static org.hamcrest.core.Is.is; import static org.springframework.cloud.kubernetes.config.ConfigMapTestUtil.readResourceFile; /** @@ -46,6 +42,7 @@ import static org.springframework.cloud.kubernetes.config.ConfigMapTestUtil.read @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class, properties = { "spring.application.name=configmap-with-profile-no-active-profiles-example", "spring.cloud.kubernetes.reload.enabled=false" }) +@AutoConfigureWebTestClient public class ConfigMapsWithProfilesNoActiveProfileSpringBootTest { @ClassRule @@ -53,13 +50,10 @@ public class ConfigMapsWithProfilesNoActiveProfileSpringBootTest { private static KubernetesClient mockClient; - @Autowired(required = false) - Config config; - private static final String APPLICATION_NAME = "configmap-with-profile-no-active-profiles-example"; - @Value("${local.server.port}") - private int port; + @Autowired + private WebTestClient webClient; @BeforeClass public static void setUpBeforeClass() { @@ -84,16 +78,15 @@ public class ConfigMapsWithProfilesNoActiveProfileSpringBootTest { @Test public void testGreetingEndpoint() { - RestAssured.baseURI = String.format("http://localhost:%d/api/greeting", port); - when().get().then().statusCode(200).body("content", - is("Hello ConfigMap default, World!")); + this.webClient.get().uri("/api/greeting").exchange().expectStatus().isOk() + .expectBody().jsonPath("content").isEqualTo("Hello ConfigMap default, World!"); } @Test public void testFarewellEndpoint() { - RestAssured.baseURI = String.format("http://localhost:%d/api/farewell", port); - when().get().then().statusCode(200).body("content", - is("Goodbye ConfigMap default, World!")); + this.webClient.get().uri("/api/farewell").exchange().expectStatus().isOk() + .expectBody().jsonPath("content") + .isEqualTo("Goodbye ConfigMap default, World!"); } } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithProfilesSpringBootTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithProfilesSpringBootTest.java index 53a5ac83..eef254a8 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithProfilesSpringBootTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithProfilesSpringBootTest.java @@ -17,27 +17,23 @@ package org.springframework.cloud.kubernetes.config; -import java.util.HashMap; - import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; -import io.restassured.RestAssured; +import java.util.HashMap; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; - import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.kubernetes.config.example.App; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.WebTestClient; -import static io.restassured.RestAssured.when; -import static org.hamcrest.core.Is.is; import static org.springframework.cloud.kubernetes.config.ConfigMapTestUtil.readResourceFile; /** @@ -48,6 +44,7 @@ import static org.springframework.cloud.kubernetes.config.ConfigMapTestUtil.read "spring.application.name=configmap-with-profile-example", "spring.cloud.kubernetes.reload.enabled=false" }) @ActiveProfiles("development") +@AutoConfigureWebTestClient public class ConfigMapsWithProfilesSpringBootTest { @ClassRule @@ -60,8 +57,8 @@ public class ConfigMapsWithProfilesSpringBootTest { private static final String APPLICATION_NAME = "configmap-with-profile-example"; - @Value("${local.server.port}") - private int port; + @Autowired + private WebTestClient webClient; @BeforeClass public static void setUpBeforeClass() { @@ -86,15 +83,15 @@ public class ConfigMapsWithProfilesSpringBootTest { @Test public void testGreetingEndpoint() { - RestAssured.baseURI = String.format("http://localhost:%d/api/greeting", port); - when().get().then().statusCode(200).body("content", - is("Hello ConfigMap dev, World!")); + this.webClient.get().uri("/api/greeting").exchange().expectStatus().isOk() + .expectBody().jsonPath("content") + .isEqualTo("Hello ConfigMap dev, World!"); } @Test public void testFarewellEndpoint() { - RestAssured.baseURI = String.format("http://localhost:%d/api/farewell", port); - when().get().then().statusCode(200).body("content", - is("Goodbye ConfigMap default, World!")); + this.webClient.get().uri("/api/farewell").exchange().expectStatus().isOk() + .expectBody().jsonPath("content") + .isEqualTo("Goodbye ConfigMap default, World!"); } } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithoutProfilesSpringBootTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithoutProfilesSpringBootTest.java index 98b73afd..d4265174 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithoutProfilesSpringBootTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/ConfigMapsWithoutProfilesSpringBootTest.java @@ -17,26 +17,24 @@ package org.springframework.cloud.kubernetes.config; -import static io.restassured.RestAssured.when; -import static org.hamcrest.core.Is.is; -import static org.springframework.cloud.kubernetes.config.ConfigMapTestUtil.readResourceFile; - import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; -import io.restassured.RestAssured; import java.util.HashMap; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.kubernetes.config.example.App; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.WebTestClient; + +import static org.springframework.cloud.kubernetes.config.ConfigMapTestUtil.readResourceFile; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, @@ -45,6 +43,7 @@ import org.springframework.test.context.junit4.SpringRunner; "spring.cloud.kubernetes.reload.enabled=false"} ) @ActiveProfiles("development") +@AutoConfigureWebTestClient public class ConfigMapsWithoutProfilesSpringBootTest { @ClassRule @@ -52,13 +51,10 @@ public class ConfigMapsWithoutProfilesSpringBootTest { private static KubernetesClient mockClient; - @Autowired(required = false) - Config config; - private static final String APPLICATION_NAME = "configmap-without-profile-example"; - @Value("${local.server.port}") - private int port; + @Autowired + private WebTestClient webClient; @BeforeClass public static void setUpBeforeClass() { @@ -82,19 +78,14 @@ public class ConfigMapsWithoutProfilesSpringBootTest { @Test public void testGreetingEndpoint() { - RestAssured.baseURI = String.format("http://localhost:%d/api/greeting", port); - when().get() - .then() - .statusCode(200) - .body("content", is("Hello ConfigMap, World!")); + this.webClient.get().uri("/api/greeting").exchange().expectStatus().isOk() + .expectBody().jsonPath("content").isEqualTo("Hello ConfigMap, World!"); } @Test public void testFarewellEndpoint() { - RestAssured.baseURI = String.format("http://localhost:%d/api/farewell", port); - when().get() - .then() - .statusCode(200) - .body("content", is("Goodbye ConfigMap, World!")); + this.webClient.get().uri("/api/farewell").exchange().expectStatus().isOk() + .expectBody().jsonPath("content") + .isEqualTo("Goodbye ConfigMap, World!"); } } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/HealthIndicatorTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/HealthIndicatorTest.java index f7ef025f..b4e2fb6b 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/HealthIndicatorTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/HealthIndicatorTest.java @@ -1,20 +1,22 @@ package org.springframework.cloud.kubernetes.config; -import static io.restassured.RestAssured.given; -import static org.hamcrest.core.StringContains.containsString; - import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.server.mock.KubernetesServer; -import io.restassured.RestAssured; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.kubernetes.config.example.App; +import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.WebTestClient; + +import static org.hamcrest.Matchers.containsString; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class, @@ -31,6 +33,8 @@ public class HealthIndicatorTest { @Value("${local.server.port}") private int port; + @Autowired + private WebTestClient webClient; @BeforeClass public static void setUpBeforeClass() { @@ -46,13 +50,12 @@ public class HealthIndicatorTest { @Test public void healthEndpointShouldContainKubernetes() { - RestAssured.baseURI = String.format("http://localhost:%d/actuator/health", port); - given() - .contentType("application/json") - .get() - .then() - .statusCode(200) - .body(containsString("kubernetes")); + webClient.get() + .uri("http://localhost:{port}/actuator/health", port) + .accept(MediaType.APPLICATION_JSON) + .exchange() + .expectStatus().isOk() + .expectBody(String.class).value(containsString("kubernetes")); } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/MultipleConfigMapsSpringBootTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/MultipleConfigMapsSpringBootTest.java index 68d5b6f0..dba81c72 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/MultipleConfigMapsSpringBootTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/MultipleConfigMapsSpringBootTest.java @@ -17,25 +17,22 @@ package org.springframework.cloud.kubernetes.config; -import static io.restassured.RestAssured.when; -import static org.hamcrest.core.Is.is; - import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; -import io.restassured.RestAssured; import java.util.HashMap; import java.util.Map; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.kubernetes.config.example2.ExampleApp; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.WebTestClient; /** * @author Charles Moulliard @@ -43,6 +40,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = ExampleApp.class, properties = {"spring.cloud.bootstrap.name=multiplecms"}) +@AutoConfigureWebTestClient public class MultipleConfigMapsSpringBootTest { @ClassRule @@ -50,9 +48,8 @@ public class MultipleConfigMapsSpringBootTest { private static KubernetesClient mockClient; - - @Value("${local.server.port}") - private int port; + @Autowired + private WebTestClient webClient; @BeforeClass public static void setUpBeforeClass() { @@ -109,12 +106,6 @@ public class MultipleConfigMapsSpringBootTest { .always(); } - - @Before - public void setUp() { - RestAssured.baseURI = String.format("http://localhost:%d/", port); - } - //the last confimap defined in 'multiplecms.yml' has the highest priority, so //the common property defined in all configmaps is taken from the last one defined @Test @@ -138,10 +129,9 @@ public class MultipleConfigMapsSpringBootTest { } private void assertResponse(String path, String expectedMessage) { - when().get(path) - .then() - .statusCode(200) - .body("message", is(expectedMessage)); + this.webClient.get().uri(path).exchange().expectStatus().isOk() + .expectBody().jsonPath("message") + .isEqualTo(expectedMessage); } }