Browse Source

runtime: storage: Fix bug.

Fix `update_storage_buckets_for_bag` extrinsic. Change bucket limit comparison.
Shamil Gadelshin 3 years ago
parent
commit
cbbaa2ce33
2 changed files with 28 additions and 29 deletions
  1. 7 2
      runtime-modules/storage/src/lib.rs
  2. 21 27
      runtime-modules/storage/src/tests/mod.rs

+ 7 - 2
runtime-modules/storage/src/lib.rs

@@ -2423,9 +2423,14 @@ impl<T: Trait> Module<T> {
         BagManager::<T>::ensure_bag_exists(&bag_id)?;
 
         let storage_bucket_ids = BagManager::<T>::get_storage_bucket_ids(bag_id);
+        let new_bucket_number = storage_bucket_ids
+            .len()
+            .saturating_add(add_buckets.len())
+            .saturating_sub(remove_buckets.len())
+            .saturated_into::<u64>();
+
         ensure!(
-            storage_bucket_ids.len().saturated_into::<u64>()
-                <= Self::storage_buckets_per_bag_limit(),
+            new_bucket_number <= Self::storage_buckets_per_bag_limit(),
             Error::<T>::StorageBucketPerBagLimitExceeded
         );
 

+ 21 - 27
runtime-modules/storage/src/tests/mod.rs

@@ -272,6 +272,8 @@ fn update_storage_buckets_for_bags_succeeded() {
         let starting_block = 1;
         run_to_block(starting_block);
 
+        set_default_storage_buckets_per_bag_limit();
+
         let static_bag_id = StaticBagId::Council;
         let bag_id = BagId::<Test>::StaticBag(static_bag_id.clone());
 
@@ -331,6 +333,8 @@ fn update_storage_buckets_for_bags_fails_with_non_existing_dynamic_bag() {
 #[test]
 fn update_storage_buckets_for_bags_fails_with_non_accepting_new_bags_bucket() {
     build_test_externalities().execute_with(|| {
+        set_default_storage_buckets_per_bag_limit();
+
         let static_bag_id = StaticBagId::Council;
         let bag_id = BagId::<Test>::StaticBag(static_bag_id.clone());
 
@@ -507,6 +511,8 @@ fn update_storage_buckets_for_bags_fails_with_exceeding_the_voucher_objects_tota
 #[test]
 fn update_storage_buckets_for_working_group_static_bags_succeeded() {
     build_test_externalities().execute_with(|| {
+        set_default_storage_buckets_per_bag_limit();
+
         let storage_provider_id = DEFAULT_STORAGE_PROVIDER_ID;
         let invite_worker = Some(storage_provider_id);
 
@@ -587,6 +593,8 @@ fn update_storage_buckets_for_bags_fails_with_empty_params() {
 #[test]
 fn update_storage_buckets_for_bags_fails_with_non_existing_storage_buckets() {
     build_test_externalities().execute_with(|| {
+        set_default_storage_buckets_per_bag_limit();
+
         let invalid_bucket_id = 11000;
         let buckets = BTreeSet::from_iter(vec![invalid_bucket_id]);
         let bag_id = BagId::<Test>::StaticBag(StaticBagId::Council);
@@ -1155,37 +1163,18 @@ fn accept_pending_data_objects_succeeded() {
         let starting_block = 1;
         run_to_block(starting_block);
 
-        let objects_limit = 1;
-        let size_limit = 100;
-        set_max_voucher_limits();
-
         let static_bag_id = StaticBagId::Council;
         let bag_id = BagId::<Test>::StaticBag(static_bag_id.clone());
-
         let storage_provider_id = DEFAULT_STORAGE_PROVIDER_ID;
-        let invite_worker = Some(storage_provider_id);
-
-        let bucket_id = CreateStorageBucketFixture::default()
-            .with_origin(RawOrigin::Signed(STORAGE_WG_LEADER_ACCOUNT_ID))
-            .with_invite_worker(invite_worker)
-            .with_size_limit(size_limit)
-            .with_objects_limit(objects_limit)
-            .call_and_assert(Ok(()))
-            .unwrap();
-
-        AcceptStorageBucketInvitationFixture::default()
-            .with_origin(RawOrigin::Signed(DEFAULT_STORAGE_PROVIDER_ACCOUNT_ID))
-            .with_storage_bucket_id(bucket_id)
-            .with_worker_id(storage_provider_id)
-            .call_and_assert(Ok(()));
-
-        let buckets = BTreeSet::from_iter(vec![bucket_id]);
+        let objects_limit = 1;
+        let size_limit = 100;
 
-        UpdateStorageBucketForBagsFixture::default()
-            .with_origin(RawOrigin::Signed(STORAGE_WG_LEADER_ACCOUNT_ID))
-            .with_bag_id(bag_id.clone())
-            .with_add_bucket_ids(buckets.clone())
-            .call_and_assert(Ok(()));
+        let bucket_id = create_storage_bucket_and_assign_to_bag(
+            bag_id.clone(),
+            Some(storage_provider_id),
+            objects_limit,
+            size_limit,
+        );
 
         let initial_balance = 1000;
         increase_account_balance(&DEFAULT_MEMBER_ACCOUNT_ID, initial_balance);
@@ -2427,6 +2416,7 @@ fn create_storage_bucket_and_assign_to_bag(
     size_limit: u64,
 ) -> u64 {
     set_max_voucher_limits();
+    set_default_storage_buckets_per_bag_limit();
 
     let bucket_id = CreateStorageBucketFixture::default()
         .with_origin(RawOrigin::Signed(STORAGE_WG_LEADER_ACCOUNT_ID))
@@ -3945,3 +3935,7 @@ fn update_distribution_buckets_for_bags_fails_with_non_existing_distribution_buc
 fn set_default_distribution_buckets_per_bag_limit() {
     crate::DistributionBucketsPerBagLimit::put(5);
 }
+
+fn set_default_storage_buckets_per_bag_limit() {
+    crate::StorageBucketsPerBagLimit::put(5);
+}