diff options
author | MS <ms@taler.net> | 2023-05-05 16:59:16 +0200 |
---|---|---|
committer | MS <ms@taler.net> | 2023-05-05 16:59:16 +0200 |
commit | 550c2b39faaa8e4384e879b02e6ceabddf24bb36 (patch) | |
tree | e47c92afa805cc2dc3bbe8b23cd50ceae8aa4128 | |
parent | a52cf289234683c4ff492cd8b508cfb6c85ca1e8 (diff) | |
download | libeufin-550c2b39faaa8e4384e879b02e6ceabddf24bb36.tar.gz libeufin-550c2b39faaa8e4384e879b02e6ceabddf24bb36.tar.bz2 libeufin-550c2b39faaa8e4384e879b02e6ceabddf24bb36.zip |
DB connection via UNIX domain sockets.
That includes switching all the tests to use it.
-rw-r--r-- | nexus/build.gradle | 5 | ||||
-rw-r--r-- | nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt | 4 | ||||
-rw-r--r-- | nexus/src/main/kotlin/tech/libeufin/nexus/Scheduling.kt | 3 | ||||
-rw-r--r-- | nexus/src/test/kotlin/MakeEnv.kt | 8 | ||||
-rw-r--r-- | sandbox/build.gradle | 3 | ||||
-rw-r--r-- | sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt | 5 | ||||
-rw-r--r-- | sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt | 4 | ||||
-rw-r--r-- | sandbox/src/test/kotlin/DBTest.kt | 3 | ||||
-rw-r--r-- | util/src/main/kotlin/Config.kt | 4 |
9 files changed, 26 insertions, 13 deletions
diff --git a/nexus/build.gradle b/nexus/build.gradle index 39a519af..24e9c8cb 100644 --- a/nexus/build.gradle +++ b/nexus/build.gradle @@ -79,6 +79,7 @@ dependencies { implementation "io.ktor:ktor-client-apache:$ktor_version" implementation "io.ktor:ktor-client-auth:$ktor_version" implementation "io.ktor:ktor-server-netty:$ktor_version" + // Brings the call-logging library too. implementation "io.ktor:ktor-server-test-host:$ktor_version" implementation "io.ktor:ktor-auth:$ktor_auth_version" @@ -90,6 +91,9 @@ dependencies { // Cron syntax implementation 'com.cronutils:cron-utils:9.1.5' + // UNIX domain sockets support (used to connect to PostgreSQL) + implementation 'com.kohlschutter.junixsocket:junixsocket-core:2.6.2' + // Unit testing // testImplementation 'junit:junit:4.13.2' // From https://docs.gradle.org/current/userguide/java_testing.html#sec:java_testing_basics: @@ -97,6 +101,7 @@ dependencies { testImplementation 'org.jetbrains.kotlin:kotlin-test:1.5.21' testImplementation 'org.jetbrains.kotlin:kotlin-test-junit:1.5.21' testImplementation 'io.ktor:ktor-client-mock:2.2.4' + testImplementation 'com.kohlschutter.junixsocket:junixsocket-core:2.6.2' testImplementation project(":sandbox") } diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt index 239515e8..2f54626b 100644 --- a/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt +++ b/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt @@ -519,7 +519,7 @@ class NexusPermissionEntity(id: EntityID<Long>) : LongEntity(id) { } fun dbDropTables(dbConnectionString: String) { - Database.connect(dbConnectionString) + Database.connect(dbConnectionString, user = getCurrentUser()) transaction { SchemaUtils.drop( NexusUsersTable, @@ -545,7 +545,7 @@ fun dbDropTables(dbConnectionString: String) { } fun dbCreateTables(dbConnectionString: String) { - Database.connect(dbConnectionString) + Database.connect(dbConnectionString, user = getCurrentUser()) TransactionManager.manager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE transaction { SchemaUtils.create( diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Scheduling.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Scheduling.kt index de6ff358..8b413b44 100644 --- a/nexus/src/main/kotlin/tech/libeufin/nexus/Scheduling.kt +++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Scheduling.kt @@ -34,9 +34,6 @@ import java.lang.IllegalArgumentException import java.time.Duration import java.time.Instant import java.time.ZonedDateTime -import java.util.* -import kotlin.concurrent.schedule -import kotlin.coroutines.coroutineContext import kotlin.system.exitProcess private data class TaskSchedule( diff --git a/nexus/src/test/kotlin/MakeEnv.kt b/nexus/src/test/kotlin/MakeEnv.kt index ebec64f4..daad7447 100644 --- a/nexus/src/test/kotlin/MakeEnv.kt +++ b/nexus/src/test/kotlin/MakeEnv.kt @@ -20,10 +20,14 @@ data class EbicsKeys( ) // Convenience DB connection to switch to Postgresql: val currentUser = System.getProperty("user.name") -val TEST_DB_CONN = "jdbc:postgresql://localhost:5432/libeufincheck?user=$currentUser" + val BANK_IBAN = getIban() val FOO_USER_IBAN = getIban() val BAR_USER_IBAN = getIban() +val TCP_POSTGRES_CONN="jdbc:postgresql://localhost:5432/libeufincheck?user=$currentUser" +val UNIX_SOCKET_CONN= "jdbc:postgresql://localhost/libeufincheck?socketFactory=org.newsclub.net.unix." + + "AFUNIXSocketFactory\$FactoryArg&socketFactoryArg=/var/run/postgresql/.s.PGSQL.5432" +val TEST_DB_CONN = UNIX_SOCKET_CONN val bankKeys = EbicsKeys( auth = CryptoUtil.generateRsaKeyPair(2048), @@ -66,7 +70,7 @@ inline fun <reified ExceptionType> assertException( * Cleans up the DB file afterwards. */ fun withTestDatabase(f: () -> Unit) { - Database.connect(TEST_DB_CONN) + Database.connect(TEST_DB_CONN, user = currentUser) TransactionManager.manager.defaultIsolationLevel = java.sql.Connection.TRANSACTION_SERIALIZABLE dbDropTables(TEST_DB_CONN) tech.libeufin.sandbox.dbDropTables(TEST_DB_CONN) diff --git a/sandbox/build.gradle b/sandbox/build.gradle index aeb2a811..bc57b942 100644 --- a/sandbox/build.gradle +++ b/sandbox/build.gradle @@ -77,6 +77,9 @@ dependencies { testImplementation 'org.jetbrains.kotlin:kotlin-test-junit:1.5.21' testImplementation 'org.jetbrains.kotlin:kotlin-test:1.5.21' testImplementation group: "junit", name: "junit", version: '4.13.2' + + // UNIX domain sockets support (used to connect to PostgreSQL) + implementation 'com.kohlschutter.junixsocket:junixsocket-core:2.6.2' } application { diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt index ca83d31a..19d4283d 100644 --- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt +++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt @@ -33,6 +33,7 @@ import org.jetbrains.exposed.dao.id.LongIdTable import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.transactions.TransactionManager import org.jetbrains.exposed.sql.transactions.transaction +import tech.libeufin.util.getCurrentUser import tech.libeufin.util.internalServerError import java.sql.Connection import kotlin.reflect.* @@ -665,7 +666,7 @@ class CashoutSubmissionEntity(id: EntityID<Long>) : LongEntity(id) { } fun dbDropTables(dbConnectionString: String) { - Database.connect(dbConnectionString) + Database.connect(dbConnectionString, user = getCurrentUser()) transaction { SchemaUtils.drop( CashoutSubmissionsTable, @@ -690,7 +691,7 @@ fun dbDropTables(dbConnectionString: String) { } fun dbCreateTables(dbConnectionString: String) { - Database.connect(dbConnectionString) + Database.connect(dbConnectionString, user = getCurrentUser()) TransactionManager.manager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE transaction { SchemaUtils.create( diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt index 4229638b..a6aab42e 100644 --- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt +++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt @@ -232,7 +232,7 @@ class Camt053Tick : CliktCommand( ) { override fun run() { val dbConnString = getDbConnFromEnv(SANDBOX_DB_ENV_VAR_NAME) - Database.connect(dbConnString) + Database.connect(dbConnString, user = getCurrentUser()) dbCreateTables(dbConnString) val newStatements = mutableMapOf<String, MutableList<XLibeufinBankTransaction>>() /** @@ -301,7 +301,7 @@ class MakeTransaction : CliktCommand("Wire-transfer money between Sandbox bank a override fun run() { val dbConnString = getDbConnFromEnv(SANDBOX_DB_ENV_VAR_NAME) - Database.connect(dbConnString) + Database.connect(dbConnString, user = getCurrentUser()) // Refuse to operate without a default demobank. val demobank = getDemobank("default") if (demobank == null) { diff --git a/sandbox/src/test/kotlin/DBTest.kt b/sandbox/src/test/kotlin/DBTest.kt index fb2b8292..519e3bf7 100644 --- a/sandbox/src/test/kotlin/DBTest.kt +++ b/sandbox/src/test/kotlin/DBTest.kt @@ -21,6 +21,7 @@ import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.transactions.transaction import org.junit.Test import tech.libeufin.sandbox.* +import tech.libeufin.util.getCurrentUser import tech.libeufin.util.millis import java.io.File import java.time.LocalDateTime @@ -38,7 +39,7 @@ fun withTestDatabase(f: () -> Unit) { it.delete() } } - Database.connect(dbConn) + Database.connect(dbConn, user = getCurrentUser()) dbDropTables(dbConn) dbCreateTables(dbConn) try { f() } diff --git a/util/src/main/kotlin/Config.kt b/util/src/main/kotlin/Config.kt index be021390..b3c57ea2 100644 --- a/util/src/main/kotlin/Config.kt +++ b/util/src/main/kotlin/Config.kt @@ -74,4 +74,6 @@ fun getDbConnFromEnv(varName: String): String { exitProcess(1) } return dbConnStr -}
\ No newline at end of file +} + +fun getCurrentUser(): String = System.getProperty("user.name")
\ No newline at end of file |