source: trip-planner-front/node_modules/hdr-histogram-js/dist/HistogramLogReader.spec.js@ fa375fe

Last change on this file since fa375fe was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 8.8 KB
Line 
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const fs = require("fs");
4const HistogramLogReader_1 = require("./HistogramLogReader");
5const wasm_1 = require("./wasm");
6const { floor } = Math;
7function checkNotNull(actual) {
8 expect(actual).not.toBeNull();
9}
10describe("Histogram Log Reader", () => {
11 let fileContent;
12 let tagFileContent;
13 let fileContentWithBaseTime;
14 let fileContentWithoutHeader;
15 let fileContentWithTrailingWhitespace;
16 beforeAll(() => {
17 // when using mutation testing tool stryker, source code
18 // is copied in a sandbox directory without the test_files
19 // directory...
20 const runFromStryker = __dirname.includes("stryker");
21 const prefix = runFromStryker ? "../.." : ".";
22 fileContent = fs.readFileSync(`${prefix}/test_files/jHiccup-2.0.7S.logV2.hlog`, "UTF-8");
23 fileContentWithBaseTime = fs.readFileSync(`${prefix}/test_files/jHiccup-with-basetime-2.0.7S.logV2.hlog`, "UTF-8");
24 fileContentWithoutHeader = fs.readFileSync(`${prefix}/test_files/jHiccup-no-header-2.0.7S.logV2.hlog`, "UTF-8");
25 tagFileContent = fs.readFileSync(`${prefix}/test_files/tagged-Log.logV2.hlog`, "UTF-8");
26 fileContentWithTrailingWhitespace = fs.readFileSync(`${prefix}/test_files/bug-whitespace.hlog`, "UTF-8");
27 });
28 it("should update startTimeSec reading first histogram", () => {
29 // given
30 const reader = new HistogramLogReader_1.default(fileContent);
31 // when
32 reader.nextIntervalHistogram();
33 // then
34 expect(reader.startTimeSec).toBe(1441812279.474);
35 });
36 it("should read first histogram starting from the beginning", () => {
37 // given
38 const reader = new HistogramLogReader_1.default(fileContent);
39 // when
40 const histogram = reader.nextIntervalHistogram();
41 // then
42 checkNotNull(histogram);
43 // if mean is good, strong probability everything else is good as well
44 expect(floor(histogram.mean)).toBe(301998);
45 });
46 it("should read encoded histogram and use provided constructor", () => {
47 // given
48 const reader = new HistogramLogReader_1.default(fileContent, "packed");
49 // when
50 const histogram = reader.nextIntervalHistogram();
51 // then
52 checkNotNull(histogram);
53 // if mean is good, strong probability everything else is good as well
54 expect(floor(histogram.mean)).toBe(301998);
55 });
56 it("should return null if no histogram in the logs", () => {
57 // given
58 const reader = new HistogramLogReader_1.default("# empty");
59 // when
60 const histogram = reader.nextIntervalHistogram();
61 // then
62 expect(histogram).toBeNull();
63 });
64 it("should return next histogram in the logs", () => {
65 // given
66 const reader = new HistogramLogReader_1.default(fileContent);
67 reader.nextIntervalHistogram();
68 // when
69 const histogram = reader.nextIntervalHistogram();
70 // then
71 checkNotNull(histogram);
72 // if mean is good, strong probability everything else is good as well
73 expect(floor(histogram.mean)).toBe(293719);
74 });
75 it("should return null if all histograms are after specified time range", () => {
76 // given
77 const reader = new HistogramLogReader_1.default(fileContent);
78 // when
79 const histogram = reader.nextIntervalHistogram(0.01, 0.1);
80 // then
81 expect(histogram).toBeNull();
82 });
83 it("should return null if all histograms are before specified time range", () => {
84 // given
85 const reader = new HistogramLogReader_1.default(fileContent);
86 // when
87 const histogram = reader.nextIntervalHistogram(62, 63);
88 // then
89 expect(histogram).toBeNull();
90 });
91 it("should parse histogram even if there are trailing whitespaces", () => {
92 // given
93 const reader = new HistogramLogReader_1.default(fileContentWithTrailingWhitespace);
94 // when
95 const histogram = reader.nextIntervalHistogram();
96 // then
97 // no error
98 });
99 it("should return histograms within specified time range", () => {
100 // given
101 const reader = new HistogramLogReader_1.default(fileContent);
102 // when
103 const firstHistogram = reader.nextIntervalHistogram(0, 2);
104 const secondHistogram = reader.nextIntervalHistogram(0, 2);
105 const thirdHistogram = reader.nextIntervalHistogram(0, 2);
106 // then
107 checkNotNull(firstHistogram);
108 checkNotNull(secondHistogram);
109 expect(thirdHistogram).toBeNull();
110 // if mean is good, strong probability everything else is good as well
111 expect(floor(firstHistogram.mean)).toBe(301998);
112 expect(floor(secondHistogram.mean)).toBe(293719);
113 });
114 it("should set start timestamp on histogram", () => {
115 // given
116 const reader = new HistogramLogReader_1.default(fileContent);
117 // when
118 const histogram = reader.nextIntervalHistogram();
119 // then
120 checkNotNull(histogram);
121 expect(histogram.startTimeStampMsec).toBe(1441812279601);
122 });
123 it("should set end timestamp on histogram", () => {
124 // given
125 const reader = new HistogramLogReader_1.default(fileContent);
126 // when
127 const histogram = reader.nextIntervalHistogram();
128 // then
129 checkNotNull(histogram);
130 expect(histogram.endTimeStampMsec).toBe(1441812280608);
131 });
132 it("should parse tagged histogram", () => {
133 // given
134 const reader = new HistogramLogReader_1.default(tagFileContent);
135 reader.nextIntervalHistogram();
136 // when
137 const histogram = reader.nextIntervalHistogram();
138 // then
139 checkNotNull(histogram);
140 expect(histogram.tag).toBe("A");
141 expect(floor(histogram.mean)).toBe(301998);
142 });
143 it("should use basetime to set timestamps on histogram", () => {
144 // given
145 const reader = new HistogramLogReader_1.default(fileContentWithBaseTime);
146 // when
147 const histogram = reader.nextIntervalHistogram();
148 // then
149 checkNotNull(histogram);
150 expect(histogram.startTimeStampMsec).toBe(1441812123250);
151 expect(histogram.endTimeStampMsec).toBe(1441812124257);
152 });
153 it("should default startTime using 1st observed time", () => {
154 // given
155 const reader = new HistogramLogReader_1.default(fileContentWithoutHeader);
156 // when
157 const histogram = reader.nextIntervalHistogram();
158 // then
159 checkNotNull(histogram);
160 expect(histogram.startTimeStampMsec).toBe(127);
161 expect(histogram.endTimeStampMsec).toBe(1134);
162 });
163 it("should list all the tags of a log file", () => {
164 // given
165 // when
166 const tags = HistogramLogReader_1.listTags(tagFileContent);
167 // then
168 expect(tags).toEqual(["NO TAG", "A"]);
169 });
170 it("should list all the tags of a log file where all histograms are tagged", () => {
171 // given
172 const content = `#[Fake log chunk]
173#[Histogram log format version 1.2]
174#[StartTime: 1441812279.474 (seconds since epoch), Wed Sep 09 08:24:39 PDT 2015]
175"StartTimestamp","Interval_Length","Interval_Max","Interval_Compressed_Histogram"
176Tag=NOT-EMPTY,0.127,1.007,2.769,HISTFAAAAEV42pNpmSzMwMCgyAABTBDKT4GBgdnNYMcCBvsPEBEJISEuATEZMQ4uASkhIR4nrxg9v2lMaxhvMekILGZkKmcCAEf2CsI=
177Tag=A,0.127,1.007,2.769,HISTFAAAAEV42pNpmSzMwMCgyAABTBDKT4GBgdnNYMcCBvsPEBEJISEuATEZMQ4uASkhIR4nrxg9v2lMaxhvMekILGZkKmcCAEf2CsI=
178`;
179 // when
180 const tags = HistogramLogReader_1.listTags(content);
181 // then
182 expect(tags).toEqual(["NOT-EMPTY", "A"]);
183 });
184 describe("with WASM", () => {
185 let accumulatedHistogram;
186 beforeAll(wasm_1.initWebAssembly);
187 afterEach(() => {
188 accumulatedHistogram.destroy();
189 });
190 it("should do the whole 9 yards just like the original Java version :-)", () => {
191 // given
192 const reader = new HistogramLogReader_1.default(fileContent, 32, true);
193 accumulatedHistogram = wasm_1.WasmHistogram.build();
194 let histogram;
195 let histogramCount = 0;
196 let totalCount = 0;
197 // when
198 while ((histogram = reader.nextIntervalHistogram()) != null) {
199 histogramCount++;
200 totalCount += histogram.totalCount;
201 accumulatedHistogram.add(histogram);
202 histogram.destroy();
203 }
204 // then
205 expect(histogramCount).toBe(62);
206 expect(totalCount).toBe(48761);
207 expect(accumulatedHistogram.getValueAtPercentile(99.9)).toBe(1745879039);
208 expect(reader.startTimeSec).toBe(1441812279.474);
209 });
210 });
211});
212//# sourceMappingURL=HistogramLogReader.spec.js.map
Note: See TracBrowser for help on using the repository browser.