aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/bitbake-selftest2
-rw-r--r--lib/prserv/__init__.py24
-rw-r--r--lib/prserv/tests.py84
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)
+
+