obj.stdin.close()
if six.PY3:
if isinstance(_stdout, bytes):
- try:
- _stdout = _stdout.decode(encoding='utf-8')
- except UnicodeError:
- pass
+ _stdout = _stdout.decode('utf-8', 'surrogateescape')
if isinstance(_stderr, bytes):
- try:
- _stderr = _stderr.decode(encoding='utf-8')
- except UnicodeError:
- pass
+ _stderr = _stderr.decode('utf-8', 'surrogateescape')
command_str = {
'cmd': cmd,
obj.stdin.close()
if six.PY3:
if isinstance(_stdout, bytes):
- try:
- _stdout = _stdout.decode(encoding='utf-8')
- except UnicodeError:
- pass
+ _stdout = _stdout.decode('utf-8', 'surrogateescape')
if isinstance(_stderr, bytes):
- try:
- _stderr = _stderr.decode(encoding='utf-8')
- except UnicodeError:
- pass
+ _stderr = _stderr.decode('utf-8', 'surrogateescape')
m = _("\nCommand: %(cmd)s\nExit code: %(code)s\nStdin: %(stdin)s\n"
"Stdout: %(stdout)s\nStderr: %(stderr)s") % \
result = utils.execute(['ls', self.test_file], return_stderr=True)
self.assertEqual((str_data, ''), result)
- def test_raise_unicodeerror_in_decoding_out_data(self):
- class m_bytes(bytes):
- def decode(self, encoding=None):
- raise UnicodeError
-
- err_data = 'UnicodeError'
- bytes_err_data = b'UnicodeError'
+ @testtools.skipUnless(six.PY3, 'This test makes sense only in Python 3')
+ def test_surrogateescape_in_decoding_out_data(self):
+ bytes_err_data = b'\xed\xa0\xbd'
+ err_data = bytes_err_data.decode('utf-8', 'surrogateescape')
out_data = "%s\n" % self.test_file
- bytes_out_data = m_bytes(out_data.encode(encoding='utf-8'))
- if six.PY3:
- self.mock_popen.return_value = [bytes_out_data, bytes_err_data]
- result = utils.execute(['ls', self.test_file],
- return_stderr=True)
- self.assertEqual((bytes_out_data, err_data), result)
+ bytes_out_data = out_data.encode(encoding='utf-8')
+ self.mock_popen.return_value = [bytes_out_data, bytes_err_data]
+ result = utils.execute(['ls', self.test_file], return_stderr=True)
+ self.assertEqual((out_data, err_data), result)
class AgentUtilsExecuteEncodeTest(base.BaseTestCase):