Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/BuildMatrix.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ public static void main(String... args) throws Exception {
.map(Semver::parse)
.filter(it -> it.getPreRelease().isEmpty() || it.getPreRelease().get(0).equals(""))
.filter(it -> it.isGreaterThanOrEqualTo("7.0.0"))
// these releases refuse to start on Linux 6.19 and newer, which the runners use
// (https://jira.mongodb.org/browse/SERVER-121912). Later patch releases are picked up automatically.
.filter(it -> !it.isEqualTo("8.0.34") && !it.isEqualTo("8.3.13"))
.map(it -> format("'%s'", it))
.collect(Collectors.toList());
System.out.println(result);
Expand Down
31 changes: 26 additions & 5 deletions core/src/test/java/dev/morphia/test/MongoExtension.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.semver4j.Semver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.MongoDBContainer;
Expand All @@ -25,21 +24,43 @@ public class MongoExtension implements BeforeAllCallback, AfterAllCallback {
private static MongoDBContainer container;
private static MongoClient mongoClient;

/**
* The server version to test against when {@code -Dmongodb} isn't given. A version without a patch number uses that
* release line's latest image. Not 8.0 or 8.3: 8.0.34 and 8.3.13 refuse to start on Linux 6.19 and newer
* (SERVER-121912).
*/
static final String DEFAULT_MONGODB = "8.2";

/**
* @return the server version to test against, from {@code -Dmongodb}: a version such as {@code 8.2.12} or
* {@code 8.2}, or {@code local}
*/
static String mongodbVersion() {
return System.getProperty("mongodb", DEFAULT_MONGODB);
}

/**
* @param version a server version such as {@code 8.2.12}, or {@code 8.2} for that line's latest release
* @return the image for exactly that version
*/
static DockerImageName imageName(String version) {
return DockerImageName.parse("mongo:" + version)
.asCompatibleSubstituteFor("mongo");
}

@Override
public void beforeAll(ExtensionContext context) {
synchronized (LOCK) {
if (mongoClient != null) {
return;
}
String mongodb = System.getProperty("mongodb", "8.0.0");
String mongodb = mongodbVersion();
String connectionString;
if ("local".equals(mongodb)) {
LOG.info("'local' mongodb property specified. Using local server.");
connectionString = "mongodb://localhost:27017/";
} else {
int version = Semver.parse(mongodb).getMajor();
DockerImageName imageName = DockerImageName.parse("mongo:" + version)
.asCompatibleSubstituteFor("mongo");
DockerImageName imageName = imageName(mongodb);
LOG.info("Running tests using " + imageName);
container = new MongoDBContainer(imageName);
container.start();
Expand Down
8 changes: 2 additions & 6 deletions core/src/test/java/dev/morphia/test/TestBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.utility.DockerImageName;

import static com.mongodb.MongoClientSettings.builder;
import static dev.morphia.internal.MorphiaInternals.proxyClassesPresent;
Expand Down Expand Up @@ -267,17 +266,14 @@ protected void withSharding(Runnable body) {
var savedDatastore = datastore;
var savedDatabase = database;
try {
String mongodb = System.getProperty("mongodb", "8.0.0");
String mongodb = MongoExtension.mongodbVersion();
if ("local".equals(mongodb)) {
morphiaConfig = MorphiaConfig.load();
datastore = null;
database = null;
body.run();
} else {
int version = Semver.parse(mongodb).getMajor();
DockerImageName imageName = DockerImageName.parse("mongo:" + version)
.asCompatibleSubstituteFor("mongo");
MongoDBContainer shardedContainer = new MongoDBContainer(imageName).withSharding();
MongoDBContainer shardedContainer = new MongoDBContainer(MongoExtension.imageName(mongodb)).withSharding();
shardedContainer.start();
try (MongoClient shardedClient = MongoClients.create(builder()
.uuidRepresentation(UuidRepresentation.STANDARD)
Expand Down
Loading