@@ -11,13 +11,14 @@ use fil_actor_miner::{Method as MinerMethod, SectorOnChainInfoFlags};
1111use fil_actor_miner:: { ProveCommitSectorsNIParams , SectorNIActivationInfo } ;
1212use fil_actors_runtime:: test_utils:: make_sealed_cid;
1313use vm_api:: trace:: { EmittedEvent , ExpectInvocation } ;
14- use vm_api:: util:: apply_ok;
14+ use vm_api:: util:: { apply_ok, DynBlockstore } ;
1515use vm_api:: VM ;
1616
1717use crate :: expects:: Expect ;
1818use 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