@@ -119,31 +119,33 @@ mod tests {
119119 use std:: io:: Write ;
120120 use zip:: write:: SimpleFileOptions ;
121121
122- fn create_test_archive ( ) -> fs:: File {
122+ fn create_test_archive ( file_count : u32 ) -> fs:: File {
123123 let mut tf = tempfile:: tempfile ( ) . unwrap ( ) ;
124124
125125 let objectcontent: Vec < u8 > = ( 0 ..255 ) . collect ( ) ;
126126
127127 let mut archive = zip:: ZipWriter :: new ( tf) ;
128- archive
129- . start_file (
130- "testfile1" ,
131- SimpleFileOptions :: default ( ) . compression_method ( zip:: CompressionMethod :: Bzip2 ) ,
132- )
133- . unwrap ( ) ;
134- archive. write_all ( & objectcontent) . unwrap ( ) ;
128+ for i in 0 ..file_count {
129+ archive
130+ . start_file (
131+ format ! ( "testfile{i}" ) ,
132+ SimpleFileOptions :: default ( ) . compression_method ( zip:: CompressionMethod :: Bzip2 ) ,
133+ )
134+ . unwrap ( ) ;
135+ archive. write_all ( & objectcontent) . unwrap ( ) ;
136+ }
135137 tf = archive. finish ( ) . unwrap ( ) ;
136138 tf
137139 }
138140
139141 #[ test]
140142 fn index_create_save_load_sqlite ( ) {
141- let mut tf = create_test_archive ( ) ;
143+ let mut tf = create_test_archive ( 1 ) ;
142144
143145 let tempfile = tempfile:: NamedTempFile :: new ( ) . unwrap ( ) . into_temp_path ( ) ;
144146 create ( & mut tf, & tempfile) . unwrap ( ) ;
145147
146- let fi = find_in_file ( & tempfile, "testfile1 " ) . unwrap ( ) . unwrap ( ) ;
148+ let fi = find_in_file ( & tempfile, "testfile0 " ) . unwrap ( ) . unwrap ( ) ;
147149
148150 assert_eq ! ( fi. range, FileRange :: new( 39 , 459 ) ) ;
149151 assert_eq ! ( fi. compression, CompressionAlgorithm :: Bzip2 ) ;
@@ -152,4 +154,25 @@ mod tests {
152154 . unwrap( )
153155 . is_none( ) ) ;
154156 }
157+
158+ #[ test]
159+ fn archive_with_more_than_65k_files ( ) {
160+ let mut tf = create_test_archive ( 100_000 ) ;
161+
162+ let tempfile = tempfile:: NamedTempFile :: new ( ) . unwrap ( ) . into_temp_path ( ) ;
163+ create ( & mut tf, & tempfile) . unwrap ( ) ;
164+
165+ let connection = Connection :: open_with_flags (
166+ tempfile,
167+ OpenFlags :: SQLITE_OPEN_READ_ONLY | OpenFlags :: SQLITE_OPEN_NO_MUTEX ,
168+ )
169+ . unwrap ( ) ;
170+ let mut stmt = connection. prepare ( "SELECT count(*) FROM files" ) . unwrap ( ) ;
171+
172+ let count = stmt
173+ . query_row ( [ ] , |row| Ok ( row. get :: < _ , usize > ( 0 ) ) )
174+ . unwrap ( )
175+ . unwrap ( ) ;
176+ assert_eq ! ( count, 100_000 ) ;
177+ }
155178}
0 commit comments