66 lines
2.4 KiB
Rust
66 lines
2.4 KiB
Rust
#![cfg(not(target_arch = "wasm32"))]
|
|
// tests/evm_client.rs
|
|
use evm_client::{EvmClient, EvmProvider, Signer, EvmError};
|
|
|
|
struct DummySigner;
|
|
|
|
// --- IMPORTANT ---
|
|
// The Signer trait's async methods require different trait bounds on native vs WASM:
|
|
// - Native Rust: futures must be Send, so use #[async_trait::async_trait]
|
|
// - WASM (wasm32): futures do NOT require Send, so use #[async_trait::async_trait(?Send)]
|
|
// This split is required for cross-platform test compatibility. DO NOT merge these impls!
|
|
#[cfg(target_arch = "wasm32")]
|
|
#[async_trait::async_trait(?Send)]
|
|
impl Signer for DummySigner {
|
|
async fn sign(&self, _message: &[u8]) -> Result<Vec<u8>, EvmError> {
|
|
Ok(vec![0u8; 65]) // dummy signature
|
|
}
|
|
fn address(&self) -> String {
|
|
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045".to_string()
|
|
}
|
|
}
|
|
|
|
// See explanation above for why this impl uses #[async_trait::async_trait]
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
#[async_trait::async_trait]
|
|
impl Signer for DummySigner {
|
|
async fn sign(&self, _message: &[u8]) -> Result<Vec<u8>, EvmError> {
|
|
Ok(vec![0u8; 65]) // dummy signature
|
|
}
|
|
fn address(&self) -> String {
|
|
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045".to_string()
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_transfer_rlp_encoding() {
|
|
let provider = EvmProvider::Http {
|
|
name: "mainnet".to_string(),
|
|
url: "https://rpc.ankr.com/eth".to_string(),
|
|
chain_id: 1,
|
|
};
|
|
let signer = DummySigner;
|
|
let mut client = EvmClient::new(signer);
|
|
client.add_provider("mainnet".to_string(), provider);
|
|
client.set_current("mainnet").unwrap();
|
|
// Use a dummy transfer (will fail to send, but will test RLP logic)
|
|
let result = client.transfer("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", 1u128).await;
|
|
// Should fail due to dummy signature, but should not panic or error at RLP encoding
|
|
assert!(matches!(result, Err(EvmError::Rpc(_)) | Err(EvmError::Vault(_))));
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_transfer_invalid_address() {
|
|
let provider = EvmProvider::Http {
|
|
name: "mainnet".to_string(),
|
|
url: "https://rpc.ankr.com/eth".to_string(),
|
|
chain_id: 1,
|
|
};
|
|
let signer = DummySigner;
|
|
let mut client = EvmClient::new(signer);
|
|
client.add_provider("mainnet".to_string(), provider);
|
|
client.set_current("mainnet").unwrap();
|
|
let result = client.transfer("invalid_address", 1u128).await;
|
|
assert!(matches!(result, Err(EvmError::Rpc(_))));
|
|
}
|