Browse Source

Forum v2: add benchmarks for update_category_title & update_category_description extrinsics

iorveth 3 years ago
parent
commit
b0e6c25383
2 changed files with 250 additions and 2 deletions
  1. 214 2
      runtime-modules/forum/src/benchmarking.rs
  2. 36 0
      runtime/src/weights/forum.rs

+ 214 - 2
runtime-modules/forum/src/benchmarking.rs

@@ -591,7 +591,7 @@ benchmarks! {
 
         assert_eq!(Module::<T>::category_by_id(category_id), new_category);
         assert_last_event::<T>(
-            RawEvent::CategoryUpdated(
+            RawEvent::CategoryArchivalStatusUpdated(
                 category_id,
                 new_archival_status,
                 PrivilegedActor::Lead
@@ -636,7 +636,7 @@ benchmarks! {
 
         assert_eq!(Module::<T>::category_by_id(category_id), new_category);
         assert_last_event::<T>(
-            RawEvent::CategoryUpdated(
+            RawEvent::CategoryArchivalStatusUpdated(
                 category_id,
                 new_archival_status,
                 PrivilegedActor::Moderator(moderator_id)
@@ -644,6 +644,188 @@ benchmarks! {
         );
     }
 
+    update_category_title_lead{
+        let lead_id = 0;
+
+        let caller_id =
+            insert_a_leader::<T>(lead_id);
+
+        let i in 1 .. (T::MaxCategoryDepth::get() + 1) as u32;
+
+        let j in 0 .. MAX_BYTES - 1;
+
+        let new_title = vec![0u8].repeat(j as usize);
+
+        // Generate categories tree
+        let (category_id, parent_category_id) = generate_categories_tree::<T>(caller_id.clone(), i, None);
+
+
+    }: update_category_title(RawOrigin::Signed(caller_id), PrivilegedActor::Lead, category_id, new_title.clone())
+    verify {
+        let text = vec![0u8].repeat(MAX_BYTES as usize);
+        let new_title_hash = T::calculate_hash(new_title.as_slice());
+
+        let new_category = Category {
+            title_hash: new_title_hash,
+            description_hash: T::calculate_hash(text.as_slice()),
+            archived: false,
+            num_direct_subcategories: 0,
+            num_direct_threads: 0,
+            num_direct_moderators: 0,
+            parent_category_id,
+            sticky_thread_ids: vec![],
+        };
+
+        assert_eq!(Module::<T>::category_by_id(category_id), new_category);
+        assert_last_event::<T>(
+            RawEvent::CategoryTitleUpdated(
+                category_id,
+                new_title_hash,
+                PrivilegedActor::Lead
+            ).into()
+        );
+    }
+
+    update_category_title_moderator{
+        let moderator_id = 0;
+
+        let caller_id =
+            insert_a_leader::<T>(moderator_id);
+
+        let i in 1 .. (T::MaxCategoryDepth::get() + 1) as u32;
+
+
+        let j in 0 .. MAX_BYTES - 1;
+
+        let new_title = vec![0u8].repeat(j as usize);
+
+        // Generate categories tree
+        let (category_id, parent_category_id) = generate_categories_tree::<T>(caller_id.clone(), i, None);
+
+        let moderator_id = ModeratorId::<T>::from(moderator_id.try_into().unwrap());
+
+        // Set up category membership of moderator.
+        Module::<T>::update_category_membership_of_moderator(
+            RawOrigin::Signed(caller_id.clone()).into(), moderator_id, category_id, true
+        ).unwrap();
+
+    }: update_category_title(RawOrigin::Signed(caller_id), PrivilegedActor::Moderator(moderator_id), category_id, new_title.clone())
+    verify {
+        let text = vec![0u8].repeat(MAX_BYTES as usize);
+        let new_title_hash = T::calculate_hash(new_title.as_slice());
+
+        let new_category = Category {
+            title_hash: new_title_hash,
+            description_hash: T::calculate_hash(text.as_slice()),
+            archived: false,
+            num_direct_subcategories: 0,
+            num_direct_threads: 0,
+            num_direct_moderators: 1,
+            parent_category_id,
+            sticky_thread_ids: vec![],
+        };
+
+        assert_eq!(Module::<T>::category_by_id(category_id), new_category);
+        assert_last_event::<T>(
+            RawEvent::CategoryTitleUpdated(
+                category_id,
+                new_title_hash,
+                PrivilegedActor::Moderator(moderator_id)
+            ).into()
+        );
+    }
+
+    update_category_description_lead{
+        let lead_id = 0;
+
+        let caller_id =
+            insert_a_leader::<T>(lead_id);
+
+        let i in 1 .. (T::MaxCategoryDepth::get() + 1) as u32;
+
+        let j in 0 .. MAX_BYTES - 1;
+
+        let new_description = vec![0u8].repeat(j as usize);
+
+        // Generate categories tree
+        let (category_id, parent_category_id) = generate_categories_tree::<T>(caller_id.clone(), i, None);
+
+
+    }: update_category_description(RawOrigin::Signed(caller_id), PrivilegedActor::Lead, category_id, new_description.clone())
+    verify {
+        let text = vec![0u8].repeat(MAX_BYTES as usize);
+        let new_description_hash = T::calculate_hash(new_description.as_slice());
+
+        let new_category = Category {
+            title_hash: T::calculate_hash(text.as_slice()),
+            description_hash: new_description_hash,
+            archived: false,
+            num_direct_subcategories: 0,
+            num_direct_threads: 0,
+            num_direct_moderators: 0,
+            parent_category_id,
+            sticky_thread_ids: vec![],
+        };
+
+        assert_eq!(Module::<T>::category_by_id(category_id), new_category);
+        assert_last_event::<T>(
+            RawEvent::CategoryDescriptionUpdated(
+                category_id,
+                new_description_hash,
+                PrivilegedActor::Lead
+            ).into()
+        );
+    }
+
+    update_category_description_moderator{
+        let moderator_id = 0;
+
+        let caller_id =
+            insert_a_leader::<T>(moderator_id);
+
+        let i in 1 .. (T::MaxCategoryDepth::get() + 1) as u32;
+
+
+        let j in 0 .. MAX_BYTES - 1;
+
+        let new_description = vec![0u8].repeat(j as usize);
+
+        // Generate categories tree
+        let (category_id, parent_category_id) = generate_categories_tree::<T>(caller_id.clone(), i, None);
+
+        let moderator_id = ModeratorId::<T>::from(moderator_id.try_into().unwrap());
+
+        // Set up category membership of moderator.
+        Module::<T>::update_category_membership_of_moderator(
+            RawOrigin::Signed(caller_id.clone()).into(), moderator_id, category_id, true
+        ).unwrap();
+
+    }: update_category_description(RawOrigin::Signed(caller_id), PrivilegedActor::Moderator(moderator_id), category_id, new_description.clone())
+    verify {
+        let text = vec![0u8].repeat(MAX_BYTES as usize);
+        let new_description_hash = T::calculate_hash(new_description.as_slice());
+
+        let new_category = Category {
+            title_hash: T::calculate_hash(text.as_slice()),
+            description_hash: new_description_hash,
+            archived: false,
+            num_direct_subcategories: 0,
+            num_direct_threads: 0,
+            num_direct_moderators: 1,
+            parent_category_id,
+            sticky_thread_ids: vec![],
+        };
+
+        assert_eq!(Module::<T>::category_by_id(category_id), new_category);
+        assert_last_event::<T>(
+            RawEvent::CategoryDescriptionUpdated(
+                category_id,
+                new_description_hash,
+                PrivilegedActor::Moderator(moderator_id)
+            ).into()
+        );
+    }
+
     delete_category_lead {
 
         let lead_id = 0;
@@ -1833,6 +2015,36 @@ mod tests {
         });
     }
 
+    #[test]
+    fn test_update_category_title_lead() {
+        with_test_externalities(|| {
+            assert_ok!(test_benchmark_update_category_title_lead::<Runtime>());
+        });
+    }
+
+    #[test]
+    fn test_update_category_title_moderator() {
+        with_test_externalities(|| {
+            assert_ok!(test_benchmark_update_category_title_moderator::<Runtime>());
+        });
+    }
+
+    #[test]
+    fn test_update_category_description_lead() {
+        with_test_externalities(|| {
+            assert_ok!(test_benchmark_update_category_description_lead::<Runtime>());
+        });
+    }
+
+    #[test]
+    fn test_update_category_description_moderator() {
+        with_test_externalities(|| {
+            assert_ok!(test_benchmark_update_category_description_moderator::<
+                Runtime,
+            >());
+        });
+    }
+
     #[test]
     fn test_delete_posts() {
         with_test_externalities(|| {

+ 36 - 0
runtime/src/weights/forum.rs

@@ -183,4 +183,40 @@ impl forum::WeightInfo for WeightInfo {
             .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight)))
             .saturating_add(DbWeight::get().writes(1 as Weight))
     }
+    fn update_category_title_lead(i: u32, j: u32) -> Weight {
+        (20_591_000 as Weight)
+            .saturating_add((72_609_000 as Weight).saturating_mul(i as Weight))
+            .saturating_add((233_007_000 as Weight).saturating_mul(j as Weight))
+            .saturating_add(DbWeight::get().reads(3 as Weight))
+            .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight)))
+            .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight)))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn update_category_title_moderator(i: u32, j: u32) -> Weight {
+        (20_591_000 as Weight)
+            .saturating_add((72_609_000 as Weight).saturating_mul(i as Weight))
+            .saturating_add((233_007_000 as Weight).saturating_mul(j as Weight))
+            .saturating_add(DbWeight::get().reads(3 as Weight))
+            .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight)))
+            .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight)))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn update_category_description_lead(i: u32, j: u32) -> Weight {
+        (20_591_000 as Weight)
+            .saturating_add((72_609_000 as Weight).saturating_mul(i as Weight))
+            .saturating_add((233_007_000 as Weight).saturating_mul(j as Weight))
+            .saturating_add(DbWeight::get().reads(3 as Weight))
+            .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight)))
+            .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight)))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn update_category_description_moderator(i: u32, j: u32) -> Weight {
+        (20_591_000 as Weight)
+            .saturating_add((72_609_000 as Weight).saturating_mul(i as Weight))
+            .saturating_add((233_007_000 as Weight).saturating_mul(j as Weight))
+            .saturating_add(DbWeight::get().reads(3 as Weight))
+            .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight)))
+            .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight)))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
 }