diff mbox series

[U-Boot,PATCHv3,06/13] test/py: Manual python3 fixes

Message ID 20191024155928.28616-7-trini@konsulko.com
State Accepted
Commit fd31fc172c626bdac2afd8af9f8482bfc21a5501
Delegated to: Tom Rini
Headers show
Series Moving test/py to Python 3 | expand

Commit Message

Tom Rini Oct. 24, 2019, 3:59 p.m. UTC
- Modern pytest is more visible in telling us about parameters that we
  had not described, so describe a few more.
- ConfigParser.readfp(...) is now configparser.read_file(...)
- As part of the "strings vs bytes" conversions in Python 3, we use the
  default encoding/decoding of utf-8 but in some places tell Python to
  replace problematic conversions rather than throw a fatal error.
- Fix a typo noticed while doing the above ("tot he" -> "to the").
- As suggested by Stephen, re-alphabetize the import list
- Per Heinrich, replace how we write contents in test_fit.py

Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Stephen Warren <swarren@nvidia.com>
Tested-by: Simon Glass <sjg@chromium.org> [on sandbox]
Signed-off-by: Tom Rini <trini@konsulko.com>
---
Changes in v3:
- Switch to single quotes not double quotes, per Stephen
- Switch to a Python 3.5.x happy subprocess and decode set of
  statements, also from Stephen
---
 test/py/conftest.py        |  9 ++++-----
 test/py/multiplexed_log.py | 11 ++++++++---
 test/py/pytest.ini         |  3 +++
 test/py/tests/test_fit.py  |  4 ++--
 test/py/u_boot_spawn.py    |  4 ++--
 5 files changed, 19 insertions(+), 12 deletions(-)

Comments

Tom Rini Nov. 1, 2019, 1:32 p.m. UTC | #1
On Thu, Oct 24, 2019 at 11:59:21AM -0400, Tom Rini wrote:

> - Modern pytest is more visible in telling us about parameters that we
>   had not described, so describe a few more.
> - ConfigParser.readfp(...) is now configparser.read_file(...)
> - As part of the "strings vs bytes" conversions in Python 3, we use the
>   default encoding/decoding of utf-8 but in some places tell Python to
>   replace problematic conversions rather than throw a fatal error.
> - Fix a typo noticed while doing the above ("tot he" -> "to the").
> - As suggested by Stephen, re-alphabetize the import list
> - Per Heinrich, replace how we write contents in test_fit.py
> 
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Tested-by: Stephen Warren <swarren@nvidia.com>
> Tested-by: Simon Glass <sjg@chromium.org> [on sandbox]
> Signed-off-by: Tom Rini <trini@konsulko.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/test/py/conftest.py b/test/py/conftest.py
index 5c19af1d5034..bffee6b8a3a2 100644
--- a/test/py/conftest.py
+++ b/test/py/conftest.py
@@ -13,17 +13,16 @@ 
 # - Implementing custom pytest markers.
 
 import atexit
+import configparser
 import errno
+import io
 import os
 import os.path
 import pytest
-from _pytest.runner import runtestprotocol
 import re
-import io
+from _pytest.runner import runtestprotocol
 import sys
 
-import configparser
-
 # Globals: The HTML log file, and the connection to the U-Boot console.
 log = None
 console = None
@@ -168,7 +167,7 @@  def pytest_configure(config):
             ini_str = '[root]\n' + f.read()
             ini_sio = io.StringIO(ini_str)
             parser = configparser.RawConfigParser()
-            parser.readfp(ini_sio)
+            parser.read_file(ini_sio)
             ubconfig.buildconfig.update(parser.items('root'))
 
     ubconfig.test_py_dir = test_py_dir
diff --git a/test/py/multiplexed_log.py b/test/py/multiplexed_log.py
index de0aacc659b8..545a77430223 100644
--- a/test/py/multiplexed_log.py
+++ b/test/py/multiplexed_log.py
@@ -51,7 +51,7 @@  class LogfileStream(object):
         """Write data to the log stream.
 
         Args:
-            data: The data to write tot he file.
+            data: The data to write to the file.
             implicit: Boolean indicating whether data actually appeared in the
                 stream, or was implicitly generated. A valid use-case is to
                 repeat a shell prompt at the start of each separate log
@@ -64,7 +64,8 @@  class LogfileStream(object):
 
         self.logfile.write(self, data, implicit)
         if self.chained_file:
-            self.chained_file.write(data)
+            # Chained file is console, convert things a little
+            self.chained_file.write((data.encode('ascii', 'replace')).decode())
 
     def flush(self):
         """Flush the log stream, to ensure correct log interleaving.
@@ -136,6 +137,10 @@  class RunAndLog(object):
             p = subprocess.Popen(cmd, cwd=cwd,
                 stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
             (stdout, stderr) = p.communicate()
+            if stdout is not None:
+                stdout = stdout.decode('utf-8')
+            if stderr is not None:
+                stderr = stderr.decode('utf-8')
             output = ''
             if stdout:
                 if stderr:
@@ -215,7 +220,7 @@  class Logfile(object):
             Nothing.
         """
 
-        self.f = open(fn, 'wt')
+        self.f = open(fn, 'wt', encoding='utf-8')
         self.last_stream = None
         self.blocks = []
         self.cur_evt = 1
diff --git a/test/py/pytest.ini b/test/py/pytest.ini
index 7e400682bf25..e93d010f1fa2 100644
--- a/test/py/pytest.ini
+++ b/test/py/pytest.ini
@@ -8,3 +8,6 @@ 
 markers =
     boardspec: U-Boot: Describes the set of boards a test can/can't run on.
     buildconfigspec: U-Boot: Describes Kconfig/config-header constraints.
+    notbuildconfigspec: U-Boot: Describes required disabled Kconfig options.
+    requiredtool: U-Boot: Required host tools for a test.
+    slow: U-Boot: Specific test will run slowly.
diff --git a/test/py/tests/test_fit.py b/test/py/tests/test_fit.py
index 4922b9dcc664..356d9a20f299 100755
--- a/test/py/tests/test_fit.py
+++ b/test/py/tests/test_fit.py
@@ -153,7 +153,7 @@  def test_fit(u_boot_console):
         src = make_fname('u-boot.dts')
         dtb = make_fname('u-boot.dtb')
         with open(src, 'w') as fd:
-            print(base_fdt, file=fd)
+            fd.write(base_fdt)
         util.run_and_log(cons, ['dtc', src, '-O', 'dtb', '-o', dtb])
         return dtb
 
@@ -186,7 +186,7 @@  def test_fit(u_boot_console):
         its = make_its(params)
         util.run_and_log(cons, [mkimage, '-f', its, fit])
         with open(make_fname('u-boot.dts'), 'w') as fd:
-            print(base_fdt, file=fd)
+            fd.write(base_fdt)
         return fit
 
     def make_kernel(filename, text):
diff --git a/test/py/u_boot_spawn.py b/test/py/u_boot_spawn.py
index b011a3e3da25..4f898cdefe5a 100644
--- a/test/py/u_boot_spawn.py
+++ b/test/py/u_boot_spawn.py
@@ -113,7 +113,7 @@  class Spawn(object):
             Nothing.
         """
 
-        os.write(self.fd, data)
+        os.write(self.fd, data.encode(errors='replace'))
 
     def expect(self, patterns):
         """Wait for the sub-process to emit specific data.
@@ -171,7 +171,7 @@  class Spawn(object):
                 events = self.poll.poll(poll_maxwait)
                 if not events:
                     raise Timeout()
-                c = os.read(self.fd, 1024)
+                c = os.read(self.fd, 1024).decode(errors='replace')
                 if not c:
                     raise EOFError()
                 if self.logfile_read: