Don't make any servo XMLPRC calls during Servo contructor.
In order to test servo, it can be necessary to create a servo object
for a servo host where servod isn't working. This changes the Servo
constructor not to fail in that case, allowing the callers to have
control over when and how to test for a working servod.
BUG=chromium:388458
TEST=run various test cases on a local instance
Change-Id: I8e5c51be2287ec4b93a6519144540c90846b88d4
Reviewed-on: https://chromium-review.googlesource.com/211875
Tested-by: Richard Barnette <jrbarnette@chromium.org>
Reviewed-by: Dan Shi <dshi@chromium.org>
Reviewed-by: Yusuf Mohsinally <mohsinally@chromium.org>
Commit-Queue: Richard Barnette <jrbarnette@chromium.org>
diff --git a/server/cros/servo/servo.py b/server/cros/servo/servo.py
index 45af3f8..2e55df5 100644
--- a/server/cros/servo/servo.py
+++ b/server/cros/servo/servo.py
@@ -165,29 +165,8 @@
self._servo_serial = servo_serial
self._server = servo_host.get_servod_server_proxy()
self._power_state = _PowerStateController(self)
-
- # a string, showing what interface (host or dut) the USB device is
- # connected to.
self._usb_state = None
- self.set('dut_hub_pwren', 'on')
- self.set('usb_mux_oe1', 'on')
- self.switch_usbkey('off')
-
- # Initialize firmware programmer
- if self.get_version() == "servo_v2":
- # Lab drones do not necessarily contain hdctools and the
- # initialization of the firmware programmer raises an exception.
- # We need to move the programmer code over to hctools,
- # see chromium:381718.
- try:
- self._programmer = firmware_programmer.ProgrammerV2(self)
- except firmware_programmer.ProgrammerError:
- logging.warning(
- "No firmware programmer initialized for servoV2")
- self._programmer = None
- else:
- logging.warning("No firmware programmer for servo version: %s",
- self.get_version())
+ self._programmer = None
@property
@@ -227,6 +206,9 @@
initialization.
"""
self._server.hwinit()
+ self.set('dut_hub_pwren', 'on')
+ self.set('usb_mux_oe1', 'on')
+ self.switch_usbkey('off')
if cold_reset:
self._power_state.reset()
@@ -641,6 +623,19 @@
args=args).stdout.strip()
+ def _initialize_programmer(self):
+ if self._programmer:
+ return
+ # Initialize firmware programmer
+ servo_version = self.get_version()
+ if servo_version == 'servo_v2':
+ self._programmer = firmware_programmer.ProgrammerV2(self)
+ else:
+ raise error.TestError(
+ 'No firmware programmer for servo version: %s' %
+ servo_version)
+
+
def program_bios(self, image):
"""Program bios on DUT with given image.
@@ -648,8 +643,7 @@
on the DUT.
"""
- if not self._programmer:
- raise error.TestError('Firmware programmer is not set')
+ self._initialize_programmer()
if not self.is_localhost():
image = self._scp_image(image)
self._programmer.program_bios(image)
@@ -662,8 +656,7 @@
on the DUT.
"""
- if not self._programmer:
- raise error.TestError('Firmware programmer is not set')
+ self._initialize_programmer()
if not self.is_localhost():
image = self._scp_image(image)
self._programmer.program_ec(image)