[libcamera-devel,1/2] tests: v4l2_compat: Prettify failure output

Message ID 20200710141508.468834-1-paul.elder@ideasonboard.com
State Superseded
Headers show
Series
  • [libcamera-devel,1/2] tests: v4l2_compat: Prettify failure output
Related show

Commit Message

Paul Elder July 10, 2020, 2:15 p.m. UTC
When a test is being run on a video device, there is output like so:

Testing /dev/video0 with uvcvideo driver...

and when it succeeds, "success" is appended:

Testing /dev/video0 with uvcvideo driver... success

On failure, however, the output of v4l2-compliance is printed before
"failure" is printed, resulting in the first line of the v4l2-compliance
output to be printed on the same line as the message:

Testing /dev/video2 with uvcvideo driver... v4l2-compliance SHA: not available, 64 bits
<v4l2-compliance output>
failure

Move printing of "failure" to the print_output_arr(), where the failed
test output is printed, to prettify the output upon failure.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
---
 test/v4l2_compat/v4l2_compat_test.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Laurent Pinchart July 10, 2020, 3:46 p.m. UTC | #1
Hi Paul,

Thank you for the patch.

On Fri, Jul 10, 2020 at 11:15:07PM +0900, Paul Elder wrote:
> When a test is being run on a video device, there is output like so:
> 
> Testing /dev/video0 with uvcvideo driver...
> 
> and when it succeeds, "success" is appended:
> 
> Testing /dev/video0 with uvcvideo driver... success
> 
> On failure, however, the output of v4l2-compliance is printed before
> "failure" is printed, resulting in the first line of the v4l2-compliance
> output to be printed on the same line as the message:
> 
> Testing /dev/video2 with uvcvideo driver... v4l2-compliance SHA: not available, 64 bits
> <v4l2-compliance output>
> failure
> 
> Move printing of "failure" to the print_output_arr(), where the failed
> test output is printed, to prettify the output upon failure.
> 
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> ---
>  test/v4l2_compat/v4l2_compat_test.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/test/v4l2_compat/v4l2_compat_test.py b/test/v4l2_compat/v4l2_compat_test.py
> index 99b3d5a..8a8e59e 100755
> --- a/test/v4l2_compat/v4l2_compat_test.py
> +++ b/test/v4l2_compat/v4l2_compat_test.py
> @@ -55,6 +55,7 @@ def extract_result(result):
>  
>  
>  def print_output_arr(output_arr):
> +    print('failed')
>      print('\n'.join(output_arr))
>  
>  
> @@ -135,7 +136,6 @@ def main(argv):
>          ret = test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, driver)
>          if ret == TestFail:
>              failed.append(device)
> -            print('failed')
>          else:
>              print('success')

I'm not a big fan of the resulting asymmetry. Would the following make
sense (not fully tested) ?

diff --git a/test/v4l2_compat/v4l2_compat_test.py b/test/v4l2_compat/v4l2_compat_test.py
index 99b3d5a3e414..8aca22203e46 100755
--- a/test/v4l2_compat/v4l2_compat_test.py
+++ b/test/v4l2_compat/v4l2_compat_test.py
@@ -54,32 +54,25 @@ def extract_result(result):
     return ret


-def print_output_arr(output_arr):
-    print('\n'.join(output_arr))
-
-
 def test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, base_driver):
     ret, output = run_with_stdout(v4l2_compliance, '-s', '-d', device, env={'LD_PRELOAD': v4l2_compat})
     if ret < 0:
-        print_output_arr(output)
-        print(f'Test for {device} terminated due to signal {signal.Signals(-ret).name}')
-        return TestFail
+        output.append(f'Test for {device} terminated due to signal {signal.Signals(-ret).name}')
+        return TestFail, output

     result = extract_result(output[-2])
     if result['failed'] == 0:
-        return TestPass
+        return TestPass, None

     # vimc will fail s_fmt because it only supports framesizes that are
     # multiples of 3
     if base_driver == 'vimc' and result['failed'] == 1:
         failures = grep('fail', output)
         if re.search('S_FMT cannot handle an invalid format', failures[0]) is None:
-            print_output_arr(output)
-            return TestFail
-        return TestPass
+            return TestFail, output
+        return TestPass, None

-    print_output_arr(output)
-    return TestFail
+    return TestFail, output


 def main(argv):
@@ -132,10 +125,11 @@ def main(argv):
             continue

         print(f'Testing {device} with {driver} driver... ', end='')
-        ret = test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, driver)
+        ret, msg = test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, driver)
         if ret == TestFail:
             failed.append(device)
             print('failed')
+            print('\n'.join(msg))
         else:
             print('success')
         drivers_tested[driver] = True


>          drivers_tested[driver] = True

Patch

diff --git a/test/v4l2_compat/v4l2_compat_test.py b/test/v4l2_compat/v4l2_compat_test.py
index 99b3d5a..8a8e59e 100755
--- a/test/v4l2_compat/v4l2_compat_test.py
+++ b/test/v4l2_compat/v4l2_compat_test.py
@@ -55,6 +55,7 @@  def extract_result(result):
 
 
 def print_output_arr(output_arr):
+    print('failed')
     print('\n'.join(output_arr))
 
 
@@ -135,7 +136,6 @@  def main(argv):
         ret = test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, driver)
         if ret == TestFail:
             failed.append(device)
-            print('failed')
         else:
             print('success')
         drivers_tested[driver] = True