Skip to content

Commit 34d68af

Browse files
[integration-test]Add configurable wait time for OTLP integration tests (#994)
https://datadoghq.atlassian.net/browse/SVLS-8286 ## Overview We noticed OTLP integration tests were flaky. One speculation was we didn't wait long enough before retrieving the result. Hence we made Datadog indexing wait time configurable and use 5-minute wait for OTLP tests (instead of default 60s) to accommodate longer data propagation delays through OTLP collector pipeline. ## Testing Local test: ``` npm test -- otlp.test.ts ... Waiting 300s for logs and traces to be indexed in Datadog... ... Test Suites: 1 passed, 1 total Tests: 13 passed, 13 total Snapshots: 0 total Time: 318.945 s ```
1 parent a21890b commit 34d68af

2 files changed

Lines changed: 21 additions & 9 deletions

File tree

integration-tests/tests/otlp.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { invokeLambdaAndGetDatadogData, LambdaInvocationDatadogData } from './utils/util';
1+
import { invokeLambdaAndGetDatadogData, LambdaInvocationDatadogData, DATADOG_INDEXING_WAIT_5_MIN_MS } from './utils/util';
22
import { getIdentifier } from '../config';
33
import { LambdaClient, InvokeCommand } from '@aws-sdk/client-lambda';
44

@@ -16,12 +16,12 @@ describe('OTLP Integration Tests', () => {
1616

1717
console.log('Invoking all OTLP Lambda functions in parallel...');
1818

19-
// Invoke all Lambdas in parallel
19+
// Invoke all Lambdas in parallel (using 5 minute wait for OTLP indexing)
2020
const invocationResults = await Promise.all([
21-
invokeLambdaAndGetDatadogData(functions.node, {}, true),
22-
invokeLambdaAndGetDatadogData(functions.python, {}, true),
23-
invokeLambdaAndGetDatadogData(functions.java, {}, true),
24-
invokeLambdaAndGetDatadogData(functions.dotnet, {}, true),
21+
invokeLambdaAndGetDatadogData(functions.node, {}, true, true, DATADOG_INDEXING_WAIT_5_MIN_MS),
22+
invokeLambdaAndGetDatadogData(functions.python, {}, true, true, DATADOG_INDEXING_WAIT_5_MIN_MS),
23+
invokeLambdaAndGetDatadogData(functions.java, {}, true, true, DATADOG_INDEXING_WAIT_5_MIN_MS),
24+
invokeLambdaAndGetDatadogData(functions.dotnet, {}, true, true, DATADOG_INDEXING_WAIT_5_MIN_MS),
2525
]);
2626

2727
// Store results

integration-tests/tests/utils/util.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { DatadogLog, DatadogTrace, getTraces, getLogs } from "./datadog";
22
import { invokeLambda } from "./lambda";
33

4+
// Default wait time for Datadog to index logs and traces after Lambda invocation
5+
const DEFAULT_DATADOG_INDEXING_WAIT_MS = 60 * 1000; // 60 seconds
6+
7+
// Extended wait time for tests that need more time (e.g., OTLP tests)
8+
export const DATADOG_INDEXING_WAIT_5_MIN_MS = 5 * 60 * 1000; // 5 minutes
9+
410
export interface LambdaInvocationDatadogData {
511
requestId: string;
612
statusCode: number;
@@ -9,11 +15,17 @@ export interface LambdaInvocationDatadogData {
915
logs?: DatadogLog[];
1016
}
1117

12-
export async function invokeLambdaAndGetDatadogData(functionName: string, payload: any = {}, coldStart: boolean = false, useTailLogs: boolean = true): Promise<LambdaInvocationDatadogData> {
18+
export async function invokeLambdaAndGetDatadogData(
19+
functionName: string,
20+
payload: any = {},
21+
coldStart: boolean = false,
22+
useTailLogs: boolean = true,
23+
datadogIndexingWaitMs: number = DEFAULT_DATADOG_INDEXING_WAIT_MS
24+
): Promise<LambdaInvocationDatadogData> {
1325
const result = await invokeLambda(functionName, payload, coldStart, useTailLogs);
1426

15-
console.log('Waiting for logs and traces to be indexed in Datadog...');
16-
await new Promise(resolve => setTimeout(resolve, 60_000));
27+
console.log(`Waiting ${datadogIndexingWaitMs / 1000}s for logs and traces to be indexed in Datadog...`);
28+
await new Promise(resolve => setTimeout(resolve, datadogIndexingWaitMs));
1729

1830
// Strip alias suffix (e.g., ":snapstart") for Datadog queries since service name doesn't include it
1931
const baseFunctionName = functionName.split(':')[0];

0 commit comments

Comments
 (0)