From 457d3d45466f6f7286d9292779fff9af480c61ee Mon Sep 17 00:00:00 2001 From: wjro Date: Tue, 6 Jan 2026 13:06:59 -0500 Subject: [PATCH] fix tests, cargo fmt, introduced crate serial_test to allow sequential testing env sensitive tests --- Cargo.lock | 87 ++++++++++++++++++ examples/nats/src/main.rs | 4 +- harmony/Cargo.toml | 1 + .../k8s_anywhere/.k8s_anywhere.rs.swp | Bin 0 -> 65536 bytes .../topology/k8s_anywhere/k8s_anywhere.rs | 9 ++ .../domain/topology/k8s_anywhere/postgres.rs | 5 +- harmony/src/domain/topology/router.rs | 7 +- harmony/src/modules/network/failover.rs | 8 +- harmony/src/modules/network/tls_router.rs | 1 + harmony/src/modules/postgresql/capability.rs | 5 +- .../src/modules/postgresql/score_public.rs | 4 +- 11 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 harmony/src/domain/topology/k8s_anywhere/.k8s_anywhere.rs.swp diff --git a/Cargo.lock b/Cargo.lock index ac4598b..f3befcc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1809,6 +1809,21 @@ dependencies = [ "url", ] +[[package]] +name = "example-nats" +version = "0.1.0" +dependencies = [ + "cidr", + "env_logger", + "harmony", + "harmony_cli", + "harmony_macros", + "harmony_types", + "log", + "tokio", + "url", +] + [[package]] name = "example-ntfy" version = "0.1.0" @@ -1883,6 +1898,36 @@ dependencies = [ "url", ] +[[package]] +name = "example-postgresql" +version = "0.1.0" +dependencies = [ + "cidr", + "env_logger", + "harmony", + "harmony_cli", + "harmony_macros", + "harmony_types", + "log", + "tokio", + "url", +] + +[[package]] +name = "example-public-postgres" +version = "0.1.0" +dependencies = [ + "cidr", + "env_logger", + "harmony", + "harmony_cli", + "harmony_macros", + "harmony_types", + "log", + "tokio", + "url", +] + [[package]] name = "example-pxe" version = "0.1.0" @@ -2435,6 +2480,7 @@ dependencies = [ "serde_json", "serde_with", "serde_yaml", + "serial_test", "similar", "sqlx", "strum 0.27.2", @@ -5116,6 +5162,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scc" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" +dependencies = [ + "sdd", +] + [[package]] name = "schannel" version = "0.1.27" @@ -5200,6 +5255,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sdd" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" + [[package]] name = "sec1" version = "0.7.3" @@ -5437,6 +5498,32 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "serial_test" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0b343e184fc3b7bb44dff0705fffcf4b3756ba6aff420dddd8b24ca145e555" +dependencies = [ + "futures-executor", + "futures-util", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "sha1" version = "0.10.6" diff --git a/examples/nats/src/main.rs b/examples/nats/src/main.rs index a3e50d3..ca0d7d5 100644 --- a/examples/nats/src/main.rs +++ b/examples/nats/src/main.rs @@ -57,5 +57,7 @@ async fn main() { .await .unwrap(); - info!("Enjoy! You can test your nats cluster by running : `kubectl exec -n {namespace} -it deployment/nats-box -- nats pub test hi`"); + info!( + "Enjoy! You can test your nats cluster by running : `kubectl exec -n {namespace} -it deployment/nats-box -- nats pub test hi`" + ); } diff --git a/harmony/Cargo.toml b/harmony/Cargo.toml index 634cbe9..9086e84 100644 --- a/harmony/Cargo.toml +++ b/harmony/Cargo.toml @@ -79,6 +79,7 @@ sqlx.workspace = true inquire.workspace = true brocade = { path = "../brocade" } option-ext = "0.2.0" +serial_test = "3.3.1" [dev-dependencies] pretty_assertions.workspace = true diff --git a/harmony/src/domain/topology/k8s_anywhere/.k8s_anywhere.rs.swp b/harmony/src/domain/topology/k8s_anywhere/.k8s_anywhere.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..ff072bdf30904b956fa1e5a335c27ce06a755416 GIT binary patch literal 65536 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 Result { + async fn get_replication_certs( + &self, + config: &PostgreSQLConfig, + ) -> Result { let cluster_name = &config.cluster_name; let namespace = &config.namespace; let k8s_client = self.k8s_client().await.map_err(|e| e.to_string())?; diff --git a/harmony/src/domain/topology/router.rs b/harmony/src/domain/topology/router.rs index 26aa572..5217c82 100644 --- a/harmony/src/domain/topology/router.rs +++ b/harmony/src/domain/topology/router.rs @@ -60,6 +60,7 @@ impl Router for UnmanagedRouter { /// hostname: "postgres-cluster-example.public.domain.io".to_string(), /// backend: "postgres-cluster-example-rw".to_string(), // k8s Service or HAProxy upstream /// target_port: 5432, +/// namespace: "sample-namespace".to_string(), /// }; /// ``` #[derive(Clone, Debug, Serialize)] @@ -115,11 +116,7 @@ pub trait TlsRouter: Send + Sync { /// routed to this cluster. /// /// For example, if we have *.apps.nationtech.io pointing to a public load balancer, then this - /// function would return - /// - /// ``` - /// Some(String::new("apps.nationtech.io")) - /// ``` + /// function would install route apps.nationtech.io async fn get_wildcard_domain(&self) -> Result, String>; /// Returns the port that this router exposes externally. diff --git a/harmony/src/modules/network/failover.rs b/harmony/src/modules/network/failover.rs index 9c99c5e..3880c02 100644 --- a/harmony/src/modules/network/failover.rs +++ b/harmony/src/modules/network/failover.rs @@ -5,10 +5,14 @@ use crate::topology::{FailoverTopology, TlsRoute, TlsRouter}; #[async_trait] impl TlsRouter for FailoverTopology { - async fn get_wildcard_domain(&self) -> Result, String> {todo!()} + async fn get_wildcard_domain(&self) -> Result, String> { + todo!() + } /// Returns the port that this router exposes externally. - async fn get_router_port(&self) -> u16 {todo!()} + async fn get_router_port(&self) -> u16 { + todo!() + } async fn install_route(&self, config: TlsRoute) -> Result<(), String> { warn!( "Failover topology TlsRouter capability currently defers to the primary only. Make sure to check this is OK for you. The Replica Topology WILL NOT be affected here" diff --git a/harmony/src/modules/network/tls_router.rs b/harmony/src/modules/network/tls_router.rs index 75f1a00..762f981 100644 --- a/harmony/src/modules/network/tls_router.rs +++ b/harmony/src/modules/network/tls_router.rs @@ -25,6 +25,7 @@ use crate::topology::{K8sclient, Topology}; /// backend: "postgres-cluster-rw".to_string(), /// hostname: "postgres-rw.example.com".to_string(), /// target_port: 5432, +/// namespace: "example-namespace".to_string(), /// }, /// }; /// ``` diff --git a/harmony/src/modules/postgresql/capability.rs b/harmony/src/modules/postgresql/capability.rs index 2de12a8..81ca83e 100644 --- a/harmony/src/modules/postgresql/capability.rs +++ b/harmony/src/modules/postgresql/capability.rs @@ -9,7 +9,10 @@ pub trait PostgreSQL: Send + Sync { /// Extracts PostgreSQL-specific replication certs (PEM format) from a deployed primary cluster. /// Abstracts away storage/retrieval details (e.g., secrets, files). - async fn get_replication_certs(&self, config: &PostgreSQLConfig) -> Result; + async fn get_replication_certs( + &self, + config: &PostgreSQLConfig, + ) -> Result; /// Gets the internal/private endpoint (e.g., k8s service FQDN:5432) for the cluster. async fn get_endpoint(&self, config: &PostgreSQLConfig) -> Result; diff --git a/harmony/src/modules/postgresql/score_public.rs b/harmony/src/modules/postgresql/score_public.rs index 66cf1a9..eaf3c88 100644 --- a/harmony/src/modules/postgresql/score_public.rs +++ b/harmony/src/modules/postgresql/score_public.rs @@ -69,9 +69,7 @@ struct PublicPostgreSQLInterpret { } #[async_trait] -impl Interpret - for PublicPostgreSQLInterpret -{ +impl Interpret for PublicPostgreSQLInterpret { async fn execute(&self, _inventory: &Inventory, topo: &T) -> Result { // Deploy CNPG cluster first (creates -rw service) topo.deploy(&self.config)