aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/zip.rs180
1 files changed, 123 insertions, 57 deletions
diff --git a/tests/zip.rs b/tests/zip.rs
index e00789d..f0451cb 100644
--- a/tests/zip.rs
+++ b/tests/zip.rs
@@ -30,12 +30,20 @@ fn test_zip_aes() {
30 ); 30 );
31 31
32 for encryption in ["aes128", "aes192", "aes256"] { 32 for encryption in ["aes128", "aes192", "aes256"] {
33 assert!(archive 33 assert_eq!(
34 .get_file_reader_by_name(&format!("{encryption}/store")) 34 archive
35 .is_err_and(|e| e == ZipError::PasswordIsNotSpecified)); 35 .get_file_reader_by_name(&format!("{encryption}/store"))
36 assert!(archive 36 .err()
37 .get_file_reader_by_name_with_password("aes128/store", b"wrong_passwd") 37 .unwrap(),
38 .is_err_and(|e| e == ZipError::WrongPassword)); 38 ZipError::PasswordIsNotSpecified
39 );
40 assert_eq!(
41 archive
42 .get_file_reader_by_name_with_password("aes128/store", b"wrong_passwd")
43 .err()
44 .unwrap(),
45 ZipError::WrongPassword
46 );
39 47
40 for (name, check) in [ 48 for (name, check) in [
41 ("store", "98f64f03b3d168875ffa778f7fb4"), 49 ("store", "98f64f03b3d168875ffa778f7fb4"),
@@ -68,12 +76,17 @@ fn test_zip_weak() {
68 vec!["store", "deflate", "bzip"] 76 vec!["store", "deflate", "bzip"]
69 ); 77 );
70 78
71 assert!(archive 79 assert_eq!(
72 .get_file_reader_by_name("store") 80 archive.get_file_reader_by_name("store").err().unwrap(),
73 .is_err_and(|e| e == ZipError::PasswordIsNotSpecified)); 81 ZipError::PasswordIsNotSpecified
74 assert!(archive 82 );
75 .get_file_reader_by_name_with_password("store", b"wrong_passwd") 83 assert_eq!(
76 .is_err_and(|e| e == ZipError::WrongPassword)); 84 archive
85 .get_file_reader_by_name_with_password("store", b"wrong_passwd")
86 .err()
87 .unwrap(),
88 ZipError::WrongPassword
89 );
77 90
78 for (name, check) in [ 91 for (name, check) in [
79 ("store", "1e643774f40510e37c6f3c451d9d"), 92 ("store", "1e643774f40510e37c6f3c451d9d"),
@@ -147,66 +160,119 @@ fn test_zip() {
147 160
148 f.seek(SeekFrom::Start(7)).unwrap(); 161 f.seek(SeekFrom::Start(7)).unwrap();
149 assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7); 162 assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7);
150 assert!(f 163 assert_eq!(
151 .seek(SeekFrom::End(-100)) 164 f.seek(SeekFrom::End(-100))
152 .is_err_and(|e| e.get_ref().unwrap().to_string() 165 .err()
153 == "Invalid seek to a negative or overflowing position")); 166 .unwrap()
167 .get_ref()
168 .unwrap()
169 .to_string(),
170 "Invalid seek to a negative or overflowing position"
171 );
154 assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7); 172 assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7);
155 173
156 assert_eq!(f.seek(SeekFrom::Start(100)).unwrap(), 14); 174 assert_eq!(f.seek(SeekFrom::Start(100)).unwrap(), 14);
157 175
158 for index in 0..archive.len() { 176 for index in 1..archive.len() {
159 let mut f = archive.get_file_reader_by_index(index).unwrap(); 177 let mut f = archive.get_file_reader_by_index(index).unwrap();
160 let mut data = String::new(); 178 let mut data = String::new();
161 f.read_to_string(&mut data).unwrap(); 179 f.read_to_string(&mut data).unwrap();
162 assert_eq!(data, "test file data"); 180 assert_eq!(data, "test file data");
163 assert!(!f.is_seekable() || f.info().name == "store") 181 assert!(!f.is_seekable())
164 } 182 }
165} 183}
166 184
167#[test] 185#[test]
168fn test_bad_zip() { 186fn test_bad_zip() {
169 assert!(Archive::<Zip<_>>::read(Cursor::new(&[])) 187 assert_eq!(
170 .is_err_and(|e| e == ZipError::StructNotFound("Eocdr"))); 188 Archive::<Zip<_>>::read(Cursor::new(&[])).err().unwrap(),
189 ZipError::StructNotFound("Eocdr")
190 );
191
192 assert_eq!(
193 Archive::<Zip<_>>::read(Cursor::new(&[
194 0, 0, 0, 0, // Eocdr64
195 //
196 0x50, 0x4b, 0x06, 0x07, 0, 0, 0, 0, //
197 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64Locator
198 //
199 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, //
200 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr
201 ]))
202 .err()
203 .unwrap(),
204 ZipError::InvalidSignature("Eocdr64")
205 );
206
207 assert_eq!(
208 Archive::<Zip<_>>::read(Cursor::new(&[
209 0x50, 0x4b, 0x06, 0x06, // Eocdr64
210 //
211 0x50, 0x4b, 0x06, 0x07, 0, 0, 0, 0, //
212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64Locator
213 //
214 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, //
215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr
216 ]))
217 .err()
218 .unwrap(),
219 ZipError::Overlapping("Eocdr64", "Eocdr64Locator")
220 );
171 221
172 assert!(Archive::<Zip<_>>::read(Cursor::new(&[ 222 assert_eq!(
173 // No Eocdr64 223 Archive::<Zip<_>>::read(Cursor::new(&[
174 0x50, 0x4b, 0x06, 0x07, 0, 0, 0, 0, // 224 0x50, 0x4b, 0x06, 0x06, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //
175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64Locator 225 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //
176 // 226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64
177 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, // 227 //
178 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr 228 0x50, 0x4b, 0x06, 0x07, 0, 0, 0, 0, //
179 ])) 229 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64Locator
180 .is_err_and(|e| e == ZipError::InvalidSignature("Eocdr64"))); 230 //
231 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, //
232 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr
233 ]))
234 .err()
235 .unwrap(),
236 ZipError::Overlapping("Eocdr64", "Eocdr64Locator")
237 );
181 238
182 assert!(Archive::<Zip<_>>::read(Cursor::new(&[ 239 assert_eq!(
183 0x50, 0x4b, 0x06, 0x06, // Eocdr64 240 Archive::<Zip<_>>::read(Cursor::new(&[
184 // 241 // No records
185 0x50, 0x4b, 0x06, 0x07, 0, 0, 0, 0, // 242 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, //
186 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64Locator 243 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr
187 // 244 ]))
188 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, // 245 .err()
189 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr 246 .unwrap(),
190 ])) 247 ZipError::Overlapping("Cdr", "Eocdr")
191 .is_err_and(|e| e == ZipError::Overlapping("Eocdr64", "Eocdr64Locator"))); 248 );
192 249
193 assert!(Archive::<Zip<_>>::read(Cursor::new(&[ 250 assert_eq!(
194 // No records 251 Archive::<Zip<_>>::read(Cursor::new(&[
195 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, // 252 0x50, 0x4b, 0x06, 0x06, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //
196 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr 253 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //
197 ])) 254 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64
198 .is_err_and(|e| e == ZipError::Overlapping("Cdr", "Eocdr"))); 255 //
256 0x50, 0x4b, 0x06, 0x07, 0, 0, 0, 0, //
257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64Locator
258 //
259 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, //
260 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr
261 ]))
262 .err()
263 .unwrap(),
264 ZipError::Overlapping("Cdr", "Eocdr64")
265 );
199 266
200 assert!(Archive::<Zip<_>>::read(Cursor::new(&[ 267 assert_eq!(
201 0x50, 0x4b, 0x06, 0x06, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 268 Archive::<Zip<_>>::read(Cursor::new(&[
202 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 269 0, 0, 0, 0, // Cdr
203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64 270 //
204 // 271 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, //
205 0x50, 0x4b, 0x06, 0x07, 0, 0, 0, 0, // 272 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr
206 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr64Locator 273 ]))
207 // 274 .err()
208 0x50, 0x4b, 0x05, 0x06, 0, 0, 0, 0, 0, // 275 .unwrap(),
209 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Eocdr 276 ZipError::InvalidSignature("Cdr")
210 ])) 277 );
211 .is_err_and(|e| e == ZipError::Overlapping("Cdr", "Eocdr64")));
212} 278}