From patchwork Fri Jun 26 18:13:38 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: 191892 Delivered-To: patch@linaro.org Received: by 2002:a54:3249:0:0:0:0:0 with SMTP id g9csp648041ecs; Fri, 26 Jun 2020 11:19:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwzBF8zyZr9i7QfuJJScfQbsGNyNclGlU5Lm4FsksV8GRE1NIk1YCV08jyUt9HlEPkUZp+H X-Received: by 2002:a25:e747:: with SMTP id e68mr6662029ybh.341.1593195558869; Fri, 26 Jun 2020 11:19:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593195558; cv=none; d=google.com; s=arc-20160816; b=CDf0NoBweyoUtmpFqPnJqZojeNuirkaWEM9AoR6PhGZWgA5FgKry1zDQkzAabmIB1K kVBje69a+K7G9KXy7UxR2MCp9aor5AMk4xf7vqpBJOdkPNrRELouLwytTnhN/Px+9Eup nCHmnxjOF9lizbgTxhdFTcoIEAgusRjkLDiZzfTRT6OFrsbmjfUqFWqCodmhWY0z6mcE QYQLi0dmrbKxdZTW6L8PoGQ7YeVj5cjmxJ9v3MaUNxi9Bhq6bOMvLEaeSCcemOaM7wH6 N/ETEi0MKTiWeFmkRWpWH43cSHoVO1ntf/D7vrgznR0YeyFN7DQz+UWGXrdgTksN9/KQ Yq7w== 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=hCNdxXEecmX4D8C/P1P6TdWf1Wvyw63qlMhOqTZYkvfDDkYJ22i2nO622bnQogPu/q gIsJr6dI1n8Q6CmkXbNdyQcCd9qWtLhEu00/ts8CbC2boWg5os/yzubmL+a7/SUUDHU3 EIUIJqtz2ZDrZzpWe6oer+/3GxiJPDajvcwiU+HnMxrQvumi+ccY+E/qvIqpfwktUyAc WKXfmX9amU7hYKf9Arf3f2eLxkmf7AYp6NGQVnF+pC3tajC95W8Fcfh52oL8OVIuhaE2 yY7xZfUAr7DcTOKzrQayHTZXhOlWgX8SYt/W8lVppTDqKUDlO5EzxH/c6uvSNqgk+cfR S83g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=XrDg1n0P; 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 x13si4092333ybt.333.2020.06.26.11.19.18 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 26 Jun 2020 11:19:18 -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=XrDg1n0P; 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]:55388 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1joswY-0005cH-9A for patch@linaro.org; Fri, 26 Jun 2020 14:19:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56088) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1josrk-0007Sm-Vy for qemu-devel@nongnu.org; Fri, 26 Jun 2020 14:14:21 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:40011) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1josrg-0001JZ-UO for qemu-devel@nongnu.org; Fri, 26 Jun 2020 14:14:20 -0400 Received: by mail-wr1-x436.google.com with SMTP id h5so10349777wrc.7 for ; Fri, 26 Jun 2020 11:14:16 -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=XrDg1n0PjAQT78IkjIUyr+ccwBzU3p7Nwprz9mjAFr4Q/47+kfrGvrnRqZnQ1P4cSU 26dBXNoyEzc42mO4a0SVTbZ+lNE4p65eEOZ+BDOGDc/B+aJBSf30a9irhhWPpoHgaTgg 2GWz92w+vMthbopZOH7J0OkIRNP1mPcOaOozWx65aO+SL9b81hRdCDNE7weJHfyJ9q20 +sMG3owew+bMLA+DwG8okzHlFPsqFWWxwSdE+jibo3HqvQsHwztjippbCBOwzwOtKLHH Ad3Te2Bgvfq/pB9/VPoVrFaO1P04DXLsBC/mrUA7wUM4QMMaBtedtqYDLN8DOCy/iu7+ Faog== 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=qkkVezgM6L/ub8or6qEWpE7rij2BmQ7yiqm63okjnF2jGcNPb9UgAt/c1pXSAzl3ee aVCm+w5T2aioTHGw9jhbpOBjaJtVf1f16Lkoo+v8tCqFfiuzjiFCSG0VePxQdxAZxwPg HRnKnTho84HdaxiAsHJAi4ugEa1arTDY0KM6euE2bUC3Xs6GkCegxAMuK3qc3Q17/gyA rI6r8PDZr3cijof3pbUqZum7UIZdOk6L8hGmRpZqyOdpg9KH0hRG+j9rGJ291oyE3AwA Knv5Ppobv05L39803ExkVJhEJvZKHVwEqw/ifQ5ECTW9q7mG5qGKRSPwk80xcajrrwBQ 1BEg== X-Gm-Message-State: AOAM531xdPWr/tjywqW9Te60EDUCcK78btVdX46ioff3kwAG1SLLMI9B Q+sLlYg6dMw5kuWBQOgvnWCQzA== X-Received: by 2002:adf:e9c4:: with SMTP id l4mr5248339wrn.9.1593195255648; Fri, 26 Jun 2020 11:14:15 -0700 (PDT) Received: from zen.linaroharston ([51.148.130.216]) by smtp.gmail.com with ESMTPSA id r10sm20651346wrm.17.2020.06.26.11.14.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jun 2020 11:14:10 -0700 (PDT) Received: from zen.lan (localhost [127.0.0.1]) by zen.linaroharston (Postfix) with ESMTP id E489B1FF7E; Fri, 26 Jun 2020 19:13:59 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Subject: [PATCH v3 11/30] tests/vm: Add workaround to consume console Date: Fri, 26 Jun 2020 19:13:38 +0100 Message-Id: <20200626181357.26211-12-alex.bennee@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200626181357.26211-1-alex.bennee@linaro.org> References: <20200626181357.26211-1-alex.bennee@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::436; envelope-from=alex.bennee@linaro.org; helo=mail-wr1-x436.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()