From b5c6fecbb06b3324de5d330f9131d9bd669b1599 Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Mon, 6 Jul 2020 19:30:03 +0100
Subject: [PATCH] tests: Assert that capsule-capture-libs --library-knowledge
 works

Signed-off-by: Simon McVittie <smcv@collabora.com>
---
 tests/capture-libs.pl | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/tests/capture-libs.pl b/tests/capture-libs.pl
index 9a74021e5..f9f55c594 100755
--- a/tests/capture-libs.pl
+++ b/tests/capture-libs.pl
@@ -61,6 +61,14 @@ my $libdir = "${test_tempdir}/libdir";
     print $fh "soname:libc.so.6";  # deliberately no trailing newline
     close $fh;
 }
+{
+    open(my $fh, '>', "${test_tempdir}/capture-libs.ini");
+    print $fh "[Library /opt/libversionedsymbols.so.1]\n";
+    print $fh "CompareBy=versions;name;symbols;\n";
+    print $fh "[Library /opt/libversionedlikedbus.so.1]\n";
+    print $fh "CompareBy=container;\n";
+    close $fh;
+}
 
 run_ok(['rm', '-fr', $libdir]);
 mkdir($libdir);
@@ -570,6 +578,33 @@ SKIP: {
        "should not take provider's version when container's numeric tail is newer");
     ok(! -l "$libdir/libversionednumber.so.1",
        "should not take provider's version when container's numeric tail is newer");
+
+    run_ok(['rm', '-fr', $libdir]);
+    mkdir($libdir);
+    $result = run_verbose([qw(bwrap --ro-bind / /),
+                           '--tmpfs', $host,
+                           bind_usr('/', $host),
+                           '--tmpfs', $container,
+                           bind_usr('/', $container),
+                           '--ro-bind', $version1, "$host/opt",
+                           '--ro-bind', $version2, "$container/opt",
+                           '--ro-bind', "$test_tempdir/capture-libs.ini",
+                                        "$test_tempdir/capture-libs.ini",
+                           '--bind', $libdir, $libdir,
+                           qw(--dev-bind /dev /dev),
+                           'env', 'CAPSULE_DEBUG=all',
+                           $CAPSULE_CAPTURE_LIBS_TOOL, '--link-target=/run/host',
+                           "--dest=$libdir", "--provider=$host",
+                           "--container=$container",
+                           "--library-knowledge=$test_tempdir/capture-libs.ini",
+                           'path-match:/opt/lib*.so.1'],
+                           '2>', \$stderr, '>&2');
+    diag $stderr;
+    ok($result);
+    ok(! -l "$libdir/libversionedsymbols.so.1",
+       "should not take provider's version when told to look at container's symbols");
+    ok(! -l "$libdir/libversionedlikedbus.so.1",
+       "should not take provider's version when forced to use container's");
 }
 
 done_testing;
-- 
GitLab