26
26
import org .junit .rules .ExternalResource ;
27
27
import org .slf4j .Logger ;
28
28
import org .slf4j .LoggerFactory ;
29
+ import org .testcontainers .containers .JdbcDatabaseContainer ;
29
30
30
31
/**
31
32
* {@link ExternalResource} wrapper to encapsulate {@link ProvidedDatabase} and
@@ -47,25 +48,35 @@ public static ExternalDatabase unavailable() {
47
48
return NoAvailableDatabase .INSTANCE ;
48
49
}
49
50
51
+ /**
52
+ * @return hostname on which the database service runs.
53
+ */
54
+ public abstract String getHostname ();
55
+
50
56
/**
51
57
* @return the post of the database service.
52
58
*/
53
59
public abstract int getPort ();
54
60
55
61
/**
56
- * @return hostname on which the database service runs .
62
+ * @return database user name .
57
63
*/
58
- public abstract String getHostname ();
64
+ public abstract String getUsername ();
65
+
66
+ /**
67
+ * @return password for the database user.
68
+ */
69
+ public abstract String getPassword ();
59
70
60
71
/**
61
72
* @return name of the database.
62
73
*/
63
74
public abstract String getDatabase ();
64
75
65
76
/**
66
- * @return database user name .
77
+ * @return JDBC URL for the endpoint .
67
78
*/
68
- public abstract String getUsername ();
79
+ public abstract String getJdbcUrl ();
69
80
70
81
/**
71
82
* Throws an {@link AssumptionViolatedException} if the database cannot be reached.
@@ -98,45 +109,63 @@ boolean checkValidity() {
98
109
return false ;
99
110
}
100
111
101
- /**
102
- * @return password for the database user.
103
- */
104
- public abstract String getPassword ();
105
-
106
112
/**
107
113
* Provided (unmanaged resource) database connection coordinates.
108
114
*/
109
115
@ Builder
110
116
public static class ProvidedDatabase extends ExternalDatabase {
111
117
112
- private final int port ;
113
118
private final String hostname ;
114
- private final String database ;
119
+ private final int port ;
115
120
private final String username ;
116
121
private final String password ;
122
+ private final String database ;
123
+ private final String jdbcUrl ;
117
124
118
- /* (non-Javadoc)
119
- * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getPort()
125
+ public static ProvidedDatabaseBuilder builder () {
126
+ return new ProvidedDatabaseBuilder ();
127
+ }
128
+
129
+ /**
130
+ * Create a {@link ProvidedDatabaseBuilder} initialized with {@link JdbcDatabaseContainer}.
131
+ *
132
+ * @param container
133
+ * @return
120
134
*/
121
- @ Override
122
- public int getPort () {
123
- return port ;
135
+ public static ProvidedDatabaseBuilder builder (JdbcDatabaseContainer container ) {
136
+
137
+ return builder ().hostname (container .getContainerIpAddress ()) //
138
+ .port (container .getFirstMappedPort ()) //
139
+ .username (container .getUsername ()) //
140
+ .password (container .getPassword ()) //
141
+ .database (container .getDatabaseName ()) //
142
+ .jdbcUrl (container .getJdbcUrl ());
124
143
}
125
144
126
- /* (non-Javadoc)
127
- * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getHostname()
145
+ /**
146
+ * Create a {@link ProvidedDatabase} from {@link JdbcDatabaseContainer}.
147
+ *
148
+ * @param container
149
+ * @return
128
150
*/
151
+ public static ProvidedDatabase from (JdbcDatabaseContainer container ) {
152
+ return builder (container ).build ();
153
+ }
154
+
155
+ /* (non-Javadoc)
156
+ * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getHostname()
157
+ */
129
158
@ Override
130
159
public String getHostname () {
131
160
return hostname ;
132
161
}
133
162
134
163
/* (non-Javadoc)
135
- * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getDatabase ()
164
+ * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getPort ()
136
165
*/
137
166
@ Override
138
- public String getDatabase () {
139
- return database ;
167
+ public int getPort () {
168
+ return port ;
140
169
}
141
170
142
171
/* (non-Javadoc)
@@ -154,6 +183,22 @@ public String getUsername() {
154
183
public String getPassword () {
155
184
return password ;
156
185
}
186
+
187
+ /* (non-Javadoc)
188
+ * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getDatabase()
189
+ */
190
+ @ Override
191
+ public String getDatabase () {
192
+ return database ;
193
+ }
194
+
195
+ /* (non-Javadoc)
196
+ * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getJdbcUrl()
197
+ */
198
+ @ Override
199
+ public String getJdbcUrl () {
200
+ return jdbcUrl ;
201
+ }
157
202
}
158
203
159
204
/**
@@ -173,11 +218,6 @@ boolean checkValidity() {
173
218
return false ;
174
219
}
175
220
176
- @ Override
177
- public int getPort () {
178
- throw new UnsupportedOperationException (getClass ().getSimpleName ());
179
- }
180
-
181
221
/* (non-Javadoc)
182
222
* @see org.springframework.data.jdbc.core.function.ExternalDatabase#getHostname()
183
223
*/
@@ -187,10 +227,10 @@ public String getHostname() {
187
227
}
188
228
189
229
/* (non-Javadoc)
190
- * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getDatabase ()
230
+ * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getPort ()
191
231
*/
192
232
@ Override
193
- public String getDatabase () {
233
+ public int getPort () {
194
234
throw new UnsupportedOperationException (getClass ().getSimpleName ());
195
235
}
196
236
@@ -209,5 +249,21 @@ public String getUsername() {
209
249
public String getPassword () {
210
250
throw new UnsupportedOperationException (getClass ().getSimpleName ());
211
251
}
252
+
253
+ /* (non-Javadoc)
254
+ * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getDatabase()
255
+ */
256
+ @ Override
257
+ public String getDatabase () {
258
+ throw new UnsupportedOperationException (getClass ().getSimpleName ());
259
+ }
260
+
261
+ /* (non-Javadoc)
262
+ * @see org.springframework.data.jdbc.core.function.ExternalDatabase#getJdbcUrl()
263
+ */
264
+ @ Override
265
+ public String getJdbcUrl () {
266
+ throw new UnsupportedOperationException (getClass ().getSimpleName ());
267
+ }
212
268
}
213
269
}
0 commit comments