Skip to content

Commit c32d811

Browse files
authored
Add MSSQLR2DBCDatabaseContainer compatible with org.testcontainers.mssqlserver.MSSQLServerContainer (#11118)
1 parent a8b0f5c commit c32d811

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.testcontainers.mssqlserver;
2+
3+
import io.r2dbc.mssql.MssqlConnectionFactoryProvider;
4+
import io.r2dbc.spi.ConnectionFactoryOptions;
5+
import org.testcontainers.lifecycle.Startable;
6+
import org.testcontainers.r2dbc.R2DBCDatabaseContainer;
7+
8+
import java.util.Set;
9+
10+
public class MSSQLR2DBCDatabaseContainer implements R2DBCDatabaseContainer {
11+
12+
private final MSSQLServerContainer container;
13+
14+
public MSSQLR2DBCDatabaseContainer(MSSQLServerContainer container) {
15+
this.container = container;
16+
}
17+
18+
public static ConnectionFactoryOptions getOptions(MSSQLServerContainer container) {
19+
ConnectionFactoryOptions options = ConnectionFactoryOptions
20+
.builder()
21+
.option(ConnectionFactoryOptions.DRIVER, MssqlConnectionFactoryProvider.MSSQL_DRIVER)
22+
.build();
23+
24+
return new MSSQLR2DBCDatabaseContainer(container).configure(options);
25+
}
26+
27+
@Override
28+
public ConnectionFactoryOptions configure(ConnectionFactoryOptions options) {
29+
return options
30+
.mutate()
31+
.option(ConnectionFactoryOptions.HOST, container.getHost())
32+
.option(ConnectionFactoryOptions.PORT, container.getMappedPort(MSSQLServerContainer.MS_SQL_SERVER_PORT))
33+
// TODO enable if/when MSSQLServerContainer adds support for customizing the DB name
34+
// .option(ConnectionFactoryOptions.DATABASE, container.getDatabasseName())
35+
.option(ConnectionFactoryOptions.USER, container.getUsername())
36+
.option(ConnectionFactoryOptions.PASSWORD, container.getPassword())
37+
.build();
38+
}
39+
40+
@Override
41+
public Set<Startable> getDependencies() {
42+
return this.container.getDependencies();
43+
}
44+
45+
@Override
46+
public void start() {
47+
this.container.start();
48+
}
49+
50+
@Override
51+
public void stop() {
52+
this.container.stop();
53+
}
54+
55+
@Override
56+
public void close() {
57+
this.container.close();
58+
}
59+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.testcontainers.mssqlserver;
2+
3+
import io.r2dbc.spi.ConnectionFactoryOptions;
4+
import org.testcontainers.MSSQLServerTestImages;
5+
import org.testcontainers.r2dbc.AbstractR2DBCDatabaseContainerTest;
6+
7+
class MSSQLR2DBCDatabaseContainerTest extends AbstractR2DBCDatabaseContainerTest<MSSQLServerContainer> {
8+
9+
@Override
10+
protected ConnectionFactoryOptions getOptions(MSSQLServerContainer container) {
11+
return MSSQLR2DBCDatabaseContainer.getOptions(container);
12+
}
13+
14+
@Override
15+
protected String createR2DBCUrl() {
16+
return "r2dbc:tc:sqlserver:///?TC_IMAGE_TAG=2022-CU14-ubuntu-22.04";
17+
}
18+
19+
@Override
20+
protected MSSQLServerContainer createContainer() {
21+
return new MSSQLServerContainer(MSSQLServerTestImages.MSSQL_SERVER_IMAGE);
22+
}
23+
}

0 commit comments

Comments
 (0)