[PATCH v3 3/9] tests/acceptance: Send <carriage return> on serial lines

Philippe Mathieu-Daudé posted 9 patches 6 years, 3 months ago
Maintainers: Kamil Rytarowski <kamil@netbsd.org>
[PATCH v3 3/9] tests/acceptance: Send <carriage return> on serial lines
Posted by Philippe Mathieu-Daudé 6 years, 3 months ago
Some firmwares don't parse the <Newline> control character and
expect a <carriage return>.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 tests/acceptance/boot_linux_console.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
index 9ff2213874..bf9861296a 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -30,7 +30,7 @@ class BootLinuxConsole(Test):
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
 
     def exec_command_and_wait_for_pattern(self, command, success_message):
-        command += '\n'
+        command += '\r\n'
         self.vm.console_socket.sendall(command.encode())
         wait_for_console_pattern(self, success_message)
 
-- 
2.21.0


Re: [PATCH v3 3/9] tests/acceptance: Send <carriage return> on serial lines
Posted by David Gibson 6 years, 3 months ago
On Thu, Oct 17, 2019 at 06:52:33PM +0200, Philippe Mathieu-Daudé wrote:
> Some firmwares don't parse the <Newline> control character and
> expect a <carriage return>.
> 
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  tests/acceptance/boot_linux_console.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
> index 9ff2213874..bf9861296a 100644
> --- a/tests/acceptance/boot_linux_console.py
> +++ b/tests/acceptance/boot_linux_console.py
> @@ -30,7 +30,7 @@ class BootLinuxConsole(Test):
>      KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
>  
>      def exec_command_and_wait_for_pattern(self, command, success_message):
> -        command += '\n'
> +        command += '\r\n'

I'm actually wondering if '\r' alone is really what we should be using
here.  Isn't that usually the character that actually pressing the
Enter key generates (on an old school tty)?  IIRC it's the thing on
the other side of the console that echoes back a \r and \n in order to
reposition the cursor on the next line.

>          self.vm.console_socket.sendall(command.encode())
>          wait_for_console_pattern(self, success_message)
>  

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson
Re: [PATCH v3 3/9] tests/acceptance: Send <carriage return> on serial lines
Posted by Philippe Mathieu-Daudé 6 years, 3 months ago
Cc'ing Paolo/Samuel/Marc-André

On 10/20/19 12:09 PM, David Gibson wrote:
> On Thu, Oct 17, 2019 at 06:52:33PM +0200, Philippe Mathieu-Daudé wrote:
>> Some firmwares don't parse the <Newline> control character and
>> expect a <carriage return>.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>>   tests/acceptance/boot_linux_console.py | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
>> index 9ff2213874..bf9861296a 100644
>> --- a/tests/acceptance/boot_linux_console.py
>> +++ b/tests/acceptance/boot_linux_console.py
>> @@ -30,7 +30,7 @@ class BootLinuxConsole(Test):
>>       KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
>>   
>>       def exec_command_and_wait_for_pattern(self, command, success_message):
>> -        command += '\n'
>> +        command += '\r\n'
> 
> I'm actually wondering if '\r' alone is really what we should be using
> here.  Isn't that usually the character that actually pressing the
> Enter key generates (on an old school tty)?  IIRC it's the thing on
> the other side of the console that echoes back a \r and \n in order to
> reposition the cursor on the next line.

Our current tests mostly target Linux/*BSD.
When I started testing U-boot/VxWorks images, I noticed the tests were 
stuck, why testing manually it was working, then this patch solved my issue.
I haven't checked the source but think the readline() implementation of 
these do strchr('\r') instead of strchr('\n') to match a newline?

So input sending Cartridge Return makes more sense here...

I tested with:

-- >8 --
      def exec_command_and_wait_for_pattern(self, command, success_message):
-        command += '\n'
+        command += '\r'
          self.vm.console_socket.sendall(command.encode())
          self.wait_for_console_pattern(success_message)
---

And everything works fine, so we don't need to send the New Line char :)

Thanks for helping me figure this out!
I'll wait if there are other comments then respin.

Regards,

Phil.

>>           self.vm.console_socket.sendall(command.encode())
>>           wait_for_console_pattern(self, success_message)
>>   
>