spanTree.spec.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import {EntrySpans} from 'sentry/types/event';
  2. function s(partial: Partial<EntrySpans['data'][0]>): EntrySpans['data'][0] {
  3. return {
  4. timestamp: 0,
  5. start_timestamp: 0,
  6. exclusive_time: 0,
  7. description: '',
  8. op: '',
  9. span_id: '',
  10. parent_span_id: '',
  11. trace_id: '',
  12. hash: '',
  13. data: {},
  14. ...partial,
  15. };
  16. }
  17. import {SpanTree} from './spanTree';
  18. describe('SpanTree', () => {
  19. it('appends to parent that contains span', () => {
  20. const tree = new SpanTree([
  21. s({span_id: '1', timestamp: 1, start_timestamp: 0}),
  22. s({span_id: '2', timestamp: 0.5, start_timestamp: 0}),
  23. ]);
  24. expect(tree.spanTree.children[0].span.span_id).toBe('1');
  25. expect(tree.spanTree.children[0].children[0].span.span_id).toBe('2');
  26. });
  27. it('pushes consequtive span', () => {
  28. const tree = new SpanTree([
  29. s({span_id: '1', timestamp: 1, start_timestamp: 0}),
  30. s({span_id: '2', timestamp: 0.5, start_timestamp: 0}),
  31. s({span_id: '3', timestamp: 0.8, start_timestamp: 0.5}),
  32. ]);
  33. expect(tree.spanTree.children[0].children[0].span.span_id).toBe('2');
  34. expect(tree.spanTree.children[0].children[1].span.span_id).toBe('3');
  35. });
  36. it('marks span as orphaned if end overlaps', () => {
  37. const tree = new SpanTree([
  38. s({span_id: '1', timestamp: 1, start_timestamp: 0}),
  39. s({span_id: '2', timestamp: 1.1, start_timestamp: 0.1}),
  40. ]);
  41. expect(tree.orphanedSpans[0].span_id).toBe('2');
  42. });
  43. it('iterates over all spans with depth', () => {
  44. const tree = new SpanTree([
  45. s({span_id: '1', timestamp: 1, start_timestamp: 0}),
  46. s({span_id: '2', timestamp: 0.5, start_timestamp: 0}),
  47. s({span_id: '3', timestamp: 0.2, start_timestamp: 0}),
  48. s({span_id: '4', timestamp: 1, start_timestamp: 0.5}),
  49. ]);
  50. expect(tree.spanTree.children[0].children[1].span.span_id).toBe('4');
  51. tree.forEach(span => {
  52. if (span.node.span.span_id === '1') {
  53. expect(span.depth).toBe(0);
  54. } else if (span.node.span.span_id === '2') {
  55. expect(span.depth).toBe(1);
  56. } else if (span.node.span.span_id === '3') {
  57. expect(span.depth).toBe(2);
  58. } else if (span.node.span.span_id === '4') {
  59. expect(span.depth).toBe(1);
  60. }
  61. });
  62. });
  63. });