add receiving and rejecting ether tests

This commit is contained in:
Ricardo Guilherme Schmidt
2023-09-26 02:41:52 -03:00
parent 9ca2aa6164
commit 2e02cea311
3 changed files with 73 additions and 7 deletions

View File

@@ -8,18 +8,19 @@
| approveAndCall | 0 | 31201 | 0 | 93603 | 3 |
| balanceOf | 0 | 285 | 0 | 2753 | 51 |
| balanceOfAt | 0 | 90 | 0 | 2363 | 26 |
| changeController | 0 | 634 | 0 | 3558 | 8 |
| changeController | 0 | 507 | 0 | 3558 | 10 |
| claimTokens | 9537 | 41281 | 57154 | 57154 | 3 |
| controller | 0 | 0 | 0 | 0 | 7 |
| controller | 0 | 0 | 0 | 0 | 8 |
| createCloneToken | 0 | 924533 | 924533 | 1849066 | 2 |
| decimals | 0 | 0 | 0 | 0 | 7 |
| decimals | 0 | 0 | 0 | 0 | 8 |
| destroyTokens | 2308 | 5206 | 4310 | 9001 | 3 |
| enableTransfers | 0 | 0 | 0 | 0 | 3 |
| generateTokens | 0 | 7184 | 0 | 95808 | 40 |
| name | 0 | 0 | 0 | 0 | 7 |
| parentSnapShotBlock | 0 | 0 | 0 | 0 | 8 |
| parentToken | 0 | 0 | 0 | 0 | 8 |
| symbol | 0 | 0 | 0 | 0 | 7 |
| name | 0 | 0 | 0 | 0 | 8 |
| parentSnapShotBlock | 0 | 0 | 0 | 0 | 9 |
| parentToken | 0 | 0 | 0 | 0 | 9 |
| receive | 7960 | 7979 | 7979 | 7998 | 2 |
| symbol | 0 | 0 | 0 | 0 | 8 |
| totalSupply | 0 | 212 | 0 | 1911 | 9 |
| totalSupplyAt | 0 | 285 | 0 | 1995 | 7 |
| transfer | 526 | 38443 | 50395 | 75193 | 18 |

View File

@@ -22,6 +22,9 @@ GenerateTokensTest:testGenerateTokens() (gas: 109518)
GenerateTokensTest:testGenerateTokensSupplyOverflow() (gas: 3126)
GenerateTokensTest:test_RevertWhen_SenderIsNotController() (gas: 14951)
MiniMeTokenTest:testDeployment() (gas: 26535)
ReceiveTest:testAcceptingEther() (gas: 18628)
ReceiveTest:testDeployment() (gas: 26595)
ReceiveTest:testRejectingEther() (gas: 18691)
ReentrancyTest:testAttack() (gas: 229394)
TransferTest:testDeployment() (gas: 26617)
TransferTest:testDoubleTransfer() (gas: 92425)

View File

@@ -62,6 +62,22 @@ contract MiniMeTokenTest is Test {
}
}
contract AcceptingController is TokenController {
receive() external payable { }
function proxyPayment(address) public payable override returns (bool) {
return true;
}
function onTransfer(address, address, uint256) public pure override returns (bool) {
return true;
}
function onApprove(address, address, uint256) public pure override returns (bool) {
return true;
}
}
contract RejectingController is TokenController {
function proxyPayment(address) public payable override returns (bool) {
return false;
@@ -76,6 +92,52 @@ contract RejectingController is TokenController {
}
}
contract ReceiveTest is MiniMeTokenTest {
function setUp() public virtual override {
MiniMeTokenTest.setUp();
}
function testAcceptingEther() public {
vm.pauseGasMetering();
AcceptingController acceptingController = new AcceptingController();
vm.prank(deployer);
minimeToken.changeController(payable(address(acceptingController)));
vm.deal(address(accounts[0]), 10 ether);
vm.startPrank(address(accounts[0]));
vm.resumeGasMetering();
(bool result,) = payable(address(minimeToken)).call{ value: 1 ether }("");
vm.pauseGasMetering();
vm.stopPrank();
assertTrue(result, "ether transfer should be successful");
assertEq(address(minimeToken).balance, 0, "minimeToken balance should be correct");
assertEq(address(acceptingController).balance, 1 ether, "acceptingController balance should be correct");
assertEq(address(accounts[0]).balance, 9 ether, "account balance should be correct");
vm.resumeGasMetering();
}
function testRejectingEther() public {
vm.pauseGasMetering();
RejectingController rejectingController = new RejectingController();
vm.prank(deployer);
minimeToken.changeController(payable(address(rejectingController)));
vm.deal(address(accounts[0]), 10 ether);
vm.startPrank(address(accounts[0]));
vm.resumeGasMetering();
(bool result,) = payable(address(minimeToken)).call{ value: 1 ether }("");
vm.pauseGasMetering();
vm.stopPrank();
assertFalse(result, "ether transfer should be rejected");
assertEq(address(minimeToken).balance, 0, "minimeToken balance should be correct");
assertEq(address(rejectingController).balance, 0, "rejectingController balance should be correct");
assertEq(address(accounts[0]).balance, 10 ether, "account balance should be correct");
vm.resumeGasMetering();
}
}
contract GenerateTokensTest is MiniMeTokenTest {
function setUp() public virtual override {
MiniMeTokenTest.setUp();