From dbe77eff0f3e3324ce3c14e6a52957ccf965df9a Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Tue, 8 Apr 2025 13:13:06 -0400 Subject: [PATCH] Removed send once session test. --- src/lib.rs | 8 ++++++-- src/main.rs | 41 +++-------------------------------------- src/session.rs | 38 ++++++++++++++++++++++++++++++-------- 3 files changed, 39 insertions(+), 48 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b3478d2..1339b71 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -23,11 +23,15 @@ impl MoreThanText { } } - pub fn request(&mut self, _session: Option) -> Reply + pub fn request(&mut self, session: Option) -> Reply where F: Into, { - 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); rx.recv().unwrap() } diff --git a/src/main.rs b/src/main.rs index 856a976..44997aa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,25 +38,14 @@ async fn mtt_conn(jar: CookieJar, state: State) -> impl IntoRespon Some(cookie) => Some(cookie.value().to_string()), None => None, }; + let sess_info = sid.clone(); let (tx, mut rx) = channel(5); 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 cookie = Cookie::build((SESSION_KEY, reply.get_session().to_string())); 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()) } @@ -67,7 +56,7 @@ mod servers { body::Body, http::{Request, StatusCode}, }; - use tower::{Service, ServiceExt}; + use tower::ServiceExt; #[tokio::test] async fn get_home_page() { @@ -100,28 +89,4 @@ mod servers { 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::>::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::>::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"); - } } diff --git a/src/session.rs b/src/session.rs index 3b1781c..3a8b496 100644 --- a/src/session.rs +++ b/src/session.rs @@ -38,7 +38,10 @@ impl Session { fn validate(&self, msg: Message) { 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); } } @@ -51,12 +54,18 @@ mod sessions { static TIMEOUT: Duration = Duration::from_millis(500); - #[test] - fn get_new_session() { + fn setup_session(listen_for: Vec) -> (Queue, Receiver) { let queue = Queue::new(); let (tx, rx) = channel(); - queue.add(tx, [MsgType::Session].to_vec()); + queue.add(tx, listen_for); 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); queue.send(msg.clone()); let result = rx.recv_timeout(TIMEOUT).unwrap(); @@ -72,10 +81,8 @@ mod sessions { #[test] fn session_id_is_unique() { - let queue = Queue::new(); - let (tx, rx) = channel(); - queue.add(tx, [MsgType::Session].to_vec()); - Session::start(queue.clone()); + let listen_for = [MsgType::Session]; + let (queue, rx) = setup_session(listen_for.to_vec()); let msg = Message::new(MsgType::SessionValidate); let mut ids: Vec = Vec::new(); for _ in 0..10 { @@ -86,4 +93,19 @@ mod sessions { 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); + } }