Merge bitcoin/bitcoin#33749: test: ipc: resolve symlinks in which capnp

51093d6ae1 test: resolve symlinks in which result for capnp (David Gumberg)

Pull request description:

  On Fedora, `/bin/` and `/usr/bin` are symlinked, and on one of my boxes (although I could not reproduce this behavior in a docker container), `/bin` comes before `/usr/bin` in `$PATH`, so `which capnp` reports `/bin/capnp`, and `capnp_dir` is set to `/include`, and the test fails:

  ```console
  $ ./build/test/functional/interface_ipc.py
  2025-10-30T20:43:43.753812Z TestFramework (INFO): PRNG seed is: 8370468257027235753
  2025-10-30T20:43:43.754163Z TestFramework (INFO): Initializing test directory /tmp/bitcoin_func_test_b9kjzj2a
  terminate called after throwing an instance of 'kj::ExceptionImpl'
    what():  mp/proxy.capnp:6: failed: Import failed: /capnp/c++.capnp
  Aborted (core dumped)
  ```

  This changes the functional test to resolve any symlinks in the `capnp` binary path reported by `which`.

ACKs for top commit:
  TheCharlatan:
    utACK 51093d6ae1
  ryanofsky:
    Code review ACK 51093d6ae1

Tree-SHA512: 17a3e16c3ef50d19e65c18bd12636f287b41e54fc14629e2eb6efb8f9532af7e0e0d404e4e234eeba92473b7ae18d97144a953d28523670308e78e4c4fbb7137
This commit is contained in:
merge-script
2025-10-31 16:35:44 +00:00

View File

@@ -27,7 +27,7 @@ class IPCInterfaceTest(BitcoinTestFramework):
def load_capnp_modules(self):
if capnp_bin := shutil.which("capnp"):
# Add the system cap'nproto path so include/capnp/c++.capnp can be found.
capnp_dir = Path(capnp_bin).parent.parent / "include"
capnp_dir = Path(capnp_bin).resolve().parent.parent / "include"
else:
# If there is no system cap'nproto, the pycapnp module should have its own "bundled"
# includes at this location. If pycapnp was installed with bundled capnp,