blob: 34ce7fb0933b5529f708c9aa9d53340aafd004a4 [file] [log] [blame]
#!/usr/bin/python
#
# Copyright 2014 Google Inc. All Rights Reserved
import download_images
from utils import command_executer
from utils import logger
import os
import mock
import unittest
MOCK_LOGGER = logger.GetLogger(log_dir="", mock=True)
class ImageDownloaderTestcast(unittest.TestCase):
@mock.patch.object(os, 'makedirs')
@mock.patch.object(os.path, 'exists')
def test_download_image(self, mock_path_exists, mock_mkdirs):
# Set mock and test values.
mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
test_chroot = "/usr/local/home/chromeos"
test_build_id = "lumpy-release/R36-5814.0.0"
downloader = download_images.ImageDownloader(logger_to_use=MOCK_LOGGER,
cmd_exec=mock_cmd_exec)
# Set os.path.exists to always return False and run downloader
mock_path_exists.return_value = False
downloader._DownloadImage(test_chroot, test_build_id)
# Verify os.path.exists was called twice, with proper arguments.
self.assertEqual(mock_path_exists.call_count, 2)
mock_path_exists.assert_called_with('/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0/chromiumos_test_image.bin')
mock_path_exists.assert_any_call('/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0')
# Verify we called os.mkdirs
self.assertEqual(mock_mkdirs.call_count, 1)
mock_mkdirs.assert_called_with('/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0')
# Verify we called ChrootRunCommand once, with proper arguments.
self.assertEqual (mock_cmd_exec.ChrootRunCommand.call_count, 1)
mock_cmd_exec.ChrootRunCommand.assert_called_with('/usr/local/home/chromeos', 'gsutil cp gs://chromeos-image-archive/lumpy-release/R36-5814.0.0/chromiumos_test_image.tar.xz /tmp/lumpy-release/R36-5814.0.0')
# Reset the velues in the mocks; set os.path.exists to always return True.
mock_path_exists.reset_mock()
mock_cmd_exec.reset_mock()
mock_path_exists.return_value = True
# Run downloader
downloader._DownloadImage(test_chroot, test_build_id)
# Verify os.path.exists was called twice, with proper arguments.
self.assertEqual(mock_path_exists.call_count, 2)
mock_path_exists.assert_called_with('/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0/chromiumos_test_image.bin')
mock_path_exists.assert_any_call('/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0')
# Verify we made no RunCommand or ChrootRunCommand calls (since
# os.path.exists returned True, there was no work do be done).
self.assertEqual (mock_cmd_exec.RunCommand.call_count, 0)
self.assertEqual (mock_cmd_exec.ChrootRunCommand.call_count, 0)
@mock.patch.object(os.path, 'exists')
def test_uncompress_image(self, mock_path_exists):
# set mock and test values.
mock_cmd_exec = mock.Mock(spec=command_executer.CommandExecuter)
test_chroot = '/usr/local/home/chromeos'
test_build_id = 'lumpy-release/R36-5814.0.0'
downloader = download_images.ImageDownloader(logger_to_use=MOCK_LOGGER,
cmd_exec=mock_cmd_exec)
# Set os.path.exists to always return False and run uncompress.
mock_path_exists.return_value = False
downloader._UncompressImage(test_chroot, test_build_id)
# Verify os.path.exists was called once, with correct arguments.
self.assertEqual (mock_path_exists.call_count, 1)
mock_path_exists.assert_called_with('/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0/chromiumos_test_image.bin')
# Verify ChrootRunCommand was called, with correct arguments.
self.assertEqual (mock_cmd_exec.ChrootRunCommand.call_count, 1)
mock_cmd_exec.ChrootRunCommand.assert_called_with('/usr/local/home/chromeos', 'cd /tmp/lumpy-release/R36-5814.0.0 ;unxz chromiumos_test_image.tar.xz; tar -xvf chromiumos_test_image.tar')
# Set os.path.exists to always return False and run uncompress.
mock_path_exists.reset_mock()
mock_cmd_exec.reset_mock()
mock_path_exists.return_value = True
downloader._UncompressImage(test_chroot, test_build_id)
# Verify os.path.exists was called once, with correct arguments.
self.assertEqual (mock_path_exists.call_count, 1)
mock_path_exists.assert_called_with('/usr/local/home/chromeos/chroot/tmp/lumpy-release/R36-5814.0.0/chromiumos_test_image.bin')
# Verify ChrootRunCommand was not called.
self.assertEqual (mock_cmd_exec.ChrootRunCommand.call_count, 0)
def test_run(self):
# Set test arguments
test_chroot = "/usr/local/home/chromeos"
test_build_id = "remote/lumpy/latest-dev"
# Set values to test/check.
self.called_download_image = False
self.called_uncompress_image = False
self.called_get_build_id = False
# Define fake stub functions for Run to call
def FakeGetBuildID(unused_root, unused_xbuddy_label):
self.called_get_build_id = True
return 'lumpy-release/R36-5814.0.0'
def GoodDownloadImage(root, build_id):
self.called_download_image = True
return "chromiumos_test_image.bin"
def BadDownloadImage(root, build_id):
self.called_download_image = True
return None
def FakeUncompressImage(root, build_id):
self.called_uncompress_image = True
return 0
# Initialize downloader
downloader = download_images.ImageDownloader(logger_to_use=MOCK_LOGGER)
# Set downloader to call fake stubs.
downloader._GetBuildID = FakeGetBuildID
downloader._UncompressImage = FakeUncompressImage
downloader._DownloadImage = GoodDownloadImage
# Call Run.
downloader.Run(test_chroot, test_build_id)
# Make sure it called both _DownloadImage and _UncompressImage
self.assertTrue (self.called_download_image)
self.assertTrue (self.called_uncompress_image)
# Reset values; Now use fake stub that simulates DownloadImage failing.
self.called_download_image = False
self.called_uncompress_image = False
downloader._DownloadImage = BadDownloadImage
# Call Run again.
downloader.Run (test_chroot, test_build_id)
# Verify that UncompressImage was not called, since _DownloadImage "failed"
self.assertTrue (self.called_download_image)
self.assertFalse (self.called_uncompress_image)
if __name__ == '__main__':
unittest.main()