summaryrefslogtreecommitdiff
path: root/integration-tests
diff options
context:
space:
mode:
Diffstat (limited to 'integration-tests')
-rwxr-xr-xintegration-tests/test-ebics-new.py316
-rwxr-xr-xintegration-tests/test-ebics.py158
2 files changed, 108 insertions, 366 deletions
diff --git a/integration-tests/test-ebics-new.py b/integration-tests/test-ebics-new.py
deleted file mode 100755
index cc960ccb..00000000
--- a/integration-tests/test-ebics-new.py
+++ /dev/null
@@ -1,316 +0,0 @@
-#!/usr/bin/env python3
-
-from requests import post, get
-from subprocess import call, Popen, PIPE
-from time import sleep
-import os
-import socket
-import sqlite3
-import hashlib
-import base64
-
-# Steps implemented in this test.
-#
-# 0 Prepare sandbox.
-# -> (a) Make a EBICS host, (b) make a EBICS subscriber
-# for the test runner, and (c) assign a IBAN to such
-# subscriber.
-#
-# 1 Prepare nexus.
-# -> (a) Make a Nexus user, (b) make a EBICS subscriber
-# associated to that user
-#
-# 2 Prepare the Ebics transport for the nexus user.
-# -> (a) Upload keys from Nexus to the Bank (INI & HIA),
-# (b) Download key from the Bank (HPB) to the Nexus,
-# and (c) Fetch the bank account owned by that subscriber
-# at the bank.
-
-# 3 Request history from the Nexus to the Bank (C53).
-# 4 Verify that history is empty.
-# 5 Issue a payment from Nexus
-# -> (a) Prepare & (b) trigger CCT.
-# 6 Request history after submitting the payment,
-# from Nexus to Bank.
-# 7 Verify that previous payment shows up.
-
-# Nexus user details
-USERNAME="person"
-PASSWORD="y"
-USER_AUTHORIZATION_HEADER = "basic {}".format(base64.b64encode(b"person:y").decode("utf-8"))
-
-# Admin authentication
-ADMIN_AUTHORIZATION_HEADER = "basic {}".format(base64.b64encode(b"admin:x").decode("utf-8"))
-
-# EBICS details
-EBICS_URL="http://localhost:5000/ebicsweb"
-HOST_ID="HOST01"
-PARTNER_ID="PARTNER1"
-USER_ID="USER1"
-EBICS_VERSION = "H004"
-
-# Subscriber's bank account
-SUBSCRIBER_IBAN="GB33BUKB20201555555555"
-SUBSCRIBER_BIC="BUKBGB22"
-SUBSCRIBER_NAME="Oliver Smith"
-BANK_ACCOUNT_LABEL="savings"
-
-def checkPorts(ports):
- for i in ports:
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- s.bind(("0.0.0.0", i))
- s.close()
- except:
- print("Port {} is not available".format(i))
- exit(77)
-
-def assertResponse(response):
- if response.status_code != 200:
- print("Test failed on URL: {}".format(response.url))
- # stdout/stderr from both services is A LOT of text.
- # Confusing to dump all that to console.
- print("Check nexus.log and sandbox.log, probably under /tmp")
- nexus.terminate()
- sandbox.terminate()
- exit(1)
- # Allows for finer grained checks.
- return response
-
-#-1 Clean databases and start services.
-os.chdir("..")
-assert(0 == call(["rm", "-f", "sandbox/libeufin-sandbox.sqlite3"]))
-assert(0 == call(["rm", "-f", "nexus/libeufin-nexus.sqlite3"]))
-DEVNULL = open(os.devnull, "w")
-
-# Start nexus
-checkPorts([5001])
-nexus = Popen(["./gradlew", "nexus:run"], stdout=PIPE, stderr=PIPE)
-for i in range(10):
- try:
- get("http://localhost:5001/")
- except:
- if i == 9:
- nexus.terminate()
- stdout, stderr = nexus.communicate()
- print("Nexus timed out")
- print("{}\n{}".format(stdout.decode(), stderr.decode()))
- exit(77)
- sleep(2)
- continue
- break
-# Start sandbox
-checkPorts([5000])
-sandbox = Popen(["./gradlew", "sandbox:run"], stdout=PIPE, stderr=PIPE)
-for i in range(10):
- try:
- get("http://localhost:5000/")
- except:
- if i == 9:
- nexus.terminate()
- sandbox.terminate()
- stdout, stderr = nexus.communicate()
- print("Sandbox timed out")
- print("{}\n{}".format(stdout.decode(), stderr.decode()))
- exit(77)
- sleep(2)
- continue
- break
-
-#0.a
-assertResponse(
- post(
- "http://localhost:5000/admin/ebics-host",
- json=dict(
- hostID=HOST_ID,
- ebicsVersion=EBICS_VERSION
- )
- )
-)
-
-#0.b
-assertResponse(
- post(
- "http://localhost:5000/admin/ebics-subscriber",
- json=dict(
- hostID=HOST_ID,
- partnerID=PARTNER_ID,
- userID=USER_ID
- )
- )
-)
-
-#0.c
-assertResponse(
- post(
- "http://localhost:5000/admin/ebics-subscriber/bank-account",
- json=dict(
- subscriber=dict(
- hostID=HOST_ID,
- partnerID=PARTNER_ID,
- userID=USER_ID
- ),
- iban=SUBSCRIBER_IBAN,
- bic=SUBSCRIBER_BIC,
- name=SUBSCRIBER_NAME,
- label=BANK_ACCOUNT_LABEL
- )
- )
-)
-
-#1.a, make a new nexus user.
-
-# "Create" the admin user first.
-dbconn = sqlite3.connect("nexus/libeufin-nexus.sqlite3")
-dbconn.execute(
- "INSERT INTO NexusUsers (id, password) VALUES (?, ?)",
- ("admin", sqlite3.Binary(hashlib.sha256(b"x").digest()))
-)
-dbconn.commit()
-dbconn.close()
-
-assertResponse(
- post(
- "http://localhost:5001/users",
- headers=dict(Authorization=ADMIN_AUTHORIZATION_HEADER),
- json=dict(
- username=USERNAME,
- password=PASSWORD
- )
- )
-)
-
-#1.b, make a ebics transport for the new user.
-assertResponse(
- post(
- "http://localhost:5001/bank-transports",
- json=dict(
- transport=dict(
- name="my-ebics",
- type="ebics"
- ),
- data=dict(
- ebicsURL=EBICS_URL,
- hostID=HOST_ID,
- partnerID=PARTNER_ID,
- userID=USER_ID
- )
- ),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-
-#2.a, upload keys to the bank (INI & HIA)
-assertResponse(
- post(
- "http://localhost:5001/bank-transports/sendINI",
- json=dict(
- type="ebics",
- name="my-ebics"
- ),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-
-assertResponse(
- post(
- "http://localhost:5001/bank-transports/sendHIA",
- json=dict(
- type="ebics",
- name="my-ebics"
- ),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-
-#2.b, download keys from the bank (HPB)
-assertResponse(
- post(
- "http://localhost:5001/bank-transports/syncHPB",
- json=dict(
- type="ebics",
- name="my-ebics"
- ),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-
-#2.c, fetch bank account information
-assertResponse(
- post(
- "http://localhost:5001/bank-transports/syncHTD",
- json=dict(
- type="ebics",
- name="my-ebics"
- ),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-
-#3, ask nexus to download history
-assertResponse(
- post(
- "http://localhost:5001/bank-accounts/collected-transactions",
- json=dict(
- type="ebics",
- name="my-ebics"
- ),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-
-#4, make sure history is empty
-resp = assertResponse(
- get(
- "http://localhost:5001/bank-accounts/{}/collected-transactions".format(BANK_ACCOUNT_LABEL),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-assert(len(resp.json().get("transactions")) == 0)
-
-#5.a, prepare a payment
-resp = assertResponse(
- post(
- "http://localhost:5001/bank-accounts/{}/prepared-payments".format(BANK_ACCOUNT_LABEL),
- json=dict(
- iban="FR7630006000011234567890189",
- bic="AGRIFRPP",
- name="Jacques La Fayette",
- subject="integration test",
- amount="EUR:1"
- ),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-PREPARED_PAYMENT_UUID=resp.json().get("uuid")
-assert(PREPARED_PAYMENT_UUID != None)
-
-#5.b, submit prepared statement
-assertResponse(
- post(
- "http://localhost:5001/bank-accounts/prepared-payments/submit",
- json=dict(uuid=PREPARED_PAYMENT_UUID),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-
-#6, request history after payment submission
-assertResponse(
- post(
- "http://localhost:5001/bank-accounts/collected-transactions",
- json=dict(),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-
-resp = assertResponse(
- get(
- "http://localhost:5001/bank-accounts/{}/collected-transactions".format(BANK_ACCOUNT_LABEL),
- headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
- )
-)
-assert(len(resp.json().get("transactions")) == 1)
-
-nexus.terminate()
-sandbox.terminate()
-print("Test passed!")
diff --git a/integration-tests/test-ebics.py b/integration-tests/test-ebics.py
index c1b02a83..cc960ccb 100755
--- a/integration-tests/test-ebics.py
+++ b/integration-tests/test-ebics.py
@@ -5,6 +5,9 @@ from subprocess import call, Popen, PIPE
from time import sleep
import os
import socket
+import sqlite3
+import hashlib
+import base64
# Steps implemented in this test.
#
@@ -27,11 +30,17 @@ import socket
# 4 Verify that history is empty.
# 5 Issue a payment from Nexus
# -> (a) Prepare & (b) trigger CCT.
-# 6 Request history again, from Nexus to Bank.
+# 6 Request history after submitting the payment,
+# from Nexus to Bank.
# 7 Verify that previous payment shows up.
# Nexus user details
USERNAME="person"
+PASSWORD="y"
+USER_AUTHORIZATION_HEADER = "basic {}".format(base64.b64encode(b"person:y").decode("utf-8"))
+
+# Admin authentication
+ADMIN_AUTHORIZATION_HEADER = "basic {}".format(base64.b64encode(b"admin:x").decode("utf-8"))
# EBICS details
EBICS_URL="http://localhost:5000/ebicsweb"
@@ -84,12 +93,13 @@ for i in range(10):
if i == 9:
nexus.terminate()
stdout, stderr = nexus.communicate()
+ print("Nexus timed out")
print("{}\n{}".format(stdout.decode(), stderr.decode()))
exit(77)
- sleep(1)
+ sleep(2)
continue
break
-
+# Start sandbox
checkPorts([5000])
sandbox = Popen(["./gradlew", "sandbox:run"], stdout=PIPE, stderr=PIPE)
for i in range(10):
@@ -100,9 +110,10 @@ for i in range(10):
nexus.terminate()
sandbox.terminate()
stdout, stderr = nexus.communicate()
+ print("Sandbox timed out")
print("{}\n{}".format(stdout.decode(), stderr.decode()))
exit(77)
- sleep(1)
+ sleep(2)
continue
break
@@ -147,111 +158,158 @@ assertResponse(
)
)
-#1.a
+#1.a, make a new nexus user.
+
+# "Create" the admin user first.
+dbconn = sqlite3.connect("nexus/libeufin-nexus.sqlite3")
+dbconn.execute(
+ "INSERT INTO NexusUsers (id, password) VALUES (?, ?)",
+ ("admin", sqlite3.Binary(hashlib.sha256(b"x").digest()))
+)
+dbconn.commit()
+dbconn.close()
+
assertResponse(
post(
- "http://localhost:5001/users/{}".format(USERNAME),
+ "http://localhost:5001/users",
+ headers=dict(Authorization=ADMIN_AUTHORIZATION_HEADER),
json=dict(
- password="secret"
+ username=USERNAME,
+ password=PASSWORD
)
)
)
-#1.b
+#1.b, make a ebics transport for the new user.
assertResponse(
post(
- "http://localhost:5001/ebics/subscribers/{}".format(USERNAME),
+ "http://localhost:5001/bank-transports",
json=dict(
- ebicsURL=EBICS_URL,
- hostID=HOST_ID,
- partnerID=PARTNER_ID,
- userID=USER_ID
- )
+ transport=dict(
+ name="my-ebics",
+ type="ebics"
+ ),
+ data=dict(
+ ebicsURL=EBICS_URL,
+ hostID=HOST_ID,
+ partnerID=PARTNER_ID,
+ userID=USER_ID
+ )
+ ),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
-#2.a
+
+#2.a, upload keys to the bank (INI & HIA)
assertResponse(
post(
- "http://localhost:5001/ebics/subscribers/{}/sendINI".format(USERNAME),
- json=dict()
+ "http://localhost:5001/bank-transports/sendINI",
+ json=dict(
+ type="ebics",
+ name="my-ebics"
+ ),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
assertResponse(
post(
- "http://localhost:5001/ebics/subscribers/{}/sendHIA".format(USERNAME),
- json=dict()
+ "http://localhost:5001/bank-transports/sendHIA",
+ json=dict(
+ type="ebics",
+ name="my-ebics"
+ ),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
-#2.b
+#2.b, download keys from the bank (HPB)
assertResponse(
post(
- "http://localhost:5001/ebics/subscribers/{}/sync".format(USERNAME),
- json=dict()
+ "http://localhost:5001/bank-transports/syncHPB",
+ json=dict(
+ type="ebics",
+ name="my-ebics"
+ ),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
-#2.c
+#2.c, fetch bank account information
assertResponse(
post(
- "http://localhost:5001/ebics/subscribers/{}/fetch-accounts".format(USERNAME),
- json=dict()
+ "http://localhost:5001/bank-transports/syncHTD",
+ json=dict(
+ type="ebics",
+ name="my-ebics"
+ ),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
-#3
+#3, ask nexus to download history
assertResponse(
post(
- "http://localhost:5001/ebics/subscribers/{}/collect-transactions-c53".format(USERNAME),
- json=dict()
+ "http://localhost:5001/bank-accounts/collected-transactions",
+ json=dict(
+ type="ebics",
+ name="my-ebics"
+ ),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
-#4
+#4, make sure history is empty
resp = assertResponse(
get(
- "http://localhost:5001/users/{}/history".format(USERNAME)
+ "http://localhost:5001/bank-accounts/{}/collected-transactions".format(BANK_ACCOUNT_LABEL),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
-assert(len(resp.json().get("payments")) == 0)
+assert(len(resp.json().get("transactions")) == 0)
-#5.a
-assertResponse(
+#5.a, prepare a payment
+resp = assertResponse(
post(
- "http://localhost:5001/users/{}/prepare-payment".format(USERNAME),
+ "http://localhost:5001/bank-accounts/{}/prepared-payments".format(BANK_ACCOUNT_LABEL),
json=dict(
- creditorIban="FR7630006000011234567890189",
- creditorBic="AGRIFRPP",
- creditorName="Jacques La Fayette",
- debitorIban=SUBSCRIBER_IBAN,
- debitorBic=SUBSCRIBER_BIC,
- debitorName=SUBSCRIBER_NAME,
- subject="integration test",
- sum=1
- )
+ iban="FR7630006000011234567890189",
+ bic="AGRIFRPP",
+ name="Jacques La Fayette",
+ subject="integration test",
+ amount="EUR:1"
+ ),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
+PREPARED_PAYMENT_UUID=resp.json().get("uuid")
+assert(PREPARED_PAYMENT_UUID != None)
-#5.b
+#5.b, submit prepared statement
assertResponse(
- post("http://localhost:5001/ebics/execute-payments")
+ post(
+ "http://localhost:5001/bank-accounts/prepared-payments/submit",
+ json=dict(uuid=PREPARED_PAYMENT_UUID),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
+ )
)
-#6
+#6, request history after payment submission
assertResponse(
post(
- "http://localhost:5001/ebics/subscribers/{}/collect-transactions-c53".format(USERNAME),
- json=dict()
+ "http://localhost:5001/bank-accounts/collected-transactions",
+ json=dict(),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
resp = assertResponse(
get(
- "http://localhost:5001/users/{}/history".format(USERNAME)
+ "http://localhost:5001/bank-accounts/{}/collected-transactions".format(BANK_ACCOUNT_LABEL),
+ headers=dict(Authorization=USER_AUTHORIZATION_HEADER)
)
)
-assert(len(resp.json().get("payments")) == 1)
+assert(len(resp.json().get("transactions")) == 1)
nexus.terminate()
sandbox.terminate()