Ver Fonte

Implement StorageProviderHelper in the runtime

- implement StorageProviderHelper in the runtime
- add integration test
Shamil Gadelshin há 4 anos atrás
pai
commit
cd21f46af0

+ 1 - 1
runtime/src/integration/storage.rs

@@ -16,7 +16,7 @@ impl storage::data_directory::StorageProviderHelper<Runtime> for StorageProvider
             .collect();
 
         if live_ids.is_empty() {
-            Err("no staked account found")
+            Err("No valid storage provider found.")
         } else {
             let index = Self::random_index(live_ids.len());
             Ok(live_ids[index])

+ 9 - 0
runtime/src/tests/mod.rs

@@ -3,3 +3,12 @@
 #![cfg(test)]
 
 mod proposals_integration;
+mod storage_integration;
+
+pub(crate) fn initial_test_ext() -> runtime_io::TestExternalities {
+    let t = system::GenesisConfig::default()
+        .build_storage::<crate::Runtime>()
+        .unwrap();
+
+    t.into()
+}

+ 2 - 8
runtime/src/tests/proposals_integration.rs

@@ -20,15 +20,9 @@ use srml_support::traits::Currency;
 use srml_support::{StorageLinkedMap, StorageMap, StorageValue};
 use system::RawOrigin;
 
-use crate::CouncilManager;
-
-fn initial_test_ext() -> runtime_io::TestExternalities {
-    let t = system::GenesisConfig::default()
-        .build_storage::<Runtime>()
-        .unwrap();
+use super::initial_test_ext;
 
-    t.into()
-}
+use crate::CouncilManager;
 
 type Balances = balances::Module<Runtime>;
 type System = system::Module<Runtime>;

+ 42 - 0
runtime/src/tests/storage_integration.rs

@@ -0,0 +1,42 @@
+use super::initial_test_ext;
+use crate::integration::storage::StorageProviderHelper;
+use crate::Runtime;
+
+use bureaucracy::{Instance2, Worker};
+use srml_support::{StorageLinkedMap, StorageMap};
+
+#[test]
+fn storage_provider_helper_succeeds() {
+    initial_test_ext().execute_with(|| {
+
+		// Error - no workers.
+		let random_provider_result = <StorageProviderHelper as storage::data_directory::StorageProviderHelper<Runtime>>::get_random_storage_provider();
+		assert!(random_provider_result.is_err());
+
+		let worker_id1 = 1;
+		let worker_id2 = 7;
+		let worker_id3 = 19;
+
+		<bureaucracy::WorkerById<Runtime, Instance2>>::insert(worker_id1, Worker::default());
+		<bureaucracy::WorkerById<Runtime, Instance2>>::insert(worker_id2, Worker::default());
+		<bureaucracy::WorkerById<Runtime, Instance2>>::insert(worker_id3, Worker::default());
+
+		// Still error - not registered in the service discovery.
+		let random_provider_result = <StorageProviderHelper as storage::data_directory::StorageProviderHelper<Runtime>>::get_random_storage_provider();
+		assert!(random_provider_result.is_err());
+
+		let account_info = service_discovery::AccountInfo{
+			identity: Vec::new(),
+			expires_at: 1000
+		};
+
+		<service_discovery::AccountInfoByStorageProviderId<Runtime>>::insert(worker_id1,account_info.clone());
+		<service_discovery::AccountInfoByStorageProviderId<Runtime>>::insert(worker_id2,account_info.clone());
+		<service_discovery::AccountInfoByStorageProviderId<Runtime>>::insert(worker_id3,account_info);
+
+		// Should work now.
+		let worker_ids = vec![worker_id1, worker_id2, worker_id3];
+		let random_provider_id = <StorageProviderHelper as storage::data_directory::StorageProviderHelper<Runtime>>::get_random_storage_provider().unwrap();
+		assert!(worker_ids.contains(&random_provider_id));
+	});
+}