diff --git a/libraries/droplet/.github/workflows/test.yml b/libraries/droplet/.github/workflows/test.yml new file mode 100644 index 00000000..049d389f --- /dev/null +++ b/libraries/droplet/.github/workflows/test.yml @@ -0,0 +1,42 @@ +name: Rust CI + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + +env: + CARGO_TERM_COLOR: always + +jobs: + ci: + name: Build, Test, Lint + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - name: Check formatting + run: cargo fmt --all -- --check + + - name: Run Clippy (lint) + run: cargo clippy --all-targets --all-features -- -D warnings + + - name: Run tests + run: cargo test --all-features --all --verbose \ No newline at end of file diff --git a/libraries/droplet/Cargo.lock b/libraries/droplet/Cargo.lock index 02718197..cf7b8dac 100644 --- a/libraries/droplet/Cargo.lock +++ b/libraries/droplet/Cargo.lock @@ -61,8 +61,8 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", "synstructure 0.13.1", ] @@ -73,8 +73,8 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", "synstructure 0.13.1", ] @@ -85,8 +85,8 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] @@ -96,8 +96,8 @@ version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] @@ -242,8 +242,8 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] @@ -265,6 +265,7 @@ dependencies = [ "serde_json", "sha2", "speedometer", + "test-generator", "time", "tokio", "uuid", @@ -293,8 +294,8 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 1.0.109", "synstructure 0.12.6", ] @@ -353,8 +354,8 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] @@ -427,6 +428,12 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "hex" version = "0.4.3" @@ -637,6 +644,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid 0.1.0", +] + [[package]] name = "proc-macro2" version = "1.0.94" @@ -646,13 +662,22 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2 0.4.30", +] + [[package]] name = "quote" version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ - "proc-macro2", + "proc-macro2 1.0.94", ] [[package]] @@ -747,8 +772,8 @@ version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] @@ -806,14 +831,25 @@ dependencies = [ "failure", ] +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", +] + [[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "unicode-ident", ] @@ -823,8 +859,8 @@ version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "unicode-ident", ] @@ -834,10 +870,10 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 1.0.109", - "unicode-xid", + "unicode-xid 0.2.6", ] [[package]] @@ -846,11 +882,23 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] +[[package]] +name = "test-generator" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b23be2add79223226e1cb6446cb3e37506a5927089870687a0f1149bb7a073a" +dependencies = [ + "glob", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -875,8 +923,8 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] @@ -886,8 +934,8 @@ version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] @@ -943,8 +991,8 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", ] @@ -960,6 +1008,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -1023,7 +1077,7 @@ version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ - "quote", + "quote 1.0.40", "wasm-bindgen-macro-support", ] @@ -1034,8 +1088,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", - "proc-macro2", - "quote", + "proc-macro2 1.0.94", + "quote 1.0.40", "syn 2.0.117", "wasm-bindgen-shared", ] diff --git a/libraries/droplet/Cargo.toml b/libraries/droplet/Cargo.toml index 1497a77d..0417f24b 100644 --- a/libraries/droplet/Cargo.toml +++ b/libraries/droplet/Cargo.toml @@ -31,6 +31,7 @@ futures = "0.3.31" getrandom = "0.3.4" libarchive-drop = { version = "*", path = "./libarchive-rust" } speedometer = "0.2.2" +test-generator = "0.3.1" [dependencies.x509-parser] version = "0.17.0" diff --git a/libraries/droplet/src/lib.rs b/libraries/droplet/src/lib.rs index 3459ecf0..666a17bc 100644 --- a/libraries/droplet/src/lib.rs +++ b/libraries/droplet/src/lib.rs @@ -2,9 +2,9 @@ #![feature(impl_trait_in_bindings)] pub mod file_utils; +pub mod manifest; pub mod ssl; pub mod versions; -pub mod manifest; pub mod vm; extern crate libarchive_drop; diff --git a/libraries/droplet/src/ssl.rs b/libraries/droplet/src/ssl.rs index 6f59e984..3a596497 100644 --- a/libraries/droplet/src/ssl.rs +++ b/libraries/droplet/src/ssl.rs @@ -1,5 +1,6 @@ use rcgen::{ - CertificateParams, DistinguishedName, Error, IsCa, KeyPair, KeyUsagePurpose, PublicKeyData, SubjectPublicKeyInfo + CertificateParams, DistinguishedName, Error, IsCa, KeyPair, KeyUsagePurpose, PublicKeyData, + SubjectPublicKeyInfo, }; use ring::rand::SystemRandom; use ring::signature::{EcdsaKeyPair, VerificationAlgorithm}; @@ -42,8 +43,7 @@ pub fn generate_client_certificate( root_ca: String, root_ca_private: String, ) -> Result, rcgen::Error> { - let root_key_pair = - KeyPair::from_pem(&root_ca_private)?; + let root_key_pair = KeyPair::from_pem(&root_ca_private)?; let certificate_params = CertificateParams::from_ca_cert_pem(&root_ca)?; let root_ca = CertificateParams::self_signed(certificate_params, &root_key_pair)?; diff --git a/libraries/droplet/src/tests.rs b/libraries/droplet/src/tests.rs index 99edf35b..d8d097f4 100644 --- a/libraries/droplet/src/tests.rs +++ b/libraries/droplet/src/tests.rs @@ -1,11 +1,45 @@ -use std::path::PathBuf; +#![cfg(test)] +extern crate test_generator; -use crate::versions::create_backend_constructor; +use std::path::Path; -#[tokio::test] -pub async fn test_7z_list() { - let zip_path = "/home/decduck/Dev/droplet/assets/TheGame.zip"; - let mut backend = create_backend_constructor(&PathBuf::from(zip_path)).unwrap()().unwrap(); - let files = backend.list_files().await.unwrap(); - tokio::fs::write("./test.txt", format!("{:?}", files)).await.unwrap(); +use serde_json::json; +use test_generator::test_resources; +use tokio::{fs::File, io::AsyncWriteExt}; + +use crate::manifest::generate_manifest_rusty; + +#[test_resources("testfiles/**/*.7z")] +fn manifest_gen(resource: &str) { + let runtime = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("failed to create tokio runtime"); + + runtime.block_on(async move { + let filepath = Path::new(resource); + let manifest = generate_manifest_rusty( + &filepath, + |_| {}, + |message| { + println!("({}) {}", filepath.display(), message); + }, + None, + ) + .await + .expect(&format!( + "failed to generate manifest for {}", + filepath.display() + )); + + let mut output_path = filepath.to_path_buf(); + output_path.set_extension("json"); + + let mut file = File::create(output_path) + .await + .expect("failed to open output path"); + file.write_all(json!(manifest).to_string().as_bytes()) + .await + .expect("failed to write output"); + }); } diff --git a/libraries/droplet/src/versions/archive_backend.rs b/libraries/droplet/src/versions/archive_backend.rs index 36890a86..bf1604fa 100644 --- a/libraries/droplet/src/versions/archive_backend.rs +++ b/libraries/droplet/src/versions/archive_backend.rs @@ -1,6 +1,6 @@ use std::{path::PathBuf, task::Poll}; -use anyhow::{anyhow}; +use anyhow::anyhow; use async_trait::async_trait; use libarchive_drop::{ archive::{Entry, FileType, ReadCompression, ReadFormat}, diff --git a/libraries/droplet/src/versions/mod.rs b/libraries/droplet/src/versions/mod.rs index 5549ff7c..e73be877 100644 --- a/libraries/droplet/src/versions/mod.rs +++ b/libraries/droplet/src/versions/mod.rs @@ -48,10 +48,7 @@ pub fn create_backend_constructor<'a>( })); }; - let file_extension = path - .extension() - .map(|v| v.to_str()) - .flatten()?; + let file_extension = path.extension().map(|v| v.to_str()).flatten()?; if SUPPORTED_FILE_EXTENSIONS .iter() diff --git a/libraries/droplet/src/versions/path_backend.rs b/libraries/droplet/src/versions/path_backend.rs index 5a0247fa..e3b70570 100644 --- a/libraries/droplet/src/versions/path_backend.rs +++ b/libraries/droplet/src/versions/path_backend.rs @@ -1,9 +1,6 @@ #[cfg(unix)] use std::os::unix::fs::PermissionsExt; -use std::{ - io::SeekFrom, - path::PathBuf, -}; +use std::{io::SeekFrom, path::PathBuf}; use anyhow::anyhow; use async_trait::async_trait; @@ -17,7 +14,10 @@ pub struct PathVersionBackend { pub base_dir: PathBuf, } -use crate::versions::{_list_files, types::{MinimumFileObject, VersionBackend, VersionFile}}; +use crate::versions::{ + _list_files, + types::{MinimumFileObject, VersionBackend, VersionFile}, +}; #[async_trait] impl VersionBackend for PathVersionBackend { @@ -34,7 +34,10 @@ impl VersionBackend for PathVersionBackend { self.peek_file( relative .to_str() - .ok_or(anyhow!("Could not parse path: {}", relative.to_string_lossy()))? + .ok_or(anyhow!( + "Could not parse path: {}", + relative.to_string_lossy() + ))? .to_owned(), ) .await?, diff --git a/libraries/droplet/src/versions/types.rs b/libraries/droplet/src/versions/types.rs index 317408da..d80c1b36 100644 --- a/libraries/droplet/src/versions/types.rs +++ b/libraries/droplet/src/versions/types.rs @@ -13,7 +13,6 @@ pub struct VersionFile { pub trait MinimumFileObject: AsyncRead + Send + Unpin {} impl MinimumFileObject for T {} - #[async_trait] pub trait VersionBackend { fn require_whole_files(&self) -> bool; diff --git a/libraries/droplet/src/vm/mod.rs b/libraries/droplet/src/vm/mod.rs index e69de29b..8b137891 100644 --- a/libraries/droplet/src/vm/mod.rs +++ b/libraries/droplet/src/vm/mod.rs @@ -0,0 +1 @@ + diff --git a/libraries/droplet/testfiles/bare_files/dotfile.7z b/libraries/droplet/testfiles/bare_files/dotfile.7z new file mode 100644 index 00000000..9c278ed2 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/dotfile.7z differ diff --git a/libraries/droplet/testfiles/bare_files/emoji_filename.7z b/libraries/droplet/testfiles/bare_files/emoji_filename.7z new file mode 100644 index 00000000..f65e7d1e Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/emoji_filename.7z differ diff --git a/libraries/droplet/testfiles/bare_files/empty_file.7z b/libraries/droplet/testfiles/bare_files/empty_file.7z new file mode 100644 index 00000000..0e4fa0bc Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/empty_file.7z differ diff --git a/libraries/droplet/testfiles/bare_files/file and archive with spaces.7z b/libraries/droplet/testfiles/bare_files/file and archive with spaces.7z new file mode 100644 index 00000000..4d3aab56 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/file and archive with spaces.7z differ diff --git a/libraries/droplet/testfiles/bare_files/file_with_space_in_extension.7z b/libraries/droplet/testfiles/bare_files/file_with_space_in_extension.7z new file mode 100644 index 00000000..59728fa0 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/file_with_space_in_extension.7z differ diff --git a/libraries/droplet/testfiles/bare_files/file_with_spaces.7z b/libraries/droplet/testfiles/bare_files/file_with_spaces.7z new file mode 100644 index 00000000..4d3aab56 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/file_with_spaces.7z differ diff --git a/libraries/droplet/testfiles/bare_files/file_without_extension.7z b/libraries/droplet/testfiles/bare_files/file_without_extension.7z new file mode 100644 index 00000000..309a706f Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/file_without_extension.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_only_environment_variable_name.7z b/libraries/droplet/testfiles/bare_files/filename_only_environment_variable_name.7z new file mode 100644 index 00000000..9bedd36f Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_only_environment_variable_name.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_asterisk.7z b/libraries/droplet/testfiles/bare_files/filename_with_asterisk.7z new file mode 100644 index 00000000..9435c06c Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_asterisk.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_backslashes.7z b/libraries/droplet/testfiles/bare_files/filename_with_backslashes.7z new file mode 100644 index 00000000..8a96cec6 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_backslashes.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_colon.7z b/libraries/droplet/testfiles/bare_files/filename_with_colon.7z new file mode 100644 index 00000000..7379dbe3 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_colon.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_dollar.7z b/libraries/droplet/testfiles/bare_files/filename_with_dollar.7z new file mode 100644 index 00000000..7d63273d Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_dollar.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_environment_variable_name.7z b/libraries/droplet/testfiles/bare_files/filename_with_environment_variable_name.7z new file mode 100644 index 00000000..8b7c3559 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_environment_variable_name.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_full_windows_path_name.7z b/libraries/droplet/testfiles/bare_files/filename_with_full_windows_path_name.7z new file mode 100644 index 00000000..9a81afaa Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_full_windows_path_name.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_lessthan.7z b/libraries/droplet/testfiles/bare_files/filename_with_lessthan.7z new file mode 100644 index 00000000..44a59cf2 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_lessthan.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_newline.7z b/libraries/droplet/testfiles/bare_files/filename_with_newline.7z new file mode 100644 index 00000000..8bda74ea Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_newline.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_spaces_and_backslashes.7z b/libraries/droplet/testfiles/bare_files/filename_with_spaces_and_backslashes.7z new file mode 100644 index 00000000..0d970e53 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_spaces_and_backslashes.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_tab.7z b/libraries/droplet/testfiles/bare_files/filename_with_tab.7z new file mode 100644 index 00000000..5bc3e38c Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_tab.7z differ diff --git a/libraries/droplet/testfiles/bare_files/filename_with_windows_environment_variable_name.7z b/libraries/droplet/testfiles/bare_files/filename_with_windows_environment_variable_name.7z new file mode 100644 index 00000000..2f2c2612 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/filename_with_windows_environment_variable_name.7z differ diff --git a/libraries/droplet/testfiles/bare_files/standard_archive.7z b/libraries/droplet/testfiles/bare_files/standard_archive.7z new file mode 100644 index 00000000..8d0c97cf Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/standard_archive.7z differ diff --git a/libraries/droplet/testfiles/bare_files/unicode_filename.7z b/libraries/droplet/testfiles/bare_files/unicode_filename.7z new file mode 100644 index 00000000..57999040 Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/unicode_filename.7z differ diff --git a/libraries/droplet/testfiles/bare_files/windows_reserved_file_name.7z b/libraries/droplet/testfiles/bare_files/windows_reserved_file_name.7z new file mode 100644 index 00000000..cbcbf9ef Binary files /dev/null and b/libraries/droplet/testfiles/bare_files/windows_reserved_file_name.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/dotsubdirectory.7z b/libraries/droplet/testfiles/subdirectories/dotsubdirectory.7z new file mode 100644 index 00000000..44e6e5fc Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/dotsubdirectory.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/empty_dotsubdirectory.7z b/libraries/droplet/testfiles/subdirectories/empty_dotsubdirectory.7z new file mode 100644 index 00000000..40cfafe9 Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/empty_dotsubdirectory.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/empty_subdirectory.7z b/libraries/droplet/testfiles/subdirectories/empty_subdirectory.7z new file mode 100644 index 00000000..c58de4c1 Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/empty_subdirectory.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/subdirectory_and_file_with_double_backslashes.7z b/libraries/droplet/testfiles/subdirectories/subdirectory_and_file_with_double_backslashes.7z new file mode 100644 index 00000000..344b4010 Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/subdirectory_and_file_with_double_backslashes.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/subdirectory_and_file_with_spaces.7z b/libraries/droplet/testfiles/subdirectories/subdirectory_and_file_with_spaces.7z new file mode 100644 index 00000000..99db08e7 Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/subdirectory_and_file_with_spaces.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/subdirectory_file_with_double_backslashes.7z b/libraries/droplet/testfiles/subdirectories/subdirectory_file_with_double_backslashes.7z new file mode 100644 index 00000000..a04225ec Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/subdirectory_file_with_double_backslashes.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/subdirectory_with_backslashes.7z b/libraries/droplet/testfiles/subdirectories/subdirectory_with_backslashes.7z new file mode 100644 index 00000000..44f867e9 Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/subdirectory_with_backslashes.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/subdirectory_with_double_backslashes.7z b/libraries/droplet/testfiles/subdirectories/subdirectory_with_double_backslashes.7z new file mode 100644 index 00000000..a0ee82a6 Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/subdirectory_with_double_backslashes.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/subdirectory_with_single_backslashes.7z b/libraries/droplet/testfiles/subdirectories/subdirectory_with_single_backslashes.7z new file mode 100644 index 00000000..1fbde22e Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/subdirectory_with_single_backslashes.7z differ diff --git a/libraries/droplet/testfiles/subdirectories/subdirectory_with_symlink_to_self.7z b/libraries/droplet/testfiles/subdirectories/subdirectory_with_symlink_to_self.7z new file mode 100644 index 00000000..ffcae23e Binary files /dev/null and b/libraries/droplet/testfiles/subdirectories/subdirectory_with_symlink_to_self.7z differ