37个版本 (破坏性更新)
0.28.0 | 2024年5月29日 |
---|---|
0.27.1 | 2024年1月25日 |
0.27.0 | 2023年12月22日 |
0.26.0 | 2023年10月18日 |
0.8.0 | 2021年7月26日 |
#15 in #connected
9,470 每月下载量
用于 17 个crate(12直接使用)
35KB
602 行
Electrsd
运行与指定 bitcoind 实例连接的 electrs 进程的工具,在集成测试环境中非常有用。
let bitcoind = bitcoind::BitcoinD::new("/usr/local/bin/bitcoind").unwrap();
let electrsd = electrsd::ElectrsD::new("/usr/local/bin/electrs", bitcoind).unwrap();
let header = electrsd.client.block_headers_subscribe().unwrap();
assert_eq!(header.height, 0);
自动二进制文件下载
在你的项目Cargo.toml中,启用以下功能
electrsd = { version= "0.23", features = ["bitcoind_23_1", "electrs_0_9_1"] }
然后使用它
let bitcoind_exe = bitcoind::downloaded_exe_path().expect("bitcoind version feature must be enabled");
let bitcoind = bitcoind::BitcoinD::new(bitcoind_exe).unwrap();
let electrs_exe = electrsd::downloaded_exe_path().expect("electrs version feature must be enabled");
let electrsd = electrsd::ElectrsD::new(electrs_exe, bitcoind).unwrap();
当设置环境变量 ELECTRSD_DOWNLOAD_ENDPOINT
/BITCOIND_DOWNLOAD_ENDPOINT
时,electrsd
/bitcoind
将尝试从指定的端点下载二进制文件。
当你不使用自动下载功能时,你有以下选择
- 在
PATH
中有electrs
可执行文件 - 通过
ELECTRS_EXEC
环境变量提供electrs
可执行文件
if let Ok(exe_path) = electrsd::exe_path() {
let electrsd = electrsd::electrsD::new(exe_path).unwrap();
}
启动选项可以通过使用 Conf
结构体并通过 electrsD::with_conf
或 electrsD::from_downloaded_with_conf
进行配置。
Nix
对于确定性,在nix中,你无法在build.rs
中访问互联网。此外,一些下游crate无法从它们的dev-deps中移除自动下载功能。在这种情况下,你可以设置ELECTRSD_SKIP_DOWNLOAD
环境变量,并在PATH
中提供electrs可执行文件(或者跳过测试执行)。
传统方法的问题
我使用了基于外部bash脚本的集成测试,该脚本需要启动外部进程,这种方法存在许多问题,例如
- 外部脚本可能会干扰本地开发环境https://github.com/rust-bitcoin/rust-bitcoincore-rpc/blob/200fc8247c1896709a673b82a89ca0da5e7aa2ce/integration_test/run.sh#L9
- 使用单个大测试来测试所有内容https://github.com/rust-bitcoin/rust-bitcoincore-rpc/blob/200fc8247c1896709a673b82a89ca0da5e7aa2ce/integration_test/src/main.rs#L122-L203
- 如果测试是分开的,一个失败的测试可能无法留下干净的情况,导致其他测试失败(因为初始情况,而不是真正的失败)
- bash脚本很难,特别是支持不同的操作系统和版本
特性
- electrsd使用临时目录作为数据库目录
- 向操作系统请求一个空闲端口(仍然可能发生非常低概率的竞争条件)
- 不管测试如何结束,结构体出作用域时都会终止进程
- 自动下载具有启用功能的
electrs
可执行文件。由于没有官方的二进制文件,它们使用此项目下的手动工作流程构建。支持的版本有- electrs 0.9.11(功能=electrs_0_9_11)
- electrs 0.9.1(功能=electrs_0_9_1)
- electrs 0.8.10(功能=electrs_0_8_10)
- electrs esplora(功能=esplora_a33e97e1)
感谢这些特性,每个#[test]
都可以轻松独立运行,拥有自己的环境
弃用
- 从版本
0.26
开始,环境变量ELECTRS_EXE
被弃用,改为使用ELECTRS_EXEC
。
使用
依赖项
~12–21MB
~284K SLoC