Skip to content
Snippets Groups Projects
Commit 9b412c19 authored by codecraft's avatar codecraft :crocodile:
Browse files

Add test for multipart form data and boundary getter in request.rs

parent 206fa32e
No related branches found
No related tags found
1 merge request!1Initial feature merge
...@@ -116,16 +116,26 @@ impl Request<'_> { ...@@ -116,16 +116,26 @@ impl Request<'_> {
keys: &[&'a str], keys: &[&'a str],
data: &Data, data: &Data,
) -> Result<HashMap<&str, Result<Vec<u8>, ParseFormError>>, ParseFormError> { ) -> Result<HashMap<&str, Result<Vec<u8>, ParseFormError>>, ParseFormError> {
let boundary;
let post_type = if let Some(val) = self let post_type = if let Some(val) = self
.headers .headers
.iter() .iter()
.find(|header| header.contains("Content-Type: ")) .find(|header| header.contains("Content-Type: "))
{ {
if let Ok(mime_type) = val.strip_prefix("Content-Type: ").unwrap().trim().parse() { let content_type = val.trim().strip_prefix("Content-Type: ").unwrap();
mime_type let type_vec = content_type.split(';').collect::<Vec<&str>>();
boundary = if let Some(bound) = type_vec.iter().find(|part| part.contains("boundary="))
{
bound.strip_prefix("boundary=").unwrap().trim_matches('"')
} else {
""
};
if let Ok(mime) = type_vec[0].trim().parse() {
mime
} else { } else {
return Err(ParseFormError { return Err(ParseFormError {
error: ParseErrors::NoData, error: ParseErrors::BadData,
}); });
} }
} else { } else {
...@@ -177,6 +187,12 @@ impl Request<'_> { ...@@ -177,6 +187,12 @@ impl Request<'_> {
} }
} }
} }
Mime::MultipartFormData => {
let mut temp_bound = "--".to_string();
temp_bound.push_str(boundary);
let end_boundary = format!("{temp_bound}--").as_bytes().to_owned();
let boundary = temp_bound.as_bytes();
}
_ => { _ => {
return Err(ParseFormError { return Err(ParseFormError {
error: ParseErrors::BadData, error: ParseErrors::BadData,
...@@ -334,15 +350,45 @@ mod test { ...@@ -334,15 +350,45 @@ mod test {
method: crate::handling::methods::Method::Post, method: crate::handling::methods::Method::Post,
}; };
let data = Data { let data = Data {
buffer: b"message=24&message1=23".to_vec(), buffer: b"message=23&message1=24".to_vec(),
is_complete: true, is_complete: true,
}; };
let map = req.get_post_data(&["message", "message1"], &data).unwrap();
assert_eq!(
&b"23".to_vec(),
map.get("message").unwrap().as_ref().unwrap()
);
assert_eq!(
&b"24".to_vec(),
map.get("message1").unwrap().as_ref().unwrap()
);
let req = Request {
uri: "",
headers: vec!["Content-Type: multipart/form-data;boundary=\"boundary\"".to_string()],
method: crate::handling::methods::Method::Post,
};
let data = Data {
buffer: b"--boundary
Content-Disposition: form-data; name=\"field1\"
value1
--boundary
Content-Disposition: form-data; name=\"field2\"; filename=\"example.txt\"
value2
--boundary--
"
.to_vec(),
is_complete: true,
};
let map = req.get_post_data(&["field1, field2"], &data).unwrap();
assert_eq!(
&b"value1".to_vec(),
map.get("field1").unwrap().as_ref().unwrap()
);
assert_eq!( assert_eq!(
vec![&Ok(b"23".to_vec()), &Ok(b"24".to_vec())], &b"value2".to_vec(),
req.get_post_data(&["message", "message1"], &data) map.get("field2").unwrap().as_ref().unwrap()
.unwrap()
.values()
.collect::<Vec<_>>()
); );
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment