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  }