diff --git a/tinycloud-node-server/src/storage/size.rs b/tinycloud-node-server/src/storage/size.rs index 9fac85d6..19700cc8 100644 --- a/tinycloud-node-server/src/storage/size.rs +++ b/tinycloud-node-server/src/storage/size.rs @@ -1,8 +1,4 @@ -use std::{ - collections::HashMap, - ops::{AddAssign, SubAssign}, - sync::Arc, -}; +use std::{collections::HashMap, ops::AddAssign, sync::Arc}; use tinycloud_auth::resource::SpaceId; use tokio::sync::RwLock; @@ -23,7 +19,7 @@ impl SpaceSizes { } pub async fn decrement_size(&self, space: &SpaceId, size: u64) { if let Some(s) = self.0.write().await.get_mut(space) { - s.sub_assign(size) + *s = s.saturating_sub(size); } } pub async fn get_size(&self, space: &SpaceId) -> Option { @@ -36,3 +32,23 @@ impl From> for SpaceSizes { Self(Arc::new(RwLock::new(map))) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[tokio::test] + async fn decrement_floors_at_zero() { + let space: SpaceId = + "tinycloud:pkh:eip155:1:0x1111111111111111111111111111111111111111:default" + .parse() + .unwrap(); + let sizes = SpaceSizes::new(); + sizes.init_size(space.clone()).await; + sizes.increment_size(&space, 10).await; + sizes.decrement_size(&space, 25).await; + assert_eq!(sizes.get_size(&space).await, Some(0)); + sizes.decrement_size(&space, 1).await; + assert_eq!(sizes.get_size(&space).await, Some(0)); + } +}