From 5ac6a3d90bce42fc75ed56df6ab97c45c2b220c7 Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Tue, 2 May 2023 15:11:09 -0500 Subject: [PATCH] Add smoke test to verify MongoDB SSL connections See gh-35042 --- .../testcontainers/DockerImageNames.java | 2 +- .../build.gradle | 24 +++++++ .../smoketest/data/mongo/ExampleDocument.java | 44 +++++++++++++ .../data/mongo/ExampleMongoApplication.java | 24 +++++++ .../data/mongo/ExampleReactiveRepository.java | 23 +++++++ .../data/mongo/ExampleRepository.java | 23 +++++++ .../smoketest/data/mongo/ExampleService.java | 35 ++++++++++ ...aMongoTestReactiveSslIntegrationTests.java | 64 ++++++++++++++++++ .../DataMongoTestSslIntegrationTests.java | 65 +++++++++++++++++++ .../data/mongo/SecureMongoContainer.java | 51 +++++++++++++++ .../src/test/resources/ssl/test-ca.crt | 32 +++++++++ .../src/test/resources/ssl/test-ca.key | 51 +++++++++++++++ .../src/test/resources/ssl/test-client.crt | 24 +++++++ .../src/test/resources/ssl/test-client.key | 27 ++++++++ .../src/test/resources/ssl/test-server.pem | 51 +++++++++++++++ 15 files changed, 539 insertions(+), 1 deletion(-) create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/build.gradle create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleDocument.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleMongoApplication.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleReactiveRepository.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleRepository.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleService.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/DataMongoTestReactiveSslIntegrationTests.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/DataMongoTestSslIntegrationTests.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/SecureMongoContainer.java create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-ca.crt create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-ca.key create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-client.crt create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-client.key create mode 100644 spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-server.pem diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DockerImageNames.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DockerImageNames.java index f9a81f3904..10684963fa 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DockerImageNames.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DockerImageNames.java @@ -37,7 +37,7 @@ public final class DockerImageNames { private static final String KAFKA_VERSION = "5.4.3"; - private static final String MONGO_VERSION = "4.0.23"; + private static final String MONGO_VERSION = "5.0.17"; private static final String NEO4J_VERSION = "4.4.11"; diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/build.gradle new file mode 100644 index 0000000000..fa4f25bd97 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/build.gradle @@ -0,0 +1,24 @@ +plugins { + id "java" + id "org.springframework.boot.conventions" +} + +description = "Spring Boot Data MongoDB smoke test" + +dependencies { + implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-data-mongodb")) + implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-data-mongodb-reactive")) + implementation("io.projectreactor:reactor-core") + + testImplementation(project(":spring-boot-project:spring-boot-test")) + testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test")) + testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) + testImplementation(project(":spring-boot-project:spring-boot-testcontainers")) + testImplementation("io.projectreactor:reactor-test") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.junit.platform:junit-platform-engine") + testImplementation("org.junit.platform:junit-platform-launcher") + testImplementation("org.testcontainers:junit-jupiter") + testImplementation("org.testcontainers:testcontainers") + testImplementation("org.testcontainers:mongodb") +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleDocument.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleDocument.java new file mode 100644 index 0000000000..4358509686 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleDocument.java @@ -0,0 +1,44 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package smoketest.data.mongo; + +import org.springframework.data.mongodb.core.mapping.Document; + +@Document(collection = "exampleDocuments") +public class ExampleDocument { + + private String id; + + private String text; + + public String getId() { + return this.id; + } + + public void setId(String id) { + this.id = id; + } + + public String getText() { + return this.text; + } + + public void setText(String text) { + this.text = text; + } + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleMongoApplication.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleMongoApplication.java new file mode 100644 index 0000000000..8c59960d05 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleMongoApplication.java @@ -0,0 +1,24 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package smoketest.data.mongo; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ExampleMongoApplication { + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleReactiveRepository.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleReactiveRepository.java new file mode 100644 index 0000000000..fc866b85d8 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleReactiveRepository.java @@ -0,0 +1,23 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package smoketest.data.mongo; + +import org.springframework.data.mongodb.repository.ReactiveMongoRepository; + +interface ExampleReactiveRepository extends ReactiveMongoRepository { + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleRepository.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleRepository.java new file mode 100644 index 0000000000..814ca2f8df --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleRepository.java @@ -0,0 +1,23 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package smoketest.data.mongo; + +import org.springframework.data.mongodb.repository.MongoRepository; + +interface ExampleRepository extends MongoRepository { + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleService.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleService.java new file mode 100644 index 0000000000..4368a956ba --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/main/java/smoketest/data/mongo/ExampleService.java @@ -0,0 +1,35 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package smoketest.data.mongo; + +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.stereotype.Service; + +@Service +public class ExampleService { + + private final MongoTemplate mongoTemplate; + + public ExampleService(MongoTemplate mongoTemplate) { + this.mongoTemplate = mongoTemplate; + } + + public boolean hasCollection(String collectionName) { + return this.mongoTemplate.collectionExists(collectionName); + } + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/DataMongoTestReactiveSslIntegrationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/DataMongoTestReactiveSslIntegrationTests.java new file mode 100644 index 0000000000..594e722aab --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/DataMongoTestReactiveSslIntegrationTests.java @@ -0,0 +1,64 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package smoketest.data.mongo; + +import java.time.Duration; + +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.data.mongodb.core.ReactiveMongoTemplate; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Smoke tests for MongoDB using reactive repositories with SSL. + * + * @author Scott Frederick + */ +@Testcontainers(disabledWithoutDocker = true) +@SpringBootTest(properties = { "spring.data.mongodb.ssl.bundle=client", + "spring.ssl.bundle.pem.client.keystore.certificate=classpath:ssl/test-client.crt", + "spring.ssl.bundle.pem.client.keystore.private-key=classpath:ssl/test-client.key", + "spring.ssl.bundle.pem.client.truststore.certificate=classpath:ssl/test-ca.crt" }) +class DataMongoTestReactiveSslIntegrationTests { + + @Container + @ServiceConnection + static final MongoDBContainer mongoDB = new SecureMongoContainer(); + + @Autowired + private ReactiveMongoTemplate mongoTemplate; + + @Autowired + private ExampleReactiveRepository exampleRepository; + + @Test + void testRepository() { + ExampleDocument exampleDocument = new ExampleDocument(); + exampleDocument.setText("Look, new @DataMongoTest!"); + exampleDocument = this.exampleRepository.save(exampleDocument).block(Duration.ofSeconds(30)); + assertThat(exampleDocument.getId()).isNotNull(); + assertThat(this.mongoTemplate.collectionExists("exampleDocuments").block(Duration.ofSeconds(30))).isTrue(); + } + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/DataMongoTestSslIntegrationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/DataMongoTestSslIntegrationTests.java new file mode 100644 index 0000000000..1c880f3d8b --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/DataMongoTestSslIntegrationTests.java @@ -0,0 +1,65 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package smoketest.data.mongo; + +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.data.mongodb.core.MongoTemplate; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Smoke tests for MongoDB with SSL. + * + * @author Scott Frederick + */ +@Testcontainers(disabledWithoutDocker = true) +@SpringBootTest(properties = { "spring.data.mongodb.ssl.bundle=client", + "spring.ssl.bundle.pem.client.keystore.certificate=classpath:ssl/test-client.crt", + "spring.ssl.bundle.pem.client.keystore.private-key=classpath:ssl/test-client.key", + "spring.ssl.bundle.pem.client.truststore.certificate=classpath:ssl/test-ca.crt" }) +@ImportAutoConfiguration(SslAutoConfiguration.class) +class DataMongoTestSslIntegrationTests { + + @Container + @ServiceConnection + static final MongoDBContainer mongoDB = new SecureMongoContainer(); + + @Autowired + private MongoTemplate mongoTemplate; + + @Autowired + private ExampleRepository exampleRepository; + + @Test + void testRepository() { + ExampleDocument exampleDocument = new ExampleDocument(); + exampleDocument.setText("Look, new @DataMongoTest!"); + exampleDocument = this.exampleRepository.save(exampleDocument); + assertThat(exampleDocument.getId()).isNotNull(); + assertThat(this.mongoTemplate.collectionExists("exampleDocuments")).isTrue(); + } + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/SecureMongoContainer.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/SecureMongoContainer.java new file mode 100644 index 0000000000..c7beaf09e1 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/java/smoketest/data/mongo/SecureMongoContainer.java @@ -0,0 +1,51 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package smoketest.data.mongo; + +import java.time.Duration; + +import com.github.dockerjava.api.command.InspectContainerResponse; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.MountableFile; + +import org.springframework.boot.testsupport.testcontainers.DockerImageNames; + +/** + * A {@link MongoDBContainer} for MongoDB with SSL configuration. + * + * @author Scott Frederick + */ +class SecureMongoContainer extends MongoDBContainer { + + SecureMongoContainer() { + super(DockerImageNames.mongo()); + withStartupAttempts(5); + withStartupTimeout(Duration.ofMinutes(5)); + } + + @Override + public void configure() { + withCopyFileToContainer(MountableFile.forClasspathResource("/ssl/test-server.pem"), "/ssl/server.pem"); + withCopyFileToContainer(MountableFile.forClasspathResource("/ssl/test-ca.crt"), "/ssl/ca.crt"); + withCommand("mongod --tlsMode requireTLS --tlsCertificateKeyFile /ssl/server.pem --tlsCAFile /ssl/ca.crt"); + } + + @Override + protected void containerIsStarted(InspectContainerResponse containerInfo, boolean reused) { + } + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-ca.crt b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-ca.crt new file mode 100644 index 0000000000..5854a6af12 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-ca.crt @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIIFhjCCA26gAwIBAgIUDZ27G/Rq0YhtKcRQD0emU7stb10wDQYJKoZIhvcNAQEL +BQAwOzEZMBcGA1UECgwQU3ByaW5nIEJvb3QgVGVzdDEeMBwGA1UEAwwVQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MB4XDTIzMDUwMjE5MTY0M1oXDTMzMDQyOTE5MTY0M1ow +OzEZMBcGA1UECgwQU3ByaW5nIEJvb3QgVGVzdDEeMBwGA1UEAwwVQ2VydGlmaWNh +dGUgQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsbUG +UlbE13ZviqIwbwa5K7LDrwKfnolV3nPCPDo4vKFzLbBtgTN6AIzN978Rv6vVzUWL +LO3JlJ98iGLcQxmQFNW8YG4rPO5HFFm6nrnkvTX1X0e2wM5tnjpqxqbONTkm2fN/ +mf3IR6L95O/D0cIDvvqxAVfEdhIrDFWnOEHt0wWUpFh1/f01prEDO2WADZNwn7l4 +nkxW3hMldGyjE8wpT+osRMTYWRlqS4ZBeY9gneXycMP8x2+uP1BlJi1eSkSWjJcr +CdxJQZpy1ShiOHgrH92naf1FXYo7ZN/P0FfjZm26UhRYcibDyxS8B93OXHhaohlo +anBrYB1XrYs8hpJQX2tREUVLB6BdeK2QtOad+ejHNhBgNF8yH0yqNxBQznNe+oSY +Vh6o03r3s8WsdEWWZJUS3h2YXe8RTBRm5Bppp+reQHkfhd/7ser2oRaOdBtcDy/P +deYFK6VYJSFNNcQh8HICuMUEJ62LO9w2caOSPsb5vfdL4kFthVcXeAhZEwT0wNkT +RDBGJgjEPZ5TAXPyqrl9wizXikp+3i+2o7BiZNI20a6ISX1BBSQtBfMO1Axn7pPB +2jJI+HLSdAC4yZiCWc8YEUovboXswFfZF8OsQYflcEdegRLx6fHjRrgsLOGf9FZK +sJ2dHpjLRSe9nPKUkHfB9+dkUJjNsi4fMWaYOzUCAwEAAaOBgTB/MB0GA1UdDgQW +BBSHD3XlcpjpyBY7ZJYTQcgDBALrizAfBgNVHSMEGDAWgBSHD3XlcpjpyBY7ZJYT +QcgDBALrizAPBgNVHRMBAf8EBTADAQH/MCwGA1UdEQQlMCOCC2V4YW1wbGUuY29t +gglsb2NhbGhvc3SCCTEyNy4wLjAuMTANBgkqhkiG9w0BAQsFAAOCAgEAlH2MoUaJ +rBoIa5r+hSVzAF9NrbYLbCckwMz/nFjJGOhIHr9A4v7/wqWIqj8IkZXA7C+CGxGo +CroLI1TnFuNQ/dvjvMp8LLeZpXjrCsK1M2oZT9mZKq27CFGZ/MgUcxj5yvis+Jqx +FgKSQIKbSL+VazjeWMlKQ6E8OFG7wWTtVXf+EXpJ09vv9rjVFnH7conRXY3Ehk6g +5v3hNyLExGpF+ZiCdph8bzl6OpCDnZsSThgg9n7nQJFMNNLJeSqdsubxsMasESjd +svLStlHKgpn5RYxGt32TY+SNQqZjx1JGmGfJ3ZgkqrMGt2Sn6fap+5l//k6jQS2n +amt7fJQUsb0esHJnx2/De5gTpGe3GC0oV4pYdVTa7Q6p/v39QC2xodORv0CAMYZ+ +gZIFyiJyEnntguWyGwPix1duqWZ77oXP3vIeuDSHHFO0MDYokFbQJnRfqq3Yweof +WNwfSl1oz2N0SkM0ReAL2ILzHqzveHLHlF9+z9AlFkosBjMlado9IYUqcH3Fz6dF +mVr1aR4Pzx9mPLngxjHN0IrCbmurxO9UCQdKVjlip+io0XsXEIfcVpAatyCKMoCQ +asinymcbBUmIdgRE40b/C95ZufXDwzIVlOspy1kBW7MHygK/Z8Dar4sd6IxIIfun +/Ytm09/9WUCrCX0dvH08KiRgamTaDEVUgQk= +-----END CERTIFICATE----- diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-ca.key b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-ca.key new file mode 100644 index 0000000000..dd4d476f3a --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-ca.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-client.crt b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-client.crt new file mode 100644 index 0000000000..07fd2b75ce --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-client.crt @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEGjCCAgKgAwIBAgIUfNbd10WD9F5RGiWEGJ4MMEgYtWQwDQYJKoZIhvcNAQEL +BQAwOzEZMBcGA1UECgwQU3ByaW5nIEJvb3QgVGVzdDEeMBwGA1UEAwwVQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MB4XDTIzMDUwMjE5MTY0M1oXDTI0MDUwMTE5MTY0M1ow +LzEZMBcGA1UECgwQU3ByaW5nIEJvb3QgVGVzdDESMBAGA1UEAwwJbG9jYWxob3N0 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwKlofgVj8ayX20VxeXwv +u0Ac41e6HzfPy8XzBjo67uMFCpXZNhnDIt5VZGilsqAiHfN/VzuQfDkGkwdw28RT +wmcfJflgaNNjGIHvOBcVpsRMmMrqnYWIqJ4yTdaKdWeGEH8imotTarrXJufliAyN +PyZQpOSv0i0huAXl41qN9196o7MqbhQlBLAzf8Jhc9JCbplyVAfxCjIb2zyjr7h5 +SbppJitbJTK8T5kD98ZHop6AJWNd6ow4iBULH0ByMEWVa6/nYlxmxNjPwAXf55lu +z+DFFsAOz0eMR7xxF7U5ueWrfsvHvAA0BMrixQqiOZq1Z1CYVlc4LwQJDtFdhy1G +UwIDAQABoyIwIDALBgNVHQ8EBAMCBaAwEQYJYIZIAYb4QgEBBAQDAgeAMA0GCSqG +SIb3DQEBCwUAA4ICAQCU5rbionr7KK7wqzBoaZFwkBoNucQCrLX2V+BwU1sYrQFG +uwqgl6pX3dZ95wOJ93Pz8hMXl7cUMVzu92al91gR6RJeEEAfzE1nvv+3u8I/iT2w +jcmS5j/pZEYJsfcwhtwVQN72g4QYrNCfq2heGY4ovdaMwtlUQiSEgvYxF/cchrDx +ylWOENfUtRFEQ00r13mvVbyTi+JOqEv80kqxBfZGlRflkrB7moyBruyz5Skr8TTx +MIcxnpC7fwLxNwfk8iJiW9v5Aj/bd0ulmzwrPEn+ONo9mdKNRqi15wwqky8vpLNT +I+P5t4cpZUCDCJFPPXhQKMNdSwZQpv4hMJqp5/qORfA5A3Wl9EzTtmwmra43pZ39 +4PMl0AHt5sq0pFfVPZ0eaySBFZfgxEuvzw6tSsadisHfCkToNVFVV08hKtqtezXE +C3152LiHlnUl/1VkZlWqRx6zyY1myshWy/OU9LeNAB6Hw7QTPGFPNKQ3NpxKvprx +D/lD/kvZe8UJHcV50Q6pu4/KF4tLhP+poCBDGNlj078vwZa3IEXJpn2yYkpxmJGj +WspnXbGSxIiS4ioVFh+BvHjDW0S/Ci8wMiVoid7sbR9J79JnNnujzLzjpW1wkTx/ +XBUukd8Ncc7FTfXIpf2l+XJiRU/1+zRkfU8gT/T5h7kDVU5YqanbluJgEokQ4g== +-----END CERTIFICATE----- diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-client.key b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-client.key new file mode 100644 index 0000000000..8c711bc876 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-client.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAwKlofgVj8ayX20VxeXwvu0Ac41e6HzfPy8XzBjo67uMFCpXZ +NhnDIt5VZGilsqAiHfN/VzuQfDkGkwdw28RTwmcfJflgaNNjGIHvOBcVpsRMmMrq +nYWIqJ4yTdaKdWeGEH8imotTarrXJufliAyNPyZQpOSv0i0huAXl41qN9196o7Mq +bhQlBLAzf8Jhc9JCbplyVAfxCjIb2zyjr7h5SbppJitbJTK8T5kD98ZHop6AJWNd +6ow4iBULH0ByMEWVa6/nYlxmxNjPwAXf55luz+DFFsAOz0eMR7xxF7U5ueWrfsvH +vAA0BMrixQqiOZq1Z1CYVlc4LwQJDtFdhy1GUwIDAQABAoIBAQC4O8euat0t58u3 +ZOqkL3s9Zou5YtSasbZFuF8zH0/nzLOvcagqsewGVfH2eJOrArJdTdIByvXZtHZy +9vSXU2B9UDtbBuOImkvyzZ3CV2De/mv42GIOi/kotU6JXJU+u+ZZtBmVC5KTR2Qi +0jKOLOKM9si7RexT4dCStyEkjh2f5MTQh79xOncmxG9YPWR3RzXfMNzfkYaMtdxZ +Bsf2iKnO6zJmsPlqlyZi1/9csNI1XLNhcWyVpR67i3WTfH3Q7kNQ0a15OfB15Lox +jmayuEW+AqHjbMYJR7d5ExdxMFWquXwYm5kZl4H13ws4hBGaCpQ5xRLhTHiK98SV +7/GJ/y9hAoGBAPZB3X8b4maYqK6Cfuvr+IkYIzBZEODPfhpleeeKt5XoitGkcbKS +Xx8og2h3fwcs7OO/VOowffH1SVoTFJhdFRGBa9y0kBXTuPQ59knQMmT3EeI2L5lx +AtJHZ5LHUtfYXM0gFLZOWhkxFZyoNu4IDtbIuDop0/xDlAPMBUd8Yiz7AoGBAMhI +t+xVCatl0Fk4luToETmJSHtx3c1NMI7NPPFO3vtzEthb4JACQH0P0s97igL095DS +TX+FArbCEsnhOwytD5LgseZHYljmYm7ENLmeAPi2ttGIU/alhrolJoC4SdhSdfXd +qqKG4f/P44KnB6OAkmeCycJ7G8n6YxLCM+bQG1yJAoGBAIwCZLmZE/66+uTFIv5l +mlfv1kntya/XqN2/JjEj6D8eCJcrBM2/dL+VXCkwD5P30fOm29OOoHzJtdu1j3cV +LR5X1AiWzHjseHK65bGP4qcO5icUIbn+y9jcaiHEm/BGfnTNsZj5MTazdpMr/JcX +E8DAPCYtk+4QSf5ip/m92V+zAoGBAKEe7ucumfLKm0vLXIiVsJWqvSahuZ9ZQ4D9 +1tMBchyyvCxV7VesmBiDzEGhzqsGSsq0hCfb5w0DH35MtOZDqs2r+TGZp6KA5Brb +uNbCJ2HuCzCRDYrUKohBLrJKjw15eO/r/UN2YwUaRppqqJh97EldS9Yql3Zq+Zyz +onFCZWCRAoGAYP3BaT2pgtEIHsRCzv7XKpC37aIw/Wqc/XKkw50OT3+Atgbryp5s +JgIaD6mop/BZG5PPvRJeH75X2BOOhWENeR3q+I8dW9sCq68sy8gDVHlmCCUctsz0 +7FNihJKloin0e11hzYVZYbOjD+96lyF03y2t3kzf6oOnSMmOXhXKWxI= +-----END RSA PRIVATE KEY----- diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-server.pem b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-server.pem new file mode 100644 index 0000000000..b81be5dedf --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-data-mongo/src/test/resources/ssl/test-server.pem @@ -0,0 +1,51 @@ +-----BEGIN CERTIFICATE----- +MIIEGjCCAgKgAwIBAgIUfNbd10WD9F5RGiWEGJ4MMEgYtWMwDQYJKoZIhvcNAQEL +BQAwOzEZMBcGA1UECgwQU3ByaW5nIEJvb3QgVGVzdDEeMBwGA1UEAwwVQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MB4XDTIzMDUwMjE5MTY0M1oXDTI0MDUwMTE5MTY0M1ow +LzEZMBcGA1UECgwQU3ByaW5nIEJvb3QgVGVzdDESMBAGA1UEAwwJbG9jYWxob3N0 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Tc0YVQluRdSzPDnfkcF +IZ/Gl58wFJz//4S0hPsQ/yGmV2DxDGR6nMEPOvPSRAxufnejossQxHT/td48A9rq +WT7ijTOWdzjAHDe9UKMWlsdBeOQgHfr6X+gINxiPDKGgA+Ih94ku0pxluO8vyIy8 +vhDchIAveQNa/U7olja9IGp2Lmy+Kk566pAguT/V5I6V1/jX4VBhi+YFUKLs3fAh +0d0QNiVdypLe+s1cXBocanBg6iMQWQN9vL8ZM5dDP/w2Fl2FYCOwjicLUb+Dxeoc +h8SYn/BBrQRePn5A483w49B5pgRUyOFwgr0bchw1B6P2bGdPzwYfpUw1sJGVocSB +cwIDAQABoyIwIDALBgNVHQ8EBAMCBaAwEQYJYIZIAYb4QgEBBAQDAgZAMA0GCSqG +SIb3DQEBCwUAA4ICAQCHWmclf0/GHHNdhb9cw2CaeXWxy7u8U5MYdTq7MdRIK+Nn +xO9I9TWVIt+un3C0Bs2IKkg1l72wnoLL1Gy5EsK0hO3p+UD2/FRgVI2HBlda/TKW +7ZlFd1i7u67Cf++7mHnaSQYokkTrEMZacj6PSoNv2pmkSzb5VYT9q3hVtVhtliOq +U30hkUy9FU3VJNpGAOUkasIRB/KAG6TTJ+/L3N0jcTfAlXPwuJcj2XsMoAibAfEE +HXTHmW+6cK358Mb8HDx9wdT5yPfly5KTVbqYhwX6XeL2an/BVdwoUY0dqyWgaoDr +dxBaYew0O2rDy748OWnYR4ARTO+I8XfT+aEjMqQownpG6WDaubmN2o9MVweYx7CT +qWkxmx8Nb+w1i9PIY73uJTjx6CBDHMgbPovMttvxsVg+VDaTNGFGDey0q5R6U6rA +VwxEkeZwwV1ZZGlw9cGhxYxKQnrC/BGcV/w/4+g9fYFW5+M2hyy7YpHAuiw9kwmV +uYp/Njd8AtXRw3LLPpxsdJkyOJrnczF+MAaaswYQFFHhbi3n7tlchCq1T1Tj+Xae +WdyHAkQSy/smlezB2I6gFVU6pFQNmasO4ZhAItbSzvjxk5GlfzdBbhgXsxSA52oa +xpLEY1NPLSbHun50WSOzhJ+rpbgRKoPGixMzVteDoZHGVQyM/an8pgW4opLWhA== +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEA+Tc0YVQluRdSzPDnfkcFIZ/Gl58wFJz//4S0hPsQ/yGmV2Dx +DGR6nMEPOvPSRAxufnejossQxHT/td48A9rqWT7ijTOWdzjAHDe9UKMWlsdBeOQg +Hfr6X+gINxiPDKGgA+Ih94ku0pxluO8vyIy8vhDchIAveQNa/U7olja9IGp2Lmy+ +Kk566pAguT/V5I6V1/jX4VBhi+YFUKLs3fAh0d0QNiVdypLe+s1cXBocanBg6iMQ +WQN9vL8ZM5dDP/w2Fl2FYCOwjicLUb+Dxeoch8SYn/BBrQRePn5A483w49B5pgRU +yOFwgr0bchw1B6P2bGdPzwYfpUw1sJGVocSBcwIDAQABAoIBAQCkUi4Lbrxgymwi +DUXWEWXkwcDkAGZncQ2qoQmWFSUj1EAlpRnLHgVqjjFIobOmgrvoT2Jp2JL5tltU +w2+26wVSSxB+IeG4QocJFAeTv7UJPeCBoYk7u1yTGB8ylNLddURYyyWyXZWt8Mlx +ouRSy9k3SU7dXtfuZrP8Cad6RCV31O102IgT53kSaCVdIcJ9Owos8Vvk3iu+bedL +EmW3Z6V7qg5ASDVLHaaMFjpiQsLvV7ljg+HP7y4sKxEovKqc6G7lF4CnMMlN0zwm +4QRE6tHzNV93QoUAgPBxel7GaAVZTO9AJ2zZxkKzqr5InqTL/IDCAvru08jIuuTW +DyhyHCrBAoGBAP717gmCSEbvrnRlQi71AAZHx6FkNXmxbL8yfLyX5vwDwuHleo5i +JCxWKW+kcP1WcU997wpV5jGUUjjNeyoUA7HVBHgU9fumAyaMyb5LJmM+6nVdTlWI +1UvGHTQHsAJ/XC0KxQjYJfA+uLmSHkJzEAUm8zptkgTQ9N325/7qyyjpAoGBAPo7 +R4iHm/aLwi5YvEYjljHdbIWTlNjxwhvQCI//0CadaEyJ7bi1yTwTfamy9jmJC1zO +xpUSoVNLaymZthYIz1UKpATvsvnx2lN4ROzCBvWO238PJo284GpxfYJMVHWx9Dya +u9e/C3nbJhd+VKWeyJ3j0qczucbR8x5HHFC6yR37AoGBAMD72a9s49R9u2jy9EOi +wt/+GQb6WNfCCnQ2fOArgnUjS7G9ByUa+BJvLXIJ4FSBx8bJpdQG7PR+NjY0opNZ +DureOEHEa+SM5jmZu2LEc0wP5VvswkxQBFMUpCor33gketrFGhr1sNHGSAB+r1TQ +z0F3GAgTw8DNgWs5ZqU3h4txAoGBAKHPcXtlDcKJL4Ee2miUnIwUPhfGjksXUkj/ +5nmPl39Q7GAKFRILY1yY0frJghVEfHeAMsO1L2MYcuyMvEVVXxUD83pJsjeUYHT3 +YcKj2TIzNdbc6jZfe9L5HosCZt9Qurnx6SQjIv2ia+hnRb9vhRUsfEyo0yoxG4Bp +xXKixmi/AoGAJ+fLUO/ThUGPAkx7N6wTvlV44gu+UN4V1/b4NTVez3G6l4xLnbBC +tiSHWpSY2FJaCEBQNCjw7xoVG/XI1AZiQOhb/RC/MFGaB1+Gl4gH/kzAwxKILyLT +qCrP9vW4wwPulRgLkJUDH4xtzuu2C9/1JWe5h+Bk5YgCwIjz5qVwPC0= +-----END RSA PRIVATE KEY-----