From c7ddb732b391d1b8e372a5f06435353590e727ed Mon Sep 17 00:00:00 2001 From: zancas Date: Fri, 24 Apr 2026 12:41:04 -0700 Subject: [PATCH 1/7] subset of quick and currently passing --- integration-tests/.config/nextest.toml | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/integration-tests/.config/nextest.toml b/integration-tests/.config/nextest.toml index 36db2195c..6926d2d4d 100644 --- a/integration-tests/.config/nextest.toml +++ b/integration-tests/.config/nextest.toml @@ -135,3 +135,73 @@ default-filter = """ [profile.quick.junit] path = "junit.xml" + +[profile.stable] +test-threads = "num-cpus" +fail-fast = false +slow-timeout = { period = "60s", terminate-after = "10" } +default-filter = """ + test(/^chain_query_interface::get_block_range_zebrad$/) | + test(/^chain_query_interface::get_mempool_stream_fresh_snapshot_repeated_zebrad$/) | + test(/^chain_query_interface::get_subtree_roots_zebrad$/) | + test(/^chain_query_interface::zallet_like_steady_state_loop_zebrad$/) | + test(/^pre_v4_txs_parsing$/) | + test(/^zcashd::connect_to_node_get_info$/) | + test(/^zcashd::get::block_deltas$/) | + test(/^zcashd::get::block_header$/) | + test(/^zcashd::get::block_object$/) | + test(/^zcashd::get::block_raw$/) | + test(/^zcashd::get::difficulty$/) | + test(/^zcashd::get::get_network_sol_ps$/) | + test(/^zcashd::get::latest_block$/) | + test(/^zcashd::get::lightd_info$/) | + test(/^zcashd::get::mining_info$/) | + test(/^zcashd::get::peer_info$/) | + test(/^zcashd::get::subtree_roots$/) | + test(/^zcashd::launch::regtest_no_cache$/) | + test(/^zcashd::validation::validate_address$/) | + test(/^zcashd::validation::z_validate_address$/) | + test(/^zcashd::zcash_indexer::get_best_blockhash$/) | + test(/^zcashd::zcash_indexer::get_block_count$/) | + test(/^zcashd::zcash_indexer::get_block_deltas$/) | + test(/^zcashd::zcash_indexer::get_block_header$/) | + test(/^zcashd::zcash_indexer::get_peer_info$/) | + test(/^zcashd::zcash_indexer::validate_address$/) | + test(/^zcashd::zcash_indexer::z_get_block$/) | + test(/^zcashd::zcash_indexer::z_validate_address$/) | + test(/^zebra::check_info::regtest_no_cache$/) | + test(/^zebra::check_info::state_service_chaintip_update_subscriber$/) | + test(/^zebra::get::best_blockhash$/) | + test(/^zebra::get::block_count$/) | + test(/^zebra::get::block_object_regtest$/) | + test(/^zebra::get::block_raw_regtest$/) | + test(/^zebra::get::difficulty$/) | + test(/^zebra::get::get_network_sol_ps$/) | + test(/^zebra::get::mining_info$/) | + test(/^zebra::get::peer_info$/) | + test(/^zebra::get::z::z_validate_address$/) | + test(/^zebra::lightwallet_indexer::get_block_header$/) | + test(/^zebra::lightwallet_indexer::get_latest_block$/) | + test(/^zebra::lightwallet_indexer::get_subtree_roots$/) | + test(/^zebra::lightwallet_indexer::get_taddress_balance$/) | + test(/^zebra::lightwallet_indexer::get_taddress_txids$/) | + test(/^zebrad::fetch_service::connect_to_node_get_info$/) | + test(/^zebrad::get::best_blockhash$/) | + test(/^zebrad::get::block_count$/) | + test(/^zebrad::get::block_header$/) | + test(/^zebrad::get::block_object$/) | + test(/^zebrad::get::block_range_nullifiers$/) | + test(/^zebrad::get::block_subsidy$/) | + test(/^zebrad::get::difficulty$/) | + test(/^zebrad::get::get_network_sol_ps$/) | + test(/^zebrad::get::latest_block$/) | + test(/^zebrad::get::lightd_info$/) | + test(/^zebrad::get::subtree_roots$/) | + test(/^zebrad::launch::regtest_no_cache$/) | + test(/^zebrad::state_service::connect_to_node_get_info$/) | + test(/^zebrad::validation::validate_address$/) | + test(/^zebrad::validation::z_validate_address$/) +""" + +[profile.stable.junit] +path = "junit.xml" From f63f3826ebc8fc519ebc558183b545bbdfc90bb0 Mon Sep 17 00:00:00 2001 From: zancas Date: Fri, 24 Apr 2026 12:47:15 -0700 Subject: [PATCH 2/7] more stable and quick --- integration-tests/.config/nextest.toml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/integration-tests/.config/nextest.toml b/integration-tests/.config/nextest.toml index 6926d2d4d..9480dcbac 100644 --- a/integration-tests/.config/nextest.toml +++ b/integration-tests/.config/nextest.toml @@ -141,7 +141,6 @@ test-threads = "num-cpus" fail-fast = false slow-timeout = { period = "60s", terminate-after = "10" } default-filter = """ - test(/^chain_query_interface::get_block_range_zebrad$/) | test(/^chain_query_interface::get_mempool_stream_fresh_snapshot_repeated_zebrad$/) | test(/^chain_query_interface::get_subtree_roots_zebrad$/) | test(/^chain_query_interface::zallet_like_steady_state_loop_zebrad$/) | @@ -158,9 +157,7 @@ default-filter = """ test(/^zcashd::get::mining_info$/) | test(/^zcashd::get::peer_info$/) | test(/^zcashd::get::subtree_roots$/) | - test(/^zcashd::launch::regtest_no_cache$/) | test(/^zcashd::validation::validate_address$/) | - test(/^zcashd::validation::z_validate_address$/) | test(/^zcashd::zcash_indexer::get_best_blockhash$/) | test(/^zcashd::zcash_indexer::get_block_count$/) | test(/^zcashd::zcash_indexer::get_block_deltas$/) | @@ -188,14 +185,11 @@ default-filter = """ test(/^zebrad::fetch_service::connect_to_node_get_info$/) | test(/^zebrad::get::best_blockhash$/) | test(/^zebrad::get::block_count$/) | - test(/^zebrad::get::block_header$/) | test(/^zebrad::get::block_object$/) | test(/^zebrad::get::block_range_nullifiers$/) | - test(/^zebrad::get::block_subsidy$/) | test(/^zebrad::get::difficulty$/) | test(/^zebrad::get::get_network_sol_ps$/) | test(/^zebrad::get::latest_block$/) | - test(/^zebrad::get::lightd_info$/) | test(/^zebrad::get::subtree_roots$/) | test(/^zebrad::launch::regtest_no_cache$/) | test(/^zebrad::state_service::connect_to_node_get_info$/) | From 7dfbfd81d4cf88214595f548a20448a59426fca8 Mon Sep 17 00:00:00 2001 From: zancas Date: Fri, 24 Apr 2026 12:48:28 -0700 Subject: [PATCH 3/7] more stable and quick --- integration-tests/.config/nextest.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/integration-tests/.config/nextest.toml b/integration-tests/.config/nextest.toml index 9480dcbac..836504de5 100644 --- a/integration-tests/.config/nextest.toml +++ b/integration-tests/.config/nextest.toml @@ -147,7 +147,6 @@ default-filter = """ test(/^pre_v4_txs_parsing$/) | test(/^zcashd::connect_to_node_get_info$/) | test(/^zcashd::get::block_deltas$/) | - test(/^zcashd::get::block_header$/) | test(/^zcashd::get::block_object$/) | test(/^zcashd::get::block_raw$/) | test(/^zcashd::get::difficulty$/) | From 676ab3eae4a93dcebec823a6b0c75292e5d0af37 Mon Sep 17 00:00:00 2001 From: zancas Date: Fri, 24 Apr 2026 12:51:27 -0700 Subject: [PATCH 4/7] more stable and quick --- integration-tests/.config/nextest.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/integration-tests/.config/nextest.toml b/integration-tests/.config/nextest.toml index 836504de5..966b17c00 100644 --- a/integration-tests/.config/nextest.toml +++ b/integration-tests/.config/nextest.toml @@ -160,7 +160,6 @@ default-filter = """ test(/^zcashd::zcash_indexer::get_best_blockhash$/) | test(/^zcashd::zcash_indexer::get_block_count$/) | test(/^zcashd::zcash_indexer::get_block_deltas$/) | - test(/^zcashd::zcash_indexer::get_block_header$/) | test(/^zcashd::zcash_indexer::get_peer_info$/) | test(/^zcashd::zcash_indexer::validate_address$/) | test(/^zcashd::zcash_indexer::z_get_block$/) | @@ -180,7 +179,6 @@ default-filter = """ test(/^zebra::lightwallet_indexer::get_latest_block$/) | test(/^zebra::lightwallet_indexer::get_subtree_roots$/) | test(/^zebra::lightwallet_indexer::get_taddress_balance$/) | - test(/^zebra::lightwallet_indexer::get_taddress_txids$/) | test(/^zebrad::fetch_service::connect_to_node_get_info$/) | test(/^zebrad::get::best_blockhash$/) | test(/^zebrad::get::block_count$/) | From b18ddd2d26320e9e00829c8945e093940aba6af1 Mon Sep 17 00:00:00 2001 From: zancas Date: Fri, 24 Apr 2026 12:52:54 -0700 Subject: [PATCH 5/7] fast and stable --- integration-tests/.config/nextest.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/integration-tests/.config/nextest.toml b/integration-tests/.config/nextest.toml index 966b17c00..15c662ae0 100644 --- a/integration-tests/.config/nextest.toml +++ b/integration-tests/.config/nextest.toml @@ -163,7 +163,6 @@ default-filter = """ test(/^zcashd::zcash_indexer::get_peer_info$/) | test(/^zcashd::zcash_indexer::validate_address$/) | test(/^zcashd::zcash_indexer::z_get_block$/) | - test(/^zcashd::zcash_indexer::z_validate_address$/) | test(/^zebra::check_info::regtest_no_cache$/) | test(/^zebra::check_info::state_service_chaintip_update_subscriber$/) | test(/^zebra::get::best_blockhash$/) | From 319577824377f6db4150ec5d05d0ce2a58a7b3ea Mon Sep 17 00:00:00 2001 From: zancas Date: Fri, 24 Apr 2026 12:54:07 -0700 Subject: [PATCH 6/7] fast and stable --- failing_tests.txt | 94 ++++++++++++++++++++++++++ integration-tests/.config/nextest.toml | 1 - integration-tests/quick_test.txt | 94 ++++++++++++++++++++++++++ stable_tests.txt | 60 ++++++++++++++++ tools/scripts/get-rust-version.sh | 36 ++++++++++ tools/scripts/quick-minus-failing.py | 68 +++++++++++++++++++ 6 files changed, 352 insertions(+), 1 deletion(-) create mode 100644 failing_tests.txt create mode 100644 integration-tests/quick_test.txt create mode 100644 stable_tests.txt create mode 100755 tools/scripts/get-rust-version.sh create mode 100644 tools/scripts/quick-minus-failing.py diff --git a/failing_tests.txt b/failing_tests.txt new file mode 100644 index 000000000..532aa3f00 --- /dev/null +++ b/failing_tests.txt @@ -0,0 +1,94 @@ + FAIL [ 20.532s] ( 1/166) integration-tests::fetch_service zcashd::get::block + FAIL [ 21.502s] ( 2/166) integration-tests::fetch_service zcashd::get::block_nullifiers + FAIL [ 21.535s] ( 4/166) integration-tests::fetch_service zcashd::get::address_utxos + FAIL [ 22.501s] ( 5/166) integration-tests::fetch_service zcashd::get::address_tx_ids + FAIL [ 22.543s] ( 6/166) integration-tests::fetch_service zcashd::get::block_range_no_pool_type_returns_sapling_orchard + FAIL [ 22.550s] ( 8/166) integration-tests::fetch_service zcashd::get::address_balance + FAIL [ 26.918s] ( 14/166) integration-tests::fetch_service zcashd::get::latest_tree_state + FAIL [ 29.019s] ( 18/166) integration-tests::fetch_service zcashd::get::block_range_returns_all_pools_when_requested + FAIL [ 35.499s] ( 20/166) integration-tests::fetch_service zcashd::get::mempool_info + FAIL [ 37.429s] ( 22/166) integration-tests::fetch_service zcashd::get::mempool_stream + FAIL [ 37.489s] ( 24/166) integration-tests::fetch_service zcashd::get::mempool_tx + FAIL [ 27.286s] ( 27/166) integration-tests::fetch_service zcashd::get::taddress_balance + FAIL [ 32.006s] ( 29/166) integration-tests::fetch_service zcashd::get::raw_transaction + FAIL [ 29.030s] ( 30/166) integration-tests::fetch_service zcashd::get::taddress_utxos + FAIL [ 39.046s] ( 31/166) integration-tests::fetch_service zcashd::get::raw_mempool + FAIL [ 30.218s] ( 32/166) integration-tests::fetch_service zcashd::get::taddress_txids + FAIL [ 31.932s] ( 33/166) integration-tests::fetch_service zcashd::get::taddress_utxos_stream + FAIL [ 27.983s] ( 34/166) integration-tests::fetch_service zcashd::get::transaction_mempool + FAIL [ 26.129s] ( 35/166) integration-tests::fetch_service zcashd::get::tree_state + FAIL [ 29.996s] ( 36/166) integration-tests::fetch_service zcashd::get::transaction_mined + FAIL [ 22.926s] ( 37/166) integration-tests::fetch_service zcashd::get::z::get_treestate + FAIL [ 24.883s] ( 40/166) integration-tests::fetch_service zcashd::get::z::subtrees_by_index + FAIL [ 14.346s] ( 41/166) integration-tests::fetch_service zebrad::get::address_utxos + FAIL [ 11.482s] ( 45/166) integration-tests::fetch_service zebrad::get::block + FAIL [ 16.889s] ( 46/166) integration-tests::fetch_service zebrad::get::address_balance + FAIL [ 16.607s] ( 47/166) integration-tests::fetch_service zebrad::get::address_tx_ids + FAIL [ 11.408s] ( 52/166) integration-tests::fetch_service zebrad::get::block_nullifiers + FAIL [ 11.933s] ( 54/166) integration-tests::fetch_service zebrad::get::block_range_no_pool_type_returns_sapling_orchard + FAIL [ 14.537s] ( 58/166) integration-tests::fetch_service zebrad::get::block_range_returns_all_pools_when_requested + FAIL [ 12.112s] ( 61/166) integration-tests::fetch_service zebrad::get::mempool_info + FAIL [ 11.967s] ( 62/166) integration-tests::fetch_service zebrad::get::mempool_stream + FAIL [ 12.072s] ( 63/166) integration-tests::fetch_service zebrad::get::mempool_tx + FAIL [ 15.906s] ( 65/166) integration-tests::fetch_service zebrad::get::latest_tree_state + FAIL [ 11.762s] ( 67/166) integration-tests::fetch_service zebrad::get::raw_transaction + FAIL [ 11.790s] ( 71/166) integration-tests::fetch_service zebrad::get::taddress_balance + FAIL [ 11.768s] ( 72/166) integration-tests::fetch_service zebrad::get::taddress_txids + FAIL [ 11.675s] ( 73/166) integration-tests::fetch_service zebrad::get::taddress_utxos + FAIL [ 16.787s] ( 74/166) integration-tests::fetch_service zebrad::get::raw_mempool + FAIL [ 13.277s] ( 75/166) integration-tests::fetch_service zebrad::get::tree_state + FAIL [ 14.880s] ( 76/166) integration-tests::fetch_service zebrad::get::transaction_mined + FAIL [ 15.505s] ( 77/166) integration-tests::fetch_service zebrad::get::transaction_mempool + FAIL [ 16.685s] ( 78/166) integration-tests::fetch_service zebrad::get::taddress_utxos_stream + FAIL [ 7.689s] ( 79/166) integration-tests::json_server zcashd::zcash_indexer::check_info_with_cookie + FAIL [ 16.671s] ( 80/166) integration-tests::fetch_service zebrad::get::z::subtrees_by_index + FAIL [ 16.670s] ( 81/166) integration-tests::fetch_service zebrad::get::z::treestate + FAIL [ 25.593s] ( 88/166) integration-tests::json_server zcashd::zcash_indexer::get_address_tx_ids + FAIL [ 28.518s] ( 89/166) integration-tests::json_server zcashd::zcash_indexer::get_raw_transaction + FAIL [ 34.417s] ( 92/166) integration-tests::json_server zcashd::zcash_indexer::get_mempool_info + FAIL [ 26.968s] ( 93/166) integration-tests::json_server zcashd::zcash_indexer::z_get_address_balance + FAIL [ 36.820s] ( 95/166) integration-tests::json_server zcashd::zcash_indexer::get_raw_mempool + FAIL [ 25.066s] ( 96/166) integration-tests::json_server zcashd::zcash_indexer::z_get_address_utxos + FAIL [ 27.919s] ( 97/166) integration-tests::json_server zcashd::zcash_indexer::z_get_treestate + FAIL [ 28.939s] (100/166) integration-tests::json_server zcashd::zcash_indexer::z_get_subtrees_by_index + FAIL [ 15.282s] (101/166) integration-tests::state_service zebra::get::address_balance_regtest + FAIL [ 15.070s] (102/166) integration-tests::state_service zebra::get::address_deltas + FAIL [ 14.766s] (104/166) integration-tests::state_service zebra::get::address_tx_ids_regtest + FAIL [ 19.195s] (107/166) integration-tests::state_service zebra::get::address_utxos + FAIL [ 14.852s] (114/166) integration-tests::state_service zebra::get::get_mempool_info + FAIL [ 18.527s] (120/166) integration-tests::state_service zebra::get::raw_mempool_regtest + FAIL [ 14.326s] (121/166) integration-tests::state_service zebra::get::z::get_block_range_default_request_returns_all_pools_regtest + FAIL [ 18.471s] (122/166) integration-tests::state_service zebra::get::raw_transaction_regtest + FAIL [ 18.959s] (123/166) integration-tests::state_service zebra::get::taddress_transactions_regtest + FAIL [ 15.219s] (124/166) integration-tests::state_service zebra::get::z::get_block_range_out_of_range_test_lower_bound_regtest + FAIL [ 15.546s] (125/166) integration-tests::state_service zebra::get::z::get_block_range_default_request_returns_no_t_data_regtest + FAIL [ 17.527s] (126/166) integration-tests::state_service zebra::get::z::subtrees_by_index_regtest + FAIL [ 18.329s] (127/166) integration-tests::state_service zebra::get::z::get_block_range_out_of_range_test_upper_bound_regtest + FAIL [ 14.796s] (128/166) integration-tests::state_service zebra::lightwallet_indexer::get_block + FAIL [ 18.968s] (131/166) integration-tests::state_service zebra::get::z::treestate_regtest + FAIL [ 16.712s] (132/166) integration-tests::state_service zebra::lightwallet_indexer::get_block_range_full + FAIL [ 21.323s] (133/166) integration-tests::state_service zebra::lightwallet_indexer::get_address_utxos + FAIL [ 21.353s] (135/166) integration-tests::state_service zebra::lightwallet_indexer::get_address_utxos_stream + FAIL [ 16.821s] (137/166) integration-tests::state_service zebra::lightwallet_indexer::get_block_range_nullifiers + FAIL [ 15.065s] (138/166) integration-tests::state_service zebra::lightwallet_indexer::get_latest_tree_state + FAIL [ 15.333s] (142/166) integration-tests::state_service zebra::lightwallet_indexer::get_tree_state + FAIL [ 14.114s] (143/166) integration-tests::wallet_to_validator zcashd::monitor_unverified_mempool + FAIL [ 16.573s] (144/166) integration-tests::state_service zebra::lightwallet_indexer::get_transparent_data_from_compact_block_when_requested + FAIL [ 12.346s] (145/166) integration-tests::wallet_to_validator zcashd::sent_to::orchard + FAIL [ 13.682s] (146/166) integration-tests::wallet_to_validator zcashd::sent_to::sapling + FAIL [ 13.516s] (147/166) integration-tests::wallet_to_validator zcashd::sent_to::transparent + FAIL [ 12.714s] (148/166) integration-tests::wallet_to_validator zcashd::shield + FAIL [ 17.526s] (149/166) integration-tests::wallet_to_validator zcashd::sent_to::all + FAIL [ 15.098s] (151/166) integration-tests::wallet_to_validator zebrad::fetch_service::monitor_unverified_mempool + FAIL [ 12.077s] (152/166) integration-tests::wallet_to_validator zebrad::fetch_service::send_to::orchard + FAIL [ 11.983s] (153/166) integration-tests::wallet_to_validator zebrad::fetch_service::send_to::sapling + FAIL [ 17.338s] (154/166) integration-tests::wallet_to_validator zebrad::fetch_service::send_to::all + FAIL [ 13.316s] (155/166) integration-tests::wallet_to_validator zebrad::fetch_service::send_to::transparent + FAIL [ 13.029s] (156/166) integration-tests::wallet_to_validator zebrad::fetch_service::shield + FAIL [ 12.596s] (158/166) integration-tests::wallet_to_validator zebrad::state_service::send_to::transparent + FAIL [ 17.865s] (159/166) integration-tests::wallet_to_validator zebrad::state_service::monitor_unverified_mempool + FAIL [ 17.241s] (160/166) integration-tests::wallet_to_validator zebrad::state_service::send_to::orchard + FAIL [ 17.204s] (161/166) integration-tests::wallet_to_validator zebrad::state_service::send_to::sapling + FAIL [ 18.268s] (162/166) integration-tests::wallet_to_validator zebrad::state_service::send_to::all + FAIL [ 13.698s] (163/166) integration-tests::wallet_to_validator zebrad::state_service::shield + FAIL [ 65.182s] (166/166) integration-tests::state_service zebra::lightwallet_indexer::get_transaction diff --git a/integration-tests/.config/nextest.toml b/integration-tests/.config/nextest.toml index 15c662ae0..7eeebc5b9 100644 --- a/integration-tests/.config/nextest.toml +++ b/integration-tests/.config/nextest.toml @@ -160,7 +160,6 @@ default-filter = """ test(/^zcashd::zcash_indexer::get_best_blockhash$/) | test(/^zcashd::zcash_indexer::get_block_count$/) | test(/^zcashd::zcash_indexer::get_block_deltas$/) | - test(/^zcashd::zcash_indexer::get_peer_info$/) | test(/^zcashd::zcash_indexer::validate_address$/) | test(/^zcashd::zcash_indexer::z_get_block$/) | test(/^zebra::check_info::regtest_no_cache$/) | diff --git a/integration-tests/quick_test.txt b/integration-tests/quick_test.txt new file mode 100644 index 000000000..91351f15e --- /dev/null +++ b/integration-tests/quick_test.txt @@ -0,0 +1,94 @@ +chain_query_interface::get_block_range_zebrad +chain_query_interface::get_mempool_stream_fresh_snapshot_repeated_zebrad +chain_query_interface::get_subtree_roots_zebrad +chain_query_interface::zallet_like_steady_state_loop_zebrad +zcashd::get::address_balance +zcashd::get::address_tx_ids +zcashd::get::address_utxos +zcashd::get::block +zcashd::get::block_deltas +zcashd::get::block_header +zcashd::get::block_nullifiers +zcashd::get::block_object +zcashd::get::block_range_no_pool_type_returns_sapling_orchard +zcashd::get::block_range_returns_all_pools_when_requested +zcashd::get::block_raw +zcashd::get::difficulty +zcashd::get::get_network_sol_ps +zcashd::get::latest_block +zcashd::get::latest_tree_state +zcashd::get::lightd_info +zcashd::get::mining_info +zcashd::get::peer_info +zcashd::get::subtree_roots +zcashd::launch::regtest_no_cache +zcashd::validation::validate_address +zcashd::validation::z_validate_address +zebrad::get::best_blockhash +zebrad::get::block_count +zebrad::get::block_header +zebrad::get::block_nullifiers +zebrad::get::block_object +zebrad::get::block_range_no_pool_type_returns_sapling_orchard +zebrad::get::block_range_nullifiers +zebrad::get::block_range_returns_all_pools_when_requested +zebrad::get::block_subsidy +zebrad::get::difficulty +zebrad::get::get_network_sol_ps +zebrad::get::latest_block +zebrad::get::latest_tree_state +zebrad::get::lightd_info +zebrad::get::subtree_roots +zebrad::get::tree_state +zebrad::launch::regtest_no_cache +zebrad::validation::validate_address +zebrad::validation::z_validate_address +zcashd::zcash_indexer::check_info_with_cookie +zcashd::zcash_indexer::get_address_tx_ids +zcashd::zcash_indexer::get_best_blockhash +zcashd::zcash_indexer::get_block_count +zcashd::zcash_indexer::get_block_deltas +zcashd::zcash_indexer::get_block_header +zcashd::zcash_indexer::get_peer_info +zcashd::zcash_indexer::validate_address +zcashd::zcash_indexer::z_get_address_balance +zcashd::zcash_indexer::z_get_address_utxos +zcashd::zcash_indexer::z_get_block +zcashd::zcash_indexer::z_validate_address +zebra::check_info::regtest_no_cache +zebra::check_info::state_service_chaintip_update_subscriber +zebra::get::address_tx_ids_regtest +zebra::get::address_utxos +zebra::get::best_blockhash +zebra::get::block_count +zebra::get::block_object_regtest +zebra::get::block_raw_regtest +zebra::get::difficulty +zebra::get::get_network_sol_ps +zebra::get::mining_info +zebra::get::peer_info +zebra::get::taddress_transactions_regtest +zebra::get::z::get_block_range_default_request_returns_all_pools_regtest +zebra::get::z::get_block_range_default_request_returns_no_t_data_regtest +zebra::get::z::get_block_range_out_of_range_test_lower_bound_regtest +zebra::get::z::get_block_range_out_of_range_test_upper_bound_regtest +zebra::get::z::treestate_regtest +zebra::get::z::z_validate_address +zebra::lightwallet_indexer::get_address_utxos +zebra::lightwallet_indexer::get_address_utxos_stream +zebra::lightwallet_indexer::get_block +zebra::lightwallet_indexer::get_block_header +zebra::lightwallet_indexer::get_block_range_full +zebra::lightwallet_indexer::get_block_range_nullifiers +zebra::lightwallet_indexer::get_latest_block +zebra::lightwallet_indexer::get_latest_tree_state +zebra::lightwallet_indexer::get_subtree_roots +zebra::lightwallet_indexer::get_taddress_balance +zebra::lightwallet_indexer::get_taddress_txids +zebra::lightwallet_indexer::get_transaction +zebra::lightwallet_indexer::get_transparent_data_from_compact_block_when_requested +zebra::lightwallet_indexer::get_tree_state +pre_v4_txs_parsing +zcashd::connect_to_node_get_info +zebrad::fetch_service::connect_to_node_get_info +zebrad::state_service::connect_to_node_get_info diff --git a/stable_tests.txt b/stable_tests.txt new file mode 100644 index 000000000..fa5c9ae97 --- /dev/null +++ b/stable_tests.txt @@ -0,0 +1,60 @@ +chain_query_interface::get_block_range_zebrad +chain_query_interface::get_mempool_stream_fresh_snapshot_repeated_zebrad +chain_query_interface::get_subtree_roots_zebrad +chain_query_interface::zallet_like_steady_state_loop_zebrad +pre_v4_txs_parsing +zcashd::connect_to_node_get_info +zcashd::get::block_deltas +zcashd::get::block_header +zcashd::get::block_object +zcashd::get::block_raw +zcashd::get::difficulty +zcashd::get::get_network_sol_ps +zcashd::get::latest_block +zcashd::get::lightd_info +zcashd::get::mining_info +zcashd::get::peer_info +zcashd::get::subtree_roots +zcashd::launch::regtest_no_cache +zcashd::validation::validate_address +zcashd::validation::z_validate_address +zcashd::zcash_indexer::get_best_blockhash +zcashd::zcash_indexer::get_block_count +zcashd::zcash_indexer::get_block_deltas +zcashd::zcash_indexer::get_block_header +zcashd::zcash_indexer::get_peer_info +zcashd::zcash_indexer::validate_address +zcashd::zcash_indexer::z_get_block +zcashd::zcash_indexer::z_validate_address +zebra::check_info::regtest_no_cache +zebra::check_info::state_service_chaintip_update_subscriber +zebra::get::best_blockhash +zebra::get::block_count +zebra::get::block_object_regtest +zebra::get::block_raw_regtest +zebra::get::difficulty +zebra::get::get_network_sol_ps +zebra::get::mining_info +zebra::get::peer_info +zebra::get::z::z_validate_address +zebra::lightwallet_indexer::get_block_header +zebra::lightwallet_indexer::get_latest_block +zebra::lightwallet_indexer::get_subtree_roots +zebra::lightwallet_indexer::get_taddress_balance +zebra::lightwallet_indexer::get_taddress_txids +zebrad::fetch_service::connect_to_node_get_info +zebrad::get::best_blockhash +zebrad::get::block_count +zebrad::get::block_header +zebrad::get::block_object +zebrad::get::block_range_nullifiers +zebrad::get::block_subsidy +zebrad::get::difficulty +zebrad::get::get_network_sol_ps +zebrad::get::latest_block +zebrad::get::lightd_info +zebrad::get::subtree_roots +zebrad::launch::regtest_no_cache +zebrad::state_service::connect_to_node_get_info +zebrad::validation::validate_address +zebrad::validation::z_validate_address diff --git a/tools/scripts/get-rust-version.sh b/tools/scripts/get-rust-version.sh new file mode 100755 index 000000000..fe30ba0c8 --- /dev/null +++ b/tools/scripts/get-rust-version.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Emit the pinned rustc version read from rust-toolchain.toml. +# +# Single source of truth for RUST_VERSION used by the CI image build +# (Makefile.toml build-image, tools/scripts/get-ci-image-tag.sh, and the +# GitHub workflows). Exits non-zero if channel is anything other than a +# concrete numeric version (x.y or x.y.z) — "stable" / "nightly" / dated +# pins would produce a non-reproducible container image tag. +set -euo pipefail + +git_root=$(git rev-parse --show-toplevel) +toolchain_file="$git_root/rust-toolchain.toml" + +if [[ ! -f "$toolchain_file" ]]; then + echo "get-rust-version.sh: $toolchain_file not found" >&2 + exit 1 +fi + +channel=$( + grep -E '^[[:space:]]*channel[[:space:]]*=' "$toolchain_file" \ + | head -n1 \ + | sed -E 's/^[[:space:]]*channel[[:space:]]*=[[:space:]]*"([^"]+)".*/\1/' +) + +if [[ -z "$channel" ]]; then + echo "get-rust-version.sh: no [toolchain].channel in $toolchain_file" >&2 + exit 1 +fi + +if [[ ! "$channel" =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then + echo "get-rust-version.sh: channel '$channel' is not a concrete numeric version (e.g. 1.95 or 1.95.0)" >&2 + echo "get-rust-version.sh: the CI image requires a pinned rustc; set channel = \"\" in $toolchain_file" >&2 + exit 1 +fi + +echo "$channel" diff --git a/tools/scripts/quick-minus-failing.py b/tools/scripts/quick-minus-failing.py new file mode 100644 index 000000000..c1d6d3a85 --- /dev/null +++ b/tools/scripts/quick-minus-failing.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +"""Print quick-profile excluded tests minus any listed in failing_tests.txt. + +failing_tests.txt may be plain test names, one per line, or raw nextest +output (e.g. ` FAIL [ 20.532s] ( 1/166) binary::kind test::name`). +In either case the test name is the last whitespace-separated token on +the line. +""" +import argparse +import re +import sys +from pathlib import Path + +TEST_RE = re.compile(r"test\(/\^([^$]+)\$/\)") +SECTION_RE = re.compile(r"^\[profile\.quick\]\s*\n(.*?)(?=^\[|\Z)", re.DOTALL | re.MULTILINE) + + +def extract_quick_tests(toml_path: Path) -> set[str]: + m = SECTION_RE.search(toml_path.read_text()) + if not m: + sys.exit(f"no [profile.quick] section in {toml_path}") + return set(TEST_RE.findall(m.group(1))) + + +def load_failing(path: Path) -> set[str]: + names: set[str] = set() + for line in path.read_text().splitlines(): + stripped = line.strip() + if not stripped or stripped.startswith("#"): + continue + names.add(stripped.split()[-1]) + return names + + +def main() -> None: + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument( + "--nextest-toml", + type=Path, + default=Path("integration-tests/.config/nextest.toml"), + ) + ap.add_argument("--failing", type=Path, default=Path("failing_tests.txt")) + ap.add_argument( + "--counts", + action="store_true", + help="print summary counts to stderr alongside the result", + ) + args = ap.parse_args() + + quick = extract_quick_tests(args.nextest_toml) + failing = load_failing(args.failing) + remaining = quick - failing + + if args.counts: + print( + f"quick excluded: {len(quick)} " + f"failing: {len(failing)} " + f"quick ∩ failing: {len(quick & failing)} " + f"stable subset (quick - failing): {len(remaining)}", + file=sys.stderr, + ) + + for t in sorted(remaining): + print(t) + + +if __name__ == "__main__": + main() From 4ab0503c24d587c187a9cd71cb3f9805ab9230ce Mon Sep 17 00:00:00 2001 From: zancas Date: Fri, 24 Apr 2026 13:21:22 -0700 Subject: [PATCH 7/7] test(chain_index): regression for best_chaintip passthrough-miss misclassification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When snapshot_nonfinalized_state() returns StillSyncingFinalizedState, best_chaintip passes through `source.get_block(Height(validator_finalized_height))` and emits `database_hole` on Ok(None) — categorising a transient validator-side miss as zaino-owned corruption. Adds a regression test that synthesizes that branch by claiming a validator_finalized_height above the mockchain tip and asserts the resulting error is not a database_hole. Fails today; pins the correct behaviour once the fix lands. Refs #1047. Co-Authored-By: Claude Opus 4.7 (1M context) --- failing_tests.txt | 94 ------------------- integration-tests/quick_test.txt | 94 ------------------- packages/zaino-state/src/chain_index/tests.rs | 1 + .../src/chain_index/tests/best_chaintip.rs | 39 ++++++++ stable_tests.txt | 60 ------------ tools/scripts/get-rust-version.sh | 36 ------- tools/scripts/quick-minus-failing.py | 68 -------------- 7 files changed, 40 insertions(+), 352 deletions(-) delete mode 100644 failing_tests.txt delete mode 100644 integration-tests/quick_test.txt create mode 100644 packages/zaino-state/src/chain_index/tests/best_chaintip.rs delete mode 100644 stable_tests.txt delete mode 100755 tools/scripts/get-rust-version.sh delete mode 100644 tools/scripts/quick-minus-failing.py diff --git a/failing_tests.txt b/failing_tests.txt deleted file mode 100644 index 532aa3f00..000000000 --- a/failing_tests.txt +++ /dev/null @@ -1,94 +0,0 @@ - FAIL [ 20.532s] ( 1/166) integration-tests::fetch_service zcashd::get::block - FAIL [ 21.502s] ( 2/166) integration-tests::fetch_service zcashd::get::block_nullifiers - FAIL [ 21.535s] ( 4/166) integration-tests::fetch_service zcashd::get::address_utxos - FAIL [ 22.501s] ( 5/166) integration-tests::fetch_service zcashd::get::address_tx_ids - FAIL [ 22.543s] ( 6/166) integration-tests::fetch_service zcashd::get::block_range_no_pool_type_returns_sapling_orchard - FAIL [ 22.550s] ( 8/166) integration-tests::fetch_service zcashd::get::address_balance - FAIL [ 26.918s] ( 14/166) integration-tests::fetch_service zcashd::get::latest_tree_state - FAIL [ 29.019s] ( 18/166) integration-tests::fetch_service zcashd::get::block_range_returns_all_pools_when_requested - FAIL [ 35.499s] ( 20/166) integration-tests::fetch_service zcashd::get::mempool_info - FAIL [ 37.429s] ( 22/166) integration-tests::fetch_service zcashd::get::mempool_stream - FAIL [ 37.489s] ( 24/166) integration-tests::fetch_service zcashd::get::mempool_tx - FAIL [ 27.286s] ( 27/166) integration-tests::fetch_service zcashd::get::taddress_balance - FAIL [ 32.006s] ( 29/166) integration-tests::fetch_service zcashd::get::raw_transaction - FAIL [ 29.030s] ( 30/166) integration-tests::fetch_service zcashd::get::taddress_utxos - FAIL [ 39.046s] ( 31/166) integration-tests::fetch_service zcashd::get::raw_mempool - FAIL [ 30.218s] ( 32/166) integration-tests::fetch_service zcashd::get::taddress_txids - FAIL [ 31.932s] ( 33/166) integration-tests::fetch_service zcashd::get::taddress_utxos_stream - FAIL [ 27.983s] ( 34/166) integration-tests::fetch_service zcashd::get::transaction_mempool - FAIL [ 26.129s] ( 35/166) integration-tests::fetch_service zcashd::get::tree_state - FAIL [ 29.996s] ( 36/166) integration-tests::fetch_service zcashd::get::transaction_mined - FAIL [ 22.926s] ( 37/166) integration-tests::fetch_service zcashd::get::z::get_treestate - FAIL [ 24.883s] ( 40/166) integration-tests::fetch_service zcashd::get::z::subtrees_by_index - FAIL [ 14.346s] ( 41/166) integration-tests::fetch_service zebrad::get::address_utxos - FAIL [ 11.482s] ( 45/166) integration-tests::fetch_service zebrad::get::block - FAIL [ 16.889s] ( 46/166) integration-tests::fetch_service zebrad::get::address_balance - FAIL [ 16.607s] ( 47/166) integration-tests::fetch_service zebrad::get::address_tx_ids - FAIL [ 11.408s] ( 52/166) integration-tests::fetch_service zebrad::get::block_nullifiers - FAIL [ 11.933s] ( 54/166) integration-tests::fetch_service zebrad::get::block_range_no_pool_type_returns_sapling_orchard - FAIL [ 14.537s] ( 58/166) integration-tests::fetch_service zebrad::get::block_range_returns_all_pools_when_requested - FAIL [ 12.112s] ( 61/166) integration-tests::fetch_service zebrad::get::mempool_info - FAIL [ 11.967s] ( 62/166) integration-tests::fetch_service zebrad::get::mempool_stream - FAIL [ 12.072s] ( 63/166) integration-tests::fetch_service zebrad::get::mempool_tx - FAIL [ 15.906s] ( 65/166) integration-tests::fetch_service zebrad::get::latest_tree_state - FAIL [ 11.762s] ( 67/166) integration-tests::fetch_service zebrad::get::raw_transaction - FAIL [ 11.790s] ( 71/166) integration-tests::fetch_service zebrad::get::taddress_balance - FAIL [ 11.768s] ( 72/166) integration-tests::fetch_service zebrad::get::taddress_txids - FAIL [ 11.675s] ( 73/166) integration-tests::fetch_service zebrad::get::taddress_utxos - FAIL [ 16.787s] ( 74/166) integration-tests::fetch_service zebrad::get::raw_mempool - FAIL [ 13.277s] ( 75/166) integration-tests::fetch_service zebrad::get::tree_state - FAIL [ 14.880s] ( 76/166) integration-tests::fetch_service zebrad::get::transaction_mined - FAIL [ 15.505s] ( 77/166) integration-tests::fetch_service zebrad::get::transaction_mempool - FAIL [ 16.685s] ( 78/166) integration-tests::fetch_service zebrad::get::taddress_utxos_stream - FAIL [ 7.689s] ( 79/166) integration-tests::json_server zcashd::zcash_indexer::check_info_with_cookie - FAIL [ 16.671s] ( 80/166) integration-tests::fetch_service zebrad::get::z::subtrees_by_index - FAIL [ 16.670s] ( 81/166) integration-tests::fetch_service zebrad::get::z::treestate - FAIL [ 25.593s] ( 88/166) integration-tests::json_server zcashd::zcash_indexer::get_address_tx_ids - FAIL [ 28.518s] ( 89/166) integration-tests::json_server zcashd::zcash_indexer::get_raw_transaction - FAIL [ 34.417s] ( 92/166) integration-tests::json_server zcashd::zcash_indexer::get_mempool_info - FAIL [ 26.968s] ( 93/166) integration-tests::json_server zcashd::zcash_indexer::z_get_address_balance - FAIL [ 36.820s] ( 95/166) integration-tests::json_server zcashd::zcash_indexer::get_raw_mempool - FAIL [ 25.066s] ( 96/166) integration-tests::json_server zcashd::zcash_indexer::z_get_address_utxos - FAIL [ 27.919s] ( 97/166) integration-tests::json_server zcashd::zcash_indexer::z_get_treestate - FAIL [ 28.939s] (100/166) integration-tests::json_server zcashd::zcash_indexer::z_get_subtrees_by_index - FAIL [ 15.282s] (101/166) integration-tests::state_service zebra::get::address_balance_regtest - FAIL [ 15.070s] (102/166) integration-tests::state_service zebra::get::address_deltas - FAIL [ 14.766s] (104/166) integration-tests::state_service zebra::get::address_tx_ids_regtest - FAIL [ 19.195s] (107/166) integration-tests::state_service zebra::get::address_utxos - FAIL [ 14.852s] (114/166) integration-tests::state_service zebra::get::get_mempool_info - FAIL [ 18.527s] (120/166) integration-tests::state_service zebra::get::raw_mempool_regtest - FAIL [ 14.326s] (121/166) integration-tests::state_service zebra::get::z::get_block_range_default_request_returns_all_pools_regtest - FAIL [ 18.471s] (122/166) integration-tests::state_service zebra::get::raw_transaction_regtest - FAIL [ 18.959s] (123/166) integration-tests::state_service zebra::get::taddress_transactions_regtest - FAIL [ 15.219s] (124/166) integration-tests::state_service zebra::get::z::get_block_range_out_of_range_test_lower_bound_regtest - FAIL [ 15.546s] (125/166) integration-tests::state_service zebra::get::z::get_block_range_default_request_returns_no_t_data_regtest - FAIL [ 17.527s] (126/166) integration-tests::state_service zebra::get::z::subtrees_by_index_regtest - FAIL [ 18.329s] (127/166) integration-tests::state_service zebra::get::z::get_block_range_out_of_range_test_upper_bound_regtest - FAIL [ 14.796s] (128/166) integration-tests::state_service zebra::lightwallet_indexer::get_block - FAIL [ 18.968s] (131/166) integration-tests::state_service zebra::get::z::treestate_regtest - FAIL [ 16.712s] (132/166) integration-tests::state_service zebra::lightwallet_indexer::get_block_range_full - FAIL [ 21.323s] (133/166) integration-tests::state_service zebra::lightwallet_indexer::get_address_utxos - FAIL [ 21.353s] (135/166) integration-tests::state_service zebra::lightwallet_indexer::get_address_utxos_stream - FAIL [ 16.821s] (137/166) integration-tests::state_service zebra::lightwallet_indexer::get_block_range_nullifiers - FAIL [ 15.065s] (138/166) integration-tests::state_service zebra::lightwallet_indexer::get_latest_tree_state - FAIL [ 15.333s] (142/166) integration-tests::state_service zebra::lightwallet_indexer::get_tree_state - FAIL [ 14.114s] (143/166) integration-tests::wallet_to_validator zcashd::monitor_unverified_mempool - FAIL [ 16.573s] (144/166) integration-tests::state_service zebra::lightwallet_indexer::get_transparent_data_from_compact_block_when_requested - FAIL [ 12.346s] (145/166) integration-tests::wallet_to_validator zcashd::sent_to::orchard - FAIL [ 13.682s] (146/166) integration-tests::wallet_to_validator zcashd::sent_to::sapling - FAIL [ 13.516s] (147/166) integration-tests::wallet_to_validator zcashd::sent_to::transparent - FAIL [ 12.714s] (148/166) integration-tests::wallet_to_validator zcashd::shield - FAIL [ 17.526s] (149/166) integration-tests::wallet_to_validator zcashd::sent_to::all - FAIL [ 15.098s] (151/166) integration-tests::wallet_to_validator zebrad::fetch_service::monitor_unverified_mempool - FAIL [ 12.077s] (152/166) integration-tests::wallet_to_validator zebrad::fetch_service::send_to::orchard - FAIL [ 11.983s] (153/166) integration-tests::wallet_to_validator zebrad::fetch_service::send_to::sapling - FAIL [ 17.338s] (154/166) integration-tests::wallet_to_validator zebrad::fetch_service::send_to::all - FAIL [ 13.316s] (155/166) integration-tests::wallet_to_validator zebrad::fetch_service::send_to::transparent - FAIL [ 13.029s] (156/166) integration-tests::wallet_to_validator zebrad::fetch_service::shield - FAIL [ 12.596s] (158/166) integration-tests::wallet_to_validator zebrad::state_service::send_to::transparent - FAIL [ 17.865s] (159/166) integration-tests::wallet_to_validator zebrad::state_service::monitor_unverified_mempool - FAIL [ 17.241s] (160/166) integration-tests::wallet_to_validator zebrad::state_service::send_to::orchard - FAIL [ 17.204s] (161/166) integration-tests::wallet_to_validator zebrad::state_service::send_to::sapling - FAIL [ 18.268s] (162/166) integration-tests::wallet_to_validator zebrad::state_service::send_to::all - FAIL [ 13.698s] (163/166) integration-tests::wallet_to_validator zebrad::state_service::shield - FAIL [ 65.182s] (166/166) integration-tests::state_service zebra::lightwallet_indexer::get_transaction diff --git a/integration-tests/quick_test.txt b/integration-tests/quick_test.txt deleted file mode 100644 index 91351f15e..000000000 --- a/integration-tests/quick_test.txt +++ /dev/null @@ -1,94 +0,0 @@ -chain_query_interface::get_block_range_zebrad -chain_query_interface::get_mempool_stream_fresh_snapshot_repeated_zebrad -chain_query_interface::get_subtree_roots_zebrad -chain_query_interface::zallet_like_steady_state_loop_zebrad -zcashd::get::address_balance -zcashd::get::address_tx_ids -zcashd::get::address_utxos -zcashd::get::block -zcashd::get::block_deltas -zcashd::get::block_header -zcashd::get::block_nullifiers -zcashd::get::block_object -zcashd::get::block_range_no_pool_type_returns_sapling_orchard -zcashd::get::block_range_returns_all_pools_when_requested -zcashd::get::block_raw -zcashd::get::difficulty -zcashd::get::get_network_sol_ps -zcashd::get::latest_block -zcashd::get::latest_tree_state -zcashd::get::lightd_info -zcashd::get::mining_info -zcashd::get::peer_info -zcashd::get::subtree_roots -zcashd::launch::regtest_no_cache -zcashd::validation::validate_address -zcashd::validation::z_validate_address -zebrad::get::best_blockhash -zebrad::get::block_count -zebrad::get::block_header -zebrad::get::block_nullifiers -zebrad::get::block_object -zebrad::get::block_range_no_pool_type_returns_sapling_orchard -zebrad::get::block_range_nullifiers -zebrad::get::block_range_returns_all_pools_when_requested -zebrad::get::block_subsidy -zebrad::get::difficulty -zebrad::get::get_network_sol_ps -zebrad::get::latest_block -zebrad::get::latest_tree_state -zebrad::get::lightd_info -zebrad::get::subtree_roots -zebrad::get::tree_state -zebrad::launch::regtest_no_cache -zebrad::validation::validate_address -zebrad::validation::z_validate_address -zcashd::zcash_indexer::check_info_with_cookie -zcashd::zcash_indexer::get_address_tx_ids -zcashd::zcash_indexer::get_best_blockhash -zcashd::zcash_indexer::get_block_count -zcashd::zcash_indexer::get_block_deltas -zcashd::zcash_indexer::get_block_header -zcashd::zcash_indexer::get_peer_info -zcashd::zcash_indexer::validate_address -zcashd::zcash_indexer::z_get_address_balance -zcashd::zcash_indexer::z_get_address_utxos -zcashd::zcash_indexer::z_get_block -zcashd::zcash_indexer::z_validate_address -zebra::check_info::regtest_no_cache -zebra::check_info::state_service_chaintip_update_subscriber -zebra::get::address_tx_ids_regtest -zebra::get::address_utxos -zebra::get::best_blockhash -zebra::get::block_count -zebra::get::block_object_regtest -zebra::get::block_raw_regtest -zebra::get::difficulty -zebra::get::get_network_sol_ps -zebra::get::mining_info -zebra::get::peer_info -zebra::get::taddress_transactions_regtest -zebra::get::z::get_block_range_default_request_returns_all_pools_regtest -zebra::get::z::get_block_range_default_request_returns_no_t_data_regtest -zebra::get::z::get_block_range_out_of_range_test_lower_bound_regtest -zebra::get::z::get_block_range_out_of_range_test_upper_bound_regtest -zebra::get::z::treestate_regtest -zebra::get::z::z_validate_address -zebra::lightwallet_indexer::get_address_utxos -zebra::lightwallet_indexer::get_address_utxos_stream -zebra::lightwallet_indexer::get_block -zebra::lightwallet_indexer::get_block_header -zebra::lightwallet_indexer::get_block_range_full -zebra::lightwallet_indexer::get_block_range_nullifiers -zebra::lightwallet_indexer::get_latest_block -zebra::lightwallet_indexer::get_latest_tree_state -zebra::lightwallet_indexer::get_subtree_roots -zebra::lightwallet_indexer::get_taddress_balance -zebra::lightwallet_indexer::get_taddress_txids -zebra::lightwallet_indexer::get_transaction -zebra::lightwallet_indexer::get_transparent_data_from_compact_block_when_requested -zebra::lightwallet_indexer::get_tree_state -pre_v4_txs_parsing -zcashd::connect_to_node_get_info -zebrad::fetch_service::connect_to_node_get_info -zebrad::state_service::connect_to_node_get_info diff --git a/packages/zaino-state/src/chain_index/tests.rs b/packages/zaino-state/src/chain_index/tests.rs index ec9ca5ce1..ed1d24141 100644 --- a/packages/zaino-state/src/chain_index/tests.rs +++ b/packages/zaino-state/src/chain_index/tests.rs @@ -1,5 +1,6 @@ //! Zaino-State ChainIndex unit tests. +mod best_chaintip; pub(crate) mod finalised_state; pub(crate) mod mempool; mod mockchain_tests; diff --git a/packages/zaino-state/src/chain_index/tests/best_chaintip.rs b/packages/zaino-state/src/chain_index/tests/best_chaintip.rs new file mode 100644 index 000000000..1abe757f0 --- /dev/null +++ b/packages/zaino-state/src/chain_index/tests/best_chaintip.rs @@ -0,0 +1,39 @@ +//! Regression tests for `best_chaintip`. +//! +//! Tracks : when the snapshot +//! is `StillSyncingFinalizedState` and the source cannot currently produce +//! the block at `validator_finalized_height`, `best_chaintip` surfaces the +//! miss as `database_hole` — the corruption kind — instead of a retryable +//! "not ready" signal. + +use super::load_test_vectors_and_sync_chain_index; +use crate::chain_index::ChainIndex; +use crate::{ChainIndexSnapshot, Height}; + +/// Reaches the `StillSyncingFinalizedState` arm with a +/// `validator_finalized_height` the source cannot serve, mirroring the +/// cold-boot race where zebrad transiently can't produce block `tip - 100`. +/// The error (if any) must not be a `database_hole`: that category means +/// zaino's own on-disk index claims a height whose bytes are unreachable, +/// which is not what happened here. +#[tokio::test(flavor = "multi_thread")] +async fn passthrough_miss_is_not_a_database_hole() { + let (_blocks, _indexer, index_reader, mockchain) = + load_test_vectors_and_sync_chain_index(false).await; + + let above_tip = Height(mockchain.max_chain_height() + 1_000); + let fake_snapshot = ChainIndexSnapshot::StillSyncingFinalizedState { + validator_finalized_height: above_tip, + }; + + match index_reader.best_chaintip(&fake_snapshot).await { + Ok(_tip) => {} + Err(e) => { + let rendered = e.to_string(); + assert!( + !rendered.contains("hole in validator database"), + "best_chaintip misclassified a passthrough miss as a database hole: {rendered}", + ); + } + } +} diff --git a/stable_tests.txt b/stable_tests.txt deleted file mode 100644 index fa5c9ae97..000000000 --- a/stable_tests.txt +++ /dev/null @@ -1,60 +0,0 @@ -chain_query_interface::get_block_range_zebrad -chain_query_interface::get_mempool_stream_fresh_snapshot_repeated_zebrad -chain_query_interface::get_subtree_roots_zebrad -chain_query_interface::zallet_like_steady_state_loop_zebrad -pre_v4_txs_parsing -zcashd::connect_to_node_get_info -zcashd::get::block_deltas -zcashd::get::block_header -zcashd::get::block_object -zcashd::get::block_raw -zcashd::get::difficulty -zcashd::get::get_network_sol_ps -zcashd::get::latest_block -zcashd::get::lightd_info -zcashd::get::mining_info -zcashd::get::peer_info -zcashd::get::subtree_roots -zcashd::launch::regtest_no_cache -zcashd::validation::validate_address -zcashd::validation::z_validate_address -zcashd::zcash_indexer::get_best_blockhash -zcashd::zcash_indexer::get_block_count -zcashd::zcash_indexer::get_block_deltas -zcashd::zcash_indexer::get_block_header -zcashd::zcash_indexer::get_peer_info -zcashd::zcash_indexer::validate_address -zcashd::zcash_indexer::z_get_block -zcashd::zcash_indexer::z_validate_address -zebra::check_info::regtest_no_cache -zebra::check_info::state_service_chaintip_update_subscriber -zebra::get::best_blockhash -zebra::get::block_count -zebra::get::block_object_regtest -zebra::get::block_raw_regtest -zebra::get::difficulty -zebra::get::get_network_sol_ps -zebra::get::mining_info -zebra::get::peer_info -zebra::get::z::z_validate_address -zebra::lightwallet_indexer::get_block_header -zebra::lightwallet_indexer::get_latest_block -zebra::lightwallet_indexer::get_subtree_roots -zebra::lightwallet_indexer::get_taddress_balance -zebra::lightwallet_indexer::get_taddress_txids -zebrad::fetch_service::connect_to_node_get_info -zebrad::get::best_blockhash -zebrad::get::block_count -zebrad::get::block_header -zebrad::get::block_object -zebrad::get::block_range_nullifiers -zebrad::get::block_subsidy -zebrad::get::difficulty -zebrad::get::get_network_sol_ps -zebrad::get::latest_block -zebrad::get::lightd_info -zebrad::get::subtree_roots -zebrad::launch::regtest_no_cache -zebrad::state_service::connect_to_node_get_info -zebrad::validation::validate_address -zebrad::validation::z_validate_address diff --git a/tools/scripts/get-rust-version.sh b/tools/scripts/get-rust-version.sh deleted file mode 100755 index fe30ba0c8..000000000 --- a/tools/scripts/get-rust-version.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -# Emit the pinned rustc version read from rust-toolchain.toml. -# -# Single source of truth for RUST_VERSION used by the CI image build -# (Makefile.toml build-image, tools/scripts/get-ci-image-tag.sh, and the -# GitHub workflows). Exits non-zero if channel is anything other than a -# concrete numeric version (x.y or x.y.z) — "stable" / "nightly" / dated -# pins would produce a non-reproducible container image tag. -set -euo pipefail - -git_root=$(git rev-parse --show-toplevel) -toolchain_file="$git_root/rust-toolchain.toml" - -if [[ ! -f "$toolchain_file" ]]; then - echo "get-rust-version.sh: $toolchain_file not found" >&2 - exit 1 -fi - -channel=$( - grep -E '^[[:space:]]*channel[[:space:]]*=' "$toolchain_file" \ - | head -n1 \ - | sed -E 's/^[[:space:]]*channel[[:space:]]*=[[:space:]]*"([^"]+)".*/\1/' -) - -if [[ -z "$channel" ]]; then - echo "get-rust-version.sh: no [toolchain].channel in $toolchain_file" >&2 - exit 1 -fi - -if [[ ! "$channel" =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then - echo "get-rust-version.sh: channel '$channel' is not a concrete numeric version (e.g. 1.95 or 1.95.0)" >&2 - echo "get-rust-version.sh: the CI image requires a pinned rustc; set channel = \"\" in $toolchain_file" >&2 - exit 1 -fi - -echo "$channel" diff --git a/tools/scripts/quick-minus-failing.py b/tools/scripts/quick-minus-failing.py deleted file mode 100644 index c1d6d3a85..000000000 --- a/tools/scripts/quick-minus-failing.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python3 -"""Print quick-profile excluded tests minus any listed in failing_tests.txt. - -failing_tests.txt may be plain test names, one per line, or raw nextest -output (e.g. ` FAIL [ 20.532s] ( 1/166) binary::kind test::name`). -In either case the test name is the last whitespace-separated token on -the line. -""" -import argparse -import re -import sys -from pathlib import Path - -TEST_RE = re.compile(r"test\(/\^([^$]+)\$/\)") -SECTION_RE = re.compile(r"^\[profile\.quick\]\s*\n(.*?)(?=^\[|\Z)", re.DOTALL | re.MULTILINE) - - -def extract_quick_tests(toml_path: Path) -> set[str]: - m = SECTION_RE.search(toml_path.read_text()) - if not m: - sys.exit(f"no [profile.quick] section in {toml_path}") - return set(TEST_RE.findall(m.group(1))) - - -def load_failing(path: Path) -> set[str]: - names: set[str] = set() - for line in path.read_text().splitlines(): - stripped = line.strip() - if not stripped or stripped.startswith("#"): - continue - names.add(stripped.split()[-1]) - return names - - -def main() -> None: - ap = argparse.ArgumentParser(description=__doc__) - ap.add_argument( - "--nextest-toml", - type=Path, - default=Path("integration-tests/.config/nextest.toml"), - ) - ap.add_argument("--failing", type=Path, default=Path("failing_tests.txt")) - ap.add_argument( - "--counts", - action="store_true", - help="print summary counts to stderr alongside the result", - ) - args = ap.parse_args() - - quick = extract_quick_tests(args.nextest_toml) - failing = load_failing(args.failing) - remaining = quick - failing - - if args.counts: - print( - f"quick excluded: {len(quick)} " - f"failing: {len(failing)} " - f"quick ∩ failing: {len(quick & failing)} " - f"stable subset (quick - failing): {len(remaining)}", - file=sys.stderr, - ) - - for t in sorted(remaining): - print(t) - - -if __name__ == "__main__": - main()