| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # Copyright 2017 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. |
| |
| """The unit test suite for the CrosConfigHost CLI tool.""" |
| |
| from __future__ import print_function |
| |
| import os |
| import subprocess |
| import unittest |
| |
| CLI_FILE = 'python -m cros_config_host.cros_config_host' |
| YAML_FILE = '../test_data/test.yaml' |
| |
| |
| class CrosConfigHostTest(unittest.TestCase): |
| """Tests for master configuration in yaml format""" |
| def setUp(self): |
| self.conf_file = os.path.join(os.path.dirname(__file__), YAML_FILE) |
| |
| # Common tests shared between the YAML and FDT implementations. |
| def CheckManyLinesWithoutSpaces(self, output, lines=3): |
| # Expect there to be a few lines |
| self.assertGreater(len(output.split()), lines) |
| # Expect each line to not have spaces in it |
| for line in output.split(): |
| self.assertFalse(' ' in line) |
| self.assertNotEqual(line[-1:], ' ') |
| # Expect the last thing in the output to be a newline |
| self.assertEqual(output[-1:], os.linesep) |
| |
| def CheckManyLines(self, output, lines=3): |
| # Expect there to be a few lines |
| self.assertGreater(len(output.split()), lines) |
| # Expect each line to not end in space |
| for line in output.split(): |
| self.assertNotEqual(line[-1:], ' ') |
| # Expect the last thing in the output to be a newline |
| self.assertEqual(output[-1:], os.linesep) |
| |
| def testListModels(self): |
| call_args = '{} -c {} list-models'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.CheckManyLinesWithoutSpaces(output, lines=2) |
| |
| def testListModelsWithFilter(self): |
| call_args = '{} -c {} --model=another list-models'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.assertEqual('another\n', output) |
| |
| def testListModelsWithEnvFilter(self): |
| call_args = '{} -c {} list-models'.format( |
| CLI_FILE, self.conf_file).split() |
| os.environ['CROS_CONFIG_MODEL'] = 'another' |
| output = subprocess.check_output(call_args).decode('utf-8') |
| del os.environ['CROS_CONFIG_MODEL'] |
| self.assertEqual('another\n', output) |
| |
| def testGetPropSingle(self): |
| call_args = '{} -c {} --model=another get / wallpaper'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.assertEqual(output, 'default' + os.linesep) |
| |
| def testGetPropSingleWrongModel(self): |
| call_args = '{} -c {} --model=dne get / wallpaper'.format( |
| CLI_FILE, self.conf_file).split() |
| # Ensure that the expected error output does not appear. |
| output = subprocess.check_output( |
| call_args, stderr=subprocess.PIPE).decode('utf-8') |
| self.assertEqual(output, '') |
| |
| def testGetPropSingleWrongPath(self): |
| call_args = '{} -c {} --model=another get /dne wallpaper'.format( |
| CLI_FILE, self.conf_file).split() |
| with self.assertRaises(subprocess.CalledProcessError): |
| subprocess.run(call_args, check=True, stderr=subprocess.DEVNULL) |
| |
| def testGetPropSingleWrongProp(self): |
| call_args = '{} -c {} --model=another get / dne'.format( |
| CLI_FILE, self.conf_file).split() |
| with self.assertRaises(subprocess.CalledProcessError): |
| subprocess.run(call_args, check=True, stderr=subprocess.DEVNULL) |
| |
| def testGetFirmwareUris(self): |
| call_args = '{} -c {} get-firmware-uris'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.CheckManyLines(output) |
| |
| def testGetMosysPlatform(self): |
| call_args = '{} -c {} get-mosys-platform'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args, encoding='utf-8') |
| self.assertEqual(output, 'Some\n') |
| |
| def testGetFingerprintFirmwareROVersionFound(self): |
| call_args = '{} -c {} get-fpmcu-firmware-ro-version bloonchipper'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args, encoding='utf-8') |
| self.assertEqual(output, 'VERSION1\n') |
| |
| def testGetFingerprintFirmwareROVersionNotSpecified(self): |
| # If the ro-version is not specified, nothing is returned and the exit code |
| # should be 0. |
| call_args = '{} -c {} get-fpmcu-firmware-ro-version some_fpmcu'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args, encoding='utf-8') |
| self.assertEqual(output, '') |
| |
| def testGetTouchFirmwareFiles(self): |
| call_args = '{} -c {} get-touch-firmware-files'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.CheckManyLines(output, 10) |
| |
| def testGetAudioFiles(self): |
| call_args = '{} -c {} get-audio-files'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.CheckManyLines(output, 10) |
| |
| def testGetBluetoothFiles(self): |
| call_args = '{} -c {} get-bluetooth-files'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.CheckManyLines(output, 1) |
| |
| def testGetFirmwareBuildTargets(self): |
| call_args = '{} -c {} get-firmware-build-targets coreboot'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.CheckManyLines(output, 1) |
| |
| def testGetWallpaperFiles(self): |
| call_args = '{} -c {} get-wallpaper-files'.format( |
| CLI_FILE, self.conf_file).split() |
| output = subprocess.check_output(call_args).decode('utf-8') |
| self.CheckManyLines(output, 1) |
| |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |