Skip to content

Commit ee59fdf

Browse files
committed
Extend integration test with window post checks
1 parent 852df74 commit ee59fdf

File tree

1 file changed

+85
-3
lines changed

1 file changed

+85
-3
lines changed

integration_tests/src/tests/prove_commit_niporep_test.rs

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ use fil_actor_miner::{Method as MinerMethod, SectorOnChainInfoFlags};
1111
use fil_actor_miner::{ProveCommitSectorsNIParams, SectorNIActivationInfo};
1212
use fil_actors_runtime::test_utils::make_sealed_cid;
1313
use vm_api::trace::{EmittedEvent, ExpectInvocation};
14-
use vm_api::util::apply_ok;
14+
use vm_api::util::{apply_ok, DynBlockstore};
1515
use vm_api::VM;
1616

1717
use crate::expects::Expect;
1818
use crate::util::{
19-
create_accounts, create_miner, deadline_state, override_compute_unsealed_sector_cid,
20-
sector_info, try_sector_info,
19+
advance_by_deadline_to_epoch, advance_by_deadline_to_index, create_accounts, create_miner,
20+
deadline_state, declare_recovery, override_compute_unsealed_sector_cid, sector_info,
21+
submit_windowed_post, try_sector_info,
2122
};
2223

2324
#[vm_test]
@@ -252,6 +253,87 @@ pub fn prove_commit_ni_partial_success_not_required_test(v: &dyn VM) {
252253
assert!(on_chain_sector.flags.contains(SectorOnChainInfoFlags::SIMPLE_QA_POWER));
253254
}
254255

256+
// Check if sectors are properly assigned to deadline
255257
let deadline = deadline_state(v, &maddr, proving_deadline);
256258
assert_eq!(deadline.live_sectors, valid_sector_nos.len() as u64);
259+
260+
let store = &DynBlockstore::wrap(v.blockstore());
261+
let partition = deadline.load_partition(store, 0).unwrap();
262+
for sector_number in invalid_sector_nos {
263+
assert!(!partition.sectors.get(sector_number));
264+
}
265+
for sector_number in &valid_sector_nos {
266+
assert!(partition.sectors.get(*sector_number));
267+
assert!(partition.unproven.get(*sector_number));
268+
}
269+
270+
// Advance to proving deadline and submit WindowPoSt
271+
let deadline_info = advance_by_deadline_to_index(v, &maddr, proving_deadline);
272+
273+
let deadline = deadline_state(v, &maddr, proving_deadline);
274+
let submissions = deadline.optimistic_proofs_amt(store).unwrap();
275+
assert_eq!(submissions.count(), 0);
276+
277+
submit_windowed_post(v, &worker, &maddr, deadline_info, 0, Some(partition.unproven_power));
278+
279+
// Check if post is registered in deadline submissions
280+
let deadline = deadline_state(v, &maddr, proving_deadline);
281+
let submissions = deadline.optimistic_proofs_amt(store).unwrap();
282+
assert_eq!(submissions.count(), 1);
283+
284+
// Move to next deadline and check if sectors are active
285+
let deadline_info = advance_by_deadline_to_index(
286+
v,
287+
&maddr,
288+
proving_deadline + 1 % policy.wpost_proving_period as u64,
289+
);
290+
let deadline = deadline_state(v, &maddr, proving_deadline);
291+
let partition = deadline.load_partition(store, 0).unwrap();
292+
293+
for sector_number in &valid_sector_nos {
294+
assert!(partition.active_sectors().get(*sector_number));
295+
assert!(partition.faults.is_empty());
296+
}
297+
298+
// Move to next deadline period while skipping window post submission
299+
// and check if sectors are faulty
300+
advance_by_deadline_to_epoch(v, &maddr, deadline_info.close + policy.wpost_proving_period);
301+
let deadline = deadline_state(v, &maddr, proving_deadline);
302+
let partition = deadline.load_partition(store, 0).unwrap();
303+
304+
for sector_number in &valid_sector_nos {
305+
assert!(partition.faults.get(*sector_number));
306+
assert!(partition.active_sectors().is_empty());
307+
assert!(partition.recoveries.is_empty());
308+
}
309+
310+
// Recover faulty sectors
311+
for sector_number in &valid_sector_nos {
312+
declare_recovery(v, &worker, &maddr, proving_deadline, 0, *sector_number);
313+
}
314+
let deadline = deadline_state(v, &maddr, proving_deadline);
315+
let partition = deadline.load_partition(store, 0).unwrap();
316+
for sector_number in &valid_sector_nos {
317+
assert!(partition.faults.get(*sector_number));
318+
assert!(partition.recoveries.get(*sector_number));
319+
}
320+
321+
// Move to next deadline period and prove sectors
322+
let deadline_info = advance_by_deadline_to_index(v, &maddr, proving_deadline);
323+
submit_windowed_post(v, &worker, &maddr, deadline_info, 0, None);
324+
325+
// Move to next deadline and check if sectors are active
326+
advance_by_deadline_to_index(
327+
v,
328+
&maddr,
329+
proving_deadline + 1 % policy.wpost_proving_period as u64,
330+
);
331+
let deadline = deadline_state(v, &maddr, proving_deadline);
332+
let partition = deadline.load_partition(store, 0).unwrap();
333+
334+
for sector_number in &valid_sector_nos {
335+
assert!(partition.active_sectors().get(*sector_number));
336+
assert!(partition.faults.is_empty());
337+
assert!(partition.recoveries.is_empty());
338+
}
257339
}

0 commit comments

Comments
 (0)