fix: fix tests and add Makefile
This commit is contained in:
@@ -25,6 +25,8 @@ k256 = { version = "0.13", features = ["ecdsa"] }
|
||||
[dev-dependencies]
|
||||
wasm-bindgen-test = "0.3"
|
||||
web-sys = { version = "0.3", features = ["console"] }
|
||||
tempfile = "3"
|
||||
kvstore = { path = "../kvstore" }
|
||||
|
||||
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
||||
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
|
||||
|
@@ -1,7 +1,47 @@
|
||||
use evm_client::provider::Transaction;
|
||||
use evm_client::provider::{parse_signature_rs_v, get_balance};
|
||||
// All native (non-WASM) balance and signature tests are in this file.
|
||||
use ethers_core::types::{U256, Address, Bytes};
|
||||
use ethers_core::types::{Address, U256};
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod native_tests {
|
||||
use super::*;
|
||||
use vault::{SessionManager, KeyType};
|
||||
use tempfile::TempDir;
|
||||
use kvstore::native::NativeStore;
|
||||
use alloy_primitives::keccak256;
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_vault_sessionmanager_balance_for_new_keypair() {
|
||||
let tmp_dir = TempDir::new().expect("create temp dir");
|
||||
let store = NativeStore::open(tmp_dir.path().to_str().unwrap()).expect("Failed to open native store");
|
||||
let mut vault = vault::Vault::new(store.clone());
|
||||
let keyspace = "testspace";
|
||||
let password = b"testpass";
|
||||
// 1. Create keyspace
|
||||
vault.create_keyspace(keyspace, password, None).await.expect("create keyspace");
|
||||
// 2. Add secp256k1 keypair
|
||||
let key_id = vault.add_keypair(keyspace, password, Some(KeyType::Secp256k1), None).await.expect("add keypair");
|
||||
// 3. Create SessionManager and unlock keyspace
|
||||
let mut session = SessionManager::new(vault);
|
||||
session.unlock_keyspace(keyspace, password).await.expect("unlock keyspace");
|
||||
session.select_keyspace(keyspace).expect("select keyspace");
|
||||
session.select_keypair(&key_id).expect("select keypair");
|
||||
let kp = session.current_keypair().expect("current keypair");
|
||||
// 4. Derive Ethereum address from public key (same as in evm_client)
|
||||
let pubkey = &kp.public_key;
|
||||
// Remove leading 0x04 if present (uncompressed SEC1)
|
||||
let pubkey = if pubkey.len() == 65 && pubkey[0] == 0x04 { &pubkey[1..] } else { pubkey.as_slice() };
|
||||
let hash = keccak256(pubkey);
|
||||
let address = Address::from_slice(&hash[12..]);
|
||||
// 5. Query balance
|
||||
let url = "https://ethereum.blockpi.network/v1/rpc/public";
|
||||
let balance = get_balance(url, address).await.expect("Failed to get balance");
|
||||
assert_eq!(balance, ethers_core::types::U256::zero(), "New keypair should have zero balance");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
use ethers_core::types::Bytes;
|
||||
|
||||
#[test]
|
||||
fn test_rlp_encode_unsigned() {
|
||||
|
@@ -34,6 +34,39 @@ pub async fn test_get_balance_real_address_wasm_unique() {
|
||||
assert!(balance > U256::zero(), "Vitalik's balance should be greater than zero");
|
||||
}
|
||||
|
||||
#[wasm_bindgen_test(async)]
|
||||
pub async fn test_vault_sessionmanager_balance_for_new_keypair_wasm() {
|
||||
use vault::{SessionManager, KeyType};
|
||||
use ethers_core::types::Address;
|
||||
use evm_client::provider::get_balance;
|
||||
use alloy_primitives::keccak256;
|
||||
web_sys::console::log_1(&"WASM vault-session balance test running!".into());
|
||||
let store = kvstore::wasm::WasmStore::open("test-db").await.expect("open");
|
||||
let mut vault = vault::Vault::new(store);
|
||||
let keyspace = "testspace-wasm";
|
||||
let password = b"testpass";
|
||||
// 1. Create keyspace
|
||||
vault.create_keyspace(keyspace, password, None).await.expect("create keyspace");
|
||||
// 2. Add secp256k1 keypair
|
||||
let key_id = vault.add_keypair(keyspace, password, Some(KeyType::Secp256k1), None).await.expect("add keypair");
|
||||
// 3. Create SessionManager and unlock keyspace
|
||||
let mut session = SessionManager::new(vault);
|
||||
session.unlock_keyspace(keyspace, password).await.expect("unlock keyspace");
|
||||
session.select_keyspace(keyspace).expect("select keyspace");
|
||||
session.select_keypair(&key_id).expect("select keypair");
|
||||
let kp = session.current_keypair().expect("current keypair");
|
||||
// 4. Derive Ethereum address from public key
|
||||
let pubkey = &kp.public_key;
|
||||
let pubkey = if pubkey.len() == 65 && pubkey[0] == 0x04 { &pubkey[1..] } else { pubkey.as_slice() };
|
||||
let hash = keccak256(pubkey);
|
||||
let address = Address::from_slice(&hash[12..]);
|
||||
// 5. Query balance
|
||||
let url = "https://ethereum.blockpi.network/v1/rpc/public";
|
||||
let balance = get_balance(url, address).await.expect("Failed to get balance");
|
||||
web_sys::console::log_1(&format!("Balance: {balance:?}").into());
|
||||
assert_eq!(balance, ethers_core::types::U256::zero(), "New keypair should have zero balance");
|
||||
}
|
||||
|
||||
#[wasm_bindgen_test]
|
||||
fn test_parse_signature_rs_v() {
|
||||
let mut sig = [0u8; 65];
|
||||
|
Reference in New Issue
Block a user