Re-enable solidity coverage

- Upgrade version
- Re-enable in travis.yml
- Move mocks to contracts folder for instrumentation
This commit is contained in:
Santiago Palladino
2017-12-19 13:34:35 -03:00
parent ddcae6254e
commit 1455a5a942
43 changed files with 127 additions and 1044 deletions

View File

@ -1,15 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/token/BasicToken.sol';
// mock class using BasicToken
contract BasicTokenMock is BasicToken {
function BasicTokenMock(address initialAccount, uint256 initialBalance) public {
balances[initialAccount] = initialBalance;
totalSupply = initialBalance;
}
}

View File

@ -1,12 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/token/BurnableToken.sol';
contract BurnableTokenMock is BurnableToken {
function BurnableTokenMock(address initialAccount, uint initialBalance) public {
balances[initialAccount] = initialBalance;
totalSupply = initialBalance;
}
}

View File

@ -1,21 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/crowdsale/CappedCrowdsale.sol';
contract CappedCrowdsaleImpl is CappedCrowdsale {
function CappedCrowdsaleImpl (
uint256 _startTime,
uint256 _endTime,
uint256 _rate,
address _wallet,
uint256 _cap
) public
Crowdsale(_startTime, _endTime, _rate, _wallet)
CappedCrowdsale(_cap)
{
}
}

View File

@ -1,23 +0,0 @@
pragma solidity ^0.4.18;
import "../../contracts/DayLimit.sol";
contract DayLimitMock is DayLimit {
uint256 public totalSpending;
function DayLimitMock(uint256 _value) public DayLimit(_value) {
totalSpending = 0;
}
function attemptSpend(uint256 _value) external limitedDaily(_value) {
totalSpending += _value;
}
function setDailyLimit(uint256 _newLimit) external {
_setDailyLimit(_newLimit);
}
function resetSpentToday() external {
_resetSpentToday();
}
}

View File

@ -1,8 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/token/StandardToken.sol';
import '../../contracts/token/DetailedERC20.sol';
contract DetailedERC20Mock is StandardToken, DetailedERC20 {
function DetailedERC20Mock(string _name, string _symbol, uint8 _decimals) DetailedERC20(_name, _symbol, _decimals) public {}
}

View File

@ -1,33 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/token/BasicToken.sol';
contract ERC23ContractInterface {
function tokenFallback(address _from, uint256 _value, bytes _data) external;
}
contract ERC23TokenMock is BasicToken {
function ERC23TokenMock(address initialAccount, uint256 initialBalance) public {
balances[initialAccount] = initialBalance;
totalSupply = initialBalance;
}
// ERC23 compatible transfer function (except the name)
function transferERC23(address _to, uint256 _value, bytes _data) public
returns (bool success)
{
transfer(_to, _value);
bool is_contract = false;
assembly {
is_contract := not(iszero(extcodesize(_to)))
}
if(is_contract) {
ERC23ContractInterface receiver = ERC23ContractInterface(_to);
receiver.tokenFallback(msg.sender, _value, _data);
}
return true;
}
}

View File

@ -1,20 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/crowdsale/FinalizableCrowdsale.sol';
contract FinalizableCrowdsaleImpl is FinalizableCrowdsale {
function FinalizableCrowdsaleImpl (
uint256 _startTime,
uint256 _endTime,
uint256 _rate,
address _wallet
) public
Crowdsale(_startTime, _endTime, _rate, _wallet)
FinalizableCrowdsale()
{
}
}

View File

@ -1,15 +0,0 @@
pragma solidity ^0.4.18;
// @title Force Ether into a contract.
// @notice even
// if the contract is not payable.
// @notice To use, construct the contract with the target as argument.
// @author Remco Bloemen <remco@neufund.org>
contract ForceEther {
function ForceEther() public payable { }
function destroyAndSend(address _recipient) public {
selfdestruct(_recipient);
}
}

View File

@ -1,11 +0,0 @@
pragma solidity ^0.4.18;
import "../../contracts/ownership/HasNoEther.sol";
contract HasNoEtherTest is HasNoEther {
// Constructor with explicit payable — should still fail
function HasNoEtherTest() public payable {
}
}

View File

@ -1,17 +0,0 @@
pragma solidity ^0.4.18;
import {Bounty, Target} from "../../contracts/Bounty.sol";
contract InsecureTargetMock is Target {
function checkInvariant() public returns(bool){
return false;
}
}
contract InsecureTargetBounty is Bounty {
function deployContract() internal returns (address) {
return new InsecureTargetMock();
}
}

View File

@ -1,13 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/LimitBalance.sol';
// mock class using LimitBalance
contract LimitBalanceMock is LimitBalance(1000) {
function limitedDeposit() public payable limitedPayable {
}
}

View File

@ -1,25 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/lifecycle/Pausable.sol';
// mock class using Pausable
contract PausableMock is Pausable {
bool public drasticMeasureTaken;
uint256 public count;
function PausableMock() public {
drasticMeasureTaken = false;
count = 0;
}
function normalProcess() external whenNotPaused {
count++;
}
function drasticMeasure() external whenPaused {
drasticMeasureTaken = true;
}
}

View File

@ -1,12 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/token/PausableToken.sol';
// mock class using PausableToken
contract PausableTokenMock is PausableToken {
function PausableTokenMock(address initialAccount, uint initialBalance) public {
balances[initialAccount] = initialBalance;
}
}

View File

@ -1,17 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/payment/PullPayment.sol';
// mock class using PullPayment
contract PullPaymentMock is PullPayment {
function PullPaymentMock() public payable { }
// test helper function to call asyncSend
function callSend(address dest, uint256 amount) public {
asyncSend(dest, amount);
}
}

View File

@ -1,69 +0,0 @@
pragma solidity ^0.4.8;
import '../../contracts/ownership/rbac/RBAC.sol';
contract RBACMock is RBAC {
string constant ROLE_ADVISOR = "advisor";
modifier onlyAdminOrAdvisor()
{
require(
hasRole(msg.sender, ROLE_ADMIN) ||
hasRole(msg.sender, ROLE_ADVISOR)
);
_;
}
function RBACMock(address[] _advisors)
public
{
addRole(msg.sender, ROLE_ADVISOR);
for (uint256 i = 0; i < _advisors.length; i++) {
addRole(_advisors[i], ROLE_ADVISOR);
}
}
function onlyAdminsCanDoThis()
onlyAdmin
view
external
{
}
function onlyAdvisorsCanDoThis()
onlyRole(ROLE_ADVISOR)
view
external
{
}
function eitherAdminOrAdvisorCanDoThis()
onlyAdminOrAdvisor
view
external
{
}
function nobodyCanDoThis()
onlyRole("unknown")
view
external
{
}
// admins can remove advisor's role
function removeAdvisor(address _addr)
onlyAdmin
public
{
// revert if the user isn't an advisor
// (perhaps you want to soft-fail here instead?)
checkRole(_addr, ROLE_ADVISOR);
// remove the advisor's role
removeRole(_addr, ROLE_ADVISOR);
}
}

View File

@ -1,9 +0,0 @@
pragma solidity ^0.4.18;
contract ReentrancyAttack {
function callSender(bytes4 data) public {
require(msg.sender.call(data));
}
}

View File

@ -1,44 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/ReentrancyGuard.sol';
import './ReentrancyAttack.sol';
contract ReentrancyMock is ReentrancyGuard {
uint256 public counter;
function ReentrancyMock() public {
counter = 0;
}
function count() private {
counter += 1;
}
function countLocalRecursive(uint256 n) public nonReentrant {
if(n > 0) {
count();
countLocalRecursive(n - 1);
}
}
function countThisRecursive(uint256 n) public nonReentrant {
bytes4 func = bytes4(keccak256("countThisRecursive(uint256)"));
if(n > 0) {
count();
bool result = this.call(func, n - 1);
require(result == true);
}
}
function countAndCall(ReentrancyAttack attacker) public nonReentrant {
count();
bytes4 func = bytes4(keccak256("callback()"));
attacker.callSender(func);
}
function callback() external nonReentrant {
count();
}
}

View File

@ -1,21 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/crowdsale/RefundableCrowdsale.sol';
contract RefundableCrowdsaleImpl is RefundableCrowdsale {
function RefundableCrowdsaleImpl (
uint256 _startTime,
uint256 _endTime,
uint256 _rate,
address _wallet,
uint256 _goal
) public
Crowdsale(_startTime, _endTime, _rate, _wallet)
RefundableCrowdsale(_goal)
{
}
}

View File

@ -1,84 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/token/ERC20.sol';
import '../../contracts/token/SafeERC20.sol';
contract ERC20FailingMock is ERC20 {
function transfer(address, uint256) public returns (bool) {
return false;
}
function transferFrom(address, address, uint256) public returns (bool) {
return false;
}
function approve(address, uint256) public returns (bool) {
return false;
}
function balanceOf(address) public constant returns (uint256) {
return 0;
}
function allowance(address, address) public constant returns (uint256) {
return 0;
}
}
contract ERC20SucceedingMock is ERC20 {
function transfer(address, uint256) public returns (bool) {
return true;
}
function transferFrom(address, address, uint256) public returns (bool) {
return true;
}
function approve(address, uint256) public returns (bool) {
return true;
}
function balanceOf(address) public constant returns (uint256) {
return 0;
}
function allowance(address, address) public constant returns (uint256) {
return 0;
}
}
contract SafeERC20Helper {
using SafeERC20 for ERC20;
ERC20 failing;
ERC20 succeeding;
function SafeERC20Helper() public {
failing = new ERC20FailingMock();
succeeding = new ERC20SucceedingMock();
}
function doFailingTransfer() public {
failing.safeTransfer(0, 0);
}
function doFailingTransferFrom() public {
failing.safeTransferFrom(0, 0, 0);
}
function doFailingApprove() public {
failing.safeApprove(0, 0);
}
function doSucceedingTransfer() public {
succeeding.safeTransfer(0, 0);
}
function doSucceedingTransferFrom() public {
succeeding.safeTransferFrom(0, 0, 0);
}
function doSucceedingApprove() public {
succeeding.safeApprove(0, 0);
}
}

View File

@ -1,21 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/math/SafeMath.sol';
contract SafeMathMock {
uint256 public result;
function multiply(uint256 a, uint256 b) public {
result = SafeMath.mul(a, b);
}
function subtract(uint256 a, uint256 b) public {
result = SafeMath.sub(a, b);
}
function add(uint256 a, uint256 b) public {
result = SafeMath.add(a, b);
}
}

View File

@ -1,17 +0,0 @@
pragma solidity ^0.4.18;
import {Bounty, Target} from "../../contracts/Bounty.sol";
contract SecureTargetMock is Target {
function checkInvariant() public returns(bool) {
return true;
}
}
contract SecureTargetBounty is Bounty {
function deployContract() internal returns (address) {
return new SecureTargetMock();
}
}

View File

@ -1,15 +0,0 @@
pragma solidity ^0.4.18;
import '../../contracts/token/StandardToken.sol';
// mock class using StandardToken
contract StandardTokenMock is StandardToken {
function StandardTokenMock(address initialAccount, uint256 initialBalance) public {
balances[initialAccount] = initialBalance;
totalSupply = initialBalance;
}
}