Skip to content

Commit cff3157

Browse files
committed
add index handle interference test
1 parent c099d58 commit cff3157

File tree

1 file changed

+36
-5
lines changed

1 file changed

+36
-5
lines changed

tests/index.rs

+36-5
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,11 @@ fn add_file_to_read_index() {
178178
fn simulatenous_index_destructors() {
179179
let h1 = thread::spawn(|| {
180180
let mut rng = rand::thread_rng();
181+
let file_path = Path::new("./data/iceland-surface.idx");
181182

182183
for _ in 0..10 {
183-
let sleep_time = rng.gen_range(12..50); // randomizing sleep time to hopefully catch segfaults
184+
let sleep_time = rng.gen_range(1..30); // randomizing sleep time to hopefully catch segfaults
184185

185-
let file_path = Path::new("./data/iceland-surface.idx");
186186
let index_op = CodesIndex::read_from_file(file_path)
187187
.unwrap()
188188
.select("shortName", "2t")
@@ -201,12 +201,12 @@ fn simulatenous_index_destructors() {
201201

202202
let h2 = thread::spawn(|| {
203203
let mut rng = rand::thread_rng();
204+
let keys = vec!["shortName", "typeOfLevel", "level", "stepType"];
205+
let grib_path = Path::new("./data/iceland-surface.grib");
204206

205207
for _ in 0..10 {
206-
let sleep_time = rng.gen_range(24..65); // randomizing sleep time to hopefully catch segfaults
208+
let sleep_time = rng.gen_range(1..42); // randomizing sleep time to hopefully catch segfaults
207209

208-
let keys = vec!["shortName", "typeOfLevel", "level", "stepType"];
209-
let grib_path = Path::new("./data/iceland-surface.grib");
210210
let index = CodesIndex::new_from_keys(&keys)
211211
.unwrap()
212212
.add_grib_file(grib_path)
@@ -228,3 +228,34 @@ fn simulatenous_index_destructors() {
228228
h1.join().unwrap();
229229
h2.join().unwrap();
230230
}
231+
232+
#[test]
233+
fn index_handle_interference() {
234+
thread::spawn(|| {
235+
let file_path = Path::new("./data/iceland.grib");
236+
237+
loop {
238+
let handle = CodesHandle::new_from_file(file_path, ProductKind::GRIB);
239+
240+
assert!(handle.is_ok());
241+
}
242+
});
243+
244+
let mut rng = rand::thread_rng();
245+
let keys = vec!["shortName", "typeOfLevel", "level", "stepType"];
246+
let grib_path = Path::new("./data/iceland.grib");
247+
248+
for _ in 0..10 {
249+
let sleep_time = rng.gen_range(1..42); // randomizing sleep time to hopefully catch segfaults
250+
251+
let index = CodesIndex::new_from_keys(&keys)
252+
.unwrap()
253+
.add_grib_file(grib_path)
254+
.unwrap();
255+
let i_handle = CodesHandle::new_from_index(index, ProductKind::GRIB);
256+
257+
assert!(i_handle.is_ok());
258+
259+
thread::sleep(std::time::Duration::from_millis(sleep_time));
260+
}
261+
}

0 commit comments

Comments
 (0)