summaryrefslogtreecommitdiff
path: root/poky/bitbake/lib/hashserv
diff options
context:
space:
mode:
Diffstat (limited to 'poky/bitbake/lib/hashserv')
-rw-r--r--poky/bitbake/lib/hashserv/client.py15
-rw-r--r--poky/bitbake/lib/hashserv/tests.py29
2 files changed, 37 insertions, 7 deletions
diff --git a/poky/bitbake/lib/hashserv/client.py b/poky/bitbake/lib/hashserv/client.py
index ae5875d1b..0ffd0c2ae 100644
--- a/poky/bitbake/lib/hashserv/client.py
+++ b/poky/bitbake/lib/hashserv/client.py
@@ -40,7 +40,7 @@ class AsyncClient(object):
self._connect_sock = connect_sock
- async def _connect(self):
+ async def connect(self):
if self.reader is None or self.writer is None:
(self.reader, self.writer) = await self._connect_sock()
@@ -62,7 +62,7 @@ class AsyncClient(object):
count = 0
while True:
try:
- await self._connect()
+ await self.connect()
return await proc()
except (
OSError,
@@ -190,7 +190,6 @@ class Client(object):
for call in (
"connect_tcp",
- "connect_unix",
"close",
"get_unihash",
"report_unihash",
@@ -209,6 +208,16 @@ class Client(object):
return wrapper
+ def connect_unix(self, path):
+ # AF_UNIX has path length issues so chdir here to workaround
+ cwd = os.getcwd()
+ try:
+ os.chdir(os.path.dirname(path))
+ self.loop.run_until_complete(self.client.connect_unix(os.path.basename(path)))
+ self.loop.run_until_complete(self.client.connect())
+ finally:
+ os.chdir(cwd)
+
@property
def max_chunk(self):
return self.client.max_chunk
diff --git a/poky/bitbake/lib/hashserv/tests.py b/poky/bitbake/lib/hashserv/tests.py
index 3dd9a31be..77a19b807 100644
--- a/poky/bitbake/lib/hashserv/tests.py
+++ b/poky/bitbake/lib/hashserv/tests.py
@@ -23,7 +23,8 @@ def _run_server(server, idx):
sys.stderr = sys.stdout
server.serve_forever()
-class TestHashEquivalenceServer(object):
+
+class HashEquivalenceTestSetup(object):
METHOD = 'TestMethod'
server_index = 0
@@ -65,6 +66,8 @@ class TestHashEquivalenceServer(object):
result = client.get_unihash(self.METHOD, taskhash)
self.assertEqual(result, unihash)
+
+class HashEquivalenceCommonTests(object):
def test_create_hash(self):
# Simple test that hashes can be created
taskhash = '35788efcb8dfb0a02659d81cf2bfd695fb30faf9'
@@ -240,15 +243,33 @@ class TestHashEquivalenceServer(object):
self.assertClientGetHash(self.client, taskhash4, None)
-class TestHashEquivalenceUnixServer(TestHashEquivalenceServer, unittest.TestCase):
+class TestHashEquivalenceUnixServer(HashEquivalenceTestSetup, HashEquivalenceCommonTests, unittest.TestCase):
def get_server_addr(self, server_idx):
return "unix://" + os.path.join(self.temp_dir.name, 'sock%d' % server_idx)
-class TestHashEquivalenceTCPServer(TestHashEquivalenceServer, unittest.TestCase):
+class TestHashEquivalenceUnixServerLongPath(HashEquivalenceTestSetup, unittest.TestCase):
+ DEEP_DIRECTORY = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ccccccccccccccccccccccccccccccccccccccccccc"
+ def get_server_addr(self, server_idx):
+ os.makedirs(os.path.join(self.temp_dir.name, self.DEEP_DIRECTORY), exist_ok=True)
+ return "unix://" + os.path.join(self.temp_dir.name, self.DEEP_DIRECTORY, 'sock%d' % server_idx)
+
+
+ def test_long_sock_path(self):
+ # Simple test that hashes can be created
+ taskhash = '35788efcb8dfb0a02659d81cf2bfd695fb30faf9'
+ outhash = '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f'
+ unihash = 'f46d3fbb439bd9b921095da657a4de906510d2cd'
+
+ self.assertClientGetHash(self.client, taskhash, None)
+
+ result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
+ self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
+
+
+class TestHashEquivalenceTCPServer(HashEquivalenceTestSetup, HashEquivalenceCommonTests, unittest.TestCase):
def get_server_addr(self, server_idx):
# Some hosts cause asyncio module to misbehave, when IPv6 is not enabled.
# If IPv6 is enabled, it should be safe to use localhost directly, in general
# case it is more reliable to resolve the IP address explicitly.
return socket.gethostbyname("localhost") + ":0"
-