added test case for wallet unlock

This commit is contained in:
lunar-mining
2021-07-13 10:25:25 +02:00
parent c63a29a9ad
commit 8038adc4f5

View File

@@ -56,7 +56,7 @@ impl WalletDB {
let contents = include_str!("../../res/schema.sql");
let conn = Connection::open(&self.path)?;
debug!(target: "walletdb", "OPENED CONNECTION AT PATH {:?}", self.path);
conn.execute("PRAGMA key=(?1)", params![self.password])?;
//conn.execute("PRAGMA key=(?1)", params![self.password])?;
conn.execute_batch(&contents)?
} else {
println!("Password is empty. You must set a password to use the wallet.");
@@ -139,6 +139,7 @@ impl WalletDB {
pub fn put_keypair(&self, key_public: Vec<u8>, key_private: Vec<u8>) -> Result<()> {
let conn = Connection::open(&self.path)?;
println!("{}", self.password);
conn.execute("PRAGMA key=(?1)", params![self.password])?;
conn.execute(
"INSERT INTO keys(key_public, key_private) VALUES (?1, ?2)",
@@ -221,89 +222,101 @@ mod tests {
use super::*;
#[test]
pub fn test_keypair() -> Result<()> {
pub fn test_unlock() -> Result<()> {
let password = "roseiscool2021";
let path = join_config_path(&PathBuf::from("wallet.db"))?;
let conn = Connection::open(path)?;
let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
let key_public = serial::serialize(&public);
let key_private = serial::serialize(&secret);
let mut stmt = conn.prepare("PRAGMA key = 'testkey'")?;
let _rows = stmt.query([])?;
conn.execute(
"INSERT INTO keys(key_public, key_private) VALUES (?1, ?2)",
params![key_public, key_private],
)?;
Ok(())
}
#[test]
pub fn test_get_id() -> Result<()> {
let path = join_config_path(&PathBuf::from("wallet.db"))?;
let conn = Connection::open(path)?;
let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
let key_private = serial::serialize(&secret);
let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
let key_public = serial::serialize(&public);
let mut stmt = conn.prepare("PRAGMA key = 'testkey'")?;
let _rows = stmt.query([])?;
conn.execute(
"INSERT INTO keys(key_public, key_private) VALUES (?1, ?2)",
params![key_public, key_private],
)?;
let mut get_id =
conn.prepare("SELECT key_id FROM keys WHERE key_private = :key_private")?;
let rows =
get_id.query_map::<u8, _, _>(&[(":key_private", &key_private)], |row| row.get(0))?;
let mut key_id = Vec::new();
for id in rows {
key_id.push(id?)
}
println!("FOUND ID: {:?}", key_id.pop().unwrap());
Ok(())
}
#[test]
pub fn test_own_coins() -> Result<()> {
let key_private = Vec::new();
let coin = Vec::new();
let serial = Vec::new();
let coin_blind = Vec::new();
let valcom_blind = Vec::new();
let value = Vec::new();
let asset_id = Vec::new();
let witness = Vec::new();
let path = join_config_path(&PathBuf::from("wallet.db"))?;
let conn = Connection::open(path)?;
let contents = include_str!("../../res/schema.sql");
match conn.execute_batch(&contents) {
Ok(v) => println!("Database initalized successfully {:?}", v),
Err(err) => println!("Error: {}", err),
};
//let mut unlock = conn.prepare("PRAGMA key = 'testkey'")?;
//let _rows = unlock.query([])?;
let mut get_id =
conn.prepare("SELECT key_id FROM keys WHERE key_private = :key_private")?;
let rows =
get_id.query_map::<u8, _, _>(&[(":key_private", &key_private)], |row| row.get(0))?;
let mut key_id = Vec::new();
for id in rows {
key_id.push(id?)
}
conn.execute(
"INSERT INTO coins(coin, serial, value, asset_id, coin_blind, valcom_blind, witness, key_id)
VALUES (:coin, :serial, :value, :asset_id, :coin_blind, :valcom_blind, :witness, :key_id)",
named_params! {
":coin": coin,
":serial": serial,
":value": value,
":asset_id": asset_id,
":coin_blind": coin_blind,
":valcom_blind": valcom_blind,
":witness": witness,
":key_id": key_id.pop().expect("key_id not found!"),
},
)?;
let conn = Connection::open(&path)?;
debug!(target: "walletdb", "OPENED CONNECTION AT PATH {:?}", path);
conn.execute("PRAGMA key=(?1)", params![password])?;
conn.execute_batch(&contents)?;
Ok(())
}
//#[test]
//pub fn test_keypair() -> Result<()> {
// let path = join_config_path(&PathBuf::from("wallet.db"))?;
// let conn = Connection::open(path)?;
// let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
// let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
// let key_public = serial::serialize(&public);
// let key_private = serial::serialize(&secret);
// let mut stmt = conn.prepare("PRAGMA key = 'testkey'")?;
// let _rows = stmt.query([])?;
// conn.execute(
// "INSERT INTO keys(key_public, key_private) VALUES (?1, ?2)",
// params![key_public, key_private],
// )?;
// Ok(())
//}
//#[test]
//pub fn test_get_id() -> Result<()> {
// let path = join_config_path(&PathBuf::from("wallet.db"))?;
// let conn = Connection::open(path)?;
// let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
// let key_private = serial::serialize(&secret);
// let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
// let key_public = serial::serialize(&public);
// let mut stmt = conn.prepare("PRAGMA key = 'testkey'")?;
// let _rows = stmt.query([])?;
// conn.execute(
// "INSERT INTO keys(key_public, key_private) VALUES (?1, ?2)",
// params![key_public, key_private],
// )?;
// let mut get_id =
// conn.prepare("SELECT key_id FROM keys WHERE key_private = :key_private")?;
// let rows =
// get_id.query_map::<u8, _, _>(&[(":key_private", &key_private)], |row| row.get(0))?;
// let mut key_id = Vec::new();
// for id in rows {
// key_id.push(id?)
// }
// println!("FOUND ID: {:?}", key_id.pop().unwrap());
// Ok(())
//}
//#[test]
//pub fn test_own_coins() -> Result<()> {
// let key_private = Vec::new();
// let coin = Vec::new();
// let serial = Vec::new();
// let coin_blind = Vec::new();
// let valcom_blind = Vec::new();
// let value = Vec::new();
// let asset_id = Vec::new();
// let witness = Vec::new();
// let path = join_config_path(&PathBuf::from("wallet.db"))?;
// let conn = Connection::open(path)?;
// let contents = include_str!("../../res/schema.sql");
// match conn.execute_batch(&contents) {
// Ok(v) => println!("Database initalized successfully {:?}", v),
// Err(err) => println!("Error: {}", err),
// };
// //let mut unlock = conn.prepare("PRAGMA key = 'testkey'")?;
// //let _rows = unlock.query([])?;
// let mut get_id =
// conn.prepare("SELECT key_id FROM keys WHERE key_private = :key_private")?;
// let rows =
// get_id.query_map::<u8, _, _>(&[(":key_private", &key_private)], |row| row.get(0))?;
// let mut key_id = Vec::new();
// for id in rows {
// key_id.push(id?)
// }
// conn.execute(
// "INSERT INTO coins(coin, serial, value, asset_id, coin_blind, valcom_blind, witness, key_id)
// VALUES (:coin, :serial, :value, :asset_id, :coin_blind, :valcom_blind, :witness, :key_id)",
// named_params! {
// ":coin": coin,
// ":serial": serial,
// ":value": value,
// ":asset_id": asset_id,
// ":coin_blind": coin_blind,
// ":valcom_blind": valcom_blind,
// ":witness": witness,
// ":key_id": key_id.pop().expect("key_id not found!"),
// },
// )?;
// Ok(())
//}
}