#!/usr/bin/python # Copyright (c) 2012 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 repository.py.""" import functools import os import sys import constants sys.path.insert(0, constants.SOURCE_ROOT) from chromite.cbuildbot import repository from chromite.lib import cros_build_lib from chromite.lib import cros_test_lib # pylint: disable=W0212,R0904,E1101,W0613 class RepositoryTests(cros_test_lib.MoxTestCase): """Test cases related to repository checkout methods.""" def RunCommand_Mock(self, result, *args, **kwargs): output = self.mox.CreateMockAnything() output.output = result return output def testExternalRepoCheckout(self): """Test we detect external checkouts properly.""" self.mox.StubOutWithMock(cros_build_lib, 'RunCommand') tests = [ 'https://chromium.googlesource.com/chromiumos/manifest.git', 'test@abcdef.bla.com:39291/bla/manifest.git', 'test@abcdef.bla.com:39291/bla/manifest', 'test@abcdef.bla.com:39291/bla/Manifest-internal', ] for test in tests: cros_build_lib.RunCommand = functools.partial(self.RunCommand_Mock, test) self.assertFalse(repository.IsInternalRepoCheckout('.')) def testInternalRepoCheckout(self): """Test we detect internal checkouts properly.""" self.mox.StubOutWithMock(cros_build_lib, 'RunCommand') tests = [ 'https://chrome-internal.googlesource.com/chromeos/manifest-internal', 'test@abcdef.bla.com:39291/bla/manifest-internal.git', ] for test in tests: cros_build_lib.RunCommand = functools.partial(self.RunCommand_Mock, test) self.assertTrue(repository.IsInternalRepoCheckout('.')) class RepoInitTests(cros_test_lib.MoxTempDirTestCase): """Test cases related to repository initialization.""" def _Initialize(self, branch='master'): repo = repository.RepoRepository(constants.MANIFEST_URL, self.tempdir, branch=branch) repo.Initialize() def testReInitialization(self): """Test ability to switch between branches.""" self._Initialize('release-R19-2046.B') self._Initialize('master') # Test that a failed re-init due to bad branch doesn't leave repo in bad # state. self.assertRaises(Exception, self._Initialize, 'monkey') self._Initialize('release-R20-2268.B') class RepoInitChromeBotTests(RepoInitTests): """Test that Re-init works with the chrome-bot account. In testing, repo init behavior on the buildbots is different from a local run, because there is some logic in 'repo' that filters changes based on GIT_COMMITTER_IDENT. So for sanity's sake, try to emulate running on the buildbots. """ def setUp(self): os.putenv('GIT_COMMITTER_EMAIL', 'chrome-bot@chromium.org') os.putenv('GIT_AUTHOR_EMAIL', 'chrome-bot@chromium.org') if __name__ == '__main__': cros_test_lib.main()