test/py: Manual python3 fixes
- 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>
This commit is contained in:
parent
fe1193e254
commit
fd31fc172c
5 changed files with 19 additions and 12 deletions
|
@ -13,17 +13,16 @@
|
||||||
# - Implementing custom pytest markers.
|
# - Implementing custom pytest markers.
|
||||||
|
|
||||||
import atexit
|
import atexit
|
||||||
|
import configparser
|
||||||
import errno
|
import errno
|
||||||
|
import io
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import pytest
|
import pytest
|
||||||
from _pytest.runner import runtestprotocol
|
|
||||||
import re
|
import re
|
||||||
import io
|
from _pytest.runner import runtestprotocol
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import configparser
|
|
||||||
|
|
||||||
# Globals: The HTML log file, and the connection to the U-Boot console.
|
# Globals: The HTML log file, and the connection to the U-Boot console.
|
||||||
log = None
|
log = None
|
||||||
console = None
|
console = None
|
||||||
|
@ -168,7 +167,7 @@ def pytest_configure(config):
|
||||||
ini_str = '[root]\n' + f.read()
|
ini_str = '[root]\n' + f.read()
|
||||||
ini_sio = io.StringIO(ini_str)
|
ini_sio = io.StringIO(ini_str)
|
||||||
parser = configparser.RawConfigParser()
|
parser = configparser.RawConfigParser()
|
||||||
parser.readfp(ini_sio)
|
parser.read_file(ini_sio)
|
||||||
ubconfig.buildconfig.update(parser.items('root'))
|
ubconfig.buildconfig.update(parser.items('root'))
|
||||||
|
|
||||||
ubconfig.test_py_dir = test_py_dir
|
ubconfig.test_py_dir = test_py_dir
|
||||||
|
|
|
@ -51,7 +51,7 @@ class LogfileStream(object):
|
||||||
"""Write data to the log stream.
|
"""Write data to the log stream.
|
||||||
|
|
||||||
Args:
|
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
|
implicit: Boolean indicating whether data actually appeared in the
|
||||||
stream, or was implicitly generated. A valid use-case is to
|
stream, or was implicitly generated. A valid use-case is to
|
||||||
repeat a shell prompt at the start of each separate log
|
repeat a shell prompt at the start of each separate log
|
||||||
|
@ -64,7 +64,8 @@ class LogfileStream(object):
|
||||||
|
|
||||||
self.logfile.write(self, data, implicit)
|
self.logfile.write(self, data, implicit)
|
||||||
if self.chained_file:
|
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):
|
def flush(self):
|
||||||
"""Flush the log stream, to ensure correct log interleaving.
|
"""Flush the log stream, to ensure correct log interleaving.
|
||||||
|
@ -136,6 +137,10 @@ class RunAndLog(object):
|
||||||
p = subprocess.Popen(cmd, cwd=cwd,
|
p = subprocess.Popen(cmd, cwd=cwd,
|
||||||
stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||||
(stdout, stderr) = p.communicate()
|
(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 = ''
|
output = ''
|
||||||
if stdout:
|
if stdout:
|
||||||
if stderr:
|
if stderr:
|
||||||
|
@ -215,7 +220,7 @@ class Logfile(object):
|
||||||
Nothing.
|
Nothing.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.f = open(fn, 'wt')
|
self.f = open(fn, 'wt', encoding='utf-8')
|
||||||
self.last_stream = None
|
self.last_stream = None
|
||||||
self.blocks = []
|
self.blocks = []
|
||||||
self.cur_evt = 1
|
self.cur_evt = 1
|
||||||
|
|
|
@ -8,3 +8,6 @@
|
||||||
markers =
|
markers =
|
||||||
boardspec: U-Boot: Describes the set of boards a test can/can't run on.
|
boardspec: U-Boot: Describes the set of boards a test can/can't run on.
|
||||||
buildconfigspec: U-Boot: Describes Kconfig/config-header constraints.
|
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.
|
||||||
|
|
|
@ -153,7 +153,7 @@ def test_fit(u_boot_console):
|
||||||
src = make_fname('u-boot.dts')
|
src = make_fname('u-boot.dts')
|
||||||
dtb = make_fname('u-boot.dtb')
|
dtb = make_fname('u-boot.dtb')
|
||||||
with open(src, 'w') as fd:
|
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])
|
util.run_and_log(cons, ['dtc', src, '-O', 'dtb', '-o', dtb])
|
||||||
return dtb
|
return dtb
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ def test_fit(u_boot_console):
|
||||||
its = make_its(params)
|
its = make_its(params)
|
||||||
util.run_and_log(cons, [mkimage, '-f', its, fit])
|
util.run_and_log(cons, [mkimage, '-f', its, fit])
|
||||||
with open(make_fname('u-boot.dts'), 'w') as fd:
|
with open(make_fname('u-boot.dts'), 'w') as fd:
|
||||||
print(base_fdt, file=fd)
|
fd.write(base_fdt)
|
||||||
return fit
|
return fit
|
||||||
|
|
||||||
def make_kernel(filename, text):
|
def make_kernel(filename, text):
|
||||||
|
|
|
@ -113,7 +113,7 @@ class Spawn(object):
|
||||||
Nothing.
|
Nothing.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
os.write(self.fd, data)
|
os.write(self.fd, data.encode(errors='replace'))
|
||||||
|
|
||||||
def expect(self, patterns):
|
def expect(self, patterns):
|
||||||
"""Wait for the sub-process to emit specific data.
|
"""Wait for the sub-process to emit specific data.
|
||||||
|
@ -171,7 +171,7 @@ class Spawn(object):
|
||||||
events = self.poll.poll(poll_maxwait)
|
events = self.poll.poll(poll_maxwait)
|
||||||
if not events:
|
if not events:
|
||||||
raise Timeout()
|
raise Timeout()
|
||||||
c = os.read(self.fd, 1024)
|
c = os.read(self.fd, 1024).decode(errors='replace')
|
||||||
if not c:
|
if not c:
|
||||||
raise EOFError()
|
raise EOFError()
|
||||||
if self.logfile_read:
|
if self.logfile_read:
|
||||||
|
|
Loading…
Reference in a new issue