Willem de Bruijn wrote: > Jakub Kicinski wrote: > > On Fri, 30 Aug 2024 11:20:05 -0400 Willem de Bruijn wrote: > > > Kselftest install does not preserve directories. > > > > > > So all .pkt files are copied into net/packetdrill root. This is messy. > > > More fundamentally it breaks the includes in the files (e..g, `source > > > ../common/defaults.sh`). > > > > Can you show an example of exact commands and what happens? > > Running directly works fine: > > $ KSELFTEST_PKT_INTERP=packetdrill_ksft.sh > $ make -C tools/testing/selftests \ > TARGETS=net/packetdrill O=/tmp run_tests > > TAP version 13 > 1..3 > # timeout set to 45 > # selftests: net/packetdrill: client.pkt > # TAP version 13 > # 1..2 > # ok 1 ipv4 > # ok 2 ipv6 > # # Totals: pass:2 fail:0 xfail:0 xpass:0 skip:0 error:0 > ok 1 selftests: net/packetdrill: client.pkt > [..etc..] > > Installing does not: > > $ make -C tools/testing/selftests/ \ > TARGETS=net/packetdrill \ > install INSTALL_PATH=$INSTALL_DIR > $ cd $INSTALL_DIR > $ export KSELFTEST_PKT_INTERP=packetdrill_ksft.sh > $ ./run_kselftest.sh -c net/packetdrill > > TAP version 13 > 1..3 > # timeout set to 45 > # selftests: net/packetdrill: client.pkt > # TAP version 13 > # 1..2 > # sh: line 1: ../common/defaults.sh: No such file or directory > # ./client.pkt: error executing init command: non-zero status 127 > # not ok 1 ipv4 > # sh: line 1: ../common/defaults.sh: No such file or directory > # ./client.pkt: error executing init command: non-zero status 127 > # not ok 2 ipv6 > # # Totals: pass:0 fail:2 xfail:0 xpass:0 skip:0 error:0 > not ok 1 selftests: net/packetdrill: client.pkt # exit=1 > > Due to that relative path to defaults.sh inside the scripts. > > It is arguably a bit weird that the relative path of the TEST_PROGS > differs before and after install. I guess what's weird is more what I'm trying to do. There has been no need so far for progs in subdirectories from the TARGET. One option is to just create a bunch of targets with a wildcard. Something like below (entirely untested). TARGETS += net/packetdrill/tcp/$(wildcard *) > > We have directories in net/lib, and it's a target, and it works, no? > > net/lib is not a TARGET in tools/testing/selftests/Makefile. Its > Makefile only generates dependencies for other targets: TEST_FILES, > TEST_GEN_FILES and TEST_INCLUDES. > > This issue with preserving paths until recently also existed for > helper files (TEST_FILES). TEST_INCLUDES was added expressly to > preserve those paths (commit 2a0683be5b4c). Another option is to dive yet deeper into kselftest infra and do the same for TEST_PROGS, either TEST_PROGS itself or as a new TEST_PROGS_FULLPATH or so. It needs a change to INSTALL_RULE (maybe just passing -R to rsync), to emit_tests to skip basename when writing kselftest-list.txt, and probably to run_one() to break up the path and chdir. I'll see if I can make this work without too much churn.