use foundationdb::timekeeper::{hint_version_from_timestamp, HintMode};
use std::time::SystemTime;
#[tokio::test]
async fn timekeeper() {
let _guard = unsafe { foundationdb::boot() };
let database = foundationdb::Database::new_compat(None)
.await
.expect("Unable to create database");
let now = SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.expect("Unable to get timestamp")
.as_secs();
tokio::time::sleep(std::time::Duration::from_secs(10)).await;
let trx = database.create_trx().expect("Unable to create transaction");
let result = hint_version_from_timestamp(&trx, now, HintMode::AfterTimestamp, true)
.await
.expect("Unable to get hint version");
assert!(result.is_some());
let trx = database.create_trx().expect("Unable to create transaction");
let future_date = now + 50;
let result = hint_version_from_timestamp(&trx, future_date, HintMode::AfterTimestamp, true)
.await
.expect("Unable to get hint version");
assert!(result.is_none());
let trx = database.create_trx().expect("Unable to create transaction");
let past_date = 0;
let result = hint_version_from_timestamp(&trx, past_date, HintMode::AfterTimestamp, true)
.await
.expect("Unable to get hint version");
assert!(result.is_some());
let trx = database.create_trx().expect("Unable to create transaction");
let future_date = now + 50;
let result = hint_version_from_timestamp(&trx, future_date, HintMode::BeforeTimestamp, true)
.await
.expect("Unable to get hint version");
assert!(result.is_some());
let trx = database.create_trx().expect("Unable to create transaction");
let past_date = 0;
let result = hint_version_from_timestamp(&trx, past_date, HintMode::BeforeTimestamp, true)
.await
.expect("Unable to get hint version");
assert!(result.is_none());
}