]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/distutils/tests/test_archive_util.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / distutils / tests / test_archive_util.py
CommitLineData
4710c53d 1"""Tests for distutils.archive_util."""\r
2__revision__ = "$Id$"\r
3\r
4import unittest\r
5import os\r
6import tarfile\r
7from os.path import splitdrive\r
8import warnings\r
9\r
10from distutils.archive_util import (check_archive_formats, make_tarball,\r
11 make_zipfile, make_archive,\r
12 ARCHIVE_FORMATS)\r
13from distutils.spawn import find_executable, spawn\r
14from distutils.tests import support\r
15from test.test_support import check_warnings, run_unittest\r
16\r
17try:\r
18 import grp\r
19 import pwd\r
20 UID_GID_SUPPORT = True\r
21except ImportError:\r
22 UID_GID_SUPPORT = False\r
23\r
24try:\r
25 import zipfile\r
26 ZIP_SUPPORT = True\r
27except ImportError:\r
28 ZIP_SUPPORT = find_executable('zip')\r
29\r
30# some tests will fail if zlib is not available\r
31try:\r
32 import zlib\r
33except ImportError:\r
34 zlib = None\r
35\r
36\r
37class ArchiveUtilTestCase(support.TempdirManager,\r
38 support.LoggingSilencer,\r
39 unittest.TestCase):\r
40\r
41 @unittest.skipUnless(zlib, "requires zlib")\r
42 def test_make_tarball(self):\r
43 # creating something to tar\r
44 tmpdir = self.mkdtemp()\r
45 self.write_file([tmpdir, 'file1'], 'xxx')\r
46 self.write_file([tmpdir, 'file2'], 'xxx')\r
47 os.mkdir(os.path.join(tmpdir, 'sub'))\r
48 self.write_file([tmpdir, 'sub', 'file3'], 'xxx')\r
49\r
50 tmpdir2 = self.mkdtemp()\r
51 unittest.skipUnless(splitdrive(tmpdir)[0] == splitdrive(tmpdir2)[0],\r
52 "source and target should be on same drive")\r
53\r
54 base_name = os.path.join(tmpdir2, 'archive')\r
55\r
56 # working with relative paths to avoid tar warnings\r
57 old_dir = os.getcwd()\r
58 os.chdir(tmpdir)\r
59 try:\r
60 make_tarball(splitdrive(base_name)[1], '.')\r
61 finally:\r
62 os.chdir(old_dir)\r
63\r
64 # check if the compressed tarball was created\r
65 tarball = base_name + '.tar.gz'\r
66 self.assertTrue(os.path.exists(tarball))\r
67\r
68 # trying an uncompressed one\r
69 base_name = os.path.join(tmpdir2, 'archive')\r
70 old_dir = os.getcwd()\r
71 os.chdir(tmpdir)\r
72 try:\r
73 make_tarball(splitdrive(base_name)[1], '.', compress=None)\r
74 finally:\r
75 os.chdir(old_dir)\r
76 tarball = base_name + '.tar'\r
77 self.assertTrue(os.path.exists(tarball))\r
78\r
79 def _tarinfo(self, path):\r
80 tar = tarfile.open(path)\r
81 try:\r
82 names = tar.getnames()\r
83 names.sort()\r
84 return tuple(names)\r
85 finally:\r
86 tar.close()\r
87\r
88 def _create_files(self):\r
89 # creating something to tar\r
90 tmpdir = self.mkdtemp()\r
91 dist = os.path.join(tmpdir, 'dist')\r
92 os.mkdir(dist)\r
93 self.write_file([dist, 'file1'], 'xxx')\r
94 self.write_file([dist, 'file2'], 'xxx')\r
95 os.mkdir(os.path.join(dist, 'sub'))\r
96 self.write_file([dist, 'sub', 'file3'], 'xxx')\r
97 os.mkdir(os.path.join(dist, 'sub2'))\r
98 tmpdir2 = self.mkdtemp()\r
99 base_name = os.path.join(tmpdir2, 'archive')\r
100 return tmpdir, tmpdir2, base_name\r
101\r
102 @unittest.skipUnless(zlib, "Requires zlib")\r
103 @unittest.skipUnless(find_executable('tar') and find_executable('gzip'),\r
104 'Need the tar command to run')\r
105 def test_tarfile_vs_tar(self):\r
106 tmpdir, tmpdir2, base_name = self._create_files()\r
107 old_dir = os.getcwd()\r
108 os.chdir(tmpdir)\r
109 try:\r
110 make_tarball(base_name, 'dist')\r
111 finally:\r
112 os.chdir(old_dir)\r
113\r
114 # check if the compressed tarball was created\r
115 tarball = base_name + '.tar.gz'\r
116 self.assertTrue(os.path.exists(tarball))\r
117\r
118 # now create another tarball using `tar`\r
119 tarball2 = os.path.join(tmpdir, 'archive2.tar.gz')\r
120 tar_cmd = ['tar', '-cf', 'archive2.tar', 'dist']\r
121 gzip_cmd = ['gzip', '-f9', 'archive2.tar']\r
122 old_dir = os.getcwd()\r
123 os.chdir(tmpdir)\r
124 try:\r
125 spawn(tar_cmd)\r
126 spawn(gzip_cmd)\r
127 finally:\r
128 os.chdir(old_dir)\r
129\r
130 self.assertTrue(os.path.exists(tarball2))\r
131 # let's compare both tarballs\r
132 self.assertEqual(self._tarinfo(tarball), self._tarinfo(tarball2))\r
133\r
134 # trying an uncompressed one\r
135 base_name = os.path.join(tmpdir2, 'archive')\r
136 old_dir = os.getcwd()\r
137 os.chdir(tmpdir)\r
138 try:\r
139 make_tarball(base_name, 'dist', compress=None)\r
140 finally:\r
141 os.chdir(old_dir)\r
142 tarball = base_name + '.tar'\r
143 self.assertTrue(os.path.exists(tarball))\r
144\r
145 # now for a dry_run\r
146 base_name = os.path.join(tmpdir2, 'archive')\r
147 old_dir = os.getcwd()\r
148 os.chdir(tmpdir)\r
149 try:\r
150 make_tarball(base_name, 'dist', compress=None, dry_run=True)\r
151 finally:\r
152 os.chdir(old_dir)\r
153 tarball = base_name + '.tar'\r
154 self.assertTrue(os.path.exists(tarball))\r
155\r
156 @unittest.skipUnless(find_executable('compress'),\r
157 'The compress program is required')\r
158 def test_compress_deprecated(self):\r
159 tmpdir, tmpdir2, base_name = self._create_files()\r
160\r
161 # using compress and testing the PendingDeprecationWarning\r
162 old_dir = os.getcwd()\r
163 os.chdir(tmpdir)\r
164 try:\r
165 with check_warnings() as w:\r
166 warnings.simplefilter("always")\r
167 make_tarball(base_name, 'dist', compress='compress')\r
168 finally:\r
169 os.chdir(old_dir)\r
170 tarball = base_name + '.tar.Z'\r
171 self.assertTrue(os.path.exists(tarball))\r
172 self.assertEqual(len(w.warnings), 1)\r
173\r
174 # same test with dry_run\r
175 os.remove(tarball)\r
176 old_dir = os.getcwd()\r
177 os.chdir(tmpdir)\r
178 try:\r
179 with check_warnings() as w:\r
180 warnings.simplefilter("always")\r
181 make_tarball(base_name, 'dist', compress='compress',\r
182 dry_run=True)\r
183 finally:\r
184 os.chdir(old_dir)\r
185 self.assertTrue(not os.path.exists(tarball))\r
186 self.assertEqual(len(w.warnings), 1)\r
187\r
188 @unittest.skipUnless(zlib, "Requires zlib")\r
189 @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run')\r
190 def test_make_zipfile(self):\r
191 # creating something to tar\r
192 tmpdir = self.mkdtemp()\r
193 self.write_file([tmpdir, 'file1'], 'xxx')\r
194 self.write_file([tmpdir, 'file2'], 'xxx')\r
195\r
196 tmpdir2 = self.mkdtemp()\r
197 base_name = os.path.join(tmpdir2, 'archive')\r
198 make_zipfile(base_name, tmpdir)\r
199\r
200 # check if the compressed tarball was created\r
201 tarball = base_name + '.zip'\r
202\r
203 def test_check_archive_formats(self):\r
204 self.assertEqual(check_archive_formats(['gztar', 'xxx', 'zip']),\r
205 'xxx')\r
206 self.assertEqual(check_archive_formats(['gztar', 'zip']), None)\r
207\r
208 def test_make_archive(self):\r
209 tmpdir = self.mkdtemp()\r
210 base_name = os.path.join(tmpdir, 'archive')\r
211 self.assertRaises(ValueError, make_archive, base_name, 'xxx')\r
212\r
213 @unittest.skipUnless(zlib, "Requires zlib")\r
214 def test_make_archive_owner_group(self):\r
215 # testing make_archive with owner and group, with various combinations\r
216 # this works even if there's not gid/uid support\r
217 if UID_GID_SUPPORT:\r
218 group = grp.getgrgid(0)[0]\r
219 owner = pwd.getpwuid(0)[0]\r
220 else:\r
221 group = owner = 'root'\r
222\r
223 base_dir, root_dir, base_name = self._create_files()\r
224 base_name = os.path.join(self.mkdtemp() , 'archive')\r
225 res = make_archive(base_name, 'zip', root_dir, base_dir, owner=owner,\r
226 group=group)\r
227 self.assertTrue(os.path.exists(res))\r
228\r
229 res = make_archive(base_name, 'zip', root_dir, base_dir)\r
230 self.assertTrue(os.path.exists(res))\r
231\r
232 res = make_archive(base_name, 'tar', root_dir, base_dir,\r
233 owner=owner, group=group)\r
234 self.assertTrue(os.path.exists(res))\r
235\r
236 res = make_archive(base_name, 'tar', root_dir, base_dir,\r
237 owner='kjhkjhkjg', group='oihohoh')\r
238 self.assertTrue(os.path.exists(res))\r
239\r
240 @unittest.skipUnless(zlib, "Requires zlib")\r
241 @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")\r
242 def test_tarfile_root_owner(self):\r
243 tmpdir, tmpdir2, base_name = self._create_files()\r
244 old_dir = os.getcwd()\r
245 os.chdir(tmpdir)\r
246 group = grp.getgrgid(0)[0]\r
247 owner = pwd.getpwuid(0)[0]\r
248 try:\r
249 archive_name = make_tarball(base_name, 'dist', compress=None,\r
250 owner=owner, group=group)\r
251 finally:\r
252 os.chdir(old_dir)\r
253\r
254 # check if the compressed tarball was created\r
255 self.assertTrue(os.path.exists(archive_name))\r
256\r
257 # now checks the rights\r
258 archive = tarfile.open(archive_name)\r
259 try:\r
260 for member in archive.getmembers():\r
261 self.assertEqual(member.uid, 0)\r
262 self.assertEqual(member.gid, 0)\r
263 finally:\r
264 archive.close()\r
265\r
266 def test_make_archive_cwd(self):\r
267 current_dir = os.getcwd()\r
268 def _breaks(*args, **kw):\r
269 raise RuntimeError()\r
270 ARCHIVE_FORMATS['xxx'] = (_breaks, [], 'xxx file')\r
271 try:\r
272 try:\r
273 make_archive('xxx', 'xxx', root_dir=self.mkdtemp())\r
274 except:\r
275 pass\r
276 self.assertEqual(os.getcwd(), current_dir)\r
277 finally:\r
278 del ARCHIVE_FORMATS['xxx']\r
279\r
280def test_suite():\r
281 return unittest.makeSuite(ArchiveUtilTestCase)\r
282\r
283if __name__ == "__main__":\r
284 run_unittest(test_suite())\r