1 #!/usr/bin/env python2.3
2 import sys
, tempfile
, os
, shutil
, sha
5 sys
.path
.insert(0, '..')
6 from zeroinstall
.zerostore
import unpack
, manifest
7 from zeroinstall
import SafeException
9 class TestUnpack(unittest
.TestCase
):
11 self
.tmpdir
= tempfile
.mkdtemp('-testunpack')
14 shutil
.rmtree(self
.tmpdir
)
18 unpack
.unpack_archive('ftp://foo/file.foo', file('HelloWorld.tgz'), self
.tmpdir
)
20 except SafeException
, ex
:
21 assert 'Unknown extension' in str(ex
)
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
):
33 unpack
.unpack_archive('ftp://foo/file.tgz', file('HelloWorld.tgz'), self
.tmpdir
, extract
= 'Hello`World`')
35 except SafeException
, ex
:
36 assert 'Illegal' in str(ex
)
38 def testExtractFails(self
):
41 null
= os
.open('/dev/null', os
.O_RDONLY
)
45 unpack
.unpack_archive('ftp://foo/file.tgz', file('HelloWorld.tgz'), self
.tmpdir
, extract
= 'HelloWorld2')
47 except SafeException
, ex
:
48 assert 'Failed to extract' in str(ex
)
53 unpack
.unpack_archive('ftp://foo/file.tar.GZ', file('HelloWorld.tgz'), self
.tmpdir
)
54 self
.assert_manifest('sha1=3ce644dc725f1d21cfcf02562c76f375944b266a')
57 unpack
.unpack_archive('ftp://foo/file.tar.bz2', file('HelloWorld.tar.bz2'), self
.tmpdir
)
58 self
.assert_manifest('sha1=3ce644dc725f1d21cfcf02562c76f375944b266a')
61 unpack
.unpack_archive('ftp://foo/file.rpm', file('dummy-1-1.noarch.rpm'), self
.tmpdir
)
62 self
.assert_manifest('sha1=7be9228c8fe2a1434d4d448c4cf130e3c8a4f53d')
64 def assert_manifest(self
, required
):
65 sha1
= 'sha1=' + manifest
.add_manifest_file(self
.tmpdir
, sha
.new()).hexdigest()
66 self
.assertEquals(sha1
, required
)
68 suite
= unittest
.makeSuite(TestUnpack
)
69 if __name__
== '__main__':