| # Copyright 2016 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. |
| |
| """This class defines the TestBed Label detection classes.""" |
| |
| import common |
| |
| from autotest_lib.server.cros.dynamic_suite import constants |
| from autotest_lib.server.hosts import adb_label |
| from autotest_lib.server.hosts import base_label |
| |
| |
| class ADBDeviceLabels(base_label.StringLabel): |
| """Return a list of the labels gathered from the devices connected.""" |
| |
| # _NAME is omitted because the labels generated are full labels. |
| # The generated labels are from an adb device, so we just want to grab the |
| # possible labels from ADBLabels. |
| _LABEL_LIST = adb_label.ADB_LABELS |
| |
| # pylint: disable=missing-docstring |
| def generate_labels(self, testbed): |
| labels = [] |
| for adb_device in testbed.get_adb_devices().values(): |
| labels.extend(adb_device.get_labels()) |
| # Currently the board label will need to be modified for each adb |
| # device. We'll get something like 'board:android-shamu' and |
| # we'll need to update it to 'board:android-shamu-1'. Let's store all |
| # the labels in a dict and keep track of how many times we encounter |
| # it, that way we know what number to append. |
| board_label_dict = {} |
| updated_labels = set() |
| for label in labels: |
| # Update the board labels |
| if label.startswith(constants.BOARD_PREFIX): |
| # Now let's grab the board num and append it to the board_label. |
| board_num = board_label_dict.setdefault(label, 0) + 1 |
| board_label_dict[label] = board_num |
| updated_labels.add('%s-%d' % (label, board_num)) |
| else: |
| # We don't need to mess with this. |
| updated_labels.add(label) |
| return list(updated_labels) |
| |
| |
| TESTBED_LABELS = [ |
| ADBDeviceLabels(), |
| ] |