Files
common/lts/test/test_ltsutils.py
Tan, Yew Wayne 7cd52ed2fd ltsutils: Fix PackageRepo.getNVR for package names that contain '-'
Refactor unit tests, add test case for MySQL-python package
2019-06-21 09:12:15 -07:00

98 lines
3.3 KiB
Python

import unittest
import os, pathlib, tempfile, logging
import subprocess, functools
from ltsutils.package_repo import PackageRepo
import ltsutils.shell
run = functools.partial(subprocess.run, check=True)
class Package:
def __init__(self, name):
self.name = name
self.repo_url = 'https://github.com/clearlinux-pkgs/{}.git'.format(name)
class LTSUtilsTestCase(unittest.TestCase):
toplvl = pathlib.Path('../../..')
packages = toplvl / 'packages'
def cloneOrExtractRepo(self):
tmpdir = pathlib.Path('/var/tmp/common-lts-test')
tmpdir.mkdir(mode=0o700, exist_ok=True)
tarball = tmpdir / '{}.tar.gz'.format(self.package.name)
if tarball.exists():
run(['tar', 'xf', tarball, '-C', self.workdir])
else:
run(['git', 'clone', self.package.repo_url, self.workdir])
run(['tar', 'czf', tarball, '-C', self.workdir, '.'])
def setUp(self):
self._tmpdir = tempfile.TemporaryDirectory(prefix='test-{}-'.format(self.package.name), dir=self.packages)
self.workdir = pathlib.Path(self._tmpdir.name)
self.cloneOrExtractRepo()
self.repo = PackageRepo(self.package.name, self.workdir)
self._sh = ltsutils.shell.Shell(self.workdir)
self._sh.capture_output = False
def sh(self, cmd):
return self._sh.run(cmd)
def sh_stdout(self, cmd):
return self._sh.run(cmd, capture_output=True).stdout.rstrip()
def tearDown(self):
self._tmpdir.cleanup()
class PackageRepoTestCase(LTSUtilsTestCase):
def setUp(self):
super().setUp()
self.L1 = self.package.L1
self.L2 = self.package.L2
self.sh('git branch L1 %s' % self.L1)
self.sh('git branch L2 %s' % self.L2)
def testGetNVR(self):
raise NotImplementedError
def testHasBranch(self):
self.assertTrue(self.repo.hasBranch('L2'))
self.assertFalse(self.repo.hasBranch('L3'))
def testCheckoutBranch(self):
self.repo.checkoutBranch('L2')
self.assertEqual(self.sh_stdout('git rev-parse HEAD'), self.L2)
self.assertRaises(PackageRepo.InvalidBranchException, self.repo.checkoutBranch, 'L3')
def testFastForward(self):
self.repo.fastForwardBranch('L1', 'L2')
self.assertEqual(self.sh_stdout('git rev-parse L1'), self.L2)
self.assertEqual(self.sh_stdout('git rev-parse L2'), self.L2)
def testGetCurrentBranch(self):
self.repo.checkoutBranch('L2')
b = self.repo.getCurrentBranch()
self.assertEqual(b, 'L2')
self.sh('git checkout --detach L2')
self.assertRaises(PackageRepo.UnknownCurrentBranchException, self.repo.getCurrentBranch)
class TestNano(PackageRepoTestCase):
package = Package('nano')
package.L1 = '3dcfa09f5217eedf6ec7539af7e243655d3abdb6' # 3.2-54
package.L2 = 'b8243dd54e8feb16a11474f848b8735f5591cf12' # 3.2-55
def testGetNVR(self):
nvr = self.repo.getNVR(self.L2)
self.assertEqual(nvr, ('nano', '3.2', '55'))
class TestMySQL_Python(PackageRepoTestCase):
package = Package('MySQL-python')
package.L1 = '386163d8fc9c857c7194c4e958374af4c4f071ed' # 1.2.5-31
package.L2 = 'f85bc5ec2141384f45f224d4464a0a44a981a4d4' # 1.2.5-33
def testGetNVR(self):
nvr = self.repo.getNVR(self.L2)
self.assertEqual(nvr, ('MySQL-python', '1.2.5', '33'))