From 7afa49a7ba16b6dd7a95193946f6efe0aee26346 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Thu, 23 Apr 2026 13:11:15 -0400 Subject: [PATCH] Added expire to the new session. --- src/queue/data_director.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/queue/data_director.rs b/src/queue/data_director.rs index 3b7e23f..1b6b64e 100644 --- a/src/queue/data_director.rs +++ b/src/queue/data_director.rs @@ -1,4 +1,5 @@ use super::SenderID; +use chrono::{DateTime, Utc}; use crate::{ action::{Action, Field, MsgAction}, message::{Message, MessageAction, MessageID}, @@ -487,23 +488,30 @@ mod route_storeage { #[derive(Clone, Debug)] struct SessionEntry { id: Field, + expire_time: DateTime, } impl SessionEntry { fn id(&self) -> &Field { &self.id } + + fn is_expired(&self) -> bool { + Utc::now() > self.expire_time + } } impl SessionEntry { fn new(id: Field) -> Self { - Self { id: id } + Self { id: id, expire_time: Utc::now(), } } } #[cfg(test)] mod session_entries { use super::*; + use chrono::Utc; + use std::time::Duration; #[test] fn does_entry_return_id() { @@ -513,7 +521,14 @@ mod session_entries { } #[test] - fn can_determine_if_entry_expired() {} + fn can_determine_if_entry_expired() { + let mut entry = SessionEntry::new(Uuid::nil().into()); + let data = Utc::now(); + entry.expire_time = data + Duration::from_secs(1); + assert!(!entry.is_expired(), "entry should not be expired"); + entry.expire_time = data - Duration::from_secs(1); + assert!(entry.is_expired(), "entry should be expired"); + } } struct Session { @@ -543,7 +558,7 @@ impl Session { while self.entries.contains_key(&new_id) { new_id = Uuid::new_v4().into(); } - let output = SessionEntry { id: new_id.clone() }; + let output = SessionEntry::new(new_id.clone()); self.entries.insert(new_id, output.clone()); output }