blob: 1fa952572a366b38d7c2af81e029ce83d599da7b [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2019 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.
"""Unittests for Toolchain-related operations."""
from __future__ import print_function
import mock
import os
from chromite.api import api_config
from chromite.api.controller import toolchain
from chromite.api.gen.chromite.api import toolchain_pb2
from chromite.lib import cros_test_lib
from chromite.lib import gs
from chromite.lib import toolchain_util
class UpdateChromeEbuildWithOrderfileTest(cros_test_lib.MockTestCase,
api_config.ApiConfigMixin):
"""Unittests for UpdateChromeEbuildWithOrderfile."""
def setUp(self):
self.command = self.PatchObject(toolchain_util,
'OrderfileUpdateChromeEbuild')
self.board = 'board'
self.input_proto = toolchain_pb2.UpdateChromeEbuildRequest(
build_target={'name': self.board})
def testValidateOnly(self):
"""Sanity check that a validate only call does not execute any logic."""
patch = self.PatchObject(toolchain_util, 'OrderfileUpdateChromeEbuild')
response = toolchain_pb2.UpdateChromeEbuildResponse()
toolchain.UpdateChromeEbuildWithOrderfile(self.input_proto, response,
self.validate_only_config)
patch.assert_not_called()
def testSuccess(self):
"""Test the command is called correctly."""
output_proto = toolchain_pb2.UpdateChromeEbuildResponse()
toolchain.UpdateChromeEbuildWithOrderfile(self.input_proto,
output_proto, self.api_config)
self.command.assert_called_once_with(self.board)
class UploadVettedOrderfileTest(cros_test_lib.MockTestCase,
api_config.ApiConfigMixin):
"""Unittests for UploadVettedOrderfile."""
def setUp(self):
self.find_command = self.PatchObject(
toolchain_util,
'FindLatestChromeOrderfile',
return_value='orderfile-3.0.tar.xz')
self.copy_command = self.PatchObject(gs.GSContext, 'Copy', autospec=True)
self.from_url = os.path.join(toolchain_util.ORDERFILE_GS_URL_UNVETTED,
'orderfile-3.0.tar.xz')
self.to_url = os.path.join(toolchain_util.ORDERFILE_GS_URL_VETTED,
'orderfile-3.0.tar.xz')
self.input_proto = toolchain_pb2.UploadVettedOrderfileRequest()
def testValidateOnly(self):
"""Sanity check that a validate only call does not execute any logic."""
patch = self.PatchObject(toolchain_util, 'OrderfileUpdateChromeEbuild')
response = toolchain_pb2.UploadVettedOrderfileResponse()
toolchain.UploadVettedOrderfile(self.input_proto, response,
self.validate_only_config)
patch.assert_not_called()
def testRunFail(self):
"""Test that it fails to upload an orderfile because it's already vetted."""
exist_command = self.PatchObject(gs.GSContext, 'Exists', return_value=True)
output_proto = toolchain_pb2.UploadVettedOrderfileResponse()
toolchain.UploadVettedOrderfile(self.input_proto, output_proto,
self.api_config)
self.assertFalse(output_proto.status)
self.find_command.assert_called_once_with(
toolchain_util.ORDERFILE_GS_URL_UNVETTED)
exist_command.assert_called_once_with(self.to_url)
def testRunPass(self):
"""Test run successfully."""
exist_command = self.PatchObject(gs.GSContext, 'Exists', return_value=False)
output_proto = toolchain_pb2.UploadVettedOrderfileResponse()
toolchain.UploadVettedOrderfile(self.input_proto, output_proto,
self.api_config)
self.assertTrue(output_proto.status)
self.find_command.assert_called_once_with(
toolchain_util.ORDERFILE_GS_URL_UNVETTED)
exist_command.assert_called_once_with(self.to_url)
self.copy_command.assert_called_once_with(
mock.ANY, # Placeholder for 'self'
self.from_url,
self.to_url,
acl='public-read')