Blame tests/unittests/test_handler/test_handler_apt_conf_v1.py

Packit bc9a3a
# This file is part of cloud-init. See LICENSE file for license information.
Packit bc9a3a
Packit bc9a3a
from cloudinit.config import cc_apt_configure
Packit bc9a3a
from cloudinit import util
Packit bc9a3a
Packit bc9a3a
from cloudinit.tests.helpers import TestCase
Packit bc9a3a
Packit bc9a3a
import copy
Packit bc9a3a
import os
Packit bc9a3a
import re
Packit bc9a3a
import shutil
Packit bc9a3a
import tempfile
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
class TestAptProxyConfig(TestCase):
Packit bc9a3a
    def setUp(self):
Packit bc9a3a
        super(TestAptProxyConfig, self).setUp()
Packit bc9a3a
        self.tmp = tempfile.mkdtemp()
Packit bc9a3a
        self.addCleanup(shutil.rmtree, self.tmp)
Packit bc9a3a
        self.pfile = os.path.join(self.tmp, "proxy.cfg")
Packit bc9a3a
        self.cfile = os.path.join(self.tmp, "config.cfg")
Packit bc9a3a
Packit bc9a3a
    def _search_apt_config(self, contents, ptype, value):
Packit bc9a3a
        return re.search(
Packit bc9a3a
            r"acquire::%s::proxy\s+[\"']%s[\"'];\n" % (ptype, value),
Packit bc9a3a
            contents, flags=re.IGNORECASE)
Packit bc9a3a
Packit bc9a3a
    def test_apt_proxy_written(self):
Packit bc9a3a
        cfg = {'proxy': 'myproxy'}
Packit bc9a3a
        cc_apt_configure.apply_apt_config(cfg, self.pfile, self.cfile)
Packit bc9a3a
Packit bc9a3a
        self.assertTrue(os.path.isfile(self.pfile))
Packit bc9a3a
        self.assertFalse(os.path.isfile(self.cfile))
Packit bc9a3a
Packit bc9a3a
        contents = util.load_file(self.pfile)
Packit bc9a3a
        self.assertTrue(self._search_apt_config(contents, "http", "myproxy"))
Packit bc9a3a
Packit bc9a3a
    def test_apt_http_proxy_written(self):
Packit bc9a3a
        cfg = {'http_proxy': 'myproxy'}
Packit bc9a3a
        cc_apt_configure.apply_apt_config(cfg, self.pfile, self.cfile)
Packit bc9a3a
Packit bc9a3a
        self.assertTrue(os.path.isfile(self.pfile))
Packit bc9a3a
        self.assertFalse(os.path.isfile(self.cfile))
Packit bc9a3a
Packit bc9a3a
        contents = util.load_file(self.pfile)
Packit bc9a3a
        self.assertTrue(self._search_apt_config(contents, "http", "myproxy"))
Packit bc9a3a
Packit bc9a3a
    def test_apt_all_proxy_written(self):
Packit bc9a3a
        cfg = {'http_proxy': 'myproxy_http_proxy',
Packit bc9a3a
               'https_proxy': 'myproxy_https_proxy',
Packit bc9a3a
               'ftp_proxy': 'myproxy_ftp_proxy'}
Packit bc9a3a
Packit bc9a3a
        values = {'http': cfg['http_proxy'],
Packit bc9a3a
                  'https': cfg['https_proxy'],
Packit bc9a3a
                  'ftp': cfg['ftp_proxy'],
Packit bc9a3a
                  }
Packit bc9a3a
Packit bc9a3a
        cc_apt_configure.apply_apt_config(cfg, self.pfile, self.cfile)
Packit bc9a3a
Packit bc9a3a
        self.assertTrue(os.path.isfile(self.pfile))
Packit bc9a3a
        self.assertFalse(os.path.isfile(self.cfile))
Packit bc9a3a
Packit bc9a3a
        contents = util.load_file(self.pfile)
Packit bc9a3a
Packit bc9a3a
        for ptype, pval in values.items():
Packit bc9a3a
            self.assertTrue(self._search_apt_config(contents, ptype, pval))
Packit bc9a3a
Packit bc9a3a
    def test_proxy_deleted(self):
Packit bc9a3a
        util.write_file(self.cfile, "content doesnt matter")
Packit bc9a3a
        cc_apt_configure.apply_apt_config({}, self.pfile, self.cfile)
Packit bc9a3a
        self.assertFalse(os.path.isfile(self.pfile))
Packit bc9a3a
        self.assertFalse(os.path.isfile(self.cfile))
Packit bc9a3a
Packit bc9a3a
    def test_proxy_replaced(self):
Packit bc9a3a
        util.write_file(self.cfile, "content doesnt matter")
Packit bc9a3a
        cc_apt_configure.apply_apt_config({'proxy': "foo"},
Packit bc9a3a
                                          self.pfile, self.cfile)
Packit bc9a3a
        self.assertTrue(os.path.isfile(self.pfile))
Packit bc9a3a
        contents = util.load_file(self.pfile)
Packit bc9a3a
        self.assertTrue(self._search_apt_config(contents, "http", "foo"))
Packit bc9a3a
Packit bc9a3a
    def test_config_written(self):
Packit bc9a3a
        payload = 'this is my apt config'
Packit bc9a3a
        cfg = {'conf': payload}
Packit bc9a3a
Packit bc9a3a
        cc_apt_configure.apply_apt_config(cfg, self.pfile, self.cfile)
Packit bc9a3a
Packit bc9a3a
        self.assertTrue(os.path.isfile(self.cfile))
Packit bc9a3a
        self.assertFalse(os.path.isfile(self.pfile))
Packit bc9a3a
Packit bc9a3a
        self.assertEqual(util.load_file(self.cfile), payload)
Packit bc9a3a
Packit bc9a3a
    def test_config_replaced(self):
Packit bc9a3a
        util.write_file(self.pfile, "content doesnt matter")
Packit bc9a3a
        cc_apt_configure.apply_apt_config({'conf': "foo"},
Packit bc9a3a
                                          self.pfile, self.cfile)
Packit bc9a3a
        self.assertTrue(os.path.isfile(self.cfile))
Packit bc9a3a
        self.assertEqual(util.load_file(self.cfile), "foo")
Packit bc9a3a
Packit bc9a3a
    def test_config_deleted(self):
Packit bc9a3a
        # if no 'conf' is provided, delete any previously written file
Packit bc9a3a
        util.write_file(self.pfile, "content doesnt matter")
Packit bc9a3a
        cc_apt_configure.apply_apt_config({}, self.pfile, self.cfile)
Packit bc9a3a
        self.assertFalse(os.path.isfile(self.pfile))
Packit bc9a3a
        self.assertFalse(os.path.isfile(self.cfile))
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
class TestConversion(TestCase):
Packit bc9a3a
    def test_convert_with_apt_mirror_as_empty_string(self):
Packit bc9a3a
        # an empty apt_mirror is the same as no apt_mirror
Packit bc9a3a
        empty_m_found = cc_apt_configure.convert_to_v3_apt_format(
Packit bc9a3a
            {'apt_mirror': ''})
Packit bc9a3a
        default_found = cc_apt_configure.convert_to_v3_apt_format({})
Packit bc9a3a
        self.assertEqual(default_found, empty_m_found)
Packit bc9a3a
Packit bc9a3a
    def test_convert_with_apt_mirror(self):
Packit bc9a3a
        mirror = 'http://my.mirror/ubuntu'
Packit bc9a3a
        f = cc_apt_configure.convert_to_v3_apt_format({'apt_mirror': mirror})
Packit bc9a3a
        self.assertIn(mirror, set(m['uri'] for m in f['apt']['primary']))
Packit bc9a3a
Packit bc9a3a
    def test_no_old_content(self):
Packit bc9a3a
        mirror = 'http://my.mirror/ubuntu'
Packit bc9a3a
        mydata = {'apt': {'primary': {'arches': ['default'], 'uri': mirror}}}
Packit bc9a3a
        expected = copy.deepcopy(mydata)
Packit bc9a3a
        self.assertEqual(expected,
Packit bc9a3a
                         cc_apt_configure.convert_to_v3_apt_format(mydata))
Packit bc9a3a
Packit bc9a3a
Packit bc9a3a
# vi: ts=4 expandtab