summaryrefslogtreecommitdiff
path: root/tests/components/exchange.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/components/exchange.py')
-rw-r--r--tests/components/exchange.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/components/exchange.py b/tests/components/exchange.py
new file mode 100644
index 000000000..9e804a65e
--- /dev/null
+++ b/tests/components/exchange.py
@@ -0,0 +1,53 @@
+import os
+from subprocess import run
+
+from .taler_service import TalerService
+
+
+class Exchange(TalerService):
+
+ def __init__(self, config, watcher_getter, request):
+ super().__init__(config, watcher_getter, request)
+
+ # get own URL from config
+ r = run(["taler-config", "-c", config.conf, "-s", "EXCHANGE", "-o", "BASE_URL"],
+ check=True, text=True, capture_output=True)
+ self.url = r.stdout.rstrip()
+
+ # get and create directory for terms of service
+ r = run(["taler-config", "-c", config.conf, "-s", "EXCHANGE", "-o", "TERMS_DIR"],
+ check=True, text=True, capture_output=True)
+ self.terms_dir = r.stdout.rstrip().replace("${TALER_DATA_HOME}", config.data_home)
+ terms_dir_en = os.path.join(self.terms_dir, 'en')
+ os.makedirs(terms_dir_en)
+
+ # get eTag and create ToS file for it
+ r = run(["taler-config", "-c", config.conf, "-s", "EXCHANGE", "-o", "TERMS_ETAG"],
+ check=True, text=True, capture_output=True)
+ self.terms_etag = r.stdout.rstrip()
+ self.tos = "ToS Foo Bar\n"
+ with open(os.path.join(terms_dir_en, "%s.txt" % self.terms_etag), 'w') as f:
+ f.write(self.tos)
+
+ def start(self):
+ run(["taler-exchange-dbinit", "-c", self.config.conf], check=True)
+ run(["taler-exchange-wire", "-c", self.config.conf], check=True)
+ run(["taler-exchange-keyup", "-c", self.config.conf,
+ "-L", "INFO",
+ "-o", os.path.join(self.config.tmpdir, "e2a.dat")
+ ], check=True, capture_output=True)
+ log_path = os.path.join(self.config.tmpdir, "exchange.log")
+ self.watcher_getter(
+ name='taler-exchange-httpd',
+ arguments=['-c', self.config.conf, '-l', log_path],
+ checker=self.test_url,
+ request=self.request, # Needed for the correct execution order of finalizers
+ )
+ # the wirewatch is needed for interaction with the bank
+ log_wirewatch_path = os.path.join(self.config.tmpdir, "exchange-wirewatch.log")
+ self.watcher_getter(
+ name='taler-exchange-wirewatch',
+ arguments=['-c', self.config.conf, '-l', log_wirewatch_path],
+ checker=lambda: True, # no need to wait for this to come up
+ request=self.request, # Needed for the correct execution order of finalizers
+ )