[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 11/41] tests/vm: Add workaround to consume console
From: |
Alex Bennée |
Subject: |
[PULL 11/41] tests/vm: Add workaround to consume console |
Date: |
Tue, 7 Jul 2020 08:08:28 +0100 |
From: Robert Foley <robert.foley@linaro.org>
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 <robert.foley@linaro.org>
Reviewed-by: Peter Puhov <peter.puhov@linaro.org>
Acked-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200601211421.1277-10-robert.foley@linaro.org>
Message-Id: <20200701135652.1366-14-alex.bennee@linaro.org>
diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
index 39f918a430a5..f21948c46a52 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 f716798b405e..04d083409a5f 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()
--
2.20.1
- [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine, (continued)
- [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine, Alex Bennée, 2020/07/07
- Re: [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine, John Snow, 2020/07/10
- Re: [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine, Robert Foley, 2020/07/11
- Re: [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine, Alex Bennée, 2020/07/11
- Re: [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine, John Snow, 2020/07/13
- Re: [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine, Philippe Mathieu-Daudé, 2020/07/13
- Re: [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine, Eduardo Habkost, 2020/07/13
[PULL 12/41] tests/vm: switch from optsparse to argparse, Alex Bennée, 2020/07/07
[PULL 14/41] tests/docker: check for an parameters not empty string, Alex Bennée, 2020/07/07
[PULL 15/41] tests/docker: change tag naming scheme of our images, Alex Bennée, 2020/07/07
[PULL 11/41] tests/vm: Add workaround to consume console,
Alex Bennée <=
[PULL 13/41] tests/vm: allow us to take advantage of MTTCG, Alex Bennée, 2020/07/07
[PULL 29/41] tests/tcg: add more default compilers to configure.sh, Alex Bennée, 2020/07/07
[PULL 41/41] tests/qht-bench: Adjust threshold computation, Alex Bennée, 2020/07/07
[PULL 28/41] gitlab: add acceptance testing to system builds, Alex Bennée, 2020/07/07
[PULL 31/41] linux-user/elfload: use MAP_FIXED_NOREPLACE in pgb_reserved_va, Alex Bennée, 2020/07/07
[PULL 20/41] gitlab: convert jobs to use custom built containers, Alex Bennée, 2020/07/07
[PULL 39/41] travis.yml: Test also the other targets on s390x, Alex Bennée, 2020/07/07
[PULL 18/41] gitlab: introduce explicit "container" and "build" stages, Alex Bennée, 2020/07/07
[PULL 16/41] .gitignore: un-ignore .gitlab-ci.d, Alex Bennée, 2020/07/07
[PULL 17/41] gitlab-ci: Fix the change rules after moving the YML files, Alex Bennée, 2020/07/07