blob: 39bab47010b140d542688aa0f238cae6ac1bed60 [file] [log] [blame]
#!/bin/env python
#
# Copyright (c) 2014 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 gsutil module."""
import logging
import mock
import unittest
import factory_common # pylint: disable=W0611
from cros.factory.tools import gsutil
# pylint: disable=C0301
FAKE_GS_LS_OUTPUT = (
"""gs://chromeos-releases/canary-channel/daisy-spring/4262.1.0/
gs://chromeos-releases/canary-channel/daisy-spring/4262.10.0/
gs://chromeos-releases/canary-channel/daisy-spring/4262.2.0/
gs://chromeos-releases/canary-channel/daisy-spring/5457.0.0/
gs://chromeos-releases/canary-channel/daisy-spring/5460.0.0/""").splitlines()
FAKE_GS_BUILDS_OUTPUT_FACTORY_BRANCH = (
"""gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-R29-4262.140.0-daisy-spring.zip
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-factory-R29-4262.140.0-daisy-spring.instructions
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-factory-R29-4262.140.0-daisy-spring.instructions.json
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-factory-R29-4262.140.0-daisy-spring.zip
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-firmware-R29-4262.140.0-daisy-spring.instructions
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-firmware-R29-4262.140.0-daisy-spring.instructions.json
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-firmware-R29-4262.140.0-daisy-spring.tar.bz2
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-recovery-R29-4262.140.0-daisy-spring.instructions
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-recovery-R29-4262.140.0-daisy-spring.instructions.json
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-recovery-R29-4262.140.0-daisy-spring.tar.xz
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/ChromeOS-test-R29-4262.140.0-daisy-spring.tar.xz
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/au-generator.zip
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos-hwqual-daisy_spring-R29-4262.140.0.tar.bz2
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_factory_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_factory_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_factory_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_firmware-spring.rw_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_firmware-spring.rw_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_firmware-spring.rw_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_firmware-spring_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_firmware-spring_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_firmware-spring_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_recovery_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_recovery_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/chromeos_4262.140.0_daisy-spring_recovery_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/debug-daisy-spring.tgz"""
).splitlines()
FAKE_GS_BUILDS_OUTPUT_FIRMWARE_BRANCH = (
"""
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/ChromeOS-firmware-R27-3824.120.0-daisy-spring-spring-mp.instructions
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/ChromeOS-firmware-R27-3824.120.0-daisy-spring-spring-mp.instructions.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/ChromeOS-firmware-R27-3824.120.0-daisy-spring.instructions
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/ChromeOS-firmware-R27-3824.120.0-daisy-spring.instructions.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/ChromeOS-firmware-R27-3824.120.0-daisy-spring.tar.bz2
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy.rw_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy.rw_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy.rw_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy.rw_canary-channel_premp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy.rw_canary-channel_premp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy.rw_canary-channel_premp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy_canary-channel_premp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy_canary-channel_premp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-daisy_canary-channel_premp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250.rw_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250.rw_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250.rw_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250.rw_canary-channel_premp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250.rw_canary-channel_premp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250.rw_canary-channel_premp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250_canary-channel_premp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250_canary-channel_premp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-smdk5250_canary-channel_premp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow.rw_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow.rw_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow.rw_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow.rw_canary-channel_premp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow.rw_canary-channel_premp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow.rw_canary-channel_premp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow_canary-channel_premp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow_canary-channel_premp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-snow_canary-channel_premp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring.rw_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring.rw_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring.rw_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring.rw_canary-channel_premp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring.rw_canary-channel_premp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring.rw_canary-channel_premp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring_canary-channel_mp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring_canary-channel_mp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring_canary-channel_mp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring_canary-channel_premp.bin
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring_canary-channel_premp.bin.json
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/chromeos_3824.120.0_daisy-spring_firmware-spring_canary-channel_premp.bin.md5
gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/debug-daisy-spring.tgz"""
).splitlines()
class GsutilUnittest(unittest.TestCase):
"""Unit tests for gsutil module."""
# pylint: disable=C0322
def setUp(self):
self.gsutil = gsutil.GSUtil('spring')
self.gs_url_pattern = self.gsutil.GetGSPrefix('canary')
@mock.patch.object(gsutil.gs.GSContext, 'LS',
return_value=FAKE_GS_LS_OUTPUT)
def testGetLatestBuildPath(self, mock_ls):
self.assertEquals(
'gs://chromeos-releases/canary-channel/daisy-spring/5460.0.0/',
self.gsutil.GetLatestBuildPath('canary'))
mock_ls.assert_called_with(self.gs_url_pattern)
self.assertEquals(
'gs://chromeos-releases/canary-channel/daisy-spring/4262.10.0/',
self.gsutil.GetLatestBuildPath('canary', '4262'))
mock_ls.assert_called_with(self.gs_url_pattern)
@mock.patch.object(gsutil.gs.GSContext, 'LS',
return_value=FAKE_GS_BUILDS_OUTPUT_FACTORY_BRANCH)
def testGetBinaryURI(self, mock_ls):
gs_dir = 'gs://chromeos-releases/canary-channel/daisy-spring/4262.140.0/'
self.assertEquals(
gs_dir + 'ChromeOS-factory-R29-4262.140.0-daisy-spring.zip',
self.gsutil.GetBinaryURI(gs_dir, self.gsutil.IMAGE_TYPES.factory))
mock_ls.assert_called_with(gs_dir)
self.assertEquals(
gs_dir + 'ChromeOS-firmware-R29-4262.140.0-daisy-spring.tar.bz2',
self.gsutil.GetBinaryURI(gs_dir, self.gsutil.IMAGE_TYPES.firmware))
self.assertEquals(
gs_dir + 'ChromeOS-recovery-R29-4262.140.0-daisy-spring.tar.xz',
self.gsutil.GetBinaryURI(gs_dir, self.gsutil.IMAGE_TYPES.recovery))
mock_ls.assert_called_with(gs_dir)
self.assertEquals(
gs_dir + 'chromeos_4262.140.0_daisy-spring_' +
'factory_canary-channel_mp.bin',
self.gsutil.GetBinaryURI(gs_dir, self.gsutil.IMAGE_TYPES.factory,
key='mp'))
mock_ls.assert_called_with(gs_dir)
self.assertEquals(
gs_dir + 'chromeos_4262.140.0_daisy-spring_' +
'recovery_canary-channel_mp.bin',
self.gsutil.GetBinaryURI(gs_dir, self.gsutil.IMAGE_TYPES.recovery,
key='mp'))
mock_ls.assert_called_with(gs_dir)
self.assertEquals(
gs_dir + 'ChromeOS-test-R29-4262.140.0-daisy-spring.tar.xz',
self.gsutil.GetBinaryURI(gs_dir, self.gsutil.IMAGE_TYPES.test))
mock_ls.assert_called_with(gs_dir)
@mock.patch.object(gsutil.gs.GSContext, 'LS',
return_value=FAKE_GS_BUILDS_OUTPUT_FIRMWARE_BRANCH)
def testGetBinaryURIForFirmware(self, mock_ls):
gs_dir = 'gs://chromeos-releases/canary-channel/daisy-spring/3824.120.0/'
self.assertEquals(
gs_dir + 'chromeos_3824.120.0_daisy-spring_' +
'firmware-spring_canary-channel_mp.bin',
self.gsutil.GetBinaryURI(gs_dir, self.gsutil.IMAGE_TYPES.firmware,
key='mp'))
mock_ls.assert_called_with(gs_dir)
def testParseURI(self):
obj = self.gsutil.ParseURI(
'gs://chromeos-releases/canary-channel/daisy-spring/3824.72.0/'
'ChromeOS-firmware-R27-3824.72.0-daisy-spring.tar.bz2')
self.assertEquals(
('canary', 'daisy_spring', '3824.72.0', 'firmware', None),
(obj.channel, obj.board, obj.image_version, obj.image_type, obj.key))
obj = self.gsutil.ParseURI(
'gs://chromeos-releases/canary-channel/daisy-spring/4262.453.0/'
'chromeos_4262.453.0_daisy-spring_factory_canary-channel_mp-v2.bin')
self.assertEquals(
('canary', 'daisy_spring', '4262.453.0', 'factory', 'mp-v2'),
(obj.channel, obj.board, obj.image_version, obj.image_type, obj.key))
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)
unittest.main()