Skip to content

Commit 181472e

Browse files
committed
add withSsl method to ScyllaDBContainer
1 parent 7a356f2 commit 181472e

File tree

13 files changed

+40
-29
lines changed

13 files changed

+40
-29
lines changed

docs/modules/databases/scylladb.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ You can start a ScyllaDB container instance from any Java application by using:
1111
<!--/codeinclude-->
1212

1313
<!--codeinclude-->
14-
[Custom config file](../../../modules/scylladb/src/test/java/org/testcontainers/scylladb/ScyllaDBContainerTest.java) inside_block:custom_configuration
14+
[Custom config file](../../../modules/scylladb/src/test/java/org/testcontainers/scylladb/ScyllaDBContainerTest.java) inside_block:customConfiguration
1515
<!--/codeinclude-->
1616

1717
### Building CqlSession

modules/scylladb/src/main/java/org/testcontainers/scylladb/ScyllaDBContainer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@ public ScyllaDBContainer withConfigurationOverride(String configLocation) {
7474
return this;
7575
}
7676

77+
public ScyllaDBContainer withSsl(MountableFile certificate, MountableFile keyfile, MountableFile truststore) {
78+
return withCopyFileToContainer(certificate, "/etc/scylla/scylla.cer.pem")
79+
.withCopyFileToContainer(keyfile, "/etc/scylla/scylla.key.pem")
80+
.withCopyFileToContainer(truststore, "/etc/scylla/scylla.truststore")
81+
.withEnv("SSL_CERTFILE", "/etc/scylla/scylla.cer.pem");
82+
}
83+
7784
public ScyllaDBContainer withAlternator() {
7885
this.alternatorEnabled = true;
7986
return this;

modules/scylladb/src/test/java/org/testcontainers/scylladb/ScyllaDBContainerTest.java

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import software.amazon.awssdk.services.dynamodb.model.KeyType;
1818
import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType;
1919

20+
import javax.net.ssl.KeyManagerFactory;
21+
import javax.net.ssl.SSLContext;
22+
import javax.net.ssl.TrustManagerFactory;
2023
import java.io.IOException;
2124
import java.net.URI;
2225
import java.nio.file.Files;
@@ -28,10 +31,6 @@
2831
import java.security.UnrecoverableKeyException;
2932
import java.security.cert.CertificateException;
3033

31-
import javax.net.ssl.KeyManagerFactory;
32-
import javax.net.ssl.SSLContext;
33-
import javax.net.ssl.TrustManagerFactory;
34-
3534
import static org.assertj.core.api.Assertions.assertThat;
3635
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3736

@@ -44,8 +43,8 @@ public class ScyllaDBContainerTest {
4443
@Test
4544
public void testSimple() {
4645
try ( // container {
47-
ScyllaDBContainer scylladb = new ScyllaDBContainer(SCYLLADB_IMAGE)
48-
// }
46+
ScyllaDBContainer scylladb = new ScyllaDBContainer(SCYLLADB_IMAGE)
47+
// }
4948
) {
5049
scylladb.start();
5150
// session {
@@ -64,22 +63,28 @@ public void testSimple() {
6463

6564
@Test
6665
public void testSimpleSsl()
67-
throws InterruptedException, NoSuchAlgorithmException, KeyStoreException, IOException, CertificateException, UnrecoverableKeyException, KeyManagementException {
66+
throws NoSuchAlgorithmException, KeyStoreException, IOException, CertificateException, UnrecoverableKeyException, KeyManagementException {
6867
try (
69-
// custom_configuration {
68+
// customConfiguration {
7069
ScyllaDBContainer scylladb = new ScyllaDBContainer(SCYLLADB_IMAGE)
7170
.withConfigurationOverride("scylla-test-ssl")
7271
// }
7372
) {
7473
// sslContext {
75-
String testResourcesDir = getClass().getClassLoader().getResource("scylla-test-ssl/").getPath();
74+
ScyllaDBContainer sslScylladb = scylladb.withSsl(
75+
MountableFile.forClasspathResource("scylla-test-ssl/keys/scylla.cer.pem"),
76+
MountableFile.forClasspathResource("scylla-test-ssl/keys/scylla.key.pem"),
77+
MountableFile.forClasspathResource("scylla-test-ssl/keys/scylla.truststore")
78+
);
79+
80+
String testResourcesDir = getClass().getClassLoader().getResource("scylla-test-ssl/keys/").getPath();
7681

7782
KeyStore keyStore = KeyStore.getInstance("PKCS12");
78-
keyStore.load(Files.newInputStream(Paths.get(testResourcesDir + "keystore.node0")), "scylla".toCharArray());
83+
keyStore.load(Files.newInputStream(Paths.get(testResourcesDir + "scylla.keystore")), "scylla".toCharArray());
7984

8085
KeyStore trustStore = KeyStore.getInstance("PKCS12");
8186
trustStore.load(
82-
Files.newInputStream(Paths.get(testResourcesDir + "truststore.node0")),
87+
Files.newInputStream(Paths.get(testResourcesDir + "scylla.truststore")),
8388
"scylla".toCharArray()
8489
);
8590

@@ -97,11 +102,11 @@ public void testSimpleSsl()
97102
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
98103
// }
99104

100-
scylladb.start();
105+
sslScylladb.start();
101106

102107
CqlSession session = CqlSession
103108
.builder()
104-
.addContactPoint(scylladb.getContactPoint())
109+
.addContactPoint(sslScylladb.getContactPoint())
105110
.withLocalDatacenter("datacenter1")
106111
.withSslContext(sslContext)
107112
.build();
@@ -113,15 +118,20 @@ public void testSimpleSsl()
113118
}
114119

115120
@Test
116-
public void testSimpleSslCqlsh() throws InterruptedException, IOException {
121+
public void testSimpleSslCqlsh() throws IllegalStateException, InterruptedException, IOException {
122+
// sslConfiguration {
123+
// }
117124
try (
118125
ScyllaDBContainer scylladb = new ScyllaDBContainer(SCYLLADB_IMAGE)
119126
.withConfigurationOverride("scylla-test-ssl")
120-
) {
127+
.withSsl(
128+
MountableFile.forClasspathResource("scylla-test-ssl/keys/scylla.cer.pem"),
129+
MountableFile.forClasspathResource("scylla-test-ssl/keys/scylla.key.pem"),
130+
MountableFile.forClasspathResource("scylla-test-ssl/keys/scylla.truststore")
131+
)) {
121132
scylladb.start();
122133

123134
// sslCqlsh {
124-
scylladb.execInContainer("mv", "-f", "/etc/scylla/cqlshrc", "/root/.cassandra/cqlshrc");
125135
Container.ExecResult execResult = scylladb.execInContainer("cqlsh", "--ssl", "-e", "select * from system_schema.keyspaces;");
126136
assertThat(execResult.getStdout()).contains("keyspace_name");
127137
// }
@@ -148,8 +158,8 @@ public void testShardAwareness() {
148158
@Test
149159
public void testAlternator() {
150160
try ( // alternator {
151-
ScyllaDBContainer scylladb = new ScyllaDBContainer(SCYLLADB_IMAGE).withAlternator()
152-
// }
161+
ScyllaDBContainer scylladb = new ScyllaDBContainer(SCYLLADB_IMAGE).withAlternator()
162+
// }
153163
) {
154164
scylladb.start();
155165

@@ -185,4 +195,5 @@ public void throwExceptionWhenAlternatorDisabled() {
185195
.hasMessageContaining("Alternator is not enabled");
186196
}
187197
}
198+
188199
}

modules/scylladb/src/test/resources/scylla-test-ssl/cqlshrc

Lines changed: 0 additions & 7 deletions
This file was deleted.

modules/scylladb/src/test/resources/scylla-test-ssl/keys/node0.cer

Whitespace-only changes.

modules/scylladb/src/test/resources/scylla-test-ssl/keys/node0.p12

Whitespace-only changes.

modules/scylladb/src/test/resources/scylla-test-ssl/node0.cer.pem renamed to modules/scylladb/src/test/resources/scylla-test-ssl/keys/scylla.cer.pem

File renamed without changes.

modules/scylladb/src/test/resources/scylla-test-ssl/node0.key.pem renamed to modules/scylladb/src/test/resources/scylla-test-ssl/keys/scylla.key.pem

File renamed without changes.

modules/scylladb/src/test/resources/scylla-test-ssl/keystore.node0 renamed to modules/scylladb/src/test/resources/scylla-test-ssl/keys/scylla.keystore

File renamed without changes.

modules/scylladb/src/test/resources/scylla-test-ssl/truststore.node0 renamed to modules/scylladb/src/test/resources/scylla-test-ssl/keys/scylla.truststore

File renamed without changes.

0 commit comments

Comments
 (0)