From f3422f1e31c9999365ee8e6b603fa245c7cbb621 Mon Sep 17 00:00:00 2001 From: Thilo Behnke Date: Fri, 13 May 2022 20:54:03 +0200 Subject: [PATCH] retrieve key and topic from query string --- server/src/kafka.rs | 2 +- server/src/main.rs | 5 ++--- server/src/utils.rs | 33 ++++++++++++++++++++++++++++++++- server/tests/utils_tests.rs | 4 ++-- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/server/src/kafka.rs b/server/src/kafka.rs index deeabbc..12c252c 100644 --- a/server/src/kafka.rs +++ b/server/src/kafka.rs @@ -78,7 +78,7 @@ impl KafkaEventReaderImpl { let event = Event {topic: String::from(topic), key: std::str::from_utf8(m.key).unwrap().parse().unwrap(), msg: std::str::from_utf8(m.value).unwrap().parse().unwrap() }; events.push(event); } - self.consumer.consume_messageset(ms); + self.consumer.consume_messageset(ms).unwrap(); } self.consumer.commit_consumed().unwrap(); events diff --git a/server/src/main.rs b/server/src/main.rs index 7914fb0..720d55f 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,10 +1,9 @@ use crate::http::HttpServer; -mod http; -mod kafka; +pub mod http; +pub mod kafka; pub mod utils; - #[tokio::main] pub async fn main() { HttpServer::new([127, 0, 0, 1], 4000).run().await.expect("failed to run server"); diff --git a/server/src/utils.rs b/server/src/utils.rs index a1fab9a..d220bad 100644 --- a/server/src/utils.rs +++ b/server/src/utils.rs @@ -5,11 +5,42 @@ pub mod http_utils { pub fn get_query_params(req: &Request) -> HashMap<&str, &str> { let uri = req.uri(); let query = uri.query(); + println!("uri={:?}, query={:?}", uri, query); match query { None => HashMap::new(), Some(query) => { - query.split("&").map(|s| s.split_at(query.find("=").unwrap())).collect() + query.split("&").map(|s| s.split_at(s.find("=").unwrap())).map(|(key, value)| (key, &value[1..])).collect() } } } } + +#[cfg(test)] +pub mod http_utils_tests { + use rstest::rstest; + use std::collections::HashMap; + use hyper::{Body, Request, Uri}; + use hyper::http::uri::{Builder, Parts}; + use crate::utils::http_utils::get_query_params; + use super::*; + + #[rstest] + #[case( + "?test=abc", + HashMap::from([("test", "abc")]) + )] + #[case( + "?test=abc&help=123", + HashMap::from([("test", "abc"), ("help", "123")]) + )] + #[case( + "show?topic=status&key=abc", + HashMap::from([("topic", "status"), ("key", "abc")]) + )] + fn get_query_params_tests(#[case] query_str: &str, #[case] expected: HashMap<&str, &str>) { + let uri = Builder::new().scheme("https").authority("behnke.rs").path_and_query(query_str).build().unwrap(); + let req = Request::get(uri).body(Body::empty()).unwrap(); + let res = get_query_params(&req); + assert_eq!(res, expected) + } +} diff --git a/server/tests/utils_tests.rs b/server/tests/utils_tests.rs index 7cfbe82..7eef968 100644 --- a/server/tests/utils_tests.rs +++ b/server/tests/utils_tests.rs @@ -1,4 +1,4 @@ -mod test { +pub mod tests { use std::collections::HashMap; use rstest::rstest; @@ -8,7 +8,7 @@ mod test { HashMap::from([("test", "abc")]) )] fn get_query_params_tests(#[case] query_str: &str, #[case] expected: HashMap<&str, &str>) { - let res = get_(query_str); + let res = get_query_params(query_str); assert_eq!(res, expected) } }