This is an automated email from the ASF dual-hosted git repository. numinnex pushed a commit to branch integration_tests in repository https://gitbox.apache.org/repos/asf/iggy.git
commit 49053a08eec3b4a913a615efb02234cc1b571f6e Author: numinex <[email protected]> AuthorDate: Thu May 7 15:16:37 2026 +0200 temp --- core/harness_derive/src/attrs.rs | 18 +++++++++++++++ core/harness_derive/src/codegen.rs | 4 ++++ core/integration/src/harness/config/server.rs | 2 ++ core/integration/src/harness/handle/server.rs | 27 ++++++++++++++++++---- .../tests/sdk/{mod.rs => hello_world.rs} | 12 +++++++++- core/integration/tests/sdk/mod.rs | 1 + 6 files changed, 58 insertions(+), 6 deletions(-) diff --git a/core/harness_derive/src/attrs.rs b/core/harness_derive/src/attrs.rs index 7d8e68f7d..9c1018f31 100644 --- a/core/harness_derive/src/attrs.rs +++ b/core/harness_derive/src/attrs.rs @@ -182,6 +182,9 @@ pub struct ServerAttrs { /// Dynamic config overrides using dot-notation paths. pub config_overrides: Vec<ConfigOverride>, + /// Executable path or bare cargo binary name to launch for the test server. + pub executable_path: Option<String>, + /// Path to a TOML config file for the server. pub config_path: Option<String>, @@ -440,6 +443,11 @@ fn parse_server_attrs(input: ParseStream) -> syn::Result<ServerAttrs> { let lit: LitStr = input.parse()?; server.config_path = Some(lit.value()); } + "executable_path" => { + input.parse::<Token![=]>()?; + let lit: LitStr = input.parse()?; + server.executable_path = Some(lit.value()); + } _ => { input.parse::<Token![=]>()?; let value = parse_config_value(input)?; @@ -627,6 +635,16 @@ mod tests { assert!(matches!(&segment_size.value, ConfigValue::Static(s) if s == "1MiB")); } + #[test] + fn parse_server_executable_path() { + let attrs: IggyTestAttrs = + syn::parse_quote!(server(executable_path = "iggy-server-ng")); + assert_eq!( + attrs.server.executable_path.as_deref(), + Some("iggy-server-ng") + ); + } + #[test] fn parse_server_matrix() { let attrs: IggyTestAttrs = syn::parse_quote!(server(segment.size = ["512B", "1MiB"])); diff --git a/core/harness_derive/src/codegen.rs b/core/harness_derive/src/codegen.rs index 7f6e23a5e..4acbd8c25 100644 --- a/core/harness_derive/src/codegen.rs +++ b/core/harness_derive/src/codegen.rs @@ -424,6 +424,10 @@ fn generate_harness_setup( // Always add extra_envs (may be empty) server_builder_calls.push(quote!(.extra_envs(__extra_envs))); + if let Some(ref executable_path) = attrs.server.executable_path { + server_builder_calls.push(quote!(.executable_path(#executable_path))); + } + // If a config_path is specified, inject IGGY_CONFIG_PATH into extra_envs let config_path_setup = if let Some(ref config_path) = attrs.server.config_path { quote! { diff --git a/core/integration/src/harness/config/server.rs b/core/integration/src/harness/config/server.rs index 7925e12e9..e5ffdb9b7 100644 --- a/core/integration/src/harness/config/server.rs +++ b/core/integration/src/harness/config/server.rs @@ -56,10 +56,12 @@ mod tests { fn test_server_config_builder() { let config = TestServerConfig::builder() .quic_enabled(false) + .executable_path("iggy-server-ng") .extra_envs(HashMap::from([("FOO".to_string(), "BAR".to_string())])) .build(); assert!(!config.quic_enabled); + assert_eq!(config.executable_path.as_deref(), Some("iggy-server-ng")); assert_eq!(config.extra_envs.get("FOO"), Some(&"BAR".to_string())); } diff --git a/core/integration/src/harness/handle/server.rs b/core/integration/src/harness/handle/server.rs index 9752da94d..47839b84b 100644 --- a/core/integration/src/harness/handle/server.rs +++ b/core/integration/src/harness/handle/server.rs @@ -93,6 +93,14 @@ impl std::fmt::Debug for ServerHandle { } impl ServerHandle { + fn launched_binary(&self) -> String { + if let Some(path) = &self.config.executable_path { + path.clone() + } else { + "iggy-server".to_string() + } + } + pub fn tcp_addr(&self) -> Option<SocketAddr> { self.addrs.tcp } @@ -402,7 +410,7 @@ impl ServerHandle { { let (stdout, stderr) = self.collect_logs(); return Err(TestBinaryError::ProcessCrashed { - binary: "iggy-server".to_string(), + binary: self.launched_binary(), exit_code: status.code(), stdout, stderr, @@ -427,7 +435,7 @@ impl ServerHandle { } Err(TestBinaryError::StartupTimeout { - binary: "iggy-server".to_string(), + binary: self.launched_binary(), timeout_secs: MAX_PORT_WAIT_DURATION_S, }) } @@ -776,11 +784,20 @@ impl TestBinary for ServerHandle { } #[allow(deprecated)] + let launched_binary = self.launched_binary(); let mut command = if let Some(ref path) = self.config.executable_path { - Command::new(path) + let path_ref = Path::new(path); + if path_ref.components().count() == 1 && !path_ref.exists() { + Command::cargo_bin(path).map_err(|e| TestBinaryError::ProcessSpawn { + binary: launched_binary.clone(), + source: std::io::Error::other(e.to_string()), + })? + } else { + Command::new(path) + } } else { Command::cargo_bin("iggy-server").map_err(|e| TestBinaryError::ProcessSpawn { - binary: "iggy-server".to_string(), + binary: launched_binary.clone(), source: std::io::Error::other(e.to_string()), })? }; @@ -829,7 +846,7 @@ impl TestBinary for ServerHandle { } let child = command.spawn().map_err(|e| TestBinaryError::ProcessSpawn { - binary: "iggy-server".to_string(), + binary: launched_binary, source: e, })?; self.child_handle = Some(child); diff --git a/core/integration/tests/sdk/mod.rs b/core/integration/tests/sdk/hello_world.rs similarity index 72% copy from core/integration/tests/sdk/mod.rs copy to core/integration/tests/sdk/hello_world.rs index 6d94bfa61..42d5a25ba 100644 --- a/core/integration/tests/sdk/mod.rs +++ b/core/integration/tests/sdk/hello_world.rs @@ -16,4 +16,14 @@ * under the License. */ -mod producer; +use iggy::prelude::*; +use integration::iggy_harness; + +#[iggy_harness( + test_client_transport = [Tcp, Quic, WebSocket], + server(executable_path = "iggy-server-ng") +)] +async fn hello_world(harness: &TestHarness) { + let client = harness.root_client().await.unwrap(); + client.ping().await.unwrap(); +} diff --git a/core/integration/tests/sdk/mod.rs b/core/integration/tests/sdk/mod.rs index 6d94bfa61..05acd11c6 100644 --- a/core/integration/tests/sdk/mod.rs +++ b/core/integration/tests/sdk/mod.rs @@ -16,4 +16,5 @@ * under the License. */ +mod hello_world; mod producer;
