← Back to team overview

cloud-init-dev team mailing list archive

Re: [Merge] ~smoser/cloud-init:fix/1775371-non-utf8-in-proc-env into cloud-init:master

 


Diff comments:

> diff --git a/tests/unittests/test_util.py b/tests/unittests/test_util.py
> index d774f3d..ea1c8a1 100644
> --- a/tests/unittests/test_util.py
> +++ b/tests/unittests/test_util.py
> @@ -1081,4 +1081,60 @@ class TestLoadShellContent(helpers.TestCase):
>                  ''])))
>  
>  
> +class TestGetProcEnv(helpers.TestCase):
> +    """test get_proc_env."""
> +    null = b'\x00'
> +    simple1 = b'HOME=/'
> +    simple2 = b'PATH=/bin:/sbin'
> +    bootflag = b'BOOTABLE_FLAG=\x80'  # from LP: #1775371
> +    mixed = b'MIXED=' + b'ab\xccde'
> +
> +    def _enc(self, blob, encoding='utf-8', errors='replace'):
> +        # return blob.encode(encoding, errors)

well it started as a comment.
i've adjusted it a bit now, it is just a convenience to make the code shorter elsewhere.

> +        return blob.decode(encoding, errors)
> +
> +    @mock.patch("cloudinit.util.load_file")
> +    def test_non_utf8_in_environment(self, m_load_file):
> +        """env may have non utf-8 decodable content."""
> +        content = self.null.join(
> +            (self.bootflag, self.simple1, self.simple2, self.mixed))
> +        m_load_file.return_value = content
> +
> +        self.assertEqual(
> +            {'BOOTABLE_FLAG': self._enc(self.bootflag.split(b'=')[1]),
> +             'HOME': '/', 'PATH': '/bin:/sbin',
> +             'MIXED': self._enc(self.mixed.split(b'=')[1])},
> +            util.get_proc_env(1))
> +        self.assertEqual(1, m_load_file.call_count)
> +
> +    @mock.patch("cloudinit.util.load_file")
> +    def test_encoding_none_returns_bytes(self, m_load_file):
> +        """encoding none returns bytes."""
> +        lines = (self.bootflag, self.simple1, self.simple2, self.mixed)
> +        content = self.null.join(lines)
> +        m_load_file.return_value = content
> +
> +        self.assertEqual(
> +            dict([t.split(b'=') for t in lines]),
> +            util.get_proc_env(1, encoding=None))
> +        self.assertEqual(1, m_load_file.call_count)
> +
> +    @mock.patch("cloudinit.util.load_file")
> +    def test_all_utf8_encoded(self, m_load_file):
> +        """common path where only utf-8 decodable content."""
> +        content = self.null.join((self.simple1, self.simple2))
> +        m_load_file.return_value = content
> +        self.assertEqual(
> +            {'HOME': '/', 'PATH': '/bin:/sbin'},
> +            util.get_proc_env(1))
> +        self.assertEqual(1, m_load_file.call_count)
> +
> +    @mock.patch("cloudinit.util.load_file")
> +    def test_non_existing_file_returns_empty_dict(self, m_load_file):
> +        """as implemented, a non-existing pid returns empty dict.
> +        This is how it was originally implemented."""
> +        m_load_file.side_effect = OSError("File does not exist.")
> +        self.assertEqual({}, util.get_proc_env(1))
> +        self.assertEqual(1, m_load_file.call_count)
> +
>  # vi: ts=4 expandtab


-- 
https://code.launchpad.net/~smoser/cloud-init/+git/cloud-init/+merge/347698
Your team cloud-init commiters is requested to review the proposed merge of ~smoser/cloud-init:fix/1775371-non-utf8-in-proc-env into cloud-init:master.


References