| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import { deduplicatedLogsSelector } from './selectors';
- import { LogsDedupStrategy } from 'app/core/logs_model';
- import { ExploreItemState } from 'app/types';
- const state = {
- logsResult: {
- rows: [
- {
- entry: '2019-03-05T11:00:56Z sntpc sntpc[1]: offset=-0.033938, delay=0.000649',
- },
- {
- entry: '2019-03-05T11:00:26Z sntpc sntpc[1]: offset=-0.033730, delay=0.000581',
- },
- {
- entry: '2019-03-05T10:59:56Z sntpc sntpc[1]: offset=-0.034184, delay=0.001089',
- },
- {
- entry: '2019-03-05T10:59:26Z sntpc sntpc[1]: offset=-0.033972, delay=0.000582',
- },
- {
- entry: '2019-03-05T10:58:56Z sntpc sntpc[1]: offset=-0.033955, delay=0.000606',
- },
- {
- entry: '2019-03-05T10:58:26Z sntpc sntpc[1]: offset=-0.034067, delay=0.000616',
- },
- {
- entry: '2019-03-05T10:57:56Z sntpc sntpc[1]: offset=-0.034155, delay=0.001021',
- },
- {
- entry: '2019-03-05T10:57:26Z sntpc sntpc[1]: offset=-0.035797, delay=0.000883',
- },
- {
- entry: '2019-03-05T10:56:56Z sntpc sntpc[1]: offset=-0.046818, delay=0.000605',
- },
- {
- entry: '2019-03-05T10:56:26Z sntpc sntpc[1]: offset=-0.049200, delay=0.000584',
- },
- ],
- },
- hiddenLogLevels: undefined,
- dedupStrategy: LogsDedupStrategy.none,
- };
- describe('Deduplication selector', () => {
- it('should correctly deduplicate log rows when changing strategy multiple times', () => {
- // Simulating sequence of UI actions that was causing a problem with deduplication counter being visible when unnecessary.
- // The sequence was changing dedup strategy: (none -> exact -> numbers -> signature -> none) *2 -> exact. After that the first
- // row contained information that was deduped, while it shouldn't be.
- // Problem was caused by mutating the log results entries in redux state. The memoisation hash for deduplicatedLogsSelector
- // was changing depending on duplicates information from log row state, while should be dependand on log row only.
- let dedups = deduplicatedLogsSelector(state as ExploreItemState);
- expect(dedups.rows.length).toBe(10);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.none,
- } as ExploreItemState);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.exact,
- } as ExploreItemState);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.numbers,
- } as ExploreItemState);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.signature,
- } as ExploreItemState);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.none,
- } as ExploreItemState);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.exact,
- } as ExploreItemState);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.numbers,
- } as ExploreItemState);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.signature,
- } as ExploreItemState);
- deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.none,
- } as ExploreItemState);
- dedups = deduplicatedLogsSelector({
- ...state,
- dedupStrategy: LogsDedupStrategy.exact,
- } as ExploreItemState);
- // Expecting that no row has duplicates now
- expect(dedups.rows.reduce((acc, row) => acc + row.duplicates, 0)).toBe(0);
- });
- });
|