|
3 | 3 | #![cfg(feature = "runtime-benchmarks")] |
4 | 4 |
|
5 | 5 | use super::*; |
6 | | -use crate::Pallet as ConfidentialDocs; |
| 6 | +use crate::{ |
| 7 | + test_util::*, |
| 8 | + types::{Vault, *}, |
| 9 | + Pallet as ConfidentialDocs, |
| 10 | +}; |
7 | 11 |
|
8 | 12 | use frame_benchmarking::v2::*; |
| 13 | +use frame_support::{assert_ok, traits::Get}; |
9 | 14 | use frame_system::RawOrigin; |
10 | | -use sp_runtime::traits::Bounded; |
11 | | -use types::ExtraFlags; |
12 | 15 |
|
13 | 16 | const SEED: u32 = 0; |
14 | 17 |
|
15 | | -#[instance_benchmarks] |
| 18 | +#[benchmarks(where T: Config)] |
16 | 19 | mod benchmarks { |
17 | 20 | use super::*; |
18 | 21 |
|
19 | | - // Benchmark `transfer` extrinsic with the worst possible conditions: |
20 | | - // * Transfer will kill the sender account. |
21 | | - // * Transfer will create the recipient account. |
22 | 22 | #[benchmark] |
23 | | - fn set_vault() { |
24 | | - let existential_deposit = T::ExistentialDeposit::get(); |
25 | | - let caller = whitelisted_caller(); |
| 23 | + fn set_vault(c: Linear<2, { CIDSize::get() }>) { |
| 24 | + let owner: T::AccountId = account("owner", 0, SEED); |
| 25 | + let (user_id, public_key, cid) = generate_vault_sized(1, c); |
| 26 | + let vault = Vault::<T> { cid: cid.clone(), owner: owner.clone() }; |
26 | 27 |
|
27 | | - // Give some multiple of the existential deposit |
28 | | - let balance = existential_deposit.saturating_mul(ED_MULTIPLIER.into()); |
29 | | - let _ = <Balances<T, I> as Currency<_>>::make_free_balance_be(&caller, balance); |
| 28 | + #[extrinsic_call] |
| 29 | + _(RawOrigin::Signed(owner), user_id, public_key, cid.clone()); |
| 30 | + assert_eq!(ConfidentialDocs::vaults(user_id), Some(vault.clone())); |
| 31 | + } |
30 | 32 |
|
31 | | - // Transfer `e - 1` existential deposits + 1 unit, which guarantees to create one account, |
32 | | - // and reap this user. |
33 | | - let recipient: T::AccountId = account("recipient", 0, SEED); |
34 | | - let recipient_lookup = T::Lookup::unlookup(recipient.clone()); |
35 | | - let transfer_amount = |
36 | | - existential_deposit.saturating_mul((ED_MULTIPLIER - 1).into()) + 1u32.into(); |
| 33 | + #[benchmark] |
| 34 | + fn set_owned_document( |
| 35 | + c: Linear<2, { CIDSize::get() }>, |
| 36 | + n: Linear<{ T::DocNameMinLen::get() }, { T::DocNameMaxLen::get() }>, |
| 37 | + d: Linear<{ T::DocDescMinLen::get() }, { T::DocDescMaxLen::get() }>, |
| 38 | + o: Linear<1, { T::MaxOwnedDocs::get() - 1 }>, |
| 39 | + ) { |
| 40 | + let owner: T::AccountId = account("owner", 0, SEED); |
| 41 | + let (user_id, public_key, cid) = generate_vault_sized(1, 5); |
| 42 | + assert_ok!(ConfidentialDocs::<T>::set_vault( |
| 43 | + RawOrigin::Signed(owner.clone()).into(), |
| 44 | + user_id, |
| 45 | + public_key, |
| 46 | + cid.clone(), |
| 47 | + )); |
| 48 | + // Add "o" docs to owned docs |
| 49 | + for i in 1..=o { |
| 50 | + let doc = generate_owned_doc_sized(i as u8, owner.clone(), c, n, d); |
| 51 | + assert_ok!(ConfidentialDocs::<T>::set_owned_document( |
| 52 | + RawOrigin::Signed(owner.clone()).into(), |
| 53 | + doc.clone() |
| 54 | + )); |
| 55 | + } |
| 56 | + let doc = generate_owned_doc_sized((o + 1) as u8, owner.clone(), c, n, d); |
| 57 | + #[extrinsic_call] |
| 58 | + _(RawOrigin::Signed(owner), doc.clone()); |
| 59 | + assert_eq!(ConfidentialDocs::owned_docs(&doc.cid), Some(doc.clone())); |
| 60 | + } |
37 | 61 |
|
| 62 | + #[benchmark] |
| 63 | + fn remove_owned_document( |
| 64 | + c: Linear<2, { CIDSize::get() }>, |
| 65 | + n: Linear<{ T::DocNameMinLen::get() }, { T::DocNameMaxLen::get() }>, |
| 66 | + d: Linear<{ T::DocDescMinLen::get() }, { T::DocDescMaxLen::get() }>, |
| 67 | + o: Linear<1, { T::MaxOwnedDocs::get() }>, |
| 68 | + ) { |
| 69 | + let owner: T::AccountId = account("owner", 0, SEED); |
| 70 | + let (user_id, public_key, cid) = generate_vault_sized(1, 5); |
| 71 | + assert_ok!(ConfidentialDocs::<T>::set_vault( |
| 72 | + RawOrigin::Signed(owner.clone()).into(), |
| 73 | + user_id, |
| 74 | + public_key, |
| 75 | + cid.clone(), |
| 76 | + )); |
| 77 | + // Add "o" docs to owned docs |
| 78 | + for i in 1..=o { |
| 79 | + let doc = generate_owned_doc_sized(i as u8, owner.clone(), c, n, d); |
| 80 | + assert_ok!(ConfidentialDocs::<T>::set_owned_document( |
| 81 | + RawOrigin::Signed(owner.clone()).into(), |
| 82 | + doc.clone() |
| 83 | + )); |
| 84 | + } |
| 85 | + let cid = generate_cid_sized(o as u8, c); |
38 | 86 | #[extrinsic_call] |
39 | | - _(RawOrigin::Signed(caller.clone()), recipient_lookup, transfer_amount); |
| 87 | + _(RawOrigin::Signed(owner), cid.clone()); |
| 88 | + assert_eq!(ConfidentialDocs::<T>::owned_docs(cid), None); |
| 89 | + } |
40 | 90 |
|
41 | | - assert_eq!(Balances::<T, I>::free_balance(&caller), Zero::zero()); |
42 | | - assert_eq!(Balances::<T, I>::free_balance(&recipient), transfer_amount); |
| 91 | + #[benchmark] |
| 92 | + fn share_document( |
| 93 | + c: Linear<2, { CIDSize::get() }>, /* starts in to so that document type id and doc id |
| 94 | + * fit in the vector */ |
| 95 | + n: Linear<{ T::DocNameMinLen::get() }, { T::DocNameMaxLen::get() }>, |
| 96 | + d: Linear<{ T::DocDescMinLen::get() }, { T::DocDescMaxLen::get() }>, |
| 97 | + s: Linear<1, { T::MaxSharedFromDocs::get() - 1 }>, |
| 98 | + ) { |
| 99 | + let from: T::AccountId = account("from", 0, SEED); |
| 100 | + let to: T::AccountId = account("to", 0, SEED); |
| 101 | + // Setup from vault |
| 102 | + let (user_id, public_key, cid) = generate_vault_sized(1, 5); |
| 103 | + assert_ok!(ConfidentialDocs::<T>::set_vault( |
| 104 | + RawOrigin::Signed(from.clone()).into(), |
| 105 | + user_id, |
| 106 | + public_key, |
| 107 | + cid.clone(), |
| 108 | + )); |
| 109 | + // Setup to vault |
| 110 | + let (user_id, public_key, cid) = generate_vault_sized(2, 5); |
| 111 | + assert_ok!(ConfidentialDocs::<T>::set_vault( |
| 112 | + RawOrigin::Signed(to.clone()).into(), |
| 113 | + user_id, |
| 114 | + public_key, |
| 115 | + cid.clone(), |
| 116 | + )); |
| 117 | + // Add "s" docs to shared docs |
| 118 | + for i in 1..=s { |
| 119 | + let doc = generate_shared_doc_sized(i as u8, from.clone(), to.clone(), c, n, d); |
| 120 | + assert_ok!(ConfidentialDocs::<T>::share_document( |
| 121 | + RawOrigin::Signed(from.clone()).into(), |
| 122 | + doc.clone() |
| 123 | + )); |
| 124 | + } |
| 125 | + let doc = generate_shared_doc_sized((s + 1) as u8, from.clone(), to.clone(), c, n, d); |
| 126 | + #[extrinsic_call] |
| 127 | + _(RawOrigin::Signed(from), doc.clone()); |
| 128 | + assert_eq!(ConfidentialDocs::shared_docs(&doc.cid), Some(doc.clone())); |
43 | 129 | } |
44 | 130 |
|
45 | 131 | impl_benchmark_test_suite! { |
46 | | - Balances, |
47 | | - crate::tests::ExtBuilder::default().build(), |
48 | | - crate::tests::Test, |
| 132 | + ConfidentialDocs, |
| 133 | + crate::mock::new_test_ext(), |
| 134 | + crate::mock::Test, |
49 | 135 | } |
50 | 136 | } |
0 commit comments