blob: 7a6161f6aa4d60f6128263909facea4af08e58a0 [file] [log] [blame]
Wai-Hong Tam0ed9fe12019-05-23 11:00:58 -07001# Copyright 2015 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4#
5# Expects to be run in an environment with sudo and no interactive password
6# prompt, such as within the Chromium OS development chroot.
7
8
9"""This file provides core logic for pdtester verify/repair process."""
10
11from autotest_lib.server.hosts import servo_host
12
13
14# Names of the host attributes in the database that represent the values for
15# the pdtester_host and pdtester_port for a PD tester connected to the DUT.
16PDTESTER_HOST_ATTR = 'pdtester_host'
17PDTESTER_PORT_ATTR = 'pdtester_port'
Wai-Hong Tam16e5edb2019-09-17 16:10:07 -070018SERVO_HOST_ATTR = servo_host.SERVO_HOST_ATTR
19SERVO_PORT_ATTR = servo_host.SERVO_PORT_ATTR
Wai-Hong Tam0ed9fe12019-05-23 11:00:58 -070020
21
22def make_pdtester_hostname(dut_hostname):
23 """Given a DUT's hostname, return the hostname of its PD tester.
24
25 @param dut_hostname: hostname of a DUT.
26
27 @return hostname of the DUT's PD tester.
28
29 """
30 host_parts = dut_hostname.split('.')
31 host_parts[0] = host_parts[0] + '-pdtester'
32 return '.'.join(host_parts)
33
34
35class PDTesterHost(servo_host.ServoHost):
36 """Host class for a host that controls a PDTester object."""
37
38
Wai-Hong Tam16e5edb2019-09-17 16:10:07 -070039 def _initialize(self, pdtester_host='localhost', pdtester_port=9999,
40 *args, **dargs):
Wai-Hong Tam0ed9fe12019-05-23 11:00:58 -070041 """Initialize a PDTesterHost instance.
42
43 A PDTesterHost instance represents a host that controls a PD tester.
44
45 @param pdtester_host: Name of the host where the servod process
46 is running.
47 @param pdtester_port: Port the servod process is listening on.
48
49 """
50 super(PDTesterHost, self)._initialize(pdtester_host, pdtester_port,
Wai-Hong Tam16e5edb2019-09-17 16:10:07 -070051 *args, **dargs)
Wai-Hong Tam0ed9fe12019-05-23 11:00:58 -070052 self.connect_servo()
53
54
Wai-Hong Tam16e5edb2019-09-17 16:10:07 -070055def create_pdtester_host(pdtester_args, servo_args):
Wai-Hong Tam0ed9fe12019-05-23 11:00:58 -070056 """Create a PDTesterHost object used to access pdtester servo
57
58 The `pdtester_args` parameter is a dictionary specifying optional
59 PDTester client parameter overrides (i.e. a specific host or port).
60 When specified, the caller requires that an exception be raised
61 unless both the PDTesterHost and the PDTester are successfully
62 created.
63
64 @param pdtester_args: A dictionary that contains args for creating
65 a PDTesterHost object,
Wai-Hong Tam16e5edb2019-09-17 16:10:07 -070066 e.g. {'pdtester_host': '172.11.11.111',
Wai-Hong Tam0ed9fe12019-05-23 11:00:58 -070067 'pdtester_port': 9999}.
Wai-Hong Tam16e5edb2019-09-17 16:10:07 -070068 @param servo_args: A dictionary that contains args for creating
69 a ServoHost object,
70 e.g. {'servo_host': '172.11.11.111',
71 'servo_port': 9999}.
72 @returns: A PDTesterHost object or None.
Wai-Hong Tam0ed9fe12019-05-23 11:00:58 -070073
74 """
Wai-Hong Tam16e5edb2019-09-17 16:10:07 -070075 # None means PDTester is not required to run a test.
Wai-Hong Tam0ed9fe12019-05-23 11:00:58 -070076 if pdtester_args is None:
77 return None
Wai-Hong Tam16e5edb2019-09-17 16:10:07 -070078
79 # If an user doesn't pass the PDTester info, fall back to use the servo
80 # info. Usually we use Servo v4 as PDTester, so make it default.
81 if (PDTESTER_HOST_ATTR not in pdtester_args and
82 SERVO_HOST_ATTR in servo_args):
83 pdtester_args[PDTESTER_HOST_ATTR] = servo_args[SERVO_HOST_ATTR]
84
85 if (PDTESTER_PORT_ATTR not in pdtester_args and
86 SERVO_PORT_ATTR in servo_args):
87 pdtester_args[PDTESTER_PORT_ATTR] = servo_args[SERVO_PORT_ATTR]
88
89 return PDTesterHost(**pdtester_args)