libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 4ebc2ee35e0014e7bf1702666e17c873729beb7d
parent ee66250d7f4f30220f49ff38e74428f1a0e800bf
Author: MS <ms@taler.net>
Date:   Thu,  4 Jun 2020 22:26:11 +0200

sandbox uses clikt

Diffstat:
Msandbox/build.gradle | 2+-
Msandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt | 4++--
Msandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt | 36++++++++++++++++++++++++++----------
3 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/sandbox/build.gradle b/sandbox/build.gradle @@ -55,7 +55,7 @@ dependencies { implementation group: 'org.bouncycastle', name: 'bcprov-jdk16', version: '1.45' implementation group: 'org.xerial', name: 'sqlite-jdbc', version: '3.28.0' implementation group: 'org.apache.commons', name: 'commons-compress', version: '1.20' - + implementation("com.github.ajalt:clikt:2.7.0") implementation "org.jetbrains.exposed:exposed-core:$exposed_version" implementation "org.jetbrains.exposed:exposed-dao:$exposed_version" implementation "org.jetbrains.exposed:exposed-jdbc:$exposed_version" diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt @@ -299,8 +299,8 @@ class BankAccountEntity(id: EntityID<Int>) : IntEntity(id) { var subscriber by EbicsSubscriberEntity referencedOn BankAccountsTable.subscriber } -fun dbCreateTables() { - Database.connect("jdbc:sqlite:libeufin-sandbox.sqlite3", "org.sqlite.JDBC") +fun dbCreateTables(dbName: String) { + Database.connect("jdbc:sqlite:${dbName}", "org.sqlite.JDBC") TransactionManager.manager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE transaction { addLogger(StdOutSqlLogger) diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt @@ -49,21 +49,21 @@ import tech.libeufin.util.RawPayment import java.lang.ArithmeticException import java.math.BigDecimal import java.security.interfaces.RSAPublicKey -import java.text.DateFormat import javax.xml.bind.JAXBContext import com.fasterxml.jackson.core.util.DefaultIndenter import com.fasterxml.jackson.core.util.DefaultPrettyPrinter -import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.SerializationFeature -import com.fasterxml.jackson.databind.exc.MismatchedInputException import com.fasterxml.jackson.module.kotlin.KotlinModule -import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException -import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import io.ktor.http.toHttpDateString import org.jetbrains.exposed.sql.statements.api.ExposedBlob import java.time.Instant -import java.time.LocalDate -import java.time.LocalDateTime +import com.github.ajalt.clikt.core.CliktCommand +import com.github.ajalt.clikt.core.ProgramResult +import com.github.ajalt.clikt.core.subcommands +import com.github.ajalt.clikt.parameters.arguments.argument +import com.github.ajalt.clikt.parameters.options.default +import com.github.ajalt.clikt.parameters.options.option +import com.github.ajalt.clikt.parameters.options.prompt class CustomerNotFound(id: String?) : Exception("Customer ${id} not found") class BadInputData(inputData: String?) : Exception("Customer provided invalid input data: ${inputData}") @@ -77,6 +77,17 @@ data class SandboxError( val reason: String ) : java.lang.Exception() +class SandboxCommand : CliktCommand() { + override fun run() = Unit +} + +class Serve : CliktCommand("Run sandbox HTTP server") { + private val dbName by option().default("libeufin-sandbox.sqlite3") + override fun run() { + serverMain(dbName) + } +} + fun findEbicsSubscriber(partnerID: String, userID: String, systemID: String?): EbicsSubscriberEntity? { return if (systemID == null) { EbicsSubscriberEntity.find { @@ -117,13 +128,18 @@ inline fun <reified T> Document.toObject(): T { } fun BigDecimal.signToString(): String { - return if (this.signum() > 0) "+" else "" // minus sign is added by default already. } -fun main() { - dbCreateTables() +fun main(args: Array<String>) { + SandboxCommand() + .subcommands(Serve()) + .main(args) +} + +fun serverMain(dbName: String) { + dbCreateTables(dbName) val server = embeddedServer(Netty, port = 5000) { install(CallLogging) { this.level = Level.DEBUG