Files
self/TEST_FIXES_ROUND2.md
2026-01-04 12:04:40 +10:00

3.7 KiB

Test Fixes - Round 2

Issues Found from Test Run

30 tests passing, 10 failing. Here's what was fixed:

Fixes Applied

1. MockSelfVerificationRoot → TestMultichainDApp

Problem: Tests 6-9 failed with "Artifact for contract 'MockSelfVerificationRoot' not found"

Fix: Changed deployMockDAppFixture() to use TestMultichainDApp instead.

Files Modified:

  • test/IdentityVerificationHubMultichain.test.ts

2. Payload Format in All Tests

Problem: Tests used wrong payload format with messageId and configId

Old Format:

['bytes32', 'address', 'bytes32', 'bytes', 'bytes']
[messageId, destDApp, configId, output, userData]

Correct Format:

['address', 'bytes', 'bytes']
[destDApp, output, userData]

Files Modified:

  • test/IdentityVerificationHubMultichain.test.ts (4 locations)

3. Contract Size Limit for Tests

Problem: Test 10 failed - "contract whose code is too large" when deploying V2 hub

Fix: Added allowUnlimitedContractSize: true to hardhat network config

Files Modified:

  • hardhat.config.ts

Impact: Tests can now deploy the 24.034 KiB V2 hub contract

4. MockBridge Source Hub Configuration

Problem: Tests 1, 2, 5 failed with MockBridgeSendFailed() - internal call to receiveMessage was failing

Root Cause: MockBridge was calling:

receiveMessage(sourceChainId, destHub, payload)

But destHub is the DESTINATION hub address, not the SOURCE hub address!

Fix:

  1. Added sourceHub storage to MockBridgeStorage
  2. Added setSourceHub(bytes32) method
  3. Use configured source hub in receiveMessage call
  4. Fallback to msg.sender if not configured

Files Modified:

  • contracts/mocks/MockBridgeProvider.sol
  • test/e2e/multichain-e2e.test.ts (configure source hub)

5. Better Error Forwarding

Problem: MockBridgeSendFailed gave no details about why the call failed

Fix: Enhanced error forwarding to bubble up the actual revert reason:

if (!success) {
    if (returnData.length > 0) {
        assembly {
            revert(add(returnData, 32), mload(returnData))
        }
    }
    revert MockBridgeSendFailed();
}

Files Modified:

  • contracts/mocks/MockBridgeProvider.sol

6. Added Instrumentation

Purpose: Debug remaining issues with runtime evidence

Instrumentation Points:

  • Test setup with owner address
  • Bridge configuration with all addresses
  • Before sendMessage with parameters

Files Modified:

  • test/e2e/multichain-e2e.test.ts

Files Changed Summary

File Changes
contracts/mocks/MockBridgeProvider.sol Added sourceHub storage, setSourceHub method, fixed receiveMessage call, improved error forwarding
contracts/hardhat.config.ts Added allowUnlimitedContractSize for testing
test/e2e/multichain-e2e.test.ts Configure mock bridge source hub, added debug logs
test/IdentityVerificationHubMultichain.test.ts Fixed payload format (4 locations), use TestMultichainDApp

Expected Improvements

After these fixes:

  • Test 10 should pass (contract size limit removed)
  • Tests 6-9 should pass (using correct contract)
  • Tests 1, 2, 5 should pass or show actual error (source hub configured, better error messages)
  • Tests 3, 4 should pass (payload format fixed)

Remaining Investigation

If tests still fail, the debug logs will show:

  • Hypothesis A: Bridge destination hub configuration
  • Hypothesis B: receiveMessage signature issues
  • Setup: Contract addresses and initialization

Next Steps

  1. Run tests with instrumentation
  2. Read debug log to see actual failure points
  3. Fix remaining issues based on evidence
  4. Remove instrumentation after success