@theia/process 1.53.0-next.55 → 1.53.0-next.64
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.
- package/README.md +30 -30
- package/lib/common/shell-command-builder.slow-spec.js +4 -4
- package/package.json +3 -3
- package/src/common/process-common-module.ts +22 -22
- package/src/common/process-manager-types.ts +58 -58
- package/src/common/shell-command-builder.slow-spec.ts +486 -486
- package/src/common/shell-command-builder.ts +187 -187
- package/src/common/shell-quoting.spec.ts +176 -176
- package/src/common/shell-quoting.ts +236 -236
- package/src/common/tests/$weird(),file=name.js +1 -1
- package/src/common/tests/white space.js +1 -1
- package/src/node/dev-null-stream.ts +47 -47
- package/src/node/index.ts +22 -22
- package/src/node/multi-ring-buffer.spec.ts +486 -486
- package/src/node/multi-ring-buffer.ts +348 -348
- package/src/node/process-backend-module.ts +67 -67
- package/src/node/process-manager.ts +107 -107
- package/src/node/process.ts +207 -207
- package/src/node/pseudo-pty.ts +56 -56
- package/src/node/raw-process.spec.ts +199 -199
- package/src/node/raw-process.ts +156 -156
- package/src/node/string-argv.d.ts +21 -21
- package/src/node/task-terminal-process.ts +41 -41
- package/src/node/terminal-process.spec.ts +121 -121
- package/src/node/terminal-process.ts +290 -290
- package/src/node/test/process-fork-test.js +22 -22
- package/src/node/test/process-test-container.ts +27 -27
- package/src/node/utils.ts +79 -79
|
@@ -1,486 +1,486 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2017 Ericsson and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import * as chai from 'chai';
|
|
18
|
-
import { MultiRingBuffer } from './multi-ring-buffer';
|
|
19
|
-
|
|
20
|
-
const expect = chai.expect;
|
|
21
|
-
|
|
22
|
-
describe('MultiRingBuffer', function (): void {
|
|
23
|
-
|
|
24
|
-
it('expect buffer to be empty initialized', function (): void {
|
|
25
|
-
const size = 2;
|
|
26
|
-
const compareTo = Buffer.from('0000', 'hex');
|
|
27
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
28
|
-
expect(ringBuffer['buffer'].equals(compareTo)).to.be.true;
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('expect enq and deq a string with unicode characters > 1 byte and no wrap around', function (): void {
|
|
32
|
-
const ringBufferSize = 15;
|
|
33
|
-
const ringBuffer = new MultiRingBuffer({ size: ringBufferSize });
|
|
34
|
-
const buffer = '\u00bd + \u00bc = \u00be';
|
|
35
|
-
const bufferByteLength = Buffer.byteLength(buffer, 'utf8');
|
|
36
|
-
|
|
37
|
-
ringBuffer.enq(buffer);
|
|
38
|
-
expect(ringBuffer.size()).to.be.equal(bufferByteLength);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('expect enq and deq a string with unicode characters > 1 byte and wrap around', function (): void {
|
|
42
|
-
const buffer = '\u00bd + \u00bc = \u00be';
|
|
43
|
-
const ringBufferSize = Buffer.byteLength(buffer[buffer.length - 1]);
|
|
44
|
-
const ringBuffer = new MultiRingBuffer({ size: ringBufferSize });
|
|
45
|
-
|
|
46
|
-
ringBuffer.enq(buffer);
|
|
47
|
-
expect(ringBuffer.size()).to.be.equal(ringBufferSize);
|
|
48
|
-
|
|
49
|
-
const reader = ringBuffer.getReader();
|
|
50
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
51
|
-
|
|
52
|
-
expect(ringBuffer).to.not.be.equal(undefined);
|
|
53
|
-
if (readBuffer !== undefined) {
|
|
54
|
-
expect(readBuffer).to.be.equal(buffer[buffer.length - 1].toString());
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('expect enq a string < ring buffer size ', function (): void {
|
|
59
|
-
const size = 5;
|
|
60
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
61
|
-
const buffer = 'test';
|
|
62
|
-
|
|
63
|
-
ringBuffer.enq(buffer);
|
|
64
|
-
expect(ringBuffer.size()).to.be.equal(buffer.length);
|
|
65
|
-
expect(ringBuffer.empty()).to.be.equal(false);
|
|
66
|
-
const reader = ringBuffer.getReader();
|
|
67
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(buffer.length);
|
|
68
|
-
expect(ringBuffer.emptyForReader(reader)).to.be.equal(false);
|
|
69
|
-
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('expect deq a string < ring buffer size ', function (): void {
|
|
73
|
-
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
74
|
-
const buffer = 'test';
|
|
75
|
-
|
|
76
|
-
ringBuffer.enq(buffer);
|
|
77
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
78
|
-
const reader = ringBuffer.getReader();
|
|
79
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
80
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
81
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
82
|
-
expect(readBuffer).to.equal(buffer);
|
|
83
|
-
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('expect deq a string > ring buffer size ', function (): void {
|
|
87
|
-
const size = 5;
|
|
88
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
89
|
-
const buffer = 'testabcd';
|
|
90
|
-
|
|
91
|
-
ringBuffer.enq(buffer);
|
|
92
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
93
|
-
const reader = ringBuffer.getReader();
|
|
94
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
95
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
96
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
97
|
-
expect(readBuffer).to.equal(buffer.substring(buffer.length - size));
|
|
98
|
-
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('expect enq deq enq deq a string > ring buffer size ', function (): void {
|
|
102
|
-
const size = 5;
|
|
103
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
104
|
-
const buffer = '12345678';
|
|
105
|
-
|
|
106
|
-
for (let i = 0; i < 2; i++) {
|
|
107
|
-
ringBuffer.enq(buffer);
|
|
108
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
109
|
-
|
|
110
|
-
const reader = ringBuffer.getReader();
|
|
111
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
112
|
-
|
|
113
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
114
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
115
|
-
expect(readBuffer).to.equal(buffer.substring(buffer.length - size));
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it('expect enq a string == ring buffer size then one > ring buffer size and dequeue them ', function (): void {
|
|
120
|
-
const size = 5;
|
|
121
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
122
|
-
const buffers = ['12345', '12345678'];
|
|
123
|
-
|
|
124
|
-
for (const buffer of buffers) {
|
|
125
|
-
ringBuffer.enq(buffer);
|
|
126
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
127
|
-
}
|
|
128
|
-
const reader = ringBuffer.getReader();
|
|
129
|
-
let i = 0;
|
|
130
|
-
for (const _ of buffers) {
|
|
131
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
132
|
-
if (i === 0) {
|
|
133
|
-
expect(readBuffer).to.equal(buffers[buffers.length - 1].substring(buffers[buffers.length - 1].length - size));
|
|
134
|
-
} else {
|
|
135
|
-
expect(readBuffer).to.equal(undefined);
|
|
136
|
-
}
|
|
137
|
-
i++;
|
|
138
|
-
}
|
|
139
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it('expect enq a string == ring buffer size then one < ring buffer size and dequeue them ', function (): void {
|
|
143
|
-
const size = 5;
|
|
144
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
145
|
-
const buffers = ['12345', '123'];
|
|
146
|
-
|
|
147
|
-
for (const buffer of buffers) {
|
|
148
|
-
ringBuffer.enq(buffer);
|
|
149
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
150
|
-
}
|
|
151
|
-
const reader = ringBuffer.getReader();
|
|
152
|
-
let i = 0;
|
|
153
|
-
for (const _ of buffers) {
|
|
154
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
155
|
-
if (i === 0) {
|
|
156
|
-
expect(readBuffer).to.equal('45123');
|
|
157
|
-
} else {
|
|
158
|
-
expect(readBuffer).to.equal(undefined);
|
|
159
|
-
}
|
|
160
|
-
i++;
|
|
161
|
-
}
|
|
162
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it('expect enq a string == ring buffer size then one < ring buffer then one < buffer size and dequeue ', function (): void {
|
|
166
|
-
const size = 5;
|
|
167
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
168
|
-
const buffers = ['12345', '123', '678'];
|
|
169
|
-
|
|
170
|
-
for (const buffer of buffers) {
|
|
171
|
-
ringBuffer.enq(buffer);
|
|
172
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
173
|
-
}
|
|
174
|
-
const reader = ringBuffer.getReader();
|
|
175
|
-
let i = 0;
|
|
176
|
-
for (const _ of buffers) {
|
|
177
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
178
|
-
if (i === 0) {
|
|
179
|
-
expect(readBuffer).to.equal('23678');
|
|
180
|
-
} else {
|
|
181
|
-
expect(readBuffer).to.equal(undefined);
|
|
182
|
-
}
|
|
183
|
-
i++;
|
|
184
|
-
}
|
|
185
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it('expect enq buffer size then enq 1 to dequeue the right value', function (): void {
|
|
189
|
-
const size = 5;
|
|
190
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
191
|
-
const buffers = ['12345', '1'];
|
|
192
|
-
|
|
193
|
-
for (const buffer of buffers) {
|
|
194
|
-
ringBuffer.enq(buffer);
|
|
195
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
196
|
-
}
|
|
197
|
-
const reader = ringBuffer.getReader();
|
|
198
|
-
let i = 0;
|
|
199
|
-
for (const _ of buffers) {
|
|
200
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
201
|
-
if (i === 0) {
|
|
202
|
-
expect(readBuffer).to.equal('23451');
|
|
203
|
-
} else {
|
|
204
|
-
expect(readBuffer).to.equal(undefined);
|
|
205
|
-
}
|
|
206
|
-
i++;
|
|
207
|
-
}
|
|
208
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it('expect enq buffer size then enq 1 twice to dequeue the right value', function (): void {
|
|
212
|
-
const size = 5;
|
|
213
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
214
|
-
const buffers = ['12345', '1', '12345', '1'];
|
|
215
|
-
|
|
216
|
-
for (const buffer of buffers) {
|
|
217
|
-
ringBuffer.enq(buffer);
|
|
218
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
219
|
-
}
|
|
220
|
-
const reader = ringBuffer.getReader();
|
|
221
|
-
let i = 0;
|
|
222
|
-
for (const _ of buffers) {
|
|
223
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
224
|
-
if (i === 0) {
|
|
225
|
-
expect(readBuffer).to.equal('23451');
|
|
226
|
-
} else {
|
|
227
|
-
expect(readBuffer).to.equal(undefined);
|
|
228
|
-
}
|
|
229
|
-
i++;
|
|
230
|
-
}
|
|
231
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
it('expect enq buffer size of various sizes dequeue the right value', function (): void {
|
|
235
|
-
const size = 5;
|
|
236
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
237
|
-
const buffers = ['12345', '123', '678', '12345', '1', '12345', '123', '12', '12', '1', '12', '123', '1234', '12345', '1', '12'];
|
|
238
|
-
|
|
239
|
-
for (const buffer of buffers) {
|
|
240
|
-
ringBuffer.enq(buffer);
|
|
241
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
const reader = ringBuffer.getReader();
|
|
245
|
-
let i = 0;
|
|
246
|
-
for (const _ of buffers) {
|
|
247
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
248
|
-
if (i === 0) {
|
|
249
|
-
expect(readBuffer).to.equal('45112');
|
|
250
|
-
} else {
|
|
251
|
-
expect(readBuffer).to.equal(undefined);
|
|
252
|
-
}
|
|
253
|
-
i++;
|
|
254
|
-
}
|
|
255
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
it('expect enq buffer sizes < buffer size to dequeue normally', function (): void {
|
|
259
|
-
const size = 5;
|
|
260
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
261
|
-
const buffers = ['1', '1'];
|
|
262
|
-
|
|
263
|
-
for (const buffer of buffers) {
|
|
264
|
-
ringBuffer.enq(buffer);
|
|
265
|
-
}
|
|
266
|
-
expect(ringBuffer.size()).to.be.equal(2);
|
|
267
|
-
const reader = ringBuffer.getReader();
|
|
268
|
-
let i = 0;
|
|
269
|
-
for (const _ of buffers) {
|
|
270
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
271
|
-
if (i === 0) {
|
|
272
|
-
expect(readBuffer).to.equal('11');
|
|
273
|
-
} else {
|
|
274
|
-
expect(readBuffer).to.equal(undefined);
|
|
275
|
-
}
|
|
276
|
-
i++;
|
|
277
|
-
}
|
|
278
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
it('expect enq buffer size of various sizes dequeue the right value', function (): void {
|
|
282
|
-
const size = 5;
|
|
283
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
284
|
-
const buffers = ['1', '1', '12', '12'];
|
|
285
|
-
|
|
286
|
-
for (const buffer of buffers) {
|
|
287
|
-
ringBuffer.enq(buffer);
|
|
288
|
-
}
|
|
289
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
290
|
-
const reader = ringBuffer.getReader();
|
|
291
|
-
let i = 0;
|
|
292
|
-
for (const _ of buffers) {
|
|
293
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
294
|
-
if (i === 0) {
|
|
295
|
-
expect(readBuffer).to.equal('11212');
|
|
296
|
-
} else {
|
|
297
|
-
expect(readBuffer).to.equal(undefined);
|
|
298
|
-
}
|
|
299
|
-
i++;
|
|
300
|
-
}
|
|
301
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
it('expect multiple enq and deq to deq the right values', function (): void {
|
|
305
|
-
const size = 5;
|
|
306
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
307
|
-
ringBuffer.enq('12345');
|
|
308
|
-
|
|
309
|
-
expect(ringBuffer.size()).to.be.equal(size);
|
|
310
|
-
const reader = ringBuffer.getReader();
|
|
311
|
-
let readBuffer = ringBuffer.deq(reader);
|
|
312
|
-
expect(readBuffer).to.equal('12345');
|
|
313
|
-
|
|
314
|
-
ringBuffer.enq('123');
|
|
315
|
-
readBuffer = ringBuffer.deq(reader);
|
|
316
|
-
expect(readBuffer).to.equal('123');
|
|
317
|
-
|
|
318
|
-
ringBuffer.enq('12345');
|
|
319
|
-
readBuffer = ringBuffer.deq(reader);
|
|
320
|
-
expect(readBuffer).to.equal('12345');
|
|
321
|
-
|
|
322
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
323
|
-
});
|
|
324
|
-
|
|
325
|
-
it('expect data from stream on enq', async function (): Promise<void> {
|
|
326
|
-
const size = 5;
|
|
327
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
328
|
-
const buffer = 'abc';
|
|
329
|
-
|
|
330
|
-
const astream = ringBuffer.getStream();
|
|
331
|
-
const p = new Promise<void>(resolve => {
|
|
332
|
-
astream.on('data', (chunk: string) => {
|
|
333
|
-
expect(chunk).to.be.equal(buffer);
|
|
334
|
-
resolve();
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
ringBuffer.enq(buffer);
|
|
338
|
-
|
|
339
|
-
await p;
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
it('expect data from stream when data is already ended', async function (): Promise<void> {
|
|
343
|
-
const size = 5;
|
|
344
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
345
|
-
const buffer = 'abc';
|
|
346
|
-
ringBuffer.enq(buffer);
|
|
347
|
-
|
|
348
|
-
const astream = ringBuffer.getStream();
|
|
349
|
-
const p = new Promise<void>(resolve => {
|
|
350
|
-
astream.on('data', (chunk: string) => {
|
|
351
|
-
expect(chunk).to.be.equal(buffer);
|
|
352
|
-
resolve();
|
|
353
|
-
});
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
await p;
|
|
357
|
-
});
|
|
358
|
-
|
|
359
|
-
it('expect disposing of a stream to delete it from the ringbuffer', function (): void {
|
|
360
|
-
const size = 5;
|
|
361
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
362
|
-
const astream = ringBuffer.getStream();
|
|
363
|
-
astream.dispose();
|
|
364
|
-
expect(ringBuffer.streamsSize()).to.be.equal(0);
|
|
365
|
-
expect(ringBuffer.readersSize()).to.be.equal(0);
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
it('expect disposing of a reader to delete it from the ringbuffer', function (): void {
|
|
369
|
-
const size = 5;
|
|
370
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
371
|
-
const reader = ringBuffer.getReader();
|
|
372
|
-
ringBuffer.closeReader(reader);
|
|
373
|
-
expect(ringBuffer.readersSize()).to.be.equal(0);
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
it('expect enq a string in utf8 and get it in hex', function (): void {
|
|
377
|
-
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
378
|
-
const buffer = 'test';
|
|
379
|
-
|
|
380
|
-
ringBuffer.enq(buffer);
|
|
381
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
382
|
-
const reader = ringBuffer.getReader();
|
|
383
|
-
const readBuffer = ringBuffer.deq(reader, -1, 'hex');
|
|
384
|
-
expect(readBuffer).to.equal('74657374');
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
it('expect enq a string in hex and get it in utf8', function (): void {
|
|
388
|
-
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
389
|
-
const buffer = '74657374';
|
|
390
|
-
|
|
391
|
-
ringBuffer.enq(buffer, 'hex');
|
|
392
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
393
|
-
const reader = ringBuffer.getReader();
|
|
394
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
395
|
-
expect(readBuffer).to.equal('test');
|
|
396
|
-
});
|
|
397
|
-
|
|
398
|
-
it('expect data from stream in hex when enq in uf8', async function (): Promise<void> {
|
|
399
|
-
const size = 5;
|
|
400
|
-
const ringBuffer = new MultiRingBuffer({ size });
|
|
401
|
-
const buffer = 'test';
|
|
402
|
-
ringBuffer.enq(buffer);
|
|
403
|
-
|
|
404
|
-
const astream = ringBuffer.getStream('hex');
|
|
405
|
-
const p = new Promise<void>(resolve => {
|
|
406
|
-
astream.on('data', (chunk: string) => {
|
|
407
|
-
expect(chunk).to.be.equal('74657374');
|
|
408
|
-
resolve();
|
|
409
|
-
});
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
await p;
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
it('expect deq a string < ring buffer size with the internal encoding in hex ', function (): void {
|
|
416
|
-
const ringBuffer = new MultiRingBuffer({ size: 5, encoding: 'hex' });
|
|
417
|
-
const buffer = 'test';
|
|
418
|
-
|
|
419
|
-
ringBuffer.enq(buffer);
|
|
420
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
421
|
-
const reader = ringBuffer.getReader();
|
|
422
|
-
const readBuffer = ringBuffer.deq(reader);
|
|
423
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
424
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
425
|
-
expect(readBuffer).to.equal(buffer);
|
|
426
|
-
|
|
427
|
-
});
|
|
428
|
-
|
|
429
|
-
it('expect the ringbuffer to be empty if we enq an empty string', function (): void {
|
|
430
|
-
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
431
|
-
const buffer = '';
|
|
432
|
-
|
|
433
|
-
ringBuffer.enq(buffer);
|
|
434
|
-
expect(ringBuffer.size()).to.be.equal(0);
|
|
435
|
-
expect(ringBuffer.empty()).to.be.equal(true);
|
|
436
|
-
});
|
|
437
|
-
|
|
438
|
-
it('expect an invalid reader count to be zero', function (): void {
|
|
439
|
-
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
440
|
-
expect(ringBuffer.sizeForReader(1)).to.be.equal(0);
|
|
441
|
-
});
|
|
442
|
-
|
|
443
|
-
it('expect an invalid reader to be empty', function (): void {
|
|
444
|
-
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
445
|
-
expect(ringBuffer.emptyForReader(1)).to.be.equal(true);
|
|
446
|
-
});
|
|
447
|
-
|
|
448
|
-
it('expect partially deq a string < ring buffer size ', function (): void {
|
|
449
|
-
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
450
|
-
const buffer = 'test';
|
|
451
|
-
|
|
452
|
-
ringBuffer.enq(buffer);
|
|
453
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
454
|
-
const reader = ringBuffer.getReader();
|
|
455
|
-
let readBuffer = ringBuffer.deq(reader, 2);
|
|
456
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
457
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(2);
|
|
458
|
-
expect(readBuffer).to.equal('te');
|
|
459
|
-
|
|
460
|
-
readBuffer = ringBuffer.deq(reader, 2);
|
|
461
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
462
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
463
|
-
expect(readBuffer).to.equal('st');
|
|
464
|
-
});
|
|
465
|
-
|
|
466
|
-
it('expect partially deq a string < ring buffer size then enq and deq again ', function (): void {
|
|
467
|
-
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
468
|
-
const buffer = 'test';
|
|
469
|
-
const secondBuffer = 'abcd';
|
|
470
|
-
|
|
471
|
-
ringBuffer.enq(buffer);
|
|
472
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
473
|
-
const reader = ringBuffer.getReader();
|
|
474
|
-
let readBuffer = ringBuffer.deq(reader, 2);
|
|
475
|
-
expect(ringBuffer.size()).to.be.equal(4);
|
|
476
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(2);
|
|
477
|
-
expect(readBuffer).to.equal('te');
|
|
478
|
-
|
|
479
|
-
ringBuffer.enq(secondBuffer);
|
|
480
|
-
readBuffer = ringBuffer.deq(reader, 4);
|
|
481
|
-
expect(ringBuffer.size()).to.be.equal(5);
|
|
482
|
-
expect(readBuffer).to.equal('tabc');
|
|
483
|
-
expect(ringBuffer.sizeForReader(reader)).to.be.equal(1);
|
|
484
|
-
|
|
485
|
-
});
|
|
486
|
-
});
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2017 Ericsson and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import * as chai from 'chai';
|
|
18
|
+
import { MultiRingBuffer } from './multi-ring-buffer';
|
|
19
|
+
|
|
20
|
+
const expect = chai.expect;
|
|
21
|
+
|
|
22
|
+
describe('MultiRingBuffer', function (): void {
|
|
23
|
+
|
|
24
|
+
it('expect buffer to be empty initialized', function (): void {
|
|
25
|
+
const size = 2;
|
|
26
|
+
const compareTo = Buffer.from('0000', 'hex');
|
|
27
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
28
|
+
expect(ringBuffer['buffer'].equals(compareTo)).to.be.true;
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('expect enq and deq a string with unicode characters > 1 byte and no wrap around', function (): void {
|
|
32
|
+
const ringBufferSize = 15;
|
|
33
|
+
const ringBuffer = new MultiRingBuffer({ size: ringBufferSize });
|
|
34
|
+
const buffer = '\u00bd + \u00bc = \u00be';
|
|
35
|
+
const bufferByteLength = Buffer.byteLength(buffer, 'utf8');
|
|
36
|
+
|
|
37
|
+
ringBuffer.enq(buffer);
|
|
38
|
+
expect(ringBuffer.size()).to.be.equal(bufferByteLength);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('expect enq and deq a string with unicode characters > 1 byte and wrap around', function (): void {
|
|
42
|
+
const buffer = '\u00bd + \u00bc = \u00be';
|
|
43
|
+
const ringBufferSize = Buffer.byteLength(buffer[buffer.length - 1]);
|
|
44
|
+
const ringBuffer = new MultiRingBuffer({ size: ringBufferSize });
|
|
45
|
+
|
|
46
|
+
ringBuffer.enq(buffer);
|
|
47
|
+
expect(ringBuffer.size()).to.be.equal(ringBufferSize);
|
|
48
|
+
|
|
49
|
+
const reader = ringBuffer.getReader();
|
|
50
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
51
|
+
|
|
52
|
+
expect(ringBuffer).to.not.be.equal(undefined);
|
|
53
|
+
if (readBuffer !== undefined) {
|
|
54
|
+
expect(readBuffer).to.be.equal(buffer[buffer.length - 1].toString());
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('expect enq a string < ring buffer size ', function (): void {
|
|
59
|
+
const size = 5;
|
|
60
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
61
|
+
const buffer = 'test';
|
|
62
|
+
|
|
63
|
+
ringBuffer.enq(buffer);
|
|
64
|
+
expect(ringBuffer.size()).to.be.equal(buffer.length);
|
|
65
|
+
expect(ringBuffer.empty()).to.be.equal(false);
|
|
66
|
+
const reader = ringBuffer.getReader();
|
|
67
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(buffer.length);
|
|
68
|
+
expect(ringBuffer.emptyForReader(reader)).to.be.equal(false);
|
|
69
|
+
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('expect deq a string < ring buffer size ', function (): void {
|
|
73
|
+
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
74
|
+
const buffer = 'test';
|
|
75
|
+
|
|
76
|
+
ringBuffer.enq(buffer);
|
|
77
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
78
|
+
const reader = ringBuffer.getReader();
|
|
79
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
80
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
81
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
82
|
+
expect(readBuffer).to.equal(buffer);
|
|
83
|
+
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('expect deq a string > ring buffer size ', function (): void {
|
|
87
|
+
const size = 5;
|
|
88
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
89
|
+
const buffer = 'testabcd';
|
|
90
|
+
|
|
91
|
+
ringBuffer.enq(buffer);
|
|
92
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
93
|
+
const reader = ringBuffer.getReader();
|
|
94
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
95
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
96
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
97
|
+
expect(readBuffer).to.equal(buffer.substring(buffer.length - size));
|
|
98
|
+
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('expect enq deq enq deq a string > ring buffer size ', function (): void {
|
|
102
|
+
const size = 5;
|
|
103
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
104
|
+
const buffer = '12345678';
|
|
105
|
+
|
|
106
|
+
for (let i = 0; i < 2; i++) {
|
|
107
|
+
ringBuffer.enq(buffer);
|
|
108
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
109
|
+
|
|
110
|
+
const reader = ringBuffer.getReader();
|
|
111
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
112
|
+
|
|
113
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
114
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
115
|
+
expect(readBuffer).to.equal(buffer.substring(buffer.length - size));
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('expect enq a string == ring buffer size then one > ring buffer size and dequeue them ', function (): void {
|
|
120
|
+
const size = 5;
|
|
121
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
122
|
+
const buffers = ['12345', '12345678'];
|
|
123
|
+
|
|
124
|
+
for (const buffer of buffers) {
|
|
125
|
+
ringBuffer.enq(buffer);
|
|
126
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
127
|
+
}
|
|
128
|
+
const reader = ringBuffer.getReader();
|
|
129
|
+
let i = 0;
|
|
130
|
+
for (const _ of buffers) {
|
|
131
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
132
|
+
if (i === 0) {
|
|
133
|
+
expect(readBuffer).to.equal(buffers[buffers.length - 1].substring(buffers[buffers.length - 1].length - size));
|
|
134
|
+
} else {
|
|
135
|
+
expect(readBuffer).to.equal(undefined);
|
|
136
|
+
}
|
|
137
|
+
i++;
|
|
138
|
+
}
|
|
139
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('expect enq a string == ring buffer size then one < ring buffer size and dequeue them ', function (): void {
|
|
143
|
+
const size = 5;
|
|
144
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
145
|
+
const buffers = ['12345', '123'];
|
|
146
|
+
|
|
147
|
+
for (const buffer of buffers) {
|
|
148
|
+
ringBuffer.enq(buffer);
|
|
149
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
150
|
+
}
|
|
151
|
+
const reader = ringBuffer.getReader();
|
|
152
|
+
let i = 0;
|
|
153
|
+
for (const _ of buffers) {
|
|
154
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
155
|
+
if (i === 0) {
|
|
156
|
+
expect(readBuffer).to.equal('45123');
|
|
157
|
+
} else {
|
|
158
|
+
expect(readBuffer).to.equal(undefined);
|
|
159
|
+
}
|
|
160
|
+
i++;
|
|
161
|
+
}
|
|
162
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('expect enq a string == ring buffer size then one < ring buffer then one < buffer size and dequeue ', function (): void {
|
|
166
|
+
const size = 5;
|
|
167
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
168
|
+
const buffers = ['12345', '123', '678'];
|
|
169
|
+
|
|
170
|
+
for (const buffer of buffers) {
|
|
171
|
+
ringBuffer.enq(buffer);
|
|
172
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
173
|
+
}
|
|
174
|
+
const reader = ringBuffer.getReader();
|
|
175
|
+
let i = 0;
|
|
176
|
+
for (const _ of buffers) {
|
|
177
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
178
|
+
if (i === 0) {
|
|
179
|
+
expect(readBuffer).to.equal('23678');
|
|
180
|
+
} else {
|
|
181
|
+
expect(readBuffer).to.equal(undefined);
|
|
182
|
+
}
|
|
183
|
+
i++;
|
|
184
|
+
}
|
|
185
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('expect enq buffer size then enq 1 to dequeue the right value', function (): void {
|
|
189
|
+
const size = 5;
|
|
190
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
191
|
+
const buffers = ['12345', '1'];
|
|
192
|
+
|
|
193
|
+
for (const buffer of buffers) {
|
|
194
|
+
ringBuffer.enq(buffer);
|
|
195
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
196
|
+
}
|
|
197
|
+
const reader = ringBuffer.getReader();
|
|
198
|
+
let i = 0;
|
|
199
|
+
for (const _ of buffers) {
|
|
200
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
201
|
+
if (i === 0) {
|
|
202
|
+
expect(readBuffer).to.equal('23451');
|
|
203
|
+
} else {
|
|
204
|
+
expect(readBuffer).to.equal(undefined);
|
|
205
|
+
}
|
|
206
|
+
i++;
|
|
207
|
+
}
|
|
208
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it('expect enq buffer size then enq 1 twice to dequeue the right value', function (): void {
|
|
212
|
+
const size = 5;
|
|
213
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
214
|
+
const buffers = ['12345', '1', '12345', '1'];
|
|
215
|
+
|
|
216
|
+
for (const buffer of buffers) {
|
|
217
|
+
ringBuffer.enq(buffer);
|
|
218
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
219
|
+
}
|
|
220
|
+
const reader = ringBuffer.getReader();
|
|
221
|
+
let i = 0;
|
|
222
|
+
for (const _ of buffers) {
|
|
223
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
224
|
+
if (i === 0) {
|
|
225
|
+
expect(readBuffer).to.equal('23451');
|
|
226
|
+
} else {
|
|
227
|
+
expect(readBuffer).to.equal(undefined);
|
|
228
|
+
}
|
|
229
|
+
i++;
|
|
230
|
+
}
|
|
231
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
it('expect enq buffer size of various sizes dequeue the right value', function (): void {
|
|
235
|
+
const size = 5;
|
|
236
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
237
|
+
const buffers = ['12345', '123', '678', '12345', '1', '12345', '123', '12', '12', '1', '12', '123', '1234', '12345', '1', '12'];
|
|
238
|
+
|
|
239
|
+
for (const buffer of buffers) {
|
|
240
|
+
ringBuffer.enq(buffer);
|
|
241
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const reader = ringBuffer.getReader();
|
|
245
|
+
let i = 0;
|
|
246
|
+
for (const _ of buffers) {
|
|
247
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
248
|
+
if (i === 0) {
|
|
249
|
+
expect(readBuffer).to.equal('45112');
|
|
250
|
+
} else {
|
|
251
|
+
expect(readBuffer).to.equal(undefined);
|
|
252
|
+
}
|
|
253
|
+
i++;
|
|
254
|
+
}
|
|
255
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it('expect enq buffer sizes < buffer size to dequeue normally', function (): void {
|
|
259
|
+
const size = 5;
|
|
260
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
261
|
+
const buffers = ['1', '1'];
|
|
262
|
+
|
|
263
|
+
for (const buffer of buffers) {
|
|
264
|
+
ringBuffer.enq(buffer);
|
|
265
|
+
}
|
|
266
|
+
expect(ringBuffer.size()).to.be.equal(2);
|
|
267
|
+
const reader = ringBuffer.getReader();
|
|
268
|
+
let i = 0;
|
|
269
|
+
for (const _ of buffers) {
|
|
270
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
271
|
+
if (i === 0) {
|
|
272
|
+
expect(readBuffer).to.equal('11');
|
|
273
|
+
} else {
|
|
274
|
+
expect(readBuffer).to.equal(undefined);
|
|
275
|
+
}
|
|
276
|
+
i++;
|
|
277
|
+
}
|
|
278
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it('expect enq buffer size of various sizes dequeue the right value', function (): void {
|
|
282
|
+
const size = 5;
|
|
283
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
284
|
+
const buffers = ['1', '1', '12', '12'];
|
|
285
|
+
|
|
286
|
+
for (const buffer of buffers) {
|
|
287
|
+
ringBuffer.enq(buffer);
|
|
288
|
+
}
|
|
289
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
290
|
+
const reader = ringBuffer.getReader();
|
|
291
|
+
let i = 0;
|
|
292
|
+
for (const _ of buffers) {
|
|
293
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
294
|
+
if (i === 0) {
|
|
295
|
+
expect(readBuffer).to.equal('11212');
|
|
296
|
+
} else {
|
|
297
|
+
expect(readBuffer).to.equal(undefined);
|
|
298
|
+
}
|
|
299
|
+
i++;
|
|
300
|
+
}
|
|
301
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
it('expect multiple enq and deq to deq the right values', function (): void {
|
|
305
|
+
const size = 5;
|
|
306
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
307
|
+
ringBuffer.enq('12345');
|
|
308
|
+
|
|
309
|
+
expect(ringBuffer.size()).to.be.equal(size);
|
|
310
|
+
const reader = ringBuffer.getReader();
|
|
311
|
+
let readBuffer = ringBuffer.deq(reader);
|
|
312
|
+
expect(readBuffer).to.equal('12345');
|
|
313
|
+
|
|
314
|
+
ringBuffer.enq('123');
|
|
315
|
+
readBuffer = ringBuffer.deq(reader);
|
|
316
|
+
expect(readBuffer).to.equal('123');
|
|
317
|
+
|
|
318
|
+
ringBuffer.enq('12345');
|
|
319
|
+
readBuffer = ringBuffer.deq(reader);
|
|
320
|
+
expect(readBuffer).to.equal('12345');
|
|
321
|
+
|
|
322
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
it('expect data from stream on enq', async function (): Promise<void> {
|
|
326
|
+
const size = 5;
|
|
327
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
328
|
+
const buffer = 'abc';
|
|
329
|
+
|
|
330
|
+
const astream = ringBuffer.getStream();
|
|
331
|
+
const p = new Promise<void>(resolve => {
|
|
332
|
+
astream.on('data', (chunk: string) => {
|
|
333
|
+
expect(chunk).to.be.equal(buffer);
|
|
334
|
+
resolve();
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
ringBuffer.enq(buffer);
|
|
338
|
+
|
|
339
|
+
await p;
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
it('expect data from stream when data is already ended', async function (): Promise<void> {
|
|
343
|
+
const size = 5;
|
|
344
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
345
|
+
const buffer = 'abc';
|
|
346
|
+
ringBuffer.enq(buffer);
|
|
347
|
+
|
|
348
|
+
const astream = ringBuffer.getStream();
|
|
349
|
+
const p = new Promise<void>(resolve => {
|
|
350
|
+
astream.on('data', (chunk: string) => {
|
|
351
|
+
expect(chunk).to.be.equal(buffer);
|
|
352
|
+
resolve();
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
await p;
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
it('expect disposing of a stream to delete it from the ringbuffer', function (): void {
|
|
360
|
+
const size = 5;
|
|
361
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
362
|
+
const astream = ringBuffer.getStream();
|
|
363
|
+
astream.dispose();
|
|
364
|
+
expect(ringBuffer.streamsSize()).to.be.equal(0);
|
|
365
|
+
expect(ringBuffer.readersSize()).to.be.equal(0);
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
it('expect disposing of a reader to delete it from the ringbuffer', function (): void {
|
|
369
|
+
const size = 5;
|
|
370
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
371
|
+
const reader = ringBuffer.getReader();
|
|
372
|
+
ringBuffer.closeReader(reader);
|
|
373
|
+
expect(ringBuffer.readersSize()).to.be.equal(0);
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
it('expect enq a string in utf8 and get it in hex', function (): void {
|
|
377
|
+
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
378
|
+
const buffer = 'test';
|
|
379
|
+
|
|
380
|
+
ringBuffer.enq(buffer);
|
|
381
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
382
|
+
const reader = ringBuffer.getReader();
|
|
383
|
+
const readBuffer = ringBuffer.deq(reader, -1, 'hex');
|
|
384
|
+
expect(readBuffer).to.equal('74657374');
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
it('expect enq a string in hex and get it in utf8', function (): void {
|
|
388
|
+
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
389
|
+
const buffer = '74657374';
|
|
390
|
+
|
|
391
|
+
ringBuffer.enq(buffer, 'hex');
|
|
392
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
393
|
+
const reader = ringBuffer.getReader();
|
|
394
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
395
|
+
expect(readBuffer).to.equal('test');
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
it('expect data from stream in hex when enq in uf8', async function (): Promise<void> {
|
|
399
|
+
const size = 5;
|
|
400
|
+
const ringBuffer = new MultiRingBuffer({ size });
|
|
401
|
+
const buffer = 'test';
|
|
402
|
+
ringBuffer.enq(buffer);
|
|
403
|
+
|
|
404
|
+
const astream = ringBuffer.getStream('hex');
|
|
405
|
+
const p = new Promise<void>(resolve => {
|
|
406
|
+
astream.on('data', (chunk: string) => {
|
|
407
|
+
expect(chunk).to.be.equal('74657374');
|
|
408
|
+
resolve();
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
await p;
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
it('expect deq a string < ring buffer size with the internal encoding in hex ', function (): void {
|
|
416
|
+
const ringBuffer = new MultiRingBuffer({ size: 5, encoding: 'hex' });
|
|
417
|
+
const buffer = 'test';
|
|
418
|
+
|
|
419
|
+
ringBuffer.enq(buffer);
|
|
420
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
421
|
+
const reader = ringBuffer.getReader();
|
|
422
|
+
const readBuffer = ringBuffer.deq(reader);
|
|
423
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
424
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
425
|
+
expect(readBuffer).to.equal(buffer);
|
|
426
|
+
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
it('expect the ringbuffer to be empty if we enq an empty string', function (): void {
|
|
430
|
+
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
431
|
+
const buffer = '';
|
|
432
|
+
|
|
433
|
+
ringBuffer.enq(buffer);
|
|
434
|
+
expect(ringBuffer.size()).to.be.equal(0);
|
|
435
|
+
expect(ringBuffer.empty()).to.be.equal(true);
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
it('expect an invalid reader count to be zero', function (): void {
|
|
439
|
+
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
440
|
+
expect(ringBuffer.sizeForReader(1)).to.be.equal(0);
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
it('expect an invalid reader to be empty', function (): void {
|
|
444
|
+
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
445
|
+
expect(ringBuffer.emptyForReader(1)).to.be.equal(true);
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
it('expect partially deq a string < ring buffer size ', function (): void {
|
|
449
|
+
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
450
|
+
const buffer = 'test';
|
|
451
|
+
|
|
452
|
+
ringBuffer.enq(buffer);
|
|
453
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
454
|
+
const reader = ringBuffer.getReader();
|
|
455
|
+
let readBuffer = ringBuffer.deq(reader, 2);
|
|
456
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
457
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(2);
|
|
458
|
+
expect(readBuffer).to.equal('te');
|
|
459
|
+
|
|
460
|
+
readBuffer = ringBuffer.deq(reader, 2);
|
|
461
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
462
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(0);
|
|
463
|
+
expect(readBuffer).to.equal('st');
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
it('expect partially deq a string < ring buffer size then enq and deq again ', function (): void {
|
|
467
|
+
const ringBuffer = new MultiRingBuffer({ size: 5 });
|
|
468
|
+
const buffer = 'test';
|
|
469
|
+
const secondBuffer = 'abcd';
|
|
470
|
+
|
|
471
|
+
ringBuffer.enq(buffer);
|
|
472
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
473
|
+
const reader = ringBuffer.getReader();
|
|
474
|
+
let readBuffer = ringBuffer.deq(reader, 2);
|
|
475
|
+
expect(ringBuffer.size()).to.be.equal(4);
|
|
476
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(2);
|
|
477
|
+
expect(readBuffer).to.equal('te');
|
|
478
|
+
|
|
479
|
+
ringBuffer.enq(secondBuffer);
|
|
480
|
+
readBuffer = ringBuffer.deq(reader, 4);
|
|
481
|
+
expect(ringBuffer.size()).to.be.equal(5);
|
|
482
|
+
expect(readBuffer).to.equal('tabc');
|
|
483
|
+
expect(ringBuffer.sizeForReader(reader)).to.be.equal(1);
|
|
484
|
+
|
|
485
|
+
});
|
|
486
|
+
});
|