summaryrefslogtreecommitdiff
path: root/tests/components/bank.py
blob: 707edbfc420d737359108675cd23dbd86ba8714e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import os
from subprocess import run

import psutil

from .taler_service import TalerService


class Bank(TalerService):

    def __init__(self, config, watcher_getter, request):
        super().__init__(config, watcher_getter, request)

        # get localhost port and store bank URL
        r = run(["taler-config", "-c", config.conf, "-s", "BANK", "-o", "HTTP_PORT"],
                check=True, text=True, capture_output=True)
        self.url = "http://localhost:%s" % r.stdout.rstrip()

    def start(self):
        db = "postgres:///%s" % self.config.db
        log_path = os.path.join(self.config.tmpdir, "bank.log")
        log_file = open(log_path, 'w')
        self.watcher_getter(
            name='taler-bank-manage-testing',
            arguments=[self.config.conf, db, 'serve-http'],
            checker=self.test_process,
            kwargs=dict(stderr=log_file, stdout=log_file),
            request=self.request,  # Needed for the correct execution order of finalizers
        )

        def close_log():
            log_file.close()

        self.request.addfinalizer(close_log)

    # Alternative way to check if the bank came up.
    # Testing the URL has the issue that on the CI, django keeps closing the connection.
    @staticmethod
    def test_process():
        for p in psutil.process_iter(['name', 'cmdline']):
            if p.info["name"] == "uwsgi" and p.info["cmdline"][-1] == "talerbank.wsgi":
                return True
        return False