1
1
/*
2
- * Copyright 2012-2021 the original author or authors.
2
+ * Copyright 2012-2022 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
20
20
import java .util .List ;
21
21
22
22
import org .junit .jupiter .api .Test ;
23
+ import org .testcontainers .containers .MongoDBContainer ;
24
+ import org .testcontainers .junit .jupiter .Container ;
25
+ import org .testcontainers .junit .jupiter .Testcontainers ;
23
26
24
27
import org .springframework .boot .autoconfigure .AutoConfigurations ;
25
28
import org .springframework .boot .autoconfigure .data .mongo .MongoDataAutoConfiguration ;
26
29
import org .springframework .boot .autoconfigure .data .mongo .MongoReactiveDataAutoConfiguration ;
27
30
import org .springframework .boot .autoconfigure .mongo .MongoAutoConfiguration ;
28
31
import org .springframework .boot .autoconfigure .mongo .MongoReactiveAutoConfiguration ;
29
- import org .springframework .boot .autoconfigure .mongo .embedded .EmbeddedMongoAutoConfiguration ;
30
32
import org .springframework .boot .autoconfigure .web .reactive .WebSessionIdResolverAutoConfiguration ;
31
33
import org .springframework .boot .test .context .FilteredClassLoader ;
32
34
import org .springframework .boot .test .context .assertj .AssertableReactiveWebApplicationContext ;
33
35
import org .springframework .boot .test .context .runner .ContextConsumer ;
34
36
import org .springframework .boot .test .context .runner .ReactiveWebApplicationContextRunner ;
37
+ import org .springframework .boot .testsupport .testcontainers .DockerImageNames ;
35
38
import org .springframework .http .ResponseCookie ;
36
39
import org .springframework .session .data .mongo .ReactiveMongoSessionRepository ;
37
40
import org .springframework .session .data .redis .ReactiveRedisSessionRepository ;
44
47
* @author Andy Wilkinson
45
48
* @author Weix Sun
46
49
*/
50
+ @ Testcontainers
47
51
class ReactiveSessionAutoConfigurationMongoTests extends AbstractSessionAutoConfigurationTests {
48
52
53
+ @ Container
54
+ static final MongoDBContainer mongoDb = new MongoDBContainer (DockerImageNames .mongo ()).withStartupAttempts (5 )
55
+ .withStartupTimeout (Duration .ofMinutes (5 ));
56
+
49
57
private final ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner ()
50
- .withConfiguration (AutoConfigurations .of (SessionAutoConfiguration .class ))
51
- .withPropertyValues ("spring.mongodb.embedded.version=3.5.5" );
58
+ .withConfiguration (AutoConfigurations .of (SessionAutoConfiguration .class ));
52
59
53
60
@ Test
54
61
void defaultConfig () {
55
- this .contextRunner .withPropertyValues ("spring.session.store-type=mongodb" )
56
- .withConfiguration (AutoConfigurations .of (EmbeddedMongoAutoConfiguration .class ,
57
- MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
62
+ this .contextRunner
63
+ .withPropertyValues ("spring.session.store-type=mongodb" ,
64
+ "spring.data.mongodb.uri=" + mongoDb .getReplicaSetUrl ())
65
+ .withConfiguration (AutoConfigurations .of (MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
58
66
MongoReactiveAutoConfiguration .class , MongoReactiveDataAutoConfiguration .class ))
59
67
.run (validateSpringSessionUsesMongo ("sessions" ));
60
68
}
61
69
62
70
@ Test
63
71
void defaultConfigWithUniqueStoreImplementation () {
64
72
this .contextRunner .withClassLoader (new FilteredClassLoader (ReactiveRedisSessionRepository .class ))
65
- .withConfiguration ( AutoConfigurations . of ( EmbeddedMongoAutoConfiguration . class ,
66
- MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
73
+ .withPropertyValues ( "spring.data.mongodb.uri=" + mongoDb . getReplicaSetUrl ())
74
+ . withConfiguration ( AutoConfigurations . of ( MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
67
75
MongoReactiveAutoConfiguration .class , MongoReactiveDataAutoConfiguration .class ))
68
76
.run (validateSpringSessionUsesMongo ("sessions" ));
69
77
}
70
78
71
79
@ Test
72
80
void defaultConfigWithCustomTimeout () {
73
- this .contextRunner .withPropertyValues ("spring.session.store-type=mongodb" , "spring.session.timeout=1m" )
74
- .withConfiguration (AutoConfigurations .of (EmbeddedMongoAutoConfiguration .class ,
75
- MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
81
+ this .contextRunner
82
+ .withPropertyValues ("spring.session.store-type=mongodb" , "spring.session.timeout=1m" ,
83
+ "spring.data.mongodb.uri=" + mongoDb .getReplicaSetUrl ())
84
+ .withConfiguration (AutoConfigurations .of (MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
76
85
MongoReactiveAutoConfiguration .class , MongoReactiveDataAutoConfiguration .class ))
77
86
.run ((context ) -> {
78
87
ReactiveMongoSessionRepository repository = validateSessionRepository (context ,
@@ -83,9 +92,10 @@ void defaultConfigWithCustomTimeout() {
83
92
84
93
@ Test
85
94
void defaultConfigWithCustomSessionTimeout () {
86
- this .contextRunner .withPropertyValues ("spring.session.store-type=mongodb" , "server.reactive.session.timeout=1m" )
87
- .withConfiguration (AutoConfigurations .of (EmbeddedMongoAutoConfiguration .class ,
88
- MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
95
+ this .contextRunner
96
+ .withPropertyValues ("spring.session.store-type=mongodb" , "server.reactive.session.timeout=1m" ,
97
+ "spring.data.mongodb.uri=" + mongoDb .getReplicaSetUrl ())
98
+ .withConfiguration (AutoConfigurations .of (MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
89
99
MongoReactiveAutoConfiguration .class , MongoReactiveDataAutoConfiguration .class ))
90
100
.run ((context ) -> {
91
101
ReactiveMongoSessionRepository repository = validateSessionRepository (context ,
@@ -97,26 +107,24 @@ void defaultConfigWithCustomSessionTimeout() {
97
107
@ Test
98
108
void mongoSessionStoreWithCustomizations () {
99
109
this .contextRunner
100
- .withConfiguration (AutoConfigurations .of (EmbeddedMongoAutoConfiguration .class ,
101
- MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
110
+ .withConfiguration (AutoConfigurations .of (MongoAutoConfiguration .class , MongoDataAutoConfiguration .class ,
102
111
MongoReactiveAutoConfiguration .class , MongoReactiveDataAutoConfiguration .class ))
103
- .withPropertyValues ("spring.session.store-type=mongodb" , "spring.session.mongodb.collection-name=foo" )
112
+ .withPropertyValues ("spring.session.store-type=mongodb" , "spring.session.mongodb.collection-name=foo" ,
113
+ "spring.data.mongodb.uri=" + mongoDb .getReplicaSetUrl ())
104
114
.run (validateSpringSessionUsesMongo ("foo" ));
105
115
}
106
116
107
117
@ Test
108
118
void sessionCookieConfigurationIsAppliedToAutoConfiguredWebSessionIdResolver () {
109
- AutoConfigurations autoConfigurations = AutoConfigurations .of (EmbeddedMongoAutoConfiguration .class ,
110
- MongoAutoConfiguration . class , MongoDataAutoConfiguration .class , MongoReactiveAutoConfiguration .class ,
119
+ AutoConfigurations autoConfigurations = AutoConfigurations .of (MongoAutoConfiguration .class ,
120
+ MongoDataAutoConfiguration .class , MongoReactiveAutoConfiguration .class ,
111
121
MongoReactiveDataAutoConfiguration .class , WebSessionIdResolverAutoConfiguration .class );
112
- this .contextRunner .withConfiguration (autoConfigurations ).withUserConfiguration (Config .class )
113
- .withPropertyValues ("spring.session.store-type=mongodb" ,
114
- "server.reactive.session.cookie.name:JSESSIONID" ,
115
- "server.reactive.session.cookie.domain:.example.com" ,
116
- "server.reactive.session.cookie.path:/example" , "server.reactive.session.cookie.max-age:60" ,
117
- "server.reactive.session.cookie.http-only:false" , "server.reactive.session.cookie.secure:false" ,
118
- "server.reactive.session.cookie.same-site:strict" )
119
- .run (assertExchangeWithSession ((exchange ) -> {
122
+ this .contextRunner .withConfiguration (autoConfigurations ).withUserConfiguration (Config .class ).withPropertyValues (
123
+ "spring.session.store-type=mongodb" , "server.reactive.session.cookie.name:JSESSIONID" ,
124
+ "server.reactive.session.cookie.domain:.example.com" , "server.reactive.session.cookie.path:/example" ,
125
+ "server.reactive.session.cookie.max-age:60" , "server.reactive.session.cookie.http-only:false" ,
126
+ "server.reactive.session.cookie.secure:false" , "server.reactive.session.cookie.same-site:strict" ,
127
+ "spring.data.mongodb.uri=" + mongoDb .getReplicaSetUrl ()).run (assertExchangeWithSession ((exchange ) -> {
120
128
List <ResponseCookie > cookies = exchange .getResponse ().getCookies ().get ("JSESSIONID" );
121
129
assertThat (cookies ).isNotEmpty ();
122
130
assertThat (cookies ).allMatch ((cookie ) -> cookie .getDomain ().equals (".example.com" ));
0 commit comments