From patchwork Mon Jun 22 14:31:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 191349 Delivered-To: patch@linaro.org Received: by 2002:a92:1f07:0:0:0:0:0 with SMTP id i7csp1101765ile; Mon, 22 Jun 2020 07:38:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz6Qaud6torEZ5q6/SlUhgSZP0L1eGvNoazvTQk/KaOF30KB6qKEfQtIQ/UFlUVHXJ1O78N X-Received: by 2002:a25:3bce:: with SMTP id i197mr26913188yba.436.1592836700324; Mon, 22 Jun 2020 07:38:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592836700; cv=none; d=google.com; s=arc-20160816; b=ayCEhLMRd/XzQQ0hBAt3X90NDCmaHda1EDSCwVISBe/PRlDCeLoIKVYPJkT9cpDfNd SJXfTmDCbZC0t0ndtebbtTascRkQ0j0wUxX7K9UL1pX6BwN8iqsLV8uouXrjYzYdGpVJ UsxiSUHCSvsDN0wguPeGKc7/ln73QlphKAp+EcIx/JLxLJZo3ebjB5YFp1UuxrAFueJb ljcNaGjvcOMZh+3BkJG07pH0owW7ybl3xRQUGw2N8c52jYP38cLib+NmfjJD2iVyMaru wvqav04OUp1RayNYY7pwetBpB/qd1qsWttRXtWCYocaGFsG9jF8gXwIQPmHz5Qfhv1Si 2yCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=5xSn2L6kzBKcKjTR8zPwxbT757SBhdGuGZ/3k/jBdz8=; b=c6OS0vsSxCYX/AWsSU2LXFlXB8ZNp9HANmO3Ti+LmB9ERm1SywrDWr1lk5SYiDNEuz YY4suokqz0W1Ji3hRqvee6r6a2gppju9K68iphtS4sqX1TjcCCAiO/AD1WFekeuiS+Ec 7vujtDF3qE654JT2M/sSc01dzRX13Lslbhbp01Up3mEQNsMvJncam//gSdbTGMUzir86 HIdDDBTpea9bL3g4YFAmhytlDaaA8ggeeFiAcMvjHrshp1DszB3BSCF2ARI7gU5/nwrs FjJMb6MsU74pIBi03MUKToChpU+I576FkkJmxRhTvnXae/doIQITk0rwd5ZVK4f6qhki mmsg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=BXega6gZ; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id y3si13412862ybq.160.2020.06.22.07.38.20 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 22 Jun 2020 07:38:20 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=BXega6gZ; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:38126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jnNaV-0006iK-PQ for patch@linaro.org; Mon, 22 Jun 2020 10:38:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40010) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jnNUk-000706-IE for qemu-devel@nongnu.org; Mon, 22 Jun 2020 10:32:22 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:34983) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jnNUi-0005fq-FO for qemu-devel@nongnu.org; Mon, 22 Jun 2020 10:32:22 -0400 Received: by mail-wr1-x444.google.com with SMTP id g18so7858285wrm.2 for ; Mon, 22 Jun 2020 07:32:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5xSn2L6kzBKcKjTR8zPwxbT757SBhdGuGZ/3k/jBdz8=; b=BXega6gZk1JeXV23r9dnm+EWlgsnTwI+c2Cn8PsTqXzXZBRK7OryEEgFKbS88f++Un qi4wPrlPybPbqodl0zHoulHrnOP6NucY/wYw+489IqvBhnVZnV+2IFMb9k65s/qehRPC KD2DmtLLyGt8IwVr4VeI8pox1VDMDPETew9YBpCdH5OHNAt6xvyvpRmpwUiItyMwoYUx pRWVE3aEZ3ZhdmyAuqNbemj1Q6Er3uosxUBjaMDSy5w3mcKkCC4Q1+lAu5R7SQH9b8Ji P4y8jyD4N+4qgb3R1AWPNogaSDC5YfVAxR7Vb4MV+LNKA5Xrt5ID3uc+PNeI2PJyl7QF MlhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5xSn2L6kzBKcKjTR8zPwxbT757SBhdGuGZ/3k/jBdz8=; b=bypNgLB6sKTX3Pl/2cDA+4Ziq+y1sEVhZcoeIVkWlNRa+6qZI5f8BejSvMfDgqUJbV p73ksUVAU7ZyITWfPKHm2+6MqDkPXa9BcfvMFginBLN2J6sm0yPkvu12dHHJczQ66qT1 gqYAEh+VEP5uit9a0caKhyTXO3SA0/P/O0T7zR4A3KCDwSJTtCbyM3S4Z4iMT15Le31t IKKMYQeb9VrROxZHoQZxcS7ai3D+KuRuJa7iCFSqkcawmujujRrRQORz3c4fneTqrGY1 P1KnVebBQvY0R0Wq+YOn4E9vF/a1tHm13u9eu9xMup1MtGfwfVVB2NlSn9kzXW4YQxXS v94Q== X-Gm-Message-State: AOAM5329Yd0ig5TSKujW/RupTCvXlRcc3IacUC5A8bGdNz24zSXFxiIN wDYDPT2ZQE3UDw5d++P06idF9A== X-Received: by 2002:a5d:498f:: with SMTP id r15mr20672510wrq.175.1592836338920; Mon, 22 Jun 2020 07:32:18 -0700 (PDT) Received: from zen.linaroharston ([51.148.130.216]) by smtp.gmail.com with ESMTPSA id r12sm18115626wrc.22.2020.06.22.07.32.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Jun 2020 07:32:12 -0700 (PDT) Received: from zen.lan (localhost [127.0.0.1]) by zen.linaroharston (Postfix) with ESMTP id BECA81FF99; Mon, 22 Jun 2020 15:32:05 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Subject: [PATCH v1 10/18] tests/vm: Add workaround to consume console Date: Mon, 22 Jun 2020 15:31:56 +0100 Message-Id: <20200622143204.12921-11-alex.bennee@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200622143204.12921-1-alex.bennee@linaro.org> References: <20200622143204.12921-1-alex.bennee@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::444; envelope-from=alex.bennee@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: fam@euphon.net, berrange@redhat.com, Robert Foley , =?utf-8?q?Alex_Benn=C3=A9e?= , richard.henderson@linaro.org, f4bug@amsat.org, =?utf-8?q?Philippe_Mat?= =?utf-8?q?hieu-Daud=C3=A9?= , cota@braap.org, Peter Puhov , aurelien@aurel32.net Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Robert Foley This adds support to basevm.py so that we always drain the console chars. This makes use of support added in an earlier commit that allows QEMUMachine to use the ConsoleSocket. This is a workaround we found was needed since there is a known issue where QEMU will hang waiting for console characters to be consumed. We also added the option of logging the console to a file. LOG_CONSOLE=1 will now log the output to a file. Signed-off-by: Robert Foley Reviewed-by: Peter Puhov Acked-by: Alex Bennée Signed-off-by: Alex Bennée Message-Id: <20200601211421.1277-10-robert.foley@linaro.org> --- tests/vm/Makefile.include | 4 ++++ tests/vm/basevm.py | 21 +++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) -- 2.20.1 diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include index 39f918a430a..f21948c46a5 100644 --- a/tests/vm/Makefile.include +++ b/tests/vm/Makefile.include @@ -49,6 +49,7 @@ endif @echo ' EXTRA_CONFIGURE_OPTS="..."' @echo " J=[0..9]* - Override the -jN parameter for make commands" @echo " DEBUG=1 - Enable verbose output on host and interactive debugging" + @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm " @echo " V=1 - Enable verbose ouput on host and guest commands" @echo " QEMU_LOCAL=1 - Use QEMU binary local to this build." @echo " QEMU=/path/to/qemu - Change path to QEMU binary" @@ -75,6 +76,7 @@ $(IMAGES_DIR)/%.img: $(SRC_PATH)/tests/vm/% \ $(if $(GENISOIMAGE),--genisoimage $(GENISOIMAGE)) \ $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ + $(if $(LOG_CONSOLE),--log-console) \ --image "$@" \ --force \ --build-image $@, \ @@ -91,6 +93,7 @@ vm-build-%: $(IMAGES_DIR)/%.img $(if $(V),--verbose) \ $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ + $(if $(LOG_CONSOLE),--log-console) \ --image "$<" \ $(if $(BUILD_TARGET),--build-target $(BUILD_TARGET)) \ --snapshot \ @@ -114,6 +117,7 @@ vm-boot-ssh-%: $(IMAGES_DIR)/%.img $(if $(V)$(DEBUG), --debug) \ $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ + $(if $(LOG_CONSOLE),--log-console) \ --image "$<" \ --interactive \ false, \ diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py index f716798b405..04d083409a5 100644 --- a/tests/vm/basevm.py +++ b/tests/vm/basevm.py @@ -117,6 +117,11 @@ class BaseVM(object): "w").write(self._config['ssh_pub_key']) self.debug = args.debug + self._console_log_path = None + if args.log_console: + self._console_log_path = \ + os.path.join(os.path.expanduser("~/.cache/qemu-vm"), + "{}.install.log".format(self.name)) self._stderr = sys.stderr self._devnull = open(os.devnull, "w") if self.debug: @@ -271,7 +276,13 @@ class BaseVM(object): args += self._data_args + extra_args + self._config['extra_args'] logging.debug("QEMU args: %s", " ".join(args)) qemu_path = get_qemu_path(self.arch, self._build_path) - guest = QEMUMachine(binary=qemu_path, args=args) + + # Since console_log_path is only set when the user provides the + # log_console option, we will set drain_console=True so the + # console is always drained. + guest = QEMUMachine(binary=qemu_path, args=args, + console_log=self._console_log_path, + drain_console=True) guest.set_machine(self._config['machine']) guest.set_console() try: @@ -285,6 +296,8 @@ class BaseVM(object): raise atexit.register(self.shutdown) self._guest = guest + # Init console so we can start consuming the chars. + self.console_init() usernet_info = guest.qmp("human-monitor-command", command_line="info usernet") self.ssh_port = None @@ -296,7 +309,9 @@ class BaseVM(object): raise Exception("Cannot find ssh port from 'info usernet':\n%s" % \ usernet_info) - def console_init(self, timeout = 120): + def console_init(self, timeout = None): + if timeout == None: + timeout = self.socket_timeout vm = self._guest vm.console_socket.settimeout(timeout) self.console_raw_path = os.path.join(vm._temp_dir, @@ -578,6 +593,8 @@ def parse_args(vmcls): parser.add_option("--efi-aarch64", default="/usr/share/qemu-efi-aarch64/QEMU_EFI.fd", help="Path to efi image for aarch64 VMs.") + parser.add_option("--log-console", action="store_true", + help="Log console to file.") parser.disable_interspersed_args() return parser.parse_args()