Blame tests/unittests/test_distros/test_debian.py

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