1
1
package no .nav .foreldrepenger .abakus .dbstoette ;
2
2
3
+ import java .io .File ;
3
4
import java .util .Objects ;
4
5
import java .util .concurrent .atomic .AtomicBoolean ;
5
6
6
7
import javax .naming .NamingException ;
7
8
import javax .sql .DataSource ;
8
9
10
+ import no .nav .foreldrepenger .konfig .Environment ;
11
+
9
12
import org .eclipse .jetty .plus .jndi .EnvEntry ;
10
13
import org .flywaydb .core .Flyway ;
11
14
import org .flywaydb .core .api .FlywayException ;
16
19
/**
17
20
* Initielt skjemaoppsett + migrering av unittest-skjemaer
18
21
*/
19
- public final class Databaseskjemainitialisering {
22
+ public final class TestDatabaseInit {
20
23
private static final AtomicBoolean GUARD_UNIT_TEST_SKJEMAER = new AtomicBoolean ();
24
+ private static final String DB_SCRIPT_LOCATION = "/db/migration/defaultDS/" ;
21
25
22
- private static final String USER = "fpabakus_unit" ;
23
- private static final String DB_SCRIPT_LOCATION = "/db/migration/" ;
24
-
25
- private static final DataSource DS = settJdniOppslag (USER );
26
-
27
- public static void main (String [] args ) {
28
- migrerUnittestSkjemaer ();
29
- }
30
-
31
- @ SuppressWarnings ("resource" )
32
- public static void migrerUnittestSkjemaer () {
26
+ public static void settOppDatasourceOgMigrer (String jdbcUrl , String username , String password ) {
27
+ var ds = createDatasource (jdbcUrl , username , password );
28
+ settJdniOppslag (ds );
33
29
if (GUARD_UNIT_TEST_SKJEMAER .compareAndSet (false , true )) {
34
- Flyway flyway = Flyway .configure ()
35
- .dataSource (createDs ( USER ) )
36
- .locations (DB_SCRIPT_LOCATION )
30
+ var flyway = Flyway .configure ()
31
+ .dataSource (ds )
32
+ .locations (getScriptLocation () )
37
33
.baselineOnMigrate (true )
38
34
.cleanDisabled (false )
39
35
.load ();
@@ -51,47 +47,44 @@ public static void migrerUnittestSkjemaer() {
51
47
}
52
48
}
53
49
54
- private static synchronized DataSource settJdniOppslag (String user ) {
50
+ private static String getScriptLocation () {
51
+ return fileScriptLocation ();
52
+ }
55
53
56
- var ds = createDs (user );
54
+ private static String fileScriptLocation () {
55
+ var relativePath = "/migreringer/src/main/resources" + DB_SCRIPT_LOCATION ;
56
+ var baseDir = new File ("." ).getAbsoluteFile ();
57
+ var location = new File (baseDir , relativePath );
58
+ while (!location .exists ()) {
59
+ baseDir = baseDir .getParentFile ();
60
+ if (baseDir == null || !baseDir .isDirectory ()) {
61
+ throw new IllegalArgumentException ("Klarte ikke finne : " + baseDir );
62
+ }
63
+ location = new File (baseDir , relativePath );
64
+ }
65
+ return "filesystem:" + location .getPath ();
66
+ }
57
67
68
+ private static void settJdniOppslag (DataSource dataSource ) {
58
69
try {
59
-
60
- new EnvEntry ("jdbc/defaultDS" , ds );
61
- return ds ;
70
+ new EnvEntry ("jdbc/defaultDS" , dataSource ); // NOSONAR
62
71
} catch (NamingException e ) {
63
- throw new IllegalStateException ("Feil under registrering av JDNI-entry for default datasource" , e );
72
+ throw new IllegalStateException ("Feil under registrering av JDNI-entry for default datasource" , e ); // NOSONAR
64
73
}
65
74
}
66
75
67
- private static HikariDataSource createDs (String user ) {
68
- Objects .requireNonNull (user , "user" );
76
+ private static HikariDataSource createDatasource (String jdbcUrl , String username , String password ) {
69
77
var cfg = new HikariConfig ();
70
- cfg .setJdbcUrl (
71
- System .getProperty ("datasource.defaultDS.url" , String .format ("jdbc:postgresql://127.0.0.1:5999/%s?reWriteBatchedInserts=true" , USER )));
72
- cfg .setUsername (USER );
73
- cfg .setPassword (USER );
78
+ cfg .setJdbcUrl (jdbcUrl );
79
+ cfg .setUsername (username );
80
+ cfg .setPassword (password );
74
81
cfg .setConnectionTimeout (1500 );
75
82
cfg .setValidationTimeout (120L * 1000L );
76
83
cfg .setMaximumPoolSize (4 );
77
84
cfg .setAutoCommit (false );
78
85
79
86
var ds = new HikariDataSource (cfg );
80
- Runtime .getRuntime ().addShutdownHook (new Thread (new Runnable () {
81
- @ Override
82
- public void run () {
83
- ds .close ();
84
- }
85
- }));
87
+ Runtime .getRuntime ().addShutdownHook (new Thread (ds ::close ));
86
88
return ds ;
87
89
}
88
-
89
- public static DataSource initUnitTestDataSource () {
90
- if (DS != null ) {
91
- return DS ;
92
- }
93
- settJdniOppslag (USER );
94
- return DS ;
95
- }
96
-
97
90
}
0 commit comments