Public bug reported:

This issue has appeared recently on ppc64el autopkgtest [1]. The issue
is that some of the tests from libcloud/test/test_connection.py
incorrectly assume the mock side effects will always finish within the
specified timeouts, which may not happen depending on the execution
environment.

The following autopkgtest log snippets demonstrate this:

Take from [2]:

=================================== FAILURES ===================================
__ ConnectionClassTestCase.test_retry_on_all_default_retry_exception_classes ___

self = <test.test_connection.ConnectionClassTestCase 
testMethod=test_retry_on_all_default_retry_exception_classes>
mock_connect = <MagicMock name='request' id='134056393449408'>

    @patch('libcloud.common.base.Connection.request')
    def test_retry_on_all_default_retry_exception_classes(self, mock_connect):
        con = Connection()
        con.connection = Mock()
        connect_method = 'libcloud.common.base.Connection.request'
    
        self.retry_counter = 0
    
        def mock_connect_side_effect(*args, **kwargs):
            self.retry_counter += 1
    
            if self.retry_counter < len(RETRY_EXCEPTIONS):
                raise RETRY_EXCEPTIONS[self.retry_counter]
    
            return 'success'
    
        mock_connect.__name__ = 'mock_connect'
        mock_connect.side_effect = mock_connect_side_effect
        retry_request = Retry(timeout=0.6, retry_delay=0.1,
                                backoff=1)
>       result = retry_request(con.request)(action='/')

test/test_connection.py:583: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/libcloud/utils/retry.py:127: in retry_loop
    raise last_exc
/usr/lib/python3/dist-packages/libcloud/utils/retry.py:103: in retry_loop
    return transform_ssl_error(func, *args, **kwargs)
/usr/lib/python3/dist-packages/libcloud/utils/retry.py:93: in 
transform_ssl_error
    raise exc
/usr/lib/python3/dist-packages/libcloud/utils/retry.py:88: in 
transform_ssl_error
    return function(*args, **kwargs)
/usr/lib/python3/dist-packages/mock/mock.py:1100: in __call__
    return _mock_self._mock_call(*args, **kwargs)
/usr/lib/python3/dist-packages/mock/mock.py:1104: in _mock_call
    return _mock_self._execute_mock_call(*args, **kwargs)
/usr/lib/python3/dist-packages/mock/mock.py:1167: in _execute_mock_call
    result = effect(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = (), kwargs = {'action': '/'}

    def mock_connect_side_effect(*args, **kwargs):
        self.retry_counter += 1
    
        if self.retry_counter < len(RETRY_EXCEPTIONS):
>           raise RETRY_EXCEPTIONS[self.retry_counter]
E           libcloud.utils.retry.TransientSSLError: ()

test/test_connection.py:575: TransientSSLError
---

Taken from [3]:

=================================== FAILURES ===================================
_______________ ConnectionClassTestCase.test_retry_with_timeout ________________

self = <test.test_connection.ConnectionClassTestCase 
testMethod=test_retry_with_timeout>
mock_connect = <MagicMock name='request' id='127398439136048'>

    @patch('libcloud.common.base.Connection.request')
    def test_retry_with_timeout(self, mock_connect):
        con = Connection()
        con.connection = Mock()
    
        mock_connect.side_effect = socket.gaierror('')
        retry_request = Retry(timeout=0.2, retry_delay=0.1,
                                backoff=1)
        self.assertRaises(socket.gaierror,
                          retry_request(con.request), action='/')
    
>       self.assertGreater(mock_connect.call_count, 1,
                            'Retry logic failed')
E       AssertionError: 1 not greater than 1 : Retry logic failed

test/test_connection.py:457: AssertionError
---

[1] https://autopkgtest.ubuntu.com/packages/libc/libcloud/kinetic/ppc64el
[2] 
https://autopkgtest.ubuntu.com/results/autopkgtest-kinetic/kinetic/ppc64el/libc/libcloud/20220528_194230_765c9@/log.gz
[3] 
https://autopkgtest.ubuntu.com/results/autopkgtest-kinetic/kinetic/ppc64el/libc/libcloud/20220526_090523_a6c63@/log.gz

** Affects: libcloud (Ubuntu)
     Importance: Undecided
     Assignee: Nick Rosbrook (enr0n)
         Status: In Progress

** Changed in: libcloud (Ubuntu)
     Assignee: (unassigned) => Nick Rosbrook (enr0n)

** Changed in: libcloud (Ubuntu)
       Status: New => In Progress

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1977320

Title:
  libcloud: autopkgtest is flaky due to racy "test_retry_*" tests

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libcloud/+bug/1977320/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to