From patchwork Thu Oct 24 15:59:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Rini X-Patchwork-Id: 1183213 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=konsulko.com Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46zXBg3NsGz9sPc for ; Fri, 25 Oct 2019 03:04:59 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 39000C21E7F; Thu, 24 Oct 2019 16:01:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=RCVD_IN_MSPIKE_H2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id E4980C21E70; Thu, 24 Oct 2019 16:00:16 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 7C095C21E8A; Thu, 24 Oct 2019 15:59:45 +0000 (UTC) Received: from mail-yb1-f174.google.com (mail-yb1-f174.google.com [209.85.219.174]) by lists.denx.de (Postfix) with ESMTPS id D1D68C21E1E for ; Thu, 24 Oct 2019 15:59:42 +0000 (UTC) Received: by mail-yb1-f174.google.com with SMTP id h7so7615409ybp.0 for ; Thu, 24 Oct 2019 08:59:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=uYFOFZ+DrVGwx86e8AIo6SSFmfQ9ITU1wgN8R+bJ9ng=; b=UGHkyRvIfaRJVYUJVMel7Lq+KJJf1MnhZJ7NFyEY0mpMwxFz82aUazayX4bXgs5XUX Jx2Rb4x/kGwyHTyhj7ucM2Tjrnzfca6e7tzOJs9GozRt62RxEx2fponQbFNpI3yYcBi7 +eWfGlkz7t+UU7x1XVduKiS06B26FXNT3ndlUTLhZKWoYaXPa3XLK22yvuMRwlQRzz8U nCDLVwna90xDw37n/xerwUF2pODrLewJg6jyEvEMNR5WgHqvG7MYZvfFgH4B/2TEPBa3 Q1bL1ro072+5Del9AJIFtWS8xJLIGXFw8jpwIAQ5U70FtNpYRtT2EWAWmFWgwwMSePi/ 3Z6A== X-Gm-Message-State: APjAAAUVBGL6OiFJgzh5vOS7DK8aA8kw5fhbHiQfJQigoeAhChbOGi/t WdrujuWmVM3x4CfY6yMtIq1/qCc= X-Google-Smtp-Source: APXvYqwypFj7r1suL07vwvn6e5xL7n+nrlSztbYLSA+1KvayVie6i6bzSPv9H0ayKIYNQBaImorEpQ== X-Received: by 2002:a25:d20f:: with SMTP id j15mr10461907ybg.174.1571932781072; Thu, 24 Oct 2019 08:59:41 -0700 (PDT) Received: from bill-the-cat.local (cpe-65-184-142-8.ec.res.rr.com. [65.184.142.8]) by smtp.gmail.com with ESMTPSA id u62sm5862758ywd.15.2019.10.24.08.59.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Oct 2019 08:59:40 -0700 (PDT) From: Tom Rini To: u-boot@lists.denx.de Date: Thu, 24 Oct 2019 11:59:21 -0400 Message-Id: <20191024155928.28616-7-trini@konsulko.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191024155928.28616-1-trini@konsulko.com> References: <20191023032010.27725-1-trini@konsulko.com> <20191024155928.28616-1-trini@konsulko.com> Subject: [U-Boot] [PATCHv3 06/13] test/py: Manual python3 fixes X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" - 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 Tested-by: Stephen Warren Tested-by: Simon Glass [on sandbox] Signed-off-by: Tom Rini --- 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(-) 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: