Removed send once session test.

This commit is contained in:
Jeff Baskin 2025-04-08 13:13:06 -04:00
parent 7792e7ca82
commit dbe77eff0f
3 changed files with 39 additions and 48 deletions

View File

@ -23,11 +23,15 @@ impl MoreThanText {
} }
} }
pub fn request<F>(&mut self, _session: Option<F>) -> Reply pub fn request<F>(&mut self, session: Option<F>) -> Reply
where where
F: Into<Field>, F: Into<Field>,
{ {
let req = Request::new(None); let sess = match session {
Some(id) => Some(id.into()),
None => None,
};
let req = Request::new(sess);
let rx = self.client_link.send(req); let rx = self.client_link.send(req);
rx.recv().unwrap() rx.recv().unwrap()
} }

View File

@ -38,25 +38,14 @@ async fn mtt_conn(jar: CookieJar, state: State<MoreThanText>) -> impl IntoRespon
Some(cookie) => Some(cookie.value().to_string()), Some(cookie) => Some(cookie.value().to_string()),
None => None, None => None,
}; };
let sess_info = sid.clone();
let (tx, mut rx) = channel(5); let (tx, mut rx) = channel(5);
spawn(async move { spawn(async move {
tx.send(state.clone().request(sid)).await.unwrap(); tx.send(state.clone().request(sess_info)).await.unwrap();
}); });
let reply = rx.recv().await.unwrap(); let reply = rx.recv().await.unwrap();
let cookie = Cookie::build((SESSION_KEY, reply.get_session().to_string())); let cookie = Cookie::build((SESSION_KEY, reply.get_session().to_string()));
let cookies = jar.add(cookie); let cookies = jar.add(cookie);
/*
let sid = match jar.get(SESSION_KEY) {
Some(cookie) => Some(cookie.value().to_string()),
None => None,
};
state.open_session(sid.clone());
if !sid.is_some_and(|x| x == state.get_id()) {
let cookie = Cookie::build((SESSION_KEY, state.get_id()));
cookies = jar.add(cookie);
}
*/
(cookies, reply.get_content()) (cookies, reply.get_content())
} }
@ -67,7 +56,7 @@ mod servers {
body::Body, body::Body,
http::{Request, StatusCode}, http::{Request, StatusCode},
}; };
use tower::{Service, ServiceExt}; use tower::ServiceExt;
#[tokio::test] #[tokio::test]
async fn get_home_page() { async fn get_home_page() {
@ -100,28 +89,4 @@ mod servers {
holder.push(sessid); holder.push(sessid);
} }
} }
// Next test to complete.
//#[tokio::test]
async fn session_only_sent_once() {
let mut app = mtt_conn.with_state(MoreThanText::new());
let request = Request::builder().uri("/").body(Body::empty()).unwrap();
let response = ServiceExt::<Request<Body>>::ready(&mut app)
.await
.unwrap()
.call(request)
.await
.unwrap();
assert_eq!(response.status(), StatusCode::OK);
let request = Request::builder().uri("/").body(Body::empty()).unwrap();
let response = ServiceExt::<Request<Body>>::ready(&mut app)
.await
.unwrap()
.call(request)
.await
.unwrap();
assert_eq!(response.status(), StatusCode::OK);
let session = response.headers().get("set-cookie");
assert!(session.is_none(), "should only send the session once");
}
} }

View File

@ -38,7 +38,10 @@ impl Session {
fn validate(&self, msg: Message) { fn validate(&self, msg: Message) {
let mut reply = msg.reply(MsgType::Session); let mut reply = msg.reply(MsgType::Session);
reply.add_data("sess_id", Uuid::new_v4()); match msg.get_data("sess_id") {
Some(id) => reply.add_data("sess_id", id.clone()),
None => reply.add_data("sess_id", Uuid::new_v4()),
}
self.queue.send(reply); self.queue.send(reply);
} }
} }
@ -51,12 +54,18 @@ mod sessions {
static TIMEOUT: Duration = Duration::from_millis(500); static TIMEOUT: Duration = Duration::from_millis(500);
#[test] fn setup_session(listen_for: Vec<MsgType>) -> (Queue, Receiver<Message>) {
fn get_new_session() {
let queue = Queue::new(); let queue = Queue::new();
let (tx, rx) = channel(); let (tx, rx) = channel();
queue.add(tx, [MsgType::Session].to_vec()); queue.add(tx, listen_for);
Session::start(queue.clone()); Session::start(queue.clone());
(queue, rx)
}
#[test]
fn get_new_session() {
let listen_for = [MsgType::Session];
let (queue, rx) = setup_session(listen_for.to_vec());
let msg = Message::new(MsgType::SessionValidate); let msg = Message::new(MsgType::SessionValidate);
queue.send(msg.clone()); queue.send(msg.clone());
let result = rx.recv_timeout(TIMEOUT).unwrap(); let result = rx.recv_timeout(TIMEOUT).unwrap();
@ -72,10 +81,8 @@ mod sessions {
#[test] #[test]
fn session_id_is_unique() { fn session_id_is_unique() {
let queue = Queue::new(); let listen_for = [MsgType::Session];
let (tx, rx) = channel(); let (queue, rx) = setup_session(listen_for.to_vec());
queue.add(tx, [MsgType::Session].to_vec());
Session::start(queue.clone());
let msg = Message::new(MsgType::SessionValidate); let msg = Message::new(MsgType::SessionValidate);
let mut ids: Vec<Uuid> = Vec::new(); let mut ids: Vec<Uuid> = Vec::new();
for _ in 0..10 { for _ in 0..10 {
@ -86,4 +93,19 @@ mod sessions {
ids.push(id); ids.push(id);
} }
} }
#[test]
fn existing_id_are_returned() {
let listen_for = [MsgType::Session];
let (queue, rx) = setup_session(listen_for.to_vec());
let mut msg = Message::new(MsgType::SessionValidate);
queue.send(msg.clone());
let holder = rx.recv().unwrap();
let id = holder.get_data("sess_id").unwrap().to_uuid().unwrap();
msg.add_data("sess_id", id.clone());
queue.send(msg);
let result = rx.recv().unwrap();
let output = result.get_data("sess_id").unwrap().to_uuid().unwrap();
assert_eq!(output, id);
}
} }