blob: 2a15284a24c3c2b9896302506b11efe486719740 [file] [log] [blame] [edit]
# Copyright (c) 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""These are convenience functions that ideally are never run, but in case of
problems collect additional information about some part of the system (both
DUT and test-driving host.
Given this sporadic nature, this is not wrapped in a class but merely a
collection of functions that get the necessary inputs at the time when they're
called and need them.
The functions return a (multi-line) string that can be attached to test errors
and similar places that end up in the logs."""
def collect_usb_state(servo):
"""Collect status on USB ports and attached devices, USB mass storage in
particular.
_servo is a server.cros.servo object that can call into the DUT and query
elements.
collects the DUT-side output of :
- `lsusb` and `lsusb -t` output to learn about the topology;
- `ls -lv /dev/sd*` to learn which storage devices are known to the OS and
what partition scheme is assumed by the kernel (-v to sort numerically);
- `fdisk -l` for the partitioning as reported in GPT/MBR
Note that the return value begins with a newline.
"""
lines = []
for cmd in [
'lsusb',
'lsusb -t',
'ls -lv /dev/sd*',
'fdisk -l'
]:
output = servo.system_output(cmd, ignore_status=True)
lines.append('')
lines.append('%s:' % cmd)
lines.extend(' %s' % line for line in output.splitlines())
return '\n'.join(lines)
# Add more collect functions here as necessary