Skip to content

Commit 252dc6d

Browse files
authored
feat: allow setting block range from env (#241)
1 parent a621619 commit 252dc6d

File tree

1 file changed

+133
-47
lines changed

1 file changed

+133
-47
lines changed

crates/integration/src/testers/chunk.rs

Lines changed: 133 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -215,14 +215,35 @@ pub fn get_witness_from_env_or_builder(
215215

216216
/// preset examples for single task
217217
pub fn preset_chunk() -> ChunkTaskGenerator {
218-
let (version, block_range) = match testing_hardfork() {
218+
let (version, mut block_range) = match testing_hardfork() {
219219
ForkName::EuclidV1 => (Version::euclid_v1(), 12508460u64..=12508463u64),
220220
ForkName::EuclidV2 => (Version::euclid_v2(), 1u64..=4u64),
221221
ForkName::Feynman => (Version::feynman(), 16525000u64..=16525003u64),
222222
ForkName::Galileo => (Version::galileo(), 20239156..=20239235),
223223
ForkName::GalileoV2 => (Version::galileo_v2(), 20239240..=20239245),
224224
};
225225

226+
// If the BLOCK_RANGE env var is set, use that instead.
227+
if let Ok(r) = std::env::var("BLOCK_RANGE") {
228+
if r.contains("..=") {
229+
let parts: Vec<&str> = r.split("..=").collect();
230+
if parts.len() != 2 {
231+
panic!("invalid BLOCK_RANGE, expect start..=end, found = {r}");
232+
}
233+
let start = parts[0]
234+
.trim()
235+
.parse::<u64>()
236+
.expect("BLOCK_RANGE start not a number");
237+
let end = parts[1]
238+
.trim()
239+
.parse::<u64>()
240+
.expect("BLOCK_RANGE end not a number");
241+
block_range = start..=end;
242+
} else {
243+
panic!("invalid BLOCK_RANGE, expect start..=end, found = {r}");
244+
}
245+
}
246+
226247
ChunkTaskGenerator {
227248
version,
228249
block_range: block_range.collect(),
@@ -257,52 +278,66 @@ pub fn create_canonical_tasks(
257278

258279
/// preset examples for multiple task
259280
pub fn preset_chunk_multiple() -> Vec<ChunkTaskGenerator> {
260-
static PRESET_RESULT: std::sync::OnceLock<Vec<ChunkTaskGenerator>> = std::sync::OnceLock::new();
261-
262-
PRESET_RESULT
263-
.get_or_init(|| {
264-
let (block_range, version) = match testing_hardfork() {
265-
ForkName::EuclidV1 => (
266-
vec![
267-
12508460u64..=12508460u64,
268-
12508461u64..=12508461u64,
269-
12508462u64..=12508463u64,
270-
],
271-
Version::euclid_v1(),
272-
),
273-
ForkName::EuclidV2 => (
274-
vec![1u64..=1u64, 2u64..=2u64, 3u64..=4u64],
275-
Version::euclid_v2(),
276-
),
277-
ForkName::Feynman => (
278-
vec![
279-
16525000u64..=16525000u64,
280-
16525001u64..=16525001u64,
281-
16525002u64..=16525003u64,
282-
],
283-
Version::feynman(),
284-
),
285-
ForkName::Galileo => (
286-
vec![
287-
20239220..=20239220,
288-
20239221..=20239221,
289-
20239222..=20239222,
290-
],
291-
Version::galileo(),
292-
),
293-
ForkName::GalileoV2 => (
294-
vec![
295-
20239240..=20239240,
296-
20239241..=20239241,
297-
20239242..=20239242,
298-
],
299-
Version::galileo_v2(),
300-
),
301-
};
302-
create_canonical_tasks(version, block_range.into_iter())
303-
.expect("must success for preset collections")
304-
})
305-
.clone()
281+
let (mut block_range, version) = match testing_hardfork() {
282+
ForkName::EuclidV1 => (
283+
vec![
284+
12508460u64..=12508460u64,
285+
12508461u64..=12508461u64,
286+
12508462u64..=12508463u64,
287+
],
288+
Version::euclid_v1(),
289+
),
290+
ForkName::EuclidV2 => (
291+
vec![1u64..=1u64, 2u64..=2u64, 3u64..=4u64],
292+
Version::euclid_v2(),
293+
),
294+
ForkName::Feynman => (
295+
vec![
296+
16525000u64..=16525000u64,
297+
16525001u64..=16525001u64,
298+
16525002u64..=16525003u64,
299+
],
300+
Version::feynman(),
301+
),
302+
ForkName::Galileo => (
303+
vec![
304+
20239220..=20239220,
305+
20239221..=20239221,
306+
20239222..=20239222,
307+
],
308+
Version::galileo(),
309+
),
310+
ForkName::GalileoV2 => (
311+
vec![
312+
20239240..=20239240,
313+
20239241..=20239241,
314+
20239242..=20239242,
315+
],
316+
Version::galileo_v2(),
317+
),
318+
};
319+
// If the BLOCK_RANGE env var has been set, use that instead.
320+
if let Ok(r) = std::env::var("BLOCK_RANGE") {
321+
block_range = r
322+
.split(",")
323+
.map(|part| {
324+
let p = part.trim();
325+
if let Some(idx) = p.find("..=") {
326+
let start = &p[..idx].trim();
327+
let end = &p[idx + 3..].trim();
328+
let a = start
329+
.parse::<u64>()
330+
.expect("BLOCK_RANGE start not a number");
331+
let b = end.parse::<u64>().expect("BLOCK_RANGE end not a number");
332+
a..=b
333+
} else {
334+
panic!("invalid range syntax: {}", p);
335+
}
336+
})
337+
.collect();
338+
}
339+
create_canonical_tasks(version, block_range.into_iter())
340+
.expect("must success for preset collections")
306341
}
307342

308343
pub fn preset_chunk_validium() -> Vec<ChunkTaskGenerator> {
@@ -348,3 +383,54 @@ pub fn execute_multi(
348383
)
349384
}
350385
}
386+
387+
#[cfg(test)]
388+
mod tests {
389+
use crate::testers::chunk::{preset_chunk, preset_chunk_multiple};
390+
391+
#[test]
392+
fn test_presets() {
393+
let single = preset_chunk();
394+
assert_eq!(
395+
single.block_range,
396+
(20239240u64..=20239245).collect::<Vec<u64>>(),
397+
);
398+
let multiple = preset_chunk_multiple();
399+
assert_eq!(
400+
multiple[0].block_range,
401+
(20239240..=20239240).collect::<Vec<u64>>(),
402+
);
403+
assert_eq!(
404+
multiple[1].block_range,
405+
(20239241..=20239241).collect::<Vec<u64>>(),
406+
);
407+
assert_eq!(
408+
multiple[2].block_range,
409+
(20239242..=20239242).collect::<Vec<u64>>(),
410+
);
411+
412+
// After setting env var.
413+
std::env::set_var("BLOCK_RANGE", "123..=321");
414+
assert_eq!(
415+
preset_chunk().block_range,
416+
(123..=321).collect::<Vec<u64>>()
417+
);
418+
std::env::set_var(
419+
"BLOCK_RANGE",
420+
"20239240..=20239241,20239242..=20239243,20239244..=20239245",
421+
);
422+
let multiple = preset_chunk_multiple();
423+
assert_eq!(
424+
multiple[0].block_range,
425+
(20239240u64..=20239241u64).collect::<Vec<u64>>()
426+
);
427+
assert_eq!(
428+
multiple[1].block_range,
429+
(20239242u64..=20239243u64).collect::<Vec<u64>>()
430+
);
431+
assert_eq!(
432+
multiple[2].block_range,
433+
(20239244u64..=20239245u64).collect::<Vec<u64>>()
434+
);
435+
}
436+
}

0 commit comments

Comments
 (0)