github.com/ethereum-optimism/optimism@v1.7.2/packages/contracts-bedrock/test/periphery/Transactor.t.sol (about) 1 // SPDX-License-Identifier: MIT 2 pragma solidity 0.8.15; 3 4 // Testing utilities 5 import { Test } from "forge-std/Test.sol"; 6 import { CallRecorder, Reverter } from "test/mocks/Callers.sol"; 7 import { Transactor } from "src/periphery/Transactor.sol"; 8 9 contract Transactor_Initializer is Test { 10 address alice = address(128); 11 address bob = address(256); 12 13 Transactor transactor; 14 Reverter reverter; 15 CallRecorder callRecorded; 16 17 function setUp() public { 18 // Deploy Reverter and CallRecorder helper contracts 19 reverter = new Reverter(); 20 callRecorded = new CallRecorder(); 21 22 // Deploy Transactor contract 23 transactor = new Transactor(address(alice)); 24 vm.label(address(transactor), "Transactor"); 25 26 // Give alice and bob some ETH 27 vm.deal(alice, 1 ether); 28 vm.deal(bob, 1 ether); 29 30 vm.label(alice, "alice"); 31 vm.label(bob, "bob"); 32 } 33 } 34 35 contract TransactorTest is Transactor_Initializer { 36 /// @notice Tests if the owner was set correctly during deploy 37 function test_constructor_succeeds() external { 38 assertEq(address(alice), transactor.owner()); 39 } 40 41 /// @notice Tests CALL, should do a call to target 42 function test_call_succeeds() external { 43 // Initialize call data 44 bytes memory data = abi.encodeWithSelector(callRecorded.record.selector); 45 // Run CALL 46 vm.prank(alice); 47 vm.expectCall(address(callRecorded), 200_000 wei, data); 48 transactor.CALL(address(callRecorded), data, 200_000 wei); 49 } 50 51 /// @notice It should revert if called by non-owner 52 function test_call_unauthorized_reverts() external { 53 // Initialize call data 54 bytes memory data = abi.encodeWithSelector(callRecorded.record.selector); 55 // Run CALL 56 vm.prank(bob); 57 vm.expectRevert("UNAUTHORIZED"); 58 transactor.CALL(address(callRecorded), data, 200_000 wei); 59 } 60 61 /// @notice Deletate call succeeds. 62 function test_delegateCall_succeeds() external { 63 // Initialize call data 64 bytes memory data = abi.encodeWithSelector(reverter.doRevert.selector); 65 // Run CALL 66 vm.prank(alice); 67 vm.expectCall(address(reverter), data); 68 transactor.DELEGATECALL(address(reverter), data); 69 } 70 71 /// @notice It should revert if called by non-owner 72 function test_delegateCall_unauthorized_reverts() external { 73 // Initialize call data 74 bytes memory data = abi.encodeWithSelector(reverter.doRevert.selector); 75 // Run CALL 76 vm.prank(bob); 77 vm.expectRevert("UNAUTHORIZED"); 78 transactor.DELEGATECALL(address(reverter), data); 79 } 80 }