From bb77b2db451b91f2a644dbbd7d05a7b48eb5130b Mon Sep 17 00:00:00 2001 From: Simon McVittie <smcv@collabora.com> Date: Fri, 6 Aug 2021 16:11:44 +0100 Subject: [PATCH] tests: Adjust assertions about LD_LIBRARY_PATH and ld.so.conf Instead of being overly specific, let's assert that what we want to be true is true. We want to see /overrides/lib/MULTIARCH in either the ld.so.conf or the LD_LIBRARY_PATH, and /overrides/lib/MULTIARCH/aliases in the LD_LIBRARY_PATH specifically. If /overrides is not a symbolic link, then we want to find exactly /overrides/lib/MULTIARCH in those places. If it is a symbolic link, then we might see either /overrides/lib/MULTIARCH or /usr/lib/pressure-vessel/overrides/lib/MULTIARCH; which one of those we get is an implementation detail, but it must exist. Signed-off-by: Simon McVittie <smcv@collabora.com> --- tests/pressure-vessel/inside-runtime.py | 64 ++++++++++++++++++++----- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/tests/pressure-vessel/inside-runtime.py b/tests/pressure-vessel/inside-runtime.py index 64296e68c..00792fcd7 100755 --- a/tests/pressure-vessel/inside-runtime.py +++ b/tests/pressure-vessel/inside-runtime.py @@ -170,8 +170,13 @@ class TestInsideRuntime(BaseTest): 'LD_LIBRARY_PATH: %r', os.environ.get('LD_LIBRARY_PATH') ) + search = set() # type: typing.Set[str] + with open('/etc/ld.so.conf', 'r') as reader: for line in reader: + if line.startswith('/'): + search.add(line.rstrip('\n')) + logger.info('/etc/ld.so.conf: %r', line) if os.environ.get('TEST_INSIDE_RUNTIME_IS_SCOUT'): @@ -186,23 +191,56 @@ class TestInsideRuntime(BaseTest): self.assertIsNotNone(os.environ.get('LD_LIBRARY_PATH')) - parts = os.environ.get('LD_LIBRARY_PATH', '').split(':') + ldlp = os.environ.get('LD_LIBRARY_PATH', '').split(':') + search |= set(ldlp) if os.getenv('TEST_INSIDE_RUNTIME_IS_COPY'): - for path in parts: + # Only the aliases directories get into the LD_LIBRARY_PATH, + # not the directories containing SONAMEs + for path in ldlp: self.assertTrue(path.endswith('/aliases')) - else: - if ( - 'HOST_LD_LINUX_SO_REALPATH' in os.environ - and Path('/usr/lib/i386-linux-gnu').is_dir() - ): - self.assertIn('/overrides/lib/i386-linux-gnu', parts) - if ( - 'HOST_LD_LINUX_X86_64_SO_REALPATH' in os.environ - and Path('/usr/lib/x86_64-linux-gnu').is_dir() - ): - self.assertIn('/overrides/lib/x86_64-linux-gnu', parts) + if ( + 'HOST_LD_LINUX_SO_REALPATH' in os.environ + and Path('/usr/lib/i386-linux-gnu').is_dir() + ): + check_dir = '/overrides/lib/i386-linux-gnu' + + if not Path('/overrides').is_symlink(): + self.assertIn(check_dir, search) + self.assertIn(check_dir + '/aliases', ldlp) + + self.assertTrue(Path(check_dir).is_dir()) + self.assertTrue(Path(check_dir, 'aliases').is_dir()) + + if check_dir not in search: + check_dir = '/usr/lib/pressure-vessel' + check_dir + + self.assertTrue(Path(check_dir).is_dir()) + self.assertTrue(Path(check_dir, 'aliases').is_dir()) + self.assertIn(check_dir, search) + self.assertIn(check_dir + '/aliases', ldlp) + + if ( + 'HOST_LD_LINUX_X86_64_SO_REALPATH' in os.environ + and Path('/usr/lib/x86_64-linux-gnu').is_dir() + ): + check_dir = '/overrides/lib/x86_64-linux-gnu' + + if not Path('/overrides').is_symlink(): + self.assertIn(check_dir, search) + self.assertIn(check_dir + '/aliases', ldlp) + + self.assertTrue(Path(check_dir).is_dir()) + self.assertTrue(Path(check_dir, 'aliases').is_dir()) + + if check_dir not in search: + check_dir = '/usr/lib/pressure-vessel' + check_dir + + self.assertTrue(Path(check_dir).is_dir()) + self.assertTrue(Path(check_dir, 'aliases').is_dir()) + self.assertIn(check_dir, search) + self.assertIn(check_dir + '/aliases', ldlp) def test_overrides(self) -> None: if os.getenv('TEST_INSIDE_RUNTIME_IS_COPY'): -- GitLab