Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix test snapshot exclusion #15727

Merged
merged 11 commits into from
Dec 19, 2024
Merged
1,047 changes: 348 additions & 699 deletions contracts/gas-snapshots/ccip.gas-snapshot

Large diffs are not rendered by default.

23 changes: 2 additions & 21 deletions contracts/src/v0.8/ccip/test/BaseTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,6 @@ contract BaseTest is Test {
MockRMN internal s_mockRMN;
IRMNRemote internal s_mockRMNRemote;

// nonce for pseudo-random number generation, not to be exposed to test suites
uint256 private s_randNonce;

function setUp() public virtual {
// BaseTest.setUp is often called multiple times from tests' setUp due to inheritance.
if (s_baseTestInitialized) return;
Expand All @@ -69,16 +66,10 @@ contract BaseTest is Test {
s_mockRMNRemote = IRMNRemote(makeAddr("MOCK RMN REMOTE"));
vm.etch(address(s_mockRMNRemote), bytes("fake bytecode"));
vm.mockCall(address(s_mockRMNRemote), abi.encodeWithSelector(IRMNRemote.verify.selector), bytes(""));
_setMockRMNGlobalCurse(false);
vm.mockCall(address(s_mockRMNRemote), abi.encodeWithSignature("isCursed()"), abi.encode(false));
vm.mockCall(address(s_mockRMNRemote), abi.encodeWithSignature("isCursed(bytes16)"), abi.encode(false)); // no curses by defaule
}

function _setMockRMNGlobalCurse(
bool isCursed
) internal {
vm.mockCall(address(s_mockRMNRemote), abi.encodeWithSignature("isCursed()"), abi.encode(isCursed));
}

function _setMockRMNChainCurse(uint64 chainSelector, bool isCursed) internal {
vm.mockCall(
address(s_mockRMNRemote),
Expand Down Expand Up @@ -110,16 +101,6 @@ contract BaseTest is Test {

/// @dev returns a pseudo-random bytes32
function _randomBytes32() internal returns (bytes32) {
return keccak256(abi.encodePacked(++s_randNonce));
}

/// @dev returns a pseudo-random number
function _randomNum() internal returns (uint256) {
return uint256(_randomBytes32());
}

/// @dev returns a pseudo-random address
function _randomAddress() internal returns (address) {
return address(uint160(_randomNum()));
return bytes32(vm.randomUint());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {NonceManager} from "../../NonceManager.sol";
import {OnRampSetup} from "../onRamp/OnRamp/OnRampSetup.t.sol";

contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
function test_SingleRampUpdate_success() public {
function test_SingleRampUpdate() public {
address prevOnRamp = makeAddr("prevOnRamp");
address prevOffRamp = makeAddr("prevOffRamp");
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
Expand Down Expand Up @@ -80,7 +80,7 @@ contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
assertEq(vm.getRecordedLogs().length, 0);
}

function test_applyPreviousRampsUpdates_RevertWhen_PreviousRampAlreadySetOnRamp() public {
function test_RevertWhen_applyPreviousRampsUpdatesWhen_PreviousRampAlreadySetOnRamp() public {
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
address prevOnRamp = makeAddr("prevOnRamp");
previousRamps[0] = NonceManager.PreviousRampsArgs({
Expand All @@ -101,7 +101,7 @@ contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);
}

function test_applyPreviousRampsUpdates_RevertWhen_PreviousRampAlreadySetOffRamp() public {
function test_RevertWhen_applyPreviousRampsUpdatesWhen_PreviousRampAlreadySetOffRamp() public {
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
address prevOffRamp = makeAddr("prevOffRamp");
previousRamps[0] = NonceManager.PreviousRampsArgs({
Expand All @@ -122,7 +122,7 @@ contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
s_outboundNonceManager.applyPreviousRampsUpdates(previousRamps);
}

function test_applyPreviousRampsUpdates_RevertWhen_PreviousRampAlreadySetOnRampAndOffRamp_Revert() public {
function test_RevertWhen_applyPreviousRampsUpdatesWhen_PreviousRampAlreadySetOnRampAndOffRamp_Revert() public {
NonceManager.PreviousRampsArgs[] memory previousRamps = new NonceManager.PreviousRampsArgs[](1);
address prevOnRamp = makeAddr("prevOnRamp");
address prevOffRamp = makeAddr("prevOffRamp");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ contract DefensiveExampleTest is OnRampSetup {
assertEq(IERC20(token).balanceOf(address(s_receiver)), receiverBalancePre - amount);
}

function test_HappyPath_Success() public {
function test_HappyPath() public {
bytes32 messageId = keccak256("messageId");
address token = address(s_destFeeToken);
uint256 amount = 111333333777;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ contract EtherSenderReceiverTest_ccipSend is EtherSenderReceiverTestSetup {
}
}

function test_ccipSend_reverts_insufficientFee_weth() public {
function test_RevertWhen_ccipSends_insufficientFee_weth() public {
Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
tokenAmounts[0] = Client.EVMTokenAmount({
token: address(0), // callers may not specify this.
Expand Down Expand Up @@ -127,7 +127,7 @@ contract EtherSenderReceiverTest_ccipSend is EtherSenderReceiverTestSetup {
s_etherSenderReceiver.ccipSend{value: AMOUNT}(DESTINATION_CHAIN_SELECTOR, message);
}

function test_ccipSend_reverts_insufficientFee_feeToken() public {
function test_RevertWhen_ccipSends_insufficientFee_feeToken() public {
Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
tokenAmounts[0] = Client.EVMTokenAmount({
token: address(0), // callers may not specify this.
Expand Down Expand Up @@ -155,7 +155,7 @@ contract EtherSenderReceiverTest_ccipSend is EtherSenderReceiverTestSetup {
s_etherSenderReceiver.ccipSend{value: AMOUNT}(DESTINATION_CHAIN_SELECTOR, message);
}

function test_ccipSend_reverts_insufficientFee_native() public {
function test_RevertWhen_ccipSends_insufficientFee_native() public {
Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
tokenAmounts[0] = Client.EVMTokenAmount({
token: address(0), // callers may not specify this.
Expand All @@ -181,7 +181,7 @@ contract EtherSenderReceiverTest_ccipSend is EtherSenderReceiverTestSetup {
s_etherSenderReceiver.ccipSend{value: AMOUNT + FEE_WEI - 1}(DESTINATION_CHAIN_SELECTOR, message);
}

function test_ccipSend_success_nativeExcess() public {
function test_ccipSend_nativeExcess() public {
Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
tokenAmounts[0] = Client.EVMTokenAmount({
token: address(0), // callers may not specify this.
Expand Down Expand Up @@ -218,7 +218,7 @@ contract EtherSenderReceiverTest_ccipSend is EtherSenderReceiverTestSetup {
assertEq(actualMsgId, expectedMsgId, "message id must be correct");
}

function test_ccipSend_success_native() public {
function test_ccipSend_native() public {
Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
tokenAmounts[0] = Client.EVMTokenAmount({
token: address(0), // callers may not specify this.
Expand Down Expand Up @@ -251,7 +251,7 @@ contract EtherSenderReceiverTest_ccipSend is EtherSenderReceiverTestSetup {
assertEq(actualMsgId, expectedMsgId, "message id must be correct");
}

function test_ccipSend_success_feeToken() public {
function test_ccipSend_feeToken() public {
Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
tokenAmounts[0] = Client.EVMTokenAmount({
token: address(0), // callers may not specify this.
Expand Down Expand Up @@ -287,7 +287,7 @@ contract EtherSenderReceiverTest_ccipSend is EtherSenderReceiverTestSetup {
assertEq(routerAllowance, FEE_JUELS, "router allowance must be feeJuels");
}

function test_ccipSend_success_weth() public {
function test_ccipSend_weth() public {
Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
tokenAmounts[0] = Client.EVMTokenAmount({
token: address(0), // callers may not specify this.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ contract EtherSenderReceiverTest_validateFeeToken is EtherSenderReceiverTestSetu
s_etherSenderReceiver.validateFeeToken{value: AMOUNT}(message);
}

function test_validateFeeToken_reverts_feeToken_tokenAmountNotEqualToMsgValue() public {
function test_RevertWhen_validateFeeTokens_feeToken_tokenAmountNotEqualToMsgValue() public {
Client.EVMTokenAmount[] memory tokenAmount = new Client.EVMTokenAmount[](1);
tokenAmount[0] = Client.EVMTokenAmount({token: address(s_weth), amount: AMOUNT});
Client.EVM2AnyMessage memory message = Client.EVM2AnyMessage({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {ERC165Checker} from
"../../../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/introspection/ERC165Checker.sol";

contract CCIPClientExample_sanity is OnRampSetup {
function test_ImmutableExamples_Success() public {
function test_ImmutableExamples() public {
CCIPClientExample exampleContract = new CCIPClientExample(s_sourceRouter, IERC20(s_sourceFeeToken));
deal(address(exampleContract), 100 ether);
deal(s_sourceFeeToken, address(exampleContract), 100 ether);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {Client} from "../../../libraries/Client.sol";
import {PingPongDappSetup} from "./PingPongDappSetup.t.sol";

contract PingPong_ccipReceive is PingPongDappSetup {
function test_CcipReceive_Success() public {
function test_CcipReceive() public {
Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](0);

uint256 pingPongNumber = 5;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {PingPongDemo} from "../../../applications/PingPongDemo.sol";
import {PingPongDappSetup} from "./PingPongDappSetup.t.sol";

contract PingPong_setOutOfOrderExecution is PingPongDappSetup {
function test_OutOfOrderExecution_Success() public {
function test_OutOfOrderExecution() public {
assertFalse(s_pingPong.getOutOfOrderExecution());

vm.expectEmit();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma solidity 0.8.24;
import {PingPongDappSetup} from "./PingPongDappSetup.t.sol";

contract PingPong_setPaused is PingPongDappSetup {
function test_Pausing_Success() public {
function test_Pausing() public {
assertFalse(s_pingPong.isPaused());

s_pingPong.setPaused(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ import {PingPongDappSetup} from "./PingPongDappSetup.t.sol";
contract PingPong_startPingPong is PingPongDappSetup {
uint256 internal s_pingPongNumber = 1;

function test_StartPingPong_With_Sequenced_Ordered_Success() public {
function test_StartPingPong_With_Sequenced_Ordered() public {
_assertPingPongSuccess();
}

function test_StartPingPong_With_OOO_Success() public {
function test_StartPingPong_With_OOO() public {
s_pingPong.setOutOfOrderExecution(true);

_assertPingPongSuccess();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ contract OnRampTokenPoolReentrancy is OnRampSetup {
/// (reenter)-> Facade -> 2nd call to ccipSend
/// In this case, Facade's second call would produce an EVM2Any msg with a lower sequence number.
/// The issue was fixed by implementing a reentrancy guard in OnRamp.
function test_OnRampTokenPoolReentrancy_Success() public {
function test_OnRampTokenPoolReentrancy() public {
uint256 amount = 1;

Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTestSetup {
s_ccipHome = new CCIPHomeHelper(CAPABILITIES_REGISTRY);
}

function test_applyChainConfigUpdates_addChainConfigs_Success() public {
function test_applyChainConfigUpdates_addChainConfigs() public {
bytes32[] memory chainReaders = new bytes32[](1);
chainReaders[0] = keccak256(abi.encode(1));
CCIPHome.ChainConfigArgs[] memory adds = new CCIPHome.ChainConfigArgs[](2);
Expand Down Expand Up @@ -54,7 +54,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTestSetup {
assertEq(s_ccipHome.getNumChainConfigurations(), 2, "total chain configs must be 2");
}

function test_getPaginatedCCIPHomes_Success() public {
function test_getPaginatedCCIPHomes() public {
bytes32[] memory chainReaders = new bytes32[](1);
chainReaders[0] = keccak256(abi.encode(1));
CCIPHome.ChainConfigArgs[] memory adds = new CCIPHome.ChainConfigArgs[](2);
Expand Down Expand Up @@ -106,7 +106,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTestSetup {
assertEq(configs.length, 0, "chain configs length must be 0");
}

function test_applyChainConfigUpdates_removeChainConfigs_Success() public {
function test_applyChainConfigUpdates_removeChainConfigs() public {
bytes32[] memory chainReaders = new bytes32[](1);
chainReaders[0] = keccak256(abi.encode(1));

Expand Down Expand Up @@ -162,15 +162,15 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTestSetup {

// Reverts.

function test_applyChainConfigUpdates_selectorNotFound_Reverts() public {
function test_RevertWhen_applyChainConfigUpdates_selectorNotFound() public {
uint64[] memory removes = new uint64[](1);
removes[0] = uint64(1);

vm.expectRevert(abi.encodeWithSelector(CCIPHome.ChainSelectorNotFound.selector, 1));
s_ccipHome.applyChainConfigUpdates(removes, new CCIPHome.ChainConfigArgs[](0));
}

function test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() public {
function test_RevertWhen_applyChainConfigUpdates_nodeNotInRegistry() public {
bytes32[] memory chainReaders = new bytes32[](1);
chainReaders[0] = keccak256(abi.encode(1));
CCIPHome.ChainConfigArgs[] memory adds = new CCIPHome.ChainConfigArgs[](1);
Expand All @@ -189,7 +189,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTestSetup {
s_ccipHome.applyChainConfigUpdates(new uint64[](0), adds);
}

function test__applyChainConfigUpdates_FChainNotPositive_Reverts() public {
function test_RevertWhen__applyChainConfigUpdates_FChainNotPositive() public {
bytes32[] memory chainReaders = new bytes32[](1);
chainReaders[0] = keccak256(abi.encode(1));
CCIPHome.ChainConfigArgs[] memory adds = new CCIPHome.ChainConfigArgs[](2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ contract CCIPHome_beforeCapabilityConfigSet is CCIPHomeTestSetup {
vm.startPrank(address(CAPABILITIES_REGISTRY));
}

function test_beforeCapabilityConfigSet_success() public {
function test_beforeCapabilityConfigSet() public {
// first set a config
bytes memory callData = abi.encodeCall(
CCIPHome.setCandidate,
Expand Down Expand Up @@ -61,7 +61,7 @@ contract CCIPHome_beforeCapabilityConfigSet is CCIPHomeTestSetup {
assertEq(activeDigest, newCandidateDigest);
}

function test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() public {
function test_RevertWhen_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall() public {
bytes memory callData = abi.encodeCall(
CCIPHome.setCandidate,
(DEFAULT_DON_ID, DEFAULT_PLUGIN_TYPE, _getBaseConfig(Internal.OCRPluginType.Commit), ZERO_DIGEST)
Expand All @@ -74,14 +74,14 @@ contract CCIPHome_beforeCapabilityConfigSet is CCIPHomeTestSetup {
s_ccipHome.beforeCapabilityConfigSet(new bytes32[](0), callData, 0, DEFAULT_DON_ID);
}

function test_beforeCapabilityConfigSet_InvalidSelector_reverts() public {
function test_RevertWhen_beforeCapabilityConfigSet_InvalidSelector() public {
bytes memory callData = abi.encodeCall(CCIPHome.getConfigDigests, (DEFAULT_DON_ID, DEFAULT_PLUGIN_TYPE));

vm.expectRevert(abi.encodeWithSelector(CCIPHome.InvalidSelector.selector, CCIPHome.getConfigDigests.selector));
s_ccipHome.beforeCapabilityConfigSet(new bytes32[](0), callData, 0, DEFAULT_DON_ID);
}

function test_beforeCapabilityConfigSet_DONIdMismatch_reverts() public {
function test_RevertWhen_beforeCapabilityConfigSet_DONIdMismatch() public {
uint32 wrongDonId = DEFAULT_DON_ID + 1;

bytes memory callData = abi.encodeCall(
Expand All @@ -93,7 +93,7 @@ contract CCIPHome_beforeCapabilityConfigSet is CCIPHomeTestSetup {
s_ccipHome.beforeCapabilityConfigSet(new bytes32[](0), callData, 0, wrongDonId);
}

function test_beforeCapabilityConfigSet_InnerCallReverts_reverts() public {
function test_RevertWhen_beforeCapabilityConfigSet_InnerCallReverts() public {
bytes memory callData = abi.encodeCall(CCIPHome.revokeCandidate, (DEFAULT_DON_ID, DEFAULT_PLUGIN_TYPE, ZERO_DIGEST));

vm.expectRevert(CCIPHome.RevokingZeroDigestNotAllowed.selector);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ import {CCIPHome} from "../../../capability/CCIPHome.sol";
import {CCIPHomeTestSetup} from "./CCIPHomeTestSetup.t.sol";

contract CCIPHome_constructor is CCIPHomeTestSetup {
function test_constructor_success() public {
function test_constructor() public {
CCIPHome ccipHome = new CCIPHome(CAPABILITIES_REGISTRY);

assertEq(address(ccipHome.getCapabilityRegistry()), CAPABILITIES_REGISTRY);
}

function test_constructor_CapabilitiesRegistryAddressZero_reverts() public {
function test_RevertWhen_constructor_CapabilitiesRegistryAddressZero() public {
vm.expectRevert(CCIPHome.ZeroAddressNotAllowed.selector);
new CCIPHome(address(0));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {Internal} from "../../../libraries/Internal.sol";
import {CCIPHomeTestSetup} from "./CCIPHomeTestSetup.t.sol";

contract CCIPHome_getAllConfigs is CCIPHomeTestSetup {
function test_getAllConfigs_success() public {
function test_getAllConfigs() public {
CCIPHome.OCR3Config memory config = _getBaseConfig(Internal.OCRPluginType.Commit);
bytes32 firstDigest = s_ccipHome.setCandidate(DEFAULT_DON_ID, DEFAULT_PLUGIN_TYPE, config, ZERO_DIGEST);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma solidity 0.8.24;
import {CCIPHomeTestSetup} from "./CCIPHomeTestSetup.t.sol";

contract CCIPHome_getCapabilityConfiguration is CCIPHomeTestSetup {
function test_getCapabilityConfiguration_success() public view {
function test_getCapabilityConfiguration() public view {
bytes memory config = s_ccipHome.getCapabilityConfiguration(DEFAULT_DON_ID);
assertEq(config.length, 0);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {Internal} from "../../../libraries/Internal.sol";
import {CCIPHomeTestSetup} from "./CCIPHomeTestSetup.t.sol";

contract CCIPHome_getConfigDigests is CCIPHomeTestSetup {
function test_getConfigDigests_success() public {
function test_getConfigDigests() public {
(bytes32 activeDigest, bytes32 candidateDigest) = s_ccipHome.getConfigDigests(DEFAULT_DON_ID, DEFAULT_PLUGIN_TYPE);
assertEq(activeDigest, ZERO_DIGEST);
assertEq(candidateDigest, ZERO_DIGEST);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {Internal} from "../../../libraries/Internal.sol";
import {CCIPHomeTestSetup} from "./CCIPHomeTestSetup.t.sol";

contract CCIPHome_promoteCandidateAndRevokeActive is CCIPHomeTestSetup {
function test_promoteCandidateAndRevokeActive_multiplePlugins_success() public {
function test_promoteCandidateAndRevokeActive_multiplePlugins() public {
promoteCandidateAndRevokeActive(Internal.OCRPluginType.Commit);
promoteCandidateAndRevokeActive(Internal.OCRPluginType.Execution);

Expand Down Expand Up @@ -57,12 +57,12 @@ contract CCIPHome_promoteCandidateAndRevokeActive is CCIPHomeTestSetup {
assertEq(keccak256(abi.encode(activeConfig.config)), keccak256(abi.encode(config)));
}

function test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() public {
function test_RevertWhen_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed() public {
vm.expectRevert(CCIPHome.NoOpStateTransitionNotAllowed.selector);
s_ccipHome.promoteCandidateAndRevokeActive(DEFAULT_DON_ID, DEFAULT_PLUGIN_TYPE, ZERO_DIGEST, ZERO_DIGEST);
}

function test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() public {
function test_RevertWhen_promoteCandidateAndRevokeActive_ConfigDigestMismatch() public {
(bytes32 priorActiveDigest, bytes32 priorCandidateDigest) =
s_ccipHome.getConfigDigests(DEFAULT_DON_ID, DEFAULT_PLUGIN_TYPE);
bytes32 wrongActiveDigest = keccak256("wrongActiveDigest");
Expand All @@ -84,7 +84,7 @@ contract CCIPHome_promoteCandidateAndRevokeActive is CCIPHomeTestSetup {
);
}

function test_promoteCandidateAndRevokeActive_CanOnlySelfCall_reverts() public {
function test_RevertWhen_promoteCandidateAndRevokeActive_CanOnlySelfCall() public {
vm.stopPrank();

vm.expectRevert(CCIPHome.CanOnlySelfCall.selector);
Expand Down
Loading