diff --git a/Cargo.lock b/Cargo.lock index 4a3239c533..f90302cbf0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -139,11 +139,12 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "archery" -version = "0.5.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6cd774058b1b415c4855d8b86436c04bf050c003156fe24bc326fb3fe75c343" +checksum = "8967cd1cc9e9e1954f644e14fbd6042fe9a37da96c52a67e44a2ac18261f8561" dependencies = [ "static_assertions", + "triomphe", ] [[package]] @@ -1181,9 +1182,9 @@ dependencies = [ [[package]] name = "comfy-table" -version = "6.1.4" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" +checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" dependencies = [ "crossterm", "strum", @@ -1494,25 +1495,22 @@ checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crossterm" -version = "0.25.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "crossterm_winapi", "libc", - "mio", "parking_lot 0.12.1", - "signal-hook", - "signal-hook-mio", "winapi", ] [[package]] name = "crossterm_winapi" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ "winapi", ] @@ -2103,12 +2101,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" -[[package]] -name = "futures-timer" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" - [[package]] name = "futures-util" version = "0.3.30" @@ -4397,7 +4389,6 @@ dependencies = [ "reqwest-retry", "reqwest-tracing", "routerify", - "rstest", "rustc-hash", "rustls 0.22.4", "rustls-pemfile 2.1.1", @@ -4673,12 +4664,6 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" -[[package]] -name = "relative-path" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c707298afce11da2efef2f600116fa93ffa7a032b5d7b628aa17711ec81383ca" - [[package]] name = "remote_storage" version = "0.1.0" @@ -4925,42 +4910,13 @@ dependencies = [ [[package]] name = "rpds" -version = "0.13.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd6ce569b15c331b1e5fd8cf6adb0bf240678b5f0cdc4d0f41e11683f6feba9" +checksum = "a0e15515d3ce3313324d842629ea4905c25a13f81953eadb88f85516f59290a4" dependencies = [ "archery", ] -[[package]] -name = "rstest" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199" -dependencies = [ - "futures", - "futures-timer", - "rstest_macros", - "rustc_version", -] - -[[package]] -name = "rstest_macros" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605" -dependencies = [ - "cfg-if", - "glob", - "proc-macro2", - "quote", - "regex", - "relative-path", - "rustc_version", - "syn 2.0.52", - "unicode-ident", -] - [[package]] name = "rust-ini" version = "0.20.0" @@ -5646,17 +5602,6 @@ dependencies = [ "signal-hook-registry", ] -[[package]] -name = "signal-hook-mio" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" -dependencies = [ - "libc", - "mio", - "signal-hook", -] - [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -5901,21 +5846,21 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strum" -version = "0.24.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" [[package]] name = "strum_macros" -version = "0.24.3" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn 2.0.52", ] [[package]] @@ -6640,6 +6585,12 @@ dependencies = [ "workspace_hack", ] +[[package]] +name = "triomphe" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" + [[package]] name = "try-lock" version = "0.2.4" diff --git a/Cargo.toml b/Cargo.toml index 530e654e9e..1594a947f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,7 +71,7 @@ camino = "1.1.6" cfg-if = "1.0.0" chrono = { version = "0.4", default-features = false, features = ["clock"] } clap = { version = "4.0", features = ["derive"] } -comfy-table = "6.1" +comfy-table = "7.1.1" const_format = "0.2" crc32c = "0.6" crossbeam-utils = "0.8.5" @@ -137,7 +137,7 @@ reqwest-tracing = { version = "0.5", features = ["opentelemetry_0_22"] } reqwest-middleware = "0.3.0" reqwest-retry = "0.5" routerify = "3" -rpds = "0.13" +rpds = "1.1" rustc-hash = "1.1.0" rustls = "0.22" rustls-pemfile = "2" @@ -156,8 +156,8 @@ signal-hook = "0.3" smallvec = "1.11" smol_str = { version = "0.2.0", features = ["serde"] } socket2 = "0.5" -strum = "0.24" -strum_macros = "0.24" +strum = "0.26" +strum_macros = "0.26" "subtle" = "2.5.0" # https://github.com/nical/rust_debug/pull/4 svg_fmt = { git = "https://github.com/neondatabase/fork--nical--rust_debug", branch = "neon" } @@ -233,7 +233,6 @@ workspace_hack = { version = "0.1", path = "./workspace_hack/" } ## Build dependencies criterion = "0.5.1" rcgen = "0.12" -rstest = "0.18" camino-tempfile = "1.0.2" tonic-build = "0.11" diff --git a/libs/pageserver_api/src/models.rs b/libs/pageserver_api/src/models.rs index 1df5820fb9..f8dbd520de 100644 --- a/libs/pageserver_api/src/models.rs +++ b/libs/pageserver_api/src/models.rs @@ -63,7 +63,7 @@ use bytes::{Buf, BufMut, Bytes, BytesMut}; serde::Serialize, serde::Deserialize, strum_macros::Display, - strum_macros::EnumVariantNames, + strum_macros::VariantNames, strum_macros::AsRefStr, strum_macros::IntoStaticStr, )] diff --git a/libs/utils/src/id.rs b/libs/utils/src/id.rs index 0409001f4f..b9b7ac6855 100644 --- a/libs/utils/src/id.rs +++ b/libs/utils/src/id.rs @@ -384,7 +384,7 @@ impl FromStr for NodeId { #[cfg(test)] mod tests { - use serde_assert::{Deserializer, Serializer, Token, Tokens}; + use serde_assert::{Deserializer, Serializer, Token}; use crate::bin_ser::BeSer; @@ -395,7 +395,7 @@ mod tests { let original_id = Id([ 173, 80, 132, 115, 129, 226, 72, 254, 170, 201, 135, 108, 199, 26, 228, 24, ]); - let expected_tokens = Tokens(vec![ + let expected_tokens = vec![ Token::Tuple { len: 16 }, Token::U8(173), Token::U8(80), @@ -414,15 +414,14 @@ mod tests { Token::U8(228), Token::U8(24), Token::TupleEnd, - ]); + ]; let serializer = Serializer::builder().is_human_readable(false).build(); let serialized_tokens = original_id.serialize(&serializer).unwrap(); assert_eq!(serialized_tokens, expected_tokens); - let mut deserializer = Deserializer::builder() + let mut deserializer = Deserializer::builder(serialized_tokens) .is_human_readable(false) - .tokens(serialized_tokens) .build(); let deserialized_id = Id::deserialize(&mut deserializer).unwrap(); assert_eq!(deserialized_id, original_id); @@ -433,20 +432,17 @@ mod tests { let original_id = Id([ 173, 80, 132, 115, 129, 226, 72, 254, 170, 201, 135, 108, 199, 26, 228, 24, ]); - let expected_tokens = Tokens(vec![Token::Str(String::from( - "ad50847381e248feaac9876cc71ae418", - ))]); + let expected_tokens = vec![Token::Str(String::from("ad50847381e248feaac9876cc71ae418"))]; let serializer = Serializer::builder().is_human_readable(true).build(); let serialized_tokens = original_id.serialize(&serializer).unwrap(); assert_eq!(serialized_tokens, expected_tokens); - let mut deserializer = Deserializer::builder() - .is_human_readable(true) - .tokens(Tokens(vec![Token::Str(String::from( - "ad50847381e248feaac9876cc71ae418", - ))])) - .build(); + let mut deserializer = Deserializer::builder(vec![Token::Str(String::from( + "ad50847381e248feaac9876cc71ae418", + ))]) + .is_human_readable(true) + .build(); assert_eq!(Id::deserialize(&mut deserializer).unwrap(), original_id); } diff --git a/libs/utils/src/logging.rs b/libs/utils/src/logging.rs index f7b73dc984..c9e6f1973c 100644 --- a/libs/utils/src/logging.rs +++ b/libs/utils/src/logging.rs @@ -3,9 +3,9 @@ use std::str::FromStr; use anyhow::Context; use metrics::{IntCounter, IntCounterVec}; use once_cell::sync::Lazy; -use strum_macros::{EnumString, EnumVariantNames}; +use strum_macros::{EnumString, VariantNames}; -#[derive(EnumString, EnumVariantNames, Eq, PartialEq, Debug, Clone, Copy)] +#[derive(EnumString, VariantNames, Eq, PartialEq, Debug, Clone, Copy)] #[strum(serialize_all = "snake_case")] pub enum LogFormat { Plain, diff --git a/libs/utils/src/lsn.rs b/libs/utils/src/lsn.rs index 1aebe91428..8c5503ff1a 100644 --- a/libs/utils/src/lsn.rs +++ b/libs/utils/src/lsn.rs @@ -415,7 +415,7 @@ mod tests { use super::*; - use serde_assert::{Deserializer, Serializer, Token, Tokens}; + use serde_assert::{Deserializer, Serializer, Token}; #[test] fn test_lsn_strings() { @@ -496,18 +496,16 @@ mod tests { #[test] fn test_lsn_serde() { let original_lsn = Lsn(0x0123456789abcdef); - let expected_readable_tokens = Tokens(vec![Token::U64(0x0123456789abcdef)]); - let expected_non_readable_tokens = - Tokens(vec![Token::Str(String::from("1234567/89ABCDEF"))]); + let expected_readable_tokens = vec![Token::U64(0x0123456789abcdef)]; + let expected_non_readable_tokens = vec![Token::Str(String::from("1234567/89ABCDEF"))]; // Testing human_readable ser/de let serializer = Serializer::builder().is_human_readable(false).build(); let readable_ser_tokens = original_lsn.serialize(&serializer).unwrap(); assert_eq!(readable_ser_tokens, expected_readable_tokens); - let mut deserializer = Deserializer::builder() + let mut deserializer = Deserializer::builder(readable_ser_tokens) .is_human_readable(false) - .tokens(readable_ser_tokens) .build(); let des_lsn = Lsn::deserialize(&mut deserializer).unwrap(); assert_eq!(des_lsn, original_lsn); @@ -517,9 +515,8 @@ mod tests { let non_readable_ser_tokens = original_lsn.serialize(&serializer).unwrap(); assert_eq!(non_readable_ser_tokens, expected_non_readable_tokens); - let mut deserializer = Deserializer::builder() + let mut deserializer = Deserializer::builder(non_readable_ser_tokens) .is_human_readable(true) - .tokens(non_readable_ser_tokens) .build(); let des_lsn = Lsn::deserialize(&mut deserializer).unwrap(); assert_eq!(des_lsn, original_lsn); @@ -528,18 +525,16 @@ mod tests { let serializer = Serializer::builder().is_human_readable(false).build(); let non_readable_ser_tokens = original_lsn.serialize(&serializer).unwrap(); - let mut deserializer = Deserializer::builder() + let mut deserializer = Deserializer::builder(non_readable_ser_tokens) .is_human_readable(true) - .tokens(non_readable_ser_tokens) .build(); Lsn::deserialize(&mut deserializer).unwrap_err(); let serializer = Serializer::builder().is_human_readable(true).build(); let readable_ser_tokens = original_lsn.serialize(&serializer).unwrap(); - let mut deserializer = Deserializer::builder() + let mut deserializer = Deserializer::builder(readable_ser_tokens) .is_human_readable(false) - .tokens(readable_ser_tokens) .build(); Lsn::deserialize(&mut deserializer).unwrap_err(); } @@ -551,9 +546,8 @@ mod tests { let serializer = Serializer::builder().is_human_readable(false).build(); let ser_tokens = original_lsn.serialize(&serializer).unwrap(); - let mut deserializer = Deserializer::builder() + let mut deserializer = Deserializer::builder(ser_tokens) .is_human_readable(false) - .tokens(ser_tokens) .build(); let des_lsn = Lsn::deserialize(&mut deserializer).unwrap(); diff --git a/pageserver/src/metrics.rs b/pageserver/src/metrics.rs index 256f2f334c..b7d681c879 100644 --- a/pageserver/src/metrics.rs +++ b/pageserver/src/metrics.rs @@ -9,7 +9,7 @@ use metrics::{ use once_cell::sync::Lazy; use pageserver_api::shard::TenantShardId; use strum::{EnumCount, IntoEnumIterator, VariantNames}; -use strum_macros::{EnumVariantNames, IntoStaticStr}; +use strum_macros::{IntoStaticStr, VariantNames}; use tracing::warn; use utils::id::TimelineId; @@ -27,7 +27,7 @@ const CRITICAL_OP_BUCKETS: &[f64] = &[ ]; // Metrics collected on operations on the storage repository. -#[derive(Debug, EnumVariantNames, IntoStaticStr)] +#[derive(Debug, VariantNames, IntoStaticStr)] #[strum(serialize_all = "kebab_case")] pub(crate) enum StorageTimeOperation { #[strum(serialize = "layer flush")] diff --git a/proxy/Cargo.toml b/proxy/Cargo.toml index 3002006aed..79d29c6e6d 100644 --- a/proxy/Cargo.toml +++ b/proxy/Cargo.toml @@ -107,7 +107,6 @@ workspace_hack.workspace = true camino-tempfile.workspace = true fallible-iterator.workspace = true rcgen.workspace = true -rstest.workspace = true tokio-postgres-rustls.workspace = true walkdir.workspace = true rand_distr = "0.4" diff --git a/proxy/src/proxy/tests.rs b/proxy/src/proxy/tests.rs index ad48af0093..cbf4876c08 100644 --- a/proxy/src/proxy/tests.rs +++ b/proxy/src/proxy/tests.rs @@ -20,7 +20,6 @@ use crate::proxy::retry::retry_after; use crate::{http, sasl, scram, BranchId, EndpointId, ProjectId}; use anyhow::{bail, Context}; use async_trait::async_trait; -use rstest::rstest; use rustls::pki_types; use tokio_postgres::config::SslMode; use tokio_postgres::tls::{MakeTlsConnect, NoTls}; @@ -273,12 +272,26 @@ async fn keepalive_is_inherited() -> anyhow::Result<()> { Ok(()) } -#[rstest] -#[case("password_foo")] -#[case("pwd-bar")] -#[case("")] -#[tokio::test] -async fn scram_auth_good(#[case] password: &str) -> anyhow::Result<()> { +mod scram_auth_good { + use super::*; + + #[tokio::test] + async fn case_1() -> anyhow::Result<()> { + scram_auth_good("password_foo").await + } + + #[tokio::test] + async fn case_2() -> anyhow::Result<()> { + scram_auth_good("pwd-bar").await + } + + #[tokio::test] + async fn case_3() -> anyhow::Result<()> { + scram_auth_good("").await + } +} + +async fn scram_auth_good(password: &str) -> anyhow::Result<()> { let (client, server) = tokio::io::duplex(1024); let (client_config, server_config) =