1
"""Tests for assess_min_version module."""
15
from assess_min_version import (
30
from utility import temp_dir
33
class TestParseArgs(TestCase):
35
def test_parse_args(self):
36
args = parse_args(["an-env", "/bin/juju", "/tmp/logs", "an-env-mod"])
37
self.assertEqual("an-env", args.env)
38
self.assertEqual("/bin/juju", args.juju_bin)
39
self.assertEqual("/tmp/logs", args.logs)
40
self.assertEqual("an-env-mod", args.temp_env_name)
41
self.assertEqual(False, args.debug)
44
fake_stdout = StringIO.StringIO()
45
with parse_error(self) as fake_stderr:
46
with patch("sys.stdout", fake_stdout):
47
parse_args(["--help"])
48
self.assertEqual("", fake_stderr.getvalue())
51
class TestMain(TestCase):
54
argv = ["an-env", "/bin/juju", "/tmp/logs", "an-env-mod", "--verbose"]
56
client = Mock(spec=["is_jes_enabled"])
57
with patch("assess_min_version.configure_logging",
58
autospec=True) as mock_cl:
59
with patch("assess_min_version.BootstrapManager.booted_context",
60
autospec=True) as mock_bc:
61
with patch("jujupy.SimpleEnvironment.from_config",
62
return_value=env) as mock_e:
63
with patch("jujupy.EnvJujuClient.by_version",
64
return_value=client) as mock_c:
65
with patch("assess_min_version.assess_min_version",
66
autospec=True) as mock_assess:
68
mock_cl.assert_called_once_with(logging.DEBUG)
69
mock_e.assert_called_once_with("an-env")
70
mock_c.assert_called_once_with(env, "/bin/juju", debug=False)
71
self.assertEqual(mock_bc.call_count, 1)
72
mock_assess.assert_called_once_with(client, parse_args(argv))
75
class TestAssess(TestCase):
77
def test_assert_fail(self):
78
mock_client = Mock(spec=["deploy"])
79
mock_client.deploy.side_effect = subprocess.CalledProcessError('', '')
80
assert_fail(mock_client, "dummpy", "2.0", "2.0", "name")
82
def test_assert_fail_exception(self):
83
mock_client = Mock(spec=["deploy"])
84
with self.assertRaisesRegexp(
85
JujuAssertionError, 'assert_fail failed min: 2.0 cur: 2.0'):
86
assert_fail(mock_client, "dummpy", "2.0", "2.0", "name")
88
def test_assert_pass(self):
89
mock_client = Mock(spec=["deploy", "wait_for_started"])
90
assert_pass(mock_client, "dummpy", "2.0", "2.0", "name")
92
def test_assert_pass_exception(self):
93
mock_client = Mock(spec=["deploy", "wait_for_started"])
94
mock_client.deploy.side_effect = subprocess.CalledProcessError('', '')
95
with self.assertRaisesRegexp(
96
JujuAssertionError, 'assert_pass failed min: 2.0 cur: 2.0'):
97
assert_pass(mock_client, "dummpy", "2.0", "2.0", "name")
99
def test_make_charm(self):
100
with temp_dir() as charm_dir:
101
make_charm(charm_dir, "2.0", name="foo")
102
metadata = os.path.join(charm_dir, 'metadata.yaml')
103
with open(metadata, 'r') as f:
104
content = yaml.load(f)
105
self.assertEqual(content['name'], 'foo')
106
self.assertEqual(content['min-juju-version'], '2.0')
107
self.assertEqual(content['summary'], 'summary')
109
def test_get_current_version(self):
110
mock_client = Mock(spec=["get_version"])
111
mock_client.get_version.return_value = '2.0-beta4-trusty-amd64'
112
ver = get_current_version(mock_client, '/tmp/bin')
113
self.assertEqual(ver, '2.0-beta4')
115
mock_client.get_version.return_value = '1.25.4-trusty-amd64'
116
ver = get_current_version(mock_client, '/tmp/bin')
117
self.assertEqual(ver, '1.25.4')
119
def test_assess_deploy(self):
120
mock_client = Mock(spec=["deploy", "wait_for_started"])
121
mock_assertion = Mock(spec=[])
122
with patch("assess_min_version.temp_dir", autospec=True) as mock_td:
123
with patch("assess_min_version.make_charm",
124
autospec=True) as mock_mc:
126
mock_client, mock_assertion, "2.1", "2.0", "dummy")
127
temp_dir = mock_td.return_value.__enter__.return_value
128
mock_assertion.assert_called_once_with(
129
mock_client, temp_dir, "2.1", "2.0", "dummy")
130
mock_mc.assert_called_once_with(temp_dir, "2.1")
132
def test_assess_min_version(self):
133
argv = ["an-env", "/bin/juju", "/tmp/logs", "an-env-mod", "--verbose"]
134
args = parse_args(argv)
135
mock_client = Mock(spec=["juju", "wait_for_started"])
136
with patch("assess_min_version.get_current_version",
137
autospec=True, return_value="2.0.0") as mock_gcv:
138
with patch("assess_min_version.assess_deploy",
139
autospec=True) as mock_ad:
140
assess_min_version(mock_client, args)
141
mock_gcv.assert_called_once_with(mock_client, '/bin/juju')
143
call(mock_client, assert_pass, '1.25.0', '2.0.0', 'name1250'),
144
call(mock_client, assert_fail, '99.9.9', '2.0.0', 'name9999'),
145
call(mock_client, assert_fail, '99.9-alpha1', '2.0.0',
147
call(mock_client, assert_pass, '1.2-beta1', '2.0.0',
149
call(mock_client, assert_pass, '1.25.5.1', '2.0.0', 'name12551'),
150
call(mock_client, assert_pass, '2.0-alpha1', '2.0.0',
152
call(mock_client, assert_pass, '2.0.0', '2.0.0', 'current')]
153
self.assertEqual(mock_ad.mock_calls, ad_calls)