Skip to content

Commit dcd698e

Browse files
committed
Add create persistent sub test.
1 parent 3b711b4 commit dcd698e

File tree

6 files changed

+77
-40
lines changed

6 files changed

+77
-40
lines changed

db-client-java/src/main/java/com/eventstore/dbclient/EventStoreConnection.java

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ public class EventStoreConnection {
2020
private UserCredentials userCredentials = null;
2121
private NodePreference nodePreference;
2222
private boolean requiresLeader;
23+
private boolean insecure;
2324

24-
public EventStoreConnection(Endpoint endpoint, Endpoint[] gossipSeeds, String domain, SslContext sslContext, UserCredentials userCredentials, NodePreference nodePreference, boolean requiresLeader, Timeouts timeouts) {
25+
public EventStoreConnection(Endpoint endpoint, Endpoint[] gossipSeeds, String domain, SslContext sslContext, UserCredentials userCredentials, NodePreference nodePreference, boolean requiresLeader, boolean insecure, Timeouts timeouts) {
2526
this.endpoint = endpoint;
2627
this.gossipSeeds = gossipSeeds;
2728
this.domain = domain;
@@ -30,17 +31,7 @@ public EventStoreConnection(Endpoint endpoint, Endpoint[] gossipSeeds, String do
3031
this.timeouts = timeouts;
3132
this.nodePreference = nodePreference;
3233
this.requiresLeader = requiresLeader;
33-
34-
if (sslContext == null) {
35-
try {
36-
this.sslContext = GrpcSslContexts.
37-
forClient().
38-
trustManager(InsecureTrustManagerFactory.INSTANCE).
39-
build();
40-
} catch (SSLException e) {
41-
throw new RuntimeException(e);
42-
}
43-
}
34+
this.insecure = insecure;
4435
}
4536

4637
public static EventStoreConnectionBuilder builder() {
@@ -51,10 +42,14 @@ public StreamsClient newStreamsClient() {
5142
return new StreamsClient(createManagedChannel(), userCredentials, requiresLeader, timeouts);
5243
}
5344

45+
public PersistentClient newPersistentClient() {
46+
return new PersistentClient(createManagedChannel(), userCredentials, requiresLeader, timeouts);
47+
}
48+
5449
private ManagedChannel createManagedChannel() {
55-
ManagedChannel channel = null;
5650
List<InetSocketAddress> addresses = null;
5751
String target = domain != null ? domain : "";
52+
NettyChannelBuilder builder = null;
5853

5954
if (gossipSeeds != null) {
6055
addresses = new ArrayList<>();
@@ -72,19 +67,21 @@ private ManagedChannel createManagedChannel() {
7267
.getDefaultRegistry()
7368
.register(new ClusterResolverFactory(addresses, nodePreference, timeouts, sslContext));
7469

75-
channel = NettyChannelBuilder
76-
.forTarget(target)
77-
.userAgent("Event Store Client (Java)")
78-
.sslContext(sslContext)
79-
.build();
70+
builder = NettyChannelBuilder
71+
.forTarget(target);
8072
} else {
81-
channel = NettyChannelBuilder
82-
.forAddress(endpoint.getHostname(), endpoint.getPort())
83-
.userAgent("Event Store Client (Java)")
84-
.sslContext(sslContext)
85-
.build();
73+
builder = NettyChannelBuilder
74+
.forAddress(endpoint.getHostname(), endpoint.getPort());
75+
}
76+
77+
if (insecure) {
78+
builder.usePlaintext();
79+
} else if (sslContext != null) {
80+
builder.sslContext(sslContext);
8681
}
8782

88-
return channel;
83+
return builder
84+
.userAgent("Event Store Client (Java)")
85+
.build();
8986
}
9087
}

db-client-java/src/main/java/com/eventstore/dbclient/EventStoreConnectionBuilder.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class EventStoreConnectionBuilder {
88
private SslContext _sslContext = null;
99
private Endpoint endpoint = null;
1010
private boolean requiresLeader = false;
11+
private boolean insecure = false;
1112

1213
public EventStoreConnectionBuilder() {
1314
_timeouts = Timeouts.DEFAULT;
@@ -24,7 +25,7 @@ public EventStoreConnectionBuilder connectionTimeouts(Timeouts timeouts) {
2425
}
2526

2627
public EventStoreConnectionBuilder insecure() {
27-
_sslContext = null;
28+
this.insecure = true;
2829
return this;
2930
}
3031

@@ -47,22 +48,22 @@ public EventStoreConnection createSingleNodeConnection(String hostname, int port
4748
}
4849

4950
public EventStoreConnection createSingleNodeConnection(Endpoint endpoint) {
50-
return new EventStoreConnection(endpoint, null, null, _sslContext, _defaultUserCredentials, NodePreference.RANDOM, requiresLeader, _timeouts);
51+
return new EventStoreConnection(endpoint, null, null, _sslContext, _defaultUserCredentials, NodePreference.RANDOM, requiresLeader, insecure, _timeouts);
5152
}
5253

5354
public EventStoreConnection createClusterConnectionUsingSeeds(Endpoint[] endpoints) {
5455
return createClusterConnectionUsingSeeds(endpoints, NodePreference.RANDOM);
5556
}
5657

5758
public EventStoreConnection createClusterConnectionUsingSeeds(Endpoint[] endpoints, NodePreference nodePreference) {
58-
return new EventStoreConnection(null, endpoints, null, _sslContext, _defaultUserCredentials, nodePreference, requiresLeader, _timeouts);
59+
return new EventStoreConnection(null, endpoints, null, _sslContext, _defaultUserCredentials, nodePreference, requiresLeader, insecure, _timeouts);
5960
}
6061

6162
public EventStoreConnection createClusterConnectionUsingDns(String domain) {
6263
return createClusterConnectionUsingDns(domain, NodePreference.RANDOM);
6364
}
6465

6566
public EventStoreConnection createClusterConnectionUsingDns(String domain, NodePreference nodePreference) {
66-
return new EventStoreConnection(null, null, domain, _sslContext, _defaultUserCredentials, nodePreference, requiresLeader, _timeouts);
67+
return new EventStoreConnection(null, null, domain, _sslContext, _defaultUserCredentials, nodePreference, requiresLeader, insecure, _timeouts);
6768
}
6869
}

db-client-java/src/main/java/com/eventstore/dbclient/PersistentClient.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,23 @@ public class PersistentClient {
3232
.setStructured(Shared.Empty.getDefaultInstance()));
3333
}
3434

35-
public PersistentClient(String host, int port, UserCredentials defaultCredentials, Timeouts timeouts, SslContext sslContext) {
36-
this(NettyChannelBuilder.forAddress(host, port)
37-
.userAgent("Event Store Client (Java) v1.0.0-SNAPSHOT")
38-
.sslContext(sslContext)
39-
.build(), defaultCredentials, timeouts);
40-
}
41-
4235
public PersistentClient(
4336
@NotNull ManagedChannel channel,
44-
@NotNull UserCredentials credentials,
37+
UserCredentials credentials,
38+
boolean requiresLeader,
4539
@NotNull Timeouts timeouts) {
4640
_channel = channel;
4741
_timeouts = timeouts;
4842

4943
Metadata headers = new Metadata();
50-
headers.put(Metadata.Key.of("authorization", Metadata.ASCII_STRING_MARSHALLER), credentials.basicAuthHeader());
44+
45+
if (credentials != null) {
46+
headers.put(Metadata.Key.of("authorization", Metadata.ASCII_STRING_MARSHALLER), credentials.basicAuthHeader());
47+
}
48+
49+
if (requiresLeader) {
50+
headers.put(Metadata.Key.of("requires-leader", Metadata.ASCII_STRING_MARSHALLER), String.valueOf(requiresLeader));
51+
}
5152

5253
_stub = MetadataUtils.attachHeaders(PersistentSubscriptionsGrpc.newStub(_channel), headers);
5354
}

db-client-java/src/main/java/com/eventstore/dbclient/PersistentSubscriptionSettings.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ public PersistentSubscriptionSettings(int checkpointAfterMs, boolean extraStatis
3131
this.strategy = strategy;
3232
}
3333

34+
public static PersistentSubscriptionSettingsBuilder builder() {
35+
return new PersistentSubscriptionSettingsBuilder();
36+
}
37+
3438
public int getCheckpointAfterMs() {
3539
return checkpointAfterMs;
3640
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.eventstore.dbclient;
2+
3+
import org.junit.Rule;
4+
import org.junit.Test;
5+
import testcontainers.module.EventStoreStreamsClient;
6+
import testcontainers.module.EventStoreTestDBContainer;
7+
8+
import java.util.concurrent.CompletableFuture;
9+
10+
public class CreatePersistentSubscriptionTests {
11+
@Rule
12+
public final EventStoreTestDBContainer server = new EventStoreTestDBContainer(false);
13+
14+
@Rule
15+
public final EventStoreStreamsClient client = new EventStoreStreamsClient(server);
16+
17+
@Test
18+
public void testCreatePersistentSub() throws Throwable { {
19+
PersistentClient client = server.getPersistentClient();
20+
21+
PersistentSubscriptionSettings settings = PersistentSubscriptionSettings.builder().build();
22+
CompletableFuture result = client.create(settings, "aStream", "aGroup");
23+
24+
result.get();
25+
}}
26+
}

db-client-java/src/test/java/testcontainers/module/EventStoreTestDBContainer.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package testcontainers.module;
22

33
import com.eventstore.dbclient.EventStoreConnection;
4+
import com.eventstore.dbclient.PersistentClient;
45
import com.eventstore.dbclient.StreamsClient;
56
import com.eventstore.dbclient.UserCredentials;
67
import com.github.dockerjava.api.model.HealthCheck;
@@ -53,16 +54,23 @@ public EventStoreTestDBContainer(String image, boolean emptyDatabase) {
5354
waitingFor(Wait.forHealthcheck());
5455
}
5556

56-
public StreamsClient getStreamsClient() {
57+
public EventStoreConnection getConnection() {
5758
final String address = getContainerIpAddress();
5859
final int port = getMappedPort(DB_HTTP_PORT);
5960

6061
return EventStoreConnection
6162
.builder()
6263
.insecure()
6364
.defaultUserCredentials(new UserCredentials("admin", "changeit"))
64-
.createSingleNodeConnection(address, port)
65-
.newStreamsClient();
65+
.createSingleNodeConnection(address, port);
66+
}
67+
68+
public StreamsClient getStreamsClient() {
69+
return getConnection().newStreamsClient();
70+
}
71+
72+
public PersistentClient getPersistentClient() {
73+
return getConnection().newPersistentClient();
6674
}
6775

6876
private SslContext getClientSslContext() {

0 commit comments

Comments
 (0)