1 | 'use strict'
|
2 |
|
3 | const test = require('tap').test
|
4 | const semver = require('semver')
|
5 | const analyseMemory = require('../analysis/analyse-memory.js')
|
6 | const generateTraceEvent = require('./generate-trace-event.js')
|
7 |
|
8 | const oldNodeVersion = semver.parse('6.9.9')
|
9 | const newNodeVersion = semver.parse('10.0.0')
|
10 |
|
11 | test('analyse memory - genereate trace event', function (t) {
|
12 | const gcevents = generateTraceEvent(
|
13 | 'SSSSS.....--MMMMMFC'
|
14 | )
|
15 | t.strictDeepEquals(gcevents, [
|
16 | {
|
17 | pid: 0,
|
18 | tid: 0,
|
19 | ts: 0,
|
20 | ph: 'X',
|
21 | cat: 'v8',
|
22 | name: 'V8.GCScavenger',
|
23 | dur: 50000,
|
24 | args: { startTimestamp: 0, endTimestamp: 50 }
|
25 | },
|
26 | {
|
27 | pid: 0,
|
28 | tid: 0,
|
29 | ts: 300000,
|
30 | ph: 'X',
|
31 | cat: 'v8',
|
32 | name: 'V8.GCIncrementalMarking',
|
33 | dur: 50000,
|
34 | args: { startTimestamp: 300, endTimestamp: 350 }
|
35 | },
|
36 | {
|
37 | pid: 0,
|
38 | tid: 0,
|
39 | ts: 350000,
|
40 | ph: 'X',
|
41 | cat: 'v8',
|
42 | name: 'V8.GCIncrementalMarkingFinalize',
|
43 | dur: 10000,
|
44 | args: { startTimestamp: 350, endTimestamp: 360 }
|
45 | },
|
46 | {
|
47 | pid: 0,
|
48 | tid: 0,
|
49 | ts: 360000,
|
50 | ph: 'X',
|
51 | cat: 'v8',
|
52 | name: 'V8.GCFinalizeMC',
|
53 | dur: 10000,
|
54 | args: { startTimestamp: 360, endTimestamp: 370 }
|
55 | }
|
56 | ])
|
57 | t.end()
|
58 | })
|
59 |
|
60 | test('analyse memory - no issues', function (t) {
|
61 | const gcevents = generateTraceEvent(
|
62 | '-S....-S....-S....-S....-S....-S....-S....-S....-S....-S....' +
|
63 | '-M....-M....-S....-M....-M....-S....-M....-M....-FFF.. CCC..'
|
64 | )
|
65 |
|
66 | for (const nodeVersion of [oldNodeVersion, newNodeVersion]) {
|
67 | t.strictDeepEquals(analyseMemory({ nodeVersion }, [], gcevents), {
|
68 | external: 'none',
|
69 | heapTotal: 'none',
|
70 | heapUsed: 'none',
|
71 | rss: 'none'
|
72 | })
|
73 | }
|
74 | t.end()
|
75 | })
|
76 |
|
77 | test('analyse memory - no data', function (t) {
|
78 | const gcevents = generateTraceEvent(
|
79 | '.....'
|
80 | )
|
81 |
|
82 | for (const nodeVersion of [oldNodeVersion, newNodeVersion]) {
|
83 | t.strictDeepEquals(analyseMemory({ nodeVersion }, [], gcevents), {
|
84 | external: 'none',
|
85 | heapTotal: 'data',
|
86 | heapUsed: 'data',
|
87 | rss: 'none'
|
88 | })
|
89 | }
|
90 | t.end()
|
91 | })
|
92 |
|
93 | test('analyse memory - only old node version has issue', function (t) {
|
94 | const gcevents = generateTraceEvent(
|
95 | '-S....-S....-S....-S....-S....-S....-S....-S....-S....-S....' +
|
96 | ' MMM..-MMM..-MMM..-MMM..-S....-MMM-.-MMM-.-MMM..-FFFF. CCCCC'
|
97 | )
|
98 |
|
99 | t.strictDeepEquals(analyseMemory({ nodeVersion: newNodeVersion }, [], gcevents), {
|
100 | external: 'none',
|
101 | heapTotal: 'none',
|
102 | heapUsed: 'none',
|
103 | rss: 'none'
|
104 | })
|
105 |
|
106 | t.strictDeepEquals(analyseMemory({ nodeVersion: oldNodeVersion }, [], gcevents), {
|
107 | external: 'none',
|
108 | heapTotal: 'performance',
|
109 | heapUsed: 'none',
|
110 | rss: 'none'
|
111 | })
|
112 | t.end()
|
113 | })
|
114 |
|
115 | test('analyse memory - issue old space', function (t) {
|
116 | const gcevents = generateTraceEvent(
|
117 | '-S....-S....-S....-S....-S....-S....-S....-S....-S....-S....' +
|
118 | '-M.M.M.-FFF. CCCCCCCCCC.-S....-S....-S....-S....-S....-S....'
|
119 | )
|
120 |
|
121 | for (const nodeVersion of [oldNodeVersion, newNodeVersion]) {
|
122 | t.strictDeepEquals(analyseMemory({ nodeVersion }, [], gcevents), {
|
123 | external: 'none',
|
124 | heapTotal: 'performance',
|
125 | heapUsed: 'none',
|
126 | rss: 'none'
|
127 | })
|
128 | }
|
129 | t.end()
|
130 | })
|
131 |
|
132 | test('analyse memory - issue with new space', function (t) {
|
133 | const gcevents = generateTraceEvent(
|
134 | ' S.S.. S.S.. S.S.. S.S.. S.S.. S.S.. S.S.. S.S.. S.S.. S.S..' +
|
135 | ' S.M.. S.M.. S.S.. S.M.. S.M.. S.S.. S.M.. S.S.. FFF.. CCC..'
|
136 | )
|
137 |
|
138 | for (const nodeVersion of [oldNodeVersion, newNodeVersion]) {
|
139 | t.strictDeepEquals(analyseMemory({ nodeVersion }, [], gcevents), {
|
140 | external: 'none',
|
141 | heapTotal: 'none',
|
142 | heapUsed: 'performance',
|
143 | rss: 'none'
|
144 | })
|
145 | }
|
146 | t.end()
|
147 | })
|