mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-09 05:56:58 +02:00
Besides changing a lot of _ to not _, I added lots of docstrings, moved things around, factored out the Marking component of the EBuildStableMarker (for use with other CL), and fixed the version logic. The versioning logic was too hacktastic. So I took a note from David's changes to take the information from pkgsplit rather than doing the ugly parsing I was doing before. This is much more robust in the case of no _r*'s and _rc or _alpha*, etc. Used in http://codereview.chromium.org/4798001/ BUG=chromiumos:8693 TEST=Ran unit tests and chrome mark as stable. Will run some more tests. Review URL: http://codereview.chromium.org/5172003 Change-Id: Id6ef9a480591d1a28352f360c6d076564b43e318
302 lines
12 KiB
Python
Executable File
302 lines
12 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
# Copyright (c) 2010 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 cros_mark_as_stable.py."""
|
|
|
|
import fileinput
|
|
import mox
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
# Required to include '.' in the python path.
|
|
sys.path.append(os.path.dirname(__file__))
|
|
import cros_mark_as_stable
|
|
|
|
class GitBranchTest(mox.MoxTestBase):
|
|
|
|
def setUp(self):
|
|
mox.MoxTestBase.setUp(self)
|
|
# Always stub RunCommmand out as we use it in every method.
|
|
self.mox.StubOutWithMock(cros_mark_as_stable, '_SimpleRunCommand')
|
|
self._branch = 'test_branch'
|
|
self._tracking_branch = 'cros/test'
|
|
|
|
def testCreateBranchNoPrevious(self):
|
|
# Test init with no previous branch existing.
|
|
branch = cros_mark_as_stable.GitBranch(self._branch, self._tracking_branch)
|
|
self.mox.StubOutWithMock(branch, 'Exists')
|
|
self.mox.StubOutWithMock(branch, '_Checkout')
|
|
branch.Exists().AndReturn(False)
|
|
branch._Checkout(self._branch)
|
|
self.mox.ReplayAll()
|
|
branch.CreateBranch()
|
|
self.mox.VerifyAll()
|
|
|
|
def testCreateBranchWithPrevious(self):
|
|
# Test init with previous branch existing.
|
|
branch = cros_mark_as_stable.GitBranch(self._branch, self._tracking_branch)
|
|
self.mox.StubOutWithMock(branch, 'Exists')
|
|
self.mox.StubOutWithMock(branch, 'Delete')
|
|
self.mox.StubOutWithMock(branch, '_Checkout')
|
|
branch.Exists().AndReturn(True)
|
|
branch.Delete()
|
|
branch._Checkout(self._branch)
|
|
self.mox.ReplayAll()
|
|
branch.CreateBranch()
|
|
self.mox.VerifyAll()
|
|
|
|
def testCheckoutCreate(self):
|
|
# Test init with no previous branch existing.
|
|
cros_mark_as_stable._SimpleRunCommand(
|
|
'git checkout -b %s %s' % (self._branch, self._tracking_branch))
|
|
self.mox.ReplayAll()
|
|
branch = cros_mark_as_stable.GitBranch(self._branch, self._tracking_branch)
|
|
branch._Checkout(self._branch)
|
|
self.mox.VerifyAll()
|
|
|
|
def testCheckoutNoCreate(self):
|
|
# Test init with previous branch existing.
|
|
cros_mark_as_stable._SimpleRunCommand('git checkout %s' % (
|
|
self._tracking_branch))
|
|
self.mox.ReplayAll()
|
|
branch = cros_mark_as_stable.GitBranch(self._branch, self._tracking_branch)
|
|
branch._Checkout(self._tracking_branch, False)
|
|
self.mox.VerifyAll()
|
|
|
|
def testDelete(self):
|
|
branch = cros_mark_as_stable.GitBranch(self._branch, self._tracking_branch)
|
|
self.mox.StubOutWithMock(branch, '_Checkout')
|
|
branch._Checkout(self._tracking_branch, create=False)
|
|
cros_mark_as_stable._SimpleRunCommand('git branch -D ' + self._branch)
|
|
self.mox.ReplayAll()
|
|
branch.Delete()
|
|
self.mox.VerifyAll()
|
|
|
|
def testExists(self):
|
|
branch = cros_mark_as_stable.GitBranch(self._branch, self._tracking_branch)
|
|
|
|
# Test if branch exists that is created
|
|
cros_mark_as_stable._SimpleRunCommand('git branch').AndReturn(
|
|
'%s %s' % (self._branch, self._tracking_branch))
|
|
self.mox.ReplayAll()
|
|
self.assertTrue(branch.Exists())
|
|
self.mox.VerifyAll()
|
|
|
|
|
|
class EBuildTest(mox.MoxTestBase):
|
|
|
|
def setUp(self):
|
|
mox.MoxTestBase.setUp(self)
|
|
|
|
def testParseEBuildPath(self):
|
|
# Test with ebuild with revision number.
|
|
fake_ebuild_path = '/path/to/test_package/test_package-0.0.1-r1.ebuild'
|
|
self.mox.StubOutWithMock(fileinput, 'input')
|
|
fileinput.input(fake_ebuild_path).AndReturn('')
|
|
self.mox.ReplayAll()
|
|
fake_ebuild = cros_mark_as_stable.EBuild(fake_ebuild_path)
|
|
self.mox.VerifyAll()
|
|
self.assertEquals(fake_ebuild.ebuild_path_no_revision,
|
|
'/path/to/test_package/test_package-0.0.1')
|
|
self.assertEquals(fake_ebuild.ebuild_path_no_version,
|
|
'/path/to/test_package/test_package')
|
|
self.assertEquals(fake_ebuild.current_revision, 1)
|
|
|
|
def testParseEBuildPathNoRevisionNumber(self):
|
|
# Test with ebuild without revision number.
|
|
fake_ebuild_path = '/path/to/test_package/test_package-9999.ebuild'
|
|
self.mox.StubOutWithMock(fileinput, 'input')
|
|
fileinput.input(fake_ebuild_path).AndReturn('')
|
|
self.mox.ReplayAll()
|
|
fake_ebuild = cros_mark_as_stable.EBuild(fake_ebuild_path)
|
|
self.mox.VerifyAll()
|
|
|
|
self.assertEquals(fake_ebuild.ebuild_path_no_revision,
|
|
'/path/to/test_package/test_package-9999')
|
|
self.assertEquals(fake_ebuild.ebuild_path_no_version,
|
|
'/path/to/test_package/test_package')
|
|
self.assertEquals(fake_ebuild.current_revision, 0)
|
|
|
|
|
|
class EBuildStableMarkerTest(mox.MoxTestBase):
|
|
|
|
def setUp(self):
|
|
mox.MoxTestBase.setUp(self)
|
|
self.mox.StubOutWithMock(cros_mark_as_stable, '_SimpleRunCommand')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable, 'RunCommand')
|
|
self.mox.StubOutWithMock(os, 'unlink')
|
|
self.m_ebuild = self.mox.CreateMock(cros_mark_as_stable.EBuild)
|
|
self.m_ebuild.is_stable = True
|
|
self.m_ebuild.package = 'test_package'
|
|
self.m_ebuild.current_revision = 1
|
|
self.m_ebuild.ebuild_path_no_revision = '/path/test_package-0.0.1'
|
|
self.m_ebuild.ebuild_path_no_version = '/path/test_package'
|
|
self.m_ebuild.ebuild_path = '/path/test_package-0.0.1-r1.ebuild'
|
|
self.revved_ebuild_path = '/path/test_package-0.0.1-r2.ebuild'
|
|
|
|
def testRevWorkOnEBuild(self):
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.fileinput, 'input')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.os.path, 'exists')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.shutil, 'copyfile')
|
|
m_file = self.mox.CreateMock(file)
|
|
|
|
# Prepare mock fileinput. This tests to make sure both the commit id
|
|
# and keywords are changed correctly.
|
|
mock_file = ['EAPI=2', 'CROS_WORKON_COMMIT=old_id',
|
|
'KEYWORDS=\"~x86 ~arm\"', 'src_unpack(){}']
|
|
|
|
ebuild_9999 = self.m_ebuild.ebuild_path_no_version + '-9999.ebuild'
|
|
cros_mark_as_stable.os.path.exists(ebuild_9999).AndReturn(True)
|
|
cros_mark_as_stable.shutil.copyfile(ebuild_9999, self.revved_ebuild_path)
|
|
cros_mark_as_stable.fileinput.input(self.revved_ebuild_path,
|
|
inplace=1).AndReturn(mock_file)
|
|
m_file.write('EAPI=2')
|
|
m_file.write('CROS_WORKON_COMMIT="my_id"\n')
|
|
m_file.write('KEYWORDS="x86 arm"')
|
|
m_file.write('src_unpack(){}')
|
|
diff_cmd = ['diff', '-Bu', self.m_ebuild.ebuild_path,
|
|
self.revved_ebuild_path]
|
|
cros_mark_as_stable.RunCommand(diff_cmd, exit_code=True,
|
|
print_cmd=False, redirect_stderr=True,
|
|
redirect_stdout=True).AndReturn(1)
|
|
cros_mark_as_stable._SimpleRunCommand('git add ' + self.revved_ebuild_path)
|
|
cros_mark_as_stable._SimpleRunCommand('git rm ' + self.m_ebuild.ebuild_path)
|
|
|
|
self.mox.ReplayAll()
|
|
marker = cros_mark_as_stable.EBuildStableMarker(self.m_ebuild)
|
|
marker.RevWorkOnEBuild('my_id', redirect_file=m_file)
|
|
self.mox.VerifyAll()
|
|
|
|
def testRevUnchangedEBuild(self):
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.fileinput, 'input')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.os.path, 'exists')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.shutil, 'copyfile')
|
|
m_file = self.mox.CreateMock(file)
|
|
|
|
# Prepare mock fileinput. This tests to make sure both the commit id
|
|
# and keywords are changed correctly.
|
|
mock_file = ['EAPI=2', 'CROS_WORKON_COMMIT=old_id',
|
|
'KEYWORDS=\"~x86 ~arm\"', 'src_unpack(){}']
|
|
|
|
ebuild_9999 = self.m_ebuild.ebuild_path_no_version + '-9999.ebuild'
|
|
cros_mark_as_stable.os.path.exists(ebuild_9999).AndReturn(True)
|
|
cros_mark_as_stable.shutil.copyfile(ebuild_9999, self.revved_ebuild_path)
|
|
cros_mark_as_stable.fileinput.input(self.revved_ebuild_path,
|
|
inplace=1).AndReturn(mock_file)
|
|
m_file.write('EAPI=2')
|
|
m_file.write('CROS_WORKON_COMMIT="my_id"\n')
|
|
m_file.write('KEYWORDS="x86 arm"')
|
|
m_file.write('src_unpack(){}')
|
|
diff_cmd = ['diff', '-Bu', self.m_ebuild.ebuild_path,
|
|
self.revved_ebuild_path]
|
|
cros_mark_as_stable.RunCommand(diff_cmd, exit_code=True,
|
|
print_cmd=False, redirect_stderr=True,
|
|
redirect_stdout=True).AndReturn(0)
|
|
cros_mark_as_stable.os.unlink(self.revved_ebuild_path)
|
|
|
|
self.mox.ReplayAll()
|
|
marker = cros_mark_as_stable.EBuildStableMarker(self.m_ebuild)
|
|
marker.RevWorkOnEBuild('my_id', redirect_file=m_file)
|
|
self.mox.VerifyAll()
|
|
|
|
def testRevMissingEBuild(self):
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.fileinput, 'input')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.os.path, 'exists')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.shutil, 'copyfile')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable, 'Die')
|
|
m_file = self.mox.CreateMock(file)
|
|
|
|
# Prepare mock fileinput. This tests to make sure both the commit id
|
|
# and keywords are changed correctly.
|
|
mock_file = ['EAPI=2', 'CROS_WORKON_COMMIT=old_id',
|
|
'KEYWORDS=\"~x86 ~arm\"', 'src_unpack(){}']
|
|
|
|
ebuild_9999 = self.m_ebuild.ebuild_path_no_version + '-9999.ebuild'
|
|
cros_mark_as_stable.os.path.exists(ebuild_9999).AndReturn(False)
|
|
cros_mark_as_stable.Die("Missing unstable ebuild: %s" % ebuild_9999)
|
|
cros_mark_as_stable.shutil.copyfile(ebuild_9999, self.revved_ebuild_path)
|
|
cros_mark_as_stable.fileinput.input(self.revved_ebuild_path,
|
|
inplace=1).AndReturn(mock_file)
|
|
m_file.write('EAPI=2')
|
|
m_file.write('CROS_WORKON_COMMIT="my_id"\n')
|
|
m_file.write('KEYWORDS="x86 arm"')
|
|
m_file.write('src_unpack(){}')
|
|
diff_cmd = ['diff', '-Bu', self.m_ebuild.ebuild_path,
|
|
self.revved_ebuild_path]
|
|
cros_mark_as_stable.RunCommand(diff_cmd, exit_code=True,
|
|
print_cmd=False, redirect_stderr=True,
|
|
redirect_stdout=True).AndReturn(1)
|
|
cros_mark_as_stable._SimpleRunCommand('git add ' + self.revved_ebuild_path)
|
|
cros_mark_as_stable._SimpleRunCommand('git rm ' + self.m_ebuild.ebuild_path)
|
|
|
|
self.mox.ReplayAll()
|
|
marker = cros_mark_as_stable.EBuildStableMarker(self.m_ebuild)
|
|
marker.RevWorkOnEBuild('my_id', redirect_file=m_file)
|
|
self.mox.VerifyAll()
|
|
|
|
|
|
def testCommitChange(self):
|
|
mock_message = 'Commit me'
|
|
cros_mark_as_stable._SimpleRunCommand(
|
|
'git commit -am "%s"' % mock_message)
|
|
self.mox.ReplayAll()
|
|
marker = cros_mark_as_stable.EBuildStableMarker(self.m_ebuild)
|
|
marker.CommitChange(mock_message)
|
|
self.mox.VerifyAll()
|
|
|
|
def testPushChange(self):
|
|
#cros_mark_as_stable._SimpleRunCommand('git push')
|
|
#self.mox.ReplayAll()
|
|
#marker = cros_mark_as_stable.EBuildStableMarker(self.m_ebuild)
|
|
#marker.PushChange()
|
|
#self.mox.VerifyAll()
|
|
pass
|
|
|
|
|
|
class _Package(object):
|
|
def __init__(self, package):
|
|
self.package = package
|
|
|
|
|
|
class BuildEBuildDictionaryTest(mox.MoxTestBase):
|
|
|
|
def setUp(self):
|
|
mox.MoxTestBase.setUp(self)
|
|
self.mox.StubOutWithMock(cros_mark_as_stable.os, 'walk')
|
|
self.mox.StubOutWithMock(cros_mark_as_stable, 'RunCommand')
|
|
self.package = 'chromeos-base/test_package'
|
|
self.root = '/overlay/chromeos-base/test_package'
|
|
self.package_path = self.root + '/test_package-0.0.1.ebuild'
|
|
paths = [[self.root, [], []]]
|
|
cros_mark_as_stable.os.walk("/overlay").AndReturn(paths)
|
|
self.mox.StubOutWithMock(cros_mark_as_stable, '_FindUprevCandidates')
|
|
|
|
|
|
def testWantedPackage(self):
|
|
overlays = {"/overlay": []}
|
|
package = _Package(self.package)
|
|
cros_mark_as_stable._FindUprevCandidates([]).AndReturn(package)
|
|
self.mox.ReplayAll()
|
|
cros_mark_as_stable._BuildEBuildDictionary(overlays, False, [self.package])
|
|
self.mox.VerifyAll()
|
|
self.assertEquals(len(overlays), 1)
|
|
self.assertEquals(overlays["/overlay"], [package])
|
|
|
|
def testUnwantedPackage(self):
|
|
overlays = {"/overlay": []}
|
|
package = _Package(self.package)
|
|
cros_mark_as_stable._FindUprevCandidates([]).AndReturn(package)
|
|
self.mox.ReplayAll()
|
|
cros_mark_as_stable._BuildEBuildDictionary(overlays, False, [])
|
|
self.assertEquals(len(overlays), 1)
|
|
self.assertEquals(overlays["/overlay"], [])
|
|
self.mox.VerifyAll()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|