diff options
author | dermotbradley <dermot_bradley@yahoo.com> | 2020-07-15 21:24:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-15 16:24:43 -0400 |
commit | c0d239c7eadeae9c9e0b4e692b49e79c8ffcafd2 (patch) | |
tree | 4aa743d2d61dd0617747f90d4d684b72705fc240 /tests/unittests/test_handler | |
parent | 295f88052ba4cd452b55eb5fbd907f90aa6f9c52 (diff) | |
download | vyos-cloud-init-c0d239c7eadeae9c9e0b4e692b49e79c8ffcafd2.tar.gz vyos-cloud-init-c0d239c7eadeae9c9e0b4e692b49e79c8ffcafd2.zip |
cc_ca_certs.py: fix blank line problem when removing CAs and adding new one (#483)
Problem: When cc_ca_certs configuration has both "remove-defaults: true"
and also specifies one, or more, new trusted CAs to add then the resultant
/etc/ca-certificates.conf file's 1st line is blank. As noted in comments
in the existing cc_ca_certs.py code blank lines in this file cause problems.
Fix: Before adding the cloud-init CA filename to this file first check the
size of the file - if is is empty (as all existing CAs have been deleted)
then write only the cloud-init CA filename to the file rather than appending
it to the file.
Diffstat (limited to 'tests/unittests/test_handler')
-rw-r--r-- | tests/unittests/test_handler/test_handler_ca_certs.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/unittests/test_handler/test_handler_ca_certs.py b/tests/unittests/test_handler/test_handler_ca_certs.py index db0cdf9b..c1aff181 100644 --- a/tests/unittests/test_handler/test_handler_ca_certs.py +++ b/tests/unittests/test_handler/test_handler_ca_certs.py @@ -201,6 +201,28 @@ class TestAddCaCerts(TestCase): mock_load.assert_called_once_with("/etc/ca-certificates.conf") + def test_single_cert_to_empty_existing_ca_file(self): + """Test adding a single certificate to the trusted CAs + when existing ca-certificates.conf is empty""" + cert = "CERT1\nLINE2\nLINE3" + + expected = "cloud-init-ca-certs.crt\n" + + with ExitStack() as mocks: + mock_write = mocks.enter_context( + mock.patch.object(util, 'write_file', autospec=True)) + mock_stat = mocks.enter_context( + mock.patch("cloudinit.config.cc_ca_certs.os.stat") + ) + mock_stat.return_value.st_size = 0 + + cc_ca_certs.add_ca_certs([cert]) + + mock_write.assert_has_calls([ + mock.call("/usr/share/ca-certificates/cloud-init-ca-certs.crt", + cert, mode=0o644), + mock.call("/etc/ca-certificates.conf", expected, omode="wb")]) + def test_multiple_certs(self): """Test adding multiple certificates to the trusted CAs.""" certs = ["CERT1\nLINE2\nLINE3", "CERT2\nLINE2\nLINE3"] |