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