From aeab062f15901435fd42a91f1008ef39c7c53362 Mon Sep 17 00:00:00 2001 From: rachel-rose Date: Tue, 4 May 2021 11:05:06 +0200 Subject: [PATCH] migrated test code to sapvi directory --- src/bin/wallet/test.rs | 83 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/bin/wallet/test.rs diff --git a/src/bin/wallet/test.rs b/src/bin/wallet/test.rs new file mode 100644 index 000000000..16522dfb2 --- /dev/null +++ b/src/bin/wallet/test.rs @@ -0,0 +1,83 @@ +// rocksdb is the blockchain database +// it is a key value store +// sqlite is the encrypted wallet + +use rusqlite::{Connection, Result}; +use rocksdb::DB; + +fn main() -> Result<()> { + wallet()?; + blockchain()?; + Ok(()) +} + +fn wallet() -> Result<()> { + let connector = connect()?; + encrypt(&connector)?; + println!("Created encrypted database."); + decrypt(&connector)?; + println!("Decrypted database."); + Ok(()) +} + +fn connect() -> Result { + println!("Attempting to establish a connection..."); + let path = "/home/x/src/sapvi/src/bin/wallet/wallet.db"; + let connector = Connection::open(&path); + println!("Path created at {}", path); + println!("Connection established"); + connector +} + +fn encrypt(conn: &Connection) -> Result<()> { + println!("Attempting to create an encrypted database..."); + conn.execute_batch( + "ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'testkey'; + SELECT sqlcipher_export('encrypted'); + DETACH DATABASE encrypted;", + ) +} + +fn decrypt(conn: &Connection) -> Result<()> { + println!("Attempting to decrypt database..."); + conn.execute_batch( + "ATTACH DATABASE 'plaintext.db' AS plaintext KEY 'testkey'; + SELECT sqlcipher_export('plaintext'); + DETACH DATABASE plaintext;", + ) +} + +fn blockchain() -> Result<()> { + let db = create_db(); + write_db(&db)?; + test_db(&db); + Ok(()) +} + +fn create_db() -> DB { + println!("Creating a blockchain database..."); + let path = "/home/x/src/sapvi/src/bin/wallet/blockchain.db"; + let db = DB::open_default(path).unwrap(); + db +} + +fn write_db(db: &DB) -> Result<()> { + println!("Writing to the blockchain..."); + db.put(b"test-value", b"test-key").unwrap(); + Ok(()) +} + +fn test_db(db: &DB) { + println!("Testing if write was successful..."); + match db.get(b"test-value") { + Ok(Some(value)) => println!("retrieved value {}", String::from_utf8(value).unwrap()), + Ok(None) => println!("value not found"), + Err(e) => println!("operational problem encountered: {}", e), + } +} + +//fn configure_blockchain() { +// let mut opts = Options::default(); +// let mut block_opts = BlockBasedOptions::default(); +// block_opts.set_index_type(BlockBasedIndexType::HashSearch); +//}