Blame tests/unittests/test_distros/test_debian.py

Packit Service a04d08
# This file is part of cloud-init. See LICENSE file for license information.
Packit Service a04d08
Packit Service a04d08
from cloudinit import distros
Packit Service a04d08
from cloudinit import util
Packit Service a04d08
from cloudinit.tests.helpers import (FilesystemMockingTestCase, mock)
Packit Service a04d08
Packit Service a04d08
Packit Service 9bfd13
@mock.patch("cloudinit.distros.debian.subp.subp")
Packit Service a04d08
class TestDebianApplyLocale(FilesystemMockingTestCase):
Packit Service a04d08
Packit Service a04d08
    def setUp(self):
Packit Service a04d08
        super(TestDebianApplyLocale, self).setUp()
Packit Service a04d08
        self.new_root = self.tmp_dir()
Packit Service a04d08
        self.patchOS(self.new_root)
Packit Service a04d08
        self.patchUtils(self.new_root)
Packit Service a04d08
        self.spath = self.tmp_path('etc/default/locale', self.new_root)
Packit Service a04d08
        cls = distros.fetch("debian")
Packit Service a04d08
        self.distro = cls("debian", {}, None)
Packit Service a04d08
Packit Service a04d08
    def test_no_rerun(self, m_subp):
Packit Service a04d08
        """If system has defined locale, no re-run is expected."""
Packit Service a04d08
        m_subp.return_value = (None, None)
Packit Service a04d08
        locale = 'en_US.UTF-8'
Packit Service a04d08
        util.write_file(self.spath, 'LANG=%s\n' % locale, omode="w")
Packit Service a04d08
        self.distro.apply_locale(locale, out_fn=self.spath)
Packit Service a04d08
        m_subp.assert_not_called()
Packit Service a04d08
Packit Service a04d08
    def test_no_regen_on_c_utf8(self, m_subp):
Packit Service a04d08
        """If locale is set to C.UTF8, do not attempt to call locale-gen"""
Packit Service a04d08
        m_subp.return_value = (None, None)
Packit Service a04d08
        locale = 'C.UTF-8'
Packit Service a04d08
        util.write_file(self.spath, 'LANG=%s\n' % 'en_US.UTF-8', omode="w")
Packit Service a04d08
        self.distro.apply_locale(locale, out_fn=self.spath)
Packit Service a04d08
        self.assertEqual(
Packit Service a04d08
            [['update-locale', '--locale-file=' + self.spath,
Packit Service a04d08
              'LANG=%s' % locale]],
Packit Service a04d08
            [p[0][0] for p in m_subp.call_args_list])
Packit Service a04d08
Packit Service a04d08
    def test_rerun_if_different(self, m_subp):
Packit Service a04d08
        """If system has different locale, locale-gen should be called."""
Packit Service a04d08
        m_subp.return_value = (None, None)
Packit Service a04d08
        locale = 'en_US.UTF-8'
Packit Service a04d08
        util.write_file(self.spath, 'LANG=fr_FR.UTF-8', omode="w")
Packit Service a04d08
        self.distro.apply_locale(locale, out_fn=self.spath)
Packit Service a04d08
        self.assertEqual(
Packit Service a04d08
            [['locale-gen', locale],
Packit Service a04d08
             ['update-locale', '--locale-file=' + self.spath,
Packit Service a04d08
              'LANG=%s' % locale]],
Packit Service a04d08
            [p[0][0] for p in m_subp.call_args_list])
Packit Service a04d08
Packit Service a04d08
    def test_rerun_if_no_file(self, m_subp):
Packit Service a04d08
        """If system has no locale file, locale-gen should be called."""
Packit Service a04d08
        m_subp.return_value = (None, None)
Packit Service a04d08
        locale = 'en_US.UTF-8'
Packit Service a04d08
        self.distro.apply_locale(locale, out_fn=self.spath)
Packit Service a04d08
        self.assertEqual(
Packit Service a04d08
            [['locale-gen', locale],
Packit Service a04d08
             ['update-locale', '--locale-file=' + self.spath,
Packit Service a04d08
              'LANG=%s' % locale]],
Packit Service a04d08
            [p[0][0] for p in m_subp.call_args_list])
Packit Service a04d08
Packit Service a04d08
    def test_rerun_on_unset_system_locale(self, m_subp):
Packit Service a04d08
        """If system has unset locale, locale-gen should be called."""
Packit Service a04d08
        m_subp.return_value = (None, None)
Packit Service a04d08
        locale = 'en_US.UTF-8'
Packit Service a04d08
        util.write_file(self.spath, 'LANG=', omode="w")
Packit Service a04d08
        self.distro.apply_locale(locale, out_fn=self.spath)
Packit Service a04d08
        self.assertEqual(
Packit Service a04d08
            [['locale-gen', locale],
Packit Service a04d08
             ['update-locale', '--locale-file=' + self.spath,
Packit Service a04d08
              'LANG=%s' % locale]],
Packit Service a04d08
            [p[0][0] for p in m_subp.call_args_list])
Packit Service a04d08
Packit Service a04d08
    def test_rerun_on_mismatched_keys(self, m_subp):
Packit Service a04d08
        """If key is LC_ALL and system has only LANG, rerun is expected."""
Packit Service a04d08
        m_subp.return_value = (None, None)
Packit Service a04d08
        locale = 'en_US.UTF-8'
Packit Service a04d08
        util.write_file(self.spath, 'LANG=', omode="w")
Packit Service a04d08
        self.distro.apply_locale(locale, out_fn=self.spath, keyname='LC_ALL')
Packit Service a04d08
        self.assertEqual(
Packit Service a04d08
            [['locale-gen', locale],
Packit Service a04d08
             ['update-locale', '--locale-file=' + self.spath,
Packit Service a04d08
              'LC_ALL=%s' % locale]],
Packit Service a04d08
            [p[0][0] for p in m_subp.call_args_list])
Packit Service a04d08
Packit Service a04d08
    def test_falseish_locale_raises_valueerror(self, m_subp):
Packit Service a04d08
        """locale as None or "" is invalid and should raise ValueError."""
Packit Service a04d08
Packit Service a04d08
        with self.assertRaises(ValueError) as ctext_m:
Packit Service a04d08
            self.distro.apply_locale(None)
Packit Service a04d08
            m_subp.assert_not_called()
Packit Service a04d08
Packit Service a04d08
        self.assertEqual(
Packit Service a04d08
            'Failed to provide locale value.', str(ctext_m.exception))
Packit Service a04d08
Packit Service a04d08
        with self.assertRaises(ValueError) as ctext_m:
Packit Service a04d08
            self.distro.apply_locale("")
Packit Service a04d08
            m_subp.assert_not_called()
Packit Service a04d08
        self.assertEqual(
Packit Service a04d08
            'Failed to provide locale value.', str(ctext_m.exception))