Files
entropy/libraries/tests/tools.py
2009-10-04 18:01:35 +02:00

132 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
import sys
import os
sys.path.insert(0,'.')
sys.path.insert(0,'../')
import unittest
import entropy.tools as et
from entropy.client.interfaces import Client
import _misc
import tempfile
import subprocess
import shutil
import stat
class MiscTest(unittest.TestCase):
def setUp(self):
self.Client = Client(noclientdb = 2, indexing = False, xcache = False,
repo_validation = False)
self.test_pkg = _misc.get_test_entropy_package()
self.test_pkg2 = _misc.get_test_entropy_package2()
self.test_pkg3 = _misc.get_test_entropy_package3()
self.test_pkgs = [self.test_pkg, self.test_pkg2, self.test_pkg3]
def tearDown(self):
"""
tearDown is run after each test
"""
sys.stdout.write("%s ran\n" % (self,))
sys.stdout.flush()
self.Client.destroy()
def test_extract_edb(self):
fd, tmp_path = tempfile.mkstemp()
for test_pkg in self.test_pkgs:
out_path = et.extract_edb(test_pkg, tmp_path)
self.assertNotEqual(out_path, None)
dbconn = self.Client.open_generic_database(out_path)
dbconn.validateDatabase()
dbconn.listAllIdpackages()
dbconn.closeDB()
os.close(fd)
os.remove(tmp_path)
def test_extract_xpak(self):
tmp_path = tempfile.mkdtemp()
for test_pkg in self.test_pkgs:
out_path = et.extract_xpak(test_pkg, tmp_path)
self.assertNotEqual(out_path, None)
self.assert_(os.listdir(out_path))
shutil.rmtree(tmp_path, True)
def test_extract_xpak_only(self):
pkg_path = _misc.get_test_xpak_empty_package()
tmp_path = tempfile.mkdtemp()
out_path = et.extract_xpak(pkg_path, tmp_path)
self.assertNotEqual(out_path, None)
self.assert_(os.listdir(out_path))
shutil.rmtree(tmp_path, True)
def test_remove_edb(self):
tmp_path = tempfile.mkdtemp()
for test_pkg in self.test_pkgs:
self.assert_(et.is_entropy_package_file(test_pkg))
out_path = et.remove_edb(test_pkg, tmp_path)
self.assertNotEqual(out_path, None)
self.assert_(os.path.isfile(out_path))
self.assert_(not et.is_entropy_package_file(out_path))
def test_uncompress_tar_bz2(self):
pkg_path = _misc.get_test_entropy_package4()
tmp_dir = tempfile.mkdtemp()
fd, tmp_file = tempfile.mkstemp()
path_perms = {}
# try with tar first
args = ["tar", "xjfp", pkg_path, "-C", tmp_dir]
proc = subprocess.Popen(args, stdout = fd, stderr = fd)
rc = proc.wait()
self.assert_(not rc)
os.close(fd)
for currentdir, subdirs, files in os.walk(tmp_dir):
for file in files:
path = os.path.join(currentdir, file)
fstat = os.lstat(path)
mode = stat.S_IMODE(fstat.st_mode)
uid, gid = fstat.st_uid, fstat.st_gid
path_perms[path] = (mode, uid, gid,)
self.assert_(path_perms)
shutil.rmtree(tmp_dir)
os.makedirs(tmp_dir)
# now try with our function
rc = et.uncompress_tar_bz2(pkg_path, tmp_dir)
self.assert_(not rc)
for currentdir, subdirs, files in os.walk(tmp_dir):
for file in files:
path = os.path.join(currentdir, file)
fstat = os.lstat(path)
mode = stat.S_IMODE(fstat.st_mode)
uid, gid = fstat.st_uid, fstat.st_gid
mystat = (mode, uid, gid,)
try:
self.assertEqual(mystat, path_perms.get(path))
except AssertionError:
print("ouch", path, "my:", mystat)
raise
shutil.rmtree(tmp_dir)
if __name__ == '__main__':
unittest.main()