[Toybox] new test failure on android

Rob Landley rob at landley.net
Thu Jan 9 14:41:29 PST 2025


On 1/9/25 15:52, enh wrote:
> On Thu, Jan 9, 2025 at 4:33 PM Rob Landley <rob at landley.net> wrote:
>>
>> On 1/9/25 11:36, enh wrote:
>>> -- test
>>> test: too many arguments
>>> FAIL: test =~
>>> echo -ne '' | "/system/bin/test" abc =~ a.c && echo yes
>>> --- expected 2025-01-09 17:00:49.136005931 +0000
>>> +++ actual 2025-01-09 17:00:49.144005931 +0000
>>> @@ -1 +0,0 @@
>>> -yes
>>
>> Hmmm... That's the "toyonly meets NOHELP" plumbing change, commit
>> 58500b802905 specifically the:
>>
>> --- a/scripts/runtest.sh
>> +++ b/scripts/runtest.sh
>> @@ -102,7 +102,9 @@ skipnot()
>>    # Skip this test (rest of command line) when not running toybox.
>>    toyonly()
>>    {
>> -  IS_TOYBOX="$("$C" --version 2>/dev/null)"
>> +  [ -z "$TEST_HOST" ] && IS_TOYBOX=toybox
>> +  : ${IS_TOYBOX:=$("$C" --version 2>/dev/null | grep -o toybox)} \
>> +    ${IS_TOYBOX:="$(basename $(readlink -f "$C"))"}
>>      # Ideally we'd just check for "toybox", but toybox sed lies to make
>> autoconf
>>      # happy, so we have at least two things to check for.
>>
>> and
>>
>> --- a/tests/test.test
>> +++ b/tests/test.test
>> @@ -135,11 +135,10 @@ testing "<2" 'test def \< abc || echo yes' "yes\n"
>> "" ""
>>    testing ">1" 'test abc \> def || echo yes' "yes\n" "" ""
>>    testing ">2" 'test def \> abc && echo yes' "yes\n" "" ""
>>
>> -# toyonly doesn't work with TOYFLAG_NOHELP
>>    # bash only has this for [[ ]] but extra tests to _exclude_ silly...
>> -#toyonly testcmd "=~" 'abc =~ a.c && echo yes' "yes\n" "" ""
>> -#toyonly testcmd "=~ fail" 'abc =~ d.c; echo $?' '1\n' "" ""
>> -#toyonly testcmd "=~ zero length match" 'abc =~ "1*" && echo yes'
>> 'yes\n' '' ''
>> +toyonly testcmd "=~" 'abc =~ a.c && echo yes' "yes\n" "" ""
>> +toyonly testcmd "=~ fail" 'abc =~ d.c; echo $?' '1\n' "" ""
>> +toyonly testcmd "=~ zero length match" 'abc =~ "1*" && echo yes'
>> 'yes\n' '' ''
>>
>> parts.
>>
>> It looks like your test plumbing is testing something OTHER than toybox
>> "test" (possibly bash's builtin test?) when it thinks it's testing
>> toybox (TEST_HOST is not set, and readlink -f $C doesn't point to a file
>> named toybox).
> 
> https://android.googlesource.com/platform/external/toybox/+/main/run-tests-on-android.sh
> 
> has
> 
> export C=\"\$(which $toy)\"; \
> 
> and `adb shell which test` does get me /system/bin/test, which is a
> symlink to toybox...
> 
> (we also do the realpath check and warn if we're not actually testing
> toybox [and ignore test failures in that case].)
> 
> running the test manually doesn't seem to work anyway?
> 
> $ adb shell
> cheetah:/ # /system/bin/test abc =~ a.c
> test: too many arguments

Hmmm...

$ git diff toys/*/test.c
$ make test
scripts/single.sh test
test:generated/{Config.in
Warning: Config.probed changed, run 'make oldconfig'
,newtoys.h,flags.h,help.h}
Compile test
....................
$ ./test abc '=~' a.c
$ ./test abc =~ a.c

Commit 2407a5f51b58 added support for "=~". Is your shell somehow 
expanding ~ maybe? (I thought that only happened when it was the first 
character of its word?)

> 2|cheetah:/ # /system/bin/toybox test abc =~ a.c
> test: too many arguments

Try "echo abc =~ a.c" maybe?

> 2|cheetah:/ # test abc =~ a.c
> /system/bin/sh: test: =/: unexpected operator/operand
> 2|cheetah:/ #

Ok, not using the shell builtin. Huh.

I built it with the NDK here even, which passed make test_test.

Rob


More information about the Toybox mailing list