Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
83e4bb39
Commit
83e4bb39
authored
Apr 30, 2020
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add transaction auto-configuration to @DataMongoTest
Closes gh-20182
parent
52fbf47e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
139 additions
and
1 deletion
+139
-1
build.gradle
...-boot-project/spring-boot-test-autoconfigure/build.gradle
+1
-0
spring.factories
...utoconfigure/src/main/resources/META-INF/spring.factories
+2
-1
TransactionalDataMongoTestIntegrationTests.java
...ata/mongo/TransactionalDataMongoTestIntegrationTests.java
+136
-0
No files found.
spring-boot-project/spring-boot-test-autoconfigure/build.gradle
View file @
83e4bb39
...
...
@@ -66,6 +66,7 @@ dependencies {
testImplementation
(
"org.aspectj:aspectjrt"
)
testImplementation
(
"org.aspectj:aspectjweaver"
)
testImplementation
(
"org.assertj:assertj-core"
)
testImplementation
(
"org.awaitility:awaitility"
)
testImplementation
(
"org.hibernate.validator:hibernate-validator"
)
testImplementation
(
"org.hsqldb:hsqldb"
)
testImplementation
(
"org.jooq:jooq"
)
...
...
spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories
View file @
83e4bb39
...
...
@@ -37,7 +37,8 @@ org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoC
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
# AutoConfigureDataNeo4j auto-configuration imports
org.springframework.boot.test.autoconfigure.data.neo4j.AutoConfigureDataNeo4j=\
...
...
spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/TransactionalDataMongoTestIntegrationTests.java
0 → 100644
View file @
83e4bb39
/*
* Copyright 2012-2020 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
org
.
springframework
.
boot
.
test
.
autoconfigure
.
data
.
mongo
;
import
java.io.IOException
;
import
java.time.Duration
;
import
java.util.List
;
import
com.mongodb.BasicDBList
;
import
com.mongodb.ServerAddress
;
import
com.mongodb.client.ClientSession
;
import
com.mongodb.client.MongoClient
;
import
com.mongodb.client.MongoDatabase
;
import
com.mongodb.connection.ServerDescription
;
import
de.flapdoodle.embed.mongo.config.IMongoCmdOptions
;
import
de.flapdoodle.embed.mongo.config.IMongodConfig
;
import
de.flapdoodle.embed.mongo.config.MongoCmdOptionsBuilder
;
import
de.flapdoodle.embed.mongo.config.MongodConfigBuilder
;
import
de.flapdoodle.embed.mongo.config.Storage
;
import
de.flapdoodle.embed.mongo.distribution.Version
;
import
org.awaitility.Awaitility
;
import
org.bson.Document
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoProperties
;
import
org.springframework.boot.test.context.TestConfiguration
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.data.mongodb.MongoDatabaseFactory
;
import
org.springframework.data.mongodb.MongoTransactionManager
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.transaction.annotation.Transactional
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for using {@link DataMongoTest @DataMongoTest} with transactions.
*
* @author Andy Wilkinson
*/
@DataMongoTest
@Transactional
class
TransactionalDataMongoTestIntegrationTests
{
@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
();
}
@TestConfiguration
(
proxyBeanMethods
=
false
)
static
class
TransactionManagerConfiguration
{
@Bean
MongoTransactionManager
mongoTransactionManager
(
MongoDatabaseFactory
dbFactory
)
{
return
new
MongoTransactionManager
(
dbFactory
);
}
}
@TestConfiguration
(
proxyBeanMethods
=
false
)
static
class
MongoCustomizationConfiguration
{
private
static
final
String
REPLICA_SET_NAME
=
"rs1"
;
@Bean
IMongodConfig
embeddedMongoConfiguration
(
EmbeddedMongoProperties
embeddedProperties
)
throws
IOException
{
IMongoCmdOptions
cmdOptions
=
new
MongoCmdOptionsBuilder
().
useNoJournal
(
false
).
build
();
return
new
MongodConfigBuilder
().
version
(
Version
.
Main
.
PRODUCTION
)
.
replication
(
new
Storage
(
null
,
REPLICA_SET_NAME
,
0
)).
cmdOptions
(
cmdOptions
)
.
stopTimeoutInMillis
(
60000
).
build
();
}
@Bean
MongoInitializer
mongoInitializer
(
MongoClient
client
,
MongoTemplate
template
)
{
return
new
MongoInitializer
(
client
,
template
);
}
static
class
MongoInitializer
implements
InitializingBean
{
private
final
MongoClient
client
;
private
final
MongoTemplate
template
;
MongoInitializer
(
MongoClient
client
,
MongoTemplate
template
)
{
this
.
client
=
client
;
this
.
template
=
template
;
}
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
List
<
ServerDescription
>
servers
=
this
.
client
.
getClusterDescription
().
getServerDescriptions
();
assertThat
(
servers
).
hasSize
(
1
);
ServerAddress
address
=
servers
.
get
(
0
).
getAddress
();
BasicDBList
members
=
new
BasicDBList
();
members
.
add
(
new
Document
(
"_id"
,
0
).
append
(
"host"
,
address
.
getHost
()
+
":"
+
address
.
getPort
()));
Document
config
=
new
Document
(
"_id"
,
REPLICA_SET_NAME
);
config
.
put
(
"members"
,
members
);
MongoDatabase
admin
=
this
.
client
.
getDatabase
(
"admin"
);
admin
.
runCommand
(
new
Document
(
"replSetInitiate"
,
config
));
Awaitility
.
await
().
atMost
(
Duration
.
ofMinutes
(
1
)).
until
(()
->
{
try
(
ClientSession
session
=
this
.
client
.
startSession
())
{
return
true
;
}
catch
(
Exception
ex
)
{
return
false
;
}
});
this
.
template
.
createCollection
(
"exampleDocuments"
);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment