Adjust tenacity mock

Recent changes in tenacity have broken how we mock the wait call for the
test. This change mocks out the inspect.getargspec call that is used in
tenacity to fix our unit tests for now. I think it might be beneficial
to not actually test the retry functionality in the tripleo-common unit
tests as it seems to be more of a test for tenacity than tripleo-common.

Change-Id: Ia7e9aef0ee8413fa5b09af93f7f89cb34f3f761d
Closes-Bug: #1788802
This commit is contained in:
Alex Schultz 2018-08-24 14:32:45 -06:00
parent 18be01a011
commit 213968bb3f
1 changed files with 57 additions and 35 deletions

View File

@ -13,11 +13,13 @@
# under the License.
#
import inspect
import json
import mock
import operator
import requests
import six
import tenacity
import urllib3
from oslo_concurrency import processutils
@ -633,9 +635,9 @@ class TestDockerImageUploader(base.TestCase):
('docker.io/t/baz', 'rdo_release', set())
])
@mock.patch('tenacity.wait.wait_random_exponential.__call__')
def test_pull_retry(self, mock_wait):
mock_wait.return_value = 0
def test_pull_retry(self):
orig_call = tenacity.wait.wait_random_exponential.__call__
orig_argspec = inspect.getargspec(orig_call)
image = 'docker.io/tripleomaster/heat-docker-agents-centos'
dockerc = self.dockermock.return_value
@ -646,18 +648,22 @@ class TestDockerImageUploader(base.TestCase):
['{"error": "ouch"}'],
['{"status": "done"}']
]
self.uploader._pull(dockerc, image)
with mock.patch('tenacity.wait.wait_random_exponential.__call__') as f:
f.return_value = 0
with mock.patch('inspect.getargspec') as mock_args:
mock_args.return_value = orig_argspec
self.assertEqual(dockerc.pull.call_count, 5)
dockerc.pull.assert_has_calls([
mock.call(image, tag=None, stream=True)
])
self.uploader._pull(dockerc, image)
@mock.patch('tenacity.wait.wait_random_exponential.__call__')
def test_pull_retry_failure(self, mock_wait):
mock_wait.return_value = 0
self.assertEqual(dockerc.pull.call_count, 5)
dockerc.pull.assert_has_calls([
mock.call(image, tag=None, stream=True)
])
def test_pull_retry_failure(self):
orig_call = tenacity.wait.wait_random_exponential.__call__
orig_argspec = inspect.getargspec(orig_call)
image = 'docker.io/tripleomaster/heat-docker-agents-centos'
dockerc = self.dockermock.return_value
dockerc.pull.side_effect = [
urllib3.exceptions.ReadTimeoutError('p', '/foo', 'ouch'),
@ -666,17 +672,23 @@ class TestDockerImageUploader(base.TestCase):
urllib3.exceptions.ReadTimeoutError('p', '/foo', 'ouch'),
urllib3.exceptions.ReadTimeoutError('p', '/foo', 'ouch'),
]
self.assertRaises(urllib3.exceptions.ReadTimeoutError,
self.uploader._pull, dockerc, image)
self.assertEqual(dockerc.pull.call_count, 5)
dockerc.pull.assert_has_calls([
mock.call(image, tag=None, stream=True)
])
with mock.patch('tenacity.wait.wait_random_exponential.__call__') as f:
f.return_value = 0
with mock.patch('inspect.getargspec') as mock_args:
mock_args.return_value = orig_argspec
@mock.patch('tenacity.wait.wait_random_exponential.__call__')
def test_push_retry(self, mock_wait):
mock_wait.return_value = 0
self.assertRaises(urllib3.exceptions.ReadTimeoutError,
self.uploader._pull, dockerc, image)
self.assertEqual(dockerc.pull.call_count, 5)
dockerc.pull.assert_has_calls([
mock.call(image, tag=None, stream=True)
])
def test_push_retry(self):
orig_call = tenacity.wait.wait_random_exponential.__call__
orig_argspec = inspect.getargspec(orig_call)
image = 'docker.io/tripleoupstream/heat-docker-agents-centos'
dockerc = self.dockermock.return_value
@ -687,16 +699,21 @@ class TestDockerImageUploader(base.TestCase):
['{"error": "ouch"}'],
['{"status": "done"}']
]
self.uploader._push(dockerc, image)
with mock.patch('tenacity.wait.wait_random_exponential.__call__') as f:
f.return_value = 0
with mock.patch('inspect.getargspec') as mock_args:
mock_args.return_value = orig_argspec
self.assertEqual(dockerc.push.call_count, 5)
dockerc.push.assert_has_calls([
mock.call(image, tag=None, stream=True)
])
self.uploader._push(dockerc, image)
@mock.patch('tenacity.wait.wait_random_exponential.__call__')
def test_push_retry_failure(self, mock_wait):
mock_wait.return_value = 0
self.assertEqual(dockerc.push.call_count, 5)
dockerc.push.assert_has_calls([
mock.call(image, tag=None, stream=True)
])
def test_push_retry_failure(self):
orig_call = tenacity.wait.wait_random_exponential.__call__
orig_argspec = inspect.getargspec(orig_call)
image = 'docker.io/tripleoupstream/heat-docker-agents-centos'
dockerc = self.dockermock.return_value
@ -707,13 +724,18 @@ class TestDockerImageUploader(base.TestCase):
['{"error": "ouch"}'],
['{"error": "ouch"}'],
]
self.assertRaises(ImageUploaderException,
self.uploader._push, dockerc, image)
with mock.patch('tenacity.wait.wait_random_exponential.__call__') as f:
f.return_value = 0
with mock.patch('inspect.getargspec') as mock_args:
mock_args.return_value = orig_argspec
self.assertEqual(dockerc.push.call_count, 5)
dockerc.push.assert_has_calls([
mock.call(image, tag=None, stream=True)
])
self.assertRaises(ImageUploaderException,
self.uploader._push, dockerc, image)
self.assertEqual(dockerc.push.call_count, 5)
dockerc.push.assert_has_calls([
mock.call(image, tag=None, stream=True)
])
@mock.patch('tripleo_common.image.image_uploader.'
'DockerImageUploader._inspect')