diff --git a/dapr-spring/pom.xml b/dapr-spring/pom.xml index 4f34d39710..f3559a4563 100644 --- a/dapr-spring/pom.xml +++ b/dapr-spring/pom.xml @@ -31,8 +31,6 @@ 11 11 11 - - 1.17.0-SNAPSHOT @@ -40,27 +38,27 @@ io.dapr.spring dapr-spring-data - ${dapr.spring.version} + ${project.version} io.dapr.spring dapr-spring-messaging - ${dapr.spring.version} + ${project.version} io.dapr.spring dapr-spring-workflows - ${dapr.spring.version} + ${project.version} io.dapr.spring dapr-spring-boot-autoconfigure - ${dapr.spring.version} + ${project.version} io.dapr.spring dapr-spring-boot-tests - ${dapr.spring.version} + ${project.version} diff --git a/sdk-tests/src/test/java/io/dapr/it/spring/messaging/DaprSpringMessagingIT.java b/sdk-tests/src/test/java/io/dapr/it/spring/messaging/DaprSpringMessagingIT.java index 106519f8d2..26dc6b5db3 100644 --- a/sdk-tests/src/test/java/io/dapr/it/spring/messaging/DaprSpringMessagingIT.java +++ b/sdk-tests/src/test/java/io/dapr/it/spring/messaging/DaprSpringMessagingIT.java @@ -19,6 +19,7 @@ import io.dapr.testcontainers.Component; import io.dapr.testcontainers.DaprContainer; import io.dapr.testcontainers.DaprLogLevel; +import io.dapr.testcontainers.wait.strategy.DaprWait; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; @@ -30,7 +31,6 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.testcontainers.containers.Network; -import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -54,10 +54,10 @@ public class DaprSpringMessagingIT { private static final Logger logger = LoggerFactory.getLogger(DaprSpringMessagingIT.class); + private static final String PUBSUB_NAME = "pubsub"; private static final String TOPIC = "mockTopic"; private static final Network DAPR_NETWORK = Network.newNetwork(); private static final int APP_PORT = 8080; - private static final String SUBSCRIPTION_MESSAGE_PATTERN = ".*app is subscribed to the following topics.*"; @Container @ServiceConnection @@ -84,8 +84,7 @@ public static void beforeAll(){ @BeforeEach public void beforeEach() { - // Ensure the subscriptions are registered - Wait.forLogMessage(SUBSCRIPTION_MESSAGE_PATTERN, 1).waitUntilReady(DAPR_CONTAINER); + DaprWait.forSubscription(PUBSUB_NAME, TOPIC).waitUntilReady(DAPR_CONTAINER); } @Test diff --git a/sdk-tests/src/test/java/io/dapr/it/testcontainers/actors/DaprActorsIT.java b/sdk-tests/src/test/java/io/dapr/it/testcontainers/actors/DaprActorsIT.java index f0ff24d8f0..96b7e512ec 100644 --- a/sdk-tests/src/test/java/io/dapr/it/testcontainers/actors/DaprActorsIT.java +++ b/sdk-tests/src/test/java/io/dapr/it/testcontainers/actors/DaprActorsIT.java @@ -23,11 +23,11 @@ import io.dapr.testcontainers.internal.DaprContainerFactory; import io.dapr.testcontainers.internal.DaprSidecarContainer; import io.dapr.testcontainers.internal.spring.DaprSpringBootTest; +import io.dapr.testcontainers.wait.strategy.DaprWait; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.testcontainers.containers.wait.strategy.Wait; import java.util.Map; import java.util.UUID; @@ -38,8 +38,6 @@ @Tag("testcontainers") public class DaprActorsIT { - private static final String ACTORS_MESSAGE_PATTERN = ".*Actor runtime started.*"; - @DaprSidecarContainer private static final DaprContainer DAPR_CONTAINER = DaprContainerFactory.createForSpringBootTest("actor-dapr-app") .withComponent(new Component("kvstore", "state.in-memory", "v1", @@ -57,9 +55,7 @@ public class DaprActorsIT { public void setUp() { org.testcontainers.Testcontainers.exposeHostPorts(DAPR_CONTAINER.getAppPort()); daprActorRuntime.registerActor(TestActorImpl.class); - - // Wait for actor runtime to start. - Wait.forLogMessage(ACTORS_MESSAGE_PATTERN, 1).waitUntilReady(DAPR_CONTAINER); + DaprWait.forActors().waitUntilReady(DAPR_CONTAINER); } @Test diff --git a/sdk-tests/src/test/java/io/dapr/it/testcontainers/pubsub/outbox/DaprPubSubOutboxIT.java b/sdk-tests/src/test/java/io/dapr/it/testcontainers/pubsub/outbox/DaprPubSubOutboxIT.java index 2aef82f14c..d4139bcf91 100644 --- a/sdk-tests/src/test/java/io/dapr/it/testcontainers/pubsub/outbox/DaprPubSubOutboxIT.java +++ b/sdk-tests/src/test/java/io/dapr/it/testcontainers/pubsub/outbox/DaprPubSubOutboxIT.java @@ -21,6 +21,7 @@ import io.dapr.testcontainers.Component; import io.dapr.testcontainers.DaprContainer; import io.dapr.testcontainers.DaprLogLevel; +import io.dapr.testcontainers.wait.strategy.DaprWait; import org.assertj.core.api.Assertions; import org.awaitility.Awaitility; import org.junit.jupiter.api.BeforeAll; @@ -35,7 +36,6 @@ import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; import org.testcontainers.containers.Network; -import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -62,7 +62,6 @@ public class DaprPubSubOutboxIT { private static final Network DAPR_NETWORK = Network.newNetwork(); private static final Random RANDOM = new Random(); private static final int PORT = RANDOM.nextInt(1000) + 8000; - private static final String APP_FOUND_MESSAGE_PATTERN = ".*application discovered on port.*"; private static final String PUBSUB_APP_ID = "pubsub-dapr-app"; private static final String PUBSUB_NAME = "pubsub"; @@ -107,7 +106,7 @@ public static void beforeAll(){ @BeforeEach public void beforeEach() { - Wait.forLogMessage(APP_FOUND_MESSAGE_PATTERN, 1).waitUntilReady(DAPR_CONTAINER); + DaprWait.forSubscription(PUBSUB_NAME, TOPIC_PRODUCT_CREATED).waitUntilReady(DAPR_CONTAINER); } @Test diff --git a/sdk/src/main/java/io/dapr/client/DaprHttp.java b/sdk/src/main/java/io/dapr/client/DaprHttp.java index 489fd40491..0dc395834c 100644 --- a/sdk/src/main/java/io/dapr/client/DaprHttp.java +++ b/sdk/src/main/java/io/dapr/client/DaprHttp.java @@ -85,7 +85,8 @@ public enum HttpMethods { HEAD, CONNECT, OPTIONS, - TRACE + TRACE, + PATCH } public static class Response { diff --git a/sdk/src/test/java/io/dapr/client/DaprHttpTest.java b/sdk/src/test/java/io/dapr/client/DaprHttpTest.java index ad6753479a..739957ea85 100644 --- a/sdk/src/test/java/io/dapr/client/DaprHttpTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprHttpTest.java @@ -273,6 +273,36 @@ public void invokeDeleteMethod() throws IOException { assertEquals("http://" + sidecarIp + ":3500/v1.0/state", request.uri().toString()); } + @Test + public void invokePatchMethod() throws IOException { + byte[] content = serializer.serialize(EXPECTED_RESULT); + MockHttpResponse mockHttpResponse = new MockHttpResponse(content, HTTP_OK); + CompletableFuture> mockResponse = CompletableFuture.completedFuture(mockHttpResponse); + ArgumentCaptor requestCaptor = ArgumentCaptor.forClass(HttpRequest.class); + + when(httpClient.sendAsync(any(), any())).thenReturn(mockResponse); + + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, READ_TIMEOUT, httpClient); + Mono mono = daprHttp.invokeApi( + "PATCH", + "v1.0/state".split("/"), + null, + "", + null, + Context.empty() + ); + DaprHttp.Response response = mono.block(); + String body = serializer.deserialize(response.getBody(), String.class); + + verify(httpClient).sendAsync(requestCaptor.capture(), any()); + + HttpRequest request = requestCaptor.getValue(); + + assertEquals(EXPECTED_RESULT, body); + assertEquals("PATCH", request.method()); + assertEquals("http://" + sidecarIp + ":3500/v1.0/state", request.uri().toString()); + } + @Test public void invokeHeadMethod() { MockHttpResponse mockHttpResponse = new MockHttpResponse(HTTP_OK); diff --git a/spring-boot-examples/producer-app/src/test/java/io/dapr/springboot/examples/producer/ProducerAppIT.java b/spring-boot-examples/producer-app/src/test/java/io/dapr/springboot/examples/producer/ProducerAppIT.java index a0c561b931..195fd032b5 100644 --- a/spring-boot-examples/producer-app/src/test/java/io/dapr/springboot/examples/producer/ProducerAppIT.java +++ b/spring-boot-examples/producer-app/src/test/java/io/dapr/springboot/examples/producer/ProducerAppIT.java @@ -19,6 +19,7 @@ import io.dapr.springboot.examples.producer.workflow.CustomerWorkflow; import io.dapr.springboot.examples.producer.workflow.RegisterCustomerActivity; import io.dapr.testcontainers.DaprContainer; +import io.dapr.testcontainers.wait.strategy.DaprWait; import io.restassured.RestAssured; import io.restassured.http.ContentType; import org.junit.jupiter.api.AfterEach; @@ -26,7 +27,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.testcontainers.containers.wait.strategy.Wait; import java.io.IOException; import java.time.Duration; @@ -43,8 +43,6 @@ webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) class ProducerAppIT { - private static final String SUBSCRIPTION_MESSAGE_PATTERN = ".*app is subscribed to the following topics.*"; - @Autowired private TestSubscriberRestController controller; @@ -62,10 +60,9 @@ class ProducerAppIT { @BeforeEach void setUp() { RestAssured.baseURI = "http://localhost:" + 8080; - org.testcontainers.Testcontainers.exposeHostPorts(8080); - // Ensure the subscriptions are registered - Wait.forLogMessage(SUBSCRIPTION_MESSAGE_PATTERN, 1).waitUntilReady(daprContainer); + org.testcontainers.Testcontainers.exposeHostPorts(8080); + DaprWait.forSubscription("pubsub", "topic").waitUntilReady(daprContainer); } @AfterEach