wormhole/ethereum/forge-test/Bridge.t.sol

62 lines
1.6 KiB
Solidity

// SPDX-License-Identifier: Apache 2
pragma solidity ^0.8.0;
import "../contracts/bridge/Bridge.sol";
import "forge-std/Test.sol";
// @dev ensure some internal methods are public for testing
contract ExportedBridge is Bridge {
function _truncateAddressPub(bytes32 b) public pure returns (address) {
return super._truncateAddress(b);
}
function setChainIdPub(uint16 chainId) public {
return super.setChainId(chainId);
}
function setEvmChainIdPub(uint256 evmChainId) public {
return super.setEvmChainId(evmChainId);
}
}
contract TestBridge is Test {
ExportedBridge bridge;
function setUp() public {
bridge = new ExportedBridge();
}
function testTruncate(bytes32 b) public {
bool invalidAddress = bytes12(b) != 0;
if (invalidAddress) {
vm.expectRevert( "invalid EVM address");
}
bytes32 converted = bytes32(uint256(uint160(bytes20(bridge._truncateAddressPub(b)))));
if (!invalidAddress) {
require(converted == b, "truncate does not roundrip");
}
}
function testEvmChainId() public {
vm.chainId(1);
bridge.setChainIdPub(1);
bridge.setEvmChainIdPub(1);
assertEq(bridge.chainId(), 1);
assertEq(bridge.evmChainId(), 1);
// fork occurs, block.chainid changes
vm.chainId(10001);
bridge.setEvmChainIdPub(10001);
assertEq(bridge.chainId(), 1);
assertEq(bridge.evmChainId(), 10001);
// evmChainId must equal block.chainid
vm.expectRevert("invalid evmChainId");
bridge.setEvmChainIdPub(1337);
}
}