libeufin

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

commit bf264dbc3f82ee2a5988381785e29fd286b6fdbf
parent bd6cbe43c27144b5537cd96e3745777351768272
Author: Florian Dold <florian.dold@gmail.com>
Date:   Thu, 31 Oct 2019 19:41:53 +0100

clean up tests and fix annotations

Diffstat:
Msandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsMessages.kt | 77++++++++++++++++++++++++++++++++++++++---------------------------------------
Msandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/EbicsMessages.kt | 6+++---
Asandbox/src/test/kotlin/EbicsMessagesTest.kt | 170+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsandbox/src/test/kotlin/HiaLoadTest.kt | 33---------------------------------
Dsandbox/src/test/kotlin/InnerIniLoadTest.kt | 32--------------------------------
Dsandbox/src/test/kotlin/JaxbTest.kt | 96-------------------------------------------------------------------------------
Dsandbox/src/test/kotlin/KeyCmpTest.kt | 27---------------------------
Msandbox/src/test/kotlin/LogTest.kt | 1-
Dsandbox/src/test/kotlin/ResponseTest.kt | 22----------------------
Dsandbox/src/test/kotlin/XmlSigTest.kt | 34----------------------------------
Dsandbox/src/test/kotlin/XmlTest.kt | 25-------------------------
Asandbox/src/test/kotlin/XmlUtilTest.kt | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Dsandbox/src/test/kotlin/XsiTypeAttributeTest.kt | 29-----------------------------
13 files changed, 260 insertions(+), 341 deletions(-)

diff --git a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsMessages.kt b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsMessages.kt @@ -202,29 +202,29 @@ class DataEncryptionInfo { propOrder = ["transactionPhase", "segmentNumber", "orderID", "returnCode", "reportText", "any"] ) class EbicsResponseMutableHeaderType { - @XmlElement(name = "TransactionPhase", required = true) - @XmlSchemaType(name = "token") + @get:XmlElement(name = "TransactionPhase", required = true) + @get:XmlSchemaType(name = "token") lateinit var transactionPhase: TransactionPhaseType - @XmlElement(name = "SegmentNumber") + @get:XmlElement(name = "SegmentNumber") var segmentNumber: SegmentNumber? = null - @XmlElement(name = "OrderID") - @XmlJavaTypeAdapter(CollapsedStringAdapter::class) - @XmlSchemaType(name = "token") + @get:XmlElement(name = "OrderID") + @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class) + @get:XmlSchemaType(name = "token") var orderID: String? = null - @XmlElement(name = "ReturnCode", required = true) - @XmlJavaTypeAdapter(CollapsedStringAdapter::class) - @XmlSchemaType(name = "token") + @get:XmlElement(name = "ReturnCode", required = true) + @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class) + @get:XmlSchemaType(name = "token") lateinit var returnCode: String - @XmlElement(name = "ReportText", required = true) - @XmlJavaTypeAdapter(NormalizedStringAdapter::class) - @XmlSchemaType(name = "normalizedString") + @get:XmlElement(name = "ReportText", required = true) + @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class) + @get:XmlSchemaType(name = "normalizedString") lateinit var reportText: String - @XmlAnyElement(lax = true) + @get:XmlAnyElement(lax = true) var any: List<Any>? = null @XmlAccessorType(XmlAccessType.NONE) @@ -261,23 +261,24 @@ enum class TransactionPhaseType(value: String) { @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "ResponseStaticHeaderType", propOrder = ["transactionID", "numSegments"]) class ResponseStaticHeaderType { - @XmlElement(name = "TransactionID", type = String::class) - @XmlJavaTypeAdapter(HexBinaryAdapter::class) - @XmlSchemaType(name = "hexBinary") + @get:XmlElement(name = "TransactionID", type = String::class) + @get:XmlJavaTypeAdapter(HexBinaryAdapter::class) + @get:XmlSchemaType(name = "hexBinary") var transactionID: ByteArray? = null - @XmlElement(name = "NumSegments") - @XmlSchemaType(name = "positiveInteger") + @get:XmlElement(name = "NumSegments") + @get:XmlSchemaType(name = "positiveInteger") var numSegments: BigInteger? = null } @XmlAccessorType(XmlAccessType.NONE) +@XmlType(name = "") class TimestampBankParameter { - @XmlValue + @get:XmlValue lateinit var value: XMLGregorianCalendar - @XmlAttribute(name = "authenticate", required = true) + @get:XmlAttribute(name = "authenticate", required = true) var authenticate: Boolean = false } @@ -321,13 +322,13 @@ class EbicsResponse { @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "", propOrder = ["dataTransfer", "returnCode", "timestampBankParameter"]) class Body { - @XmlElement(name = "DataTransfer") + @get:XmlElement(name = "DataTransfer") var dataTransfer: DataTransferResponseType? = null - @XmlElement(name = "ReturnCode", required = true) + @get:XmlElement(name = "ReturnCode", required = true) lateinit var returnCode: ReturnCode - @XmlElement(name = "TimestampBankParameter") + @get:XmlElement(name = "TimestampBankParameter") var timestampBankParameter: TimestampBankParameter? = null @XmlAccessorType(XmlAccessType.NONE) @@ -365,13 +366,13 @@ class EbicsResponse { } -@XmlAccessorType(XmlAccessType.NONE) @XmlType( name = "PubKeyValueType", propOrder = [ "rsaKeyValue", "timeStamp" ] ) +@XmlAccessorType(XmlAccessType.NONE) class PubKeyValueType { @get:XmlElement(name = "RSAKeyValue", namespace = "http://www.w3.org/2000/09/xmldsig#", required = true) lateinit var rsaKeyValue: RSAKeyValueType @@ -379,9 +380,6 @@ class PubKeyValueType { @get:XmlElement(name = "TimeStamp", required = false) @get:XmlSchemaType(name = "dateTime") var timeStamp: XMLGregorianCalendar? = null - - @get:XmlAnyElement(lax = true) - var any: List<Any>? = null } @@ -434,6 +432,7 @@ class EncryptionPubKeyInfoType { name = "HIARequestOrderDataType", propOrder = ["authenticationPubKeyInfo", "encryptionPubKeyInfo", "partnerID", "userID", "any"] ) +@XmlRootElement(name = "HIARequestOrderData") class HIARequestOrderDataType { @get:XmlElement(name = "AuthenticationPubKeyInfo", required = true) lateinit var authenticationPubKeyInfo: AuthenticationPubKeyInfoType @@ -491,19 +490,19 @@ class EbicsKeyManagementResponse { @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "", propOrder = ["orderID", "returnCode", "reportText"]) class KeyManagementResponseMutableHeaderType { - @XmlElement(name = "OrderID") - @XmlJavaTypeAdapter(CollapsedStringAdapter::class) - @XmlSchemaType(name = "token") + @get:XmlElement(name = "OrderID") + @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class) + @get:XmlSchemaType(name = "token") var orderID: String? = null - @XmlElement(name = "ReturnCode", required = true) - @XmlJavaTypeAdapter(CollapsedStringAdapter::class) - @XmlSchemaType(name = "token") + @get:XmlElement(name = "ReturnCode", required = true) + @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class) + @get:XmlSchemaType(name = "token") lateinit var returnCode: String - @XmlElement(name = "ReportText", required = true) - @XmlJavaTypeAdapter(NormalizedStringAdapter::class) - @XmlSchemaType(name = "normalizedString") + @get:XmlElement(name = "ReportText", required = true) + @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class) + @get:XmlSchemaType(name = "normalizedString") lateinit var reportText: String } } @@ -511,13 +510,13 @@ class EbicsKeyManagementResponse { @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "", propOrder = ["dataTransfer", "returnCode", "timestampBankParameter"]) class Body { - @XmlElement(name = "DataTransfer") + @get:XmlElement(name = "DataTransfer") val dataTransfer: DataTransfer? = null - @XmlElement(name = "ReturnCode", required = true) + @get:XmlElement(name = "ReturnCode", required = true) lateinit var returnCode: ReturnCode - @XmlElement(name = "TimestampBankParameter") + @get:XmlElement(name = "TimestampBankParameter") var timestampBankParameter: TimestampBankParameter? = null @XmlAccessorType(XmlAccessType.NONE) diff --git a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/EbicsMessages.kt b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/EbicsMessages.kt @@ -36,11 +36,11 @@ import javax.xml.datatype.XMLGregorianCalendar ] ) class PubKeyValueType { - @XmlElement(name = "RSAKeyValue", namespace = "http://www.w3.org/2000/09/xmldsig#", required = true) + @get:XmlElement(name = "RSAKeyValue", namespace = "http://www.w3.org/2000/09/xmldsig#", required = true) lateinit var rsaKeyValue: RSAKeyValueType - @XmlElement(name = "TimeStamp") - @XmlSchemaType(name = "dateTime") + @get:XmlElement(name = "TimeStamp") + @get:XmlSchemaType(name = "dateTime") var timeStamp: XMLGregorianCalendar? = null @XmlAnyElement(lax = true) diff --git a/sandbox/src/test/kotlin/EbicsMessagesTest.kt b/sandbox/src/test/kotlin/EbicsMessagesTest.kt @@ -0,0 +1,169 @@ +package tech.libeufin.sandbox + +import junit.framework.TestCase.assertEquals +import org.apache.xml.security.binding.xmldsig.SignatureType +import org.junit.Test +import org.w3c.dom.Element +import tech.libeufin.schema.ebics_h004.* +import tech.libeufin.schema.ebics_hev.HEVResponse +import tech.libeufin.schema.ebics_hev.SystemReturnCodeType +import tech.libeufin.schema.ebics_s001.SignaturePubKeyOrderData +import kotlin.test.assertNotNull +import kotlin.test.assertTrue + +class EbicsMessagesTest { + /** + * Tests the JAXB instantiation of non-XmlRootElement documents, + * as notably are the inner XML strings carrying keys in INI/HIA + * messages. + */ + @Test + fun importNonRoot() { + val classLoader = ClassLoader.getSystemClassLoader() + val ini = classLoader.getResource("ebics_ini_inner_key.xml") + val jaxb = XMLUtil.convertStringToJaxb<SignaturePubKeyOrderData>(ini.readText()) + assertEquals("A006", jaxb.value.signaturePubKeyInfo.signatureVersion) + } + + /** + * Test string -> JAXB + */ + @Test + fun stringToJaxb() { + val classLoader = ClassLoader.getSystemClassLoader() + val ini = classLoader.getResource("ebics_ini_request_sample.xml") + val jaxb = XMLUtil.convertStringToJaxb<EbicsUnsecuredRequest>(ini.readText()) + println("jaxb loaded") + assertEquals( + "INI", + jaxb.value.header.static.orderDetails.orderType + ) + } + + /** + * Test JAXB -> string + */ + @Test + fun jaxbToString() { + val hevResponseJaxb = HEVResponse().apply { + this.systemReturnCode = SystemReturnCodeType().apply { + this.reportText = "[EBICS_OK]" + this.returnCode = "000000" + } + this.versionNumber = listOf(HEVResponse.VersionNumber.create("H004", "02.50")) + } + XMLUtil.convertJaxbToString(hevResponseJaxb) + } + + + /** + * Test DOM -> JAXB + */ + @Test + fun domToJaxb() { + val classLoader = ClassLoader.getSystemClassLoader() + val ini = classLoader.getResource("ebics_ini_request_sample.xml")!! + val iniDom = XMLUtil.parseStringIntoDom(ini.readText()) + XMLUtil.convertDomToJaxb<EbicsUnsecuredRequest>( + EbicsUnsecuredRequest::class.java, + iniDom + ) + } + + @Test + fun testKeyMgmgResponse() { + val responseXml = EbicsKeyManagementResponse().apply { + header = EbicsKeyManagementResponse.Header().apply { + mutable = EbicsKeyManagementResponse.Header.KeyManagementResponseMutableHeaderType().apply { + reportText = "foo" + returnCode = "bar" + } + _static = EbicsKeyManagementResponse.Header.EmptyStaticHeader() + } + version = "H004" + body = EbicsKeyManagementResponse.Body().apply { + returnCode = EbicsKeyManagementResponse.Body.ReturnCode().apply { + authenticate = true + value = "000000" + } + } + } + val text = XMLUtil.convertJaxbToString(responseXml) + assertTrue(text.isNotEmpty()) + } + + @Test + fun testParseHiaRequestOrderData() { + val classLoader = ClassLoader.getSystemClassLoader() + val hia = classLoader.getResource("hia_request_order_data.xml")!!.readText() + XMLUtil.convertStringToJaxb<HIARequestOrderDataType>(hia) + } + + @Test + fun hiaLoad() { + val classLoader = ClassLoader.getSystemClassLoader() + val hia = classLoader.getResource("hia_request.xml")!! + val hiaDom = XMLUtil.parseStringIntoDom(hia.readText()) + val x: Element = hiaDom.getElementsByTagNameNS( + "urn:org:ebics:H004", + "OrderDetails" + )?.item(0) as Element + + x.setAttributeNS( + "http://www.w3.org/2001/XMLSchema-instance", + "type", + "UnsecuredReqOrderDetailsType" + ) + + XMLUtil.convertDomToJaxb<EbicsUnsecuredRequest>( + EbicsUnsecuredRequest::class.java, + hiaDom + ) + } + + @Test + fun loadInnerKey() { + val jaxbKey = run { + val classLoader = ClassLoader.getSystemClassLoader() + val file = classLoader.getResource( + "ebics_ini_inner_key.xml" + ) + assertNotNull(file) + XMLUtil.convertStringToJaxb<SignaturePubKeyOrderData>(file.readText()) + } + + val modulus = jaxbKey.value.signaturePubKeyInfo.pubKeyValue.rsaKeyValue.modulus + val exponent = jaxbKey.value.signaturePubKeyInfo.pubKeyValue.rsaKeyValue.exponent + CryptoUtil.loadRsaPublicKeyFromComponents(modulus, exponent) + } + + @Test + fun loadIniMessage() { + val classLoader = ClassLoader.getSystemClassLoader() + val text = classLoader.getResource("ebics_ini_request_sample.xml")!!.readText() + XMLUtil.convertStringToJaxb<EbicsUnsecuredRequest>(text) + } + + @Test + fun loadResponse() { + val response = EbicsResponse().apply { + version = "H004" + header = EbicsResponse.Header().apply { + _static = ResponseStaticHeaderType() + mutable = EbicsResponseMutableHeaderType().apply { + this.reportText = "foo" + this.returnCode = "bar" + this.transactionPhase = TransactionPhaseType.INITIALISATION + } + } + authSignature = SignatureType() + body = EbicsResponse.Body().apply { + returnCode = EbicsResponse.Body.ReturnCode().apply { + authenticate = true + value = "asdf" + } + } + } + print(XMLUtil.convertJaxbToString(response)) + } +} +\ No newline at end of file diff --git a/sandbox/src/test/kotlin/HiaLoadTest.kt b/sandbox/src/test/kotlin/HiaLoadTest.kt @@ -1,32 +0,0 @@ -package tech.libeufin.sandbox - -import org.junit.Test -import org.w3c.dom.Element -import tech.libeufin.schema.ebics_h004.EbicsUnsecuredRequest - -class HiaLoadTest { - - @Test - fun hiaLoad() { - - val processor = XMLUtil() - val classLoader = ClassLoader.getSystemClassLoader() - val hia = classLoader.getResource("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ebicsUnsecuredRequest xmlns=\"urn:org:ebics:H004\"\n xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"urn:org:ebics:H004 ebics_keymgmt_request_H004.xsd\"\n Version=\"H004\"\n Revision=\"1\">\n <header authenticate=\"true\">\n <static>\n <HostID>LIBEUFIN-SANDBOX</HostID>\n <PartnerID>CUSTM001</PartnerID>\n <UserID>u1</UserID>\n <OrderDetails>\n <OrderType>HIA</OrderType>\n <OrderAttribute>DZNNN</OrderAttribute>\n </OrderDetails>\n <SecurityMedium>0000</SecurityMedium>\n </static>\n <mutable/>\n </header>\n <body>\n <DataTransfer>\n <OrderData>eJzNlsmyo0YWhvf1FBW3l0SZZBY3VHIwCwESM0g7ZpCYxAxPb/mWh7ZdrlUvmhX8Z/gzyPNl5P7npSo/T0nXF0399Q35Cbz9fPi0P8qMmTzHpB8uXZx0fDAEn1+Jdf8e91/f8mFo32F4nuefZuynpstgFAAAAxp+5cR9kf3n7dPn7z0fLb6+jV39/qp6T8Ii6t+PAOA/yn9PXh3/YvpR9+FrAYD8sHbpi39ZLwL7mmpFeVIFX4q6H4I6St4Or157ZhzypB6KKBheP0UfQyVZ5TptDh9G+2+CG5RjcvjNeh/376bF/F3+FtCaeCzH/sCccjF6CEpIHO9qNg7sk6vEJqcu5+zCjy3Te4YaE00r3WCcLidQGGEqJ4uoRMrcaQFlAnAK2xDVb1T2KGFMbW87hbMe9m5XzjCb6kuIareAuStQx66uzs+PUlk5oQim7B6eoNW2qo4Ljxu4jbFWLM4M7n4geL2ZNSiMnxum8+d+YTntqIqVV3eS06KTHYeBuOmqaXA1Ar/csDRAAFFNmr8cGc07u8ZC9TidnjhurtHURIQpvLBIf6Uj/5xQT2pGj62hFy2jbldl1wQtTkKbBKm0d2pWZIxX6Q6brViRT8Hl5UeW6FnsgIC1YQslccVX8AhjALHjgHF/ENYD8+3O7ZLOjPhJWvOeMniZ3ayU8F9rAxgdA9xMO1mN0ITDKKWuzZ23hRWH6P3ZKRn3FBhahVPVUOgmF1Br6mWEGkoWQ9h1eXcWlHsA5sGwVg6PurNwXCdWaw70kceyi3Gye6IjoQTPmksNZ5SAyYFlYQD2HLzenvaur+j7YOw20fN9ZEQK+yYyl0AYctO+tL7HmmVR6lw3hpVuLQpfJxvUcjJfsQ+pQCzmVCuiBpbg+DR1uktRiLu3+LHTSiTqQrWN+QF3a4lGdo/NMirzSlakYYUsCgekexluTTKjt4LKV65gMNMX5fIM3xBPu3PUGepNk19iM6yPa4K3z9m8X4KU3gVayt7E+jGR7DWwoZlcyj38X4P7l2kWlrapX3QcGINhP9L+UH6HAf4+DXu7qBJrCKr2gAJk9wVBvgDERpB3BLxjxG0P/xn/Bhr8D9L+hqb77dg6+ACge/j7sV+Bhn9E9F6oo25t/7eoqyBWNpkKhBnWdoKGuhmCBRJ82aiLXKO+c69WObdyykqpGrcg2A+PPp8it7LPdjNhK5BiMEIn6h6QgJHjEWsmk3Jz+9arzzIBzYNz3qj0mNT8xVTYUR8xVxXWklfOR9nz6FQ6z/gI7Gwkg6kTjx2OnisyF3DN823VzoSr4g5ryJwbHMquYT4NDSEM0PbsLwYsRRPq9lvpA5nnoqlXi9vTCYT4FkyoE7QDt5aBImu2fMdO5d0bBJftAd5cSFpop0IvJKXEH4KxYVdK8B7lsp0JfSmIiwiriH9a+plTZiGxZc8hezlARdah8KgLdshknHN6xLyi0SWHjCm6cYu2J4n6VkCYMjfdzMMxRs1sRCsAt9LXlrr01YT4jeM2RE95x8qg+zShwUrm7MyWCdonrmK+SL8U8gsGwbCZbECR3PP5ihjNrA6ryssn9bR6BnTlRnBkNYmdG6aEuzBLGnrk1WxY2VwBGH5S6tCp/VFGBobwT2FY2JSrPquMjHjlFnGFWDCutPVlcNIwljSFU34Ws5h4bdgq2eKUHV+jcHVQx5v74z2uToGp3xmRjGxpTkTEnnnaf7zQb+rdLpo0DlJL7ZwxCJ8OJIRM6iQvetZRo4sQoCTSbQp1HVovaZ95jUK/zljDup8ehRVrEBGCRGZmzukmaSZn61EXF/pRszUNjc8sVSdM9+Wuq1WA6f+vqP+J5e8oCx+Y/1P/QPzfKN7rQTfUSSfzB8HnjsxZEl5uf2i/Zjj9x6vNqIK5h3/7+rSHv3MJOnz6BXLJ7gw=</OrderData>\n </DataTransfer>\n </body>\n</ebicsUnsecuredRequest>\n") - val hiaDom = XMLUtil.parseStringIntoDom(hia.readText()) - val x: Element = hiaDom.getElementsByTagNameNS( - "urn:org:ebics:H004", - "OrderDetails" - )?.item(0) as Element - - x.setAttributeNS( - "http://www.w3.org/2001/XMLSchema-instance", - "type", - "UnsecuredReqOrderDetailsType" - ) - - XMLUtil.convertDomToJaxb<EbicsUnsecuredRequest>( - EbicsUnsecuredRequest::class.java, - hiaDom - ) - } -} -\ No newline at end of file diff --git a/sandbox/src/test/kotlin/InnerIniLoadTest.kt b/sandbox/src/test/kotlin/InnerIniLoadTest.kt @@ -1,31 +0,0 @@ -package tech.libeufin.sandbox - -import org.junit.Test -import tech.libeufin.schema.ebics_h004.EbicsUnsecuredRequest -import tech.libeufin.schema.ebics_s001.SignaturePubKeyOrderData -import kotlin.test.assertNotNull - -class InnerIniLoadTest { - @Test - fun loadInnerKey() { - val jaxbKey = run { - val classLoader = ClassLoader.getSystemClassLoader() - val file = classLoader.getResource( - "ebics_ini_inner_key.xml" - ) - assertNotNull(file) - XMLUtil.convertStringToJaxb<SignaturePubKeyOrderData>(file.readText()) - } - - val modulus = jaxbKey.value.signaturePubKeyInfo.pubKeyValue.rsaKeyValue.modulus - val exponent = jaxbKey.value.signaturePubKeyInfo.pubKeyValue.rsaKeyValue.exponent - CryptoUtil.loadRsaPublicKeyFromComponents(modulus, exponent) - } - - @Test - fun loadIniMessage() { - val classLoader = ClassLoader.getSystemClassLoader() - val text = classLoader.getResource("ebics_ini_request_sample.xml")!!.readText() - XMLUtil.convertStringToJaxb<EbicsUnsecuredRequest>(text) - } -} -\ No newline at end of file diff --git a/sandbox/src/test/kotlin/JaxbTest.kt b/sandbox/src/test/kotlin/JaxbTest.kt @@ -1,95 +0,0 @@ -package tech.libeufin.sandbox - -import junit.framework.TestCase.assertEquals -import org.junit.Test -import tech.libeufin.schema.ebics_h004.EbicsKeyManagementResponse -import tech.libeufin.schema.ebics_h004.EbicsUnsecuredRequest -import tech.libeufin.schema.ebics_h004.HIARequestOrderDataType -import tech.libeufin.schema.ebics_hev.HEVResponse -import tech.libeufin.schema.ebics_hev.SystemReturnCodeType -import tech.libeufin.schema.ebics_s001.SignaturePubKeyOrderData -import kotlin.test.assertTrue - -class JaxbTest { - /** - * Tests the JAXB instantiation of non-XmlRootElement documents, - * as notably are the inner XML strings carrying keys in INI/HIA - * messages. - */ - @Test - fun importNonRoot() { - val classLoader = ClassLoader.getSystemClassLoader() - val ini = classLoader.getResource("ebics_ini_inner_key.xml") - val jaxb = XMLUtil.convertStringToJaxb<SignaturePubKeyOrderData>(ini.readText()) - assertEquals("A006", jaxb.value.signaturePubKeyInfo.signatureVersion) - } - - /** - * Test string -> JAXB - */ - @Test - fun stringToJaxb() { - val classLoader = ClassLoader.getSystemClassLoader() - val ini = classLoader.getResource("ebics_ini_request_sample_patched.xml") - val jaxb = XMLUtil.convertStringToJaxb<EbicsUnsecuredRequest>(ini.readText()) - println("jaxb loaded") - assertEquals( - "INI", - jaxb.value.header.static.orderDetails.orderType - ) - } - - /** - * Test JAXB -> string - */ - @Test - fun jaxbToString() { - val hevResponseJaxb = HEVResponse().apply { - this.systemReturnCode = SystemReturnCodeType().apply { - this.reportText = "[EBICS_OK]" - this.returnCode = "000000" - } - this.versionNumber = listOf(HEVResponse.VersionNumber.create("H004", "02.50")) - } - XMLUtil.convertJaxbToString(hevResponseJaxb) - } - - - /** - * Test DOM -> JAXB - */ - @Test - fun domToJaxb() { - val classLoader = ClassLoader.getSystemClassLoader() - val ini = classLoader.getResource("ebics_ini_request_sample_patched.xml") - val iniDom = XMLUtil.parseStringIntoDom(ini.readText()) - XMLUtil.convertDomToJaxb<EbicsUnsecuredRequest>( - EbicsUnsecuredRequest::class.java, - iniDom - ) - } - - @Test - fun testKeyMgmgResponse() { - val responseXml = EbicsKeyManagementResponse().apply { - header = EbicsKeyManagementResponse.Header().apply { - mutable = EbicsKeyManagementResponse.Header.KeyManagementResponseMutableHeaderType().apply { - reportText = "foo" - returnCode = "bar" - } - _static = EbicsKeyManagementResponse.Header.EmptyStaticHeader() - } - version = "H004" - body = EbicsKeyManagementResponse.Body() - } - val text = XMLUtil.convertJaxbToString(responseXml) - assertTrue(text.isNotEmpty()) - } - - @Test - fun testParseHiaRequestOrderData() { - val classLoader = ClassLoader.getSystemClassLoader() - val hia = classLoader.getResource("hia_request_order_data.xml")!!.readText() - XMLUtil.convertStringToJaxb<HIARequestOrderDataType>(hia) - } -} -\ No newline at end of file diff --git a/sandbox/src/test/kotlin/KeyCmpTest.kt b/sandbox/src/test/kotlin/KeyCmpTest.kt @@ -1,26 +0,0 @@ -package tech.libeufin.sandbox - -import org.junit.Test -import java.math.BigInteger -import junit.framework.TestCase.assertTrue - -class KeyCmpTest { - - /** - * This test simulates the way keys are compared when they get - * confirmed via the "keyletter". The scenario has one format - * (ByteArray) for keys stored in the database, and another (hexadecimanl - * string) for keys communicated in the keyletter. - */ - @Test - fun bytesCmp() { - - val HEX_STRING = "AA" // as coming from the keyletter - val ba = byteArrayOf(0xAA.toByte()) // as coming from the database - - val x = HEX_STRING.toBigInteger(16) - val y = BigInteger(1, ba) - - assertTrue(x == y) - } -} -\ No newline at end of file diff --git a/sandbox/src/test/kotlin/LogTest.kt b/sandbox/src/test/kotlin/LogTest.kt @@ -10,7 +10,6 @@ class LogTest { @Test fun logLine() { - val loggerSandbox = LoggerFactory.getLogger("tech.libeufin.sandbox") val loggerNexus = LoggerFactory.getLogger("tech.libeufin.nexus") loggerSandbox.info("line") diff --git a/sandbox/src/test/kotlin/ResponseTest.kt b/sandbox/src/test/kotlin/ResponseTest.kt @@ -1,21 +0,0 @@ -package tech.libeufin.sandbox - -import org.apache.xml.security.binding.xmldsig.SignatureType -import org.junit.Test -import tech.libeufin.schema.ebics_h004.EbicsResponse - -class ResponseTest { - - @Test - fun loadResponse() { - val response = EbicsResponse().apply { - version = "H004" - header = EbicsResponse.Header().apply { - } - authSignature = SignatureType() - body = EbicsResponse.Body() - } - print(XMLUtil.convertJaxbToString(response)) - } - -} -\ No newline at end of file diff --git a/sandbox/src/test/kotlin/XmlSigTest.kt b/sandbox/src/test/kotlin/XmlSigTest.kt @@ -1,33 +0,0 @@ -package tech.libeufin.sandbox - -import org.junit.Test -import java.security.KeyPairGenerator -import kotlin.test.* - - - -class XmlSigTest { - - @Test - fun basicSigningTest() { - val doc = XMLUtil.parseStringIntoDom(""" - <foo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> - <AuthSignature /> - <bar authenticate='true'>bla</bar>Hello World - <spam> - eggs - - ham - </spam> - </foo> - """.trimIndent()) - val kpg = KeyPairGenerator.getInstance("RSA") - kpg.initialize(2048) - val pair = kpg.genKeyPair() - val otherPair = kpg.genKeyPair() - XMLUtil.signEbicsDocument(doc, pair.private) - println(XMLUtil.convertDomToString(doc)) - assertTrue(XMLUtil.verifyEbicsDocument(doc, pair.public)) - assertFalse(XMLUtil.verifyEbicsDocument(doc, otherPair.public)) - } -} -\ No newline at end of file diff --git a/sandbox/src/test/kotlin/XmlTest.kt b/sandbox/src/test/kotlin/XmlTest.kt @@ -1,24 +0,0 @@ -package tech.libeufin.sandbox - -import org.junit.Test -import org.junit.Assert.* -import javax.xml.transform.stream.StreamSource - -class XmlTest { - - val processor = tech.libeufin.sandbox.XMLUtil() - - @Test - fun hevValidation(){ - val classLoader = ClassLoader.getSystemClassLoader() - val hev = classLoader.getResourceAsStream("ebics_hev.xml") - assertTrue(processor.validate(StreamSource(hev))) - } - - @Test - fun iniValidation(){ - val classLoader = ClassLoader.getSystemClassLoader() - val ini = classLoader.getResourceAsStream("ebics_ini_request_sample.xml") - assertTrue(processor.validate(StreamSource(ini))) - } -} -\ No newline at end of file diff --git a/sandbox/src/test/kotlin/XmlUtilTest.kt b/sandbox/src/test/kotlin/XmlUtilTest.kt @@ -0,0 +1,48 @@ +package tech.libeufin.sandbox + +import org.junit.Test +import org.junit.Assert.* +import java.security.KeyPairGenerator +import javax.xml.transform.stream.StreamSource + +class XmlUtilTest { + + val processor = tech.libeufin.sandbox.XMLUtil() + + @Test + fun hevValidation(){ + val classLoader = ClassLoader.getSystemClassLoader() + val hev = classLoader.getResourceAsStream("ebics_hev.xml") + assertTrue(processor.validate(StreamSource(hev))) + } + + @Test + fun iniValidation(){ + val classLoader = ClassLoader.getSystemClassLoader() + val ini = classLoader.getResourceAsStream("ebics_ini_request_sample.xml") + assertTrue(processor.validate(StreamSource(ini))) + } + + @Test + fun basicSigningTest() { + val doc = XMLUtil.parseStringIntoDom(""" + <foo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> + <AuthSignature /> + <bar authenticate='true'>bla</bar>Hello World + <spam> + eggs + + ham + </spam> + </foo> + """.trimIndent()) + val kpg = KeyPairGenerator.getInstance("RSA") + kpg.initialize(2048) + val pair = kpg.genKeyPair() + val otherPair = kpg.genKeyPair() + XMLUtil.signEbicsDocument(doc, pair.private) + println(XMLUtil.convertDomToString(doc)) + kotlin.test.assertTrue(XMLUtil.verifyEbicsDocument(doc, pair.public)) + kotlin.test.assertFalse(XMLUtil.verifyEbicsDocument(doc, otherPair.public)) + } +} +\ No newline at end of file diff --git a/sandbox/src/test/kotlin/XsiTypeAttributeTest.kt b/sandbox/src/test/kotlin/XsiTypeAttributeTest.kt @@ -1,28 +0,0 @@ -package tech.libeufin.sandbox - -import org.junit.Test -import org.w3c.dom.Element -import tech.libeufin.schema.ebics_h004.EbicsUnsecuredRequest - -class XsiTypeAttributeTest { - - @Test - fun domToJaxb() { - - val processor = XMLUtil() - val classLoader = ClassLoader.getSystemClassLoader() - val ini = classLoader.getResource("ebics_ini_request_sample.xml") - val iniDom = XMLUtil.parseStringIntoDom(ini.readText()) - val x: Element = iniDom.getElementsByTagName("OrderDetails")?.item(0) as Element - - x.setAttributeNS( - "http://www.w3.org/2001/XMLSchema-instance", - "type", - "UnsecuredReqOrderDetailsType" - ) - - XMLUtil.convertDomToJaxb( - EbicsUnsecuredRequest::class.java, - iniDom) - } -} -\ No newline at end of file