mirror of
https://git.yoctoproject.org/poky
synced 2026-04-04 23:02:22 +02:00
bitbake: hashserv: tests: Add external database tests
Adds support for running the hash equivalence test suite against an external hash equivalence implementation. (Bitbake rev: c1fbc3f68b94905d19ffcf4a6da5b27f0bf14599) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
732ff20cf9
commit
8ae00cf20d
@@ -51,13 +51,20 @@ class HashEquivalenceTestSetup(object):
|
||||
server.serve_as_process(prefunc=prefunc, args=(self.server_index,))
|
||||
self.addCleanup(cleanup_server, server)
|
||||
|
||||
return server
|
||||
|
||||
def start_client(self, server_address):
|
||||
def cleanup_client(client):
|
||||
client.close()
|
||||
|
||||
client = create_client(server.address)
|
||||
client = create_client(server_address)
|
||||
self.addCleanup(cleanup_client, client)
|
||||
|
||||
return (client, server)
|
||||
return client
|
||||
|
||||
def start_test_server(self):
|
||||
server = self.start_server()
|
||||
return server.address
|
||||
|
||||
def setUp(self):
|
||||
if sys.version_info < (3, 5, 0):
|
||||
@@ -66,7 +73,9 @@ class HashEquivalenceTestSetup(object):
|
||||
self.temp_dir = tempfile.TemporaryDirectory(prefix='bb-hashserv')
|
||||
self.addCleanup(self.temp_dir.cleanup)
|
||||
|
||||
(self.client, self.server) = self.start_server()
|
||||
self.server_address = self.start_test_server()
|
||||
|
||||
self.client = self.start_client(self.server_address)
|
||||
|
||||
def assertClientGetHash(self, client, taskhash, unihash):
|
||||
result = client.get_unihash(self.METHOD, taskhash)
|
||||
@@ -206,7 +215,7 @@ class HashEquivalenceCommonTests(object):
|
||||
|
||||
def test_stress(self):
|
||||
def query_server(failures):
|
||||
client = Client(self.server.address)
|
||||
client = Client(self.server_address)
|
||||
try:
|
||||
for i in range(1000):
|
||||
taskhash = hashlib.sha256()
|
||||
@@ -245,8 +254,10 @@ class HashEquivalenceCommonTests(object):
|
||||
# the side client. It also verifies that the results are pulled into
|
||||
# the downstream database by checking that the downstream and side servers
|
||||
# match after the downstream is done waiting for all backfill tasks
|
||||
(down_client, down_server) = self.start_server(upstream=self.server.address)
|
||||
(side_client, side_server) = self.start_server(dbpath=down_server.dbpath)
|
||||
down_server = self.start_server(upstream=self.server_address)
|
||||
down_client = self.start_client(down_server.address)
|
||||
side_server = self.start_server(dbpath=down_server.dbpath)
|
||||
side_client = self.start_client(side_server.address)
|
||||
|
||||
def check_hash(taskhash, unihash, old_sidehash):
|
||||
nonlocal down_client
|
||||
@@ -351,14 +362,18 @@ class HashEquivalenceCommonTests(object):
|
||||
self.assertEqual(result['method'], self.METHOD)
|
||||
|
||||
def test_ro_server(self):
|
||||
(ro_client, ro_server) = self.start_server(dbpath=self.server.dbpath, read_only=True)
|
||||
rw_server = self.start_server()
|
||||
rw_client = self.start_client(rw_server.address)
|
||||
|
||||
ro_server = self.start_server(dbpath=rw_server.dbpath, read_only=True)
|
||||
ro_client = self.start_client(ro_server.address)
|
||||
|
||||
# Report a hash via the read-write server
|
||||
taskhash = '35788efcb8dfb0a02659d81cf2bfd695fb30faf9'
|
||||
outhash = '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f'
|
||||
unihash = 'f46d3fbb439bd9b921095da657a4de906510d2cd'
|
||||
|
||||
result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
|
||||
result = rw_client.report_unihash(taskhash, self.METHOD, outhash, unihash)
|
||||
self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
|
||||
|
||||
# Check the hash via the read-only server
|
||||
@@ -373,7 +388,7 @@ class HashEquivalenceCommonTests(object):
|
||||
ro_client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
|
||||
|
||||
# Ensure that the database was not modified
|
||||
self.assertClientGetHash(self.client, taskhash2, None)
|
||||
self.assertClientGetHash(rw_client, taskhash2, None)
|
||||
|
||||
|
||||
def test_slow_server_start(self):
|
||||
@@ -393,7 +408,7 @@ class HashEquivalenceCommonTests(object):
|
||||
old_signal = signal.signal(signal.SIGTERM, do_nothing)
|
||||
self.addCleanup(signal.signal, signal.SIGTERM, old_signal)
|
||||
|
||||
_, server = self.start_server(prefunc=prefunc)
|
||||
server = self.start_server(prefunc=prefunc)
|
||||
server.process.terminate()
|
||||
time.sleep(30)
|
||||
event.set()
|
||||
@@ -500,3 +515,22 @@ class TestHashEquivalenceWebsocketServer(HashEquivalenceTestSetup, HashEquivalen
|
||||
# case it is more reliable to resolve the IP address explicitly.
|
||||
host = socket.gethostbyname("localhost")
|
||||
return "ws://%s:0" % host
|
||||
|
||||
|
||||
class TestHashEquivalenceExternalServer(HashEquivalenceTestSetup, HashEquivalenceCommonTests, unittest.TestCase):
|
||||
def start_test_server(self):
|
||||
if 'BB_TEST_HASHSERV' not in os.environ:
|
||||
self.skipTest('BB_TEST_HASHSERV not defined to test an external server')
|
||||
|
||||
return os.environ['BB_TEST_HASHSERV']
|
||||
|
||||
def start_server(self, *args, **kwargs):
|
||||
self.skipTest('Cannot start local server when testing external servers')
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.client.remove({"method": self.METHOD})
|
||||
|
||||
def tearDown(self):
|
||||
self.client.remove({"method": self.METHOD})
|
||||
super().tearDown()
|
||||
|
||||
Reference in New Issue
Block a user