From 8038adc4f593f487e772e43df4534fce0dc71e75 Mon Sep 17 00:00:00 2001 From: lunar-mining Date: Tue, 13 Jul 2021 10:25:25 +0200 Subject: [PATCH] added test case for wallet unlock --- src/wallet/walletdb.rs | 177 ++++++++++++++++++++++------------------- 1 file changed, 95 insertions(+), 82 deletions(-) diff --git a/src/wallet/walletdb.rs b/src/wallet/walletdb.rs index f9a0a5eba..69241c99f 100644 --- a/src/wallet/walletdb.rs +++ b/src/wallet/walletdb.rs @@ -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, key_private: Vec) -> 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::(&[(":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::(&[(":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::(&[(":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::(&[(":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(()) + //} }