From 05d595ad5f207c630b4f8931f212588ca8b35e33 Mon Sep 17 00:00:00 2001 From: Oscar Pepper Date: Wed, 13 Nov 2024 07:26:34 +0000 Subject: [PATCH 1/2] updated zcash local net to run subtree roots testnet tests --- .gitignore | 4 +- Cargo.lock | 289 ++++++++++++++++-- README.md | 8 +- integration-tests/Cargo.toml | 2 +- .../.gitignore | 2 + .../.gitignore | 2 + integration-tests/tests/client_rpcs.rs | 23 +- 7 files changed, 298 insertions(+), 32 deletions(-) create mode 100644 integration-tests/chain_cache/testnet_get_subtree_roots_orchard/.gitignore create mode 100644 integration-tests/chain_cache/testnet_get_subtree_roots_sapling/.gitignore diff --git a/.gitignore b/.gitignore index 81d4460..c7dbdc2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /target /db /test_binaries/bins/* -/integration-tests/chain_cache/ +/integration-tests/chain_cache/* +!/integration-tests/chain_cache/testnet_get_subtree_roots_sapling +!/integration-tests/chain_cache/testnet_get_subtree_roots_orchard diff --git a/Cargo.lock b/Cargo.lock index b3c6e51..f1967c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4638,6 +4638,22 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-batch-control" +version = "0.2.41-beta.18" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "futures", + "futures-core", + "pin-project", + "rayon", + "tokio", + "tokio-util 0.7.12", + "tower 0.4.13", + "tracing", + "tracing-futures", +] + [[package]] name = "tower-batch-control" version = "0.2.41-beta.18" @@ -4654,6 +4670,17 @@ dependencies = [ "tracing-futures", ] +[[package]] +name = "tower-fallback" +version = "0.2.41-beta.18" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "futures-core", + "pin-project", + "tower 0.4.13", + "tracing", +] + [[package]] name = "tower-fallback" version = "0.2.41-beta.18" @@ -5472,8 +5499,8 @@ dependencies = [ "url", "zaino-proto", "zcash_protocol 0.2.0", - "zebra-chain", - "zebra-rpc", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-rpc 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", ] [[package]] @@ -5505,8 +5532,8 @@ dependencies = [ "zaino-fetch", "zaino-proto", "zcash_client_backend", - "zebra-chain", - "zebra-rpc", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-rpc 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", "zingo-netutils 0.1.0 (git+https://github.com/zingolabs/zingolib.git?tag=zaino_dep_002_091024_95e5b0d8f9d5ee0485c6141533da2f727aeafae2)", ] @@ -5678,12 +5705,14 @@ dependencies = [ [[package]] name = "zcash_local_net" version = "0.1.0" -source = "git+https://github.com/Oscar-Pepper/zcash-local-net.git?branch=update_mempool_tests#291d2d95a4c498f3e4f01dceb98a3eb3334d44e6" +source = "git+https://github.com/Oscar-Pepper/zcash-local-net.git?branch=testnet_framework#ebaf8684f9a9eadfaf0632b99a530aecf00e3031" dependencies = [ "getset", + "hex", "http 1.1.0", "json", "portpicker", + "serde_json", "tempfile", "thiserror", "tokio", @@ -5693,6 +5722,9 @@ dependencies = [ "zcash_client_backend", "zcash_primitives 0.16.0", "zcash_protocol 0.2.0", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-node-services 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-rpc 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", "zingo-netutils 0.1.0 (git+https://github.com/Oscar-Pepper/zingolib.git?branch=zaino_dep_002_091024_95e5b0d8f9d5ee0485c6141533da2f727aeafae2_with_output_ordering)", "zingolib 0.2.0 (git+https://github.com/Oscar-Pepper/zingolib.git?branch=zaino_dep_002_091024_95e5b0d8f9d5ee0485c6141533da2f727aeafae2_with_output_ordering)", ] @@ -5870,6 +5902,62 @@ dependencies = [ "blake2b_simd", ] +[[package]] +name = "zebra-chain" +version = "1.0.0-beta.42" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "bitflags 2.6.0", + "bitflags-serde-legacy", + "bitvec", + "blake2b_simd", + "blake2s_simd", + "bridgetree", + "bs58", + "byteorder", + "chrono", + "dirs", + "ed25519-zebra", + "equihash 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures", + "group", + "halo2_proofs", + "hex", + "humantime", + "incrementalmerkletree 0.7.0", + "itertools 0.13.0", + "jubjub", + "lazy_static", + "num-integer", + "orchard 0.10.0", + "primitive-types", + "rand_core 0.6.4", + "rayon", + "reddsa", + "redjubjub", + "ripemd", + "sapling-crypto 0.3.0", + "secp256k1", + "serde", + "serde-big-array", + "serde_json", + "serde_with", + "sha2 0.10.8", + "static_assertions", + "tempfile", + "thiserror", + "tokio", + "tracing", + "uint 0.10.0", + "x25519-dalek", + "zcash_address 0.6.0", + "zcash_encoding 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "zcash_history", + "zcash_note_encryption", + "zcash_primitives 0.19.0", + "zcash_protocol 0.4.0", +] + [[package]] name = "zebra-chain" version = "1.0.0-beta.42" @@ -5926,6 +6014,42 @@ dependencies = [ "zcash_protocol 0.4.0", ] +[[package]] +name = "zebra-consensus" +version = "1.0.0-beta.42" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "bellman", + "blake2b_simd", + "bls12_381", + "chrono", + "futures", + "futures-util", + "halo2_proofs", + "jubjub", + "lazy_static", + "metrics", + "once_cell", + "orchard 0.10.0", + "rand 0.8.5", + "rayon", + "sapling-crypto 0.3.0", + "serde", + "thiserror", + "tokio", + "tower 0.4.13", + "tower-batch-control 0.2.41-beta.18 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "tower-fallback 0.2.41-beta.18 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "tracing", + "tracing-futures", + "wagyu-zcash-parameters", + "zcash_proofs 0.19.0", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-node-services 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-script 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-state 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", +] + [[package]] name = "zebra-consensus" version = "1.0.0-beta.42" @@ -5950,16 +6074,52 @@ dependencies = [ "thiserror", "tokio", "tower 0.4.13", - "tower-batch-control", - "tower-fallback", + "tower-batch-control 0.2.41-beta.18 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "tower-fallback 0.2.41-beta.18 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", "tracing", "tracing-futures", "wagyu-zcash-parameters", "zcash_proofs 0.19.0", - "zebra-chain", - "zebra-node-services", - "zebra-script", - "zebra-state", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-node-services 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-script 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-state 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", +] + +[[package]] +name = "zebra-network" +version = "1.0.0-beta.42" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "bitflags 2.6.0", + "byteorder", + "bytes 1.8.0", + "chrono", + "dirs", + "futures", + "hex", + "humantime-serde", + "indexmap 2.6.0", + "itertools 0.13.0", + "lazy_static", + "metrics", + "num-integer", + "ordered-map", + "pin-project", + "rand 0.8.5", + "rayon", + "regex", + "serde", + "tempfile", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util 0.7.12", + "tower 0.4.13", + "tracing", + "tracing-error", + "tracing-futures", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", ] [[package]] @@ -5995,7 +6155,21 @@ dependencies = [ "tracing", "tracing-error", "tracing-futures", - "zebra-chain", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", +] + +[[package]] +name = "zebra-node-services" +version = "1.0.0-beta.42" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "color-eyre", + "jsonrpc-core", + "reqwest 0.11.27", + "serde", + "serde_json", + "tokio", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", ] [[package]] @@ -6009,7 +6183,38 @@ dependencies = [ "serde", "serde_json", "tokio", - "zebra-chain", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", +] + +[[package]] +name = "zebra-rpc" +version = "1.0.0-beta.42" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "base64 0.22.1", + "chrono", + "color-eyre", + "futures", + "hex", + "indexmap 2.6.0", + "jsonrpc-core", + "jsonrpc-derive", + "jsonrpc-http-server", + "nix", + "rand 0.8.5", + "serde", + "serde_json", + "tokio", + "tower 0.4.13", + "tracing", + "zcash_address 0.6.0", + "zcash_primitives 0.19.0", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-consensus 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-network 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-node-services 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-script 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", + "zebra-state 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", ] [[package]] @@ -6034,12 +6239,22 @@ dependencies = [ "tower 0.4.13", "tracing", "zcash_primitives 0.19.0", - "zebra-chain", - "zebra-consensus", - "zebra-network", - "zebra-node-services", - "zebra-script", - "zebra-state", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-consensus 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-network 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-node-services 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-script 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", + "zebra-state 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", +] + +[[package]] +name = "zebra-script" +version = "1.0.0-beta.42" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "thiserror", + "zcash_script", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", ] [[package]] @@ -6049,7 +6264,39 @@ source = "git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4 dependencies = [ "thiserror", "zcash_script", - "zebra-chain", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", +] + +[[package]] +name = "zebra-state" +version = "1.0.0-beta.42" +source = "git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1#fef500a72840d4b7c89d68e14980eeda43869873" +dependencies = [ + "bincode", + "chrono", + "dirs", + "futures", + "hex", + "hex-literal", + "human_bytes", + "humantime-serde", + "indexmap 2.6.0", + "itertools 0.13.0", + "lazy_static", + "metrics", + "mset", + "rayon", + "regex", + "rlimit", + "rocksdb", + "semver", + "serde", + "tempfile", + "thiserror", + "tokio", + "tower 0.4.13", + "tracing", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?tag=v2.0.1)", ] [[package]] @@ -6081,7 +6328,7 @@ dependencies = [ "tokio", "tower 0.4.13", "tracing", - "zebra-chain", + "zebra-chain 1.0.0-beta.42 (git+https://github.com/ZcashFoundation/zebra.git?rev=4eb285de50848f1a4dcebd0fbe353e4f150fd371)", ] [[package]] diff --git a/README.md b/README.md index 263cec1..56f49e6 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Holds tonic generated code for the lightwallet service RPCs and compact formats. # Testing - To run tests: -1) Simlink or copy compiled `zcashd`, `zcash-cli` and `lightwalletd` binaries to `$ zaino/test_binaries/bins/*` +1) Simlink or copy compiled `zcashd`, `zcash-cli`, `zebrad` and `lightwalletd` binaries to `$ zaino/test_binaries/bins/*` 2) Run `$ cargo nextest run` or `$ cargo test` - To run client rpc tests: @@ -63,6 +63,12 @@ Holds tonic generated code for the lightwallet service RPCs and compact formats. 3) Generate the chain cache `cargo nextest run generate_zcashd_chain_cach --run-ignored ignored-only --features test_fixtures` 4) Run `cargo nextest run --test client_rpcs` +- To Run client rpc testnet tests i.e. `get_subtree_roots_sapling`: +1) sync Zebrad testnet to at least 2 sapling and 2 orchard shards +2) copy the Zebrad cache to `zaino/integration-tests/chain_cache/testnet_get_subtree_roots_sapling` directory. +3) copy the Zebrad cache to `zaino/integration-tests/chain_cache/testnet_get_subtree_roots_orchard` directory. +See the `get_subtree_roots_sapling` test fixture doc comments in zcash_local_net for more details. + # Running ZainoD - To run zingo-cli through Zaino, connecting to zebrad locally: [in seperate terminals] 1) Run `$ zebrad --config #PATH_TO_ZINGO_PROXY/zebrad.toml start` diff --git a/integration-tests/Cargo.toml b/integration-tests/Cargo.toml index 52133ba..a9813bc 100644 --- a/integration-tests/Cargo.toml +++ b/integration-tests/Cargo.toml @@ -20,7 +20,7 @@ test_fixtures = [] zaino-testutils = { path = "../zaino-testutils" } # Test fixtures -zcash_local_net = { git = "https://github.com/Oscar-Pepper/zcash-local-net.git", branch = "update_mempool_tests", features = [ "test_fixtures" ] } +zcash_local_net = { git = "https://github.com/Oscar-Pepper/zcash-local-net.git", branch = "testnet_framework", features = [ "test_fixtures" ] } # zcash_local_net = { git = "https://github.com/zingolabs/zcash-local-net.git", branch = "dev", features = [ "test_fixtures" ] } # Lightclient diff --git a/integration-tests/chain_cache/testnet_get_subtree_roots_orchard/.gitignore b/integration-tests/chain_cache/testnet_get_subtree_roots_orchard/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/integration-tests/chain_cache/testnet_get_subtree_roots_orchard/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/integration-tests/chain_cache/testnet_get_subtree_roots_sapling/.gitignore b/integration-tests/chain_cache/testnet_get_subtree_roots_sapling/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/integration-tests/chain_cache/testnet_get_subtree_roots_sapling/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/integration-tests/tests/client_rpcs.rs b/integration-tests/tests/client_rpcs.rs index be32c68..e6772b0 100644 --- a/integration-tests/tests/client_rpcs.rs +++ b/integration-tests/tests/client_rpcs.rs @@ -16,6 +16,11 @@ static ZCASH_CLI_BIN: Lazy> = Lazy::new(|| { workspace_root_path.pop(); Some(workspace_root_path.join("test_binaries/bins/zcash-cli")) }); +static ZEBRAD_BIN: Lazy> = Lazy::new(|| { + let mut workspace_root_path = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); + workspace_root_path.pop(); + Some(workspace_root_path.join("test_binaries/bins/zcashd")) +}); static LIGHTWALLETD_BIN: Lazy> = Lazy::new(|| { let mut workspace_root_path = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); workspace_root_path.pop(); @@ -366,30 +371,32 @@ async fn get_latest_tree_state() { .await; } -// this is not a satisfactory test for this rpc and will return empty vecs. -// this rpc should also be tested in testnet/mainnet or a local chain with at least 2 shards should be cached. +/// This test requires Zebrad testnet to be already synced to at least 2 sapling shards with the cache at +/// `zaino/chain_cache/testnet_get_subtree_roots` +/// +/// See doc comments of test_fixture for more details. #[tokio::test] async fn get_subtree_roots_sapling() { tracing_subscriber::fmt().init(); zcash_local_net::test_fixtures::get_subtree_roots_sapling( - ZCASHD_BIN.clone(), - ZCASH_CLI_BIN.clone(), + ZEBRAD_BIN.clone(), ZAINOD_BIN.clone(), LIGHTWALLETD_BIN.clone(), ) .await; } -// this is not a satisfactory test for this rpc and will return empty vecs. -// this rpc should also be tested in testnet/mainnet or a local chain with at least 2 shards should be cached. +/// This test requires Zebrad testnet to be already synced to at least 2 orchard shards with the cache at +/// `zaino/chain_cache/testnet_get_subtree_roots` +/// +/// See doc comments of test_fixture for more details. #[tokio::test] async fn get_subtree_roots_orchard() { tracing_subscriber::fmt().init(); zcash_local_net::test_fixtures::get_subtree_roots_orchard( - ZCASHD_BIN.clone(), - ZCASH_CLI_BIN.clone(), + ZEBRAD_BIN.clone(), ZAINOD_BIN.clone(), LIGHTWALLETD_BIN.clone(), ) From ff7cec1dcc6554dae67baeed104ec232844bf02f Mon Sep 17 00:00:00 2001 From: Oscar Pepper Date: Wed, 13 Nov 2024 08:01:39 +0000 Subject: [PATCH 2/2] fix binary path for zebrad --- Cargo.lock | 2 +- integration-tests/tests/client_rpcs.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f1967c3..ad8d5e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5705,7 +5705,7 @@ dependencies = [ [[package]] name = "zcash_local_net" version = "0.1.0" -source = "git+https://github.com/Oscar-Pepper/zcash-local-net.git?branch=testnet_framework#ebaf8684f9a9eadfaf0632b99a530aecf00e3031" +source = "git+https://github.com/Oscar-Pepper/zcash-local-net.git?branch=testnet_framework#e25bed3e5d69f91efa0de365c9d64a828a4158ac" dependencies = [ "getset", "hex", diff --git a/integration-tests/tests/client_rpcs.rs b/integration-tests/tests/client_rpcs.rs index e6772b0..e2526cc 100644 --- a/integration-tests/tests/client_rpcs.rs +++ b/integration-tests/tests/client_rpcs.rs @@ -19,7 +19,7 @@ static ZCASH_CLI_BIN: Lazy> = Lazy::new(|| { static ZEBRAD_BIN: Lazy> = Lazy::new(|| { let mut workspace_root_path = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); workspace_root_path.pop(); - Some(workspace_root_path.join("test_binaries/bins/zcashd")) + Some(workspace_root_path.join("test_binaries/bins/zebrad")) }); static LIGHTWALLETD_BIN: Lazy> = Lazy::new(|| { let mut workspace_root_path = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());