Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Commit

Permalink
Merge pull request #715 from ethcore/rpc-personal-tests
Browse files Browse the repository at this point in the history
Rpc personal tests
  • Loading branch information
arkpar committed Mar 14, 2016
2 parents a1fe1a6 + 2117d36 commit acd3984
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 3 deletions.
2 changes: 1 addition & 1 deletion rpc/src/v1/impls/personal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ impl<A> Personal for PersonalClient<A> where A: AccountProvider + 'static {
|(pass, )| {
let store = take_weak!(self.accounts);
match store.new_account(&pass) {
Ok(address) => Ok(Value::String(format!("{:?}", address))),
Ok(address) => Ok(Value::String(format!("0x{:?}", address))),
Err(_) => Err(Error::internal_error())
}
}
Expand Down
10 changes: 8 additions & 2 deletions rpc/src/v1/tests/helpers/account_provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,15 @@ impl TestAccount {
/// Test account provider.
pub struct TestAccountProvider {
accounts: RwLock<HashMap<Address, TestAccount>>,
pub adds: RwLock<Vec<String>>,
}

impl TestAccountProvider {
/// Basic constructor.
pub fn new(accounts: HashMap<Address, TestAccount>) -> Self {
TestAccountProvider {
accounts: RwLock::new(accounts),
adds: RwLock::new(vec![]),
}
}
}
Expand All @@ -69,9 +71,13 @@ impl AccountProvider for TestAccountProvider {
}
}

fn new_account(&self, _pass: &str) -> Result<Address, io::Error> {
unimplemented!()
fn new_account(&self, pass: &str) -> Result<Address, io::Error> {
let mut adds = self.adds.write().unwrap();
let address = Address::from(adds.len() as u64 + 2);
adds.push(pass.to_owned());
Ok(address)
}

fn account_secret(&self, _account: &Address) -> Result<Secret, SigningError> {
unimplemented!()
}
Expand Down
1 change: 1 addition & 0 deletions rpc/src/v1/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ mod eth;
mod net;
mod web3;
mod helpers;
mod personal;
59 changes: 59 additions & 0 deletions rpc/src/v1/tests/personal.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Copyright 2015, 2016 Ethcore (UK) Ltd.
// This file is part of Parity.

// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>.

use std::sync::Arc;
use jsonrpc_core::IoHandler;
use v1::tests::helpers::{TestAccount, TestAccountProvider};
use v1::{PersonalClient, Personal};
use util::numbers::*;
use std::collections::*;

fn accounts_provider() -> Arc<TestAccountProvider> {
let mut accounts = HashMap::new();
accounts.insert(Address::from(1), TestAccount::new("test"));
let ap = TestAccountProvider::new(accounts);
Arc::new(ap)
}

fn setup() -> (Arc<TestAccountProvider>, IoHandler) {
let test_provider = accounts_provider();
let personal = PersonalClient::new(&test_provider);
let io = IoHandler::new();
io.add_delegate(personal.to_delegate());
(test_provider, io)
}

#[test]
fn accounts() {
let (_test_provider, io) = setup();

let request = r#"{"jsonrpc": "2.0", "method": "personal_listAccounts", "params": [], "id": 1}"#;
let response = r#"{"jsonrpc":"2.0","result":["0x0000000000000000000000000000000000000001"],"id":1}"#;

assert_eq!(io.handle_request(request), Some(response.to_owned()));
}


#[test]
fn new_account() {
let (_test_provider, io) = setup();

let request = r#"{"jsonrpc": "2.0", "method": "personal_newAccount", "params": ["pass"], "id": 1}"#;
let response = r#"{"jsonrpc":"2.0","result":"0x0000000000000000000000000000000000000002","id":1}"#;

assert_eq!(io.handle_request(request), Some(response.to_owned()));
}

0 comments on commit acd3984

Please sign in to comment.