diff --git a/shotover-proxy/tests/cassandra_int_tests/mod.rs b/shotover-proxy/tests/cassandra_int_tests/mod.rs index efd1345b0..e0ac259fb 100644 --- a/shotover-proxy/tests/cassandra_int_tests/mod.rs +++ b/shotover-proxy/tests/cassandra_int_tests/mod.rs @@ -289,18 +289,21 @@ async fn cluster_multi_rack(#[case] driver: CassandraDriver) { "example-configs/cassandra-cluster-multi-rack/topology_rack1.yaml", ) .with_log_name("Rack1") + .with_observability_port(9001) .start() .await; let shotover_rack2 = ShotoverProcessBuilder::new_with_topology( "example-configs/cassandra-cluster-multi-rack/topology_rack2.yaml", ) .with_log_name("Rack2") + .with_observability_port(9002) .start() .await; let shotover_rack3 = ShotoverProcessBuilder::new_with_topology( "example-configs/cassandra-cluster-multi-rack/topology_rack3.yaml", ) .with_log_name("Rack3") + .with_observability_port(9003) .start() .await; @@ -319,21 +322,9 @@ async fn cluster_multi_rack(#[case] driver: CassandraDriver) { //Check for bugs in cross connection state native_types::test(&connection().await).await; - // TODO: This can be removed by allowing the ShotoverProcessBuilder to specify the `observability_interface`. - let metrics_port_collision = [EventMatcher::new() - .with_level(Level::Error) - .with_target("shotover_proxy::observability") - .with_message(r#"Metrics HTTP server failed: Failed to bind to 0.0.0.0:9001"#) - .with_count(Count::Any)]; - shotover_rack1 - .shutdown_and_then_consume_events(&metrics_port_collision) - .await; - shotover_rack2 - .shutdown_and_then_consume_events(&metrics_port_collision) - .await; - shotover_rack3 - .shutdown_and_then_consume_events(&metrics_port_collision) - .await; + shotover_rack1.shutdown_and_then_consume_events(&[]).await; + shotover_rack2.shutdown_and_then_consume_events(&[]).await; + shotover_rack3.shutdown_and_then_consume_events(&[]).await; } cluster::multi_rack::test_topology_task(None).await; diff --git a/test-helpers/src/shotover_process.rs b/test-helpers/src/shotover_process.rs index c88c400af..944186275 100644 --- a/test-helpers/src/shotover_process.rs +++ b/test-helpers/src/shotover_process.rs @@ -1,4 +1,5 @@ use std::time::Duration; +use uuid::Uuid; pub use tokio_bin_process::event::{Event, Level}; pub use tokio_bin_process::event_matcher::{Count, EventMatcher, Events}; @@ -8,6 +9,7 @@ pub struct ShotoverProcessBuilder { topology_path: String, log_name: Option, cores: Option, + observability_port: Option, } impl ShotoverProcessBuilder { @@ -16,6 +18,7 @@ impl ShotoverProcessBuilder { topology_path: topology_path.to_owned(), log_name: None, cores: None, + observability_port: None, } } @@ -29,11 +32,32 @@ impl ShotoverProcessBuilder { self } + pub fn with_observability_port(mut self, port: u16) -> Self { + self.observability_port = Some(port); + self + } + pub async fn start(&self) -> BinProcess { let mut args = vec!["-t", &self.topology_path, "--log-format", "json"]; if let Some(cores) = &self.cores { args.extend(["--core-threads", cores]); } + let config_path = if let Some(observability_port) = self.observability_port { + let config_path = std::env::temp_dir().join(Uuid::new_v4().to_string()); + let config_contents = format!( + r#" +--- +main_log_level: "info,shotover_proxy=info" +observability_interface: "127.0.0.1:{observability_port}" +"# + ); + std::fs::write(&config_path, config_contents).unwrap(); + config_path.into_os_string().into_string().unwrap() + } else { + "config/config.yaml".to_owned() + }; + args.extend(["-c", &config_path]); + let mut shotover = BinProcess::start_with_args( "shotover-proxy", &args,