| #!/usr/bin/python |
| |
| # Copyright (c) 2011 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 chrome_update_manifest.""" |
| |
| import filecmp |
| import mox |
| import os |
| import re |
| import shutil |
| import sys |
| import tempfile |
| import unittest |
| |
| sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| '..', '..')) |
| import chromite.lib.cros_build_lib as cros_lib |
| import chromite.bin.chrome_update_manifest as chrome_update_manifest |
| import chromite.buildbot.manifest_version as manifest_version |
| |
| # pylint: disable=W0212,R0904 |
| |
| class DEPSFileTest(mox.MoxTestBase): |
| def setUp(self): |
| mox.MoxTestBase.setUp(self) |
| |
| self.temp_manifest_dir = tempfile.mkdtemp() |
| print ('temp manifest dir: %s' % self.temp_manifest_dir) |
| self.manifest_path = os.path.join(self.temp_manifest_dir, 'oldlayout.xml') |
| self.tempdir = tempfile.mkdtemp() |
| self.test_base = os.path.join(os.path.realpath(os.path.dirname(__file__)), |
| 'testdata/chrome_update_manifest_unittest') |
| self.repo_root = os.path.join(self.tempdir, 'repo_root') |
| self.repo_root_zip = os.path.join(self.test_base, |
| 'repo_root.tar.gz') |
| |
| assert(not os.path.exists(self.repo_root)) |
| print('Unzipping test repo_root') |
| cros_lib.RunCommand(['tar', '-xvf', self.repo_root_zip], |
| cwd=self.tempdir, redirect_stdout=True) |
| assert(os.path.exists(self.repo_root)) |
| |
| self.old_dir = os.getcwd() |
| os.chdir(self.repo_root) |
| repo_root = cros_lib.FindRepoDir() |
| assert(os.path.realpath(os.path.dirname(repo_root)) == self.repo_root) |
| |
| def _assertRaisesRegexp(self, regexp, func): |
| try: |
| func() |
| except Exception as e: |
| self.assertTrue(re.match(regexp, str(e))) |
| |
| def _CopyTestFiles(self, test_name): |
| shutil.copyfile(os.path.join(self.test_base, test_name, 'DEPS.git'), |
| os.path.join(self.repo_root, |
| 'chromium/src/.DEPS.git')) |
| |
| internal_src_deps = os.path.join(self.test_base, test_name, |
| 'DEPS_internal.git') |
| if os.path.exists(internal_src_deps): |
| shutil.copyfile(internal_src_deps, |
| os.path.join(self.repo_root, |
| 'chromium/src-internal/.DEPS.git')) |
| |
| shutil.copyfile(os.path.join(self.test_base, test_name, 'previous.xml'), |
| self.manifest_path) |
| |
| |
| def testParseInternalManifestWithDoubleCheckout(self): |
| """Test a scenario where one project is checked out to two locations.""" |
| self._CopyTestFiles('test1') |
| self.mox.StubOutWithMock(manifest_version, 'PrepForChanges') |
| manifest_version.PrepForChanges(mox.IgnoreArg(), False) |
| self.mox.ReplayAll() |
| manifest = chrome_update_manifest.Manifest(self.repo_root, |
| self.manifest_path, |
| '/does/not/exist', |
| internal=True, dryrun=True) |
| manifest.CreateNewManifest() |
| assert(filecmp.cmp(manifest.new_manifest_path, |
| os.path.join(self.test_base, 'test1/expected.xml'), |
| shallow=False)) |
| |
| def testNoBeginMarker(self): |
| """Test case where manifest has no begin marker for chrome projects.""" |
| self._CopyTestFiles('test2') |
| self.mox.StubOutWithMock(manifest_version, 'PrepForChanges') |
| manifest_version.PrepForChanges(mox.IgnoreArg(), False) |
| self.mox.ReplayAll() |
| manifest = chrome_update_manifest.Manifest(self.repo_root, |
| self.manifest_path, |
| '/does/not/exist', |
| internal=False, dryrun=True) |
| self._assertRaisesRegexp('.* begin marker .*', |
| manifest.CreateNewManifest) |
| |
| def testNoEndMarker(self): |
| """Test case where manifest has no end marker for chrome projects.""" |
| self._CopyTestFiles('test3') |
| self.mox.StubOutWithMock(manifest_version, 'PrepForChanges') |
| manifest_version.PrepForChanges(mox.IgnoreArg(), False) |
| self.mox.ReplayAll() |
| manifest = chrome_update_manifest.Manifest(self.repo_root, |
| self.manifest_path, |
| '/does/not/exist', |
| internal=False, dryrun=True) |
| |
| self._assertRaisesRegexp('.* end marker .*', |
| manifest.CreateNewManifest) |
| |
| def testNonChromeProjectOverwritten(self): |
| """Test case where """ |
| self._CopyTestFiles('test4') |
| self.mox.StubOutWithMock(manifest_version, 'PrepForChanges') |
| manifest_version.PrepForChanges(mox.IgnoreArg(), False) |
| self.mox.ReplayAll() |
| manifest = chrome_update_manifest.Manifest(self.repo_root, |
| self.manifest_path, |
| '/does/not/exist', |
| internal=False, dryrun=True) |
| self._assertRaisesRegexp('.* accidentally .*', |
| manifest.CreateNewManifest) |
| |
| def tearDown(self): |
| os.chdir(self.old_dir) |
| cros_lib.RunCommand(['rm', '-rf', self.tempdir, self.temp_manifest_dir]) |
| assert(not os.path.exists(self.repo_root)) |
| mox.MoxTestBase.tearDown(self) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |