blob: 29df107f8a24e3f89ffd821d6ade2a8e36082f22 [file] [log] [blame]
# Copyright 2020 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.
"""Unit tests for android_installer.py"""
import unittest
import unittest.mock
import android_installer
class AndroidInstallerCallerTest(unittest.TestCase):
"""Unit tests for AndroidInstallerCaller"""
def test_from_str(self):
self.assertRaises(KeyError,
lambda: android_installer.AndroidInstallerCaller.from_str(
'invalid_caller'))
class AndroidInstallerTest(unittest.TestCase):
"""Unit tests for AndroidInstaller"""
def test_env(self):
# Test --env with '=' in its value
self.assertEqual(android_installer.AndroidInstaller(
['--env', 'a=b=c', '--caller', 'ebuild_src_compile']).env, {'a': 'b=c'})
# Test --env with no value
self.assertEqual(android_installer.AndroidInstaller(
['--env', 'a=', '--caller', 'ebuild_src_compile']).env, {'a': ''})
# Test --env with no =
self.assertRaises(ValueError, lambda: android_installer.AndroidInstaller(
['--env', 'a', '--caller', 'ebuild_src_compile']))
# Test --env with empty key
self.assertRaises(ValueError, lambda: android_installer.AndroidInstaller(
['--env', '=a', '--caller', 'ebuild_src_compile']))
# Test that the later argument will overwrite the former one.
self.assertEqual(android_installer.AndroidInstaller(
['--env', 'a=1', '--env', 'a=2', '--caller', 'ebuild_src_compile']).env,
{'a': '2'})
# Test when no --env is given.
self.assertEqual(android_installer.AndroidInstaller(
['--caller', 'ebuild_src_compile']).env, {})
def test_use(self):
# Test enabling use flag
self.assertEqual(android_installer.AndroidInstaller(
['--use', '+x', '--caller', 'ebuild_src_compile']).use, {'x': True})
# Test disabling use flag
self.assertEqual(android_installer.AndroidInstaller(
['--use=-x', '--caller', 'ebuild_src_compile']).use, {'x': False})
# Test invalid use flag
self.assertRaises(ValueError, lambda: android_installer.AndroidInstaller(
['--use', '+x', '--use=*x', '--caller', 'ebuild_src_compile']))
# Test that the later argument will overwrite the former one.
self.assertEqual(android_installer.AndroidInstaller(
['--use', '+x', '--use=-x', '--caller', 'ebuild_src_compile']).use,
{'x': False})
# Test when no use flags are given.
self.assertEqual(android_installer.AndroidInstaller(
['--caller', 'ebuild_src_compile']).use, {})
def test_caller(self):
# Test --caller ebuild_src_compile
self.assertEqual(
android_installer.AndroidInstaller(
['--caller', 'ebuild_src_compile']).caller,
android_installer.AndroidInstallerCaller.EBUILD_SRC_COMPILE)
# Test invalid caller
self.assertRaises(SystemExit, lambda: android_installer.AndroidInstaller(
['--caller', 'invalid_caller']))
# Test when caller is not specified
self.assertRaises(ValueError, lambda: android_installer.AndroidInstaller(
[]))
def test_main(self):
all_fn = ['ebuild_src_compile', 'ebuild_src_install', 'ebuild_src_test',
'board_specific_setup', 'board_specific_setup_test']
def test_called(caller, called_fn):
mock = unittest.mock.Mock(android_installer.AndroidInstaller)
mock.caller = android_installer.AndroidInstallerCaller.from_str(caller)
android_installer.AndroidInstaller.main(mock)
for fn in all_fn:
if fn in called_fn:
mock.__getattr__(fn).assert_called_once()
else:
mock.__getattr__(fn).assert_not_called()
for caller in android_installer.AndroidInstallerCaller.allowed_callers():
if caller != 'push_to_device':
self.assertIn(caller, all_fn)
test_called(caller, [caller])
test_called('push_to_device', all_fn)
if __name__ == '__main__':
unittest.main()