8 from datetime
import datetime
9 from nose
.tools
import *
14 if isinstance(dt
, datetime
):
15 return dt
.isoformat('T')
16 elif isinstance(dt
, tuple):
17 return '%04d-%02d-%02d %02d:%02d:%02d' % dt
24 if kwargs
[k
] is not None:
30 for item
in rf
.infolist():
31 info
= mkitem(fn
=item
.filename
,
32 file_size
=item
.file_size
,
33 compress_size
=item
.compress_size
,
35 date_time
=render_date(item
.date_time
),
36 arctime
=render_date(item
.arctime
),
37 mtime
=render_date(item
.mtime
),
38 atime
=render_date(item
.atime
),
39 ctime
=render_date(item
.ctime
),
41 extract_version
=item
.extract_version
,
42 compress_type
=item
.compress_type
,
50 return 'Different lengths'
52 for i
, xa
in enumerate(a
):
56 problems
.append('NewKey(%d,%s)=%r' % (i
, k
, xa
[k
]))
59 problems
.append('MissingKey(%d,%s)=%r' % (i
, k
, xb
[k
]))
61 if k
in xb
and xa
[k
] != xb
[k
]:
62 problems
.append('ErrValue(%d,%s):got=%r/exp=%r' % (i
, k
, xa
[k
], xb
[k
]))
63 return '; '.join(problems
)
66 eq_(a
, b
, diffs(a
, b
))
72 def test_rar3_header_encryption():
73 r
= rarfile
.RarFile('test/files/rar3-comment-hpsw.rar', 'r')
74 eq_(r
.needs_password(), True)
79 r
.setpassword('password')
80 assert_true(r
.needs_password())
81 eq_(r
.namelist(), [u
'file1.txt', u
'file2.txt'])
82 assert_not_equal(r
.comment
, None)
83 eq_(r
.comment
, 'RARcomment\n')
84 except rarfile
.NoCrypto
:
87 def test_rar5_header_encryption():
88 r
= rarfile
.RarFile('test/files/rar5-hpsw.rar')
89 eq_(r
.needs_password(), True)
94 r
.setpassword('password')
95 assert_true(r
.needs_password())
96 eq_(r
.namelist(), [u
'stest1.txt', u
'stest2.txt'])
97 assert_not_equal(r
.comment
, None)
98 eq_(r
.comment
, 'RAR5 archive - hdr-password\n')
99 except rarfile
.NoCrypto
:
103 def get_vol_info(extver
=20, tz
='', hr
='11'):
105 mkitem(CRC
=1352324940,
106 date_time
='2016-05-24 %s:42:37%s' % (hr
, ''),
107 mtime
='2016-05-24T%s:42:37%s' % (hr
, tz
),
109 compress_size
=205000,
110 extract_version
=extver
,
114 fn
=u
'vols/bigfile.txt'),
115 mkitem(CRC
=3498712966,
116 date_time
='2016-05-24 %s:42:43%s' % (hr
, ''),
117 mtime
='2016-05-24T%s:42:43%s' % (hr
, tz
),
118 extract_version
=extver
,
124 fn
=u
'vols/smallfile.txt')]
126 def test_rar3_vols():
127 r
= rarfile
.RarFile('test/files/rar3-vols.part1.rar')
128 eq_(r
.needs_password(), False)
130 eq_(r
.strerror(), None)
131 cmp_struct(dumparc(r
), get_vol_info())
132 eq_(r
.volumelist(), [
133 'test/files/rar3-vols.part1.rar',
134 'test/files/rar3-vols.part2.rar',
135 'test/files/rar3-vols.part3.rar'])
137 def test_rar3_oldvols():
138 r
= rarfile
.RarFile('test/files/rar3-old.rar')
139 eq_(r
.needs_password(), False)
141 eq_(r
.strerror(), None)
142 cmp_struct(dumparc(r
), get_vol_info())
143 eq_(r
.volumelist(), [
144 'test/files/rar3-old.rar',
145 'test/files/rar3-old.r00',
146 'test/files/rar3-old.r01'])
148 def test_rar5_vols():
149 r
= rarfile
.RarFile('test/files/rar5-vols.part1.rar')
150 eq_(r
.needs_password(), False)
152 eq_(r
.strerror(), None)
153 cmp_struct(dumparc(r
), get_vol_info(50, '+00:00', '08'))
154 eq_(r
.volumelist(), [
155 'test/files/rar5-vols.part1.rar',
156 'test/files/rar5-vols.part2.rar',
157 'test/files/rar5-vols.part3.rar'])
159 def expect_ctime(mtime
, ctime
):
162 date_time
=mtime
.split('.')[0].replace('T', ' '),
173 def test_rar3_ctime0():
174 r
= rarfile
.RarFile('test/files/ctime0.rar')
175 cmp_struct(dumparc(r
), expect_ctime('2011-05-10T21:28:47.899345', None))
177 def test_rar3_ctime1():
178 r
= rarfile
.RarFile('test/files/ctime1.rar')
179 cmp_struct(dumparc(r
), expect_ctime('2011-05-10T21:28:47.899345', '2011-05-10T21:28:47'))
181 def test_rar3_ctime2():
182 r
= rarfile
.RarFile('test/files/ctime2.rar')
183 cmp_struct(dumparc(r
), expect_ctime('2011-05-10T21:28:47.899345', '2011-05-10T21:28:47.897843'))
185 def test_rar3_ctime3():
186 r
= rarfile
.RarFile('test/files/ctime3.rar')
187 cmp_struct(dumparc(r
), expect_ctime('2011-05-10T21:28:47.899345', '2011-05-10T21:28:47.899328'))
189 def test_rar3_ctime4():
190 r
= rarfile
.RarFile('test/files/ctime4.rar')
191 cmp_struct(dumparc(r
), expect_ctime('2011-05-10T21:28:47.899345', '2011-05-10T21:28:47.899345'))
193 def test_rar5_times():
194 r
= rarfile
.RarFile('test/files/rar5-times.rar')
195 cmp_struct(dumparc(r
), [mkitem(
199 compress_type
=rarfile
.RAR_M3
,
201 host_os
=rarfile
.RAR_OS_UNIX
,
203 date_time
='2011-06-12 09:53:33',
204 mtime
='2011-06-12T09:53:33+00:00',
205 atime
='2016-05-22T09:12:36+00:00',
210 eq_(rarfile
._next
_oldvol
('qq00.part0.rar'), 'qq00.part0.r00')
211 eq_(rarfile
._next
_oldvol
('qq00.part0.r00'), 'qq00.part0.r01')
212 eq_(rarfile
._next
_oldvol
('qq00.part0.r29'), 'qq00.part0.r30')
213 eq_(rarfile
._next
_oldvol
('qq00.part0.r99'), 'qq00.part0.s00')
216 eq_(rarfile
._next
_newvol
('qq00.part0.rar'), 'qq00.part1.rar')
217 eq_(rarfile
._next
_newvol
('qq00.part09.rar'), 'qq00.part10.rar')
218 eq_(rarfile
._next
_newvol
('qq00.part99.rar'), 'qq00.paru00.rar')
220 @raises(rarfile
.BadRarName
)
221 def test_newvols_err():
222 rarfile
._next
_newvol
('xx.rar')