-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Expand file tree
/
Copy pathtest.ts
More file actions
95 lines (77 loc) · 3.22 KB
/
test.ts
File metadata and controls
95 lines (77 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import { expect } from '@playwright/test';
import { SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE } from '@sentry/core';
import { sentryTest } from '../../../../../utils/fixtures';
import { shouldSkipTracingTest } from '../../../../../utils/helpers';
import { getSpanOp, waitForStreamedSpan } from '../../../../../utils/spanUtils';
sentryTest("navigation spans link back to previous trace's root span", async ({ getLocalTestUrl, page }) => {
sentryTest.skip(shouldSkipTracingTest());
const url = await getLocalTestUrl({ testDir: __dirname });
const pageloadSpanPromise = waitForStreamedSpan(page, span => getSpanOp(span) === 'pageload');
await page.goto(url);
const pageloadSpan = await pageloadSpanPromise;
const navigation1SpanPromise = waitForStreamedSpan(page, span => getSpanOp(span) === 'navigation');
await page.goto(`${url}#foo`);
const navigation1Span = await navigation1SpanPromise;
const navigation2SpanPromise = waitForStreamedSpan(page, span => getSpanOp(span) === 'navigation');
await page.goto(`${url}#bar`);
const navigation2Span = await navigation2SpanPromise;
const pageloadTraceId = pageloadSpan.trace_id;
const navigation1TraceId = navigation1Span.trace_id;
const navigation2TraceId = navigation2Span.trace_id;
expect(pageloadSpan.links).toBeUndefined();
expect(navigation1Span.links).toEqual([
{
trace_id: pageloadTraceId,
span_id: pageloadSpan.span_id,
sampled: true,
attributes: {
[SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE]: {
type: 'string',
value: 'previous_trace',
},
},
},
]);
expect(navigation1Span.attributes?.['sentry.previous_trace']).toEqual({
type: 'string',
value: `${pageloadTraceId}-${pageloadSpan.span_id}-1`,
});
expect(navigation2Span.links).toEqual([
{
trace_id: navigation1TraceId,
span_id: navigation1Span.span_id,
sampled: true,
attributes: {
[SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE]: {
type: 'string',
value: 'previous_trace',
},
},
},
]);
expect(navigation2Span.attributes?.['sentry.previous_trace']).toEqual({
type: 'string',
value: `${navigation1TraceId}-${navigation1Span.span_id}-1`,
});
expect(pageloadTraceId).not.toEqual(navigation1TraceId);
expect(navigation1TraceId).not.toEqual(navigation2TraceId);
expect(pageloadTraceId).not.toEqual(navigation2TraceId);
});
sentryTest("doesn't link between hard page reloads by default", async ({ getLocalTestUrl, page }) => {
sentryTest.skip(shouldSkipTracingTest());
const url = await getLocalTestUrl({ testDir: __dirname });
await sentryTest.step('First pageload', async () => {
const pageloadSpanPromise = waitForStreamedSpan(page, span => getSpanOp(span) === 'pageload');
await page.goto(url);
const pageload1Span = await pageloadSpanPromise;
expect(pageload1Span).toBeDefined();
expect(pageload1Span.links).toBeUndefined();
});
await sentryTest.step('Second pageload', async () => {
const pageloadSpanPromise = waitForStreamedSpan(page, span => getSpanOp(span) === 'pageload');
await page.reload();
const pageload2Span = await pageloadSpanPromise;
expect(pageload2Span).toBeDefined();
expect(pageload2Span.links).toBeUndefined();
});
});