Bug 1451246 - [mozrunner] Always encode key and value of env variables as UTF-8 if those are of unicode type.
Without encoding the key and value of environment variables as UTF-8
for non-interactive sessions "subprocess.Popen()" and specifically
"os.execvpe()" will fail.
MozReview-Commit-ID: 9lO562XnDZx
--- a/testing/mozbase/mozrunner/mozrunner/base/runner.py
+++ b/testing/mozbase/mozrunner/mozrunner/base/runner.py
@@ -106,31 +106,32 @@ class BaseRunner(object):
self.stop()
# attach a debugger, if specified
if debug_args:
cmd = list(debug_args) + cmd
if self.logger:
self.logger.info('Application command: %s' % ' '.join(cmd))
+
+ encoded_env = {}
+ for k in self.env:
+ v = self.env[k]
+ if isinstance(v, unicode_type):
+ v = v.encode('utf-8')
+ if isinstance(k, unicode_type):
+ k = k.encode('utf-8')
+ encoded_env[k] = v
+
if interactive:
- filtered_env = {}
- for k in self.env:
- v = self.env[k]
- if isinstance(v, unicode_type):
- v = v.encode('utf-8')
- if isinstance(k, unicode_type):
- k = k.encode('utf-8')
- filtered_env[k] = v
-
- self.process_handler = subprocess.Popen(cmd, env=filtered_env)
+ self.process_handler = subprocess.Popen(cmd, env=encoded_env)
# TODO: other arguments
else:
# this run uses the managed processhandler
- self.process_handler = self.process_class(cmd, env=self.env, **self.process_args)
+ self.process_handler = self.process_class(cmd, env=encoded_env, **self.process_args)
self.process_handler.run(self.timeout, self.output_timeout)
self.crashed = 0
return self.process_handler.pid
def wait(self, timeout=None):
"""
Wait for the process to exit.