~smoser/ubuntu/quantal/cloud-init/sru

« back to all changes in this revision

Viewing changes to .pc/lp-1077020-fix-ca-certificates-blanklines.patch/tests/unittests/test_handler/test_handler_ca_certs.py

  • Committer: Scott Moser
  • Date: 2012-12-02 02:59:06 UTC
  • Revision ID: smoser@brickies.net-20121202025906-ihcksoj3i2fgg5za
debian/patches/lp-1077020-fix-ca-certificates-blanklines.patch: fix
adding of empty lines in ca-certificates file (LP: #1077020)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from mocker import MockerTestCase
 
2
 
 
3
from cloudinit import cloud
 
4
from cloudinit import helpers
 
5
from cloudinit import util
 
6
 
 
7
from cloudinit.config import cc_ca_certs
 
8
 
 
9
import logging
 
10
 
 
11
 
 
12
class TestNoConfig(MockerTestCase):
 
13
    def setUp(self):
 
14
        super(TestNoConfig, self).setUp()
 
15
        self.name = "ca-certs"
 
16
        self.cloud_init = None
 
17
        self.log = logging.getLogger("TestNoConfig")
 
18
        self.args = []
 
19
 
 
20
    def test_no_config(self):
 
21
        """
 
22
        Test that nothing is done if no ca-certs configuration is provided.
 
23
        """
 
24
        config = util.get_builtin_cfg()
 
25
        self.mocker.replace(util.write_file, passthrough=False)
 
26
        self.mocker.replace(cc_ca_certs.update_ca_certs, passthrough=False)
 
27
        self.mocker.replay()
 
28
 
 
29
        cc_ca_certs.handle(self.name, config, self.cloud_init, self.log,
 
30
                           self.args)
 
31
 
 
32
 
 
33
class TestConfig(MockerTestCase):
 
34
    def setUp(self):
 
35
        super(TestConfig, self).setUp()
 
36
        self.name = "ca-certs"
 
37
        self.paths = None
 
38
        self.cloud = cloud.Cloud(None, self.paths, None, None, None)
 
39
        self.log = logging.getLogger("TestNoConfig")
 
40
        self.args = []
 
41
 
 
42
        # Mock out the functions that actually modify the system
 
43
        self.mock_add = self.mocker.replace(cc_ca_certs.add_ca_certs,
 
44
                                            passthrough=False)
 
45
        self.mock_update = self.mocker.replace(cc_ca_certs.update_ca_certs,
 
46
                                               passthrough=False)
 
47
        self.mock_remove = self.mocker.replace(
 
48
            cc_ca_certs.remove_default_ca_certs, passthrough=False)
 
49
 
 
50
        # Order must be correct
 
51
        self.mocker.order()
 
52
 
 
53
    def test_no_trusted_list(self):
 
54
        """
 
55
        Test that no certificates are written if the 'trusted' key is not
 
56
        present.
 
57
        """
 
58
        config = {"ca-certs": {}}
 
59
 
 
60
        # No functions should be called
 
61
        self.mock_update()
 
62
        self.mocker.replay()
 
63
 
 
64
        cc_ca_certs.handle(self.name, config, self.cloud, self.log, self.args)
 
65
 
 
66
    def test_empty_trusted_list(self):
 
67
        """Test that no certificate are written if 'trusted' list is empty."""
 
68
        config = {"ca-certs": {"trusted": []}}
 
69
 
 
70
        # No functions should be called
 
71
        self.mock_update()
 
72
        self.mocker.replay()
 
73
 
 
74
        cc_ca_certs.handle(self.name, config, self.cloud, self.log, self.args)
 
75
 
 
76
    def test_single_trusted(self):
 
77
        """Test that a single cert gets passed to add_ca_certs."""
 
78
        config = {"ca-certs": {"trusted": ["CERT1"]}}
 
79
 
 
80
        self.mock_add(self.paths, ["CERT1"])
 
81
        self.mock_update()
 
82
        self.mocker.replay()
 
83
 
 
84
        cc_ca_certs.handle(self.name, config, self.cloud, self.log, self.args)
 
85
 
 
86
    def test_multiple_trusted(self):
 
87
        """Test that multiple certs get passed to add_ca_certs."""
 
88
        config = {"ca-certs": {"trusted": ["CERT1", "CERT2"]}}
 
89
 
 
90
        self.mock_add(self.paths, ["CERT1", "CERT2"])
 
91
        self.mock_update()
 
92
        self.mocker.replay()
 
93
 
 
94
        cc_ca_certs.handle(self.name, config, self.cloud, self.log, self.args)
 
95
 
 
96
    def test_remove_default_ca_certs(self):
 
97
        """Test remove_defaults works as expected."""
 
98
        config = {"ca-certs": {"remove-defaults": True}}
 
99
 
 
100
        self.mock_remove(self.paths)
 
101
        self.mock_update()
 
102
        self.mocker.replay()
 
103
 
 
104
        cc_ca_certs.handle(self.name, config, self.cloud, self.log, self.args)
 
105
 
 
106
    def test_no_remove_defaults_if_false(self):
 
107
        """Test remove_defaults is not called when config value is False."""
 
108
        config = {"ca-certs": {"remove-defaults": False}}
 
109
 
 
110
        self.mock_update()
 
111
        self.mocker.replay()
 
112
 
 
113
        cc_ca_certs.handle(self.name, config, self.cloud, self.log, self.args)
 
114
 
 
115
    def test_correct_order_for_remove_then_add(self):
 
116
        """Test remove_defaults is not called when config value is False."""
 
117
        config = {"ca-certs": {"remove-defaults": True, "trusted": ["CERT1"]}}
 
118
 
 
119
        self.mock_remove(self.paths)
 
120
        self.mock_add(self.paths, ["CERT1"])
 
121
        self.mock_update()
 
122
        self.mocker.replay()
 
123
 
 
124
        cc_ca_certs.handle(self.name, config, self.cloud, self.log, self.args)
 
125
 
 
126
 
 
127
class TestAddCaCerts(MockerTestCase):
 
128
 
 
129
    def setUp(self):
 
130
        super(TestAddCaCerts, self).setUp()
 
131
        self.paths = helpers.Paths({
 
132
            'cloud_dir': self.makeDir()
 
133
        })
 
134
 
 
135
    def test_no_certs_in_list(self):
 
136
        """Test that no certificate are written if not provided."""
 
137
        self.mocker.replace(util.write_file, passthrough=False)
 
138
        self.mocker.replay()
 
139
        cc_ca_certs.add_ca_certs(self.paths, [])
 
140
 
 
141
    def test_single_cert(self):
 
142
        """Test adding a single certificate to the trusted CAs."""
 
143
        cert = "CERT1\nLINE2\nLINE3"
 
144
 
 
145
        mock_write = self.mocker.replace(util.write_file, passthrough=False)
 
146
        mock_write("/usr/share/ca-certificates/cloud-init-ca-certs.crt",
 
147
                   cert, mode=0644)
 
148
        mock_write("/etc/ca-certificates.conf",
 
149
                   "\ncloud-init-ca-certs.crt", omode="ab")
 
150
        self.mocker.replay()
 
151
 
 
152
        cc_ca_certs.add_ca_certs(self.paths, [cert])
 
153
 
 
154
    def test_multiple_certs(self):
 
155
        """Test adding multiple certificates to the trusted CAs."""
 
156
        certs = ["CERT1\nLINE2\nLINE3", "CERT2\nLINE2\nLINE3"]
 
157
        expected_cert_file = "\n".join(certs)
 
158
 
 
159
        mock_write = self.mocker.replace(util.write_file, passthrough=False)
 
160
        mock_write("/usr/share/ca-certificates/cloud-init-ca-certs.crt",
 
161
                   expected_cert_file, mode=0644)
 
162
        mock_write("/etc/ca-certificates.conf",
 
163
                   "\ncloud-init-ca-certs.crt", omode="ab")
 
164
        self.mocker.replay()
 
165
 
 
166
        cc_ca_certs.add_ca_certs(self.paths, certs)
 
167
 
 
168
 
 
169
class TestUpdateCaCerts(MockerTestCase):
 
170
    def test_commands(self):
 
171
        mock_check_call = self.mocker.replace(util.subp,
 
172
                                              passthrough=False)
 
173
        mock_check_call(["update-ca-certificates"], capture=False)
 
174
        self.mocker.replay()
 
175
 
 
176
        cc_ca_certs.update_ca_certs()
 
177
 
 
178
 
 
179
class TestRemoveDefaultCaCerts(MockerTestCase):
 
180
 
 
181
    def setUp(self):
 
182
        super(TestRemoveDefaultCaCerts, self).setUp()
 
183
        self.paths = helpers.Paths({
 
184
            'cloud_dir': self.makeDir()
 
185
        })
 
186
 
 
187
    def test_commands(self):
 
188
        mock_delete_dir_contents = self.mocker.replace(
 
189
            util.delete_dir_contents, passthrough=False)
 
190
        mock_write = self.mocker.replace(util.write_file, passthrough=False)
 
191
        mock_subp = self.mocker.replace(util.subp,
 
192
                                        passthrough=False)
 
193
 
 
194
        mock_delete_dir_contents("/usr/share/ca-certificates/")
 
195
        mock_delete_dir_contents("/etc/ssl/certs/")
 
196
        mock_write("/etc/ca-certificates.conf", "", mode=0644)
 
197
        mock_subp(('debconf-set-selections', '-'),
 
198
                  "ca-certificates ca-certificates/trust_new_crts select no")
 
199
        self.mocker.replay()
 
200
 
 
201
        cc_ca_certs.remove_default_ca_certs(self.paths)