# CCIP Testing Guide for ChainID 138 **Date**: 2025-01-27 **Network**: ChainID 138 (DeFi Oracle Meta Mainnet) --- ## Overview This guide provides testing procedures and examples for CCIP infrastructure on ChainID 138. --- ## Test Categories ### 1. Unit Tests Test individual contract functions in isolation. **Files**: - `test/CCIPWETH9Bridge.t.sol` - `test/CCIPWETH10Bridge.t.sol` - `test/ccip/CCIPIntegration.t.sol` - `test/ccip/CCIPErrorHandling.t.sol` - `test/ccip/CCIPFees.t.sol` ### 2. Integration Tests Test end-to-end cross-chain flows. **Files**: - `test/ccip/CCIPIntegration.t.sol` ### 3. Functional Tests Test real-world usage scenarios. --- ## Running Tests ### Run All CCIP Tests ```bash forge test --match-path "test/ccip/**" -vvv forge test --match-path "test/CCIP*.t.sol" -vvv ``` ### Run Specific Test File ```bash forge test --match-path "test/CCIPWETH9Bridge.t.sol" -vvv ``` ### Run Specific Test Function ```bash forge test --match-test "testSendCrossChain" -vvv ``` --- ## Test Scenarios ### Router Tests ```solidity function testRouterMessageSending() public { // Test sending message via router IRouterClient.EVM2AnyMessage memory message = ...; (bytes32 messageId, uint256 fee) = router.ccipSend(destinationSelector, message); assertTrue(messageId != bytes32(0)); } function testRouterFeeCalculation() public { // Test fee calculation uint256 fee = router.getFee(destinationSelector, message); assertTrue(fee > 0); } ``` ### Bridge Tests ```solidity function testBridgeTransfer() public { // Approve bridge weth9.approve(address(bridge), amount); // Send cross-chain bytes32 messageId = bridge.sendCrossChain(destinationSelector, recipient, amount); // Verify assertTrue(messageId != bytes32(0)); } function testBridgeFeeCalculation() public { uint256 fee = bridge.calculateFee(destinationSelector, amount); assertTrue(fee > 0); } ``` ### Integration Tests ```solidity function testEndToEndTransfer() public { // 1. Lock tokens on source chain // 2. Send cross-chain message // 3. Verify unlock on destination chain // 4. Verify balances } ``` --- ## Test Data ### Test Addresses ```solidity address constant TEST_USER = address(0x1111); address constant TEST_RECIPIENT = address(0x2222); address constant TEST_ADMIN = address(0x3333); ``` ### Test Amounts ```solidity uint256 constant TEST_AMOUNT = 1 ether; uint256 constant TEST_FEE = 0.001 ether; ``` ### Test Chain Selectors ```solidity uint64 constant CHAIN138_SELECTOR = 138; uint64 constant ETH_MAINNET_SELECTOR = 5009297550715157269; ``` --- ## Mock Contracts For testing without actual cross-chain connectivity: ```solidity contract MockRouter is IRouterClient { function ccipSend(...) external payable returns (bytes32, uint256) { // Mock implementation } function getFee(...) external view returns (uint256) { // Mock fee calculation } } ``` --- ## Test Coverage Goals - **Unit Tests**: >90% coverage - **Integration Tests**: All critical paths - **Error Handling**: All error cases - **Edge Cases**: Boundary conditions --- ## Continuous Integration ### GitHub Actions Example ```yaml name: CCIP Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: foundry-actions/setup-foundry@v1 - run: forge test --match-path "test/ccip/**" ``` --- ## Related Documentation - [Deployment Guide](DEPLOYMENT_GUIDE_CHAIN138.md) - [Developer Integration Guide](../developer-guides/CCIP_INTEGRATION_GUIDE.md) --- **Last Updated**: 2025-01-27