result_transformer.test.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import { LogLevel, LogsStream } from 'app/core/logs_model';
  2. import {
  3. findCommonLabels,
  4. findUniqueLabels,
  5. formatLabels,
  6. getLogLevel,
  7. mergeStreamsToLogs,
  8. parseLabels,
  9. } from './result_transformer';
  10. describe('getLoglevel()', () => {
  11. it('returns no log level on empty line', () => {
  12. expect(getLogLevel('')).toBe(LogLevel.none);
  13. });
  14. it('returns no log level on when level is part of a word', () => {
  15. expect(getLogLevel('this is a warning')).toBe(LogLevel.none);
  16. });
  17. it('returns log level on line contains a log level', () => {
  18. expect(getLogLevel('warn: it is looking bad')).toBe(LogLevel.warn);
  19. expect(getLogLevel('2007-12-12 12:12:12 [WARN]: it is looking bad')).toBe(LogLevel.warn);
  20. });
  21. it('returns first log level found', () => {
  22. expect(getLogLevel('WARN this could be a debug message')).toBe(LogLevel.warn);
  23. });
  24. });
  25. describe('parseLabels()', () => {
  26. it('returns no labels on emtpy labels string', () => {
  27. expect(parseLabels('')).toEqual({});
  28. expect(parseLabels('{}')).toEqual({});
  29. });
  30. it('returns labels on labels string', () => {
  31. expect(parseLabels('{foo="bar", baz="42"}')).toEqual({ foo: '"bar"', baz: '"42"' });
  32. });
  33. });
  34. describe('formatLabels()', () => {
  35. it('returns no labels on emtpy label set', () => {
  36. expect(formatLabels({})).toEqual('');
  37. expect(formatLabels({}, 'foo')).toEqual('foo');
  38. });
  39. it('returns label string on label set', () => {
  40. expect(formatLabels({ foo: '"bar"', baz: '"42"' })).toEqual('{baz="42", foo="bar"}');
  41. });
  42. });
  43. describe('findCommonLabels()', () => {
  44. it('returns no common labels on empty sets', () => {
  45. expect(findCommonLabels([{}])).toEqual({});
  46. expect(findCommonLabels([{}, {}])).toEqual({});
  47. });
  48. it('returns no common labels on differing sets', () => {
  49. expect(findCommonLabels([{ foo: '"bar"' }, {}])).toEqual({});
  50. expect(findCommonLabels([{}, { foo: '"bar"' }])).toEqual({});
  51. expect(findCommonLabels([{ baz: '42' }, { foo: '"bar"' }])).toEqual({});
  52. expect(findCommonLabels([{ foo: '42', baz: '"bar"' }, { foo: '"bar"' }])).toEqual({});
  53. });
  54. it('returns the single labels set as common labels', () => {
  55. expect(findCommonLabels([{ foo: '"bar"' }])).toEqual({ foo: '"bar"' });
  56. });
  57. });
  58. describe('findUniqueLabels()', () => {
  59. it('returns no uncommon labels on empty sets', () => {
  60. expect(findUniqueLabels({}, {})).toEqual({});
  61. });
  62. it('returns all labels given no common labels', () => {
  63. expect(findUniqueLabels({ foo: '"bar"' }, {})).toEqual({ foo: '"bar"' });
  64. });
  65. it('returns all labels except the common labels', () => {
  66. expect(findUniqueLabels({ foo: '"bar"', baz: '"42"' }, { foo: '"bar"' })).toEqual({ baz: '"42"' });
  67. });
  68. });
  69. describe('mergeStreamsToLogs()', () => {
  70. it('returns empty logs given no streams', () => {
  71. expect(mergeStreamsToLogs([]).rows).toEqual([]);
  72. });
  73. it('returns processed logs from single stream', () => {
  74. const stream1: LogsStream = {
  75. labels: '{foo="bar"}',
  76. entries: [
  77. {
  78. line: 'WARN boooo',
  79. timestamp: '1970-01-01T00:00:00Z',
  80. },
  81. ],
  82. };
  83. expect(mergeStreamsToLogs([stream1]).rows).toMatchObject([
  84. {
  85. entry: 'WARN boooo',
  86. labels: '{foo="bar"}',
  87. key: 'EK1970-01-01T00:00:00Z{foo="bar"}',
  88. logLevel: 'warn',
  89. uniqueLabels: '',
  90. },
  91. ]);
  92. });
  93. it('returns merged logs from multiple streams sorted by time and with unique labels', () => {
  94. const stream1: LogsStream = {
  95. labels: '{foo="bar", baz="1"}',
  96. entries: [
  97. {
  98. line: 'WARN boooo',
  99. timestamp: '1970-01-01T00:00:01Z',
  100. },
  101. ],
  102. };
  103. const stream2: LogsStream = {
  104. labels: '{foo="bar", baz="2"}',
  105. entries: [
  106. {
  107. line: 'INFO 1',
  108. timestamp: '1970-01-01T00:00:00Z',
  109. },
  110. {
  111. line: 'INFO 2',
  112. timestamp: '1970-01-01T00:00:02Z',
  113. },
  114. ],
  115. };
  116. expect(mergeStreamsToLogs([stream1, stream2]).rows).toMatchObject([
  117. {
  118. entry: 'INFO 2',
  119. labels: '{foo="bar", baz="2"}',
  120. logLevel: 'info',
  121. uniqueLabels: '{baz="2"}',
  122. },
  123. {
  124. entry: 'WARN boooo',
  125. labels: '{foo="bar", baz="1"}',
  126. logLevel: 'warn',
  127. uniqueLabels: '{baz="1"}',
  128. },
  129. {
  130. entry: 'INFO 1',
  131. labels: '{foo="bar", baz="2"}',
  132. logLevel: 'info',
  133. uniqueLabels: '{baz="2"}',
  134. },
  135. ]);
  136. });
  137. });