|
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
|