#integration-tests #blockchain #container #arch

arch_testing

A testing framework for Arch Network applications with containerized test environments

1 unstable release

0.1.0 Sep 4, 2025

#525 in HTTP server

MIT license

45KB
946 lines

Arch Testing

A comprehensive testing framework for Arch Network applications that provides containerized test environments for integration testing.

Features

  • Containerized Test Environments: Spin up isolated test environments using Docker containers
  • Bitcoin Integration: Test with a local Bitcoin node for blockchain interactions
  • Arch Network Support: Built-in support for Arch Network validators and programs
  • Titan Integration: Test with Titan services for enhanced functionality
  • Async/Await Support: Full async support with Tokio runtime
  • Configurable: Flexible configuration options for different test scenarios

Installation

Add this to your Cargo.toml:

[dependencies]
arch_testing = "0.1.0"

Quick Start

use arch_testing::*;
use tokio;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Initialize test context
    let test_context = TestContext::new().await?;
    
    // Start a Bitcoin container
    let bitcoin_config = BitcoinContainerConfig::default();
    let bitcoin_container = BitcoinContainer::new(bitcoin_config).await?;
    
    // Start a local validator
    let validator_config = LocalValidatorContainerConfig::default();
    let validator = LocalValidatorContainer::new(validator_config).await?;
    
    // Your test logic here
    println!("Test environment ready!");
    
    Ok(())
}

Components

BitcoinContainer

Test with a local Bitcoin node:

use arch_testing::{BitcoinContainer, BitcoinContainerConfig};

let config = BitcoinContainerConfig {
    rpc_port: Some(18443),
    p2p_port: Some(18444),
    ..Default::default()
};

let bitcoin = BitcoinContainer::new(config).await?;
// Use bitcoin.rpc_client() for Bitcoin RPC calls

LocalValidatorContainer

Test with a local Arch Network validator:

use arch_testing::{LocalValidatorContainer, LocalValidatorContainerConfig};

let config = LocalValidatorContainerConfig::default();
let validator = LocalValidatorContainer::new(config).await?;
// Validator is ready for testing

TitanContainer

Test with Titan services:

use arch_testing::{TitanContainer, TitanContainerConfig};

let config = TitanContainerConfig::default();
let titan = TitanContainer::new(config).await?;
// Titan services are available

Configuration

All containers support flexible configuration through their respective config structs:

  • BitcoinContainerConfig: Configure Bitcoin node settings, ports, and RPC credentials
  • LocalValidatorContainerConfig: Configure validator settings and network parameters
  • TitanContainerConfig: Configure Titan service settings

Test Context

The TestContext provides a centralized way to manage your test environment:

use arch_testing::TestContext;

let context = TestContext::new().await?;
// Context manages the lifecycle of all containers

Requirements

  • Docker (for containerized test environments)
  • Rust 1.70+ (2021 edition)
  • Tokio runtime

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Repository

GitHub Repository

Dependencies

~43–64MB
~1M SLoC