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

117 lines
3.2 KiB
Solidity

// test/Messages.sol
// SPDX-License-Identifier: Apache 2
pragma solidity ^0.8.0;
import "../contracts/Implementation.sol";
import "../contracts/Setup.sol";
import "../contracts/Wormhole.sol";
import "../contracts/interfaces/IWormhole.sol";
import "forge-test/rv-helpers/TestUtils.sol";
contract TestSetup is TestUtils {
Wormhole proxy;
Implementation impl;
Setup setup;
Setup proxiedSetup;
IWormhole proxied;
uint256 constant testGuardian = 93941733246223705020089879371323733820373732307041878556247502674739205313440;
bytes32 constant governanceContract = 0x0000000000000000000000000000000000000000000000000000000000000004;
function setUp() public {
// Deploy setup
setup = new Setup();
// Deploy implementation contract
impl = new Implementation();
// Deploy proxy
proxy = new Wormhole(address(setup), bytes(""));
address[] memory keys = new address[](1);
keys[0] = 0xbeFA429d57cD18b7F8A4d91A2da9AB4AF05d0FBe; // vm.addr(testGuardian)
//proxied setup
proxiedSetup = Setup(address(proxy));
vm.chainId(1);
proxiedSetup.setup({
implementation: address(impl),
initialGuardians: keys,
chainId: 2,
governanceChainId: 1,
governanceContract: governanceContract,
evmChainId: 1
});
proxied = IWormhole(address(proxy));
}
function testInitialize_after_setup_revert(bytes32 storageSlot, address alice)
public
unchangedStorage(address(proxied), storageSlot)
{
vm.prank(alice);
vm.expectRevert("already initialized");
proxied.initialize();
}
function testInitialize_after_setup_revert_KEVM(bytes32 storageSlot, address alice)
public
{
kevm.infiniteGas();
testInitialize_after_setup_revert(storageSlot, alice);
}
function testSetup_after_setup_revert(
bytes32 storageSlot,
address alice,
address implementation,
address initialGuardian,
uint16 chainId,
uint16 governanceChainId,
bytes32 govContract,
uint256 evmChainId)
public
unchangedStorage(address(proxied), storageSlot)
{
address[] memory keys = new address[](1);
keys[0] = initialGuardian;
vm.prank(alice);
vm.expectRevert("unsupported");
proxiedSetup.setup({
implementation: implementation,
initialGuardians: keys,
chainId: chainId,
governanceChainId: governanceChainId,
governanceContract: govContract,
evmChainId: evmChainId
});
}
function testSetup_after_setup_revert_KEVM(
bytes32 storageSlot,
address alice,
address implementation,
address initialGuardian,
uint16 chainId,
uint16 governanceChainId,
bytes32 govContract,
uint256 evmChainId)
public
{
kevm.infiniteGas();
testSetup_after_setup_revert(
storageSlot,
alice,
implementation,
initialGuardian,
chainId,
governanceChainId,
govContract,
evmChainId
);
}
}