diff --git a/Cargo.nix b/Cargo.nix index d6fcf3aa..43968d1d 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -560,7 +560,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"; }; dependencies = { - ${ if hostPlatform.config == "aarch64-apple-darwin" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.115" { inherit profileName; }; + ${ if hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.kernel.name == "linux" || hostPlatform.config == "aarch64-apple-darwin" then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.115" { inherit profileName; }; }; }); @@ -985,6 +985,7 @@ in devDependencies = { aws_sdk_s3 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-s3."0.6.0" { inherit profileName; }; http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.5" { inherit profileName; }; + rand = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.4" { inherit profileName; }; static_init = rustPackages."registry+https://github.com/rust-lang/crates.io-index".static_init."1.0.2" { inherit profileName; }; }; }); @@ -2286,7 +2287,7 @@ in ]; dependencies = { ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.115" { inherit profileName; }; - ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "dragonfly" || hostPlatform.parsed.kernel.name == "freebsd" || hostPlatform.parsed.kernel.name == "illumos" || hostPlatform.parsed.kernel.name == "netbsd" || hostPlatform.parsed.kernel.name == "openbsd" || hostPlatform.parsed.kernel.name == "solaris" then "once_cell" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.8.0" { inherit profileName; }; + ${ if hostPlatform.parsed.kernel.name == "dragonfly" || hostPlatform.parsed.kernel.name == "freebsd" || hostPlatform.parsed.kernel.name == "illumos" || hostPlatform.parsed.kernel.name == "netbsd" || hostPlatform.parsed.kernel.name == "openbsd" || hostPlatform.parsed.kernel.name == "solaris" || hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "once_cell" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.8.0" { inherit profileName; }; ${ if hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" || (hostPlatform.parsed.cpu.name == "aarch64" || hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l") && (hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "fuchsia" || hostPlatform.parsed.kernel.name == "linux") then "spin" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".spin."0.5.2" { inherit profileName; }; untrusted = rustPackages."registry+https://github.com/rust-lang/crates.io-index".untrusted."0.7.1" { inherit profileName; }; ${ if hostPlatform.parsed.cpu.name == "wasm32" && hostPlatform.parsed.vendor.name == "unknown" && hostPlatform.parsed.kernel.name == "unknown" && hostPlatform.parsed.abi.name == "" then "web_sys" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.56" { inherit profileName; }; @@ -2645,7 +2646,7 @@ in ]; dependencies = { bitflags = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }; - ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.115" { inherit profileName; }; + ${ if hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "android" then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.115" { inherit profileName; }; ${ if !(hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "android") then "parking_lot" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.11.2" { inherit profileName; }; ${ if !(hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "android") then "parking_lot_core" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot_core."0.8.5" { inherit profileName; }; static_init_macro = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".static_init_macro."1.0.2" { profileName = "__noProfile"; }; diff --git a/src/garage/Cargo.toml b/src/garage/Cargo.toml index d6034bbd..eaf35358 100644 --- a/src/garage/Cargo.toml +++ b/src/garage/Cargo.toml @@ -56,4 +56,5 @@ netapp = "0.3.0" aws-sdk-s3 = "0.6" http = "0.2" +rand = "0.8" static_init = "1.0" diff --git a/src/garage/tests/common/mod.rs b/src/garage/tests/common/mod.rs index b5f7f0b2..c40fde0f 100644 --- a/src/garage/tests/common/mod.rs +++ b/src/garage/tests/common/mod.rs @@ -7,6 +7,7 @@ pub mod macros; pub mod client; pub mod ext; pub mod garage; +pub mod util; const REGION: Region = Region::from_static("garage-integ-test"); @@ -23,20 +24,27 @@ impl Context { Context { garage, client } } - pub fn create_bucket(&self, name: &str) { + /// Create an unique bucket with a random suffix. + /// + /// Return the created bucket full name. + pub fn create_bucket(&self, name: &str) -> String { + let bucket_name = format!("{}-{}", name, util::random_id(6)); + self.garage .command() - .args(["bucket", "create", name]) + .args(["bucket", "create", &bucket_name]) .quiet() .expect_success_status("Could not create bucket"); self.garage .command() .args(["bucket", "allow"]) .args(["--owner", "--read", "--write"]) - .arg(name) + .arg(&bucket_name) .args(["--key", &self.garage.key.name]) .quiet() .expect_success_status("Could not allow key for bucket"); + + bucket_name } } diff --git a/src/garage/tests/common/util.rs b/src/garage/tests/common/util.rs new file mode 100644 index 00000000..49c72879 --- /dev/null +++ b/src/garage/tests/common/util.rs @@ -0,0 +1,13 @@ +pub fn random_id(len: usize) -> String { + use rand::distributions::Slice; + use rand::Rng; + + static ALPHABET: &[u8] = b"abcdefghijklmnopqrstuvwxyz0123456789."; + + let rng = rand::thread_rng(); + rng.sample_iter(Slice::new(ALPHABET).unwrap()) + .map(|b| char::from(*b)) + .filter(|c| c.is_ascii_lowercase() || c.is_ascii_digit()) + .take(len) + .collect() +} diff --git a/src/garage/tests/simple.rs b/src/garage/tests/simple.rs index a627c770..bf88d8c2 100644 --- a/src/garage/tests/simple.rs +++ b/src/garage/tests/simple.rs @@ -5,13 +5,13 @@ async fn test_simple() { use aws_sdk_s3::ByteStream; let ctx = common::context(); - ctx.create_bucket("test-simple"); + let bucket = ctx.create_bucket("test-simple"); let data = ByteStream::from_static(b"Hello world!"); ctx.client .put_object() - .bucket("test-simple") + .bucket(&bucket) .key("test") .body(data) .send() @@ -21,7 +21,7 @@ async fn test_simple() { let res = ctx .client .get_object() - .bucket("test-simple") + .bucket(&bucket) .key("test") .send() .await @@ -35,13 +35,13 @@ async fn test_simple_2() { use aws_sdk_s3::ByteStream; let ctx = common::context(); - ctx.create_bucket("test-simple-2"); + let bucket = ctx.create_bucket("test-simple-2"); let data = ByteStream::from_static(b"Hello world!"); ctx.client .put_object() - .bucket("test-simple-2") + .bucket(&bucket) .key("test") .body(data) .send() @@ -51,7 +51,7 @@ async fn test_simple_2() { let res = ctx .client .get_object() - .bucket("test-simple-2") + .bucket(&bucket) .key("test") .send() .await