#![cfg(all(target_arch = "wasm32", feature = "telemetry"))]
use absurder_sql::telemetry::{SpanBuilder, WasmSpanExporter};
use wasm_bindgen_test::*;
wasm_bindgen_test_configure!(run_in_browser);
#[cfg(all(target_arch = "wasm32", feature = "telemetry"))]
mod telemetry_auto_export_tests {
use super::*;
#[wasm_bindgen_test]
async fn test_auto_export_on_batch_threshold() {
let mut exporter =
WasmSpanExporter::new("http://localhost:4318/v1/traces".to_string()).with_batch_size(3);
exporter.buffer_span(SpanBuilder::new("span_1".to_string()).build());
exporter.buffer_span(SpanBuilder::new("span_2".to_string()).build());
assert_eq!(exporter.buffered_count(), 2);
let result = exporter
.buffer_span_async(SpanBuilder::new("span_3".to_string()).build())
.await;
assert!(result.is_ok() || result.is_err()); }
#[wasm_bindgen_test]
async fn test_auto_export_clears_buffer_on_success() {
let mut exporter = WasmSpanExporter::new("http://localhost:4318/v1/traces".to_string())
.with_batch_size(2)
.with_auto_export(true);
exporter.buffer_span(SpanBuilder::new("span_1".to_string()).build());
exporter.buffer_span(SpanBuilder::new("span_2".to_string()).build());
let count = exporter.buffered_count();
assert!(count == 0 || count == 2);
}
#[wasm_bindgen_test]
async fn test_manual_export_still_works() {
let mut exporter = WasmSpanExporter::new("http://localhost:4318/v1/traces".to_string())
.with_batch_size(100) .with_auto_export(false);
for i in 0..5 {
exporter.buffer_span(SpanBuilder::new(format!("span_{}", i)).build());
}
assert_eq!(exporter.buffered_count(), 5);
let _ = exporter.flush().await;
}
#[wasm_bindgen_test]
async fn test_auto_export_configuration() {
let exporter1 = WasmSpanExporter::new("http://localhost:4318/v1/traces".to_string())
.with_auto_export(true);
assert!(exporter1.is_auto_export_enabled());
let exporter2 = WasmSpanExporter::new("http://localhost:4318/v1/traces".to_string())
.with_auto_export(false);
assert!(!exporter2.is_auto_export_enabled());
}
#[wasm_bindgen_test]
async fn test_export_error_handling() {
let mut exporter =
WasmSpanExporter::new("http://invalid-endpoint-12345.example.com/traces".to_string())
.with_batch_size(2)
.with_auto_export(true);
exporter.buffer_span(SpanBuilder::new("span_1".to_string()).build());
exporter.buffer_span(SpanBuilder::new("span_2".to_string()).build());
let count = exporter.buffered_count();
assert!(count <= 2); }
#[wasm_bindgen_test]
async fn test_batch_size_zero_disables_auto_export() {
let mut exporter =
WasmSpanExporter::new("http://localhost:4318/v1/traces".to_string()).with_batch_size(0);
for i in 0..10 {
exporter.buffer_span(SpanBuilder::new(format!("span_{}", i)).build());
}
assert_eq!(exporter.buffered_count(), 10);
}
#[wasm_bindgen_test]
async fn test_get_export_statistics() {
let exporter = WasmSpanExporter::new("http://localhost:4318/v1/traces".to_string());
let stats = exporter.get_export_stats();
assert_eq!(stats.total_exports, 0);
assert_eq!(stats.successful_exports, 0);
assert_eq!(stats.failed_exports, 0);
}
#[wasm_bindgen_test]
async fn test_export_statistics_tracking() {
let mut exporter =
WasmSpanExporter::new("http://localhost:4318/v1/traces".to_string()).with_batch_size(2);
exporter.buffer_span(SpanBuilder::new("span_1".to_string()).build());
exporter.buffer_span(SpanBuilder::new("span_2".to_string()).build());
let _ = exporter.flush().await;
let stats = exporter.get_export_stats();
assert!(stats.total_exports >= 1 || stats.total_exports == 0); }
}
#[cfg(not(all(target_arch = "wasm32", feature = "telemetry")))]
fn main() {
println!("Auto-export tests require WASM target and telemetry feature.");
}