Skip to content

Commit

Permalink
✅ Add e2e test for telemetry usage (#3222)
Browse files Browse the repository at this point in the history
  • Loading branch information
thomas-lebeau authored Jan 23, 2025
1 parent a9f5ecd commit c11657d
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 4 deletions.
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export {
TelemetryErrorEvent,
TelemetryDebugEvent,
TelemetryConfigurationEvent,
TelemetryUsageEvent,
TelemetryService,
isTelemetryReplicationAllowed,
addTelemetryConfiguration,
Expand Down
10 changes: 7 additions & 3 deletions test/e2e/lib/framework/createTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,23 @@ import { createMockServerApp } from './serverApps/mock'
const DEFAULT_RUM_CONFIGURATION = {
applicationId: APPLICATION_ID,
clientToken: CLIENT_TOKEN,
sessionReplaySampleRate: 100,
defaultPrivacyLevel: DefaultPrivacyLevel.ALLOW,
trackResources: true,
trackLongTasks: true,
telemetrySampleRate: 100,
telemetryConfigurationSampleRate: 100,
enableExperimentalFeatures: [],
allowUntrustedEvents: true,
// Force All sample rates to 100% to avoid flakiness
sessionReplaySampleRate: 100,
telemetrySampleRate: 100,
telemetryUsageSampleRate: 100,
telemetryConfigurationSampleRate: 100,
}

const DEFAULT_LOGS_CONFIGURATION = {
clientToken: CLIENT_TOKEN,
// Force All sample rates to 100% to avoid flakiness
telemetrySampleRate: 100,
telemetryUsageSampleRate: 100,
telemetryConfigurationSampleRate: 100,
}

Expand Down
15 changes: 14 additions & 1 deletion test/e2e/lib/framework/intakeRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@ import type {
RumViewEvent,
RumVitalEvent,
} from '@datadog/browser-rum'
import type { TelemetryEvent, TelemetryErrorEvent, TelemetryConfigurationEvent } from '@datadog/browser-core'
import type {
TelemetryEvent,
TelemetryErrorEvent,
TelemetryConfigurationEvent,
TelemetryUsageEvent,
} from '@datadog/browser-core'
import type { BrowserSegment } from '@datadog/browser-rum/src/types'
import type { BrowserSegmentMetadataAndSegmentSizes } from '@datadog/browser-rum/src/domain/segmentCollection'

Expand Down Expand Up @@ -121,6 +126,10 @@ export class IntakeRegistry {
return this.telemetryEvents.filter(isTelemetryConfigurationEvent)
}

get telemetryUsageEvents() {
return this.telemetryEvents.filter(isTelemetryUsageEvent)
}

//
// Replay
//
Expand Down Expand Up @@ -185,3 +194,7 @@ function isTelemetryErrorEvent(event: TelemetryEvent): event is TelemetryErrorEv
function isTelemetryConfigurationEvent(event: TelemetryEvent): event is TelemetryConfigurationEvent {
return isTelemetryEvent(event) && event.telemetry.type === 'configuration'
}

function isTelemetryUsageEvent(event: TelemetryEvent): event is TelemetryUsageEvent {
return isTelemetryEvent(event) && event.telemetry.type === 'usage'
}
30 changes: 30 additions & 0 deletions test/e2e/scenario/telemetry.scenario.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,34 @@ describe('telemetry', () => {
expect(event.service).toEqual('browser-rum-sdk')
expect(event.telemetry.configuration.track_user_interactions).toEqual(true)
})

createTest('send usage telemetry for RUM')
.withSetup(bundleSetup)
.withRum()
.run(async ({ intakeRegistry }) => {
await browser.execute(() => {
window.DD_RUM!.addAction('foo')
})

await flushEvents()
expect(intakeRegistry.telemetryUsageEvents.length).toBe(2)
const event = intakeRegistry.telemetryUsageEvents[1] // first event is 'set-global-context' done in pageSetup.ts
expect(event.service).toEqual('browser-rum-sdk')
expect(event.telemetry.usage.feature).toEqual('add-action')
})

createTest('send usage telemetry for logs')
.withSetup(bundleSetup)
.withLogs()
.run(async ({ intakeRegistry }) => {
await browser.execute(() => {
window.DD_LOGS!.setTrackingConsent('granted')
})

await flushEvents()
expect(intakeRegistry.telemetryUsageEvents.length).toBe(1)
const event = intakeRegistry.telemetryUsageEvents[0]
expect(event.service).toEqual('browser-logs-sdk')
expect(event.telemetry.usage.feature).toEqual('set-tracking-consent')
})
})

0 comments on commit c11657d

Please sign in to comment.