Skip to content

Commit 0984808

Browse files
committed
Fix failed tests: initializationError caused by mongodb setup
Test using Embedded MongoDB Closes gh-43
1 parent bb75cf4 commit 0984808

17 files changed

+532
-55
lines changed

grace-datastore-gorm-mongodb/build.gradle

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,19 @@ plugins {
33
}
44

55
dependencies {
6-
api libs.mongodb.driver.sync
6+
api project(":grace-datastore-gorm-bson")
7+
implementation libs.caffeine
78
api libs.grace.datastore.core
89
api libs.grace.datastore.gorm
910
api libs.grace.datastore.gorm.validation
10-
api project(":grace-datastore-gorm-bson")
11-
12-
implementation libs.caffeine
13-
14-
compileOnly libs.grace.datastore.gorm.support
15-
compileOnly libs.jakarta.servlet
11+
api libs.grace.datastore.gorm.support
12+
api libs.mongodb.driver.sync
1613

17-
// testImplementation "org.testcontainers:mongodb:1.19.8"
14+
testImplementation libs.embedmongo
1815
testImplementation libs.grace.datastore.gorm.tck
1916
testImplementation libs.grace.test.support
2017
testImplementation libs.jakarta.validation
2118
testImplementation libs.hibernate.validator
22-
testImplementation libs.grace.datastore.gorm.support
2319
testRuntimeOnly libs.glassfish.expressly
2420
}
2521

grace-datastore-gorm-mongodb/src/test/groovy/grails/gorm/tests/GormDatastoreSpec.groovy

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@ package grails.gorm.tests
22

33
import com.mongodb.BasicDBObject
44
import com.mongodb.client.MongoClient
5+
import de.flapdoodle.embed.mongo.commands.ServerAddress
6+
import de.flapdoodle.embed.mongo.distribution.Version
7+
import de.flapdoodle.embed.mongo.transitions.ImmutableMongod
8+
import de.flapdoodle.embed.mongo.transitions.Mongod
9+
import de.flapdoodle.embed.mongo.transitions.RunningMongodProcess
10+
import de.flapdoodle.reverse.TransitionWalker
11+
512
import grails.core.DefaultGrailsApplication
613
import grails.core.GrailsApplication
714
import grails.gorm.validation.PersistentEntityValidator
@@ -34,6 +41,11 @@ abstract class GormDatastoreSpec extends Specification {
3441

3542
static final CURRENT_TEST_NAME = "current.gorm.test"
3643

44+
@Shared
45+
protected TransitionWalker.ReachedState<RunningMongodProcess> running
46+
@Shared
47+
protected ServerAddress serverAddress
48+
3749
List getDomainClasses() {
3850
[ Book, ChildEntity, City, ClassWithListArgBeforeValidate, ClassWithNoArgBeforeValidate,
3951
ClassWithOverloadedBeforeValidate, CommonTypes, Country, EnumThing, Face, Highway,
@@ -59,8 +71,16 @@ abstract class GormDatastoreSpec extends Specification {
5971

6072
def databaseName = System.getProperty(GormDatastoreSpec.CURRENT_TEST_NAME) ?: 'test'
6173

74+
ImmutableMongod mongodbConfig = Mongod.instance()
75+
Version.Main version = Version.Main.V7_0
76+
77+
this.running = mongodbConfig.start(version)
78+
this.serverAddress = running.current().getServerAddress()
6279

63-
def config = [(MongoSettings.SETTING_DATABASE_NAME): databaseName]
80+
def config = [
81+
(MongoSettings.SETTING_DATABASE_NAME): databaseName,
82+
(MongoSettings.SETTING_URL): "mongodb://$serverAddress".toString()
83+
]
6484
// disable decimal type support on Travis, since MongoDB 3.4 support doesn't exist there yet
6585
if(System.getenv('TRAVIS')) {
6686
config.put(MongoSettings.SETTING_DECIMAL_TYPE, false)
@@ -131,4 +151,13 @@ abstract class GormDatastoreSpec extends Specification {
131151
}
132152
}
133153

154+
void cleanupSpec() {
155+
this.serverAddress = null
156+
if (this.running != null) {
157+
this.running.close()
158+
}
159+
this.running = null
160+
this.mongoDatastore.close()
161+
}
162+
134163
}

grace-datastore-gorm-mongodb/src/test/groovy/grails/mongodb/bootstrap/EventsSetupSpec.groovy

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,60 @@
11
package grails.mongodb.bootstrap
22

3+
import de.flapdoodle.embed.mongo.commands.ServerAddress
4+
import de.flapdoodle.embed.mongo.distribution.Version
5+
import de.flapdoodle.embed.mongo.transitions.ImmutableMongod
6+
import de.flapdoodle.embed.mongo.transitions.Mongod
7+
import de.flapdoodle.embed.mongo.transitions.RunningMongodProcess
8+
import de.flapdoodle.reverse.TransitionWalker
9+
310
import grails.gorm.annotation.Entity
411
import grails.mongodb.MongoEntity
12+
13+
import org.grails.datastore.mapping.config.Settings
514
import org.grails.datastore.mapping.mongo.MongoDatastore
615
import spock.lang.AutoCleanup
716
import spock.lang.Shared
817
import spock.lang.Specification
918

19+
import org.grails.datastore.mapping.mongo.config.MongoSettings
20+
1021
/**
1122
* Created by graemerocher on 05/10/2016.
1223
*/
1324
class EventsSetupSpec extends Specification {
1425

15-
@AutoCleanup @Shared MongoDatastore mongoDatastore = new MongoDatastore(MyEventSender)
26+
@Shared
27+
@AutoCleanup
28+
MongoDatastore datastore
29+
30+
@Shared
31+
protected TransitionWalker.ReachedState<RunningMongodProcess> running
32+
33+
@Shared
34+
protected ServerAddress serverAddress
35+
36+
void setupSpec() {
37+
ImmutableMongod mongodbConfig = Mongod.instance()
38+
Version.Main version = Version.Main.V7_0
39+
40+
this.running = mongodbConfig.start(version)
41+
this.serverAddress = running.current().getServerAddress()
42+
43+
Map config = [
44+
(Settings.SETTING_FAIL_ON_ERROR): true,
45+
(MongoSettings.SETTING_URL) : "mongodb://$serverAddress".toString()
46+
]
47+
this.datastore = new MongoDatastore(config, [MyEventSender] as Class[])
48+
}
49+
50+
void cleanupSpec() {
51+
this.serverAddress = null
52+
if (this.running != null) {
53+
this.running.close()
54+
}
55+
this.running = null
56+
this.datastore.close()
57+
}
1658

1759
void 'test events get triggered'() {
1860
setup:

grace-datastore-gorm-mongodb/src/test/groovy/grails/mongodb/bootstrap/FailOnErrorSetupSpec.groovy

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,58 @@
11
package grails.mongodb.bootstrap
22

3+
import de.flapdoodle.embed.mongo.commands.ServerAddress
4+
import de.flapdoodle.embed.mongo.distribution.Version
5+
import de.flapdoodle.embed.mongo.transitions.ImmutableMongod
6+
import de.flapdoodle.embed.mongo.transitions.Mongod
7+
import de.flapdoodle.embed.mongo.transitions.RunningMongodProcess
8+
import de.flapdoodle.reverse.TransitionWalker
9+
310
import grails.gorm.tests.Plant
411
import org.grails.datastore.mapping.config.Settings
512
import org.grails.datastore.mapping.mongo.MongoDatastore
613
import spock.lang.AutoCleanup
714
import spock.lang.Shared
815
import spock.lang.Specification
916

17+
import org.grails.datastore.mapping.mongo.config.MongoSettings
18+
1019
/**
1120
* Created by graemerocher on 16/12/16.
1221
*/
1322
class FailOnErrorSetupSpec extends Specification {
1423

15-
@Shared @AutoCleanup MongoDatastore datastore = new MongoDatastore([(Settings.SETTING_FAIL_ON_ERROR):true],Plant)
24+
@Shared
25+
@AutoCleanup
26+
MongoDatastore datastore
27+
28+
@Shared
29+
protected TransitionWalker.ReachedState<RunningMongodProcess> running
30+
31+
@Shared
32+
protected ServerAddress serverAddress
33+
34+
void setupSpec() {
35+
ImmutableMongod mongodbConfig = Mongod.instance()
36+
Version.Main version = Version.Main.V7_0
1637

38+
this.running = mongodbConfig.start(version)
39+
this.serverAddress = running.current().getServerAddress()
40+
41+
Map config = [
42+
(Settings.SETTING_FAIL_ON_ERROR): true,
43+
(MongoSettings.SETTING_URL) : "mongodb://$serverAddress".toString(),
44+
]
45+
this.datastore = new MongoDatastore(config, [Plant] as Class[])
46+
}
47+
48+
void cleanupSpec() {
49+
this.serverAddress = null
50+
if (this.running != null) {
51+
this.running.close()
52+
}
53+
this.running = null
54+
this.datastore.close()
55+
}
1756

1857
void "test fail on error was configured correctly"() {
1958

grace-datastore-gorm-mongodb/src/test/groovy/org/grails/datastore/gorm/Setup.groovy

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22
package org.grails.datastore.gorm
33

44
import com.mongodb.BasicDBObject
5+
import de.flapdoodle.embed.mongo.commands.ServerAddress
6+
import de.flapdoodle.embed.mongo.distribution.Version
7+
import de.flapdoodle.embed.mongo.transitions.ImmutableMongod
8+
import de.flapdoodle.embed.mongo.transitions.Mongod
9+
import de.flapdoodle.embed.mongo.transitions.RunningMongodProcess
10+
import de.flapdoodle.reverse.TransitionWalker
11+
512
import grails.gorm.tests.GormDatastoreSpec
613
import org.bson.Document
714
import org.grails.datastore.bson.query.BsonQuery
@@ -27,18 +34,34 @@ class Setup {
2734

2835
static MongoDatastore mongo
2936
static AbstractMongoSession session
37+
static TransitionWalker.ReachedState<RunningMongodProcess> running
38+
static ServerAddress serverAddress
3039

3140
static destroy() {
41+
serverAddress = null
42+
if (running != null) {
43+
running.close()
44+
}
45+
running = null
3246
session.nativeInterface.dropDatabase( session.defaultDatabase )
3347
session.disconnect()
3448
TransactionSynchronizationManager.unbindResource(mongo)
3549
mongo.close()
3650
}
3751

3852
static Session setup(classes) {
53+
ImmutableMongod mongodbConfig = Mongod.instance()
54+
Version.Main version = Version.Main.V7_0
55+
56+
running = mongodbConfig.start(version)
57+
serverAddress = running.current().getServerAddress()
58+
3959
def databaseName = System.getProperty(GormDatastoreSpec.CURRENT_TEST_NAME) ?: 'test'
4060

41-
Map<String,Object> config = [(MongoSettings.SETTING_DATABASE_NAME): databaseName]
61+
Map<String,Object> config = [
62+
(MongoSettings.SETTING_DATABASE_NAME): databaseName,
63+
(MongoSettings.SETTING_URL) : "mongodb://$serverAddress".toString()
64+
]
4265

4366
// disable decimal type support on Travis, since MongoDB 3.4 support doesn't exist there yet
4467
if(System.getenv('TRAVIS')) {

grace-datastore-gorm-mongodb/src/test/groovy/org/grails/datastore/gorm/mongo/CountMethodSpec.groovy

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,62 @@
11
package org.grails.datastore.gorm.mongo
22

3+
import de.flapdoodle.embed.mongo.commands.ServerAddress
4+
import de.flapdoodle.embed.mongo.distribution.Version
5+
import de.flapdoodle.embed.mongo.transitions.ImmutableMongod
6+
import de.flapdoodle.embed.mongo.transitions.Mongod
7+
import de.flapdoodle.embed.mongo.transitions.RunningMongodProcess
8+
import de.flapdoodle.reverse.TransitionWalker
9+
310
import grails.gorm.annotation.Entity
11+
import grails.gorm.tests.Plant
412
import grails.mongodb.MongoEntity
13+
14+
import org.grails.datastore.mapping.config.Settings
515
import org.grails.datastore.mapping.mongo.MongoDatastore
616
import spock.lang.AutoCleanup
717
import spock.lang.Shared
818
import spock.lang.Specification
19+
20+
import org.grails.datastore.mapping.mongo.config.MongoSettings
21+
922
import static com.mongodb.client.model.Filters.*
1023
/**
1124
* Created by graemerocher on 29/11/2016.
1225
*/
1326
class CountMethodSpec extends Specification {
1427

15-
@Shared @AutoCleanup MongoDatastore mongoDatastore = new MongoDatastore(CountTest)
28+
@Shared
29+
@AutoCleanup
30+
MongoDatastore datastore
31+
32+
@Shared
33+
protected TransitionWalker.ReachedState<RunningMongodProcess> running
34+
35+
@Shared
36+
protected ServerAddress serverAddress
37+
38+
void setupSpec() {
39+
ImmutableMongod mongodbConfig = Mongod.instance()
40+
Version.Main version = Version.Main.V7_0
41+
42+
this.running = mongodbConfig.start(version)
43+
this.serverAddress = running.current().getServerAddress()
44+
45+
Map config = [
46+
(Settings.SETTING_FAIL_ON_ERROR): true,
47+
(MongoSettings.SETTING_URL) : "mongodb://$serverAddress".toString()
48+
]
49+
this.datastore = new MongoDatastore(config, [CountTest] as Class[])
50+
}
51+
52+
void cleanupSpec() {
53+
this.serverAddress = null
54+
if (this.running != null) {
55+
this.running.close()
56+
}
57+
this.running = null
58+
this.datastore.close()
59+
}
1660

1761
void "test count method"() {
1862
given:"some test data "

grace-datastore-gorm-mongodb/src/test/groovy/org/grails/datastore/gorm/mongo/CustomCodecSpec.groovy

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package org.grails.datastore.gorm.mongo
22

3+
import de.flapdoodle.embed.mongo.commands.ServerAddress
4+
import de.flapdoodle.embed.mongo.distribution.Version
5+
import de.flapdoodle.embed.mongo.transitions.ImmutableMongod
6+
import de.flapdoodle.embed.mongo.transitions.Mongod
7+
import de.flapdoodle.embed.mongo.transitions.RunningMongodProcess
8+
import de.flapdoodle.reverse.TransitionWalker
9+
310
import grails.gorm.time.InstantConverter
411
import grails.mongodb.MongoEntity
512
import grails.persistence.Entity
@@ -25,18 +32,48 @@ import spock.lang.Specification
2532
import java.time.Instant
2633
import java.util.concurrent.atomic.AtomicLong
2734

35+
import org.grails.datastore.mapping.mongo.config.MongoSettings
36+
2837
import static java.time.temporal.ChronoUnit.DAYS
2938

3039
/**
3140
* Created by graemerocher on 27/09/2016.
3241
*/
3342
class CustomCodecSpec extends Specification {
3443

35-
@AutoCleanup @Shared MongoDatastore datastore = new MongoDatastore(
36-
['grails.mongodb.codecs':[BirthdayCodec,
37-
InstantAsBsonDateTimeCodec
38-
]],
39-
Person, InstantHolder)
44+
@AutoCleanup
45+
@Shared
46+
MongoDatastore datastore
47+
48+
@Shared
49+
protected TransitionWalker.ReachedState<RunningMongodProcess> running
50+
51+
@Shared
52+
protected ServerAddress serverAddress
53+
54+
void setupSpec() {
55+
ImmutableMongod mongodbConfig = Mongod.instance()
56+
Version.Main version = Version.Main.V7_0
57+
58+
this.running = mongodbConfig.start(version)
59+
this.serverAddress = running.current().getServerAddress()
60+
61+
Map config = [
62+
'grails.mongodb.codecs': [BirthdayCodec, InstantAsBsonDateTimeCodec],
63+
"grails.gorm.multiTenancy.mode" : "DISCRIMINATOR",
64+
(MongoSettings.SETTING_URL) : "mongodb://$serverAddress".toString(),
65+
]
66+
this.datastore = new MongoDatastore(config, [Person, InstantHolder] as Class[])
67+
}
68+
69+
void cleanupSpec() {
70+
this.serverAddress = null
71+
if (this.running != null) {
72+
this.running.close()
73+
}
74+
this.running = null
75+
this.datastore.close()
76+
}
4077

4178
void "Test custom codecs"() {
4279
when:"A new person is saved"

0 commit comments

Comments
 (0)