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