summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMS <ms@taler.net>2023-05-05 16:59:16 +0200
committerMS <ms@taler.net>2023-05-05 16:59:16 +0200
commit550c2b39faaa8e4384e879b02e6ceabddf24bb36 (patch)
treee47c92afa805cc2dc3bbe8b23cd50ceae8aa4128
parenta52cf289234683c4ff492cd8b508cfb6c85ca1e8 (diff)
downloadlibeufin-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.gradle5
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt4
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/Scheduling.kt3
-rw-r--r--nexus/src/test/kotlin/MakeEnv.kt8
-rw-r--r--sandbox/build.gradle3
-rw-r--r--sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt5
-rw-r--r--sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt4
-rw-r--r--sandbox/src/test/kotlin/DBTest.kt3
-rw-r--r--util/src/main/kotlin/Config.kt4
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