Skip to content

Commit 5a248ff

Browse files
committed
Add a test
1 parent ed09dc1 commit 5a248ff

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

bottlecap/src/lifecycle/invocation/processor.rs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2119,4 +2119,75 @@ mod tests {
21192119
"Should return None when no trace context found"
21202120
);
21212121
}
2122+
2123+
/// Verifies that `client_computed_stats` set on a context via `add_tracer_span` is
2124+
/// propagated all the way through `send_ctx_spans` to the `aws.lambda` payload sent
2125+
/// to the backend, so the extension does not generate duplicate stats.
2126+
#[tokio::test]
2127+
#[allow(clippy::unwrap_used)]
2128+
async fn test_client_computed_stats_propagated_to_aws_lambda_span() {
2129+
use crate::traces::stats_concentrator_service::StatsConcentratorService;
2130+
use crate::traces::stats_generator::StatsGenerator;
2131+
use libdd_trace_obfuscation::obfuscation_config::ObfuscationConfig;
2132+
use tokio::sync::mpsc;
2133+
2134+
let config = Arc::new(config::Config {
2135+
apm_dd_url: "https://trace.agent.datadoghq.com".to_string(),
2136+
..config::Config::default()
2137+
});
2138+
let tags_provider = Arc::new(provider::Provider::new(
2139+
Arc::clone(&config),
2140+
LAMBDA_RUNTIME_SLUG.to_string(),
2141+
&HashMap::from([("function_arn".to_string(), "test-arn".to_string())]),
2142+
));
2143+
let aws_config = Arc::new(AwsConfig {
2144+
region: "us-east-1".into(),
2145+
aws_lwa_proxy_lambda_runtime_api: None,
2146+
function_name: "test-function".into(),
2147+
sandbox_init_time: Instant::now(),
2148+
runtime_api: "***".into(),
2149+
exec_wrapper: None,
2150+
initialization_type: "on-demand".into(),
2151+
});
2152+
let (aggregator_service, aggregator_handle) =
2153+
AggregatorService::new(EMPTY_TAGS, 1024).expect("failed to create aggregator service");
2154+
tokio::spawn(aggregator_service.run());
2155+
let propagator = Arc::new(DatadogCompositePropagator::new(Arc::clone(&config)));
2156+
let mut p = Processor::new(
2157+
Arc::clone(&tags_provider),
2158+
Arc::clone(&config),
2159+
aws_config,
2160+
aggregator_handle,
2161+
propagator,
2162+
);
2163+
2164+
let (trace_tx, mut trace_rx) = mpsc::channel(10);
2165+
let (stats_concentrator_service, stats_concentrator_handle) =
2166+
StatsConcentratorService::new(Arc::clone(&config));
2167+
tokio::spawn(stats_concentrator_service.run());
2168+
let trace_sender = Arc::new(SendingTraceProcessor {
2169+
appsec: None,
2170+
processor: Arc::new(trace_processor::ServerlessTraceProcessor {
2171+
obfuscation_config: Arc::new(
2172+
ObfuscationConfig::new().expect("Failed to create ObfuscationConfig"),
2173+
),
2174+
}),
2175+
trace_tx,
2176+
stats_generator: Arc::new(StatsGenerator::new(stats_concentrator_handle)),
2177+
});
2178+
2179+
let mut context = Context::from_request_id("req-1");
2180+
context.invocation_span.trace_id = 1;
2181+
context.invocation_span.span_id = 2;
2182+
context.client_computed_stats = true;
2183+
2184+
p.send_ctx_spans(&tags_provider, &trace_sender, context)
2185+
.await;
2186+
2187+
let payload = trace_rx.recv().await.expect("expected payload from trace_tx");
2188+
assert!(
2189+
payload.header_tags.client_computed_stats,
2190+
"client_computed_stats must be propagated to the aws.lambda span payload"
2191+
);
2192+
}
21222193
}

0 commit comments

Comments
 (0)