diff --git a/src/file/uploading.rs b/src/file/uploading.rs index b15478c..021264e 100644 --- a/src/file/uploading.rs +++ b/src/file/uploading.rs @@ -145,7 +145,7 @@ mod tests { sharry::{Client, json::NewShareRequest}, test_util::{ MockClient, create_file, - data::{DATA_LENGTHS_BAD, cases, cases_with}, + data::{DATA_LENGTHS_BAD, cases, cases_with, data}, }, }; @@ -248,13 +248,13 @@ mod tests { #[test] fn check_rewind_works() { - let cases = cases() + let data = cases() // ignore "empty" testcase .filter(|&(_, size)| size > 0) // remove "size" .map(|(content, _)| content); - for content in cases { + for content in data { let (mut upl, _share_id, _file) = create_uploading(content); // read 1 byte and rewind @@ -269,4 +269,72 @@ mod tests { assert!(upl.rewind().is_none()); } } + + #[test] + fn upload_works() { + let client = MockClient::default(); + let uri = sharry::Uri::from(true); + let alias_id = sharry::AliasID::from(true); + + let share_id = client + .share_create(&uri, &alias_id, NewShareRequest::new("share", 0)) + .unwrap(); + + let mut buf = vec![0; 1024 * 1024]; + + for content in data() { + let file = create_file(content); + let mut upl = Checked::new(file.path()) + .unwrap() + .start_upload(&client, &uri, &alias_id, &share_id) + .unwrap(); + + while let Ok(chunk) = upl.read(&mut buf) { + assert!( + client + .file_patch(&uri, &alias_id, &share_id, &chunk) + .is_ok() + ); + } + + assert_eq!(upl.offset, upl.size); + } + } + + #[test] + fn check_upload_bad_align() { + let data = cases() + // ignore "empty" testcase + .filter(|&(_, size)| size >= 2) + // remove "size" + .map(|(content, _)| content); + + let client = MockClient::default(); + let uri = sharry::Uri::from(true); + let alias_id = sharry::AliasID::from(true); + + let share_id = client + .share_create(&uri, &alias_id, NewShareRequest::new("share", 0)) + .unwrap(); + + // single-byte buffer to force bad chunk alignment + let mut buf = [0]; + for content in data { + let file = create_file(content); + let mut upl = Checked::new(file.path()) + .unwrap() + .start_upload(&client, &uri, &alias_id, &share_id) + .unwrap(); + + // first chunk works + client + .file_patch(&uri, &alias_id, &share_id, &upl.read(&mut buf).unwrap()) + .unwrap(); + + // second chunk misaligned + let res = client.file_patch(&uri, &alias_id, &share_id, &upl.read(&mut buf).unwrap()); + assert!(res.is_err()); + assert!(res.unwrap_err().response_contains("not aligned to a MiB")); + } + } }