From e39102155f6374e4a318aed4f1e5eb6040d5c510 Mon Sep 17 00:00:00 2001 From: Hansie Odendaal Date: Sun, 14 Jan 2024 08:04:21 +0200 Subject: [PATCH] wip --- base_layer/core/tests/tests/horizon_sync.rs | 34 ++++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/base_layer/core/tests/tests/horizon_sync.rs b/base_layer/core/tests/tests/horizon_sync.rs index e3a611f34d..1e7d4dae3b 100644 --- a/base_layer/core/tests/tests/horizon_sync.rs +++ b/base_layer/core/tests/tests/horizon_sync.rs @@ -20,7 +20,10 @@ // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE // USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -use tari_core::{base_node::state_machine_service::states::StateEvent, chain_storage::BlockchainDatabaseConfig}; +use std::sync::Arc; +use tari_core::{base_node::state_machine_service::states::StateEvent, chain_storage::BlockchainDatabaseConfig, txn_schema}; +use tari_core::transactions::tari_amount::T; +use tari_core::transactions::test_helpers::schema_to_transaction; use crate::helpers::{sync, sync::WhatToDelete}; @@ -59,19 +62,40 @@ async fn test_horizon_sync_to_archival_node_happy_path() { ); // Create a blockchain with many blocks - let (blocks, _coinbases) = sync::create_and_add_some_blocks( + let (blocks_a, coinbases_a) = sync::create_and_add_some_blocks( &bob_node, &initial_block, &initial_coinbase, - 40, + 20, &consensus_manager, &key_manager, - &[3; 40], + &[3; 20], &None, ) .await; + // Create a transaction to spend some coinbase outputs + let schema = txn_schema!( + from: vec![coinbases_a[0].clone(), coinbases_a[1].clone(), coinbases_a[2].clone(), coinbases_a[3].clone(), coinbases_a[4].clone()], + to: vec![1000 * T; 20] + ); + let (txns, _outputs) = schema_to_transaction(&[schema], &key_manager).await; + let txns = txns.into_iter().map(|t| Arc::try_unwrap(t).unwrap()).collect::>(); + // Expand the blockchain with the spend transaction + let (blocks_b, _coinbases) = sync::create_and_add_some_blocks( + &bob_node, + &blocks_a[20], + &coinbases_a[20], + 20, + &consensus_manager, + &key_manager, + &[3; 20], + &Some(vec![txns]), + ) + .await; assert_eq!(bob_node.blockchain_db.get_height().unwrap(), 40); assert_eq!(bob_node.blockchain_db.fetch_last_header().unwrap().height, 40); + let blocks = [&blocks_a[..], &blocks_b[1..]].concat(); + // Now rewind Bob's chain to height 10 sync::delete_some_blocks_and_headers(&blocks[10..=40], WhatToDelete::BlocksAndHeaders, &bob_node); assert_eq!(bob_node.blockchain_db.get_height().unwrap(), 10); @@ -175,7 +199,7 @@ async fn test_horizon_sync_to_archival_node_happy_path() { // Bob will not be banned assert!(!sync::wait_for_is_peer_banned(&alice_node, bob_node.node_identity.node_id(), 1).await); - // Give Bob some more blocks + // Give Bob some more blocks (containing the block with the spend transaction at height 21) sync::add_some_existing_blocks(&blocks[21..=40], &bob_node); assert_eq!(bob_node.blockchain_db.get_height().unwrap(), 40); assert_eq!(bob_node.blockchain_db.fetch_last_header().unwrap().height, 40);