Skip to content

Commit c77534f

Browse files
committed
#216 - Fix subscription in ConnectionFactoryInitializer.execute(…).
ConnectionFactoryInitializer.execute(…) now calls .block() to subscribe to database initializer and database cleaner. Previously, the resulting Mono wasn't subscribed to and the database was not initialized.
1 parent 96de5d7 commit c77534f

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

pom.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
<mysql.version>5.1.47</mysql.version>
3232
<jasync.version>1.0.6</jasync.version>
3333
<r2dbc-mysql.version>0.8.0.RC1</r2dbc-mysql.version>
34+
<r2dbc-spi-test.version>0.8.0.RC2</r2dbc-spi-test.version>
3435
<mssql-jdbc.version>7.1.2.jre8-preview</mssql-jdbc.version>
3536
<r2dbc-releasetrain.version>Arabba-RC2</r2dbc-releasetrain.version>
3637
<reactive-streams.version>1.0.3</reactive-streams.version>
@@ -235,6 +236,13 @@
235236
<scope>test</scope>
236237
</dependency>
237238

239+
<dependency>
240+
<groupId>io.r2dbc</groupId>
241+
<artifactId>r2dbc-spi-test</artifactId>
242+
<version>${r2dbc-spi-test.version}</version>
243+
<scope>test</scope>
244+
</dependency>
245+
238246
<!-- Testcontainers -->
239247

240248
<dependency>

src/main/java/org/springframework/data/r2dbc/connectionfactory/init/ConnectionFactoryInitializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private void execute(@Nullable DatabasePopulator populator) {
104104
Assert.state(this.connectionFactory != null, "ConnectionFactory must be set");
105105

106106
if (this.enabled && populator != null) {
107-
DatabasePopulatorUtils.execute(populator, this.connectionFactory);
107+
DatabasePopulatorUtils.execute(populator, this.connectionFactory).block();
108108
}
109109
}
110110
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright 2019 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.data.r2dbc.connectionfactory.init;
17+
18+
import static org.assertj.core.api.Assertions.*;
19+
import static org.mockito.Mockito.*;
20+
21+
import io.r2dbc.spi.test.MockConnection;
22+
import io.r2dbc.spi.test.MockConnectionFactory;
23+
import reactor.core.publisher.Mono;
24+
25+
import java.util.concurrent.atomic.AtomicBoolean;
26+
27+
import org.junit.Test;
28+
29+
/**
30+
* Unit tests for {@link ConnectionFactoryInitializer}.
31+
*
32+
* @author Mark Paluch
33+
*/
34+
public class ConnectionFactoryInitializerUnitTests {
35+
36+
AtomicBoolean called = new AtomicBoolean();
37+
DatabasePopulator populator = mock(DatabasePopulator.class);
38+
MockConnection connection = MockConnection.builder().build();
39+
MockConnectionFactory connectionFactory = MockConnectionFactory.builder().connection(connection).build();
40+
41+
@Test // gh-216
42+
public void shouldInitializeConnectionFactory() {
43+
44+
when(populator.populate(any())).thenReturn(Mono.<Void> empty().doOnSubscribe(subscription -> called.set(true)));
45+
46+
ConnectionFactoryInitializer initializer = new ConnectionFactoryInitializer();
47+
initializer.setConnectionFactory(connectionFactory);
48+
initializer.setDatabasePopulator(populator);
49+
50+
initializer.afterPropertiesSet();
51+
52+
assertThat(called).isTrue();
53+
}
54+
55+
@Test // gh-216
56+
public void shouldCleanConnectionFactory() {
57+
58+
when(populator.populate(any())).thenReturn(Mono.<Void> empty().doOnSubscribe(subscription -> called.set(true)));
59+
60+
ConnectionFactoryInitializer initializer = new ConnectionFactoryInitializer();
61+
initializer.setConnectionFactory(connectionFactory);
62+
initializer.setDatabaseCleaner(populator);
63+
64+
initializer.afterPropertiesSet();
65+
initializer.destroy();
66+
67+
assertThat(called).isTrue();
68+
}
69+
}

0 commit comments

Comments
 (0)