14
14
* limitations under the License.
15
15
*/
16
16
17
- package org .springframework .http .client . reactive ;
17
+ package org .springframework .http .client ;
18
18
19
19
import java .time .Duration ;
20
20
import java .util .concurrent .atomic .AtomicBoolean ;
24
24
import reactor .netty .resources .ConnectionProvider ;
25
25
import reactor .netty .resources .LoopResources ;
26
26
27
- import org .springframework .http . client . ReactorResourceFactory ;
27
+ import org .springframework .context . support . GenericApplicationContext ;
28
28
29
29
import static org .assertj .core .api .Assertions .assertThat ;
30
30
import static org .mockito .ArgumentMatchers .eq ;
37
37
*
38
38
* @author Rossen Stoyanchev
39
39
* @author Sebastien Deleuze
40
+ * @author Juergen Hoeller
40
41
*/
41
42
class ReactorResourceFactoryTests {
42
43
@@ -49,37 +50,34 @@ class ReactorResourceFactoryTests {
49
50
50
51
@ Test
51
52
void globalResources () {
52
-
53
53
this .resourceFactory .setUseGlobalResources (true );
54
- this .resourceFactory .afterPropertiesSet ();
54
+ this .resourceFactory .start ();
55
55
56
56
HttpResources globalResources = HttpResources .get ();
57
57
assertThat (this .resourceFactory .getConnectionProvider ()).isSameAs (globalResources );
58
58
assertThat (this .resourceFactory .getLoopResources ()).isSameAs (globalResources );
59
59
assertThat (globalResources .isDisposed ()).isFalse ();
60
60
61
- this .resourceFactory .destroy ();
61
+ this .resourceFactory .stop ();
62
62
63
63
assertThat (globalResources .isDisposed ()).isTrue ();
64
64
}
65
65
66
66
@ Test
67
67
void globalResourcesWithConsumer () {
68
-
69
68
AtomicBoolean invoked = new AtomicBoolean ();
70
69
71
70
this .resourceFactory .addGlobalResourcesConsumer (httpResources -> invoked .set (true ));
72
- this .resourceFactory .afterPropertiesSet ();
71
+ this .resourceFactory .start ();
73
72
74
73
assertThat (invoked .get ()).isTrue ();
75
- this .resourceFactory .destroy ();
74
+ this .resourceFactory .stop ();
76
75
}
77
76
78
77
@ Test
79
78
void localResources () {
80
-
81
79
this .resourceFactory .setUseGlobalResources (false );
82
- this .resourceFactory .afterPropertiesSet ();
80
+ this .resourceFactory .start ();
83
81
84
82
ConnectionProvider connectionProvider = this .resourceFactory .getConnectionProvider ();
85
83
LoopResources loopResources = this .resourceFactory .getLoopResources ();
@@ -91,19 +89,18 @@ void localResources() {
91
89
// assertFalse(connectionProvider.isDisposed());
92
90
assertThat (loopResources .isDisposed ()).isFalse ();
93
91
94
- this .resourceFactory .destroy ();
92
+ this .resourceFactory .stop ();
95
93
96
94
assertThat (connectionProvider .isDisposed ()).isTrue ();
97
95
assertThat (loopResources .isDisposed ()).isTrue ();
98
96
}
99
97
100
98
@ Test
101
99
void localResourcesViaSupplier () {
102
-
103
100
this .resourceFactory .setUseGlobalResources (false );
104
101
this .resourceFactory .setConnectionProviderSupplier (() -> this .connectionProvider );
105
102
this .resourceFactory .setLoopResourcesSupplier (() -> this .loopResources );
106
- this .resourceFactory .afterPropertiesSet ();
103
+ this .resourceFactory .start ();
107
104
108
105
ConnectionProvider connectionProvider = this .resourceFactory .getConnectionProvider ();
109
106
LoopResources loopResources = this .resourceFactory .getLoopResources ();
@@ -113,9 +110,9 @@ void localResourcesViaSupplier() {
113
110
114
111
verifyNoMoreInteractions (this .connectionProvider , this .loopResources );
115
112
116
- this .resourceFactory .destroy ();
113
+ this .resourceFactory .stop ();
117
114
118
- // Managed (destroy disposes)..
115
+ // Managed (stop disposes)..
119
116
verify (this .connectionProvider ).disposeLater ();
120
117
verify (this .loopResources ).disposeLater (eq (Duration .ofSeconds (LoopResources .DEFAULT_SHUTDOWN_QUIET_PERIOD )), eq (Duration .ofSeconds (LoopResources .DEFAULT_SHUTDOWN_TIMEOUT )));
121
118
verifyNoMoreInteractions (this .connectionProvider , this .loopResources );
@@ -130,8 +127,8 @@ void customShutdownDurations() {
130
127
this .resourceFactory .setLoopResourcesSupplier (() -> this .loopResources );
131
128
this .resourceFactory .setShutdownQuietPeriod (quietPeriod );
132
129
this .resourceFactory .setShutdownTimeout (shutdownTimeout );
133
- this .resourceFactory .afterPropertiesSet ();
134
- this .resourceFactory .destroy ();
130
+ this .resourceFactory .start ();
131
+ this .resourceFactory .stop ();
135
132
136
133
verify (this .connectionProvider ).disposeLater ();
137
134
verify (this .loopResources ).disposeLater (eq (quietPeriod ), eq (shutdownTimeout ));
@@ -140,11 +137,10 @@ void customShutdownDurations() {
140
137
141
138
@ Test
142
139
void externalResources () {
143
-
144
140
this .resourceFactory .setUseGlobalResources (false );
145
141
this .resourceFactory .setConnectionProvider (this .connectionProvider );
146
142
this .resourceFactory .setLoopResources (this .loopResources );
147
- this .resourceFactory .afterPropertiesSet ();
143
+ this .resourceFactory .start ();
148
144
149
145
ConnectionProvider connectionProvider = this .resourceFactory .getConnectionProvider ();
150
146
LoopResources loopResources = this .resourceFactory .getLoopResources ();
@@ -154,17 +150,16 @@ void externalResources() {
154
150
155
151
verifyNoMoreInteractions (this .connectionProvider , this .loopResources );
156
152
157
- this .resourceFactory .destroy ();
153
+ this .resourceFactory .stop ();
158
154
159
- // Not managed (destroy has no impact)
155
+ // Not managed (stop has no impact)
160
156
verifyNoMoreInteractions (this .connectionProvider , this .loopResources );
161
157
}
162
158
163
159
@ Test
164
160
void restartWithGlobalResources () {
165
-
166
161
this .resourceFactory .setUseGlobalResources (true );
167
- this .resourceFactory .afterPropertiesSet ();
162
+ this .resourceFactory .start ();
168
163
this .resourceFactory .stop ();
169
164
this .resourceFactory .start ();
170
165
@@ -173,16 +168,15 @@ void restartWithGlobalResources() {
173
168
assertThat (this .resourceFactory .getLoopResources ()).isSameAs (globalResources );
174
169
assertThat (globalResources .isDisposed ()).isFalse ();
175
170
176
- this .resourceFactory .destroy ();
171
+ this .resourceFactory .stop ();
177
172
178
173
assertThat (globalResources .isDisposed ()).isTrue ();
179
174
}
180
175
181
176
@ Test
182
177
void restartWithLocalResources () {
183
-
184
178
this .resourceFactory .setUseGlobalResources (false );
185
- this .resourceFactory .afterPropertiesSet ();
179
+ this .resourceFactory .start ();
186
180
this .resourceFactory .stop ();
187
181
this .resourceFactory .start ();
188
182
@@ -196,19 +190,18 @@ void restartWithLocalResources() {
196
190
// assertFalse(connectionProvider.isDisposed());
197
191
assertThat (loopResources .isDisposed ()).isFalse ();
198
192
199
- this .resourceFactory .destroy ();
193
+ this .resourceFactory .stop ();
200
194
201
195
assertThat (connectionProvider .isDisposed ()).isTrue ();
202
196
assertThat (loopResources .isDisposed ()).isTrue ();
203
197
}
204
198
205
199
@ Test
206
200
void restartWithExternalResources () {
207
-
208
201
this .resourceFactory .setUseGlobalResources (false );
209
202
this .resourceFactory .setConnectionProvider (this .connectionProvider );
210
203
this .resourceFactory .setLoopResources (this .loopResources );
211
- this .resourceFactory .afterPropertiesSet ();
204
+ this .resourceFactory .start ();
212
205
this .resourceFactory .stop ();
213
206
this .resourceFactory .start ();
214
207
@@ -220,10 +213,52 @@ void restartWithExternalResources() {
220
213
221
214
verifyNoMoreInteractions (this .connectionProvider , this .loopResources );
222
215
223
- this .resourceFactory .destroy ();
216
+ this .resourceFactory .stop ();
224
217
225
- // Not managed (destroy has no impact)...
218
+ // Not managed (stop has no impact)...
226
219
verifyNoMoreInteractions (this .connectionProvider , this .loopResources );
227
220
}
228
221
222
+ @ Test
223
+ void restartWithinApplicationContext () {
224
+ GenericApplicationContext context = new GenericApplicationContext ();
225
+ context .registerBean (ReactorResourceFactory .class );
226
+ context .refresh ();
227
+
228
+ ReactorResourceFactory resourceFactory = context .getBean (ReactorResourceFactory .class );
229
+ assertThat (resourceFactory .isRunning ()).isTrue ();
230
+
231
+ HttpResources globalResources = HttpResources .get ();
232
+ assertThat (resourceFactory .getConnectionProvider ()).isSameAs (globalResources );
233
+ assertThat (resourceFactory .getLoopResources ()).isSameAs (globalResources );
234
+ assertThat (globalResources .isDisposed ()).isFalse ();
235
+
236
+ context .stop ();
237
+ assertThat (globalResources .isDisposed ()).isTrue ();
238
+
239
+ context .start ();
240
+ globalResources = HttpResources .get ();
241
+ assertThat (resourceFactory .getConnectionProvider ()).isSameAs (globalResources );
242
+ assertThat (resourceFactory .getLoopResources ()).isSameAs (globalResources );
243
+ assertThat (globalResources .isDisposed ()).isFalse ();
244
+ assertThat (globalResources .isDisposed ()).isFalse ();
245
+
246
+ context .close ();
247
+ assertThat (globalResources .isDisposed ()).isTrue ();
248
+ }
249
+
250
+ @ Test
251
+ void doNotStartBeforeApplicationContextFinish () {
252
+ GenericApplicationContext context = new GenericApplicationContext () {
253
+ @ Override
254
+ protected void finishRefresh () {
255
+ }
256
+ };
257
+ context .registerBean (ReactorResourceFactory .class );
258
+ context .refresh ();
259
+
260
+ ReactorResourceFactory resourceFactory = context .getBeanFactory ().getBean (ReactorResourceFactory .class );
261
+ assertThat (resourceFactory .isRunning ()).isFalse ();
262
+ }
263
+
229
264
}
0 commit comments