17db96d56Sopenharmony_ci# -*- coding: utf-8 -*- 27db96d56Sopenharmony_ci"""Tests for distutils.archive_util.""" 37db96d56Sopenharmony_ciimport unittest 47db96d56Sopenharmony_ciimport os 57db96d56Sopenharmony_ciimport sys 67db96d56Sopenharmony_ciimport tarfile 77db96d56Sopenharmony_cifrom os.path import splitdrive 87db96d56Sopenharmony_ciimport warnings 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_cifrom distutils import archive_util 117db96d56Sopenharmony_cifrom distutils.archive_util import (check_archive_formats, make_tarball, 127db96d56Sopenharmony_ci make_zipfile, make_archive, 137db96d56Sopenharmony_ci ARCHIVE_FORMATS) 147db96d56Sopenharmony_cifrom distutils.spawn import find_executable, spawn 157db96d56Sopenharmony_cifrom distutils.tests import support 167db96d56Sopenharmony_cifrom test.support import run_unittest, patch 177db96d56Sopenharmony_cifrom test.support.os_helper import change_cwd 187db96d56Sopenharmony_cifrom test.support.warnings_helper import check_warnings 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_citry: 217db96d56Sopenharmony_ci import grp 227db96d56Sopenharmony_ci import pwd 237db96d56Sopenharmony_ci UID_GID_SUPPORT = True 247db96d56Sopenharmony_ciexcept ImportError: 257db96d56Sopenharmony_ci UID_GID_SUPPORT = False 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_citry: 287db96d56Sopenharmony_ci import zipfile 297db96d56Sopenharmony_ci ZIP_SUPPORT = True 307db96d56Sopenharmony_ciexcept ImportError: 317db96d56Sopenharmony_ci ZIP_SUPPORT = find_executable('zip') 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_citry: 347db96d56Sopenharmony_ci import zlib 357db96d56Sopenharmony_ci ZLIB_SUPPORT = True 367db96d56Sopenharmony_ciexcept ImportError: 377db96d56Sopenharmony_ci ZLIB_SUPPORT = False 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_citry: 407db96d56Sopenharmony_ci import bz2 417db96d56Sopenharmony_ciexcept ImportError: 427db96d56Sopenharmony_ci bz2 = None 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_citry: 457db96d56Sopenharmony_ci import lzma 467db96d56Sopenharmony_ciexcept ImportError: 477db96d56Sopenharmony_ci lzma = None 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_cidef can_fs_encode(filename): 507db96d56Sopenharmony_ci """ 517db96d56Sopenharmony_ci Return True if the filename can be saved in the file system. 527db96d56Sopenharmony_ci """ 537db96d56Sopenharmony_ci if os.path.supports_unicode_filenames: 547db96d56Sopenharmony_ci return True 557db96d56Sopenharmony_ci try: 567db96d56Sopenharmony_ci filename.encode(sys.getfilesystemencoding()) 577db96d56Sopenharmony_ci except UnicodeEncodeError: 587db96d56Sopenharmony_ci return False 597db96d56Sopenharmony_ci return True 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ciclass ArchiveUtilTestCase(support.TempdirManager, 637db96d56Sopenharmony_ci support.LoggingSilencer, 647db96d56Sopenharmony_ci unittest.TestCase): 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') 677db96d56Sopenharmony_ci def test_make_tarball(self, name='archive'): 687db96d56Sopenharmony_ci # creating something to tar 697db96d56Sopenharmony_ci tmpdir = self._create_files() 707db96d56Sopenharmony_ci self._make_tarball(tmpdir, name, '.tar.gz') 717db96d56Sopenharmony_ci # trying an uncompressed one 727db96d56Sopenharmony_ci self._make_tarball(tmpdir, name, '.tar', compress=None) 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') 757db96d56Sopenharmony_ci def test_make_tarball_gzip(self): 767db96d56Sopenharmony_ci tmpdir = self._create_files() 777db96d56Sopenharmony_ci self._make_tarball(tmpdir, 'archive', '.tar.gz', compress='gzip') 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci @unittest.skipUnless(bz2, 'Need bz2 support to run') 807db96d56Sopenharmony_ci def test_make_tarball_bzip2(self): 817db96d56Sopenharmony_ci tmpdir = self._create_files() 827db96d56Sopenharmony_ci self._make_tarball(tmpdir, 'archive', '.tar.bz2', compress='bzip2') 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci @unittest.skipUnless(lzma, 'Need lzma support to run') 857db96d56Sopenharmony_ci def test_make_tarball_xz(self): 867db96d56Sopenharmony_ci tmpdir = self._create_files() 877db96d56Sopenharmony_ci self._make_tarball(tmpdir, 'archive', '.tar.xz', compress='xz') 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci @unittest.skipUnless(can_fs_encode('årchiv'), 907db96d56Sopenharmony_ci 'File system cannot handle this filename') 917db96d56Sopenharmony_ci def test_make_tarball_latin1(self): 927db96d56Sopenharmony_ci """ 937db96d56Sopenharmony_ci Mirror test_make_tarball, except filename contains latin characters. 947db96d56Sopenharmony_ci """ 957db96d56Sopenharmony_ci self.test_make_tarball('årchiv') # note this isn't a real word 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci @unittest.skipUnless(can_fs_encode('のアーカイブ'), 987db96d56Sopenharmony_ci 'File system cannot handle this filename') 997db96d56Sopenharmony_ci def test_make_tarball_extended(self): 1007db96d56Sopenharmony_ci """ 1017db96d56Sopenharmony_ci Mirror test_make_tarball, except filename contains extended 1027db96d56Sopenharmony_ci characters outside the latin charset. 1037db96d56Sopenharmony_ci """ 1047db96d56Sopenharmony_ci self.test_make_tarball('のアーカイブ') # japanese for archive 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci def _make_tarball(self, tmpdir, target_name, suffix, **kwargs): 1077db96d56Sopenharmony_ci tmpdir2 = self.mkdtemp() 1087db96d56Sopenharmony_ci unittest.skipUnless(splitdrive(tmpdir)[0] == splitdrive(tmpdir2)[0], 1097db96d56Sopenharmony_ci "source and target should be on same drive") 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci base_name = os.path.join(tmpdir2, target_name) 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci # working with relative paths to avoid tar warnings 1147db96d56Sopenharmony_ci with change_cwd(tmpdir): 1157db96d56Sopenharmony_ci make_tarball(splitdrive(base_name)[1], 'dist', **kwargs) 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci # check if the compressed tarball was created 1187db96d56Sopenharmony_ci tarball = base_name + suffix 1197db96d56Sopenharmony_ci self.assertTrue(os.path.exists(tarball)) 1207db96d56Sopenharmony_ci self.assertEqual(self._tarinfo(tarball), self._created_files) 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci def _tarinfo(self, path): 1237db96d56Sopenharmony_ci tar = tarfile.open(path) 1247db96d56Sopenharmony_ci try: 1257db96d56Sopenharmony_ci names = tar.getnames() 1267db96d56Sopenharmony_ci names.sort() 1277db96d56Sopenharmony_ci return names 1287db96d56Sopenharmony_ci finally: 1297db96d56Sopenharmony_ci tar.close() 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci _zip_created_files = ['dist/', 'dist/file1', 'dist/file2', 1327db96d56Sopenharmony_ci 'dist/sub/', 'dist/sub/file3', 'dist/sub2/'] 1337db96d56Sopenharmony_ci _created_files = [p.rstrip('/') for p in _zip_created_files] 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci def _create_files(self): 1367db96d56Sopenharmony_ci # creating something to tar 1377db96d56Sopenharmony_ci tmpdir = self.mkdtemp() 1387db96d56Sopenharmony_ci dist = os.path.join(tmpdir, 'dist') 1397db96d56Sopenharmony_ci os.mkdir(dist) 1407db96d56Sopenharmony_ci self.write_file([dist, 'file1'], 'xxx') 1417db96d56Sopenharmony_ci self.write_file([dist, 'file2'], 'xxx') 1427db96d56Sopenharmony_ci os.mkdir(os.path.join(dist, 'sub')) 1437db96d56Sopenharmony_ci self.write_file([dist, 'sub', 'file3'], 'xxx') 1447db96d56Sopenharmony_ci os.mkdir(os.path.join(dist, 'sub2')) 1457db96d56Sopenharmony_ci return tmpdir 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci @unittest.skipUnless(find_executable('tar') and find_executable('gzip') 1487db96d56Sopenharmony_ci and ZLIB_SUPPORT, 1497db96d56Sopenharmony_ci 'Need the tar, gzip and zlib command to run') 1507db96d56Sopenharmony_ci def test_tarfile_vs_tar(self): 1517db96d56Sopenharmony_ci tmpdir = self._create_files() 1527db96d56Sopenharmony_ci tmpdir2 = self.mkdtemp() 1537db96d56Sopenharmony_ci base_name = os.path.join(tmpdir2, 'archive') 1547db96d56Sopenharmony_ci old_dir = os.getcwd() 1557db96d56Sopenharmony_ci os.chdir(tmpdir) 1567db96d56Sopenharmony_ci try: 1577db96d56Sopenharmony_ci make_tarball(base_name, 'dist') 1587db96d56Sopenharmony_ci finally: 1597db96d56Sopenharmony_ci os.chdir(old_dir) 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci # check if the compressed tarball was created 1627db96d56Sopenharmony_ci tarball = base_name + '.tar.gz' 1637db96d56Sopenharmony_ci self.assertTrue(os.path.exists(tarball)) 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ci # now create another tarball using `tar` 1667db96d56Sopenharmony_ci tarball2 = os.path.join(tmpdir, 'archive2.tar.gz') 1677db96d56Sopenharmony_ci tar_cmd = ['tar', '-cf', 'archive2.tar', 'dist'] 1687db96d56Sopenharmony_ci gzip_cmd = ['gzip', '-f', '-9', 'archive2.tar'] 1697db96d56Sopenharmony_ci old_dir = os.getcwd() 1707db96d56Sopenharmony_ci os.chdir(tmpdir) 1717db96d56Sopenharmony_ci try: 1727db96d56Sopenharmony_ci spawn(tar_cmd) 1737db96d56Sopenharmony_ci spawn(gzip_cmd) 1747db96d56Sopenharmony_ci finally: 1757db96d56Sopenharmony_ci os.chdir(old_dir) 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci self.assertTrue(os.path.exists(tarball2)) 1787db96d56Sopenharmony_ci # let's compare both tarballs 1797db96d56Sopenharmony_ci self.assertEqual(self._tarinfo(tarball), self._created_files) 1807db96d56Sopenharmony_ci self.assertEqual(self._tarinfo(tarball2), self._created_files) 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci # trying an uncompressed one 1837db96d56Sopenharmony_ci base_name = os.path.join(tmpdir2, 'archive') 1847db96d56Sopenharmony_ci old_dir = os.getcwd() 1857db96d56Sopenharmony_ci os.chdir(tmpdir) 1867db96d56Sopenharmony_ci try: 1877db96d56Sopenharmony_ci make_tarball(base_name, 'dist', compress=None) 1887db96d56Sopenharmony_ci finally: 1897db96d56Sopenharmony_ci os.chdir(old_dir) 1907db96d56Sopenharmony_ci tarball = base_name + '.tar' 1917db96d56Sopenharmony_ci self.assertTrue(os.path.exists(tarball)) 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_ci # now for a dry_run 1947db96d56Sopenharmony_ci base_name = os.path.join(tmpdir2, 'archive') 1957db96d56Sopenharmony_ci old_dir = os.getcwd() 1967db96d56Sopenharmony_ci os.chdir(tmpdir) 1977db96d56Sopenharmony_ci try: 1987db96d56Sopenharmony_ci make_tarball(base_name, 'dist', compress=None, dry_run=True) 1997db96d56Sopenharmony_ci finally: 2007db96d56Sopenharmony_ci os.chdir(old_dir) 2017db96d56Sopenharmony_ci tarball = base_name + '.tar' 2027db96d56Sopenharmony_ci self.assertTrue(os.path.exists(tarball)) 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci @unittest.skipUnless(find_executable('compress'), 2057db96d56Sopenharmony_ci 'The compress program is required') 2067db96d56Sopenharmony_ci def test_compress_deprecated(self): 2077db96d56Sopenharmony_ci tmpdir = self._create_files() 2087db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp(), 'archive') 2097db96d56Sopenharmony_ci 2107db96d56Sopenharmony_ci # using compress and testing the PendingDeprecationWarning 2117db96d56Sopenharmony_ci old_dir = os.getcwd() 2127db96d56Sopenharmony_ci os.chdir(tmpdir) 2137db96d56Sopenharmony_ci try: 2147db96d56Sopenharmony_ci with check_warnings() as w: 2157db96d56Sopenharmony_ci warnings.simplefilter("always") 2167db96d56Sopenharmony_ci make_tarball(base_name, 'dist', compress='compress') 2177db96d56Sopenharmony_ci finally: 2187db96d56Sopenharmony_ci os.chdir(old_dir) 2197db96d56Sopenharmony_ci tarball = base_name + '.tar.Z' 2207db96d56Sopenharmony_ci self.assertTrue(os.path.exists(tarball)) 2217db96d56Sopenharmony_ci self.assertEqual(len(w.warnings), 1) 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci # same test with dry_run 2247db96d56Sopenharmony_ci os.remove(tarball) 2257db96d56Sopenharmony_ci old_dir = os.getcwd() 2267db96d56Sopenharmony_ci os.chdir(tmpdir) 2277db96d56Sopenharmony_ci try: 2287db96d56Sopenharmony_ci with check_warnings() as w: 2297db96d56Sopenharmony_ci warnings.simplefilter("always") 2307db96d56Sopenharmony_ci make_tarball(base_name, 'dist', compress='compress', 2317db96d56Sopenharmony_ci dry_run=True) 2327db96d56Sopenharmony_ci finally: 2337db96d56Sopenharmony_ci os.chdir(old_dir) 2347db96d56Sopenharmony_ci self.assertFalse(os.path.exists(tarball)) 2357db96d56Sopenharmony_ci self.assertEqual(len(w.warnings), 1) 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci @unittest.skipUnless(ZIP_SUPPORT and ZLIB_SUPPORT, 2387db96d56Sopenharmony_ci 'Need zip and zlib support to run') 2397db96d56Sopenharmony_ci def test_make_zipfile(self): 2407db96d56Sopenharmony_ci # creating something to tar 2417db96d56Sopenharmony_ci tmpdir = self._create_files() 2427db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp(), 'archive') 2437db96d56Sopenharmony_ci with change_cwd(tmpdir): 2447db96d56Sopenharmony_ci make_zipfile(base_name, 'dist') 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci # check if the compressed tarball was created 2477db96d56Sopenharmony_ci tarball = base_name + '.zip' 2487db96d56Sopenharmony_ci self.assertTrue(os.path.exists(tarball)) 2497db96d56Sopenharmony_ci with zipfile.ZipFile(tarball) as zf: 2507db96d56Sopenharmony_ci self.assertEqual(sorted(zf.namelist()), self._zip_created_files) 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') 2537db96d56Sopenharmony_ci def test_make_zipfile_no_zlib(self): 2547db96d56Sopenharmony_ci patch(self, archive_util.zipfile, 'zlib', None) # force zlib ImportError 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ci called = [] 2577db96d56Sopenharmony_ci zipfile_class = zipfile.ZipFile 2587db96d56Sopenharmony_ci def fake_zipfile(*a, **kw): 2597db96d56Sopenharmony_ci if kw.get('compression', None) == zipfile.ZIP_STORED: 2607db96d56Sopenharmony_ci called.append((a, kw)) 2617db96d56Sopenharmony_ci return zipfile_class(*a, **kw) 2627db96d56Sopenharmony_ci 2637db96d56Sopenharmony_ci patch(self, archive_util.zipfile, 'ZipFile', fake_zipfile) 2647db96d56Sopenharmony_ci 2657db96d56Sopenharmony_ci # create something to tar and compress 2667db96d56Sopenharmony_ci tmpdir = self._create_files() 2677db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp(), 'archive') 2687db96d56Sopenharmony_ci with change_cwd(tmpdir): 2697db96d56Sopenharmony_ci make_zipfile(base_name, 'dist') 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ci tarball = base_name + '.zip' 2727db96d56Sopenharmony_ci self.assertEqual(called, 2737db96d56Sopenharmony_ci [((tarball, "w"), {'compression': zipfile.ZIP_STORED})]) 2747db96d56Sopenharmony_ci self.assertTrue(os.path.exists(tarball)) 2757db96d56Sopenharmony_ci with zipfile.ZipFile(tarball) as zf: 2767db96d56Sopenharmony_ci self.assertEqual(sorted(zf.namelist()), self._zip_created_files) 2777db96d56Sopenharmony_ci 2787db96d56Sopenharmony_ci def test_check_archive_formats(self): 2797db96d56Sopenharmony_ci self.assertEqual(check_archive_formats(['gztar', 'xxx', 'zip']), 2807db96d56Sopenharmony_ci 'xxx') 2817db96d56Sopenharmony_ci self.assertIsNone(check_archive_formats(['gztar', 'bztar', 'xztar', 2827db96d56Sopenharmony_ci 'ztar', 'tar', 'zip'])) 2837db96d56Sopenharmony_ci 2847db96d56Sopenharmony_ci def test_make_archive(self): 2857db96d56Sopenharmony_ci tmpdir = self.mkdtemp() 2867db96d56Sopenharmony_ci base_name = os.path.join(tmpdir, 'archive') 2877db96d56Sopenharmony_ci self.assertRaises(ValueError, make_archive, base_name, 'xxx') 2887db96d56Sopenharmony_ci 2897db96d56Sopenharmony_ci def test_make_archive_cwd(self): 2907db96d56Sopenharmony_ci current_dir = os.getcwd() 2917db96d56Sopenharmony_ci def _breaks(*args, **kw): 2927db96d56Sopenharmony_ci raise RuntimeError() 2937db96d56Sopenharmony_ci ARCHIVE_FORMATS['xxx'] = (_breaks, [], 'xxx file') 2947db96d56Sopenharmony_ci try: 2957db96d56Sopenharmony_ci try: 2967db96d56Sopenharmony_ci make_archive('xxx', 'xxx', root_dir=self.mkdtemp()) 2977db96d56Sopenharmony_ci except: 2987db96d56Sopenharmony_ci pass 2997db96d56Sopenharmony_ci self.assertEqual(os.getcwd(), current_dir) 3007db96d56Sopenharmony_ci finally: 3017db96d56Sopenharmony_ci del ARCHIVE_FORMATS['xxx'] 3027db96d56Sopenharmony_ci 3037db96d56Sopenharmony_ci def test_make_archive_tar(self): 3047db96d56Sopenharmony_ci base_dir = self._create_files() 3057db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp() , 'archive') 3067db96d56Sopenharmony_ci res = make_archive(base_name, 'tar', base_dir, 'dist') 3077db96d56Sopenharmony_ci self.assertTrue(os.path.exists(res)) 3087db96d56Sopenharmony_ci self.assertEqual(os.path.basename(res), 'archive.tar') 3097db96d56Sopenharmony_ci self.assertEqual(self._tarinfo(res), self._created_files) 3107db96d56Sopenharmony_ci 3117db96d56Sopenharmony_ci @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') 3127db96d56Sopenharmony_ci def test_make_archive_gztar(self): 3137db96d56Sopenharmony_ci base_dir = self._create_files() 3147db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp() , 'archive') 3157db96d56Sopenharmony_ci res = make_archive(base_name, 'gztar', base_dir, 'dist') 3167db96d56Sopenharmony_ci self.assertTrue(os.path.exists(res)) 3177db96d56Sopenharmony_ci self.assertEqual(os.path.basename(res), 'archive.tar.gz') 3187db96d56Sopenharmony_ci self.assertEqual(self._tarinfo(res), self._created_files) 3197db96d56Sopenharmony_ci 3207db96d56Sopenharmony_ci @unittest.skipUnless(bz2, 'Need bz2 support to run') 3217db96d56Sopenharmony_ci def test_make_archive_bztar(self): 3227db96d56Sopenharmony_ci base_dir = self._create_files() 3237db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp() , 'archive') 3247db96d56Sopenharmony_ci res = make_archive(base_name, 'bztar', base_dir, 'dist') 3257db96d56Sopenharmony_ci self.assertTrue(os.path.exists(res)) 3267db96d56Sopenharmony_ci self.assertEqual(os.path.basename(res), 'archive.tar.bz2') 3277db96d56Sopenharmony_ci self.assertEqual(self._tarinfo(res), self._created_files) 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci @unittest.skipUnless(lzma, 'Need xz support to run') 3307db96d56Sopenharmony_ci def test_make_archive_xztar(self): 3317db96d56Sopenharmony_ci base_dir = self._create_files() 3327db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp() , 'archive') 3337db96d56Sopenharmony_ci res = make_archive(base_name, 'xztar', base_dir, 'dist') 3347db96d56Sopenharmony_ci self.assertTrue(os.path.exists(res)) 3357db96d56Sopenharmony_ci self.assertEqual(os.path.basename(res), 'archive.tar.xz') 3367db96d56Sopenharmony_ci self.assertEqual(self._tarinfo(res), self._created_files) 3377db96d56Sopenharmony_ci 3387db96d56Sopenharmony_ci def test_make_archive_owner_group(self): 3397db96d56Sopenharmony_ci # testing make_archive with owner and group, with various combinations 3407db96d56Sopenharmony_ci # this works even if there's not gid/uid support 3417db96d56Sopenharmony_ci if UID_GID_SUPPORT: 3427db96d56Sopenharmony_ci group = grp.getgrgid(0)[0] 3437db96d56Sopenharmony_ci owner = pwd.getpwuid(0)[0] 3447db96d56Sopenharmony_ci else: 3457db96d56Sopenharmony_ci group = owner = 'root' 3467db96d56Sopenharmony_ci 3477db96d56Sopenharmony_ci base_dir = self._create_files() 3487db96d56Sopenharmony_ci root_dir = self.mkdtemp() 3497db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp() , 'archive') 3507db96d56Sopenharmony_ci res = make_archive(base_name, 'zip', root_dir, base_dir, owner=owner, 3517db96d56Sopenharmony_ci group=group) 3527db96d56Sopenharmony_ci self.assertTrue(os.path.exists(res)) 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci res = make_archive(base_name, 'zip', root_dir, base_dir) 3557db96d56Sopenharmony_ci self.assertTrue(os.path.exists(res)) 3567db96d56Sopenharmony_ci 3577db96d56Sopenharmony_ci res = make_archive(base_name, 'tar', root_dir, base_dir, 3587db96d56Sopenharmony_ci owner=owner, group=group) 3597db96d56Sopenharmony_ci self.assertTrue(os.path.exists(res)) 3607db96d56Sopenharmony_ci 3617db96d56Sopenharmony_ci res = make_archive(base_name, 'tar', root_dir, base_dir, 3627db96d56Sopenharmony_ci owner='kjhkjhkjg', group='oihohoh') 3637db96d56Sopenharmony_ci self.assertTrue(os.path.exists(res)) 3647db96d56Sopenharmony_ci 3657db96d56Sopenharmony_ci @unittest.skipUnless(ZLIB_SUPPORT, "Requires zlib") 3667db96d56Sopenharmony_ci @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support") 3677db96d56Sopenharmony_ci def test_tarfile_root_owner(self): 3687db96d56Sopenharmony_ci tmpdir = self._create_files() 3697db96d56Sopenharmony_ci base_name = os.path.join(self.mkdtemp(), 'archive') 3707db96d56Sopenharmony_ci old_dir = os.getcwd() 3717db96d56Sopenharmony_ci os.chdir(tmpdir) 3727db96d56Sopenharmony_ci group = grp.getgrgid(0)[0] 3737db96d56Sopenharmony_ci owner = pwd.getpwuid(0)[0] 3747db96d56Sopenharmony_ci try: 3757db96d56Sopenharmony_ci archive_name = make_tarball(base_name, 'dist', compress=None, 3767db96d56Sopenharmony_ci owner=owner, group=group) 3777db96d56Sopenharmony_ci finally: 3787db96d56Sopenharmony_ci os.chdir(old_dir) 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci # check if the compressed tarball was created 3817db96d56Sopenharmony_ci self.assertTrue(os.path.exists(archive_name)) 3827db96d56Sopenharmony_ci 3837db96d56Sopenharmony_ci # now checks the rights 3847db96d56Sopenharmony_ci archive = tarfile.open(archive_name) 3857db96d56Sopenharmony_ci try: 3867db96d56Sopenharmony_ci for member in archive.getmembers(): 3877db96d56Sopenharmony_ci self.assertEqual(member.uid, 0) 3887db96d56Sopenharmony_ci self.assertEqual(member.gid, 0) 3897db96d56Sopenharmony_ci finally: 3907db96d56Sopenharmony_ci archive.close() 3917db96d56Sopenharmony_ci 3927db96d56Sopenharmony_cidef test_suite(): 3937db96d56Sopenharmony_ci return unittest.TestLoader().loadTestsFromTestCase(ArchiveUtilTestCase) 3947db96d56Sopenharmony_ci 3957db96d56Sopenharmony_ciif __name__ == "__main__": 3967db96d56Sopenharmony_ci run_unittest(test_suite()) 397