Skip to content

Commit 5f3df95

Browse files
committed
test: Add state check for PoSt submission
1 parent 7f8e785 commit 5f3df95

File tree

4 files changed

+42
-7
lines changed

4 files changed

+42
-7
lines changed

pallets/storage-provider/src/deadline.rs

+20-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ impl<BlockNumber: Clone + Copy + Ord> Deadline<BlockNumber> {
146146
// Add sectors to partition.
147147
partition
148148
.add_sectors(&new_partition_sectors)
149-
.expect("TODO: change this to explicit error");
149+
.map_err(|_| DeadlineError::CouldNotAddSectors)?;
150150

151151
// Save partition back.
152152
match partitions.get_mut(&(partition_idx as u32)) {
@@ -199,6 +199,7 @@ impl<BlockNumber: Clone + Copy + Ord> Deadlines<BlockNumber> {
199199
/// Constructor function.
200200
pub fn new() -> Self {
201201
let mut due = BoundedVec::new();
202+
// Initialize deadlines as empty deadlines.
202203
for _ in 0..48 {
203204
let _ = due.try_push(Deadline::new());
204205
}
@@ -271,6 +272,19 @@ impl<BlockNumber: Clone + Copy + Ord> Deadlines<BlockNumber> {
271272
}
272273
Ok(())
273274
}
275+
276+
pub fn update_deadline(
277+
&mut self,
278+
deadline_idx: usize,
279+
deadline: Deadline<BlockNumber>,
280+
) -> DeadlineResult<()> {
281+
let dl = self
282+
.due
283+
.get_mut(deadline_idx)
284+
.ok_or(DeadlineError::DeadlineNotFound)?;
285+
dl.update_deadline(deadline);
286+
Ok(())
287+
}
274288
}
275289

276290
#[derive(Clone, Debug, Decode, Encode, PartialEq, TypeInfo)]
@@ -394,7 +408,12 @@ pub enum DeadlineError {
394408
ProofUpdateFailed,
395409
/// Emitted when trying to get the next instance of a deadline that has not yet elapsed fails.
396410
FailedToGetNextDeadline,
411+
/// Emitted when max partition for a given deadline have been reached.
397412
MaxPartitionsReached,
413+
/// Emitted when trying to add sectors to a deadline fails
414+
CouldNotAddSectors,
415+
/// Emitted when assigning sectors to deadlines fails.
416+
CouldNotAssignSectorsToDeadlines,
398417
}
399418

400419
#[cfg(test)]

pallets/storage-provider/src/deadline/assignment.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,10 @@ pub fn assign_deadlines<BlockNumber: Clone + Copy + Ord>(
197197
let mut changes = vec![Vec::new(); w_post_period_deadlines as usize];
198198

199199
for sector in sectors {
200-
let info = &mut heap.peek_mut().unwrap().info;
200+
let info = &mut heap
201+
.peek_mut()
202+
.ok_or(DeadlineError::CouldNotConstructDeadlineInfo)?
203+
.info;
201204

202205
if info.max_partitions_reached(partition_size, max_partitions) {
203206
return Err(DeadlineError::MaxPartitionsReached);

pallets/storage-provider/src/storage_provider.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ where
146146

147147
/// Assign new sector to a deadline.
148148
pub fn assign_sectors_to_deadlines(
149-
&self,
149+
&mut self,
150150
current_block: BlockNumber,
151151
mut sectors: Vec<SectorOnChainInfo<BlockNumber>>,
152152
partition_size: u64,
@@ -164,7 +164,7 @@ where
164164
"assign_sectors_to_deadlines: deadline len = {}",
165165
deadlines.len()
166166
);
167-
deadlines.for_each(|deadline_idx, deadline| {
167+
deadlines.clone().for_each(|deadline_idx, deadline| {
168168
// Skip deadlines that aren't currently mutable.
169169
if deadline_is_mutable(
170170
self.current_proving_period_start(
@@ -191,16 +191,24 @@ where
191191
sectors,
192192
w_post_period_deadlines,
193193
)?;
194+
let deadlines = self.get_deadlines_mut();
194195
for (deadline_idx, deadline_sectors) in deadline_to_sectors.into_iter().enumerate() {
195196
if deadline_sectors.is_empty() {
196197
continue;
197198
}
198199

199-
let deadline = deadline_vec[deadline_idx].as_mut().unwrap();
200+
let deadline =
201+
deadline_vec[deadline_idx]
202+
.as_mut()
203+
.ok_or(StorageProviderError::DeadlineError(
204+
DeadlineError::CouldNotAssignSectorsToDeadlines,
205+
))?;
200206

201207
deadline.add_sectors(partition_size, &deadline_sectors)?;
202208

203-
// deadlines.update_deadline(policy, store, deadline_idx as u64, deadline)?;
209+
deadlines
210+
.update_deadline(deadline_idx, deadline.clone())
211+
.map_err(|e| StorageProviderError::DeadlineError(e))?;
204212
}
205213
Ok(())
206214
}

pallets/storage-provider/src/tests/submit_windowed_post.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use frame_support::assert_ok;
22
use sp_core::bounded_vec;
33

44
use crate::{
5-
pallet::Event,
5+
pallet::{Event, StorageProviders},
66
sector::ProveCommitSector,
77
tests::{
88
account, events, new_test_ext, register_storage_provider, run_to_block,
@@ -90,5 +90,10 @@ fn submit_windowed_post() {
9090
}
9191
)]
9292
);
93+
let state = StorageProviders::<Test>::get(account(ALICE)).unwrap();
94+
let deadlines = state.deadlines;
95+
let new_dl = deadlines.due.first().expect("Programmer error");
96+
assert_eq!(new_dl.live_sectors, 1);
97+
assert_eq!(new_dl.total_sectors, 1);
9398
});
9499
}

0 commit comments

Comments
 (0)