More tests and some cleanup (#3331)

This commit is contained in:
Bastian Köcher
2019-08-08 00:05:15 +02:00
committed by GitHub
parent 556a9416ae
commit 46709e8381
6 changed files with 126 additions and 70 deletions
+2 -1
View File
@@ -141,7 +141,8 @@ impl<B, E, P, RA> AuthorApi<ExHash<P>, BlockHash<P>> for Author<B, E, P, RA> whe
{
type Metadata = crate::metadata::Metadata;
fn insert_key(&self,
fn insert_key(
&self,
key_type: String,
suri: String,
maybe_public: Option<Bytes>,
+35 -48
View File
@@ -23,12 +23,12 @@ use transaction_pool::{
txpool::Pool,
ChainApi,
};
use primitives::{H256, blake2_256, hexdisplay::HexDisplay, traits::BareCryptoStore};
use primitives::{
H256, blake2_256, hexdisplay::HexDisplay, traits::BareCryptoStore, testing::KeyStore,
ed25519, crypto::key_types,
};
use test_client::{self, AccountKeyring, runtime::{Extrinsic, Transfer}};
use tokio::runtime;
use std::collections::HashMap;
use sr_primitives::KeyTypeId;
use parking_lot::RwLock;
fn uxt(sender: AccountKeyring, nonce: u64) -> Extrinsic {
let tx = Transfer {
@@ -40,50 +40,11 @@ fn uxt(sender: AccountKeyring, nonce: u64) -> Extrinsic {
tx.into_signed_tx()
}
#[derive(Default)]
struct TestKeyStore {
keys: HashMap<KeyTypeId, HashMap<Vec<u8>, String>>,
}
impl BareCryptoStore for TestKeyStore {
fn sr25519_public_keys(&self, _id: KeyTypeId) -> Vec<sr25519::Public> { vec![] }
fn sr25519_generate_new(&mut self, _id: KeyTypeId, _seed: Option<&str>)
-> std::result::Result<sr25519::Public, String>
{
Err("unimplemented".into())
}
fn sr25519_key_pair(&self, _id: KeyTypeId, _pub_key: &sr25519::Public) -> Option<sr25519::Pair> {
None
}
fn ed25519_public_keys(&self, _id: KeyTypeId) -> Vec<ed25519::Public> { vec![] }
fn ed25519_generate_new(&mut self, _id: KeyTypeId, _seed: Option<&str>)
-> std::result::Result<ed25519::Public, String>
{
Err("unimplemented".into())
}
fn ed25519_key_pair(&self, _id: KeyTypeId, _pub_key: &ed25519::Public) -> Option<ed25519::Pair> {
None
}
fn insert_unknown(&mut self, key_type: KeyTypeId, suri: &str, public: &[u8])
-> std::result::Result<(), ()>
{
self.keys
.entry(key_type)
.or_default()
.insert(public.to_owned(), suri.to_owned());
Ok(())
}
fn password(&self) -> Option<&str> { None }
}
#[test]
fn submit_transaction_should_not_cause_error() {
let runtime = runtime::Runtime::new().unwrap();
let client = Arc::new(test_client::new());
let keystore = TestKeyStore::default();
let keystore = Arc::new(RwLock::new(keystore));
let keystore = KeyStore::new();
let p = Author {
client: client.clone(),
pool: Arc::new(Pool::new(Default::default(), ChainApi::new(client))),
@@ -106,7 +67,7 @@ fn submit_transaction_should_not_cause_error() {
fn submit_rich_transaction_should_not_cause_error() {
let runtime = runtime::Runtime::new().unwrap();
let client = Arc::new(test_client::new());
let keystore = Arc::new(RwLock::new(TestKeyStore::default()));
let keystore = KeyStore::new();
let p = Author {
client: client.clone(),
pool: Arc::new(Pool::new(Default::default(), ChainApi::new(client.clone()))),
@@ -131,7 +92,7 @@ fn should_watch_extrinsic() {
let mut runtime = runtime::Runtime::new().unwrap();
let client = Arc::new(test_client::new());
let pool = Arc::new(Pool::new(Default::default(), ChainApi::new(client.clone())));
let keystore = Arc::new(RwLock::new(TestKeyStore::default()));
let keystore = KeyStore::new();
let p = Author {
client,
pool: pool.clone(),
@@ -173,7 +134,7 @@ fn should_return_pending_extrinsics() {
let runtime = runtime::Runtime::new().unwrap();
let client = Arc::new(test_client::new());
let pool = Arc::new(Pool::new(Default::default(), ChainApi::new(client.clone())));
let keystore = Arc::new(RwLock::new(TestKeyStore::default()));
let keystore = KeyStore::new();
let p = Author {
client,
pool: pool.clone(),
@@ -193,7 +154,7 @@ fn should_remove_extrinsics() {
let runtime = runtime::Runtime::new().unwrap();
let client = Arc::new(test_client::new());
let pool = Arc::new(Pool::new(Default::default(), ChainApi::new(client.clone())));
let keystore = Arc::new(RwLock::new(TestKeyStore::default()));
let keystore = KeyStore::new();
let p = Author {
client,
pool: pool.clone(),
@@ -217,3 +178,29 @@ fn should_remove_extrinsics() {
assert_eq!(removed.len(), 3);
}
#[test]
fn should_insert_key() {
let runtime = runtime::Runtime::new().unwrap();
let client = Arc::new(test_client::new());
let keystore = KeyStore::new();
let p = Author {
client: client.clone(),
pool: Arc::new(Pool::new(Default::default(), ChainApi::new(client))),
subscriptions: Subscriptions::new(Arc::new(runtime.executor())),
keystore: keystore.clone(),
};
let suri = "//Alice";
let key_pair = ed25519::Pair::from_string(suri, None).expect("Generates keypair");
p.insert_key(
String::from_utf8(key_types::ED25519.0.to_vec()).expect("Keytype is a valid string"),
suri.to_string(),
Some(key_pair.public().0.to_vec().into()),
).expect("Insert key");
let store_key_pair = keystore.read()
.ed25519_key_pair(key_types::ED25519, &key_pair.public()).expect("Key exists in store");
assert_eq!(key_pair.public(), store_key_pair.public());
}