Removed send once session test.
This commit is contained in:
		@@ -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
 | 
			
		||||
        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);
 | 
			
		||||
        rx.recv().unwrap()
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -38,25 +38,14 @@ async fn mtt_conn(jar: CookieJar, state: State<MoreThanText>) -> 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::<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");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<MsgType>) -> (Queue, Receiver<Message>) {
 | 
			
		||||
        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<Uuid> = 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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user