From 4ab71b58b88d556ecc127bc7e5ebe59aa22fb222 Mon Sep 17 00:00:00 2001 From: Xiliang Chen <xlchen1291@gmail.com> Date: Thu, 4 Jun 2020 11:27:37 +1200 Subject: [PATCH] allow root to feed values (#201) --- oracle/src/lib.rs | 6 +++--- oracle/src/tests.rs | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/oracle/src/lib.rs b/oracle/src/lib.rs index 4298306..8871cf1 100644 --- a/oracle/src/lib.rs +++ b/oracle/src/lib.rs @@ -8,6 +8,7 @@ mod tests; mod timestamped_value; use codec::Encode; +pub use default_combine_data::DefaultCombineData; use frame_support::{ decl_error, decl_event, decl_module, decl_storage, ensure, traits::{ChangeMembers, Get, InitializeMembers, Time}, @@ -25,8 +26,7 @@ use sp_std::{convert::TryInto, prelude::*, vec}; // FIXME: `pallet/frame-` prefix should be used for all pallet modules, but currently `frame_system` // would cause compiling error in `decl_module!` and `construct_runtime!` // #3295 https://github.com/paritytech/substrate/issues/3295 -pub use default_combine_data::DefaultCombineData; -use frame_system::{self as system, ensure_none, ensure_signed}; +use frame_system::{self as system, ensure_none, ensure_root, ensure_signed}; pub use orml_traits::{CombineData, DataProvider, DataProviderExtended, OnNewData, OnRedundantCall}; use orml_utilities::OrderedSet; pub use timestamped_value::TimestampedValue; @@ -124,7 +124,7 @@ decl_module! { // we can skip doing it here again. _signature: <T::AuthorityId as RuntimeAppPublic>::Signature, ) { - ensure_none(origin)?; + ensure_none(origin.clone()).or_else(|_| ensure_root(origin))?; let who = Self::members().0[index as usize].clone(); Self::_feed_values(who, values)?; } diff --git a/oracle/src/tests.rs b/oracle/src/tests.rs index 4546a5f..f96a9b0 100644 --- a/oracle/src/tests.rs +++ b/oracle/src/tests.rs @@ -11,7 +11,7 @@ use frame_support::{ unsigned::ValidateUnsigned, }; use sp_runtime::{ - testing::UintAuthorityId, + testing::{TestSignature, UintAuthorityId}, transaction_validity::{InvalidTransaction, TransactionSource, TransactionValidityError}, RuntimeAppPublic, }; @@ -76,6 +76,44 @@ fn should_feed_values() { }); } +#[test] +fn should_feed_values_from_root() { + new_test_ext().execute_with(|| { + let account_id: AccountId = 1; + + assert_ok!(ModuleOracle::feed_values( + Origin::ROOT, + vec![(50, 1000), (51, 900), (52, 800)], + 0, + TestSignature(0, vec![]) + )); + + assert_eq!( + ModuleOracle::raw_values(&account_id, &50), + Some(TimestampedValue { + value: 1000, + timestamp: 12345, + }) + ); + + assert_eq!( + ModuleOracle::raw_values(&account_id, &51), + Some(TimestampedValue { + value: 900, + timestamp: 12345, + }) + ); + + assert_eq!( + ModuleOracle::raw_values(&account_id, &52), + Some(TimestampedValue { + value: 800, + timestamp: 12345, + }) + ); + }); +} + #[test] fn should_update_is_updated() { new_test_ext().execute_with(|| { -- GitLab