~andrewjbeach/juju-ci-tools/make-local-patcher

« back to all changes in this revision

Viewing changes to tests/test_assess_min_version.py

  • Committer: Curtis Hovey
  • Date: 2014-08-01 12:44:38 UTC
  • Revision ID: curtis@canonical.com-20140801124438-l48516pldkzh7g5n
Do not show all the files in the tarball because it distracts from the test output.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
"""Tests for assess_min_version module."""
2
 
 
3
 
import logging
4
 
from mock import (
5
 
    Mock,
6
 
    patch,
7
 
    call,
8
 
)
9
 
import os
10
 
import StringIO
11
 
import subprocess
12
 
 
13
 
import yaml
14
 
 
15
 
from assess_min_version import (
16
 
    assess_deploy,
17
 
    assert_fail,
18
 
    assess_min_version,
19
 
    assert_pass,
20
 
    get_current_version,
21
 
    JujuAssertionError,
22
 
    make_charm,
23
 
    main,
24
 
    parse_args,
25
 
)
26
 
from tests import (
27
 
    parse_error,
28
 
    TestCase,
29
 
)
30
 
from utility import temp_dir
31
 
 
32
 
 
33
 
class TestParseArgs(TestCase):
34
 
 
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)
42
 
 
43
 
    def test_help(self):
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())
49
 
 
50
 
 
51
 
class TestMain(TestCase):
52
 
 
53
 
    def test_main(self):
54
 
        argv = ["an-env", "/bin/juju", "/tmp/logs", "an-env-mod", "--verbose"]
55
 
        env = object()
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:
67
 
                            main(argv)
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))
73
 
 
74
 
 
75
 
class TestAssess(TestCase):
76
 
 
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")
81
 
 
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")
87
 
 
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")
91
 
 
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")
98
 
 
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')
108
 
 
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')
114
 
 
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')
118
 
 
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:
125
 
                assess_deploy(
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")
131
 
 
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')
142
 
        ad_calls = [
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',
146
 
                 'name999alpha1'),
147
 
            call(mock_client, assert_pass, '1.2-beta1', '2.0.0',
148
 
                 'name12beta1'),
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',
151
 
                 'name20alpha1'),
152
 
            call(mock_client, assert_pass, '2.0.0', '2.0.0', 'current')]
153
 
        self.assertEqual(mock_ad.mock_calls, ad_calls)