Replaced session id with SessionEntry.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
action::{Field, MsgAction},
|
action::{Field, MsgAction},
|
||||||
name::NameType,
|
name::NameType,
|
||||||
queue::data_director::{Include, Path, Route},
|
queue::data_director::{Include, Path, Route, SessionEntry},
|
||||||
};
|
};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ pub struct Message {
|
|||||||
msg_id: MessageID,
|
msg_id: MessageID,
|
||||||
action: MsgAction,
|
action: MsgAction,
|
||||||
route: Route,
|
route: Route,
|
||||||
session: Field,
|
session: SessionEntry,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Message {
|
impl Message {
|
||||||
@@ -58,10 +58,15 @@ impl Message {
|
|||||||
output
|
output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn session_id(&self) -> &Field {
|
||||||
|
self.session.id()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set_session<F>(&self, session: F) -> Self
|
pub fn set_session<F>(&self, session: F) -> Self
|
||||||
where
|
where
|
||||||
F: Into<Field>,
|
F: Into<Field>,
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
let sess_id = match session.into() {
|
let sess_id = match session.into() {
|
||||||
Field::Uuid(data) => Field::Uuid(data.clone()),
|
Field::Uuid(data) => Field::Uuid(data.clone()),
|
||||||
Field::StaticString(data) => match Uuid::try_from(data) {
|
Field::StaticString(data) => match Uuid::try_from(data) {
|
||||||
@@ -70,8 +75,10 @@ impl Message {
|
|||||||
},
|
},
|
||||||
_ => Field::None,
|
_ => Field::None,
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
let mut output = self.clone();
|
let mut output = self.clone();
|
||||||
output.session = sess_id;
|
// output.session = sess_id;
|
||||||
|
output.session = SessionEntry::new(session);
|
||||||
output
|
output
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +122,7 @@ impl Default for Message {
|
|||||||
msg_id: MessageID::new(),
|
msg_id: MessageID::new(),
|
||||||
action: MsgAction::None,
|
action: MsgAction::None,
|
||||||
route: Route::default(),
|
route: Route::default(),
|
||||||
session: Field::None,
|
session: SessionEntry::new(Field::None),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,7 +148,7 @@ mod messages {
|
|||||||
MsgAction::None => {}
|
MsgAction::None => {}
|
||||||
_ => panic!("should have been no action"),
|
_ => panic!("should have been no action"),
|
||||||
}
|
}
|
||||||
assert_eq!(msg.session, Field::None);
|
assert_eq!(msg.session_id(), &Field::None);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -150,11 +157,11 @@ mod messages {
|
|||||||
let qry = Query::new(doc_name.clone());
|
let qry = Query::new(doc_name.clone());
|
||||||
let msg = Message::new(qry);
|
let msg = Message::new(qry);
|
||||||
let expected: NameType = doc_name.into();
|
let expected: NameType = doc_name.into();
|
||||||
match msg.action {
|
match &msg.action {
|
||||||
MsgAction::Query(data) => assert_eq!(data.doc_name(), &expected),
|
MsgAction::Query(data) => assert_eq!(data.doc_name(), &expected),
|
||||||
_ => unreachable!("should have been a query"),
|
_ => unreachable!("should have been a query"),
|
||||||
}
|
}
|
||||||
match msg.session {
|
match msg.session_id() {
|
||||||
Field::None => {}
|
Field::None => {}
|
||||||
_ => unreachable!("should have been none"),
|
_ => unreachable!("should have been none"),
|
||||||
}
|
}
|
||||||
@@ -175,25 +182,16 @@ mod messages {
|
|||||||
let qry = Query::new(doc_name.clone());
|
let qry = Query::new(doc_name.clone());
|
||||||
let sess_id: Field = Uuid::new_v4().into();
|
let sess_id: Field = Uuid::new_v4().into();
|
||||||
let msg = Message::new(qry).set_session(sess_id.clone());
|
let msg = Message::new(qry).set_session(sess_id.clone());
|
||||||
assert_eq!(msg.session, sess_id);
|
assert_eq!(msg.session_id(), &sess_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn can_session_be_set_by_string() {
|
fn can_session_be_set_by_string() {
|
||||||
let doc_name = Name::english("string");
|
let doc_name = Name::english("string");
|
||||||
let qry = Query::new(doc_name.clone());
|
let qry = Query::new(doc_name.clone());
|
||||||
let sess_id = Uuid::new_v4();
|
let sess_id: Field = Uuid::new_v4().to_string().into();
|
||||||
let msg = Message::new(qry).set_session(sess_id.to_string());
|
let msg = Message::new(qry).set_session(sess_id.clone());
|
||||||
assert_eq!(msg.session, sess_id.into());
|
assert_eq!(msg.session_id(), &sess_id);
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn does_garbage_return_none() {
|
|
||||||
let doc_name = Name::english("garbage");
|
|
||||||
let qry = Query::new(doc_name.clone());
|
|
||||||
let sess_id = "not a uuid";
|
|
||||||
let msg = Message::new(qry).set_session(sess_id);
|
|
||||||
assert_eq!(msg.session, Field::None);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -202,16 +200,7 @@ mod messages {
|
|||||||
let qry = Query::new(doc_name.clone());
|
let qry = Query::new(doc_name.clone());
|
||||||
let sess_id = Uuid::new_v4();
|
let sess_id = Uuid::new_v4();
|
||||||
let msg = Message::new(qry).set_session(sess_id.clone());
|
let msg = Message::new(qry).set_session(sess_id.clone());
|
||||||
assert_eq!(msg.session, sess_id.into());
|
assert_eq!(msg.session_id(), &sess_id.into());
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn does_wrong_field_type_return_none() {
|
|
||||||
let doc_name = Name::english("uuid");
|
|
||||||
let qry = Query::new(doc_name.clone());
|
|
||||||
let sess_id = FieldType::DateTime.get_default();
|
|
||||||
let msg = Message::new(qry).set_session(sess_id.clone());
|
|
||||||
assert_eq!(msg.session, Field::None);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
use super::SenderID;
|
use super::SenderID;
|
||||||
use chrono::{DateTime, Utc};
|
|
||||||
use crate::{
|
use crate::{
|
||||||
action::{Action, Field, MsgAction},
|
action::{Action, Field, MsgAction},
|
||||||
message::{Message, MessageAction, MessageID},
|
message::{Message, MessageAction, MessageID},
|
||||||
@@ -7,6 +6,7 @@ use crate::{
|
|||||||
name::{Name, NameID, NameType, Names},
|
name::{Name, NameID, NameType, Names},
|
||||||
queue::router::Queue,
|
queue::router::Queue,
|
||||||
};
|
};
|
||||||
|
use chrono::{DateTime, Utc};
|
||||||
use std::{
|
use std::{
|
||||||
collections::{HashMap, HashSet},
|
collections::{HashMap, HashSet},
|
||||||
sync::mpsc::Receiver,
|
sync::mpsc::Receiver,
|
||||||
@@ -487,7 +487,7 @@ mod route_storeage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
struct SessionEntry {
|
pub struct SessionEntry {
|
||||||
id: Field,
|
id: Field,
|
||||||
expire_time: DateTime<Utc>,
|
expire_time: DateTime<Utc>,
|
||||||
}
|
}
|
||||||
@@ -495,14 +495,17 @@ struct SessionEntry {
|
|||||||
impl SessionEntry {
|
impl SessionEntry {
|
||||||
const EXPIRE_IN: Duration = Duration::from_hours(1);
|
const EXPIRE_IN: Duration = Duration::from_hours(1);
|
||||||
|
|
||||||
fn new(id: Field) -> Self {
|
pub fn new<F>(id: F) -> Self
|
||||||
|
where
|
||||||
|
F: Into<Field>,
|
||||||
|
{
|
||||||
Self {
|
Self {
|
||||||
id: id,
|
id: id.into(),
|
||||||
expire_time: Utc::now() + SessionEntry::EXPIRE_IN,
|
expire_time: Utc::now() + SessionEntry::EXPIRE_IN,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn id(&self) -> &Field {
|
pub fn id(&self) -> &Field {
|
||||||
&self.id
|
&self.id
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,13 +531,23 @@ mod session_entries {
|
|||||||
let entry = SessionEntry::new(id.clone());
|
let entry = SessionEntry::new(id.clone());
|
||||||
let end = Utc::now() + SessionEntry::EXPIRE_IN;
|
let end = Utc::now() + SessionEntry::EXPIRE_IN;
|
||||||
assert_eq!(entry.id(), &id);
|
assert_eq!(entry.id(), &id);
|
||||||
assert!(start < entry.expire_time, "{:?} should have been after {:?}", entry.expire_time, start);
|
assert!(
|
||||||
assert!(end > entry.expire_time, "{:?} should have been after {:?}", entry.expire_time, end);
|
start < entry.expire_time,
|
||||||
|
"{:?} should have been after {:?}",
|
||||||
|
entry.expire_time,
|
||||||
|
start
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
end > entry.expire_time,
|
||||||
|
"{:?} should have been after {:?}",
|
||||||
|
entry.expire_time,
|
||||||
|
end
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn can_determine_if_entry_expired() {
|
fn can_determine_if_entry_expired() {
|
||||||
let mut entry = SessionEntry::new(Uuid::nil().into());
|
let mut entry = SessionEntry::new(Uuid::nil());
|
||||||
let data = Utc::now();
|
let data = Utc::now();
|
||||||
entry.expire_time = data + Duration::from_secs(1);
|
entry.expire_time = data + Duration::from_secs(1);
|
||||||
assert!(!entry.is_expired(), "entry should not be expired");
|
assert!(!entry.is_expired(), "entry should not be expired");
|
||||||
@@ -544,13 +557,23 @@ mod session_entries {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn can_expiration_be_reset() {
|
fn can_expiration_be_reset() {
|
||||||
let mut entry = SessionEntry::new(Uuid::nil().into());
|
let mut entry = SessionEntry::new(Uuid::nil());
|
||||||
entry.expire_time = Utc::now();
|
entry.expire_time = Utc::now();
|
||||||
let start = Utc::now() + SessionEntry::EXPIRE_IN;
|
let start = Utc::now() + SessionEntry::EXPIRE_IN;
|
||||||
entry.extend();
|
entry.extend();
|
||||||
let end = Utc::now() + SessionEntry::EXPIRE_IN;
|
let end = Utc::now() + SessionEntry::EXPIRE_IN;
|
||||||
assert!(start < entry.expire_time, "{:?} should have been after {:?}", entry.expire_time, start);
|
assert!(
|
||||||
assert!(end > entry.expire_time, "{:?} should have been after {:?}", entry.expire_time, end);
|
start < entry.expire_time,
|
||||||
|
"{:?} should have been after {:?}",
|
||||||
|
entry.expire_time,
|
||||||
|
start
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
end > entry.expire_time,
|
||||||
|
"{:?} should have been after {:?}",
|
||||||
|
entry.expire_time,
|
||||||
|
end
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -633,8 +656,18 @@ mod sessions {
|
|||||||
let end = Utc::now() + SessionEntry::EXPIRE_IN;
|
let end = Utc::now() + SessionEntry::EXPIRE_IN;
|
||||||
assert_eq!(result.id(), data.id());
|
assert_eq!(result.id(), data.id());
|
||||||
let entry = sess.entries.get(data.id()).unwrap();
|
let entry = sess.entries.get(data.id()).unwrap();
|
||||||
assert!(start < entry.expire_time, "{:?} should have been after {:?}", entry.expire_time, start);
|
assert!(
|
||||||
assert!(end > entry.expire_time, "{:?} should have been after {:?}", entry.expire_time, end);
|
start < entry.expire_time,
|
||||||
|
"{:?} should have been after {:?}",
|
||||||
|
entry.expire_time,
|
||||||
|
start
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
end > entry.expire_time,
|
||||||
|
"{:?} should have been after {:?}",
|
||||||
|
entry.expire_time,
|
||||||
|
end
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -697,8 +730,18 @@ mod sessions {
|
|||||||
sess.entries.get_mut(&lose.id).unwrap().expire_time = Utc::now() - SessionEntry::EXPIRE_IN;
|
sess.entries.get_mut(&lose.id).unwrap().expire_time = Utc::now() - SessionEntry::EXPIRE_IN;
|
||||||
let keep = sess.get(&Field::None);
|
let keep = sess.get(&Field::None);
|
||||||
sess.expire();
|
sess.expire();
|
||||||
assert_eq!(sess.entries.len(), 1, "should only contain one entry, had {:?}", sess.entries);
|
assert_eq!(
|
||||||
assert!(sess.entries.contains_key(&keep.id), "had {:?}, expected {:?}", sess.entries.keys(), &keep.id)
|
sess.entries.len(),
|
||||||
|
1,
|
||||||
|
"should only contain one entry, had {:?}",
|
||||||
|
sess.entries
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
sess.entries.contains_key(&keep.id),
|
||||||
|
"had {:?}, expected {:?}",
|
||||||
|
sess.entries.keys(),
|
||||||
|
&keep.id
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user