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 }