1#!/usr/bin/env python3 2# 3# Copyright (C) 2023 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16# 17"""Tests for the fastboot command line utility. 18""" 19 20import re 21import subprocess 22import unittest 23 24 25class DevicesTest(unittest.TestCase): 26 """Tests for `fastboot devices`.""" 27 28 29 def test_devices(self): 30 """Ensure that the format of `fastboot devices` does not change. 31 32 `fastboot devices` should alternate between a line containing the 33 device's serial number and fastboot state and an empty line 34 """ 35 output = subprocess.check_output(["fastboot", "devices"]) 36 37 previous_line_was_empty = True 38 for line in output.decode().splitlines(): 39 if previous_line_was_empty: 40 if not re.match(r"[a-zA-Z\d]+\s+(bootloader|fastbootd)", line): 41 self.fail("%s does not match the expected format <serial no>\\s+(bootloader|fastbootd)" % line) 42 previous_line_was_empty = False 43 else: 44 if line: 45 self.fail("Expected an empty line. Received '%s'" % line) 46 previous_line_was_empty = True 47 48 if len(output) == 0: 49 self.fail("Output is empty. Are any devices connected?") 50 51 52if __name__ == '__main__': 53 unittest.main() 54