Skip to content

Commit e5dfe4b

Browse files
authored
Merge pull request #45 from jameshilliard/junit-jupiter
Add tests for Junit 5 and fix PreparedDbExtension instance(non-static) lifecycle.
2 parents b1e0444 + eadb753 commit e5dfe4b

22 files changed

+565
-46
lines changed

.github/workflows/maven.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ jobs:
66
runs-on: ubuntu-latest
77
strategy:
88
matrix:
9-
java: [8, 11, 13, 14]
9+
java: [8, 11, 13, 14, 15]
1010
steps:
1111
- name: Checkout project
1212
uses: actions/checkout@v1

pom.xml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,22 @@
158158
<dependency>
159159
<groupId>org.junit.jupiter</groupId>
160160
<artifactId>junit-jupiter-api</artifactId>
161-
<version>5.6.2</version>
161+
<version>5.7.0</version>
162162
<scope>provided</scope>
163163
<optional>true</optional>
164164
</dependency>
165+
<dependency>
166+
<groupId>org.junit.vintage</groupId>
167+
<artifactId>junit-vintage-engine</artifactId>
168+
<version>5.7.0</version>
169+
<scope>test</scope>
170+
</dependency>
171+
<dependency>
172+
<groupId>org.junit.jupiter</groupId>
173+
<artifactId>junit-jupiter-engine</artifactId>
174+
<version>5.7.0</version>
175+
<scope>test</scope>
176+
</dependency>
165177

166178
<dependency>
167179
<groupId>org.slf4j</groupId>
@@ -179,6 +191,10 @@
179191

180192
<build>
181193
<plugins>
194+
<plugin>
195+
<artifactId>maven-surefire-plugin</artifactId>
196+
<version>2.22.2</version>
197+
</plugin>
182198
<plugin>
183199
<artifactId>maven-pmd-plugin</artifactId>
184200
<version>3.13.0</version>
@@ -239,7 +255,7 @@
239255
</execution>
240256
</executions>
241257
<configuration>
242-
<additionalparam>-Xdoclint:none</additionalparam>
258+
<doclint>none</doclint>
243259
</configuration>
244260
</plugin>
245261
<plugin>

src/main/java/io/zonky/test/db/postgres/junit5/EmbeddedPostgresExtension.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
package io.zonky.test.db.postgres.junit5;
1515

1616
import io.zonky.test.db.postgres.embedded.DatabasePreparer;
17-
import org.junit.rules.TestRule;
17+
import org.junit.jupiter.api.extension.Extension;
1818

1919
public final class EmbeddedPostgresExtension {
2020

@@ -28,7 +28,7 @@ public static SingleInstancePostgresExtension singleInstance() {
2828
}
2929

3030
/**
31-
* Returns a {@link TestRule} to create a Postgres cluster, shared amongst all test cases in this JVM.
31+
* Returns a {@link Extension} to create a Postgres cluster, shared amongst all test cases in this JVM.
3232
* The rule contributes Config switches to configure each test case to get its own database.
3333
*/
3434
public static PreparedDbExtension preparedDatabase(DatabasePreparer preparer)

src/main/java/io/zonky/test/db/postgres/junit5/PreparedDbExtension.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,17 @@
1717
import io.zonky.test.db.postgres.embedded.DatabasePreparer;
1818
import io.zonky.test.db.postgres.embedded.EmbeddedPostgres;
1919
import io.zonky.test.db.postgres.embedded.PreparedDbProvider;
20-
import org.junit.jupiter.api.extension.AfterAllCallback;
21-
import org.junit.jupiter.api.extension.BeforeAllCallback;
22-
import org.junit.jupiter.api.extension.ExtensionContext;
20+
import org.junit.jupiter.api.extension.*;
2321

2422
import javax.sql.DataSource;
2523
import java.util.List;
2624
import java.util.concurrent.CopyOnWriteArrayList;
2725
import java.util.function.Consumer;
2826

29-
public class PreparedDbExtension implements BeforeAllCallback, AfterAllCallback {
27+
public class PreparedDbExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback {
3028

3129
private final DatabasePreparer preparer;
30+
private boolean perClass = false;
3231
private volatile DataSource dataSource;
3332
private volatile PreparedDbProvider provider;
3433
private volatile ConnectionInfo connectionInfo;
@@ -55,13 +54,33 @@ public void beforeAll(ExtensionContext extensionContext) throws Exception {
5554
provider = PreparedDbProvider.forPreparer(preparer, builderCustomizers);
5655
connectionInfo = provider.createNewDatabase();
5756
dataSource = provider.createDataSourceFromConnectionInfo(connectionInfo);
57+
perClass = true;
5858
}
5959

6060
@Override
6161
public void afterAll(ExtensionContext extensionContext) {
6262
dataSource = null;
6363
connectionInfo = null;
6464
provider = null;
65+
perClass = false;
66+
}
67+
68+
@Override
69+
public void beforeEach(ExtensionContext extensionContext) throws Exception {
70+
if (!perClass) {
71+
provider = PreparedDbProvider.forPreparer(preparer, builderCustomizers);
72+
connectionInfo = provider.createNewDatabase();
73+
dataSource = provider.createDataSourceFromConnectionInfo(connectionInfo);
74+
}
75+
}
76+
77+
@Override
78+
public void afterEach(ExtensionContext extensionContext) {
79+
if (!perClass) {
80+
dataSource = null;
81+
connectionInfo = null;
82+
provider = null;
83+
}
6584
}
6685

6786
public DataSource getTestDatabase() {

src/test/java/io/zonky/test/db/postgres/embedded/EmbeddedPostgresTest.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,23 @@
1313
*/
1414
package io.zonky.test.db.postgres.embedded;
1515

16-
import static org.junit.Assert.assertEquals;
17-
import static org.junit.Assert.assertFalse;
18-
import static org.junit.Assert.assertTrue;
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
import static org.junit.jupiter.api.Assertions.assertFalse;
18+
import static org.junit.jupiter.api.Assertions.assertTrue;
1919

20+
import java.nio.file.Files;
21+
import java.nio.file.Path;
2022
import java.sql.Connection;
2123
import java.sql.ResultSet;
2224
import java.sql.Statement;
2325

24-
import org.junit.Rule;
25-
import org.junit.Test;
26-
import org.junit.rules.TemporaryFolder;
26+
import org.junit.jupiter.api.Test;
27+
import org.junit.jupiter.api.io.TempDir;
2728

2829
public class EmbeddedPostgresTest
2930
{
30-
@Rule
31-
public TemporaryFolder tf = new TemporaryFolder();
31+
@TempDir
32+
public Path tf;
3233

3334
@Test
3435
public void testEmbeddedPg() throws Exception
@@ -47,7 +48,7 @@ public void testEmbeddedPg() throws Exception
4748
public void testEmbeddedPgCreationWithNestedDataDirectory() throws Exception
4849
{
4950
try (EmbeddedPostgres pg = EmbeddedPostgres.builder()
50-
.setDataDirectory(tf.newFolder("data-dir-parent") + "/data-dir")
51+
.setDataDirectory(Files.createDirectories(tf.resolve("data-dir-parent").resolve("data-dir")))
5152
.start()) {
5253
// nothing to do
5354
}

src/test/java/io/zonky/test/db/postgres/embedded/ConnectConfigTest.java renamed to src/test/java/io/zonky/test/db/postgres/junit/ConnectConfigTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package io.zonky.test.db.postgres.embedded;
1+
package io.zonky.test.db.postgres.junit;
22

3-
import io.zonky.test.db.postgres.junit.EmbeddedPostgresRules;
4-
import io.zonky.test.db.postgres.junit.PreparedDbRule;
3+
import io.zonky.test.db.postgres.embedded.ConnectionInfo;
4+
import io.zonky.test.db.postgres.embedded.DatabasePreparer;
55
import org.junit.Rule;
66
import org.junit.Test;
77
import org.postgresql.ds.common.BaseDataSource;

src/test/java/io/zonky/test/db/postgres/embedded/FlywayPreparerTest.java renamed to src/test/java/io/zonky/test/db/postgres/junit/FlywayPreparerTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,18 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
*/
14-
package io.zonky.test.db.postgres.embedded;
14+
package io.zonky.test.db.postgres.junit;
1515

1616
import static org.junit.Assert.assertEquals;
1717

1818
import java.sql.Connection;
1919
import java.sql.ResultSet;
2020
import java.sql.Statement;
2121

22+
import io.zonky.test.db.postgres.embedded.FlywayPreparer;
2223
import org.junit.Rule;
2324
import org.junit.Test;
2425

25-
import io.zonky.test.db.postgres.junit.EmbeddedPostgresRules;
26-
import io.zonky.test.db.postgres.junit.PreparedDbRule;
27-
2826
public class FlywayPreparerTest {
2927
@Rule
3028
public PreparedDbRule db = EmbeddedPostgresRules.preparedDatabase(FlywayPreparer.forClasspathLocation("db/testing"));

src/test/java/io/zonky/test/db/postgres/embedded/IsolationTest.java renamed to src/test/java/io/zonky/test/db/postgres/junit/IsolationTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
*/
14-
package io.zonky.test.db.postgres.embedded;
14+
package io.zonky.test.db.postgres.junit;
1515

1616
import java.sql.Connection;
1717
import java.sql.SQLException;
@@ -20,9 +20,6 @@
2020
import org.junit.Rule;
2121
import org.junit.Test;
2222

23-
import io.zonky.test.db.postgres.junit.EmbeddedPostgresRules;
24-
import io.zonky.test.db.postgres.junit.SingleInstancePostgresRule;
25-
2623
public class IsolationTest
2724
{
2825
@Rule

src/test/java/io/zonky/test/db/postgres/embedded/LiquibasePreparerContextTest.java renamed to src/test/java/io/zonky/test/db/postgres/junit/LiquibasePreparerContextTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
*/
14-
package io.zonky.test.db.postgres.embedded;
14+
package io.zonky.test.db.postgres.junit;
1515

16-
import io.zonky.test.db.postgres.junit.EmbeddedPostgresRules;
17-
import io.zonky.test.db.postgres.junit.PreparedDbRule;
16+
import io.zonky.test.db.postgres.embedded.LiquibasePreparer;
1817
import liquibase.Contexts;
1918
import org.junit.Rule;
2019
import org.junit.Test;

src/test/java/io/zonky/test/db/postgres/embedded/LiquibasePreparerTest.java renamed to src/test/java/io/zonky/test/db/postgres/junit/LiquibasePreparerTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
*/
14-
package io.zonky.test.db.postgres.embedded;
14+
package io.zonky.test.db.postgres.junit;
1515

16-
import io.zonky.test.db.postgres.junit.EmbeddedPostgresRules;
17-
import io.zonky.test.db.postgres.junit.PreparedDbRule;
16+
import io.zonky.test.db.postgres.embedded.LiquibasePreparer;
1817
import org.junit.Rule;
1918
import org.junit.Test;
2019

src/test/java/io/zonky/test/db/postgres/embedded/PreparedDbCustomizerTest.java renamed to src/test/java/io/zonky/test/db/postgres/junit/PreparedDbCustomizerTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
*/
14-
package io.zonky.test.db.postgres.embedded;
14+
package io.zonky.test.db.postgres.junit;
1515

16-
import io.zonky.test.db.postgres.junit.EmbeddedPostgresRules;
17-
import io.zonky.test.db.postgres.junit.PreparedDbRule;
16+
import io.zonky.test.db.postgres.embedded.DatabasePreparer;
1817
import org.junit.Rule;
1918
import org.junit.Test;
2019

src/test/java/io/zonky/test/db/postgres/embedded/PreparedDbTest.java renamed to src/test/java/io/zonky/test/db/postgres/junit/PreparedDbTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
*/
14-
package io.zonky.test.db.postgres.embedded;
14+
package io.zonky.test.db.postgres.junit;
1515

1616
import static org.junit.Assert.assertEquals;
1717

@@ -24,12 +24,12 @@
2424

2525
import javax.sql.DataSource;
2626

27+
import io.zonky.test.db.postgres.embedded.ConnectionInfo;
28+
import io.zonky.test.db.postgres.embedded.DatabaseConnectionPreparer;
29+
import io.zonky.test.db.postgres.embedded.DatabasePreparer;
2730
import org.junit.Rule;
2831
import org.junit.Test;
2932

30-
import io.zonky.test.db.postgres.junit.EmbeddedPostgresRules;
31-
import io.zonky.test.db.postgres.junit.PreparedDbRule;
32-
3333
public class PreparedDbTest {
3434

3535
private final DatabasePreparer prepA = new SimplePreparer("a");

src/test/java/io/zonky/test/db/postgres/embedded/SingleInstanceRuleTest.java renamed to src/test/java/io/zonky/test/db/postgres/junit/SingleInstanceRuleTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
*/
14-
package io.zonky.test.db.postgres.embedded;
14+
package io.zonky.test.db.postgres.junit;
1515

1616
import static org.junit.Assert.assertEquals;
1717
import static org.junit.Assert.assertFalse;
@@ -24,9 +24,6 @@
2424
import org.junit.Rule;
2525
import org.junit.Test;
2626

27-
import io.zonky.test.db.postgres.junit.EmbeddedPostgresRules;
28-
import io.zonky.test.db.postgres.junit.SingleInstancePostgresRule;
29-
3027
public class SingleInstanceRuleTest
3128
{
3229
@Rule
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package io.zonky.test.db.postgres.junit5;
2+
3+
import io.zonky.test.db.postgres.embedded.ConnectionInfo;
4+
import io.zonky.test.db.postgres.embedded.DatabasePreparer;
5+
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.api.extension.RegisterExtension;
7+
import org.postgresql.ds.common.BaseDataSource;
8+
9+
import javax.sql.DataSource;
10+
import java.sql.SQLException;
11+
import java.util.Map;
12+
13+
import static org.junit.jupiter.api.Assertions.assertEquals;
14+
15+
public class ConnectConfigTest {
16+
17+
private final CapturingDatabasePreparer preparer = new CapturingDatabasePreparer();
18+
19+
@RegisterExtension
20+
public PreparedDbExtension db = EmbeddedPostgresExtension.preparedDatabase(preparer)
21+
.customize(builder -> builder.setConnectConfig("connectTimeout", "20"));
22+
23+
@Test
24+
public void test() throws SQLException {
25+
ConnectionInfo connectionInfo = db.getConnectionInfo();
26+
27+
Map<String, String> properties = connectionInfo.getProperties();
28+
assertEquals(1, properties.size());
29+
assertEquals("20", properties.get("connectTimeout"));
30+
31+
BaseDataSource testDatabase = (BaseDataSource) db.getTestDatabase();
32+
assertEquals("20", testDatabase.getProperty("connectTimeout"));
33+
34+
BaseDataSource preparerDataSource = (BaseDataSource) preparer.getDataSource();
35+
assertEquals("20", preparerDataSource.getProperty("connectTimeout"));
36+
}
37+
38+
private class CapturingDatabasePreparer implements DatabasePreparer {
39+
40+
private DataSource dataSource;
41+
42+
@Override
43+
public void prepare(DataSource ds) {
44+
if (dataSource != null)
45+
throw new IllegalStateException("database preparer has been called multiple times");
46+
dataSource = ds;
47+
}
48+
49+
public DataSource getDataSource() {
50+
return dataSource;
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)