~nskaggs/juju-ci-tools/add-essential-operations

« back to all changes in this revision

Viewing changes to tests/test_assess_controller_permissions.py

Merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""Tests for assess_controller_permissions module."""
 
2
 
 
3
import logging
 
4
from mock import Mock, patch
 
5
import StringIO
 
6
 
 
7
from assess_controller_permissions import (
 
8
    assess_controller_permissions,
 
9
    parse_args,
 
10
    main,
 
11
)
 
12
from test_assess_user_grant_revoke import (
 
13
    make_fake_client,
 
14
)
 
15
from tests import (
 
16
    parse_error,
 
17
    TestCase,
 
18
)
 
19
 
 
20
 
 
21
class TestParseArgs(TestCase):
 
22
 
 
23
    def test_common_args(self):
 
24
        args = parse_args(["an-env", "/bin/juju", "/tmp/logs", "an-env-mod"])
 
25
        self.assertEqual("an-env", args.env)
 
26
        self.assertEqual("/bin/juju", args.juju_bin)
 
27
        self.assertEqual("/tmp/logs", args.logs)
 
28
        self.assertEqual("an-env-mod", args.temp_env_name)
 
29
        self.assertEqual(False, args.debug)
 
30
 
 
31
    def test_help(self):
 
32
        fake_stdout = StringIO.StringIO()
 
33
        with parse_error(self) as fake_stderr:
 
34
            with patch("sys.stdout", fake_stdout):
 
35
                parse_args(["--help"])
 
36
        self.assertEqual("", fake_stderr.getvalue())
 
37
        self.assertNotIn("TODO", fake_stdout.getvalue())
 
38
 
 
39
 
 
40
class TestMain(TestCase):
 
41
 
 
42
    def test_main(self):
 
43
        argv = ["an-env", "/bin/juju", "/tmp/logs", "an-env-mod", "--verbose"]
 
44
        client = Mock(spec=["is_jes_enabled"])
 
45
        with patch("assess_controller_permissions.configure_logging",
 
46
                   autospec=True) as mock_cl:
 
47
            with patch("assess_controller_permissions."
 
48
                       "BootstrapManager.booted_context",
 
49
                       autospec=True) as mock_bc:
 
50
                with patch('deploy_stack.client_from_config',
 
51
                           return_value=client) as mock_c:
 
52
                    with patch("assess_controller_permissions."
 
53
                               "assess_controller_permissions",
 
54
                               autospec=True) as mock_assess:
 
55
                        main(argv)
 
56
        mock_cl.assert_called_once_with(logging.DEBUG)
 
57
        mock_c.assert_called_once_with('an-env', "/bin/juju", debug=False)
 
58
        self.assertEqual(mock_bc.call_count, 1)
 
59
        mock_assess.assert_called_once_with(client)
 
60
 
 
61
 
 
62
class TestAssess(TestCase):
 
63
 
 
64
    def test_assess_controller_permissions(self):
 
65
        fake_client = make_fake_client()
 
66
        fake_client.bootstrap()
 
67
        assert_lc_calls = [True, True, True]
 
68
        assert_ac_calls = [False, True, True]
 
69
        assert_sc_calls = [False, False, True]
 
70
        lc = patch('assess_controller_permissions.assert_login_permission',
 
71
                   autospec=True)
 
72
        ac = patch('assess_controller_permissions.assert_addmodel_permission',
 
73
                   autospec=True)
 
74
        sc = patch('assess_controller_permissions.assert_superuser_permission',
 
75
                   autospec=True)
 
76
        with lc as lc_mock, ac as ac_mock, sc as sc_mock:
 
77
            with patch("jujupy.EnvJujuClient.expect",
 
78
                       autospec=True) as expect_mock:
 
79
                expect_mock.return_value.isalive.return_value = False
 
80
                assess_controller_permissions(fake_client)
 
81
                lc_calls = [
 
82
                    call[0][4] for call in
 
83
                    lc_mock.call_args_list]
 
84
                ac_calls = [
 
85
                    call[0][2] for call in
 
86
                    ac_mock.call_args_list]
 
87
                sc_calls = [
 
88
                    call[0][2] for call in
 
89
                    sc_mock.call_args_list]
 
90
                self.assertEqual(lc_calls,
 
91
                                 assert_lc_calls)
 
92
                self.assertEqual(ac_calls,
 
93
                                 assert_ac_calls)
 
94
                self.assertEqual(sc_calls,
 
95
                                 assert_sc_calls)