# Task 4: Cross-Chain Integration Testing Plan

**Date**: 2025-01-18  
**Status**: ⏳ **TESTING PLAN READY** (Depends on Bridge Configuration)  
**Priority**: 🔴 CRITICAL

## Overview

Comprehensive testing plan for cross-chain integration between ChainID 138 and Ethereum Mainnet using CCIP bridges.

## Prerequisites

### 1. Bridge Configuration ✅ REQUIRED

**Current Status**: ⚠️ **NOT CONFIGURED** (from Task 7)

**Required Actions**:
- Configure Mainnet bridges with ChainID 138 as destination
- Configure ChainID 138 bridges with Mainnet as destination
- Verify destination chain selectors are correct

**See**: `TASK7_BRIDGE_CONFIG_VERIFICATION.md` for configuration details

### 2. Off-Chain Services ✅ REQUIRED

**Current Status**: ⏳ **TEMPLATES READY** (from Tasks 2-3)

**Required Actions**:
- Implement state anchoring service (template available)
- Implement transaction mirroring service (template available)

**See**:
- `TASK2_STATE_ANCHORING_SERVICE.md` - Service implementation guide
- `TASK3_TRANSACTION_MIRRORING_SERVICE.md` - Service implementation guide

### 3. Test Environment Setup ✅

**RPC Endpoints**:
- Mainnet: `https://eth.llamarpc.com` or Infura
- ChainID 138: `http://192.168.11.211:8545` (VMID 2101)

**Test Accounts**:
- Test account with ETH on Mainnet
- Test account with ETH on ChainID 138
- Sufficient LINK tokens for CCIP fees

## Test Plan

### Phase 1: Bridge Configuration Verification

#### Test 1.1: Verify Destination Chain Configuration

**Objective**: Verify bridges are configured with correct destination chains

**Steps**:
1. Query `getDestinationChains()` on Mainnet CCIPWETH9Bridge
2. Verify ChainID 138 selector is in the list
3. Query `destinations(chainSelector)` to verify receiver bridge address
4. Repeat for CCIPWETH10Bridge
5. Repeat on ChainID 138 bridges (Mainnet as destination)

**Expected Results**:
- ChainID 138 bridges configured on Mainnet
- Mainnet configured on ChainID 138 bridges
- Correct receiver bridge addresses set

**Command**:
```bash
# Check Mainnet bridge destinations
cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \
  "getDestinationChains()(uint64[])" \
  --rpc-url https://eth.llamarpc.com

# Check specific destination
cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \
  "destinations(uint64)(uint64,address,bool)" \
  <CHAINID_138_SELECTOR> \
  --rpc-url https://eth.llamarpc.com
```

#### Test 1.2: Verify CCIP Router Connection

**Objective**: Verify bridges are connected to CCIP Routers

**Steps**:
1. Query `ccipRouter()` on all bridges
2. Verify router addresses match expected values:
   - Mainnet: `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D`
   - ChainID 138: Verify router address

**Expected Results**:
- Correct CCIP Router addresses on all bridges

### Phase 2: Small Amount Test Transfers

#### Test 2.1: Mainnet → ChainID 138 (WETH9)

**Objective**: Test WETH9 transfer from Mainnet to ChainID 138

**Steps**:
1. Approve WETH9 on Mainnet for bridge
2. Call `sendCrossChain()` on Mainnet CCIPWETH9Bridge
3. Monitor CCIP message ID
4. Wait for CCIP confirmation
5. Verify WETH9 received on ChainID 138
6. Verify balance on destination chain

**Test Amount**: 0.001 WETH9 (small test amount)

**Expected Results**:
- Transaction succeeds on Mainnet
- CCIP message ID emitted
- WETH9 received on ChainID 138 at recipient address

#### Test 2.2: ChainID 138 → Mainnet (WETH9)

**Objective**: Test WETH9 transfer from ChainID 138 to Mainnet

**Steps**:
1. Approve WETH9 on ChainID 138 for bridge
2. Call `sendCrossChain()` on ChainID 138 CCIPWETH9Bridge
3. Monitor CCIP message ID
4. Wait for CCIP confirmation
5. Verify WETH9 received on Mainnet

**Test Amount**: 0.001 WETH9

#### Test 2.3: Mainnet → ChainID 138 (WETH10)

**Objective**: Test WETH10 transfer from Mainnet to ChainID 138

**Steps**: Same as Test 2.1 but using WETH10 bridge

#### Test 2.4: ChainID 138 → Mainnet (WETH10)

**Objective**: Test WETH10 transfer from ChainID 138 to Mainnet

**Steps**: Same as Test 2.2 but using WETH10 bridge

### Phase 3: State Synchronization Testing

#### Test 3.1: State Anchoring Service Test

**Objective**: Verify state anchoring service works

**Steps**:
1. Deploy/start state anchoring service
2. Monitor ChainID 138 blocks
3. Verify state proofs submitted to MainnetTether
4. Verify state proofs stored on-chain
5. Query `getStateProof()` to verify data

**Expected Results**:
- State proofs anchored regularly
- Data accessible via `getStateProof()` on MainnetTether
- Events emitted correctly

#### Test 3.2: Transaction Mirroring Service Test

**Objective**: Verify transaction mirroring service works

**Steps**:
1. Deploy/start transaction mirroring service
2. Perform test transaction on ChainID 138
3. Verify transaction mirrored to TransactionMirror
4. Verify transaction data queryable
5. Verify events indexed correctly

**Expected Results**:
- Transactions mirrored to Mainnet
- Transaction data accessible
- Events searchable on Etherscan

### Phase 4: Integration End-to-End Tests

#### Test 4.1: Complete Bridge Flow (Both Directions)

**Objective**: Test complete bridge flow in both directions

**Steps**:
1. Mainnet → ChainID 138 transfer
2. Verify on ChainID 138
3. ChainID 138 → Mainnet transfer (same amount back)
4. Verify on Mainnet
5. Verify state anchored
6. Verify transactions mirrored

**Expected Results**:
- Round-trip transfer succeeds
- Balances correct on both chains
- State synchronization works
- Transaction mirroring works

#### Test 4.2: Multiple Concurrent Transfers

**Objective**: Test multiple transfers happening simultaneously

**Steps**:
1. Initiate 3 transfers from Mainnet to ChainID 138
2. Initiate 2 transfers from ChainID 138 to Mainnet
3. Monitor all transfers complete
4. Verify all amounts received correctly

**Expected Results**:
- All transfers complete successfully
- No double-spending or replay issues
- Correct amounts on both chains

### Phase 5: Edge Cases and Error Handling

#### Test 5.1: Insufficient LINK Fees

**Objective**: Verify error handling for insufficient LINK

**Steps**:
1. Attempt transfer with insufficient LINK balance
2. Verify transaction reverts with clear error

**Expected Results**:
- Transaction reverts
- Clear error message about insufficient fees

#### Test 5.2: Invalid Destination Chain

**Objective**: Verify error handling for invalid destination

**Steps**:
1. Attempt transfer to unconfigured chain selector
2. Verify transaction reverts

**Expected Results**:
- Transaction reverts
- Error about destination not enabled

#### Test 5.3: Zero Amount Transfer

**Objective**: Verify zero amount is rejected

**Steps**:
1. Attempt transfer with amount = 0
2. Verify transaction reverts

**Expected Results**:
- Transaction reverts
- Error about invalid amount

## Test Execution Checklist

### Pre-Testing Setup

- [ ] Bridge destinations configured (Mainnet ↔ ChainID 138)
- [ ] Test accounts funded with ETH on both chains
- [ ] LINK tokens available for CCIP fees
- [ ] WETH9/WETH10 approved for bridges
- [ ] State anchoring service running (optional)
- [ ] Transaction mirroring service running (optional)

### Test Execution

- [ ] Phase 1: Configuration verification complete
- [ ] Phase 2: Small amount test transfers complete
- [ ] Phase 3: State synchronization tests complete
- [ ] Phase 4: End-to-end integration tests complete
- [ ] Phase 5: Edge cases tested

### Post-Testing Verification

- [ ] All balances correct on both chains
- [ ] State proofs anchored correctly
- [ ] Transactions mirrored correctly
- [ ] No errors in logs
- [ ] All CCIP messages confirmed

## Testing Scripts

### Manual Testing

Use `cast` commands for manual testing:
```bash
# Send cross-chain transfer
cast send 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \
  "sendCrossChain(uint64,address,uint256)" \
  <CHAINID_138_SELECTOR> \
  <RECIPIENT_ADDRESS> \
  1000000000000000 \
  --rpc-url https://eth.llamarpc.com \
  --private-key $PRIVATE_KEY
```

### Automated Testing

Create test scripts using Foundry/Forge:
- `test/ccip/CrossChainIntegration.t.sol` - Integration tests
- `test/ccip/BridgeFlow.t.sol` - Bridge flow tests

## Dependencies

1. ✅ **Bridge Configuration** - Required before testing (Task 7 shows not configured)
2. ✅ **Off-Chain Services** - Optional but recommended (Templates ready)
3. ✅ **Test Accounts** - Required for transfers
4. ✅ **CCIP Fee Tokens** - LINK tokens required

## Current Status

**Blockers**:
- ⚠️ Bridge destinations not configured (from Task 7)
- ⏳ Off-chain services not implemented (templates ready)

**Ready for Testing**:
- ✅ RPC endpoints available
- ✅ Contracts deployed and verified
- ✅ Test plan documented

## Next Steps

1. **Configure Bridge Destinations** (Task 7 finding)
2. **Implement Off-Chain Services** (if needed for state anchoring/mirroring)
3. **Execute Test Plan** - Phase 1 through Phase 5
4. **Document Test Results**

---

**Status**: ⏳ **TESTING PLAN READY - AWAITING BRIDGE CONFIGURATION**
