diff options
-rwxr-xr-x | bin/bitbake-selftest | 2 | ||||
-rw-r--r-- | lib/prserv/__init__.py | 24 | ||||
-rw-r--r-- | lib/prserv/tests.py | 84 |
3 files changed, 110 insertions, 0 deletions
diff --git a/bin/bitbake-selftest b/bin/bitbake-selftest index f25f23b1a..ce901232f 100755 --- a/bin/bitbake-selftest +++ b/bin/bitbake-selftest @@ -15,6 +15,7 @@ import unittest try: import bb import hashserv + import prserv import layerindexlib except RuntimeError as exc: sys.exit(str(exc)) @@ -33,6 +34,7 @@ tests = ["bb.tests.codeparser", "bb.tests.utils", "bb.tests.compression", "hashserv.tests", + "prserv.tests", "layerindexlib.tests.layerindexobj", "layerindexlib.tests.restapi", "layerindexlib.tests.cooker"] diff --git a/lib/prserv/__init__.py b/lib/prserv/__init__.py index 2ee6a28c0..76041f900 100644 --- a/lib/prserv/__init__.py +++ b/lib/prserv/__init__.py @@ -20,6 +20,30 @@ def init_logger(logfile, loglevel): class NotFoundError(Exception): pass +def create_server(addr, dbpath, upstream=None, read_only=False): + from . import serv + + s = serv.PRServer(dbpath, upstream=upstream, read_only=read_only) + + (typ, a) = parse_address(addr) + s.start_tcp_server(*a) + + return s + +def create_client(addr): + from . import client + + c = client.PRClient() + + try: + (typ, a) = parse_address(addr) + c.connect_tcp(*a) + print("CLIENT CONNECTED TO: %s" %(addr)) + return c + except Exception as e: + c.close() + raise e + async def create_async_client(addr): from . import client diff --git a/lib/prserv/tests.py b/lib/prserv/tests.py new file mode 100644 index 000000000..1e3b63913 --- /dev/null +++ b/lib/prserv/tests.py @@ -0,0 +1,84 @@ +#! /usr/bin/env python3 +# +# Copyright (C) 2024 BitBake Contributors +# +# SPDX-License-Identifier: GPL-2.0-only +# + +from . import create_server, create_client +import sys +import tempfile +import unittest +import socket +from pathlib import Path + +THIS_DIR = Path(__file__).parent +BIN_DIR = THIS_DIR.parent.parent / "bin" + +def server_prefunc(server, idx): + logging.basicConfig(level=logging.DEBUG, filename='bbprserv-%d.log' % idx, filemode='w', + format='%(levelname)s %(filename)s:%(lineno)d %(message)s') + server.logger.debug("Running server %d" % idx) + sys.stdout = open('bbprserv-stdout-%d.log' % idx, 'w') + sys.stderr = sys.stdout + +class PRTestSetup(object): + + server_index = 0 + client_index = 0 + + def start_server(self, dbpath=None, upstream=None, read_only=False, prefunc=server_prefunc): + + self.server_index += 1 + + if dbpath is None: + dbpath = self.make_dbpath() + + def cleanup_server(server): + if server.process.exitcode is not None: + return + + server.process.terminate() + server.process.join() + + server = create_server(socket.gethostbyname("localhost") + ":0", + dbpath, + upstream=upstream, + read_only=read_only) + + server.serve_as_process(prefunc=prefunc, args=(self.server_index)) + self.addCleanup(cleanup_server, server) + + return server + + def make_dbpath(self): + return os.path.join(self.temp_dir.name, "prserv-test%d.sqlite3" % self.server_index) + + def start_client(self, server_address): + def cleanup_client(client): + client.close() + + client = create_client(server_address) + self.addCleanup(cleanup_client, client) + + return client + + def start_test_server(self): + self.server = self.start_server() + print("SERVER STARTED WITH ADDRESS: %s" % (self.server.address)) + return self.server.address + + def setUp(self): + self.temp_dir = tempfile.TemporaryDirectory(prefix='bb-prserv-test') + self.addCleanup(self.temp_dir.cleanup) + + self.server_address = self.start_test_server() + self.client = self.start_client(self.server_address) + +class PRCommonTests(PRTestSetup, unittest.TestCase): + + def test_create_pr(self): + result = self.client.test_pr("dummy-1.0-r0", "core2-64", "51bf8189dbe9ea81fa6dd89608bf19380c437a9cf12f6c6239887801ba4ab4a5") + return self.assertEqual(result, None) + + |