Update test for MongoDB Server 5.0.

Update assertions for changed return types, add a bit of think time and disable tests for no longer supported features.

See #3696
Original pull request: #3753.
This commit is contained in:
Christoph Strobl
2021-07-06 07:54:31 +02:00
committed by Mark Paluch
parent b7ffff4769
commit 63d9875576
5 changed files with 48 additions and 20 deletions

View File

@@ -21,10 +21,9 @@ import java.util.Collections;
import java.util.Set;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.dao.DataAccessException;
@@ -32,7 +31,7 @@ import org.springframework.data.mongodb.core.CollectionCallback;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.MongoException;
import com.mongodb.client.MongoClient;
@@ -41,7 +40,7 @@ import com.mongodb.client.MongoCollection;
/**
* @author Oliver Gierke
*/
@RunWith(SpringRunner.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration
public abstract class AbstractIntegrationTests {
@@ -71,8 +70,8 @@ public abstract class AbstractIntegrationTests {
@Autowired MongoOperations operations;
@Before
@After
@BeforeEach
@AfterEach
public void cleanUp() {
for (String collectionName : operations.getCollectionNames()) {

View File

@@ -21,8 +21,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.geo.Point;
@@ -35,6 +35,7 @@ import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
import org.springframework.data.mongodb.core.index.IndexInfo;
import org.springframework.data.mongodb.core.index.IndexOperations;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
@@ -52,7 +53,7 @@ public class GeoSpatialIndexTests extends AbstractIntegrationTests {
@Autowired private MongoTemplate template;
@Before
@BeforeEach
public void setUp() {
template.setWriteConcern(WriteConcern.JOURNALED);
@@ -82,6 +83,7 @@ public class GeoSpatialIndexTests extends AbstractIntegrationTests {
}
@Test // DATAMONGO-778
@EnableIfMongoServerVersion(isLessThan = "5.0")
public void testHaystackIndex() {
try {

View File

@@ -155,7 +155,11 @@ public class IndexingIntegrationTests {
});
assertThat(indexInfo).isPresent();
assertThat(indexInfo.get()).containsEntry("expireAfterSeconds", 11L);
assertThat(indexInfo.get()).hasEntrySatisfying("expireAfterSeconds", timeout -> {
// MongoDB 5 returns int not long
assertThat(timeout).isIn(11, 11L);
});
}
@Target({ ElementType.FIELD })

View File

@@ -38,13 +38,16 @@ import org.springframework.data.mongodb.core.ChangeStreamOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.messaging.ChangeStreamRequest.ChangeStreamRequestOptions;
import org.springframework.data.mongodb.core.messaging.SubscriptionRequest.RequestOptions;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoServerCondition;
import org.springframework.data.mongodb.test.util.MongoTemplateExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Template;
import org.springframework.util.ErrorHandler;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.changestream.ChangeStreamDocument;
@@ -60,9 +63,12 @@ public class DefaultMessageListenerContainerTests {
static final String DATABASE_NAME = "change-stream-events";
static final String COLLECTION_NAME = "collection-1";
static final String COLLECTION_2_NAME = "collection-2";
static final String COLLECTION_3_NAME = "collection-3";
static final Duration TIMEOUT = Duration.ofSeconds(2);
@Client static MongoClient client;
@Template(database = DATABASE_NAME, initialEntitySet = Person.class) //
static MongoTemplate template;
@@ -74,10 +80,13 @@ public class DefaultMessageListenerContainerTests {
private CollectingMessageListener<Object, Object> messageListener;
@BeforeEach
void beforeEach() {
void beforeEach() throws InterruptedException {
template.dropCollection(COLLECTION_NAME);
template.dropCollection(COLLECTION_2_NAME);
MongoTestUtils.dropCollectionNow(DATABASE_NAME, COLLECTION_NAME, client);
MongoTestUtils.dropCollectionNow(DATABASE_NAME, COLLECTION_2_NAME, client);
MongoTestUtils.dropCollectionNow(DATABASE_NAME, COLLECTION_3_NAME, client);
Thread.sleep(100);
messageListener = new CollectingMessageListener<>();
}
@@ -281,7 +290,7 @@ public class DefaultMessageListenerContainerTests {
@Test // DATAMONGO-1803
public void callsDefaultErrorHandlerOnError() throws InterruptedException {
dbFactory.getMongoDatabase().createCollection(COLLECTION_NAME,
dbFactory.getMongoDatabase().createCollection(COLLECTION_3_NAME,
new CreateCollectionOptions().capped(true).maxDocuments(10000).sizeInBytes(10000));
collection.insertOne(new Document("_id", "id-1").append("value", "foo"));
@@ -298,10 +307,7 @@ public class DefaultMessageListenerContainerTests {
Document.class);
SubscriptionUtils.awaitSubscription(subscription);
template.dropCollection(COLLECTION_NAME);
Thread.sleep(20);
dbFactory.getMongoDatabase().drop();
verify(errorHandler, atLeast(1)).handleError(any(DataAccessException.class));
} finally {

View File

@@ -166,6 +166,23 @@ public class MongoTestUtils {
.verifyComplete();
}
/**
* Create a {@link com.mongodb.client.MongoCollection} if it does not exist, or drop and recreate it if it does and
* verify operation result.
*
* @param dbName must not be {@literal null}.
* @param collectionName must not be {@literal null}.
* @param client must not be {@literal null}.
*/
public static void dropCollectionNow(String dbName, String collectionName,
com.mongodb.client.MongoClient client) {
com.mongodb.client.MongoDatabase database = client.getDatabase(dbName)
.withWriteConcern(WriteConcern.MAJORITY).withReadPreference(ReadPreference.primary());
database.getCollection(collectionName).drop();
}
/**
* Remove all documents from the {@link MongoCollection} with given name in the according {@link MongoDatabase
* database}.