[U-Boot] [PATCH] test/py: Add dependency on HUSH parser
Stephen Warren
swarren at wwwdotorg.org
Wed Nov 15 18:31:30 UTC 2017
On 11/15/2017 02:34 AM, Michal Simek wrote:
> Hi,
>
> On 10.11.2017 22:34, Stephen Warren wrote:
>> On 11/10/2017 04:01 AM, Michal Simek wrote:
>>> After adding our small zynq uboot which has hush parser off these 3 tests
>>> start to failed. It is probably just coincidence that others are
>>> passing without hush parser.
>>
>> What was the exact problem here? The set of tests you've disabled all
>> seem to rely on setenv/printenv and don't seem to do anything
>> complicated shell syntax wise. Are you sure they shouldn't depend on
>> setenv being available rather than hush_parser?
>
> These 3 tests. (html attached too.)
>
> Zynq> printenv baudrate
> baudrate=115200
> Zynq>
> test/py/tests/test_env.py .sZynq> printenv test_env_0
> ## Error: "test_env_0" not defined
> Zynq> .sZynq> setenv test_env_0 "foo"
> Zynq> printenv test_env_0
> test_env_0="foo"
> Zynq> F+u-boot-test-reset zynq_cse_qspi zc706
>
>
>
> Zynq> Zynq> setenv test_env_0 "bar"
> Zynq> printenv test_env_0
> test_env_0="bar"
> Zynq> F
For those two failures, the issue is that the test is expecting setenv
to print:
test_env_0=foo
test_env_0=bar
... but it prints:
test_env_0="foo"
test_env_0="bar"
I guess this is because the set_var() function wraps the values in
quotes to ensure that values that contain spaces work as expected, yet
when not using Hush, quotes aren't processed.
I think the best solution is to enhance set_var() to do the following if
Hush isn't available:
a) Skip the test if the value contains any spaces (or perhaps if the
value contains any characters that aren't in a whitelist.
b) Not use quotes when not running on Hush.
I think re-writing it as follows would work:
> bc = state_test_env.u_boot_console.config.buildconfig
> if bc.get('config_hush_parser', None):
> quote = '"'
> else:
> quote = ''
> if ' ' in value:
> pytest.skip('Space in variable value on non-Hush shell')
>
> state_test_env.u_boot_console.run_command(
> 'setenv %s %s%s%s' % (var, quote, value, quote))
> state_test_env.env[var] = value
s+u-boot-test-reset zynq_cse_qspi zc706
>
> Zynq> Zynq> setenv test_env_1 " "
> Zynq> setenv test_env_2 " 1${test_env_1}${test_env_1} 2 "
> Zynq> printenv test_env_2
> test_env_2=" 1" "" " 2 "
> Zynq> setenv test_env_1
> Zynq> setenv test_env_2
> Zynq> F
This is essentially the same issue, but in a more complex setting. It's
reasonable to make this test (test_env_expansion_spaces) depend on Hush
since it tests a feature that non-Hush shells presumably deliberately
don't implement.
More information about the U-Boot
mailing list