@@ -119,31 +119,33 @@ mod tests {
119
119
use std:: io:: Write ;
120
120
use zip:: write:: SimpleFileOptions ;
121
121
122
- fn create_test_archive ( ) -> fs:: File {
122
+ fn create_test_archive ( file_count : u32 ) -> fs:: File {
123
123
let mut tf = tempfile:: tempfile ( ) . unwrap ( ) ;
124
124
125
125
let objectcontent: Vec < u8 > = ( 0 ..255 ) . collect ( ) ;
126
126
127
127
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
+ }
135
137
tf = archive. finish ( ) . unwrap ( ) ;
136
138
tf
137
139
}
138
140
139
141
#[ test]
140
142
fn index_create_save_load_sqlite ( ) {
141
- let mut tf = create_test_archive ( ) ;
143
+ let mut tf = create_test_archive ( 1 ) ;
142
144
143
145
let tempfile = tempfile:: NamedTempFile :: new ( ) . unwrap ( ) . into_temp_path ( ) ;
144
146
create ( & mut tf, & tempfile) . unwrap ( ) ;
145
147
146
- let fi = find_in_file ( & tempfile, "testfile1 " ) . unwrap ( ) . unwrap ( ) ;
148
+ let fi = find_in_file ( & tempfile, "testfile0 " ) . unwrap ( ) . unwrap ( ) ;
147
149
148
150
assert_eq ! ( fi. range, FileRange :: new( 39 , 459 ) ) ;
149
151
assert_eq ! ( fi. compression, CompressionAlgorithm :: Bzip2 ) ;
@@ -152,4 +154,25 @@ mod tests {
152
154
. unwrap( )
153
155
. is_none( ) ) ;
154
156
}
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
+ }
155
178
}
0 commit comments