Skip to content

Commit

Permalink
add missing automation logic and filter more solcover
Browse files Browse the repository at this point in the history
  • Loading branch information
RensR committed Mar 25, 2024
1 parent 9162338 commit 7b666da
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 0 deletions.
7 changes: 7 additions & 0 deletions contracts/.solcover.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,18 @@ module.exports = {
'v0.8/mocks',
'v0.8/interfaces',
'v0.8/vendor',
'v0.8/tests',
'v0.8/dev/interfaces',
'v0.8/dev/vendor',
'v0.8/dev/Keeper2_0/interfaces',
'v0.8/dev/transmission',
'v0.8/tests',
'v0.8/automation/testhelpers',
'v0.8/shared',
'v0.8/vrf/testhelpers',
'v0.8/vrf/mocks',
'v0.8/llo-feeds/test',
'v0.8/functions/tests',
],
istanbulReporter: ['text', 'text-summary', 'json'],
mocha: {
Expand Down
60 changes: 60 additions & 0 deletions contracts/src/v0.8/automation/testhelpers/UpkeepAutoFunder.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {AutomationCompatible} from "../AutomationCompatible.sol";
import {LinkTokenInterface} from "../../shared/interfaces/LinkTokenInterface.sol";
import {ConfirmedOwner} from "../../shared/access/ConfirmedOwner.sol";
import {AutomationRegistryBaseInterface} from "../interfaces/v2_0/AutomationRegistryInterface2_0.sol";

contract UpkeepAutoFunder is AutomationCompatible, ConfirmedOwner {
bool public s_isEligible;
bool public s_shouldCancel;
uint256 public s_upkeepId;
uint96 public s_autoFundLink;
LinkTokenInterface public immutable LINK;
AutomationRegistryBaseInterface public immutable s_keeperRegistry;

constructor(address linkAddress, address registryAddress) ConfirmedOwner(msg.sender) {
LINK = LinkTokenInterface(linkAddress);
s_keeperRegistry = AutomationRegistryBaseInterface(registryAddress);

s_isEligible = false;
s_shouldCancel = false;
s_upkeepId = 0;
s_autoFundLink = 0;
}

function setShouldCancel(bool value) external onlyOwner {
s_shouldCancel = value;
}

function setIsEligible(bool value) external onlyOwner {
s_isEligible = value;
}

function setAutoFundLink(uint96 value) external onlyOwner {
s_autoFundLink = value;
}

function setUpkeepId(uint256 value) external onlyOwner {
s_upkeepId = value;
}

function checkUpkeep(
bytes calldata data
) external override cannotExecute returns (bool callable, bytes calldata executedata) {
return (s_isEligible, data);
}

function performUpkeep(bytes calldata data) external override {
require(s_isEligible, "Upkeep should be eligible");
s_isEligible = false; // Allow upkeep only once until it is set again

// Topup upkeep so it can be called again
LINK.transferAndCall(address(s_keeperRegistry), s_autoFundLink, abi.encode(s_upkeepId));

if (s_shouldCancel) {
s_keeperRegistry.cancelUpkeep(s_upkeepId);
}
}
}
17 changes: 17 additions & 0 deletions contracts/src/v0.8/automation/testhelpers/UpkeepReverter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {AutomationCompatible} from "../AutomationCompatible.sol";

contract UpkeepReverter is AutomationCompatible {
function checkUpkeep(
bytes calldata data
) public view override cannotExecute returns (bool callable, bytes calldata executedata) {
require(false, "!working");
return (true, data);
}

function performUpkeep(bytes calldata) external pure override {
require(false, "!working");
}
}

0 comments on commit 7b666da

Please sign in to comment.