[libcamera-devel] [PATCH v4 10/15] py: unittests.py: Add weakref helpers and use del

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Mar 12 15:54:54 CET 2023


Hi Tomi,

Thank you for the patch.

On Thu, Mar 09, 2023 at 04:25:56PM +0200, Tomi Valkeinen via libcamera-devel wrote:
> Add helpers to check if a weakref or a list of weakrefs is alive or
> dead.
> 
> Also use 'del' for local variables instead of setting the variable to
> None. This makes debugging the test easier as the locals will be gone
> from locals() dict.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> ---
>  test/py/unittests.py | 60 ++++++++++++++++++++++++++------------------
>  1 file changed, 36 insertions(+), 24 deletions(-)
> 
> diff --git a/test/py/unittests.py b/test/py/unittests.py
> index fab791d1..3bd2d7fd 100755
> --- a/test/py/unittests.py
> +++ b/test/py/unittests.py
> @@ -18,6 +18,18 @@ class BaseTestCase(unittest.TestCase):
>      def assertZero(self, a, msg=None):
>          self.assertEqual(a, 0, msg)
>  
> +    def assertIsAlive(self, wr, msg='object not alive'):
> +        self.assertIsNotNone(wr(), msg)
> +
> +    def assertIsDead(self, wr, msg='object not dead'):
> +        self.assertIsNone(wr(), msg)
> +
> +    def assertIsAllAlive(self, wr_list, msg='object not alive'):
> +        self.assertTrue(all([wr() for wr in wr_list]), msg)
> +
> +    def assertIsAllDead(self, wr_list, msg='object not dead'):
> +        self.assertTrue(all([not wr() for wr in wr_list]), msg)
> +
>  
>  class SimpleTestMethods(BaseTestCase):
>      def test_get_ref(self):
> @@ -28,14 +40,14 @@ class SimpleTestMethods(BaseTestCase):
>          self.assertIsNotNone(cam)
>          wr_cam = weakref.ref(cam)
>  
> -        cm = None
> +        del cm
>          gc.collect()
> -        self.assertIsNotNone(wr_cm())
> +        self.assertIsAlive(wr_cm)
>  
> -        cam = None
> +        del cam
>          gc.collect()
> -        self.assertIsNone(wr_cm())
> -        self.assertIsNone(wr_cam())
> +        self.assertIsDead(wr_cm)
> +        self.assertIsDead(wr_cam)
>  
>      def test_acquire_release(self):
>          cm = libcam.CameraManager.singleton()
> @@ -89,8 +101,8 @@ class CameraTesterBase(BaseTestCase):
>          self.cam = None
>          self.cm = None
>  
> -        self.assertIsNone(self.wr_cm())
> -        self.assertIsNone(self.wr_cam())
> +        self.assertIsDead(self.wr_cm)
> +        self.assertIsDead(self.wr_cam)
>  
>  
>  class AllocatorTestMethods(CameraTesterBase):
> @@ -110,11 +122,11 @@ class AllocatorTestMethods(CameraTesterBase):
>          wr_stream = weakref.ref(stream)
>  
>          # stream should keep streamconfig and camconfig alive
> -        streamconfig = None
> -        camconfig = None
> +        del streamconfig
> +        del camconfig
>          gc.collect()
> -        self.assertIsNotNone(wr_camconfig())
> -        self.assertIsNotNone(wr_streamconfig())
> +        self.assertIsAlive(wr_camconfig)
> +        self.assertIsAlive(wr_streamconfig)
>  
>          allocator = libcam.FrameBufferAllocator(cam)
>          num_bufs = allocator.allocate(stream)
> @@ -123,29 +135,29 @@ class AllocatorTestMethods(CameraTesterBase):
>  
>          buffers = allocator.buffers(stream)
>          self.assertIsNotNone(buffers)
> -        buffers = None
> +        del buffers
>  
>          buffer = allocator.buffers(stream)[0]
>          self.assertIsNotNone(buffer)
>          wr_buffer = weakref.ref(buffer)
>  
> -        allocator = None
> +        del allocator
>          gc.collect()
> -        self.assertIsNotNone(wr_buffer())
> -        self.assertIsNotNone(wr_allocator())
> -        self.assertIsNotNone(wr_stream())
> +        self.assertIsAlive(wr_buffer)
> +        self.assertIsAlive(wr_allocator)
> +        self.assertIsAlive(wr_stream)
>  
> -        buffer = None
> +        del buffer
>          gc.collect()
> -        self.assertIsNone(wr_buffer())
> -        self.assertIsNone(wr_allocator())
> -        self.assertIsNotNone(wr_stream())
> +        self.assertIsDead(wr_buffer)
> +        self.assertIsDead(wr_allocator)
> +        self.assertIsAlive(wr_stream)
>  
> -        stream = None
> +        del stream
>          gc.collect()
> -        self.assertIsNone(wr_stream())
> -        self.assertIsNone(wr_camconfig())
> -        self.assertIsNone(wr_streamconfig())
> +        self.assertIsDead(wr_stream)
> +        self.assertIsDead(wr_camconfig)
> +        self.assertIsDead(wr_streamconfig)
>  
>  
>  class SimpleCaptureMethods(CameraTesterBase):

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list