Skip to content

Commit 8ade7d1

Browse files
author
Artur Ciocanu
committed
Integrate Dapr client property overrides
Signed-off-by: Artur Ciocanu <[email protected]>
1 parent 8403731 commit 8ade7d1

File tree

13 files changed

+246
-199
lines changed

13 files changed

+246
-199
lines changed

dapr-spring/dapr-spring-boot-testcontainers/src/main/java/io/dapr/testcontainers/DaprModule.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public interface DaprModule {
4242
static void daprProperties(DynamicPropertyRegistry registry) {
4343
Testcontainers.exposeHostPorts(8080);
4444
dapr.start();
45-
System.setProperty("dapr.grpc.port", Integer.toString(dapr.getGrpcPort()));
46-
System.setProperty("dapr.http.port", Integer.toString(dapr.getHttpPort()));
45+
registry.add("dapr.grpc.port", dapr::getGrpcPort);
46+
registry.add("dapr.http.port", dapr::getHttpPort);
4747
}
4848

4949
}

sdk-tests/src/test/java/io/dapr/it/spring/data/AbstractPostgreSQLBaseIT.java

-81
This file was deleted.

sdk-tests/src/test/java/io/dapr/it/spring/data/DaprKeyValueRepositoryIT.java

+68-6
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,32 @@
1313

1414
package io.dapr.it.spring.data;
1515

16-
import io.dapr.client.DaprClient;
16+
import io.dapr.testcontainers.Component;
17+
import io.dapr.testcontainers.DaprContainer;
18+
import io.dapr.testcontainers.DaprLogLevel;
1719
import org.junit.jupiter.api.BeforeEach;
20+
import org.junit.jupiter.api.Tag;
1821
import org.junit.jupiter.api.Test;
1922
import org.junit.jupiter.api.extension.ExtendWith;
2023
import org.springframework.beans.factory.annotation.Autowired;
2124
import org.springframework.test.context.ContextConfiguration;
25+
import org.springframework.test.context.DynamicPropertyRegistry;
26+
import org.springframework.test.context.DynamicPropertySource;
2227
import org.springframework.test.context.junit.jupiter.SpringExtension;
23-
28+
import org.testcontainers.containers.Network;
29+
import org.testcontainers.containers.PostgreSQLContainer;
30+
import org.testcontainers.containers.wait.strategy.Wait;
31+
import org.testcontainers.containers.wait.strategy.WaitStrategy;
32+
import org.testcontainers.junit.jupiter.Container;
33+
import org.testcontainers.junit.jupiter.Testcontainers;
34+
35+
import java.util.Collections;
36+
import java.util.HashMap;
2437
import java.util.List;
38+
import java.util.Map;
2539

40+
import static io.dapr.it.spring.data.DaprSpringDataConstants.BINDING_NAME;
41+
import static io.dapr.it.spring.data.DaprSpringDataConstants.STATE_STORE_NAME;
2642
import static org.junit.jupiter.api.Assertions.*;
2743

2844
/**
@@ -31,17 +47,63 @@
3147

3248
@ExtendWith(SpringExtension.class)
3349
@ContextConfiguration(classes = TestDaprSpringDataConfiguration.class)
34-
public class DaprKeyValueRepositoryIT extends AbstractPostgreSQLBaseIT {
50+
@Testcontainers
51+
@Tag("testcontainers")
52+
public class DaprKeyValueRepositoryIT {
53+
private static final String CONNECTION_STRING =
54+
"host=postgres-repository user=postgres password=password port=5432 connect_timeout=10 database=dapr_db_repository";
55+
private static final Map<String, String> STATE_STORE_PROPERTIES = createStateStoreProperties();
56+
57+
private static final Map<String, String> BINDING_PROPERTIES = Collections.singletonMap("connectionString", CONNECTION_STRING);
58+
59+
private static final Network DAPR_NETWORK = Network.newNetwork();
60+
61+
@Container
62+
private static final PostgreSQLContainer<?> POSTGRE_SQL_CONTAINER = new PostgreSQLContainer<>("postgres:16-alpine")
63+
.withNetworkAliases("postgres-repository")
64+
.withDatabaseName("dapr_db_repository")
65+
.withUsername("postgres")
66+
.withPassword("password")
67+
.withExposedPorts(5432)
68+
.withNetwork(DAPR_NETWORK);
69+
70+
private static final WaitStrategy DAPR_CONTAINER_WAIT_STRATEGY = Wait.forHttp("/v1.0/healthz/outbound")
71+
.forPort(3500)
72+
.forStatusCodeMatching(statusCode -> statusCode >= 200 && statusCode <= 399);
73+
74+
@Container
75+
private static final DaprContainer DAPR_CONTAINER = new DaprContainer("daprio/daprd:1.13.2")
76+
.withAppName("postgresql-repository-dapr-app")
77+
.withNetwork(DAPR_NETWORK)
78+
.withComponent(new Component(STATE_STORE_NAME, "state.postgresql", "v1", STATE_STORE_PROPERTIES))
79+
.withComponent(new Component(BINDING_NAME, "bindings.postgresql", "v1", BINDING_PROPERTIES))
80+
.withDaprLogLevel(DaprLogLevel.DEBUG)
81+
.withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String()))
82+
.waitingFor(DAPR_CONTAINER_WAIT_STRATEGY)
83+
.dependsOn(POSTGRE_SQL_CONTAINER);
84+
85+
@DynamicPropertySource
86+
static void daprProperties(DynamicPropertyRegistry registry) {
87+
DAPR_CONTAINER.start();
88+
registry.add("dapr.grpc.port", DAPR_CONTAINER::getGrpcPort);
89+
registry.add("dapr.http.port", DAPR_CONTAINER::getHttpPort);
90+
}
3591

36-
@Autowired
37-
private DaprClient daprClient;
92+
private static Map<String, String> createStateStoreProperties() {
93+
Map<String, String> result = new HashMap<>();
94+
95+
result.put("keyPrefix", "name");
96+
result.put("actorStateStore", String.valueOf(true));
97+
result.put("connectionString", CONNECTION_STRING);
98+
99+
return result;
100+
}
38101

39102
@Autowired
40103
private TestTypeRepository repository;
41104

42105
@BeforeEach
43106
public void setUp() {
44-
daprClient.waitForSidecar(10000).block();
45107
repository.deleteAll();
46108
}
47109

sdk-tests/src/test/java/io/dapr/it/spring/data/DaprSpringDataConstants.java

-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,4 @@ private DaprSpringDataConstants() {
66

77
public static final String STATE_STORE_NAME = "kvstore";
88
public static final String BINDING_NAME = "kvbinding";
9-
public static final String PUBSUB_NAME = "pubsub";
109
}

sdk-tests/src/test/java/io/dapr/it/spring/data/MySQLDaprKeyValueTemplateIT.java

+22-33
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,21 @@
1313

1414
package io.dapr.it.spring.data;
1515

16-
import com.fasterxml.jackson.databind.ObjectMapper;
1716
import io.dapr.client.DaprClient;
18-
import io.dapr.client.DaprClientBuilder;
19-
import io.dapr.spring.data.DaprKeyValueAdapterResolver;
2017
import io.dapr.spring.data.DaprKeyValueTemplate;
21-
import io.dapr.spring.data.KeyValueAdapterResolver;
2218
import io.dapr.testcontainers.Component;
2319
import io.dapr.testcontainers.DaprContainer;
2420
import io.dapr.testcontainers.DaprLogLevel;
2521
import org.junit.jupiter.api.AfterEach;
26-
import org.junit.jupiter.api.BeforeAll;
27-
import org.junit.jupiter.api.BeforeEach;
22+
import org.junit.jupiter.api.Tag;
2823
import org.junit.jupiter.api.Test;
24+
import org.junit.jupiter.api.extension.ExtendWith;
25+
import org.springframework.beans.factory.annotation.Autowired;
2926
import org.springframework.data.keyvalue.core.query.KeyValueQuery;
27+
import org.springframework.test.context.ContextConfiguration;
28+
import org.springframework.test.context.DynamicPropertyRegistry;
29+
import org.springframework.test.context.DynamicPropertySource;
30+
import org.springframework.test.context.junit.jupiter.SpringExtension;
3031
import org.testcontainers.containers.MySQLContainer;
3132
import org.testcontainers.containers.Network;
3233
import org.testcontainers.junit.jupiter.Container;
@@ -41,15 +42,17 @@
4142

4243
import static io.dapr.it.spring.data.DaprSpringDataConstants.STATE_STORE_NAME;
4344
import static io.dapr.it.spring.data.DaprSpringDataConstants.BINDING_NAME;
44-
import static io.dapr.it.spring.data.DaprSpringDataConstants.PUBSUB_NAME;
4545
import static org.assertj.core.api.Assertions.assertThat;
4646
import static org.junit.jupiter.api.Assertions.assertEquals;
4747

4848
/**
4949
* Integration tests for {@link MySQLDaprKeyValueTemplateIT}.
5050
*/
5151
@SuppressWarnings("AbbreviationAsWordInName")
52+
@ExtendWith(SpringExtension.class)
53+
@ContextConfiguration(classes = TestDaprSpringDataConfiguration.class)
5254
@Testcontainers
55+
@Tag("testcontainers")
5356
public class MySQLDaprKeyValueTemplateIT {
5457
private static final String STATE_STORE_DSN = "mysql:password@tcp(mysql:3306)/";
5558
private static final String BINDING_DSN = "mysql:password@tcp(mysql:3306)/dapr_db";
@@ -70,39 +73,19 @@ public class MySQLDaprKeyValueTemplateIT {
7073

7174
@Container
7275
private static final DaprContainer DAPR_CONTAINER = new DaprContainer("daprio/daprd:1.13.2")
73-
.withAppName("local-dapr-app")
76+
.withAppName("mysql-dapr-app")
7477
.withNetwork(DAPR_NETWORK)
7578
.withComponent(new Component(STATE_STORE_NAME, "state.mysql", "v1", STATE_STORE_PROPERTIES))
7679
.withComponent(new Component(BINDING_NAME, "bindings.mysql", "v1", BINDING_PROPERTIES))
77-
.withComponent(new Component(PUBSUB_NAME, "pubsub.in-memory", "v1", Collections.emptyMap()))
78-
.withAppPort(8080)
7980
.withDaprLogLevel(DaprLogLevel.DEBUG)
80-
.withAppChannelAddress("host.testcontainers.internal")
8181
.withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String()))
8282
.dependsOn(MY_SQL_CONTAINER);
8383

84-
private final ObjectMapper mapper = new ObjectMapper();
85-
86-
private DaprClient daprClient;
87-
private DaprKeyValueTemplate keyValueTemplate;
88-
89-
@BeforeAll
90-
static void beforeAll() {
91-
org.testcontainers.Testcontainers.exposeHostPorts(8080);
92-
}
93-
94-
@BeforeEach
95-
public void setUp() {
96-
daprClient = new DaprClientBuilder().build();
97-
KeyValueAdapterResolver daprKeyValueResolver = new DaprKeyValueAdapterResolver(
98-
daprClient,
99-
mapper,
100-
STATE_STORE_NAME,
101-
BINDING_NAME
102-
);
103-
keyValueTemplate = new DaprKeyValueTemplate(daprKeyValueResolver);
104-
105-
daprClient.waitForSidecar(10000).block();
84+
@DynamicPropertySource
85+
static void daprProperties(DynamicPropertyRegistry registry) {
86+
DAPR_CONTAINER.start();
87+
registry.add("dapr.grpc.port", DAPR_CONTAINER::getGrpcPort);
88+
registry.add("dapr.http.port", DAPR_CONTAINER::getHttpPort);
10689
}
10790

10891
private static Map<String, String> createStateStoreProperties() {
@@ -116,6 +99,12 @@ private static Map<String, String> createStateStoreProperties() {
11699
return result;
117100
}
118101

102+
@Autowired
103+
private DaprClient daprClient;
104+
105+
@Autowired
106+
private DaprKeyValueTemplate keyValueTemplate;
107+
119108
/**
120109
* Cleans up the state store after each test.
121110
*/

0 commit comments

Comments
 (0)