diff --git a/rpc/src/v1/impls/personal.rs b/rpc/src/v1/impls/personal.rs
index 0cd3f0040..2822059d6 100644
--- a/rpc/src/v1/impls/personal.rs
+++ b/rpc/src/v1/impls/personal.rs
@@ -49,7 +49,7 @@ impl Personal for PersonalClient 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())
}
}
diff --git a/rpc/src/v1/tests/helpers/account_provider.rs b/rpc/src/v1/tests/helpers/account_provider.rs
index 66f085f74..ce5b76b44 100644
--- a/rpc/src/v1/tests/helpers/account_provider.rs
+++ b/rpc/src/v1/tests/helpers/account_provider.rs
@@ -42,6 +42,7 @@ impl TestAccount {
/// Test account provider.
pub struct TestAccountProvider {
accounts: RwLock>,
+ pub adds: RwLock>,
}
impl TestAccountProvider {
@@ -49,6 +50,7 @@ impl TestAccountProvider {
pub fn new(accounts: HashMap) -> Self {
TestAccountProvider {
accounts: RwLock::new(accounts),
+ adds: RwLock::new(vec![]),
}
}
}
@@ -69,9 +71,13 @@ impl AccountProvider for TestAccountProvider {
}
}
- fn new_account(&self, _pass: &str) -> Result {
- unimplemented!()
+ fn new_account(&self, pass: &str) -> Result {
+ 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 {
unimplemented!()
}
diff --git a/rpc/src/v1/tests/mod.rs b/rpc/src/v1/tests/mod.rs
index 3374bad36..21085a0fd 100644
--- a/rpc/src/v1/tests/mod.rs
+++ b/rpc/src/v1/tests/mod.rs
@@ -20,3 +20,4 @@ mod eth;
mod net;
mod web3;
mod helpers;
+mod personal;
diff --git a/rpc/src/v1/tests/personal.rs b/rpc/src/v1/tests/personal.rs
new file mode 100644
index 000000000..261527c47
--- /dev/null
+++ b/rpc/src/v1/tests/personal.rs
@@ -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 .
+
+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 {
+ let mut accounts = HashMap::new();
+ accounts.insert(Address::from(1), TestAccount::new("test"));
+ let ap = TestAccountProvider::new(accounts);
+ Arc::new(ap)
+}
+
+fn setup() -> (Arc, 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()));
+}
+