Browse Source

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.
pull/3833/head
Christoph Strobl 5 years ago committed by Mark Paluch
parent
commit
63d9875576
No known key found for this signature in database
GPG Key ID: 4406B84C1661DCD1
  1. 15
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractIntegrationTests.java
  2. 8
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/GeoSpatialIndexTests.java
  3. 6
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/IndexingIntegrationTests.java
  4. 22
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainerTests.java
  5. 17
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoTestUtils.java

15
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractIntegrationTests.java

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

8
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/GeoSpatialIndexTests.java

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

6
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/IndexingIntegrationTests.java

@ -155,7 +155,11 @@ public class IndexingIntegrationTests {
}); });
assertThat(indexInfo).isPresent(); 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 }) @Target({ ElementType.FIELD })

22
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainerTests.java

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

17
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoTestUtils.java

@ -166,6 +166,23 @@ public class MongoTestUtils {
.verifyComplete(); .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 * Remove all documents from the {@link MongoCollection} with given name in the according {@link MongoDatabase
* database}. * database}.

Loading…
Cancel
Save