From 4ef3a3a5cd87098ae057008b930df02e196eab63 Mon Sep 17 00:00:00 2001 From: Matias Chomicki Date: Mon, 30 Jun 2025 14:36:42 +0100 Subject: [PATCH] Update tests --- .../logs/components/__mocks__/logRow.ts | 1 + .../logs/components/panel/processing.test.ts | 33 +++++++++++++++++-- .../components/panel/virtualization.test.ts | 31 +++++++++-------- .../logs/components/panel/virtualization.ts | 2 -- 4 files changed, 50 insertions(+), 17 deletions(-) diff --git a/public/app/features/logs/components/__mocks__/logRow.ts b/public/app/features/logs/components/__mocks__/logRow.ts index 09aa16998da..9efe2ee97eb 100644 --- a/public/app/features/logs/components/__mocks__/logRow.ts +++ b/public/app/features/logs/components/__mocks__/logRow.ts @@ -46,6 +46,7 @@ export const createLogLine = ( order: LogsSortOrder.Descending, timeZone: 'browser', virtualization: undefined, + wrapLogMessage: true, } ): LogListModel => { const logs = preProcessLogs([createLogRow(overrides)], processOptions); diff --git a/public/app/features/logs/components/panel/processing.test.ts b/public/app/features/logs/components/panel/processing.test.ts index 72461861e8b..9b51b26c8ea 100644 --- a/public/app/features/logs/components/panel/processing.test.ts +++ b/public/app/features/logs/components/panel/processing.test.ts @@ -79,6 +79,7 @@ describe('preProcessLogs', () => { getFieldLinks, order: LogsSortOrder.Descending, timeZone: 'browser', + wrapLogMessage: true, }); }); @@ -92,9 +93,37 @@ describe('preProcessLogs', () => { entry: `35.191.12.195 - accounts.google.com:test@grafana.com [18/Mar/2025:08:58:38 +0000] 200 "POST /grafana/api/ds/query?ds_type=prometheus&requestId=SQR461 HTTP/1.1" 59460 "https://test.example.com/?orgId=1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "95.91.240.90, 34.107.247.24"`, logLevel: LogLevel.critical, }); - const logListModel = new LogListModel(logRowModel, { escape: false, timeZone: 'browser ' }); + const logListModel = new LogListModel(logRowModel, { escape: false, timeZone: 'browser ', wrapLogMessage: true }); expect(logListModel).toMatchObject(logRowModel); }); + + test('Unwrapped log lines strip new lines', () => { + const logListModel = createLogLine( + { labels: { place: `lu\nna` }, entry: `log\n message\n 1` }, + { + escape: false, + order: LogsSortOrder.Descending, + timeZone: 'browser', + wrapLogMessage: false, // unwrapped + } + ); + expect(logListModel.getDisplayedFieldValue('place')).toBe('luna'); + expect(logListModel.body).toBe('log message 1'); + }); + + test('Wrapped log lines do not modify new lines', () => { + const logListModel = createLogLine( + { labels: { place: `lu\nna` }, entry: `log\n message\n 1` }, + { + escape: false, + order: LogsSortOrder.Descending, + timeZone: 'browser', + wrapLogMessage: true, // wrapped + } + ); + expect(logListModel.getDisplayedFieldValue('place')).toBe(logListModel.labels['place']); + expect(logListModel.body).toBe(logListModel.raw); + }); }); test('Orders logs', () => { @@ -176,7 +205,7 @@ describe('preProcessLogs', () => { entry = new Array(2 * virtualization.getTruncationLength(null)).fill('e').join(''); longLog = createLogLine( { entry, labels: { field: 'value' } }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization, wrapLogMessage: true } ); }); diff --git a/public/app/features/logs/components/panel/virtualization.test.ts b/public/app/features/logs/components/panel/virtualization.test.ts index b474332616c..d01bf42d4c4 100644 --- a/public/app/features/logs/components/panel/virtualization.test.ts +++ b/public/app/features/logs/components/panel/virtualization.test.ts @@ -3,7 +3,7 @@ import { createTheme, LogsSortOrder } from '@grafana/data'; import { LOG_LINE_BODY_FIELD_NAME } from '../LogDetailsBody'; import { createLogLine } from '../__mocks__/logRow'; -import { LogListModel } from './processing'; +import { LogListModel, PreProcessOptions } from './processing'; import { LogLineVirtualization, getLogLineSize, DisplayOptions } from './virtualization'; describe('Virtualization', () => { @@ -28,11 +28,16 @@ describe('Virtualization', () => { hasSampledLogs: false, }; + const preProcessOptions: PreProcessOptions = { + escape: false, + order: LogsSortOrder.Descending, + timeZone: 'browser', + virtualization, + wrapLogMessage: true, + }; + beforeEach(() => { - log = createLogLine( - { labels: { place: 'luna' }, entry: `log message 1` }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } - ); + log = createLogLine({ labels: { place: 'luna' }, entry: `log message 1` }, preProcessOptions); //virtualization = new LogLineVirtualization(createTheme(), 'default'); container = document.createElement('div'); jest.spyOn(container, 'clientWidth', 'get').mockReturnValue(CONTAINER_SIZE); @@ -86,7 +91,7 @@ describe('Virtualization', () => { entry: new Array(TWO_LINES_OF_CHARACTERS).fill('e').join(''), logLevel: undefined, }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + preProcessOptions ); const size = getLogLineSize(virtualization, [log], container, [], { ...defaultOptions, wrap: true }, 0); @@ -96,7 +101,7 @@ describe('Virtualization', () => { test('Measures a multi-line log line with level, controls, and displayed time', () => { log = createLogLine( { labels: { place: 'luna' }, entry: new Array(TWO_LINES_OF_CHARACTERS).fill('e').join('') }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + preProcessOptions ); const size = getLogLineSize( @@ -118,7 +123,7 @@ describe('Virtualization', () => { entry: new Array(TWO_LINES_OF_CHARACTERS).fill('e').join(''), logLevel: undefined, }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + preProcessOptions ); const size = getLogLineSize( @@ -136,7 +141,7 @@ describe('Virtualization', () => { test('Measures displayed fields in a log line with level, controls, and displayed time', () => { log = createLogLine( { labels: { place: 'luna' }, entry: new Array(TWO_LINES_OF_CHARACTERS).fill('e').join('') }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + preProcessOptions ); const size = getLogLineSize( @@ -154,7 +159,7 @@ describe('Virtualization', () => { test('Measures a multi-line log line with duplicates', () => { log = createLogLine( { labels: { place: 'luna' }, entry: new Array(TWO_LINES_OF_CHARACTERS).fill('e').join('') }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + preProcessOptions ); log.duplicates = 1; @@ -173,7 +178,7 @@ describe('Virtualization', () => { test('Measures a multi-line log line with errors', () => { log = createLogLine( { labels: { place: 'luna' }, entry: new Array(TWO_LINES_OF_CHARACTERS).fill('e').join('') }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + preProcessOptions ); const size = getLogLineSize( @@ -191,7 +196,7 @@ describe('Virtualization', () => { test('Measures a multi-line sampled log line', () => { log = createLogLine( { labels: { place: 'luna' }, entry: new Array(TWO_LINES_OF_CHARACTERS).fill('e').join('') }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + preProcessOptions ); const size = getLogLineSize( @@ -232,7 +237,7 @@ describe('Virtualization', () => { entry: new Array(TWO_LINES_OF_CHARACTERS).fill('e').join(''), logLevel: undefined, }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + preProcessOptions ); const size = getLogLineSize( diff --git a/public/app/features/logs/components/panel/virtualization.ts b/public/app/features/logs/components/panel/virtualization.ts index 5b7e8ac3b86..e5edf24864a 100644 --- a/public/app/features/logs/components/panel/virtualization.ts +++ b/public/app/features/logs/components/panel/virtualization.ts @@ -2,8 +2,6 @@ import ansicolor from 'ansicolor'; import { BusEventWithPayload, GrafanaTheme2 } from '@grafana/data'; -import { LOG_LINE_BODY_FIELD_NAME } from '../LogDetailsBody'; - import { LogListFontSize } from './LogList'; import { LogListModel } from './processing';