From patchwork Wed Jul 1 13:56:25 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: 192169 Delivered-To: patch@linaro.org Received: by 2002:a92:d244:0:0:0:0:0 with SMTP id v4csp537438ilg; Wed, 1 Jul 2020 07:19:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyu8SimyI/QG6fXtX8f+aqT89lAX2viBlusvncutoQJkSfodrv7xB2gcp87/0gl+jF+uamt X-Received: by 2002:a25:9706:: with SMTP id d6mr37155916ybo.220.1593613145218; Wed, 01 Jul 2020 07:19:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593613145; cv=none; d=google.com; s=arc-20160816; b=d1PCz9JLi4YizcJADFhxi3/x9TlbySCb8vawGK9FvL1s0jGzL/j+16xN/lpoSNWd7C rXzrQeozdqdm8GvA5IkvzMgJxjqbeXcIaU3EHf3NVikE1kRkQWICKU0umMRqvTUWhqyA DV2GLwKUIMSMSnrez7W2dphURHMFtn+d1hv92ydAQImh9eZyoUa0GG0aJgX5i50KYKEA MyJmkjHr82qFeOY1/PWRBuPTo9LSdNumuoZBJRno+nmyZlG+5szP/iXJXoY9ytSC5DLl KXKaFF1i6/pz1UKDNXjItt4NJAUrB9l2nHio4w4CffCC7CEczScrDpDTpsxFy9gDKrve BmWA== 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=tF0HBuIcJh4kQnz57i1iWOfXJOZrUuMpr+hN2R8DcLsJJCJ5ti63bhX0Gmzhgc3B1G UMZ6SoWoOd2b5NW3oCZesC6GAZAkbqmOmdmPZX3zp8u4R2J0n+K0mVRn76m4yJAL10ks 9mqfO9Y2/taaig6TSlwPXr02XwWLma0QcboMjlM65WoA+88yYHIU97B5IRkgpjku31tJ dCzIlLIT3jk6gXjrkEiyXV6ZZ3o1Gvk9aM5FLFE1Su0EnoptJle0DqFYdOZz71iMVWoU ihXhViMxIE4rkKy/bvHVNYUTl/8PVAm7CaXYpzwUCHigOCzoKeX/payxJENCBpqwc+eA 6V2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=UN8Qvevy; 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 t18si5758263ybl.316.2020.07.01.07.19.05 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 01 Jul 2020 07:19:05 -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=UN8Qvevy; 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]:57140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jqdZo-0005Ko-JY for patch@linaro.org; Wed, 01 Jul 2020 10:19:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35354) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jqdUX-0006b5-Vb for qemu-devel@nongnu.org; Wed, 01 Jul 2020 10:13:39 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:36988) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jqdUR-0000AA-Os for qemu-devel@nongnu.org; Wed, 01 Jul 2020 10:13:37 -0400 Received: by mail-wm1-x342.google.com with SMTP id o2so23435261wmh.2 for ; Wed, 01 Jul 2020 07:13:31 -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=UN8QvevyH/p/8t8XtM/ztNOtUU3yvM11c97zCjUg/T+qF3R+XahA9xINEahWxGfKTn 2fo/xkoJircuU80TDTxqdTWXroOc84NbdyVU14j1G1T3MjLFw1ksoTxj3C8tmbBElj2T ehlawyCU+18TcyghrtxeRF+S2UVh8gU6xK0rCQw74BHBsGFDJbapPGSOSg16hjdVORzC ZY/aksN6Hto6ZOfTkpSU6sxgD1hRIbCdPe77JoPwDmsutc5PSp2rt2k5SroDVJqNgXxS C+0mA/xIIDBWDBJNedNrJCEihzKh1bz3RXGnRKF9k0cgZ7ZfFtB/Tl/GnCCrF+31x5Vw SkbQ== 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=TshUlb9H7JI+8SPjqycRUvW4KmN5adW8RjdXomnjRTgBDfz6G0N9TcVyR5Del+kTQ8 CB0Cj0+Scnv+1xh7bqlG/Ip5GMIewr/ZZ6ckERLhKdfEpFNcrUk/R9tKX3HilhQDydz5 id1YUWz8Yjw54gS1lQBPSS0rlU4aDFP/f55vVkRHlrq36vVE0ZYRPRsg1w/B3t0Jmu6r Ei8xDBUeFmvVjoXjo2QPK4+u6ied/EhdqoBOM48J8HBODvOxFSxaqVkwACF2J0B4Gtd6 WnFiamPHTse7EUQR3lMisjdA4AjbTgYsZIctRruvlLmtGTs5HJOfPLMO4BTCUkhOpgVZ 92RA== X-Gm-Message-State: AOAM531mm7nTrZSSCRliCeTov65NBgFkWWI0JpxRW2eS0G9omi/tpXFn vmOKpeWRHLM/ZHgKLgR/i19/5w== X-Received: by 2002:a1c:7306:: with SMTP id d6mr18276656wmb.113.1593612810092; Wed, 01 Jul 2020 07:13:30 -0700 (PDT) Received: from zen.linaroharston ([51.148.130.216]) by smtp.gmail.com with ESMTPSA id v18sm7970236wrv.49.2020.07.01.07.13.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jul 2020 07:13:27 -0700 (PDT) Received: from zen.lan (localhost [127.0.0.1]) by zen.linaroharston (Postfix) with ESMTP id 2861B1FF9C; Wed, 1 Jul 2020 14:56:54 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Subject: [PATCH v4 13/40] tests/vm: Add workaround to consume console Date: Wed, 1 Jul 2020 14:56:25 +0100 Message-Id: <20200701135652.1366-14-alex.bennee@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200701135652.1366-1-alex.bennee@linaro.org> References: <20200701135652.1366-1-alex.bennee@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::342; envelope-from=alex.bennee@linaro.org; helo=mail-wm1-x342.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()