#!/usr/bin/env python # # Copyright (C) 2017 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import os import sys import unittest try: from unittest import mock except ImportError: import mock from host_controller.build import build_flasher class BuildFlasherTest(unittest.TestCase): """Tests for Build Flasher""" @mock.patch( "host_controller.build.build_flasher.android_device") @mock.patch("host_controller.build.build_flasher.os") def testFlashGSIBadPath(self, mock_os, mock_class): flasher = build_flasher.BuildFlasher("thisismyserial") mock_os.path.exists.return_value = False with self.assertRaises(ValueError) as cm: flasher.FlashGSI("notexists.img") self.assertEqual("Couldn't find system image at notexists.img", str(cm.exception)) @mock.patch( "host_controller.build.build_flasher.android_device") @mock.patch("host_controller.build.build_flasher.os") def testFlashGSISystemOnly(self, mock_os, mock_class): mock_device = mock.Mock() mock_class.AndroidDevice.return_value = mock_device flasher = build_flasher.BuildFlasher("thisismyserial") mock_os.path.exists.return_value = True flasher.FlashGSI("exists.img") mock_device.fastboot.erase.assert_any_call('system') mock_device.fastboot.flash.assert_any_call('system', 'exists.img') mock_device.fastboot.erase.assert_any_call('metadata') @mock.patch( "host_controller.build.build_flasher.android_device") def testFlashall(self, mock_class): mock_device = mock.Mock() mock_class.AndroidDevice.return_value = mock_device flasher = build_flasher.BuildFlasher("thisismyserial") flasher.Flashall("path/to/dir") mock_device.fastboot.flashall.assert_called_with() @mock.patch( "host_controller.build.build_flasher.android_device") def testEmptySerial(self, mock_class): mock_class.list_adb_devices.return_value = ['oneserial'] flasher = build_flasher.BuildFlasher(serial="") mock_class.AndroidDevice.assert_called_with( "oneserial", device_callback_port=-1) @mock.patch( "host_controller.build.build_flasher.android_device") def testFlashUsingCustomBinary(self, mock_class): """Test for FlashUsingCustomBinary(). Tests if the method passes right args to customflasher and the execution path of the method. """ mock_device = mock.Mock() mock_class.AndroidDevice.return_value = mock_device flasher = build_flasher.BuildFlasher("mySerial", "myCustomBinary") mock_device.isBootloaderMode = False device_images = {"img": "my/image/path"} flasher.FlashUsingCustomBinary(device_images, "reboottowhatever", ["myarg"]) mock_device.adb.reboot.assert_called_with("reboottowhatever") mock_device.customflasher.ExecCustomFlasherCmd.assert_called_with( "myarg", "my/image/path") mock_device.reset_mock() mock_device.isBootloaderMode = True device_images["img"] = "my/other/image/path" flasher.FlashUsingCustomBinary(device_images, "reboottowhatever", ["myarg"]) mock_device.adb.reboot.assert_not_called() mock_device.customflasher.ExecCustomFlasherCmd.assert_called_with( "myarg", "my/other/image/path") @mock.patch("host_controller.build.build_flasher.android_device") @mock.patch("host_controller.build.build_flasher.logging") @mock.patch("host_controller.build.build_flasher.cmd_utils") @mock.patch("host_controller.build.build_flasher.os") @mock.patch("host_controller.build.build_flasher.open", new_callable=mock.mock_open) def testRepackageArtifacts(self, mock_open, mock_os, mock_cmd_utils, mock_logger, mock_class): """Test for RepackageArtifacts(). Tests if the method executes in correct path regarding given arguments. """ mock_device = mock.Mock() mock_class.AndroidDevice.return_value = mock_device flasher = build_flasher.BuildFlasher("serial") device_images = { "system.img": "/my/tmp/path/system.img", "vendor.img": "/my/tmp/path/vendor.img" } mock_cmd_utils.ExecuteOneShellCommand.return_value = "", "", 0 ret = flasher.RepackageArtifacts(device_images, "tar.md5") self.assertEqual(ret, True) self.assertIsNotNone(device_images["img"]) ret = flasher.RepackageArtifacts(device_images, "incorrect") self.assertFalse(ret) mock_logger.error.assert_called_with( "Please specify correct repackage form: --repackage=incorrect") if __name__ == "__main__": unittest.main()