Skip to content

Commit 0e5e328

Browse files
committed
add testExecuteCallbackWithFutureTimestamp
1 parent ce1e3ec commit 0e5e328

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

target_chains/ethereum/contracts/forge-test/Pulse.t.sol

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,10 @@ contract PulseTest is Test, PulseEvents {
219219
assertEq(lastRequest.provider, expectedRequest.provider);
220220
assertEq(lastRequest.sequenceNumber, expectedRequest.sequenceNumber);
221221
assertEq(lastRequest.publishTime, expectedRequest.publishTime);
222+
assertEq(
223+
keccak256(abi.encode(lastRequest.priceIds)),
224+
keccak256(abi.encode(expectedRequest.priceIds))
225+
);
222226
assertEq(
223227
lastRequest.callbackGasLimit,
224228
expectedRequest.callbackGasLimit
@@ -468,6 +472,38 @@ contract PulseTest is Test, PulseEvents {
468472
);
469473
}
470474

475+
function testExecuteCallbackWithFutureTimestamp() public {
476+
// Setup request with future timestamp
477+
bytes32[] memory priceIds = createPriceIds();
478+
uint256 futureTime = block.timestamp + 1 days;
479+
vm.deal(address(consumer), 1 gwei);
480+
481+
vm.prank(address(consumer));
482+
uint64 sequenceNumber = pulse.requestPriceUpdatesWithCallback{
483+
value: calculateTotalFee()
484+
}(provider, futureTime, priceIds, CALLBACK_GAS_LIMIT);
485+
486+
// Try to execute callback before the requested timestamp
487+
PythStructs.PriceFeed[] memory priceFeeds = createMockPriceFeeds(
488+
futureTime // Mock price feeds with future timestamp
489+
);
490+
mockPythResponse(priceFeeds); // This will make parsePriceFeedUpdates return future-dated prices
491+
bytes[] memory updateData = createMockUpdateData(priceFeeds);
492+
493+
vm.prank(provider);
494+
// Should succeed because we're simulating receiving future-dated price updates
495+
pulse.executeCallback(
496+
provider,
497+
sequenceNumber,
498+
priceIds,
499+
updateData,
500+
CALLBACK_GAS_LIMIT
501+
);
502+
503+
// Verify the callback was executed with future timestamp
504+
assertEq(consumer.lastPublishTime(), futureTime);
505+
}
506+
471507
function testGetFee() public {
472508
// Test with different gas limits to verify fee calculation
473509
uint256[] memory gasLimits = new uint256[](3);

0 commit comments

Comments
 (0)