blob: 87cf3ba0450ac8970cf72d6398f33a4bf530e19b [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2018 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 the chrome_committer library."""
from __future__ import print_function
import os
from chromite.lib import cros_test_lib
from chromite.lib import osutils
from chromite.lib import chrome_committer
from chromite.lib import tree_status
class ChromeCommitterTester(cros_test_lib.RunCommandTestCase,
cros_test_lib.MockTempDirTestCase):
"""Test cros_chromeos_lkgm.Committer."""
class Args(object):
"""Class for ChromeComitter args."""
def __init__(self, workdir):
self.workdir = workdir
self.dryrun = False
self.user_email = 'user@test.org'
def setUp(self):
"""Common set up method for all tests."""
osutils.SafeMakedirs(os.path.join(self.tempdir, '.git', 'info'))
osutils.WriteFile(os.path.join(self.tempdir, 'OWNERS'), 'foo@chromium.org')
osutils.SafeMakedirs(os.path.join(self.tempdir, 'chromeos'))
osutils.WriteFile(os.path.join(self.tempdir, 'chromeos', 'BUILD.gn'),
'assert(is_chromeos)')
self.committer = chrome_committer.ChromeCommitter(
ChromeCommitterTester.Args(self.tempdir))
def _assertCommand(self, git_cmd):
self.assertCommandContains(git_cmd.split(' '))
def testCheckout(self):
"Tests checkout with mocked out git."
self.committer.Checkout(['OWNERS'])
self._assertCommand('git init')
self._assertCommand('git remote add origin '
'https://chromium.googlesource.com/chromium/src.git')
self._assertCommand('git config core.sparsecheckout true')
self._assertCommand('git fetch --depth=1')
self._assertCommand('git pull origin master')
self._assertCommand('git checkout -B auto-commit-branch origin/master')
self.assertEquals(osutils.ReadFile(
os.path.join(self.tempdir, '.git', 'info', 'sparse-checkout')),
'OWNERS\ncodereview.settings\nWATCHLISTS')
def testCommit(self):
"""Tests that we can commit a file."""
self.committer.Checkout(['OWNERS'])
self.committer.Commit(['OWNERS', 'chromeos/BUILD.gn'],
'Modify OWNERS and BUILD.gn')
self._assertCommand('git add -- OWNERS')
self._assertCommand('git add -- BUILD.gn')
self.assertCommandContains(['git',
'-c', 'user.email=user@test.org',
'-c', 'user.name=user@test.org',
'commit', '-m',
'Automated Commit: Modify OWNERS and BUILD.gn'])
# Non-existent file should raise.
self.assertRaisesRegexp(chrome_committer.CommitError,
'Invalid path: /tmp/chromite.*/nonexistent$',
self.committer.Commit,
['nonexistent'], 'Commit non-existent file')
def testUpload(self):
"""Tests that we can upload a commit."""
self.committer.Checkout(['OWNERS'])
self.committer.Commit(['OWNERS', 'chromeos/BUILD.gn'],
'Modify OWNERS and BUILD.gn')
self.PatchObject(tree_status, 'GetGardenerEmailAddresses',
return_value=['gardener@chromium.org'])
self.committer.Upload()
self.assertCommandContains(['git',
'-c', 'user.email=user@test.org',
'-c', 'user.name=user@test.org',
'cl', 'upload', '-v', '-m',
'Automated Commit: Modify OWNERS and BUILD.gn',
'--bypass-hooks', '-f',
'--tbrs', 'gardener@chromium.org',
'--send-mail'])
self._assertCommand('git cl set-commit -v')
def testUploadDryRun(self):
"""Tests that we can upload a commit with dryrun."""
self.committer.Checkout(['OWNERS'])
self.committer.Commit(['OWNERS', 'chromeos/BUILD.gn'],
'Modify OWNERS and BUILD.gn')
self.PatchObject(tree_status, 'GetGardenerEmailAddresses',
return_value=['gardener@chromium.org'])
self.committer._dryrun = True # pylint: disable=protected-access
self.committer.Upload()
self.assertCommandContains(['git',
'-c', 'user.email=user@test.org',
'-c', 'user.name=user@test.org',
'cl', 'upload', '-v', '-m',
'Automated Commit: Modify OWNERS and BUILD.gn',
'--bypass-hooks', '-f'])
self._assertCommand('git cl set-commit -v --dry-run')