~abentley/juju-ci-tools/client-from-config-4

« back to all changes in this revision

Viewing changes to tests/test_assess_block.py

  • Committer: Aaron Bentley
  • Date: 2016-02-09 17:37:54 UTC
  • mto: This revision was merged to the branch mainline in revision 1260.
  • Revision ID: aaron.bentley@canonical.com-20160209173754-a1qbialilhwp4lkm
Implement get_controller_member_status.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
"""Tests for assess_block module."""
2
 
 
3
 
import logging
4
 
import StringIO
5
 
 
6
 
from mock import Mock, patch, call
7
 
import yaml
8
 
 
9
 
from assess_block import (
10
 
    assess_block,
11
 
    make_block_list,
12
 
    main,
13
 
    parse_args,
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_block.configure_logging",
46
 
                   autospec=True) as mock_cl:
47
 
            with patch("assess_block.BootstrapManager.booted_context",
48
 
                       autospec=True) as mock_bc:
49
 
                with patch("deploy_stack.client_from_config",
50
 
                           return_value=client) as mock_c:
51
 
                    with patch("assess_block.assess_block",
52
 
                               autospec=True) as mock_assess:
53
 
                        main(argv)
54
 
        mock_cl.assert_called_once_with(logging.DEBUG)
55
 
        mock_c.assert_called_once_with('an-env', "/bin/juju", debug=False)
56
 
        self.assertEqual(mock_bc.call_count, 1)
57
 
        mock_assess.assert_called_once_with(client, 'trusty')
58
 
 
59
 
 
60
 
class TestAssess(TestCase):
61
 
 
62
 
    def test_block(self):
63
 
        mock_client = Mock(spec=[
64
 
            "juju", "wait_for_started", "get_juju_output",
65
 
            "remove_service", "env", "deploy", "expose",
66
 
            "destroy-model", "remove-machine", "get_status"])
67
 
        mock_client.destroy_model_command = 'destroy-model'
68
 
        mock_client.get_juju_output.side_effect = [
69
 
            yaml.dump(make_block_list(mock_client, False, False, False)),
70
 
            yaml.dump(make_block_list(mock_client, True, False, False)),
71
 
            yaml.dump(make_block_list(mock_client, False, False, False)),
72
 
            yaml.dump(make_block_list(mock_client, False, True, False)),
73
 
            yaml.dump(make_block_list(mock_client, False, False, False)),
74
 
            yaml.dump(make_block_list(mock_client, False, False, True)),
75
 
            yaml.dump(make_block_list(mock_client, False, False, False))
76
 
            ]
77
 
        mock_client.env.environment = 'foo'
78
 
        mock_client.version = '1.25'
79
 
        with patch('assess_block.deploy_dummy_stack', autospec=True):
80
 
            with patch('assess_block.wait_for_removed_services',
81
 
                       autospec=True):
82
 
                assess_block(mock_client, 'trusty')
83
 
        mock_client.wait_for_started.assert_called_with()
84
 
        self.assertEqual([call('block destroy-model', ()),
85
 
                          call('destroy-model',
86
 
                               ('-y', 'foo'), include_e=False),
87
 
                          call('unblock destroy-model', ()),
88
 
                          call('block remove-object', ()),
89
 
                          call('destroy-model',
90
 
                               ('-y', 'foo'), include_e=False),
91
 
                          call('remove-unit',
92
 
                               ('dummy-source/1',), include_e=True),
93
 
                          call('remove-relation',
94
 
                               ('dummy-source', 'dummy-sink'), include_e=True),
95
 
                          call('unblock remove-object', ()),
96
 
                          call('remove-relation',
97
 
                               ('dummy-source', 'dummy-sink')),
98
 
                          call('block all-changes', ()),
99
 
                          call('add-relation',
100
 
                               ('dummy-source', 'dummy-sink'), include_e=True),
101
 
                          call('unexpose',
102
 
                               ('dummy-sink',), include_e=True),
103
 
                          call('unblock all-changes', ()),
104
 
                          call('unexpose', ('dummy-sink',)),
105
 
                          call('block all-changes', ()),
106
 
                          call('expose', ('dummy-sink',), include_e=True),
107
 
                          call('unblock all-changes', ()),
108
 
                          call('block all-changes', ()),
109
 
                          call('destroy-model',
110
 
                               ('-y', 'foo'), include_e=False),
111
 
                          call('unblock all-changes', ())],
112
 
                         mock_client.juju.mock_calls)
113
 
        self.assertEqual([call('dummy-source'),
114
 
                          call('dummy-sink'),
115
 
                          call('dummy-source'),
116
 
                          call('dummy-sink'),
117
 
                          call('dummy-sink')],
118
 
                         mock_client.remove_service.mock_calls)