mirror of
https://github.com/clearlinux/common.git
synced 2026-05-14 19:13:53 +00:00
98 lines
3.3 KiB
Python
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'))
|