diff mbox series

[v2,05/31] tests/functional: drop 'tesseract_available' helper

Message ID 20241211172648.2893097-6-berrange@redhat.com (mailing list archive)
State New
Headers show
Series tests/functional: various improvements wrt assets/scratch files | expand

Commit Message

Daniel P. Berrangé Dec. 11, 2024, 5:26 p.m. UTC
Platforms we target have new enough tesseract that it suffices to merely
check if the binary exists.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 tests/functional/qemu_test/tesseract.py | 12 +-----------
 tests/functional/test_m68k_nextcube.py  |  8 +++-----
 2 files changed, 4 insertions(+), 16 deletions(-)

Comments

Thomas Huth Dec. 12, 2024, 6:57 a.m. UTC | #1
On 11/12/2024 18.26, Daniel P. Berrangé wrote:
> Platforms we target have new enough tesseract that it suffices to merely
> check if the binary exists.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>   tests/functional/qemu_test/tesseract.py | 12 +-----------
>   tests/functional/test_m68k_nextcube.py  |  8 +++-----
>   2 files changed, 4 insertions(+), 16 deletions(-)
> 
> diff --git a/tests/functional/qemu_test/tesseract.py b/tests/functional/qemu_test/tesseract.py
> index ef1833139d..1b7818090a 100644
> --- a/tests/functional/qemu_test/tesseract.py
> +++ b/tests/functional/qemu_test/tesseract.py
> @@ -7,17 +7,7 @@
>   
>   import logging
>   
> -from . import has_cmd, run_cmd
> -
> -def tesseract_available(expected_version):
> -    (has_tesseract, _) = has_cmd('tesseract')
> -    if not has_tesseract:
> -        return False
> -    (stdout, stderr, ret) = run_cmd([ 'tesseract', '--version'])
> -    if ret:
> -        return False
> -    version = stdout.split()[1]
> -    return int(version.split('.')[0]) >= expected_version
> +from . import run_cmd
>   
>   def tesseract_ocr(image_path, tesseract_args=''):
>       console_logger = logging.getLogger('console')
> diff --git a/tests/functional/test_m68k_nextcube.py b/tests/functional/test_m68k_nextcube.py
> index 0124622c40..1022e8f468 100755
> --- a/tests/functional/test_m68k_nextcube.py
> +++ b/tests/functional/test_m68k_nextcube.py
> @@ -13,7 +13,8 @@
>   from qemu_test import QemuSystemTest, Asset
>   from unittest import skipUnless
>   
> -from qemu_test.tesseract import tesseract_available, tesseract_ocr
> +from qemu_test import has_cmd
> +from qemu_test.tesseract import tesseract_ocr
>   
>   PIL_AVAILABLE = True
>   try:
> @@ -53,10 +54,7 @@ def test_bootrom_framebuffer_size(self):
>           self.assertEqual(width, 1120)
>           self.assertEqual(height, 832)
>   
> -    # Tesseract 4 adds a new OCR engine based on LSTM neural networks. The
> -    # new version is faster and more accurate than version 3. The drawback is
> -    # that it is still alpha-level software.
> -    @skipUnless(tesseract_available(4), 'tesseract OCR tool not available')
> +    @skipUnless(*has_cmd('tesseract') 'tesseract OCR tool not available')

The *has_cmd('tesseract') already provides the error message, so you've got 
to drop the 'tesseract OCR tool not available' part now, otherwise this ends 
up in an SyntaxError. You likely didn't notice since it gets replaced later 
anyway, but for bisectability, it would be good to fix it.

Anyway, this is yet another good example why we should rather get rid of 
has_cmd() ... it's too error prone, I made the same or similar mistake in 
the past already, too.

  Thomas
Daniel P. Berrangé Dec. 12, 2024, 9:35 a.m. UTC | #2
On Thu, Dec 12, 2024 at 07:57:37AM +0100, Thomas Huth wrote:
> On 11/12/2024 18.26, Daniel P. Berrangé wrote:
> > Platforms we target have new enough tesseract that it suffices to merely
> > check if the binary exists.
> > 
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> >   tests/functional/qemu_test/tesseract.py | 12 +-----------
> >   tests/functional/test_m68k_nextcube.py  |  8 +++-----
> >   2 files changed, 4 insertions(+), 16 deletions(-)
> > 
> > diff --git a/tests/functional/qemu_test/tesseract.py b/tests/functional/qemu_test/tesseract.py
> > index ef1833139d..1b7818090a 100644
> > --- a/tests/functional/qemu_test/tesseract.py
> > +++ b/tests/functional/qemu_test/tesseract.py
> > @@ -7,17 +7,7 @@
> >   import logging
> > -from . import has_cmd, run_cmd
> > -
> > -def tesseract_available(expected_version):
> > -    (has_tesseract, _) = has_cmd('tesseract')
> > -    if not has_tesseract:
> > -        return False
> > -    (stdout, stderr, ret) = run_cmd([ 'tesseract', '--version'])
> > -    if ret:
> > -        return False
> > -    version = stdout.split()[1]
> > -    return int(version.split('.')[0]) >= expected_version
> > +from . import run_cmd
> >   def tesseract_ocr(image_path, tesseract_args=''):
> >       console_logger = logging.getLogger('console')
> > diff --git a/tests/functional/test_m68k_nextcube.py b/tests/functional/test_m68k_nextcube.py
> > index 0124622c40..1022e8f468 100755
> > --- a/tests/functional/test_m68k_nextcube.py
> > +++ b/tests/functional/test_m68k_nextcube.py
> > @@ -13,7 +13,8 @@
> >   from qemu_test import QemuSystemTest, Asset
> >   from unittest import skipUnless
> > -from qemu_test.tesseract import tesseract_available, tesseract_ocr
> > +from qemu_test import has_cmd
> > +from qemu_test.tesseract import tesseract_ocr
> >   PIL_AVAILABLE = True
> >   try:
> > @@ -53,10 +54,7 @@ def test_bootrom_framebuffer_size(self):
> >           self.assertEqual(width, 1120)
> >           self.assertEqual(height, 832)
> > -    # Tesseract 4 adds a new OCR engine based on LSTM neural networks. The
> > -    # new version is faster and more accurate than version 3. The drawback is
> > -    # that it is still alpha-level software.
> > -    @skipUnless(tesseract_available(4), 'tesseract OCR tool not available')
> > +    @skipUnless(*has_cmd('tesseract') 'tesseract OCR tool not available')
> 
> The *has_cmd('tesseract') already provides the error message, so you've got
> to drop the 'tesseract OCR tool not available' part now, otherwise this ends
> up in an SyntaxError. You likely didn't notice since it gets replaced later
> anyway, but for bisectability, it would be good to fix it.

Opps, yes, will address it.

> 
> Anyway, this is yet another good example why we should rather get rid of
> has_cmd() ... it's too error prone, I made the same or similar mistake in
> the past already, too.
> 
>  Thomas
> 

With regards,
Daniel
diff mbox series

Patch

diff --git a/tests/functional/qemu_test/tesseract.py b/tests/functional/qemu_test/tesseract.py
index ef1833139d..1b7818090a 100644
--- a/tests/functional/qemu_test/tesseract.py
+++ b/tests/functional/qemu_test/tesseract.py
@@ -7,17 +7,7 @@ 
 
 import logging
 
-from . import has_cmd, run_cmd
-
-def tesseract_available(expected_version):
-    (has_tesseract, _) = has_cmd('tesseract')
-    if not has_tesseract:
-        return False
-    (stdout, stderr, ret) = run_cmd([ 'tesseract', '--version'])
-    if ret:
-        return False
-    version = stdout.split()[1]
-    return int(version.split('.')[0]) >= expected_version
+from . import run_cmd
 
 def tesseract_ocr(image_path, tesseract_args=''):
     console_logger = logging.getLogger('console')
diff --git a/tests/functional/test_m68k_nextcube.py b/tests/functional/test_m68k_nextcube.py
index 0124622c40..1022e8f468 100755
--- a/tests/functional/test_m68k_nextcube.py
+++ b/tests/functional/test_m68k_nextcube.py
@@ -13,7 +13,8 @@ 
 from qemu_test import QemuSystemTest, Asset
 from unittest import skipUnless
 
-from qemu_test.tesseract import tesseract_available, tesseract_ocr
+from qemu_test import has_cmd
+from qemu_test.tesseract import tesseract_ocr
 
 PIL_AVAILABLE = True
 try:
@@ -53,10 +54,7 @@  def test_bootrom_framebuffer_size(self):
         self.assertEqual(width, 1120)
         self.assertEqual(height, 832)
 
-    # Tesseract 4 adds a new OCR engine based on LSTM neural networks. The
-    # new version is faster and more accurate than version 3. The drawback is
-    # that it is still alpha-level software.
-    @skipUnless(tesseract_available(4), 'tesseract OCR tool not available')
+    @skipUnless(*has_cmd('tesseract') 'tesseract OCR tool not available')
     def test_bootrom_framebuffer_ocr_with_tesseract(self):
         self.set_machine('next-cube')
         screenshot_path = os.path.join(self.workdir, "dump.ppm")