When using --list, sort the results.
[zeroinstall.git] / tests / testunpack.py
blob04dcaa4ee6ff0a19e74675245ef372e364903917
1 #!/usr/bin/env python2.3
2 import sys, tempfile, os, shutil, sha
3 import unittest
5 sys.path.insert(0, '..')
6 from zeroinstall.zerostore import unpack, manifest
7 from zeroinstall import SafeException
9 class TestUnpack(unittest.TestCase):
10 def setUp(self):
11 self.tmpdir = tempfile.mkdtemp('-testunpack')
13 def tearDown(self):
14 shutil.rmtree(self.tmpdir)
16 def testBadExt(self):
17 try:
18 unpack.unpack_archive('ftp://foo/file.foo', file('HelloWorld.tgz'), self.tmpdir)
19 assert False
20 except SafeException, ex:
21 assert 'Unknown extension' in str(ex)
23 def testTgz(self):
24 unpack.unpack_archive('ftp://foo/file.tgz', file('HelloWorld.tgz'), self.tmpdir)
25 self.assert_manifest('sha1=3ce644dc725f1d21cfcf02562c76f375944b266a')
27 def testExtract(self):
28 unpack.unpack_archive('ftp://foo/file.tgz', file('HelloWorld.tgz'), self.tmpdir, extract = 'HelloWorld')
29 self.assert_manifest('sha1=3ce644dc725f1d21cfcf02562c76f375944b266a')
31 def testExtractIllegal(self):
32 try:
33 unpack.unpack_archive('ftp://foo/file.tgz', file('HelloWorld.tgz'), self.tmpdir, extract = 'Hello`World`')
34 assert False
35 except SafeException, ex:
36 assert 'Illegal' in str(ex)
38 def testExtractFails(self):
39 stderr = os.dup(2)
40 try:
41 null = os.open('/dev/null', os.O_RDONLY)
42 os.close(2)
43 os.dup2(null, 2)
44 try:
45 unpack.unpack_archive('ftp://foo/file.tgz', file('HelloWorld.tgz'), self.tmpdir, extract = 'HelloWorld2')
46 assert False
47 except SafeException, ex:
48 assert 'Failed to extract' in str(ex)
49 finally:
50 os.dup2(stderr, 2)
52 def testTargz(self):
53 unpack.unpack_archive('ftp://foo/file.tar.GZ', file('HelloWorld.tgz'), self.tmpdir)
54 self.assert_manifest('sha1=3ce644dc725f1d21cfcf02562c76f375944b266a')
56 def testTbz(self):
57 unpack.unpack_archive('ftp://foo/file.tar.bz2', file('HelloWorld.tar.bz2'), self.tmpdir)
58 self.assert_manifest('sha1=3ce644dc725f1d21cfcf02562c76f375944b266a')
60 def testRPM(self):
61 unpack.unpack_archive('ftp://foo/file.rpm', file('dummy-1-1.noarch.rpm'), self.tmpdir)
62 self.assert_manifest('sha1=7be9228c8fe2a1434d4d448c4cf130e3c8a4f53d')
64 def testDeb(self):
65 unpack.unpack_archive('ftp://foo/file.deb', file('dummy_1-1_all.deb'), self.tmpdir)
66 self.assert_manifest('sha1new=2c725156ec3832b7980a3de2270b3d8d85d4e3ea')
68 def assert_manifest(self, required):
69 alg_name = required.split('=', 1)[0]
70 sha1 = alg_name + '=' + manifest.add_manifest_file(self.tmpdir, manifest.get_algorithm(alg_name)).hexdigest()
71 self.assertEquals(sha1, required)
73 suite = unittest.makeSuite(TestUnpack)
74 if __name__ == '__main__':
75 sys.argv.append('-v')
76 unittest.main()