public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
* [PATCH] rust: Oe-selftest error log on console when it fails.
@ 2024-02-13 13:04 Yash.Shinde
  2024-02-13 18:12 ` Randy MacLeod
  0 siblings, 1 reply; 5+ messages in thread
From: Yash.Shinde @ 2024-02-13 13:04 UTC (permalink / raw)
  To: openembedded-core
  Cc: Randy.MacLeod, Umesh.Kallapa, Naveen.Gowda, Sundeep.Kokkonda,
	Shivaprasad.Moodalappa, Yash.Shinde

From: Yash Shinde <Yash.Shinde@windriver.com>

The rust oe-selftest output error log doesn't show any information on console when it fails.
The following changes emit stderr logs in terminal along with re-directing stdout and stderr to "summary.txt" file.

Changes made::
- cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
+ cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)

> summary.txt:                  Redirects the standard output (stdout) of the command to a file 'summary.txt'
2> >(tee summary.txt >&2):      Redirects stderr & stdout to summary.txt & writes stderr on terminal

The overall effect is that both stdout and stderr are captured in the summary.txt file, while stderr still being displayed in the terminal.

Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
---
 meta/lib/oeqa/selftest/cases/rust.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/lib/oeqa/selftest/cases/rust.py b/meta/lib/oeqa/selftest/cases/rust.py
index 164ad11ecd..07f1b5706c 100644
--- a/meta/lib/oeqa/selftest/cases/rust.py
+++ b/meta/lib/oeqa/selftest/cases/rust.py
@@ -213,7 +213,7 @@ class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
             cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % rustlibpath
             # Trigger testing.
             cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
-            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
+            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)
             runCmd(cmd)
             end_time = time.time()
 
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] rust: Oe-selftest error log on console when it fails.
  2024-02-13 13:04 [PATCH] rust: Oe-selftest error log on console when it fails Yash.Shinde
@ 2024-02-13 18:12 ` Randy MacLeod
  2024-02-13 18:21   ` [OE-core] " Alexander Kanavin
  2024-02-21  8:00   ` Yash Shinde
  0 siblings, 2 replies; 5+ messages in thread
From: Randy MacLeod @ 2024-02-13 18:12 UTC (permalink / raw)
  To: Yash.Shinde, openembedded-core
  Cc: Umesh.Kallapa, Naveen.Gowda, Sundeep.Kokkonda,
	Shivaprasad.Moodalappa, Joshua Watt, Richard Purdie

[-- Attachment #1: Type: text/plain, Size: 4171 bytes --]

On 2024-02-13 8:04 a.m., Yash.Shinde@windriver.com wrote:
> From: Yash Shinde<Yash.Shinde@windriver.com>
>
> The rust oe-selftest output error log doesn't show any information on console when it fails.
> The following changes emit stderr logs in terminal along with re-directing stdout and stderr to "summary.txt" file.
>
> Changes made::
> - cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
> + cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)
>
>> summary.txt:                  Redirects the standard output (stdout) of the command to a file 'summary.txt'
> 2> >(tee summary.txt >&2):      Redirects stderr & stdout to summary.txt & writes stderr on terminal
>
> The overall effect is that both stdout and stderr are captured in the summary.txt file, while stderr still being displayed in the terminal.
>
> Signed-off-by: Yash Shinde<Yash.Shinde@windriver.com>
> ---
>   meta/lib/oeqa/selftest/cases/rust.py | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/lib/oeqa/selftest/cases/rust.py b/meta/lib/oeqa/selftest/cases/rust.py
> index 164ad11ecd..07f1b5706c 100644
> --- a/meta/lib/oeqa/selftest/cases/rust.py
> +++ b/meta/lib/oeqa/selftest/cases/rust.py
> @@ -213,7 +213,7 @@ class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
>               cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % rustlibpath
>               # Trigger testing.
>               cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
> -            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
> +            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)
>               runCmd(cmd)
>               end_time = time.time()
>   

Hi Yash,

We talked about this change and decided that it's just too odd a shell 
pipeline to merge!

Also, it depends on the bash shell as you can tell by pasting:

    #!/bin/sh
    python3 src/bootstrap/bootstrap.py test %s --target %s  > 
summary.txt 2> >(tee summary.txt >&2);

into https://www.shellcheck.net/ . You'll see the following log and error:

$ shellcheck myscript

Line 2:
python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> 
 >(tee summary.txt >&2);
                                                           ^-- SC2094 
<https://www.shellcheck.net/wiki/SC2094> (info): Make sure not to read 
and write the same file in the same pipeline.
>>                                                                       ^--  SC3001 <https://www.shellcheck.net/wiki/SC3001> (warning): In POSIX 
sh, process substitution is undefined.
>>                                                                             ^--  SC2094 <https://www.shellcheck.net/wiki/SC2094> (info): Make sure not 
to read and write the same file in the same pipeline.


The YP goal / requirement is to avoid bash dependencies since user may 
be using dash or some other shell for /bin/sh.


I think that the command is being run locally (not on target), and we 
are already in a python context so
it seems that we would have a simpler solution if we handle the IO 
redirection from python.

Perhaps Richard or Joshua can recommend some code that you can reference 
when making this change.

Did you have time to look at the log file handling in runCmd()

https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n168

Please do some analysis and reply here every day or so as  you learn 
things or have questions.


Thanks,

../Randy



-- 
# Randy MacLeod
# Wind River Linux

[-- Attachment #2: Type: text/html, Size: 6907 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [OE-core] [PATCH] rust: Oe-selftest error log on console when it fails.
  2024-02-13 18:12 ` Randy MacLeod
@ 2024-02-13 18:21   ` Alexander Kanavin
  2024-02-21  8:00   ` Yash Shinde
  1 sibling, 0 replies; 5+ messages in thread
From: Alexander Kanavin @ 2024-02-13 18:21 UTC (permalink / raw)
  To: randy.macleod
  Cc: Yash.Shinde, openembedded-core, Umesh.Kallapa, Naveen.Gowda,
	Sundeep.Kokkonda, Shivaprasad.Moodalappa, Joshua Watt,
	Richard Purdie

It's not difficult to see that runCmd() captures and returns both
stdout and stderr in an object, so rather than redirecting things to a
file, the code should actually assign the return value to a variable
and do useful things with it.

Alex

On Tue, 13 Feb 2024 at 19:12, Randy MacLeod via lists.openembedded.org
<randy.macleod=windriver.com@lists.openembedded.org> wrote:
>
> On 2024-02-13 8:04 a.m., Yash.Shinde@windriver.com wrote:
>
> From: Yash Shinde <Yash.Shinde@windriver.com>
>
> The rust oe-selftest output error log doesn't show any information on console when it fails.
> The following changes emit stderr logs in terminal along with re-directing stdout and stderr to "summary.txt" file.
>
> Changes made::
> - cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
> + cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)
>
> summary.txt:                  Redirects the standard output (stdout) of the command to a file 'summary.txt'
>
> 2> >(tee summary.txt >&2):      Redirects stderr & stdout to summary.txt & writes stderr on terminal
>
> The overall effect is that both stdout and stderr are captured in the summary.txt file, while stderr still being displayed in the terminal.
>
> Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
> ---
>  meta/lib/oeqa/selftest/cases/rust.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/lib/oeqa/selftest/cases/rust.py b/meta/lib/oeqa/selftest/cases/rust.py
> index 164ad11ecd..07f1b5706c 100644
> --- a/meta/lib/oeqa/selftest/cases/rust.py
> +++ b/meta/lib/oeqa/selftest/cases/rust.py
> @@ -213,7 +213,7 @@ class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
>              cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % rustlibpath
>              # Trigger testing.
>              cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
> -            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
> +            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)
>              runCmd(cmd)
>              end_time = time.time()
>
>
> Hi Yash,
>
> We talked about this change and decided that it's just too odd a shell pipeline to merge!
>
> Also, it depends on the bash shell as you can tell by pasting:
>
>    #!/bin/sh
>    python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);
>
> into https://www.shellcheck.net/ . You'll see the following log and error:
>
> $ shellcheck myscript
>
> Line 2:
> python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);
>                                                           ^-- SC2094 (info): Make sure not to read and write the same file in the same pipeline.
> >>                                                                       ^-- SC3001 (warning): In POSIX sh, process substitution is undefined.
> >>                                                                             ^-- SC2094 (info): Make sure not to read and write the same file in the same pipeline.
>
>
> The YP goal / requirement is to avoid bash dependencies since user may be using dash or some other shell for /bin/sh.
>
>
> I think that the command is being run locally (not on target), and we are already in a python context so
> it seems that we would have a simpler solution if we handle the IO redirection from python.
>
> Perhaps Richard or Joshua can recommend some code that you can reference when making this change.
>
> Did you have time to look at the log file handling in runCmd()
>
> https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n168
>
> Please do some analysis and reply here every day or so as  you learn things or have questions.
>
>
> Thanks,
>
> ../Randy
>
>
>
> --
> # Randy MacLeod
> # Wind River Linux
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#195424): https://lists.openembedded.org/g/openembedded-core/message/195424
> Mute This Topic: https://lists.openembedded.org/mt/104331501/1686489
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] rust: Oe-selftest error log on console when it fails.
  2024-02-13 18:12 ` Randy MacLeod
  2024-02-13 18:21   ` [OE-core] " Alexander Kanavin
@ 2024-02-21  8:00   ` Yash Shinde
  2024-02-21 12:21     ` Richard Purdie
  1 sibling, 1 reply; 5+ messages in thread
From: Yash Shinde @ 2024-02-21  8:00 UTC (permalink / raw)
  To: Randy MacLeod, openembedded-core
  Cc: Umesh.Kallapa, Naveen.Gowda, Sundeep.Kokkonda,
	Shivaprasad.Moodalappa, Joshua Watt, Richard Purdie

[-- Attachment #1: Type: text/plain, Size: 5879 bytes --]


On 13-02-2024 23:42, Randy MacLeod wrote:
> On 2024-02-13 8:04 a.m., Yash.Shinde@windriver.com wrote:
>> From: Yash Shinde<Yash.Shinde@windriver.com>
>>
>> The rust oe-selftest output error log doesn't show any information on console when it fails.
>> The following changes emit stderr logs in terminal along with re-directing stdout and stderr to "summary.txt" file.
>>
>> Changes made::
>> - cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
>> + cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)
>>
>>> summary.txt:                  Redirects the standard output (stdout) of the command to a file 'summary.txt'
>> 2> >(tee summary.txt >&2):      Redirects stderr & stdout to summary.txt & writes stderr on terminal
>>
>> The overall effect is that both stdout and stderr are captured in the summary.txt file, while stderr still being displayed in the terminal.
>>
>> Signed-off-by: Yash Shinde<Yash.Shinde@windriver.com>
>> ---
>>   meta/lib/oeqa/selftest/cases/rust.py | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/meta/lib/oeqa/selftest/cases/rust.py b/meta/lib/oeqa/selftest/cases/rust.py
>> index 164ad11ecd..07f1b5706c 100644
>> --- a/meta/lib/oeqa/selftest/cases/rust.py
>> +++ b/meta/lib/oeqa/selftest/cases/rust.py
>> @@ -213,7 +213,7 @@ class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
>>               cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % rustlibpath
>>               # Trigger testing.
>>               cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
>> -            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
>> +            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)
>>               runCmd(cmd)
>>               end_time = time.time()
>>   
>
> Hi Yash,
>
> We talked about this change and decided that it's just too odd a shell 
> pipeline to merge!
>
> Also, it depends on the bash shell as you can tell by pasting:
>
>    #!/bin/sh
>    python3 src/bootstrap/bootstrap.py test %s --target %s  > 
> summary.txt 2> >(tee summary.txt >&2);
>
> into https://www.shellcheck.net/ . You'll see the following log and error:
>
> $ shellcheck myscript
>
> Line 2:
> python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 
> 2> >(tee summary.txt >&2);
>                                                           ^-- SC2094 
> <https://www.shellcheck.net/wiki/SC2094> (info): Make sure not to read 
> and write the same file in the same pipeline.
> >>                                                                       ^-- SC3001 <https://www.shellcheck.net/wiki/SC3001> (warning): In POSIX 
> sh, process substitution is undefined.
> >>                                                                             ^-- SC2094 <https://www.shellcheck.net/wiki/SC2094> (info): Make sure not 
> to read and write the same file in the same pipeline.
>
>
> The YP goal / requirement is to avoid bash dependencies since user may 
> be using dash or some other shell for /bin/sh.
>
>
> I think that the command is being run locally (not on target), and we 
> are already in a python context so
> it seems that we would have a simpler solution if we handle the IO 
> redirection from python.
>
> Perhaps Richard or Joshua can recommend some code that you can 
> reference when making this change.
>
> Did you have time to look at the log file handling in runCmd()
>
> https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n168
>
> Please do some analysis and reply here every day or so as  you learn 
> things or have questions.
>
>
The runCmd() returns the 'Result' object containing information about 
the command execution. It has the following attributes:
    result.command = command
    result.status = cmd.status
    result.output = cmd.output
    result.error = cmd.error
    result.pid = cmd.process.pid
https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n198 
<https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n198>

I tried to capture the return object value (stderr i.e result.error) and 
print it to the terminal, but that didn't work as expected.
Even I tried to print some debug statements in rust.py file and it also 
didn't show up in the terminal or in the summary.txt file.
I assume there's something in oe-selftest framework that doesn't print 
statements directly.

Also, I see there's a "output_log 
<https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n198:~:text=%3D0%2C-,output_log%3DNone,-%2C%20**options>" 
parameter in the runCmd function parameters, which I understand is used 
to redirect stdout of the
command being executed. Currently, I am checking with different values 
by referring to other oe-selftests and their corresponding behavior with it.

I am checking with some functions and procedures from unittest and 
subprocess.Popen frameworks to get the error logs:

https://docs.python.org/3/library/unittest.html
https://docs.python.org/3/library/subprocess.html#subprocess.Popen

Regards,
Yash

> Thanks,
>
> ../Randy
>
>
>
> -- 
> # Randy MacLeod
> # Wind River Linux

[-- Attachment #2: Type: text/html, Size: 9702 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] rust: Oe-selftest error log on console when it fails.
  2024-02-21  8:00   ` Yash Shinde
@ 2024-02-21 12:21     ` Richard Purdie
  0 siblings, 0 replies; 5+ messages in thread
From: Richard Purdie @ 2024-02-21 12:21 UTC (permalink / raw)
  To: Yash Shinde, Randy MacLeod, openembedded-core
  Cc: Umesh.Kallapa, Naveen.Gowda, Sundeep.Kokkonda,
	Shivaprasad.Moodalappa, Joshua Watt

On Wed, 2024-02-21 at 13:30 +0530, Yash Shinde wrote:
> 
>  The runCmd() returns the 'Result' object containing information about the command execution. It has the following attributes:
>     result.command = command
>     result.status = cmd.status
>     result.output = cmd.output
>     result.error = cmd.error
>     result.pid = cmd.process.pid
>  https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n198
>   
>  I tried to capture the return object value (stderr i.e result.error) and print it to the terminal, but that didn't work as expected.
>  Even I tried to print some debug statements in rust.py file and it also didn't show up in the terminal or in the summary.txt file.
>  I assume there's something in oe-selftest framework that doesn't print statements directly.
>   
>  Also, I see there's a "output_log" parameter in the runCmd function parameters, which I understand is used to redirect stdout of the
>  command being executed. Currently, I am checking with different values by referring to other oe-selftests and their corresponding behavior with it.
>  
> 
> 
> 
>  I am checking with some functions and procedures from unittest and subprocess.Popen frameworks to get the error logs:
>  
> 
> 
> 
>  https://docs.python.org/3/library/unittest.html
>  https://docs.python.org/3/library/subprocess.html#subprocess.Popen
>  


I had a look at this and tried an experiment locally. This seemed to
work:

diff --git a/meta/lib/oeqa/selftest/cases/rust.py b/meta/lib/oeqa/selftest/cases/rust.py
index 120be6454fa..ad14189c6df 100644
--- a/meta/lib/oeqa/selftest/cases/rust.py
+++ b/meta/lib/oeqa/selftest/cases/rust.py
@@ -216,13 +216,16 @@ class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
             cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % rustlibpath
             # Trigger testing.
             cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
-            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
-            runCmd(cmd)
+            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s" % (builddir, testargs, targetsys)
+            retval = runCmd(cmd)
             end_time = time.time()
 
+            resultlog = rustlibpath + "/results-log.txt"
+            with open(resultlog, "w") as f:
+                f.write(retval.output)
+
             ptestsuite = "rust"
-            self.ptest_section(ptestsuite, duration = int(end_time - start_time), logfile = builddir + "/summary.txt")
-            filename = builddir + "/summary.txt"
-            test_results = parse_results(filename)
+            self.ptest_section(ptestsuite, duration = int(end_time - start_time), logfile=resultlog)
+            test_results = parse_results(resultlog)
             for test in test_results:
                 self.ptest_result(ptestsuite, test, test_results[test])


I'm fairly sure we could improve it further but this does start that
process.

Cheers,

Richard



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-02-21 12:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-13 13:04 [PATCH] rust: Oe-selftest error log on console when it fails Yash.Shinde
2024-02-13 18:12 ` Randy MacLeod
2024-02-13 18:21   ` [OE-core] " Alexander Kanavin
2024-02-21  8:00   ` Yash Shinde
2024-02-21 12:21     ` Richard Purdie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox