---
title: Time-Based Testing
description: Test features that depend on slots or timestamps
---

## Overview

This example shows how to test time-dependent features by manipulating slots and
timestamps in LiteSVM.

## Complete Test

```rust title="tests/time_test.rs"
use litesvm::LiteSVM;
use solana_sdk::clock::Clock;

#[test]
fn test_time_locked_feature() {
    let mut svm = LiteSVM::new();

    // Get current time
    let clock: Clock = svm.get_sysvar();
    println!("Starting slot: {}", clock.slot);
    println!("Starting timestamp: {}", clock.unix_timestamp);

    // Test something at current time
    // ... your test logic ...

    // Jump forward 100 slots
    svm.warp_to_slot(clock.slot + 100);

    // Verify time changed
    let new_clock: Clock = svm.get_sysvar();
    assert_eq!(new_clock.slot, clock.slot + 100);

    // Test time-locked feature is now available
    // ... your test logic ...

    println!("Time travel successful!");
}
```

## Testing Slot-Based Features

```rust
#[test]
fn test_slot_based_unlock() {
    let mut svm = LiteSVM::new();

    // Get starting slot
    let start_slot = svm.get_sysvar::<Clock>().slot;

    // Deploy program with slot-based lock
    let program_id = deploy_locked_program(&mut svm);

    // Try to call before unlock slot (should fail)
    let result = call_program(&mut svm, program_id);
    assert!(result.is_err());

    // Warp to unlock slot
    svm.warp_to_slot(start_slot + 1000);

    // Now it should succeed
    let result = call_program(&mut svm, program_id);
    assert!(result.is_ok());
}
```

## Testing Timestamp-Based Features

```rust
#[test]
fn test_timestamp_based_feature() {
    let mut svm = LiteSVM::new();

    // Get current timestamp
    let clock: Clock = svm.get_sysvar();
    let current_time = clock.unix_timestamp;

    // Warp forward 1 hour (3600 seconds)
    let target_slot = clock.slot + (3600.0 / 0.4) as u64; // ~0.4s per slot
    svm.warp_to_slot(target_slot);

    // Verify timestamp increased
    let new_clock: Clock = svm.get_sysvar();
    assert!(new_clock.unix_timestamp >= current_time + 3600);
}
```

## Key Points

1. **Clock Sysvar**: Use `svm.get_sysvar::<Clock>()` to get current time
2. **Slot Warping**: Use `warp_to_slot()` to jump forward in time
3. **Timestamp Calculation**: Slots roughly correspond to ~0.4 seconds on Solana
4. **Testing Unlocks**: Test time-locked features by warping past the unlock
   time
5. **No Going Back**: You can only warp forward, not backward in time

## Common Use Cases

- Vesting schedules
- Time-locked withdrawals
- Stake/unstake cooldown periods
- Auction end times
- Rental periods
