node-os-utils 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README-zh.md +1291 -0
  3. package/README.md +3 -1
  4. package/dist/package.json +4 -2
  5. package/dist/src/adapters/linux-adapter.d.ts +17 -4
  6. package/dist/src/adapters/linux-adapter.d.ts.map +1 -1
  7. package/dist/src/adapters/linux-adapter.js +28 -11
  8. package/dist/src/adapters/linux-adapter.js.map +1 -1
  9. package/dist/src/adapters/macos-adapter.d.ts +17 -4
  10. package/dist/src/adapters/macos-adapter.d.ts.map +1 -1
  11. package/dist/src/adapters/macos-adapter.js +28 -11
  12. package/dist/src/adapters/macos-adapter.js.map +1 -1
  13. package/dist/src/adapters/windows-adapter.d.ts +13 -2
  14. package/dist/src/adapters/windows-adapter.d.ts.map +1 -1
  15. package/dist/src/adapters/windows-adapter.js +26 -3
  16. package/dist/src/adapters/windows-adapter.js.map +1 -1
  17. package/dist/src/monitors/process-monitor.d.ts +17 -4
  18. package/dist/src/monitors/process-monitor.d.ts.map +1 -1
  19. package/dist/src/monitors/process-monitor.js +30 -4
  20. package/dist/src/monitors/process-monitor.js.map +1 -1
  21. package/dist/src/utils/process-killer.d.ts +38 -0
  22. package/dist/src/utils/process-killer.d.ts.map +1 -0
  23. package/dist/src/utils/process-killer.js +96 -0
  24. package/dist/src/utils/process-killer.js.map +1 -0
  25. package/package.json +4 -2
  26. package/dist/.tsbuildinfo +0 -1
  27. package/dist/test/config/test-config.d.ts +0 -301
  28. package/dist/test/config/test-config.d.ts.map +0 -1
  29. package/dist/test/config/test-config.js +0 -235
  30. package/dist/test/config/test-config.js.map +0 -1
  31. package/dist/test/platform/linux.test.d.ts +0 -6
  32. package/dist/test/platform/linux.test.d.ts.map +0 -1
  33. package/dist/test/platform/linux.test.js +0 -307
  34. package/dist/test/platform/linux.test.js.map +0 -1
  35. package/dist/test/platform/macos.test.d.ts +0 -6
  36. package/dist/test/platform/macos.test.d.ts.map +0 -1
  37. package/dist/test/platform/macos.test.js +0 -276
  38. package/dist/test/platform/macos.test.js.map +0 -1
  39. package/dist/test/platform/windows.test.d.ts +0 -6
  40. package/dist/test/platform/windows.test.d.ts.map +0 -1
  41. package/dist/test/platform/windows.test.js +0 -320
  42. package/dist/test/platform/windows.test.js.map +0 -1
  43. package/dist/test/unit/adapters/adapter-factory.test.d.ts +0 -2
  44. package/dist/test/unit/adapters/adapter-factory.test.d.ts.map +0 -1
  45. package/dist/test/unit/adapters/adapter-factory.test.js +0 -147
  46. package/dist/test/unit/adapters/adapter-factory.test.js.map +0 -1
  47. package/dist/test/unit/adapters/linux-adapter.test.d.ts +0 -2
  48. package/dist/test/unit/adapters/linux-adapter.test.d.ts.map +0 -1
  49. package/dist/test/unit/adapters/linux-adapter.test.js +0 -280
  50. package/dist/test/unit/adapters/linux-adapter.test.js.map +0 -1
  51. package/dist/test/unit/adapters/macos-adapter.test.d.ts +0 -2
  52. package/dist/test/unit/adapters/macos-adapter.test.d.ts.map +0 -1
  53. package/dist/test/unit/adapters/macos-adapter.test.js +0 -237
  54. package/dist/test/unit/adapters/macos-adapter.test.js.map +0 -1
  55. package/dist/test/unit/adapters/windows-adapter.test.d.ts +0 -2
  56. package/dist/test/unit/adapters/windows-adapter.test.d.ts.map +0 -1
  57. package/dist/test/unit/adapters/windows-adapter.test.js +0 -111
  58. package/dist/test/unit/adapters/windows-adapter.test.js.map +0 -1
  59. package/dist/test/unit/core/base-monitor.test.d.ts +0 -2
  60. package/dist/test/unit/core/base-monitor.test.d.ts.map +0 -1
  61. package/dist/test/unit/core/base-monitor.test.js +0 -188
  62. package/dist/test/unit/core/base-monitor.test.js.map +0 -1
  63. package/dist/test/unit/core/cache-manager.test.d.ts +0 -6
  64. package/dist/test/unit/core/cache-manager.test.d.ts.map +0 -1
  65. package/dist/test/unit/core/cache-manager.test.js +0 -127
  66. package/dist/test/unit/core/cache-manager.test.js.map +0 -1
  67. package/dist/test/unit/core/platform-adapter.test.d.ts +0 -2
  68. package/dist/test/unit/core/platform-adapter.test.d.ts.map +0 -1
  69. package/dist/test/unit/core/platform-adapter.test.js +0 -186
  70. package/dist/test/unit/core/platform-adapter.test.js.map +0 -1
  71. package/dist/test/unit/index.test.d.ts +0 -2
  72. package/dist/test/unit/index.test.d.ts.map +0 -1
  73. package/dist/test/unit/index.test.js +0 -183
  74. package/dist/test/unit/index.test.js.map +0 -1
  75. package/dist/test/unit/monitors/cpu-monitor.test.d.ts +0 -2
  76. package/dist/test/unit/monitors/cpu-monitor.test.d.ts.map +0 -1
  77. package/dist/test/unit/monitors/cpu-monitor.test.js +0 -337
  78. package/dist/test/unit/monitors/cpu-monitor.test.js.map +0 -1
  79. package/dist/test/unit/monitors/disk-monitor.test.d.ts +0 -2
  80. package/dist/test/unit/monitors/disk-monitor.test.d.ts.map +0 -1
  81. package/dist/test/unit/monitors/disk-monitor.test.js +0 -46
  82. package/dist/test/unit/monitors/disk-monitor.test.js.map +0 -1
  83. package/dist/test/unit/monitors/memory-monitor.test.d.ts +0 -2
  84. package/dist/test/unit/monitors/memory-monitor.test.d.ts.map +0 -1
  85. package/dist/test/unit/monitors/memory-monitor.test.js +0 -142
  86. package/dist/test/unit/monitors/memory-monitor.test.js.map +0 -1
  87. package/dist/test/unit/monitors/network-monitor.test.d.ts +0 -2
  88. package/dist/test/unit/monitors/network-monitor.test.d.ts.map +0 -1
  89. package/dist/test/unit/monitors/network-monitor.test.js +0 -22
  90. package/dist/test/unit/monitors/network-monitor.test.js.map +0 -1
  91. package/dist/test/unit/monitors/process-monitor.test.d.ts +0 -2
  92. package/dist/test/unit/monitors/process-monitor.test.d.ts.map +0 -1
  93. package/dist/test/unit/monitors/process-monitor.test.js +0 -165
  94. package/dist/test/unit/monitors/process-monitor.test.js.map +0 -1
  95. package/dist/test/unit/monitors/system-monitor-macos.test.d.ts +0 -2
  96. package/dist/test/unit/monitors/system-monitor-macos.test.d.ts.map +0 -1
  97. package/dist/test/unit/monitors/system-monitor-macos.test.js +0 -115
  98. package/dist/test/unit/monitors/system-monitor-macos.test.js.map +0 -1
  99. package/dist/test/unit/monitors/system-monitor.test.d.ts +0 -2
  100. package/dist/test/unit/monitors/system-monitor.test.d.ts.map +0 -1
  101. package/dist/test/unit/monitors/system-monitor.test.js +0 -70
  102. package/dist/test/unit/monitors/system-monitor.test.js.map +0 -1
  103. package/dist/test/unit/types/common.test.d.ts +0 -6
  104. package/dist/test/unit/types/common.test.d.ts.map +0 -1
  105. package/dist/test/unit/types/common.test.js +0 -139
  106. package/dist/test/unit/types/common.test.js.map +0 -1
  107. package/dist/test/unit/types/config.test.d.ts +0 -2
  108. package/dist/test/unit/types/config.test.d.ts.map +0 -1
  109. package/dist/test/unit/types/config.test.js +0 -9
  110. package/dist/test/unit/types/config.test.js.map +0 -1
  111. package/dist/test/unit/types/errors.test.d.ts +0 -6
  112. package/dist/test/unit/types/errors.test.d.ts.map +0 -1
  113. package/dist/test/unit/types/errors.test.js +0 -184
  114. package/dist/test/unit/types/errors.test.js.map +0 -1
  115. package/dist/test/unit/types/index.test.d.ts +0 -2
  116. package/dist/test/unit/types/index.test.d.ts.map +0 -1
  117. package/dist/test/unit/types/index.test.js +0 -39
  118. package/dist/test/unit/types/index.test.js.map +0 -1
  119. package/dist/test/unit/types/monitors.test.d.ts +0 -2
  120. package/dist/test/unit/types/monitors.test.d.ts.map +0 -1
  121. package/dist/test/unit/types/monitors.test.js +0 -9
  122. package/dist/test/unit/types/monitors.test.js.map +0 -1
  123. package/dist/test/unit/types/platform.test.d.ts +0 -2
  124. package/dist/test/unit/types/platform.test.d.ts.map +0 -1
  125. package/dist/test/unit/types/platform.test.js +0 -9
  126. package/dist/test/unit/types/platform.test.js.map +0 -1
  127. package/dist/test/unit/utils/command-executor.test.d.ts +0 -6
  128. package/dist/test/unit/utils/command-executor.test.d.ts.map +0 -1
  129. package/dist/test/unit/utils/command-executor.test.js +0 -190
  130. package/dist/test/unit/utils/command-executor.test.js.map +0 -1
  131. package/dist/test/unit/utils/platform-specific.test.d.ts +0 -2
  132. package/dist/test/unit/utils/platform-specific.test.d.ts.map +0 -1
  133. package/dist/test/unit/utils/platform-specific.test.js +0 -32
  134. package/dist/test/unit/utils/platform-specific.test.js.map +0 -1
  135. package/dist/test/utils/platform-specific.d.ts +0 -139
  136. package/dist/test/utils/platform-specific.d.ts.map +0 -1
  137. package/dist/test/utils/platform-specific.js +0 -306
  138. package/dist/test/utils/platform-specific.js.map +0 -1
  139. package/dist/test/utils/test-base.d.ts +0 -157
  140. package/dist/test/utils/test-base.d.ts.map +0 -1
  141. package/dist/test/utils/test-base.js +0 -316
  142. package/dist/test/utils/test-base.js.map +0 -1
@@ -1,276 +0,0 @@
1
- "use strict";
2
- /**
3
- * macOS特定的单元测试
4
- * 测试在macOS系统上的功能和行为
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const chai_1 = require("chai");
8
- const test_base_1 = require("../utils/test-base");
9
- const src_1 = require("../../src");
10
- // 只在macOS系统上运行这些测试
11
- describe('macOS System Tests', function () {
12
- before(function () {
13
- if (!test_base_1.PlatformUtils.isMacOS()) {
14
- this.skip();
15
- }
16
- });
17
- let osu;
18
- before(function () {
19
- // 使用新版本2.0 API
20
- osu = new src_1.OSUtils();
21
- });
22
- after(function () {
23
- // 清理资源,防止测试卡死
24
- if (osu) {
25
- osu.destroy();
26
- }
27
- });
28
- describe('macOS CPU Module', function () {
29
- describe('#info()', function () {
30
- it('应该返回正确的CPU信息', (0, test_base_1.asyncTest)(async function () {
31
- const result = await osu.cpu.info();
32
- (0, chai_1.expect)(result.success).to.be.true;
33
- if (result.success) {
34
- (0, chai_1.expect)(result.data).to.exist;
35
- (0, chai_1.expect)(result.data.model).to.be.a('string');
36
- (0, chai_1.expect)(result.data.cores).to.be.a('number').and.greaterThan(0);
37
- (0, chai_1.expect)(result.data.threads).to.be.a('number').and.greaterThan(0);
38
- }
39
- }));
40
- });
41
- describe('#usage()', function () {
42
- it('应该能够在macOS上获取CPU使用率', (0, test_base_1.asyncTest)(async function () {
43
- const result = await osu.cpu.usage();
44
- if (!result.success) {
45
- this.skip();
46
- }
47
- if (result.success) {
48
- (0, chai_1.expect)(result.data).to.be.a('number');
49
- (0, chai_1.expect)(result.data).to.be.at.least(0);
50
- (0, chai_1.expect)(result.data).to.be.at.most(100);
51
- }
52
- }));
53
- });
54
- describe('#loadAverage()', function () {
55
- it('应该返回macOS的负载平均值', (0, test_base_1.asyncTest)(async function () {
56
- const result = await osu.cpu.loadAverage();
57
- (0, chai_1.expect)(result.success).to.be.true;
58
- if (result.success) {
59
- (0, chai_1.expect)(result.data).to.exist;
60
- (0, chai_1.expect)(result.data.load1).to.be.a('number').and.at.least(0);
61
- (0, chai_1.expect)(result.data.load5).to.be.a('number').and.at.least(0);
62
- (0, chai_1.expect)(result.data.load15).to.be.a('number').and.at.least(0);
63
- }
64
- }));
65
- });
66
- });
67
- describe('macOS Memory Module', function () {
68
- describe('#info()', function () {
69
- it('应该能够获取内存信息', (0, test_base_1.asyncTest)(async function () {
70
- const result = await osu.memory.info();
71
- (0, chai_1.expect)(result.success).to.be.true;
72
- if (result.success) {
73
- (0, chai_1.expect)(result.data).to.exist;
74
- (0, chai_1.expect)(result.data.total).to.exist;
75
- (0, chai_1.expect)(result.data.total.toBytes()).to.be.a('number').and.greaterThan(0);
76
- (0, chai_1.expect)(result.data.available).to.exist;
77
- (0, chai_1.expect)(result.data.used).to.exist;
78
- (0, chai_1.expect)(result.data.usagePercentage).to.be.a('number').and.at.least(0).and.at.most(100);
79
- }
80
- }));
81
- it('内存信息应该与系统信息一致', (0, test_base_1.asyncTest)(async function () {
82
- const memResult = await osu.memory.info();
83
- const os = require('os');
84
- const totalMem = os.totalmem();
85
- if (!memResult.success) {
86
- this.skip();
87
- }
88
- const tolerance = 0.1; // 允许10%的误差
89
- if (memResult.success) {
90
- const expectedTotal = memResult.data.total.toBytes();
91
- const ratio = Math.abs(totalMem - expectedTotal) / totalMem;
92
- (0, chai_1.expect)(ratio).to.be.below(tolerance);
93
- }
94
- }));
95
- });
96
- describe('#usage()', function () {
97
- it('应该返回内存使用率', (0, test_base_1.asyncTest)(async function () {
98
- const result = await osu.memory.usage();
99
- if (!result.success) {
100
- this.skip();
101
- }
102
- if (result.success) {
103
- (0, chai_1.expect)(result.data).to.be.a('number');
104
- (0, chai_1.expect)(result.data).to.be.at.least(0);
105
- (0, chai_1.expect)(result.data).to.be.at.most(100);
106
- }
107
- }));
108
- });
109
- });
110
- describe('macOS Disk Module', function () {
111
- describe('#info()', function () {
112
- it('应该能够获取磁盘信息', (0, test_base_1.asyncTest)(async function () {
113
- const result = await osu.disk.info();
114
- (0, chai_1.expect)(result.success).to.be.true;
115
- if (result.success) {
116
- (0, chai_1.expect)(result.data).to.be.an('array');
117
- if (result.data.length > 0) {
118
- const disk = result.data[0];
119
- (0, chai_1.expect)(disk.filesystem).to.be.a('string');
120
- (0, chai_1.expect)(disk.total).to.exist;
121
- (0, chai_1.expect)(disk.used).to.exist;
122
- (0, chai_1.expect)(disk.available).to.exist;
123
- (0, chai_1.expect)(disk.usagePercentage).to.be.a('number').and.at.least(0).and.at.most(100);
124
- }
125
- }
126
- }));
127
- it('应该支持macOS的多个卷', (0, test_base_1.asyncTest)(async function () {
128
- const result = await osu.disk.info();
129
- (0, chai_1.expect)(result.success).to.be.true;
130
- if (result.success) {
131
- (0, chai_1.expect)(result.data).to.be.an('array');
132
- // macOS 通常至少有根分区
133
- (0, chai_1.expect)(result.data.length).to.be.at.least(1);
134
- // 检查根分区
135
- const rootPartition = result.data.find(d => d.mountpoint === '/');
136
- (0, chai_1.expect)(rootPartition).to.exist;
137
- }
138
- }));
139
- });
140
- describe('#usage()', function () {
141
- it('磁盘空间信息应该与info()一致', (0, test_base_1.asyncTest)(async function () {
142
- const result = await osu.disk.overallUsage();
143
- if (!result.success) {
144
- this.skip();
145
- }
146
- if (result.success) {
147
- (0, chai_1.expect)(result.data).to.be.a('number');
148
- (0, chai_1.expect)(result.data).to.be.at.least(0);
149
- (0, chai_1.expect)(result.data).to.be.at.most(100);
150
- }
151
- }));
152
- });
153
- });
154
- describe('macOS Network Module', function () {
155
- describe('#interfaces()', function () {
156
- it('应该能够获取macOS网络接口统计', (0, test_base_1.asyncTest)(async function () {
157
- const result = await osu.network.interfaces();
158
- (0, chai_1.expect)(result.success).to.be.true;
159
- if (result.success) {
160
- (0, chai_1.expect)(result.data).to.be.an('array');
161
- if (result.data.length > 0) {
162
- const iface = result.data[0];
163
- (0, chai_1.expect)(iface.name).to.be.a('string');
164
- (0, chai_1.expect)(iface.addresses).to.exist;
165
- (0, chai_1.expect)(iface.mac).to.be.a('string');
166
- }
167
- }
168
- }));
169
- it('网络统计应该包含macOS典型接口', (0, test_base_1.asyncTest)(async function () {
170
- const result = await osu.network.interfaces();
171
- if (!result.success || result.data.length === 0) {
172
- this.skip();
173
- }
174
- if (result.success) {
175
- const interfaceNames = result.data.map(i => i.name);
176
- // 应该至少包含本地回环接口
177
- (0, chai_1.expect)(interfaceNames.some(name => name === 'lo0')).to.be.true;
178
- }
179
- }));
180
- });
181
- describe('#overview()', function () {
182
- it('应该能够计算macOS的网络流量', (0, test_base_1.asyncTest)(async function () {
183
- const result = await osu.network.overview();
184
- if (!result.success) {
185
- this.skip();
186
- }
187
- if (result.success) {
188
- (0, chai_1.expect)(result.data).to.exist;
189
- (0, chai_1.expect)(result.data.totalRxBytes).to.exist;
190
- (0, chai_1.expect)(result.data.totalTxBytes).to.exist;
191
- }
192
- }));
193
- it('网络流量计算应该准确', (0, test_base_1.asyncTest)(async function () {
194
- const result = await osu.network.overview();
195
- if (!result.success) {
196
- this.skip();
197
- }
198
- if (result.success) {
199
- (0, chai_1.expect)(result.data.totalRxBytes.toBytes()).to.be.a('number').and.at.least(0);
200
- (0, chai_1.expect)(result.data.totalTxBytes.toBytes()).to.be.a('number').and.at.least(0);
201
- }
202
- }));
203
- });
204
- });
205
- describe('macOS System Commands', function () {
206
- it('应该能够访问macOS特有的系统命令', (0, test_base_1.asyncTest)(async function () {
207
- const result = await osu.system.info();
208
- (0, chai_1.expect)(result.success).to.be.true;
209
- if (result.success) {
210
- (0, chai_1.expect)(result.data).to.exist;
211
- (0, chai_1.expect)(result.data.platform).to.equal('darwin');
212
- }
213
- }));
214
- it('应该能够执行system_profiler获取硬件信息', (0, test_base_1.asyncTest)(async function () {
215
- const result = await osu.system.info();
216
- (0, chai_1.expect)(result.success).to.be.true;
217
- if (result.success) {
218
- (0, chai_1.expect)(result.data.hostname).to.be.a('string');
219
- (0, chai_1.expect)(result.data.release).to.be.a('string');
220
- }
221
- }));
222
- });
223
- describe('macOS Performance Tests', function () {
224
- it('macOS系统调用应该高效执行', (0, test_base_1.longTest)(async function () {
225
- const monitor = new test_base_1.PerformanceMonitor();
226
- const start1 = Date.now();
227
- await osu.cpu.info();
228
- const cpu_time = Date.now() - start1;
229
- const start2 = Date.now();
230
- await osu.memory.info();
231
- const memory_time = Date.now() - start2;
232
- const start3 = Date.now();
233
- await osu.disk.info();
234
- const disk_time = Date.now() - start3;
235
- // macOS 系统调用应该在合理时间内完成
236
- (0, chai_1.expect)(cpu_time).to.be.below(1000, 'CPU info should complete within 1s');
237
- (0, chai_1.expect)(memory_time).to.be.below(1000, 'Memory info should complete within 1s');
238
- (0, chai_1.expect)(disk_time).to.be.below(2000, 'Disk info should complete within 2s');
239
- }));
240
- it('Apple Silicon Mac应该有更好的性能', (0, test_base_1.longTest)(async function () {
241
- const result = await osu.cpu.info();
242
- if (!result.success) {
243
- this.skip();
244
- }
245
- // 在 Apple Silicon Mac 上,某些操作可能更快
246
- if (result.success && result.data.model.includes('Apple')) {
247
- const start = Date.now();
248
- await osu.cpu.usage();
249
- const time = Date.now() - start;
250
- (0, chai_1.expect)(time).to.be.below(500, 'Apple Silicon should have faster CPU usage calls');
251
- }
252
- }));
253
- });
254
- describe('macOS Error Handling', function () {
255
- it('应该正确处理macOS特有的权限问题', (0, test_base_1.asyncTest)(async function () {
256
- // 测试权限受限的操作
257
- const result = await osu.process.list();
258
- // 如果没有权限,应该优雅地处理
259
- if (!result.success) {
260
- (0, chai_1.expect)(result.error).to.exist;
261
- (0, chai_1.expect)(result.error.code).to.be.oneOf(['PERMISSION_DENIED', 'NOT_SUPPORTED']);
262
- }
263
- }));
264
- it('应该处理不同版本的macOS', (0, test_base_1.asyncTest)(async function () {
265
- const result = await osu.system.info();
266
- (0, chai_1.expect)(result.success).to.be.true;
267
- if (result.success) {
268
- (0, chai_1.expect)(result.data.release).to.be.a('string');
269
- // 应该能够解析版本号
270
- const version = result.data.release;
271
- (0, chai_1.expect)(version).to.match(/\d+\.\d+/);
272
- }
273
- }));
274
- });
275
- });
276
- //# sourceMappingURL=macos.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"macos.test.js","sourceRoot":"","sources":["../../../test/platform/macos.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Windows特定的单元测试
3
- * 测试在Windows系统上特有的功能和行为
4
- */
5
- export {};
6
- //# sourceMappingURL=windows.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"windows.test.d.ts","sourceRoot":"","sources":["../../../test/platform/windows.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,320 +0,0 @@
1
- "use strict";
2
- /**
3
- * Windows特定的单元测试
4
- * 测试在Windows系统上特有的功能和行为
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const chai_1 = require("chai");
8
- const test_base_1 = require("../utils/test-base");
9
- const src_1 = require("../../src");
10
- // 只在Windows系统上运行这些测试
11
- describe('Windows System Tests', function () {
12
- before(function () {
13
- if (!test_base_1.PlatformUtils.isWindows()) {
14
- this.skip();
15
- }
16
- });
17
- let osu;
18
- before(function () {
19
- // 使用新版本2.0 API
20
- osu = new src_1.OSUtils();
21
- });
22
- after(function () {
23
- // 清理资源,防止测试卡死
24
- if (osu) {
25
- osu.destroy();
26
- }
27
- });
28
- describe('Windows CPU Module', function () {
29
- describe('#info()', function () {
30
- it('应该返回Windows的CPU信息', (0, test_base_1.asyncTest)(async function () {
31
- const result = await osu.cpu.info();
32
- (0, chai_1.expect)(result.success).to.be.true;
33
- if (result.success) {
34
- (0, chai_1.expect)(result.data).to.exist;
35
- (0, chai_1.expect)(result.data.model).to.be.a('string');
36
- (0, chai_1.expect)(result.data.cores).to.be.a('number').and.greaterThan(0);
37
- (0, chai_1.expect)(result.data.threads).to.be.a('number').and.greaterThan(0);
38
- }
39
- }));
40
- });
41
- describe('#loadAverage()', function () {
42
- it('Windows系统的loadavg可能不被完全支持', (0, test_base_1.asyncTest)(async function () {
43
- const result = await osu.cpu.loadAverage();
44
- if (!result.success) {
45
- (0, chai_1.expect)(result.error).to.exist;
46
- (0, chai_1.expect)(result.error.code).to.be.oneOf(['NOT_SUPPORTED', 'PLATFORM_NOT_SUPPORTED']);
47
- }
48
- else if (result.success) {
49
- (0, chai_1.expect)(result.data).to.exist;
50
- (0, chai_1.expect)(result.data.load1).to.be.a('number').and.at.least(0);
51
- (0, chai_1.expect)(result.data.load5).to.be.a('number').and.at.least(0);
52
- (0, chai_1.expect)(result.data.load15).to.be.a('number').and.at.least(0);
53
- }
54
- }));
55
- });
56
- describe('#usage()', function () {
57
- it('应该能够在Windows上获取CPU使用率', (0, test_base_1.asyncTest)(async function () {
58
- const result = await osu.cpu.usage();
59
- if (!result.success) {
60
- this.skip();
61
- }
62
- if (result.success) {
63
- (0, chai_1.expect)(result.data).to.be.a('number');
64
- (0, chai_1.expect)(result.data).to.be.at.least(0);
65
- (0, chai_1.expect)(result.data).to.be.at.most(100);
66
- }
67
- }));
68
- it('Windows CPU使用率应该支持不同间隔', (0, test_base_1.asyncTest)(async function () {
69
- const result = await osu.cpu.usage();
70
- if (!result.success) {
71
- this.skip();
72
- }
73
- if (result.success) {
74
- (0, chai_1.expect)(result.data).to.be.a('number');
75
- }
76
- }));
77
- });
78
- });
79
- describe('Windows Memory Module', function () {
80
- describe('#info()', function () {
81
- it('应该能够使用Windows命令获取内存信息', (0, test_base_1.asyncTest)(async function () {
82
- const result = await osu.memory.info();
83
- (0, chai_1.expect)(result.success).to.be.true;
84
- if (result.success) {
85
- (0, chai_1.expect)(result.data).to.exist;
86
- (0, chai_1.expect)(result.data.total).to.exist;
87
- (0, chai_1.expect)(result.data.total.bytes).to.be.a('number').and.greaterThan(0);
88
- (0, chai_1.expect)(result.data.available).to.exist;
89
- (0, chai_1.expect)(result.data.used).to.exist;
90
- (0, chai_1.expect)(result.data.usagePercentage).to.be.a('number');
91
- }
92
- }));
93
- it('Windows内存信息应该与系统总内存一致', (0, test_base_1.asyncTest)(async function () {
94
- const memResult = await osu.memory.info();
95
- const os = require('os');
96
- const totalMem = os.totalmem();
97
- if (!memResult.success) {
98
- this.skip();
99
- }
100
- const tolerance = 0.1; // 允许10%的误差
101
- if (memResult.success) {
102
- const expectedTotal = memResult.data.total.bytes;
103
- const ratio = Math.abs(totalMem - expectedTotal) / totalMem;
104
- (0, chai_1.expect)(ratio).to.be.below(tolerance);
105
- }
106
- }));
107
- });
108
- describe('#usage()', function () {
109
- it('Windows系统的内存分配信息', (0, test_base_1.asyncTest)(async function () {
110
- const result = await osu.memory.usage();
111
- if (!result.success) {
112
- this.skip();
113
- }
114
- if (result.success) {
115
- (0, chai_1.expect)(result.data).to.be.a('number');
116
- (0, chai_1.expect)(result.data).to.be.at.least(0);
117
- (0, chai_1.expect)(result.data).to.be.at.most(100);
118
- }
119
- }));
120
- });
121
- });
122
- describe('Windows Disk Module', function () {
123
- describe('#info()', function () {
124
- it('应该能够使用Windows命令获取磁盘信息', (0, test_base_1.asyncTest)(async function () {
125
- const result = await osu.disk.info();
126
- (0, chai_1.expect)(result.success).to.be.true;
127
- if (result.success) {
128
- (0, chai_1.expect)(result.data).to.be.an('array');
129
- if (result.data.length > 0) {
130
- const disk = result.data[0];
131
- (0, chai_1.expect)(disk.filesystem).to.be.a('string');
132
- (0, chai_1.expect)(disk.total).to.exist;
133
- (0, chai_1.expect)(disk.used).to.exist;
134
- (0, chai_1.expect)(disk.available).to.exist;
135
- }
136
- }
137
- }));
138
- it('应该支持Windows驱动器盘符', (0, test_base_1.asyncTest)(async function () {
139
- const result = await osu.disk.info();
140
- (0, chai_1.expect)(result.success).to.be.true;
141
- if (result.success) {
142
- (0, chai_1.expect)(result.data).to.be.an('array');
143
- // Windows 系统应该有驱动器盘符
144
- const driveLetters = result.data.map(d => d.mountpoint);
145
- (0, chai_1.expect)(driveLetters.some(drive => /^[A-Z]:$/.test(drive))).to.be.true;
146
- }
147
- }));
148
- it('C盘应该存在且有有效信息', (0, test_base_1.asyncTest)(async function () {
149
- const result = await osu.disk.info();
150
- if (!result.success) {
151
- this.skip();
152
- }
153
- if (result.success) {
154
- const cDrive = result.data.find(d => d.mountpoint.toLowerCase().startsWith('c:'));
155
- (0, chai_1.expect)(cDrive).to.exist;
156
- (0, chai_1.expect)(cDrive.total.bytes).to.be.greaterThan(0);
157
- (0, chai_1.expect)(cDrive.usagePercentage).to.be.a('number').and.at.least(0).and.at.most(100);
158
- }
159
- }));
160
- });
161
- describe('#usage()', function () {
162
- it('Windows磁盘空间信息应该一致', (0, test_base_1.asyncTest)(async function () {
163
- const result = await osu.disk.usage();
164
- if (!result.success) {
165
- this.skip();
166
- }
167
- if (result.success) {
168
- (0, chai_1.expect)(result.data).to.be.a('number');
169
- (0, chai_1.expect)(result.data).to.be.at.least(0);
170
- (0, chai_1.expect)(result.data).to.be.at.most(100);
171
- }
172
- }));
173
- });
174
- });
175
- describe('Windows Network Module', function () {
176
- describe('#interfaces()', function () {
177
- it('应该能够获取Windows网络接口统计', (0, test_base_1.asyncTest)(async function () {
178
- const result = await osu.network.interfaces();
179
- (0, chai_1.expect)(result.success).to.be.true;
180
- if (result.success) {
181
- (0, chai_1.expect)(result.data).to.be.an('array');
182
- if (result.data.length > 0) {
183
- const iface = result.data[0];
184
- (0, chai_1.expect)(iface.name).to.be.a('string');
185
- (0, chai_1.expect)(iface.addresses).to.exist;
186
- (0, chai_1.expect)(iface.mac).to.be.a('string');
187
- }
188
- }
189
- }));
190
- it('网络统计应该包含Windows典型接口类型', (0, test_base_1.asyncTest)(async function () {
191
- const result = await osu.network.interfaces();
192
- if (!result.success || result.data.length === 0) {
193
- this.skip();
194
- }
195
- if (result.success) {
196
- const interfaceNames = result.data.map(i => i.name.toLowerCase());
197
- const commonWindowsInterfaces = ['ethernet', 'wi-fi', 'loopback', 'wireless'];
198
- // Windows 应该有某种网络接口
199
- (0, chai_1.expect)(result.data.length).to.be.greaterThan(0);
200
- }
201
- }));
202
- });
203
- describe('#overview()', function () {
204
- it('应该能够计算Windows的网络流量', (0, test_base_1.asyncTest)(async function () {
205
- const result = await osu.network.overview();
206
- if (!result.success) {
207
- this.skip();
208
- }
209
- if (result.success) {
210
- (0, chai_1.expect)(result.data).to.exist;
211
- (0, chai_1.expect)(result.data.totalRxBytes).to.exist;
212
- (0, chai_1.expect)(result.data.totalTxBytes).to.exist;
213
- }
214
- }));
215
- it('Windows网络流量监控应该支持多种间隔', (0, test_base_1.asyncTest)(async function () {
216
- const result = await osu.network.overview();
217
- if (!result.success) {
218
- this.skip();
219
- }
220
- if (result.success) {
221
- (0, chai_1.expect)(result.data.totalRxBytes.bytes).to.be.a('number').and.at.least(0);
222
- (0, chai_1.expect)(result.data.totalTxBytes.bytes).to.be.a('number').and.at.least(0);
223
- }
224
- }));
225
- });
226
- });
227
- describe('Windows System Commands', function () {
228
- it('应该支持Windows特有的系统命令', (0, test_base_1.asyncTest)(async function () {
229
- const result = await osu.system.info();
230
- (0, chai_1.expect)(result.success).to.be.true;
231
- if (result.success) {
232
- (0, chai_1.expect)(result.data).to.exist;
233
- (0, chai_1.expect)(result.data.platform).to.equal('win32');
234
- }
235
- }));
236
- it('应该正确识别不支持的功能', (0, test_base_1.asyncTest)(async function () {
237
- // 某些在其他平台上的功能在Windows上可能不支持
238
- const result = await osu.system.info();
239
- (0, chai_1.expect)(result.success).to.be.true;
240
- if (result.success) {
241
- (0, chai_1.expect)(result.data.hostname).to.be.a('string');
242
- }
243
- }));
244
- });
245
- describe('Windows Performance Tests', function () {
246
- it('Windows系统调用性能测试', (0, test_base_1.longTest)(async function () {
247
- const monitor = new test_base_1.PerformanceMonitor();
248
- await monitor.time('cpu-info', () => osu.cpu.info());
249
- await monitor.time('memory-info', () => osu.memory.info());
250
- await monitor.time('disk-info', () => osu.disk.info());
251
- const report = monitor.getReport();
252
- // Windows 系统调用可能比Unix系统慢一些
253
- (0, chai_1.expect)(report['cpu-info']).to.be.below(2000, 'CPU info should complete within 2s on Windows');
254
- (0, chai_1.expect)(report['memory-info']).to.be.below(2000, 'Memory info should complete within 2s on Windows');
255
- (0, chai_1.expect)(report['disk-info']).to.be.below(3000, 'Disk info should complete within 3s on Windows');
256
- }));
257
- it('Windows系统资源监控稳定性', (0, test_base_1.longTest)(async function () {
258
- const iterations = 5;
259
- const results = [];
260
- for (let i = 0; i < iterations; i++) {
261
- const result = await osu.cpu.usage();
262
- if (result.success) {
263
- results.push(result.data);
264
- }
265
- }
266
- if (results.length > 0) {
267
- // 检查结果的一致性
268
- const avg = results.reduce((sum, val) => sum + val, 0) / results.length;
269
- const variance = results.reduce((sum, val) => sum + Math.pow(val - avg, 2), 0) / results.length;
270
- // 方差不应该太大(表示结果相对稳定)
271
- (0, chai_1.expect)(variance).to.be.below(100);
272
- }
273
- }));
274
- });
275
- describe('Windows Error Handling', function () {
276
- it('应该正确处理Windows权限限制', (0, test_base_1.asyncTest)(async function () {
277
- // Windows 有不同的权限模型
278
- const result = await osu.process.list();
279
- if (!result.success) {
280
- (0, chai_1.expect)(result.error).to.exist;
281
- (0, chai_1.expect)(result.error.code).to.be.oneOf(['PERMISSION_DENIED', 'NOT_SUPPORTED']);
282
- }
283
- }));
284
- it('应该处理不存在的驱动器', (0, test_base_1.asyncTest)(async function () {
285
- // 测试一般的磁盘信息获取 - disk.info() 不接受参数
286
- const result = await osu.disk.info();
287
- if (!result.success) {
288
- (0, chai_1.expect)(result.error).to.exist;
289
- (0, chai_1.expect)(result.error.code).to.be.oneOf(['NOT_FOUND', 'INVALID_PATH']);
290
- }
291
- else {
292
- // 正常返回磁盘信息数组
293
- if (result.success) {
294
- (0, chai_1.expect)(result.data).to.be.an('array');
295
- }
296
- }
297
- }));
298
- it('应该处理Windows服务不可用的情况', (0, test_base_1.asyncTest)(async function () {
299
- // 测试系统信息获取
300
- const result = await osu.system.info();
301
- if (!result.success) {
302
- (0, chai_1.expect)(result.error).to.exist;
303
- }
304
- else if (result.success) {
305
- (0, chai_1.expect)(result.data).to.exist;
306
- }
307
- }));
308
- it('应该处理Windows版本差异', (0, test_base_1.asyncTest)(async function () {
309
- const result = await osu.system.info();
310
- (0, chai_1.expect)(result.success).to.be.true;
311
- if (result.success) {
312
- (0, chai_1.expect)(result.data.release).to.be.a('string');
313
- // Windows 版本字符串应该包含版本信息
314
- const version = result.data.release;
315
- (0, chai_1.expect)(version).to.match(/\d+/);
316
- }
317
- }));
318
- });
319
- });
320
- //# sourceMappingURL=windows.test.js.map