blob: 36b30bb23a8fc5d6c7b813c2749bdaedb0ab4f8f [file] [log] [blame]
import { assert } from 'chai';
import { DataFrameRepository } from './dataframe_context';
import './dataframe_context';
import { ColumnHeader, ReadOnlyParamSet } from '../json';
import fetchMock from 'fetch-mock';
import { setUpElementUnderTest } from '../../../infra-sk/modules/test_util';
import {
generateAnomalyMap,
generateFullDataFrame,
mockFrameStart,
} from './test_utils';
const now = 1726081856; // an arbitrary UNIX time;
const timeSpan = 89; // an arbitrary prime number for time span between commits .
const sorted = (a: (ColumnHeader | null)[]) => {
return a.every((v, idx, arr) => {
return idx === 0 || v!.offset > arr[idx - 1]!.offset;
});
};
describe('dataframe-repository', () => {
const newEl = setUpElementUnderTest<DataFrameRepository>(
'dataframe-repository-sk'
);
const paramset = ReadOnlyParamSet({
benchmark: ['Compile'],
bot: ['MacM1'],
ref_mode: ['head'],
});
const df = generateFullDataFrame({ begin: 90, end: 120 }, now, 3, [timeSpan]);
const anomaly = generateAnomalyMap(df, [
{ commit: 5, bugId: 555 },
{ commit: 15, bugId: 1515 },
{ commit: 25, bugId: 2525 },
]);
afterEach(() => {
fetchMock.reset();
});
it('initialize w/ no data', () => {
const dfRepo = newEl();
assert.deepEqual(dfRepo.commitRange, { begin: 0, end: 0 });
assert.deepEqual(dfRepo.timeRange, { begin: 0, end: 0 });
assert.isTrue(dfRepo.isEmpty);
assert.isEmpty(dfRepo.header);
assert.isEmpty(dfRepo.traces);
});
it('initialize w/ data', async () => {
mockFrameStart(df, paramset, anomaly);
const dfRepo = newEl();
assert.equal(
await dfRepo.resetTraces(
{
begin: now + 1,
end: now + timeSpan * 10,
},
paramset
),
10
);
// The trace key generated from generateFullDataFrame.
const traceKey = ',key=0';
assert.isTrue(sorted(dfRepo.header));
assert.sameOrderedMembers(
df.traceset[traceKey].slice(1, 11),
dfRepo.traces[traceKey]
);
assert.equal(dfRepo.anomaly[traceKey]![95].bug_id, 555);
});
it('init data and extend range', async () => {
mockFrameStart(df, paramset, anomaly);
const dfRepo = newEl();
assert.equal(
await dfRepo.resetTraces(
{
begin: now,
end: now + timeSpan * 10 - 1,
},
paramset
),
10
);
// The trace key generated from generateFullDataFrame.
const traceKey = ',key=0';
assert.isUndefined(dfRepo.anomaly[traceKey]![105]);
assert.equal(await dfRepo.extendRange(timeSpan * 10), 10);
assert.isTrue(sorted(dfRepo.header));
assert.lengthOf(dfRepo.header, 20);
assert.sameOrderedMembers(
df.traceset[traceKey].slice(0, 20),
dfRepo.traces[traceKey]
);
assert.equal(dfRepo.anomaly[traceKey]![105].bug_id, 1515);
});
it('init data and extend range both ways', async () => {
const df = generateFullDataFrame({ begin: 100, end: 201 }, now, 1, [
timeSpan,
]);
mockFrameStart(df, paramset);
const dfRepo = newEl();
assert.equal(
await dfRepo.resetTraces(
{
begin: now + timeSpan * 40,
end: now + timeSpan * 60 - 1,
},
paramset
),
20,
'init 20 traces'
);
assert.equal(
await dfRepo.extendRange(-timeSpan * 20),
20,
'extend backward first 20'
);
assert.equal(
await dfRepo.extendRange(timeSpan * 20),
20,
'extend forward first 20'
);
assert.equal(
await dfRepo.extendRange(-timeSpan * 20),
20,
'extend backward second 20'
);
assert.equal(
await dfRepo.extendRange(timeSpan * 20),
20,
'extend forward second 20'
);
assert.isTrue(sorted(dfRepo.header));
assert.lengthOf(dfRepo.header, 100);
assert.sameOrderedMembers(
df.traceset[',key=0'].slice(0, 100),
dfRepo.traces[',key=0']
);
});
it('init data and reset repo', async () => {
mockFrameStart(df, paramset);
const dfRepo = newEl();
assert.equal(
await dfRepo.resetTraces(
{
begin: now + 1,
end: now + timeSpan * 10,
},
paramset
),
10
);
assert.isTrue(sorted(dfRepo.header));
assert.sameOrderedMembers(
df.traceset[',key=0'].slice(1, 11),
dfRepo.traces[',key=0']
);
assert.equal(
await dfRepo.resetTraces(
{
begin: now + timeSpan * 10 + 1,
end: now + timeSpan * 25,
},
paramset
),
15
);
assert.isTrue(sorted(dfRepo.header));
assert.lengthOf(dfRepo.header, 15);
assert.sameOrderedMembers(
df.traceset[',key=0'].slice(11, 26),
dfRepo.traces[',key=0']
);
});
});