diff options
Diffstat (limited to 'tests/components/exchange.py')
-rw-r--r-- | tests/components/exchange.py | 53 |
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 + ) |