Просмотр исходного кода

runtime: storage-v2: Add benchmarking infrastructure.

Shamil Gadelshin 3 лет назад
Родитель
Сommit
2ffc38a55e

+ 2 - 0
Cargo.lock

@@ -2431,6 +2431,7 @@ dependencies = [
  "pallet-staking",
  "pallet-staking-reward-curve",
  "pallet-storage",
+ "pallet-storage-v2",
  "pallet-sudo",
  "pallet-timestamp",
  "pallet-token-mint",
@@ -4275,6 +4276,7 @@ dependencies = [
 name = "pallet-storage-v2"
 version = "1.0.0"
 dependencies = [
+ "frame-benchmarking",
  "frame-support",
  "frame-system",
  "pallet-balances",

+ 8 - 1
runtime-modules/storage-v2/Cargo.toml

@@ -1,5 +1,5 @@
 [package]
-name = 'pallet-storage-v2' # temp name
+name = 'pallet-storage-v2'
 version = '1.0.0'
 authors = ['Joystream contributors']
 edition = '2018'
@@ -17,12 +17,19 @@ sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://
 common = { package = 'pallet-common', default-features = false, path = '../common'}
 membership = { package = 'pallet-membership', default-features = false, path = '../membership'}
 
+# Benchmarking
+frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '2cd20966cc09b059817c3ebe12fc130cdd850d62', optional = true}
+
 [dev-dependencies]
 sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '2cd20966cc09b059817c3ebe12fc130cdd850d62'}
 sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '2cd20966cc09b059817c3ebe12fc130cdd850d62'}
 
 [features]
 default = ['std']
+runtime-benchmarks = [
+    "frame-benchmarking",
+    "sp-runtime/runtime-benchmarks",
+]
 std = [
     'serde',
     'codec/std',

+ 40 - 0
runtime-modules/storage-v2/src/benchmarking.rs

@@ -0,0 +1,40 @@
+#![cfg(feature = "runtime-benchmarks")]
+
+use frame_benchmarking::{benchmarks};
+use frame_system::RawOrigin;
+use frame_support::storage::StorageMap;
+
+use crate::{StorageBucketById, Trait, Call, Module};
+
+benchmarks! {
+    where_clause {
+        where T: balances::Trait,
+              T: membership::Trait,
+              T: Trait,
+    }
+    _{ }
+
+    create_storage_bucket {
+		let account_id: T::AccountId = Default::default();
+
+	}: _ (RawOrigin::Signed(account_id), None, false, Default::default())
+    verify {
+        let storage_bucket_id: T::StorageBucketId = Default::default();
+
+        assert!(StorageBucketById::<T>::contains_key(storage_bucket_id));
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use crate::tests::mocks::{build_test_externalities, Test};
+    use frame_support::assert_ok;
+
+    #[test]
+    fn create_storage_bucket() {
+        build_test_externalities().execute_with(|| {
+            assert_ok!(test_benchmark_create_storage_bucket::<Test>());
+        });
+    }
+}

+ 3 - 0
runtime-modules/storage-v2/src/lib.rs

@@ -18,6 +18,9 @@
 #[cfg(test)]
 mod tests;
 
+#[cfg(feature = "runtime-benchmarks")]
+mod benchmarking;
+
 use codec::{Codec, Decode, Encode};
 use frame_support::dispatch::DispatchResult;
 use frame_support::traits::Get;

+ 1 - 1
runtime-modules/storage-v2/src/tests/fixtures.rs

@@ -3,7 +3,7 @@ use frame_support::storage::StorageMap;
 use frame_support::traits::{Currency, OnFinalize, OnInitialize};
 use frame_system::{EventRecord, Phase, RawOrigin};
 
-use super::mock::{Balances, Storage, System, Test, TestEvent};
+use super::mocks::{Balances, Storage, System, Test, TestEvent};
 
 use crate::{RawEvent, Voucher};
 

+ 1 - 1
runtime-modules/storage-v2/src/tests/mock.rs → runtime-modules/storage-v2/src/tests/mocks.rs

@@ -114,7 +114,7 @@ impl frame_system::Trait for Test {
     type SystemWeightInfo = ();
 }
 
-pub fn initial_test_ext() -> sp_io::TestExternalities {
+pub fn build_test_externalities() -> sp_io::TestExternalities {
     let t = frame_system::GenesisConfig::default()
         .build_storage::<Test>()
         .unwrap();

+ 6 - 6
runtime-modules/storage-v2/src/tests/mod.rs

@@ -1,19 +1,19 @@
 #![cfg(test)]
 
 mod fixtures;
-mod mock;
+pub(crate) mod mocks;
 
 use frame_support::dispatch::DispatchError;
 use frame_system::RawOrigin;
 
 use fixtures::{run_to_block, CreateStorageBucketFixture, EventFixture};
-use mock::{initial_test_ext, Storage, Test};
+use mocks::{build_test_externalities, Storage, Test};
 
 use crate::{Error, RawEvent, StorageBucketOperatorStatus, Voucher};
 
 #[test]
 fn create_storage_bucket_succeeded() {
-    initial_test_ext().execute_with(|| {
+    build_test_externalities().execute_with(|| {
         let starting_block = 1;
         run_to_block(starting_block);
 
@@ -46,7 +46,7 @@ fn create_storage_bucket_succeeded() {
 
 #[test]
 fn create_storage_bucket_succeeded_with_invited_member() {
-    initial_test_ext().execute_with(|| {
+    build_test_externalities().execute_with(|| {
         let invited_worker_id = 10;
         let accepting_new_data_objects = true;
         let voucher = Voucher::default();
@@ -70,7 +70,7 @@ fn create_storage_bucket_succeeded_with_invited_member() {
 
 #[test]
 fn create_storage_bucket_fails_with_invalid_origin() {
-    initial_test_ext().execute_with(|| {
+    build_test_externalities().execute_with(|| {
         CreateStorageBucketFixture::default()
             .with_origin(RawOrigin::None)
             .call_and_assert(Err(DispatchError::BadOrigin));
@@ -79,7 +79,7 @@ fn create_storage_bucket_fails_with_invalid_origin() {
 
 #[test]
 fn create_storage_bucket_fails_with_exceeding_max_storage_bucket_limit() {
-    initial_test_ext().execute_with(|| {
+    build_test_externalities().execute_with(|| {
         CreateStorageBucketFixture::default().call_and_assert(Ok(()));
 
         CreateStorageBucketFixture::default()

+ 16 - 13
runtime/Cargo.toml

@@ -79,6 +79,7 @@ proposals-engine = { package = 'pallet-proposals-engine', default-features = fal
 proposals-discussion = { package = 'pallet-proposals-discussion', default-features = false, path = '../runtime-modules/proposals/discussion'}
 proposals-codex = { package = 'pallet-proposals-codex', default-features = false, path = '../runtime-modules/proposals/codex'}
 content-directory = { package = 'pallet-content-directory', default-features = false, path = '../runtime-modules/content-directory' }
+storage-v2 = { package = 'pallet-storage-v2', default-features = false, path = '../runtime-modules/storage-v2'}
 
 [dev-dependencies]
 sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '2cd20966cc09b059817c3ebe12fc130cdd850d62'}
@@ -156,21 +157,23 @@ std = [
     'proposals-discussion/std',
     'proposals-codex/std',
     'content-directory/std',
+    'storage-v2/std',
 ]
 runtime-benchmarks = [
-    "frame-system/runtime-benchmarks",
-	"frame-support/runtime-benchmarks",
-	"sp-runtime/runtime-benchmarks",
-	"pallet-balances/runtime-benchmarks",
-	"pallet-collective/runtime-benchmarks",
-	"pallet-im-online/runtime-benchmarks",
-	"pallet-staking/runtime-benchmarks",
-	"pallet-timestamp/runtime-benchmarks",
-    "frame-benchmarking",
-    "frame-system-benchmarking",
-    "pallet-offences-benchmarking",
-	"pallet-session-benchmarking",
-    "substrate-utility/runtime-benchmarks",
+    'frame-system/runtime-benchmarks',
+	'frame-support/runtime-benchmarks',
+	'sp-runtime/runtime-benchmarks',
+	'pallet-balances/runtime-benchmarks',
+	'pallet-collective/runtime-benchmarks',
+	'pallet-im-online/runtime-benchmarks',
+	'pallet-staking/runtime-benchmarks',
+	'pallet-timestamp/runtime-benchmarks',
+    'frame-benchmarking',
+    'frame-system-benchmarking',
+    'pallet-offences-benchmarking',
+	'pallet-session-benchmarking',
+    'substrate-utility/runtime-benchmarks',
+    'storage-v2/runtime-benchmarks',
 ]