Re: [PATCH 1/5] test_kmod: make selftest executable

From: Michael Ellerman
Date: Tue Aug 08 2017 - 05:50:14 EST


Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> writes:
> On Wed, 2 Aug 2017 14:14:46 -0700 "Luis R. Rodriguez" <mcgrof@xxxxxxxxxx> wrote:
>
>> We had just forgotten to do this.
>>
>> Fixes: 39258f448d71 ("kmod: add test driver to stress test the module loader")
>> Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxxxx>
>> ---
>> tools/testing/selftests/kmod/kmod.sh | 0
>> 1 file changed, 0 insertions(+), 0 deletions(-)
>> mode change 100644 => 100755 tools/testing/selftests/kmod/kmod.sh
>>
>> diff --git a/tools/testing/selftests/kmod/kmod.sh b/tools/testing/selftests/kmod/kmod.sh
>> old mode 100644
>> new mode 100755
>
> This is pretty fragile - I'm not sure that patch/diff are capable of
> communicating a bare chmod. If someone does a "patch -p1 < patch-4.14"
> or whatever, this change is likely to get lost.
>
> It's more robust to not care about the x bit at all. Something like
> this?
>
> --- a/tools/testing/selftests/lib.mk~a
> +++ a/tools/testing/selftests/lib.mk
> @@ -14,7 +14,7 @@ all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_
> define RUN_TESTS
> @for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \
> BASENAME_TEST=`basename $$TEST`; \
> - cd `dirname $$TEST`; (./$$BASENAME_TEST && echo "selftests: $$BASENAME_TEST [PASS]") || echo "selftests: $$BASENAME_TEST [FAIL]"; cd -;\
> + cd `dirname $$TEST`; (/bin/sh ./$$BASENAME_TEST && echo "selftests: $$BASENAME_TEST [PASS]") || echo "selftests: $$BASENAME_TEST [FAIL]"; cd -;\
> done;
> endef

Most (many?) of the tests aren't shell scripts, so that doesn't work, eg:

$ make -C tools/testing/selftests/ TARGETS=kcmp run_tests
...
make[1]: Entering directory '/home/michael/linus/tools/testing/selftests/kcmp'
./kcmp_test: 1: ./kcmp_test: ELF...0.@ï.@@..@@.@.ï.ï..........ïïïï.ïï.ï.ï...ï.ï..ï.ï.ï.....DD.Qïtd.Rïtd.ïïïï.ïï../lib64/ld64.so.2..GNU...GNUC{: not found
./kcmp_test: 13: ./kcmp_test: Syntax error: Unterminated quoted string
selftests: kcmp_test [FAIL]


Also some of the ones which are shell scripts require bash, and /bin/sh
may not be bash, eg:

$ make -C tools/testing/selftests/ TARGETS=cpu-hotplug run_tests
...
make[1]: Entering directory '/home/michael/linus/tools/testing/selftests/cpu-hotplug'
./cpu-on-off-test.sh: 9: [: !=: unexpected operator


cheers