I'm trying to test a contract in which functions should require certain timestamps. Parts of code are eliminated for readability:
Here's the problematic part of the contract :
PCE_Contract.sol
pragma solidity ^0.7.0;
contract PCE_Contract{
constructor(uint256 newStartTime, uint256 PERIOD)
{
_PERIOD = PERIOD * 1 days ;
initiation = newStartTime ;
}
function enter() payable public
{
require(( block.timestamp < (initiation + _PERIOD) ),
"Period for this function has ended." );
// do stuff
}
}
I'm simulating time using the info found in this article.
PCE_Contract_test.js
const expected_period = 7 ;
const SECONDS_IN_DAY = 86400 ;
const Mon_01_Jun_00_00_UTC_2020 = 1590969600; // 06-01-2020 @ 12.00 am (UTC)
const Mon_09_Jun_13_00_UTC_2020 = 1591660800; // 06-09-2020 @ 01.00 pm (UTC)
contract('PCE_Contract', async (accounts) =>
{
before( async () => {
instance_1 = await PCE_Contract.new(Mon_01_Jun_00_00_UTC_2020 ,expected_period );
instance_2 = await PCE_Contract.new(Mon_09_Jun_13_00_UTC_2020 ,expected_period );
});
const expected_address = accounts[1];
// more tests using instance_1
it("No entry after period is over, OK", async() =>
{
await test_helper.advanceTimeAndBlock(SECONDS_IN_DAY * (expected_period ));
await instance_2.enter({ from: expected_address, value: String(1e18)});
});
}
I expected the test to fail, since _PERIOD time has passed since instance_1. However, in the first test run the test passes. The interesting part is that when I run the test for a second time (which will start from the timestamp 1st test ended at) The test fails (expected behavior).
Why does the 1st test's time-simulation fail even though I can see time has passed in ganache-cli ? How can I fix the issue so that I can test functions in two time periods ?
ganache-cli output for two tests that have time-jump between:
Transaction: 0xbb9e5b0e3ee1bc266d79ebe169061259c4832cbbc175b63ff1719aa125cf06a3
Gas usage: 40655
Block Number: 10
Block Time: Mon Jun 01 2020 03:00:24 GMT+0300 (GMT+03:00)
Runtime Error: revert
Revert reason: ERROR
eth_call
eth_blockNumber
evm_increaseTime
evm_mine
eth_getBlockByNumber
eth_getBlockByNumber
eth_getBlockByNumber
eth_sendTransaction
Transaction: 0x43578162490a3edf734c17462056f2090b3775a2a90228a0097da53c42319afb
Gas usage: 112357
Block Number: 12
Block Time: Tue Jun 09 2020 03:00:24 GMT+0300 (GMT+03:00)
Truffle v5.1.49
Ganache CLI v6.12.1 (ganache-core: 2.13.1)
Node v12.18.4