diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-06-08 17:22:49 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-06-08 17:22:49 +0530 |
commit | 3dbf7c87943e8ff7c1194d65ac60c1665d2d1a90 (patch) | |
tree | d80fe61cacdeabbfd21aecc84fc45e0b9a11f4d9 /contrib | |
parent | ce7049b28e8809ffb2ea9fe86b05a05bcfc166c5 (diff) | |
download | libeufin-3dbf7c87943e8ff7c1194d65ac60c1665d2d1a90.tar.gz libeufin-3dbf7c87943e8ff7c1194d65ac60c1665d2d1a90.tar.bz2 libeufin-3dbf7c87943e8ff7c1194d65ac60c1665d2d1a90.zip |
spawn test environment via util
Diffstat (limited to 'contrib')
-rwxr-xr-x | contrib/start-testenv.py | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/contrib/start-testenv.py b/contrib/start-testenv.py deleted file mode 100755 index 66e49477..00000000 --- a/contrib/start-testenv.py +++ /dev/null @@ -1,293 +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 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 bank connection 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" - -# Databases -NEXUS_DB="test-nexus.sqlite3" - -def fail(msg): - print(msg) - nexus.terminate() - sandbox.terminate() - exit(1) - - -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/{}".format(NEXUS_DB)]) -DEVNULL = open(os.devnull, "w") - -assert 0 == call( - ["./gradlew", "nexus:run", "--console=plain", "--args=superuser admin --password x --db-name={}".format(NEXUS_DB)] -) - -# Start nexus -checkPorts([5001]) -nexus = Popen( - ["./gradlew", "nexus:run", "--console=plain", "--args=serve --db-name={}".format(NEXUS_DB)], - 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/subscribers", - json=dict(hostID=HOST_ID, partnerID=PARTNER_ID, userID=USER_ID), - ) -) - -# 0.c -assertResponse( - post( - "http://localhost:5000/admin/ebics/bank-accounts", - 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. - -assertResponse( - post( - "http://localhost:5001/users", - headers=dict(Authorization=ADMIN_AUTHORIZATION_HEADER), - json=dict(username=USERNAME, password=PASSWORD), - ) -) - -print("creating bank connection") - -# 1.b, make a ebics bank connection for the new user. -assertResponse( - post( - "http://localhost:5001/bank-connections", - json=dict( - name="my-ebics", - source="new", - type="ebics", - data=dict( - ebicsURL=EBICS_URL, hostID=HOST_ID, partnerID=PARTNER_ID, userID=USER_ID - ), - ), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -print("connecting") - -assertResponse( - post( - "http://localhost:5001/bank-connections/my-ebics/connect", - json=dict(), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - - -# 2.c, fetch bank account information -assertResponse( - post( - "http://localhost:5001/bank-connections/my-ebics/ebics/import-accounts", - json=dict(), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -# 3, ask nexus to download history -assertResponse( - post( - f"http://localhost:5001/bank-accounts/{BANK_ACCOUNT_LABEL}/fetch-transactions", - json=dict(), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -# 4, make sure history is empty -resp = assertResponse( - get( - f"http://localhost:5001/bank-accounts/{BANK_ACCOUNT_LABEL}/transactions", - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) -if len(resp.json().get("transactions")) != 0: - fail("unexpected number of transactions") - -# 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") -if PREPARED_PAYMENT_UUID == None: - fail("Payment UUID not received") - -# 5.b, submit prepared statement -assertResponse( - post( - f"http://localhost:5001/bank-accounts/{BANK_ACCOUNT_LABEL}/prepared-payments/{PREPARED_PAYMENT_UUID}/submit", - json=dict(), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -# 6, request history after payment submission -assertResponse( - post( - f"http://localhost:5001/bank-accounts/{BANK_ACCOUNT_LABEL}/fetch-transactions", - json=dict(), - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -resp = assertResponse( - get( - f"http://localhost:5001/bank-accounts/{BANK_ACCOUNT_LABEL}/transactions", - headers=dict(Authorization=USER_AUTHORIZATION_HEADER), - ) -) - -if len(resp.json().get("transactions")) != 1: - fail("Unexpected number of transactions; should be 1") - - -try: - input("press enter to stop LibEuFin test environment ...") -finally: - nexus.terminate() - sandbox.terminate() |