summaryrefslogtreecommitdiff
path: root/heatclient/tests
diff options
context:
space:
mode:
Diffstat (limited to 'heatclient/tests')
-rw-r--r--heatclient/tests/unit/test_template_utils.py508
1 files changed, 230 insertions, 278 deletions
diff --git a/heatclient/tests/unit/test_template_utils.py b/heatclient/tests/unit/test_template_utils.py
index 7de72b5..a48e0b3 100644
--- a/heatclient/tests/unit/test_template_utils.py
+++ b/heatclient/tests/unit/test_template_utils.py
@@ -15,10 +15,9 @@ import base64
import json
import tempfile
-import mox
+import mock
import six
from six.moves.urllib import error
-from six.moves.urllib import request
import testtools
from testtools import matchers
import yaml
@@ -32,30 +31,24 @@ class ShellEnvironmentTest(testtools.TestCase):
template_a = b'{"heat_template_version": "2013-05-23"}'
- def setUp(self):
- super(ShellEnvironmentTest, self).setUp()
- self.m = mox.Mox()
-
- self.addCleanup(self.m.VerifyAll)
- self.addCleanup(self.m.UnsetStubs)
-
def collect_links(self, env, content, url, env_base_url=''):
-
jenv = yaml.safe_load(env)
files = {}
if url:
- self.m.StubOutWithMock(request, 'urlopen')
- request.urlopen(url).AndReturn(six.BytesIO(content))
- request.urlopen(url).AndReturn(six.BytesIO(content))
- self.m.ReplayAll()
-
- template_utils.resolve_environment_urls(
- jenv.get('resource_registry'), files, env_base_url)
- if url:
- self.assertEqual(content.decode('utf-8'), files[url])
+ def side_effect(args):
+ if url == args:
+ return six.BytesIO(content)
+ with mock.patch('six.moves.urllib.request.urlopen') as mock_url:
+ mock_url.side_effect = side_effect
+ template_utils.resolve_environment_urls(
+ jenv.get('resource_registry'), files, env_base_url)
+ self.assertEqual(content.decode('utf-8'), files[url])
+ else:
+ template_utils.resolve_environment_urls(
+ jenv.get('resource_registry'), files, env_base_url)
- def test_ignore_env_keys(self):
- self.m.StubOutWithMock(request, 'urlopen')
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_ignore_env_keys(self, mock_url):
env_file = '/home/my/dir/env.yaml'
env = b'''
resource_registry:
@@ -64,9 +57,7 @@ class ShellEnvironmentTest(testtools.TestCase):
hooks: pre_create
restricted_actions: replace
'''
- request.urlopen('file://%s' % env_file).AndReturn(
- six.BytesIO(env))
- self.m.ReplayAll()
+ mock_url.return_value = six.BytesIO(env)
_, env_dict = template_utils.process_environment_and_files(
env_file)
self.assertEqual(
@@ -74,24 +65,18 @@ class ShellEnvironmentTest(testtools.TestCase):
u'bar': {u'hooks': u'pre_create',
u'restricted_actions': u'replace'}}}},
env_dict)
- self.m.VerifyAll()
+ mock_url.assert_called_with('file://%s' % env_file)
- def test_process_environment_file(self):
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_environment_file(self, mock_url):
- self.m.StubOutWithMock(request, 'urlopen')
env_file = '/home/my/dir/env.yaml'
env = b'''
resource_registry:
"OS::Thingy": "file:///home/b/a.yaml"
'''
-
- request.urlopen('file://%s' % env_file).AndReturn(
- six.BytesIO(env))
- request.urlopen('file:///home/b/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(env), six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a)]
files, env_dict = template_utils.process_environment_and_files(
env_file)
@@ -101,10 +86,15 @@ class ShellEnvironmentTest(testtools.TestCase):
env_dict)
self.assertEqual(self.template_a.decode('utf-8'),
files['file:///home/b/a.yaml'])
+ mock_url.assert_has_calls([
+ mock.call('file://%s' % env_file),
+ mock.call('file:///home/b/a.yaml'),
+ mock.call('file:///home/b/a.yaml')
+ ])
- def test_process_environment_relative_file(self):
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_environment_relative_file(self, mock_url):
- self.m.StubOutWithMock(request, 'urlopen')
env_file = '/home/my/dir/env.yaml'
env_url = 'file:///home/my/dir/env.yaml'
env = b'''
@@ -112,13 +102,8 @@ class ShellEnvironmentTest(testtools.TestCase):
"OS::Thingy": a.yaml
'''
- request.urlopen(env_url).AndReturn(
- six.BytesIO(env))
- request.urlopen('file:///home/my/dir/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/my/dir/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(env), six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a)]
self.assertEqual(
env_url,
@@ -136,24 +121,23 @@ class ShellEnvironmentTest(testtools.TestCase):
env_dict)
self.assertEqual(self.template_a.decode('utf-8'),
files['file:///home/my/dir/a.yaml'])
+ mock_url.assert_has_calls([
+ mock.call(env_url),
+ mock.call('file:///home/my/dir/a.yaml'),
+ mock.call('file:///home/my/dir/a.yaml')
+ ])
- def test_process_environment_relative_file_up(self):
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_environment_relative_file_up(self, mock_url):
- self.m.StubOutWithMock(request, 'urlopen')
env_file = '/home/my/dir/env.yaml'
env_url = 'file:///home/my/dir/env.yaml'
env = b'''
resource_registry:
"OS::Thingy": ../bar/a.yaml
'''
-
- request.urlopen(env_url).AndReturn(
- six.BytesIO(env))
- request.urlopen('file:///home/my/bar/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/my/bar/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(env), six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a)]
env_url = 'file://%s' % env_file
self.assertEqual(
@@ -172,20 +156,22 @@ class ShellEnvironmentTest(testtools.TestCase):
env_dict)
self.assertEqual(self.template_a.decode('utf-8'),
files['file:///home/my/bar/a.yaml'])
-
- def test_process_environment_url(self):
+ mock_url.assert_has_calls([
+ mock.call(env_url),
+ mock.call('file:///home/my/bar/a.yaml'),
+ mock.call('file:///home/my/bar/a.yaml')
+ ])
+
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_environment_url(self, mock_url):
env = b'''
resource_registry:
"OS::Thingy": "a.yaml"
'''
url = 'http://no.where/some/path/to/file.yaml'
tmpl_url = 'http://no.where/some/path/to/a.yaml'
-
- self.m.StubOutWithMock(request, 'urlopen')
- request.urlopen(url).AndReturn(six.BytesIO(env))
- request.urlopen(tmpl_url).AndReturn(six.BytesIO(self.template_a))
- request.urlopen(tmpl_url).AndReturn(six.BytesIO(self.template_a))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(env), six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a)]
files, env_dict = template_utils.process_environment_and_files(
url)
@@ -193,30 +179,34 @@ class ShellEnvironmentTest(testtools.TestCase):
self.assertEqual({'resource_registry': {'OS::Thingy': tmpl_url}},
env_dict)
self.assertEqual(self.template_a.decode('utf-8'), files[tmpl_url])
+ mock_url.assert_has_calls([
+ mock.call(url),
+ mock.call(tmpl_url),
+ mock.call(tmpl_url)
+ ])
- def test_process_environment_empty_file(self):
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_environment_empty_file(self, mock_url):
- self.m.StubOutWithMock(request, 'urlopen')
env_file = '/home/my/dir/env.yaml'
env = b''
-
- request.urlopen('file://%s' % env_file).AndReturn(six.BytesIO(env))
- self.m.ReplayAll()
+ mock_url.return_value = six.BytesIO(env)
files, env_dict = template_utils.process_environment_and_files(
env_file)
self.assertEqual({}, env_dict)
self.assertEqual({}, files)
+ mock_url.assert_called_with('file://%s' % env_file)
def test_no_process_environment_and_files(self):
files, env = template_utils.process_environment_and_files()
self.assertEqual({}, env)
self.assertEqual({}, files)
- def test_process_multiple_environments_and_files(self):
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_multiple_environments_and_files(self, mock_url):
- self.m.StubOutWithMock(request, 'urlopen')
env_file1 = '/home/my/dir/env1.yaml'
env_file2 = '/home/my/dir/env2.yaml'
@@ -233,19 +223,12 @@ class ShellEnvironmentTest(testtools.TestCase):
"OS::Thingy2": "file:///home/b/b.yaml"
'''
- request.urlopen('file://%s' % env_file1).AndReturn(
- six.BytesIO(env1))
- request.urlopen('file:///home/b/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file://%s' % env_file2).AndReturn(
- six.BytesIO(env2))
- request.urlopen('file:///home/b/b.yaml').AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/b.yaml').AndReturn(
- six.BytesIO(self.template_a))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(env1),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a),
+ six.BytesIO(env2),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a)]
files, env = template_utils.process_multiple_environments_and_files(
[env_file1, env_file2])
@@ -263,10 +246,18 @@ class ShellEnvironmentTest(testtools.TestCase):
files['file:///home/b/a.yaml'])
self.assertEqual(self.template_a.decode('utf-8'),
files['file:///home/b/b.yaml'])
+ mock_url.assert_has_calls([
+ mock.call('file://%s' % env_file1),
+ mock.call('file:///home/b/a.yaml'),
+ mock.call('file:///home/b/a.yaml'),
+ mock.call('file://%s' % env_file2),
+ mock.call('file:///home/b/b.yaml'),
+ mock.call('file:///home/b/b.yaml')
+ ])
+
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_multiple_environments_default_resources(self, mock_url):
- def test_process_multiple_environments_default_resources(self):
-
- self.m.StubOutWithMock(request, 'urlopen')
env_file1 = '/home/my/dir/env1.yaml'
env_file2 = '/home/my/dir/env2.yaml'
@@ -286,28 +277,16 @@ class ShellEnvironmentTest(testtools.TestCase):
resource2:
"OS::Thingy4": "file:///home/b/b.yaml"
'''
-
- request.urlopen('file://%s' % env_file1).InAnyOrder().AndReturn(
- six.BytesIO(env1))
- request.urlopen('file:///home/b/a.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/b.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/a.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/b.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file://%s' % env_file2).InAnyOrder().AndReturn(
- six.BytesIO(env2))
- request.urlopen('file:///home/b/a.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/b.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/a.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/b.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.template_a))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(env1),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a),
+ six.BytesIO(env2),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a)]
files, env = template_utils.process_multiple_environments_and_files(
[env_file1, env_file2])
@@ -331,6 +310,19 @@ class ShellEnvironmentTest(testtools.TestCase):
files['file:///home/b/a.yaml'])
self.assertEqual(self.template_a.decode('utf-8'),
files['file:///home/b/b.yaml'])
+ mock_url.assert_has_calls([
+ mock.call('file://%s' % env_file1),
+ mock.call('file:///home/b/a.yaml'),
+ mock.call('file:///home/b/b.yaml'),
+ mock.call('file:///home/b/a.yaml'),
+ mock.call('file:///home/b/b.yaml'),
+ mock.call('file://%s' % env_file2),
+ mock.call('file:///home/b/a.yaml'),
+ mock.call('file:///home/b/b.yaml'),
+ mock.call('file:///home/b/a.yaml'),
+ mock.call('file:///home/b/b.yaml'),
+
+ ], any_order=True)
def test_no_process_multiple_environments_and_files(self):
files, env = template_utils.process_multiple_environments_and_files()
@@ -347,8 +339,6 @@ class ShellEnvironmentTest(testtools.TestCase):
"OS::Thingy1": "b/a.yaml"
'''
- self.m.ReplayAll()
-
self.object_requested = False
def env_path_is_object(object_url):
@@ -376,9 +366,9 @@ class ShellEnvironmentTest(testtools.TestCase):
self.assertEqual(self.template_a.decode('utf-8'),
files['http://no.where/path/to/b/a.yaml'])
- def test_process_multiple_environments_and_files_tracker(self):
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_multiple_environments_and_files_tracker(self, mock_url):
# Setup
- self.m.StubOutWithMock(request, 'urlopen')
env_file1 = '/home/my/dir/env1.yaml'
env1 = b'''
@@ -387,13 +377,9 @@ class ShellEnvironmentTest(testtools.TestCase):
resource_registry:
"OS::Thingy1": "file:///home/b/a.yaml"
'''
- request.urlopen('file://%s' % env_file1).AndReturn(
- six.BytesIO(env1))
- request.urlopen('file:///home/b/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/b/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(env1),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a)]
# Test
env_file_list = []
@@ -414,24 +400,25 @@ class ShellEnvironmentTest(testtools.TestCase):
self.assertIn('file:///home/my/dir/env1.yaml', files)
self.assertEqual(expected_env,
json.loads(files['file:///home/my/dir/env1.yaml']))
+ mock_url.assert_has_calls([
+ mock.call('file://%s' % env_file1),
+ mock.call('file:///home/b/a.yaml'),
+ mock.call('file:///home/b/a.yaml'),
- def test_process_environment_relative_file_tracker(self):
+ ])
+
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_process_environment_relative_file_tracker(self, mock_url):
- self.m.StubOutWithMock(request, 'urlopen')
env_file = '/home/my/dir/env.yaml'
env_url = 'file:///home/my/dir/env.yaml'
env = b'''
resource_registry:
"OS::Thingy": a.yaml
'''
-
- request.urlopen(env_url).AndReturn(
- six.BytesIO(env))
- request.urlopen('file:///home/my/dir/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- request.urlopen('file:///home/my/dir/a.yaml').AndReturn(
- six.BytesIO(self.template_a))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(env),
+ six.BytesIO(self.template_a),
+ six.BytesIO(self.template_a)]
self.assertEqual(
env_url,
@@ -454,6 +441,12 @@ class ShellEnvironmentTest(testtools.TestCase):
self.assertEqual(['file:///home/my/dir/env.yaml'], env_file_list)
self.assertEqual(json.dumps(expected_env),
files['file:///home/my/dir/env.yaml'])
+ mock_url.assert_has_calls([
+ mock.call(env_url),
+ mock.call('file:///home/my/dir/a.yaml'),
+ mock.call('file:///home/my/dir/a.yaml'),
+
+ ])
def test_global_files(self):
url = 'file:///home/b/a.yaml'
@@ -538,13 +531,6 @@ class ShellEnvironmentTest(testtools.TestCase):
class TestGetTemplateContents(testtools.TestCase):
- def setUp(self):
- super(TestGetTemplateContents, self).setUp()
- self.m = mox.Mox()
-
- self.addCleanup(self.m.VerifyAll)
- self.addCleanup(self.m.UnsetStubs)
-
def test_get_template_contents_file(self):
with tempfile.NamedTemporaryFile() as tmpl_file:
tmpl = (b'{"AWSTemplateFormatVersion" : "2010-09-09",'
@@ -611,23 +597,22 @@ class TestGetTemplateContents(testtools.TestCase):
matchers.MatchesRegex(
'Error parsing template file://%s ' % tmpl_file.name))
- def test_get_template_contents_url(self):
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_get_template_contents_url(self, mock_url):
tmpl = b'{"AWSTemplateFormatVersion" : "2010-09-09", "foo": "bar"}'
url = 'http://no.where/path/to/a.yaml'
- self.m.StubOutWithMock(request, 'urlopen')
- request.urlopen(url).AndReturn(six.BytesIO(tmpl))
- self.m.ReplayAll()
+ mock_url.return_value = six.BytesIO(tmpl)
files, tmpl_parsed = template_utils.get_template_contents(
template_url=url)
self.assertEqual({"AWSTemplateFormatVersion": "2010-09-09",
"foo": "bar"}, tmpl_parsed)
self.assertEqual({}, files)
+ mock_url.assert_called_with(url)
def test_get_template_contents_object(self):
tmpl = '{"AWSTemplateFormatVersion" : "2010-09-09", "foo": "bar"}'
url = 'http://no.where/path/to/a.yaml'
- self.m.ReplayAll()
self.object_requested = False
@@ -652,7 +637,6 @@ class TestGetTemplateContents(testtools.TestCase):
'"FooBar": {'
'"type": "foo/bar.yaml"}}}')
url = 'http://no.where/path/to/a.yaml'
- self.m.ReplayAll()
self.object_requested = False
@@ -685,15 +669,15 @@ class TestGetTemplateContents(testtools.TestCase):
[{'path': '/tmp/%s' % filename,
'content': {'get_file': url},
'encoding': 'b64'}]}}}}}
- self.m.StubOutWithMock(request, 'urlopen')
- raw_content = base64.decodestring(content)
- response = six.BytesIO(raw_content)
- request.urlopen(url).AndReturn(response)
- self.m.ReplayAll()
- files = {}
- template_utils.resolve_template_get_files(
- template, files, base_url)
- self.assertEqual({url: content}, files)
+ with mock.patch('six.moves.urllib.request.urlopen') as mock_url:
+ raw_content = base64.decodestring(content)
+ response = six.BytesIO(raw_content)
+ mock_url.return_value = response
+ files = {}
+ template_utils.resolve_template_get_files(
+ template, files, base_url)
+ self.assertEqual({url: content}, files)
+ mock_url.assert_called_with(url)
def test_get_zip_content(self):
filename = 'heat.zip'
@@ -746,6 +730,7 @@ ABOkDAABQSwUGAAAAAAEAAQBOAAAARwAAAAAA\n'''
self.check_non_utf8_content(filename=filename, content=content)
+@mock.patch('six.moves.urllib.request.urlopen')
class TestTemplateGetFileFunctions(testtools.TestCase):
hot_template = b'''heat_template_version: 2013-05-23
@@ -769,49 +754,21 @@ resources:
ignored_none: {get_file: }
'''
- def setUp(self):
- super(TestTemplateGetFileFunctions, self).setUp()
- self.m = mox.Mox()
-
- self.addCleanup(self.m.VerifyAll)
- self.addCleanup(self.m.UnsetStubs)
-
- def test_hot_template(self):
- self.m.StubOutWithMock(request, 'urlopen')
+ def test_hot_template(self, mock_url):
tmpl_file = '/home/my/dir/template.yaml'
url = 'file:///home/my/dir/template.yaml'
- request.urlopen(url).AndReturn(
- six.BytesIO(self.hot_template))
- request.urlopen(
- 'http://localhost/bar.yaml').InAnyOrder().AndReturn(
- six.BytesIO(b'bar contents'))
- request.urlopen(
- 'file:///home/my/dir/foo.yaml').InAnyOrder().AndReturn(
- six.BytesIO(b'foo contents'))
- request.urlopen(
- 'file:///home/my/dir/baz/baz1.yaml').InAnyOrder().AndReturn(
- six.BytesIO(b'baz1 contents'))
- request.urlopen(
- 'file:///home/my/dir/baz/baz2.yaml').InAnyOrder().AndReturn(
- six.BytesIO(b'baz2 contents'))
- request.urlopen(
- 'file:///home/my/dir/baz/baz3.yaml').InAnyOrder().AndReturn(
- six.BytesIO(b'baz3 contents'))
-
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(self.hot_template),
+ six.BytesIO(b'bar contents'),
+ six.BytesIO(b'foo contents'),
+ six.BytesIO(b'baz1 contents'),
+ six.BytesIO(b'baz2 contents'),
+ six.BytesIO(b'baz3 contents')]
files, tmpl_parsed = template_utils.get_template_contents(
template_file=tmpl_file)
self.assertEqual({
- 'http://localhost/bar.yaml': b'bar contents',
- 'file:///home/my/dir/foo.yaml': b'foo contents',
- 'file:///home/my/dir/baz/baz1.yaml': b'baz1 contents',
- 'file:///home/my/dir/baz/baz2.yaml': b'baz2 contents',
- 'file:///home/my/dir/baz/baz3.yaml': b'baz3 contents',
- }, files)
- self.assertEqual({
'heat_template_version': '2013-05-23',
'resources': {
'resource1': {
@@ -836,9 +793,16 @@ resources:
}
}
}, tmpl_parsed)
-
- def test_hot_template_outputs(self):
- self.m.StubOutWithMock(request, 'urlopen')
+ mock_url.assert_has_calls([
+ mock.call(url),
+ mock.call('http://localhost/bar.yaml'),
+ mock.call('file:///home/my/dir/foo.yaml'),
+ mock.call('file:///home/my/dir/baz/baz1.yaml'),
+ mock.call('file:///home/my/dir/baz/baz2.yaml'),
+ mock.call('file:///home/my/dir/baz/baz3.yaml')
+ ], any_order=True)
+
+ def test_hot_template_outputs(self, mock_url):
tmpl_file = '/home/my/dir/template.yaml'
url = 'file://%s' % tmpl_file
foo_url = 'file:///home/my/dir/foo.yaml'
@@ -848,15 +812,17 @@ outputs:\n\
contents:\n\
value:\n\
get_file: foo.yaml\n'''
- request.urlopen(url).AndReturn(six.BytesIO(contents))
- request.urlopen(foo_url).AndReturn(six.BytesIO(b'foo contents'))
- self.m.ReplayAll()
+ mock_url.side_effect = [six.BytesIO(contents),
+ six.BytesIO(b'foo contents')]
files = template_utils.get_template_contents(
template_file=tmpl_file)[0]
self.assertEqual({foo_url: b'foo contents'}, files)
+ mock_url.assert_has_calls([
+ mock.call(url),
+ mock.call(foo_url)
+ ])
- def test_hot_template_same_file(self):
- self.m.StubOutWithMock(request, 'urlopen')
+ def test_hot_template_same_file(self, mock_url):
tmpl_file = '/home/my/dir/template.yaml'
url = 'file://%s' % tmpl_file
foo_url = 'file:///home/my/dir/foo.yaml'
@@ -869,14 +835,17 @@ outputs:\n\
template:\n\
value:\n\
get_file: foo.yaml\n'''
- request.urlopen(url).AndReturn(six.BytesIO(contents))
+ mock_url.side_effect = [six.BytesIO(contents),
+ six.BytesIO(b'foo contents')]
# asserts that is fetched only once even though it is
# referenced in the template twice
- request.urlopen(foo_url).AndReturn(six.BytesIO(b'foo contents'))
- self.m.ReplayAll()
files = template_utils.get_template_contents(
template_file=tmpl_file)[0]
self.assertEqual({foo_url: b'foo contents'}, files)
+ mock_url.assert_has_calls([
+ mock.call(url),
+ mock.call(foo_url)
+ ])
class TestTemplateTypeFunctions(testtools.TestCase):
@@ -909,38 +878,26 @@ parameters:
type: string
'''
- def setUp(self):
- super(TestTemplateTypeFunctions, self).setUp()
- self.m = mox.Mox()
-
- self.addCleanup(self.m.VerifyAll)
- self.addCleanup(self.m.UnsetStubs)
-
- def test_hot_template(self):
- self.m.StubOutWithMock(request, 'urlopen')
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_hot_template(self, mock_url):
tmpl_file = '/home/my/dir/template.yaml'
url = 'file:///home/my/dir/template.yaml'
- request.urlopen(
- 'file:///home/my/dir/foo.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(
- 'file:///home/my/dir/foo.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(url).InAnyOrder().AndReturn(
- six.BytesIO(self.hot_template))
- request.urlopen(
- 'file:///home/my/dir/spam/egg.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.egg_template))
- request.urlopen(
- 'file:///home/my/dir/spam/egg.yaml').InAnyOrder().AndReturn(
- six.BytesIO(self.egg_template))
- self.m.ReplayAll()
+
+ def side_effect(args):
+ if url == args:
+ return six.BytesIO(self.hot_template)
+ if 'file:///home/my/dir/foo.yaml' == args:
+ return six.BytesIO(self.foo_template)
+ if 'file:///home/my/dir/spam/egg.yaml' == args:
+ return six.BytesIO(self.egg_template)
+ mock_url.side_effect = side_effect
files, tmpl_parsed = template_utils.get_template_contents(
template_file=tmpl_file)
self.assertEqual(yaml.safe_load(self.foo_template.decode('utf-8')),
json.loads(files.get('file:///home/my/dir/foo.yaml')))
+
self.assertEqual(
yaml.safe_load(self.egg_template.decode('utf-8')),
json.loads(files.get('file:///home/my/dir/spam/egg.yaml')))
@@ -968,6 +925,12 @@ parameters:
}
}, tmpl_parsed)
+ mock_url.assert_has_calls([
+ mock.call('file:///home/my/dir/foo.yaml'),
+ mock.call(url),
+ mock.call('file:///home/my/dir/spam/egg.yaml'),
+ ], any_order=True)
+
class TestTemplateInFileFunctions(testtools.TestCase):
@@ -993,30 +956,21 @@ parameters:
type: string
'''
- def setUp(self):
- super(TestTemplateInFileFunctions, self).setUp()
- self.m = mox.Mox()
-
- self.addCleanup(self.m.VerifyAll)
- self.addCleanup(self.m.UnsetStubs)
-
- def test_hot_template(self):
- self.m.StubOutWithMock(request, 'urlopen')
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_hot_template(self, mock_url):
tmpl_file = '/home/my/dir/template.yaml'
url = 'file:///home/my/dir/template.yaml'
foo_url = 'file:///home/my/dir/foo.yaml'
bar_url = 'file:///home/my/dir/bar.yaml'
- request.urlopen(url).InAnyOrder().AndReturn(
- six.BytesIO(self.hot_template))
- request.urlopen(foo_url).InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(foo_url).InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(bar_url).InAnyOrder().AndReturn(
- six.BytesIO(self.bar_template))
- request.urlopen(bar_url).InAnyOrder().AndReturn(
- six.BytesIO(self.bar_template))
- self.m.ReplayAll()
+
+ def side_effect(args):
+ if url == args:
+ return six.BytesIO(self.hot_template)
+ if foo_url == args:
+ return six.BytesIO(self.foo_template)
+ if bar_url == args:
+ return six.BytesIO(self.bar_template)
+ mock_url.side_effect = side_effect
files, tmpl_parsed = template_utils.get_template_contents(
template_file=tmpl_file)
@@ -1052,6 +1006,12 @@ parameters:
}
}, tmpl_parsed)
+ mock_url.assert_has_calls([
+ mock.call(foo_url),
+ mock.call(url),
+ mock.call(bar_url),
+ ], any_order=True)
+
class TestNestedIncludes(testtools.TestCase):
@@ -1095,15 +1055,8 @@ parameters:
type: string
'''
- def setUp(self):
- super(TestNestedIncludes, self).setUp()
- self.m = mox.Mox()
-
- self.addCleanup(self.m.VerifyAll)
- self.addCleanup(self.m.UnsetStubs)
-
- def test_env_nested_includes(self):
- self.m.StubOutWithMock(request, 'urlopen')
+ @mock.patch('six.moves.urllib.request.urlopen')
+ def test_env_nested_includes(self, mock_url):
env_file = '/home/my/dir/env.yaml'
env_url = 'file:///home/my/dir/env.yaml'
env = b'''
@@ -1118,35 +1071,24 @@ parameters:
two_url = u'file:///home/my/dir/spam/two.yaml'
three_url = u'file:///home/my/dir/spam/three.yaml'
- request.urlopen(env_url).AndReturn(
- six.BytesIO(env))
- request.urlopen(template_url).AndReturn(
- six.BytesIO(self.hot_template))
- request.urlopen(template_url).AndReturn(
- six.BytesIO(self.hot_template))
-
- request.urlopen(foo_url).InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(egg_url).InAnyOrder().AndReturn(
- six.BytesIO(self.egg_template))
- request.urlopen(ham_url).InAnyOrder().AndReturn(
- six.BytesIO(b'ham contents'))
- request.urlopen(one_url).InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(two_url).InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(three_url).InAnyOrder().AndReturn(
- six.BytesIO(b'three contents'))
- request.urlopen(foo_url).InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(egg_url).InAnyOrder().AndReturn(
- six.BytesIO(self.egg_template))
- request.urlopen(one_url).InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
- request.urlopen(two_url).InAnyOrder().AndReturn(
- six.BytesIO(self.foo_template))
-
- self.m.ReplayAll()
+ def side_effect(args):
+ if env_url == args:
+ return six.BytesIO(env)
+ if template_url == args:
+ return six.BytesIO(self.hot_template)
+ if foo_url == args:
+ return six.BytesIO(self.foo_template)
+ if egg_url == args:
+ return six.BytesIO(self.egg_template)
+ if ham_url == args:
+ return six.BytesIO(b'ham contents')
+ if one_url == args:
+ return six.BytesIO(self.foo_template)
+ if two_url == args:
+ return six.BytesIO(self.foo_template)
+ if three_url == args:
+ return six.BytesIO(b'three contents')
+ mock_url.side_effect = side_effect
files, env_dict = template_utils.process_environment_and_files(
env_file)
@@ -1201,3 +1143,13 @@ parameters:
json.loads(files.get(two_url)))
self.assertEqual(b'three contents',
files.get(three_url))
+ mock_url.assert_has_calls([
+ mock.call(env_url),
+ mock.call(template_url),
+ mock.call(foo_url),
+ mock.call(egg_url),
+ mock.call(ham_url),
+ mock.call(one_url),
+ mock.call(two_url),
+ mock.call(three_url),
+ ], any_order=True)