github.com/ethereum-optimism/optimism@v1.7.2/packages/contracts-bedrock/test/L1/SuperchainConfig.t.sol (about)

     1  // SPDX-License-Identifier: MIT
     2  pragma solidity 0.8.15;
     3  
     4  import { CommonTest } from "test/setup/CommonTest.sol";
     5  
     6  // Libraries
     7  import { Types } from "src/libraries/Types.sol";
     8  import { Hashing } from "src/libraries/Hashing.sol";
     9  
    10  // Target contract dependencies
    11  import { Proxy } from "src/universal/Proxy.sol";
    12  
    13  // Target contract
    14  import { SuperchainConfig } from "src/L1/SuperchainConfig.sol";
    15  
    16  contract SuperchainConfig_Init_Test is CommonTest {
    17      /// @dev Tests that initialization sets the correct values. These are defined in CommonTest.sol.
    18      function test_initialize_unpaused_succeeds() external {
    19          assertFalse(superchainConfig.paused());
    20          assertEq(superchainConfig.guardian(), deploy.cfg().superchainConfigGuardian());
    21      }
    22  
    23      /// @dev Tests that it can be intialized as paused.
    24      function test_initialize_paused_succeeds() external {
    25          Proxy newProxy = new Proxy(alice);
    26          SuperchainConfig newImpl = new SuperchainConfig();
    27  
    28          vm.startPrank(alice);
    29          newProxy.upgradeToAndCall(
    30              address(newImpl),
    31              abi.encodeWithSelector(SuperchainConfig.initialize.selector, deploy.cfg().superchainConfigGuardian(), true)
    32          );
    33  
    34          assertTrue(SuperchainConfig(address(newProxy)).paused());
    35          assertEq(SuperchainConfig(address(newProxy)).guardian(), deploy.cfg().superchainConfigGuardian());
    36      }
    37  }
    38  
    39  contract SuperchainConfig_Pause_TestFail is CommonTest {
    40      /// @dev Tests that `pause` reverts when called by a non-guardian.
    41      function test_pause_notGuardian_reverts() external {
    42          assertFalse(superchainConfig.paused());
    43  
    44          assertTrue(superchainConfig.guardian() != alice);
    45          vm.expectRevert("SuperchainConfig: only guardian can pause");
    46          vm.prank(alice);
    47          superchainConfig.pause("identifier");
    48  
    49          assertFalse(superchainConfig.paused());
    50      }
    51  }
    52  
    53  contract SuperchainConfig_Pause_Test is CommonTest {
    54      /// @dev Tests that `pause` successfully pauses
    55      ///      when called by the guardian.
    56      function test_pause_succeeds() external {
    57          assertFalse(superchainConfig.paused());
    58  
    59          vm.expectEmit(address(superchainConfig));
    60          emit Paused("identifier");
    61  
    62          vm.prank(superchainConfig.guardian());
    63          superchainConfig.pause("identifier");
    64  
    65          assertTrue(superchainConfig.paused());
    66      }
    67  }
    68  
    69  contract SuperchainConfig_Unpause_TestFail is CommonTest {
    70      /// @dev Tests that `unpause` reverts when called by a non-guardian.
    71      function test_unpause_notGuardian_reverts() external {
    72          vm.prank(superchainConfig.guardian());
    73          superchainConfig.pause("identifier");
    74          assertEq(superchainConfig.paused(), true);
    75  
    76          assertTrue(superchainConfig.guardian() != alice);
    77          vm.expectRevert("SuperchainConfig: only guardian can unpause");
    78          vm.prank(alice);
    79          superchainConfig.unpause();
    80  
    81          assertTrue(superchainConfig.paused());
    82      }
    83  }
    84  
    85  contract SuperchainConfig_Unpause_Test is CommonTest {
    86      /// @dev Tests that `unpause` successfully unpauses
    87      ///      when called by the guardian.
    88      function test_unpause_succeeds() external {
    89          vm.startPrank(superchainConfig.guardian());
    90          superchainConfig.pause("identifier");
    91          assertEq(superchainConfig.paused(), true);
    92  
    93          vm.expectEmit(address(superchainConfig));
    94          emit Unpaused();
    95          superchainConfig.unpause();
    96  
    97          assertFalse(superchainConfig.paused());
    98      }
    99  }