| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const fs = require("fs");
- const HistogramLogReader_1 = require("./HistogramLogReader");
- const wasm_1 = require("./wasm");
- const { floor } = Math;
- function checkNotNull(actual) {
- expect(actual).not.toBeNull();
- }
- describe("Histogram Log Reader", () => {
- let fileContent;
- let tagFileContent;
- let fileContentWithBaseTime;
- let fileContentWithoutHeader;
- let fileContentWithTrailingWhitespace;
- beforeAll(() => {
- // when using mutation testing tool stryker, source code
- // is copied in a sandbox directory without the test_files
- // directory...
- const runFromStryker = __dirname.includes("stryker");
- const prefix = runFromStryker ? "../.." : ".";
- fileContent = fs.readFileSync(`${prefix}/test_files/jHiccup-2.0.7S.logV2.hlog`, "UTF-8");
- fileContentWithBaseTime = fs.readFileSync(`${prefix}/test_files/jHiccup-with-basetime-2.0.7S.logV2.hlog`, "UTF-8");
- fileContentWithoutHeader = fs.readFileSync(`${prefix}/test_files/jHiccup-no-header-2.0.7S.logV2.hlog`, "UTF-8");
- tagFileContent = fs.readFileSync(`${prefix}/test_files/tagged-Log.logV2.hlog`, "UTF-8");
- fileContentWithTrailingWhitespace = fs.readFileSync(`${prefix}/test_files/bug-whitespace.hlog`, "UTF-8");
- });
- it("should update startTimeSec reading first histogram", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent);
- // when
- reader.nextIntervalHistogram();
- // then
- expect(reader.startTimeSec).toBe(1441812279.474);
- });
- it("should read first histogram starting from the beginning", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent);
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- checkNotNull(histogram);
- // if mean is good, strong probability everything else is good as well
- expect(floor(histogram.mean)).toBe(301998);
- });
- it("should read encoded histogram and use provided constructor", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent, "packed");
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- checkNotNull(histogram);
- // if mean is good, strong probability everything else is good as well
- expect(floor(histogram.mean)).toBe(301998);
- });
- it("should return null if no histogram in the logs", () => {
- // given
- const reader = new HistogramLogReader_1.default("# empty");
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- expect(histogram).toBeNull();
- });
- it("should return next histogram in the logs", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent);
- reader.nextIntervalHistogram();
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- checkNotNull(histogram);
- // if mean is good, strong probability everything else is good as well
- expect(floor(histogram.mean)).toBe(293719);
- });
- it("should return null if all histograms are after specified time range", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent);
- // when
- const histogram = reader.nextIntervalHistogram(0.01, 0.1);
- // then
- expect(histogram).toBeNull();
- });
- it("should return null if all histograms are before specified time range", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent);
- // when
- const histogram = reader.nextIntervalHistogram(62, 63);
- // then
- expect(histogram).toBeNull();
- });
- it("should parse histogram even if there are trailing whitespaces", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContentWithTrailingWhitespace);
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- // no error
- });
- it("should return histograms within specified time range", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent);
- // when
- const firstHistogram = reader.nextIntervalHistogram(0, 2);
- const secondHistogram = reader.nextIntervalHistogram(0, 2);
- const thirdHistogram = reader.nextIntervalHistogram(0, 2);
- // then
- checkNotNull(firstHistogram);
- checkNotNull(secondHistogram);
- expect(thirdHistogram).toBeNull();
- // if mean is good, strong probability everything else is good as well
- expect(floor(firstHistogram.mean)).toBe(301998);
- expect(floor(secondHistogram.mean)).toBe(293719);
- });
- it("should set start timestamp on histogram", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent);
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- checkNotNull(histogram);
- expect(histogram.startTimeStampMsec).toBe(1441812279601);
- });
- it("should set end timestamp on histogram", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent);
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- checkNotNull(histogram);
- expect(histogram.endTimeStampMsec).toBe(1441812280608);
- });
- it("should parse tagged histogram", () => {
- // given
- const reader = new HistogramLogReader_1.default(tagFileContent);
- reader.nextIntervalHistogram();
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- checkNotNull(histogram);
- expect(histogram.tag).toBe("A");
- expect(floor(histogram.mean)).toBe(301998);
- });
- it("should use basetime to set timestamps on histogram", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContentWithBaseTime);
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- checkNotNull(histogram);
- expect(histogram.startTimeStampMsec).toBe(1441812123250);
- expect(histogram.endTimeStampMsec).toBe(1441812124257);
- });
- it("should default startTime using 1st observed time", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContentWithoutHeader);
- // when
- const histogram = reader.nextIntervalHistogram();
- // then
- checkNotNull(histogram);
- expect(histogram.startTimeStampMsec).toBe(127);
- expect(histogram.endTimeStampMsec).toBe(1134);
- });
- it("should list all the tags of a log file", () => {
- // given
- // when
- const tags = HistogramLogReader_1.listTags(tagFileContent);
- // then
- expect(tags).toEqual(["NO TAG", "A"]);
- });
- it("should list all the tags of a log file where all histograms are tagged", () => {
- // given
- const content = `#[Fake log chunk]
- #[Histogram log format version 1.2]
- #[StartTime: 1441812279.474 (seconds since epoch), Wed Sep 09 08:24:39 PDT 2015]
- "StartTimestamp","Interval_Length","Interval_Max","Interval_Compressed_Histogram"
- Tag=NOT-EMPTY,0.127,1.007,2.769,HISTFAAAAEV42pNpmSzMwMCgyAABTBDKT4GBgdnNYMcCBvsPEBEJISEuATEZMQ4uASkhIR4nrxg9v2lMaxhvMekILGZkKmcCAEf2CsI=
- Tag=A,0.127,1.007,2.769,HISTFAAAAEV42pNpmSzMwMCgyAABTBDKT4GBgdnNYMcCBvsPEBEJISEuATEZMQ4uASkhIR4nrxg9v2lMaxhvMekILGZkKmcCAEf2CsI=
- `;
- // when
- const tags = HistogramLogReader_1.listTags(content);
- // then
- expect(tags).toEqual(["NOT-EMPTY", "A"]);
- });
- describe("with WASM", () => {
- let accumulatedHistogram;
- beforeAll(wasm_1.initWebAssembly);
- afterEach(() => {
- accumulatedHistogram.destroy();
- });
- it("should do the whole 9 yards just like the original Java version :-)", () => {
- // given
- const reader = new HistogramLogReader_1.default(fileContent, 32, true);
- accumulatedHistogram = wasm_1.WasmHistogram.build();
- let histogram;
- let histogramCount = 0;
- let totalCount = 0;
- // when
- while ((histogram = reader.nextIntervalHistogram()) != null) {
- histogramCount++;
- totalCount += histogram.totalCount;
- accumulatedHistogram.add(histogram);
- histogram.destroy();
- }
- // then
- expect(histogramCount).toBe(62);
- expect(totalCount).toBe(48761);
- expect(accumulatedHistogram.getValueAtPercentile(99.9)).toBe(1745879039);
- expect(reader.startTimeSec).toBe(1441812279.474);
- });
- });
- });
- //# sourceMappingURL=HistogramLogReader.spec.js.map
|