@tak-ps/node-tak 12.8.0 → 12.9.0
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/CHANGELOG.md +4 -0
- package/dist/test/default.test.js +5 -5
- package/dist/test/default.test.js.map +1 -1
- package/dist/test/findCoT.test.js +16 -22
- package/dist/test/findCoT.test.js.map +1 -1
- package/dist/test/pipeline.test.js +56 -70
- package/dist/test/pipeline.test.js.map +1 -1
- package/dist/test/queue.test.js +22 -25
- package/dist/test/queue.test.js.map +1 -1
- package/package.json +1 -3
- package/test/default.test.ts +5 -5
- package/test/findCoT.test.ts +16 -22
- package/test/pipeline.test.ts +56 -71
- package/test/queue.test.ts +22 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import TAK, { CoT } from '../index.js';
|
|
2
|
-
import test from '
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
test('Ensure Export', () => {
|
|
5
|
+
assert.ok(TAK);
|
|
6
|
+
assert.ok(CoT);
|
|
7
7
|
});
|
|
8
8
|
//# sourceMappingURL=default.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.test.js","sourceRoot":"","sources":["../../test/default.test.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"default.test.js","sourceRoot":"","sources":["../../test/default.test.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IACvB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import TAK from '../index.js';
|
|
2
|
-
import test from '
|
|
3
|
-
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
test('findCoT - Unfinished', () => {
|
|
4
5
|
const res = TAK.findCoT('<event ><detail>');
|
|
5
|
-
|
|
6
|
-
t.end();
|
|
6
|
+
assert.equal(res, null);
|
|
7
7
|
});
|
|
8
|
-
test('findCoT - Basic', (
|
|
8
|
+
test('findCoT - Basic', () => {
|
|
9
9
|
const res = TAK.findCoT('<event></event>');
|
|
10
|
-
|
|
10
|
+
assert.deepEqual(res, {
|
|
11
11
|
event: '<event></event>',
|
|
12
12
|
remainder: '',
|
|
13
13
|
});
|
|
14
|
-
t.end();
|
|
15
14
|
});
|
|
16
|
-
test('findCoT - New Lines', (
|
|
15
|
+
test('findCoT - New Lines', () => {
|
|
17
16
|
const res = TAK.findCoT(`
|
|
18
17
|
<event>
|
|
19
18
|
<detail remarks="
|
|
@@ -21,13 +20,12 @@ I am a multiline
|
|
|
21
20
|
remarks field
|
|
22
21
|
"/>
|
|
23
22
|
</event>`);
|
|
24
|
-
|
|
23
|
+
assert.deepEqual(res, {
|
|
25
24
|
event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
26
25
|
remainder: '',
|
|
27
26
|
});
|
|
28
|
-
t.end();
|
|
29
27
|
});
|
|
30
|
-
test('findCoT - New Lines - Non-Greedy', (
|
|
28
|
+
test('findCoT - New Lines - Non-Greedy', () => {
|
|
31
29
|
const res = TAK.findCoT(`
|
|
32
30
|
<event>
|
|
33
31
|
<detail remarks="
|
|
@@ -40,46 +38,42 @@ I am a multiline
|
|
|
40
38
|
remarks field
|
|
41
39
|
"/>
|
|
42
40
|
</event>`);
|
|
43
|
-
|
|
41
|
+
assert.deepEqual(res, {
|
|
44
42
|
event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
45
43
|
remainder: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
46
44
|
});
|
|
47
|
-
t.end();
|
|
48
45
|
});
|
|
49
|
-
test('findCoT - bad preceding data', (
|
|
46
|
+
test('findCoT - bad preceding data', () => {
|
|
50
47
|
const res = TAK.findCoT(`
|
|
51
48
|
<fake/>
|
|
52
49
|
<event><detail remarks="I am remarks"/>
|
|
53
50
|
</event>
|
|
54
51
|
`);
|
|
55
|
-
|
|
52
|
+
assert.deepEqual(res, {
|
|
56
53
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
57
54
|
remainder: '\n',
|
|
58
55
|
});
|
|
59
|
-
t.end();
|
|
60
56
|
});
|
|
61
|
-
test('findCoT - bad post data', (
|
|
57
|
+
test('findCoT - bad post data', () => {
|
|
62
58
|
const res = TAK.findCoT(`
|
|
63
59
|
<event><detail remarks="I am remarks"/>
|
|
64
60
|
</event>
|
|
65
61
|
<fake/>
|
|
66
62
|
`);
|
|
67
|
-
|
|
63
|
+
assert.deepEqual(res, {
|
|
68
64
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
69
65
|
remainder: '\n<fake/>\n',
|
|
70
66
|
});
|
|
71
|
-
t.end();
|
|
72
67
|
});
|
|
73
|
-
test('findCoT - mixed', (
|
|
68
|
+
test('findCoT - mixed', () => {
|
|
74
69
|
const res = TAK.findCoT(`
|
|
75
70
|
<event><detail remarks="I am remarks"/>
|
|
76
71
|
</event>
|
|
77
72
|
<fake/>
|
|
78
73
|
<event><detail remarks="I am remarks"/></event>`);
|
|
79
|
-
|
|
74
|
+
assert.deepEqual(res, {
|
|
80
75
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
81
76
|
remainder: '\n<fake/>\n<event><detail remarks="I am remarks"/></event>',
|
|
82
77
|
});
|
|
83
|
-
t.end();
|
|
84
78
|
});
|
|
85
79
|
//# sourceMappingURL=findCoT.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findCoT.test.js","sourceRoot":"","sources":["../../test/findCoT.test.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"findCoT.test.js","sourceRoot":"","sources":["../../test/findCoT.test.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,iBAAiB;QACxB,SAAS,EAAE,EAAE;KAChB,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;;SAMnB,CAAC,CAAC;IACP,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,oFAAoF;QAC3F,SAAS,EAAE,EAAE;KAChB,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;;;;;;;;SAWnB,CAAC,CAAC;IACP,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,oFAAoF;QAC3F,SAAS,EAAE,oFAAoF;KAClG,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;CAI3B,CAAC,CAAC;IACC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,IAAI;KAClB,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;CAI3B,CAAC,CAAC;IACC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,aAAa;KAC3B,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;;;;gDAIoB,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,mDAAmD;QAC1D,SAAS,EAAE,4DAA4D;KAC1E,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import test from '
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
2
3
|
import { EventEmitter } from 'node:events';
|
|
3
4
|
import TAK, { CoT } from '../index.js';
|
|
4
5
|
import { CoTParser } from '@tak-ps/node-cot';
|
|
@@ -17,33 +18,30 @@ function createFakeSocket(opts = {}) {
|
|
|
17
18
|
setNoDelay: () => { },
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
|
-
test('write - resolves when all CoTs are queued and sent', async (
|
|
21
|
+
test('write - resolves when all CoTs are queued and sent', async () => {
|
|
21
22
|
const tak = createTAK();
|
|
22
23
|
tak.client = createFakeSocket();
|
|
23
24
|
const cots = [CoT.ping(), CoT.ping()];
|
|
24
25
|
await tak.write(cots);
|
|
25
|
-
|
|
26
|
-
t.end();
|
|
26
|
+
assert.equal(tak.queue.length, 0, 'queue empty after write + pull');
|
|
27
27
|
});
|
|
28
|
-
test('write - returns early when destroyed', async (
|
|
28
|
+
test('write - returns early when destroyed', async () => {
|
|
29
29
|
const tak = createTAK();
|
|
30
30
|
tak.destroyed = true;
|
|
31
31
|
await tak.write([CoT.ping()]);
|
|
32
|
-
|
|
33
|
-
t.end();
|
|
32
|
+
assert.equal(tak.queue.length, 0, 'nothing queued');
|
|
34
33
|
});
|
|
35
|
-
test('write - multiple concurrent writes', async (
|
|
34
|
+
test('write - multiple concurrent writes', async () => {
|
|
36
35
|
const tak = createTAK();
|
|
37
36
|
tak.client = createFakeSocket();
|
|
38
37
|
const order = [];
|
|
39
38
|
const p1 = tak.write([CoT.ping()]).then(() => order.push(1));
|
|
40
39
|
const p2 = tak.write([CoT.ping()]).then(() => order.push(2));
|
|
41
40
|
await Promise.all([p1, p2]);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
t.end();
|
|
41
|
+
assert.deepEqual(order, [1, 2], 'writes resolve in order');
|
|
42
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
45
43
|
});
|
|
46
|
-
test('pull - batches CoTs into single socket.write call', async (
|
|
44
|
+
test('pull - batches CoTs into single socket.write call', async () => {
|
|
47
45
|
const tak = createTAK({ socketBatchSize: 64 });
|
|
48
46
|
const writeCalls = [];
|
|
49
47
|
tak.client = createFakeSocket({
|
|
@@ -53,12 +51,11 @@ test('pull - batches CoTs into single socket.write call', async (t) => {
|
|
|
53
51
|
},
|
|
54
52
|
});
|
|
55
53
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
t.end();
|
|
54
|
+
assert.equal(writeCalls.length, 1, 'socket.write called once for batch');
|
|
55
|
+
assert.ok(writeCalls[0].includes('<event'), 'batch contains XML events');
|
|
56
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
60
57
|
});
|
|
61
|
-
test('pull - respects backpressure and resumes on process()', async (
|
|
58
|
+
test('pull - respects backpressure and resumes on process()', async () => {
|
|
62
59
|
const tak = createTAK({ socketBatchSize: 1 });
|
|
63
60
|
let callCount = 0;
|
|
64
61
|
const socket = createFakeSocket({
|
|
@@ -74,16 +71,15 @@ test('pull - respects backpressure and resumes on process()', async (t) => {
|
|
|
74
71
|
tak.client = socket;
|
|
75
72
|
// Both CoTs get queued immediately, pull() sends 1 and hits backpressure
|
|
76
73
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
assert.equal(callCount, 1, 'one write before backpressure');
|
|
75
|
+
assert.equal(tak.queue.length, 1, 'one item still in queue');
|
|
79
76
|
// Simulate backpressure clearing (equivalent to drain event)
|
|
80
77
|
socket.writableNeedDrain = false;
|
|
81
78
|
tak.process();
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
t.end();
|
|
79
|
+
assert.equal(callCount, 2, 'second write after backpressure cleared');
|
|
80
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
85
81
|
});
|
|
86
|
-
test('pull - error in socket.write triggers destroy + error event', async (
|
|
82
|
+
test('pull - error in socket.write triggers destroy + error event', async () => {
|
|
87
83
|
const tak = createTAK();
|
|
88
84
|
tak.client = createFakeSocket({
|
|
89
85
|
write() { throw new Error('write failed'); },
|
|
@@ -94,28 +90,25 @@ test('pull - error in socket.write triggers destroy + error event', async (t) =>
|
|
|
94
90
|
// write() enqueues, pull() throws internally, catches → destroy + emit error
|
|
95
91
|
// write() sees destroyed=true on next check and returns
|
|
96
92
|
await tak.write([CoT.ping()]);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
t.end();
|
|
93
|
+
assert.equal(tak.destroyed, true, 'destroyed after write error');
|
|
94
|
+
assert.ok(errorFired, 'error event fired');
|
|
95
|
+
assert.equal(errorMsg, 'write failed', 'error message matches');
|
|
101
96
|
});
|
|
102
|
-
test('pull - noop when already writing', (
|
|
97
|
+
test('pull - noop when already writing', () => {
|
|
103
98
|
const tak = createTAK();
|
|
104
99
|
tak.client = createFakeSocket();
|
|
105
100
|
tak.writing = true;
|
|
106
101
|
tak.queue.push('<event/>');
|
|
107
102
|
// pull() should return immediately since writing=true
|
|
108
103
|
tak.process();
|
|
109
|
-
|
|
110
|
-
t.end();
|
|
104
|
+
assert.equal(tak.queue.length, 1, 'queue unchanged');
|
|
111
105
|
});
|
|
112
|
-
test('flush - resolves immediately when nothing queued', async (
|
|
106
|
+
test('flush - resolves immediately when nothing queued', async () => {
|
|
113
107
|
const tak = createTAK();
|
|
114
108
|
await tak.flush();
|
|
115
|
-
|
|
116
|
-
t.end();
|
|
109
|
+
assert.ok(true, 'flush resolved immediately');
|
|
117
110
|
});
|
|
118
|
-
test('flush - rejects when destroyed mid-flush', async (
|
|
111
|
+
test('flush - rejects when destroyed mid-flush', async () => {
|
|
119
112
|
const tak = createTAK();
|
|
120
113
|
tak.client = createFakeSocket();
|
|
121
114
|
// Simulate an in-progress write so flush enters the wait path
|
|
@@ -125,15 +118,14 @@ test('flush - rejects when destroyed mid-flush', async (t) => {
|
|
|
125
118
|
tak.destroy();
|
|
126
119
|
try {
|
|
127
120
|
await p;
|
|
128
|
-
|
|
121
|
+
assert.fail('should have rejected');
|
|
129
122
|
}
|
|
130
123
|
catch (err) {
|
|
131
|
-
|
|
132
|
-
|
|
124
|
+
assert.ok(err instanceof Error, 'error is an Error');
|
|
125
|
+
assert.ok(err.message.includes('destroyed'), 'error mentions destroyed');
|
|
133
126
|
}
|
|
134
|
-
t.end();
|
|
135
127
|
});
|
|
136
|
-
test('flush - waits for queue to drain via process()', async (
|
|
128
|
+
test('flush - waits for queue to drain via process()', async () => {
|
|
137
129
|
const tak = createTAK({ socketBatchSize: 1 });
|
|
138
130
|
let callCount = 0;
|
|
139
131
|
const socket = createFakeSocket({
|
|
@@ -148,17 +140,16 @@ test('flush - waits for queue to drain via process()', async (t) => {
|
|
|
148
140
|
});
|
|
149
141
|
tak.client = socket;
|
|
150
142
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
151
|
-
|
|
143
|
+
assert.equal(tak.queue.length, 1, 'one item in queue after backpressure');
|
|
152
144
|
// Clear backpressure and drain
|
|
153
145
|
socket.writableNeedDrain = false;
|
|
154
146
|
const flushP = tak.flush();
|
|
155
147
|
tak.process();
|
|
156
148
|
await flushP;
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
t.end();
|
|
149
|
+
assert.equal(tak.queue.length, 0, 'queue empty after flush');
|
|
150
|
+
assert.equal(callCount, 2, 'both items sent');
|
|
160
151
|
});
|
|
161
|
-
test('write - yields when queue is full and resumes after destroy', async (
|
|
152
|
+
test('write - yields when queue is full and resumes after destroy', async () => {
|
|
162
153
|
// writeQueueSize=4 → queue capacity = 4
|
|
163
154
|
const tak = createTAK({ writeQueueSize: 4 });
|
|
164
155
|
// No client, so pull() is a no-op → queue fills up and write() yields
|
|
@@ -166,15 +157,14 @@ test('write - yields when queue is full and resumes after destroy', async (t) =>
|
|
|
166
157
|
const p = tak.write([CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping()])
|
|
167
158
|
.then(() => { writeResolved = true; });
|
|
168
159
|
await new Promise(r => setImmediate(r));
|
|
169
|
-
|
|
170
|
-
|
|
160
|
+
assert.equal(tak.queue.length, 4, 'queue at capacity');
|
|
161
|
+
assert.equal(writeResolved, false, 'write blocked waiting for space');
|
|
171
162
|
// Destroy unblocks write (destroyed check in loop)
|
|
172
163
|
tak.destroy();
|
|
173
164
|
await p;
|
|
174
|
-
|
|
175
|
-
t.end();
|
|
165
|
+
assert.ok(writeResolved, 'write resolved after destroy');
|
|
176
166
|
});
|
|
177
|
-
test('write - resumes after queue drains', async (
|
|
167
|
+
test('write - resumes after queue drains', async () => {
|
|
178
168
|
// writeQueueSize=8 → queue capacity = 8, socketBatchSize=4
|
|
179
169
|
const tak = createTAK({ writeQueueSize: 8, socketBatchSize: 4 });
|
|
180
170
|
let callCount = 0;
|
|
@@ -190,11 +180,10 @@ test('write - resumes after queue drains', async (t) => {
|
|
|
190
180
|
CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(),
|
|
191
181
|
CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(),
|
|
192
182
|
]);
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
t.end();
|
|
183
|
+
assert.equal(tak.queue.length, 0, 'all drained');
|
|
184
|
+
assert.ok(callCount >= 2, 'multiple socket.write calls needed');
|
|
196
185
|
});
|
|
197
|
-
test('write - caller can safely modify array after write returns', async (
|
|
186
|
+
test('write - caller can safely modify array after write returns', async () => {
|
|
198
187
|
const tak = createTAK();
|
|
199
188
|
const writeCalls = [];
|
|
200
189
|
tak.client = createFakeSocket({
|
|
@@ -207,12 +196,11 @@ test('write - caller can safely modify array after write returns', async (t) =>
|
|
|
207
196
|
await tak.write(cots);
|
|
208
197
|
// Modify the array after write — should not affect what was sent
|
|
209
198
|
cots.length = 0;
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
t.end();
|
|
199
|
+
assert.equal(writeCalls.length, 1, 'socket.write was called');
|
|
200
|
+
assert.ok(writeCalls[0].includes('<event'), 'CoT was sent before array was cleared');
|
|
201
|
+
assert.equal(tak.queue.length, 0, 'queue empty');
|
|
214
202
|
});
|
|
215
|
-
test('write - stripFlow replaces existing flow tags in outbound XML', async (
|
|
203
|
+
test('write - stripFlow replaces existing flow tags in outbound XML', async () => {
|
|
216
204
|
const tak = createTAK();
|
|
217
205
|
const writeCalls = [];
|
|
218
206
|
tak.client = createFakeSocket({
|
|
@@ -244,24 +232,22 @@ test('write - stripFlow replaces existing flow tags in outbound XML', async (t)
|
|
|
244
232
|
}
|
|
245
233
|
});
|
|
246
234
|
await tak.write([cot], { stripFlow: true });
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
235
|
+
assert.equal(writeCalls.length, 1, 'socket.write was called');
|
|
236
|
+
assert.ok(!writeCalls[0].includes('TAK-Server-test='), 'server flow tag removed from outbound XML');
|
|
237
|
+
assert.ok(writeCalls[0].includes('NodeCoT-'), 'node-cot flow tag added to outbound XML');
|
|
250
238
|
const outbound = CoTParser.from_xml(writeCalls[0]);
|
|
251
239
|
const outboundFlow = outbound.raw.event.detail?.['_flow-tags_'];
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
240
|
+
assert.ok(outboundFlow, 'outbound CoT contains flow tags');
|
|
241
|
+
assert.equal(Object.keys(outboundFlow || {}).length, 1, 'outbound CoT flow object is reset to one initial tag');
|
|
242
|
+
assert.ok(!outboundFlow?.['TAK-Server-test'], 'outbound CoT flow object clears prior TAK Server tags');
|
|
255
243
|
const feat = await CoTParser.to_geojson(cot);
|
|
256
|
-
|
|
257
|
-
t.end();
|
|
244
|
+
assert.equal(feat.properties.flow?.['TAK-Server-test'], '2026-03-08T04:48:00Z', 'original CoT remains unchanged');
|
|
258
245
|
});
|
|
259
|
-
test('destroy - sets destroyed and clears ping interval', (
|
|
246
|
+
test('destroy - sets destroyed and clears ping interval', () => {
|
|
260
247
|
const tak = createTAK();
|
|
261
248
|
tak.pingInterval = setInterval(() => { }, 60000);
|
|
262
249
|
tak.destroy();
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
t.end();
|
|
250
|
+
assert.equal(tak.destroyed, true, 'destroyed is true');
|
|
251
|
+
assert.equal(tak.pingInterval, undefined, 'pingInterval cleared');
|
|
266
252
|
});
|
|
267
253
|
//# sourceMappingURL=pipeline.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../test/pipeline.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../test/pipeline.test.ts"],"names":[],"mappings":"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"}
|
package/dist/test/queue.test.js
CHANGED
|
@@ -1,46 +1,43 @@
|
|
|
1
|
-
import test from '
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
2
3
|
import { Queue } from '../lib/utils/queue.js';
|
|
3
|
-
test('Queue - push/pop FIFO order', (
|
|
4
|
+
test('Queue - push/pop FIFO order', () => {
|
|
4
5
|
const q = new Queue(4);
|
|
5
6
|
q.push(1);
|
|
6
7
|
q.push(2);
|
|
7
8
|
q.push(3);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
t.end();
|
|
9
|
+
assert.equal(q.pop(), 1);
|
|
10
|
+
assert.equal(q.pop(), 2);
|
|
11
|
+
assert.equal(q.pop(), 3);
|
|
12
12
|
});
|
|
13
|
-
test('Queue - capacity enforced', (
|
|
13
|
+
test('Queue - capacity enforced', () => {
|
|
14
14
|
const q = new Queue(2);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
t.end();
|
|
15
|
+
assert.equal(q.push(1), true);
|
|
16
|
+
assert.equal(q.push(2), true);
|
|
17
|
+
assert.equal(q.isFull, true);
|
|
18
|
+
assert.equal(q.push(3), false);
|
|
19
|
+
assert.equal(q.length, 2);
|
|
21
20
|
});
|
|
22
|
-
test('Queue - pop from empty', (
|
|
21
|
+
test('Queue - pop from empty', () => {
|
|
23
22
|
const q = new Queue(2);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
t.end();
|
|
23
|
+
assert.equal(q.pop(), undefined);
|
|
24
|
+
assert.equal(q.length, 0);
|
|
27
25
|
});
|
|
28
|
-
test('Queue - ring buffer wraparound', (
|
|
26
|
+
test('Queue - ring buffer wraparound', () => {
|
|
29
27
|
const q = new Queue(3);
|
|
30
28
|
q.push(1);
|
|
31
29
|
q.push(2);
|
|
32
30
|
q.push(3);
|
|
33
31
|
// Pop two — head advances past midpoint
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
assert.equal(q.pop(), 1);
|
|
33
|
+
assert.equal(q.pop(), 2);
|
|
36
34
|
// Push two more — tail wraps around
|
|
37
35
|
q.push(4);
|
|
38
36
|
q.push(5);
|
|
39
37
|
// Remaining items come out in FIFO order
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
t.end();
|
|
38
|
+
assert.equal(q.pop(), 3);
|
|
39
|
+
assert.equal(q.pop(), 4);
|
|
40
|
+
assert.equal(q.pop(), 5);
|
|
41
|
+
assert.equal(q.length, 0);
|
|
45
42
|
});
|
|
46
43
|
//# sourceMappingURL=queue.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../test/queue.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../test/queue.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACrC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACnC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE;IAChC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;IACxC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,wCAAwC;IACxC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,oCAAoC;IACpC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,yCAAyC;IACzC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tak-ps/node-tak",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "12.
|
|
4
|
+
"version": "12.9.0",
|
|
5
5
|
"description": "Lightweight JavaScript library for communicating with TAK Server",
|
|
6
6
|
"author": "Nick Ingalls <nick@ingalls.ca>",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -44,10 +44,8 @@
|
|
|
44
44
|
"@inquirer/prompts": "^8.0.1",
|
|
45
45
|
"@types/node": "^25.0.0",
|
|
46
46
|
"@types/pem": "^1.14.4",
|
|
47
|
-
"@types/tape": "^5.6.0",
|
|
48
47
|
"c8": "^11.0.0",
|
|
49
48
|
"eslint": "^10.0.0",
|
|
50
|
-
"tape": "^5.6.1",
|
|
51
49
|
"tsx": "^4.19.4",
|
|
52
50
|
"typedoc": "^0.28.1",
|
|
53
51
|
"typescript": "^6.0.0",
|
package/test/default.test.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import TAK, { CoT } from '../index.js';
|
|
2
|
-
import test from '
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
3
4
|
|
|
4
|
-
test('Ensure Export', (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
t.end();
|
|
5
|
+
test('Ensure Export', () => {
|
|
6
|
+
assert.ok(TAK);
|
|
7
|
+
assert.ok(CoT);
|
|
8
8
|
});
|
|
9
9
|
|
package/test/findCoT.test.ts
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import TAK from '../index.js';
|
|
2
|
-
import test from '
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
3
4
|
|
|
4
|
-
test('findCoT - Unfinished', (
|
|
5
|
+
test('findCoT - Unfinished', () => {
|
|
5
6
|
const res = TAK.findCoT('<event ><detail>');
|
|
6
|
-
|
|
7
|
-
t.end();
|
|
7
|
+
assert.equal(res, null);
|
|
8
8
|
});
|
|
9
9
|
|
|
10
|
-
test('findCoT - Basic', (
|
|
10
|
+
test('findCoT - Basic', () => {
|
|
11
11
|
const res = TAK.findCoT('<event></event>');
|
|
12
|
-
|
|
12
|
+
assert.deepEqual(res, {
|
|
13
13
|
event: '<event></event>',
|
|
14
14
|
remainder: '',
|
|
15
15
|
});
|
|
16
|
-
t.end();
|
|
17
16
|
});
|
|
18
17
|
|
|
19
|
-
test('findCoT - New Lines', (
|
|
18
|
+
test('findCoT - New Lines', () => {
|
|
20
19
|
const res = TAK.findCoT(`
|
|
21
20
|
<event>
|
|
22
21
|
<detail remarks="
|
|
@@ -24,14 +23,13 @@ I am a multiline
|
|
|
24
23
|
remarks field
|
|
25
24
|
"/>
|
|
26
25
|
</event>`);
|
|
27
|
-
|
|
26
|
+
assert.deepEqual(res, {
|
|
28
27
|
event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
29
28
|
remainder: '',
|
|
30
29
|
});
|
|
31
|
-
t.end();
|
|
32
30
|
});
|
|
33
31
|
|
|
34
|
-
test('findCoT - New Lines - Non-Greedy', (
|
|
32
|
+
test('findCoT - New Lines - Non-Greedy', () => {
|
|
35
33
|
const res = TAK.findCoT(`
|
|
36
34
|
<event>
|
|
37
35
|
<detail remarks="
|
|
@@ -44,48 +42,44 @@ I am a multiline
|
|
|
44
42
|
remarks field
|
|
45
43
|
"/>
|
|
46
44
|
</event>`);
|
|
47
|
-
|
|
45
|
+
assert.deepEqual(res, {
|
|
48
46
|
event: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
49
47
|
remainder: '<event>\n <detail remarks="\nI am a multiline\nremarks field\n "/>\n</event>',
|
|
50
48
|
});
|
|
51
|
-
t.end();
|
|
52
49
|
});
|
|
53
50
|
|
|
54
|
-
test('findCoT - bad preceding data', (
|
|
51
|
+
test('findCoT - bad preceding data', () => {
|
|
55
52
|
const res = TAK.findCoT(`
|
|
56
53
|
<fake/>
|
|
57
54
|
<event><detail remarks="I am remarks"/>
|
|
58
55
|
</event>
|
|
59
56
|
`);
|
|
60
|
-
|
|
57
|
+
assert.deepEqual(res, {
|
|
61
58
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
62
59
|
remainder: '\n',
|
|
63
60
|
});
|
|
64
|
-
t.end();
|
|
65
61
|
});
|
|
66
62
|
|
|
67
|
-
test('findCoT - bad post data', (
|
|
63
|
+
test('findCoT - bad post data', () => {
|
|
68
64
|
const res = TAK.findCoT(`
|
|
69
65
|
<event><detail remarks="I am remarks"/>
|
|
70
66
|
</event>
|
|
71
67
|
<fake/>
|
|
72
68
|
`);
|
|
73
|
-
|
|
69
|
+
assert.deepEqual(res, {
|
|
74
70
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
75
71
|
remainder: '\n<fake/>\n',
|
|
76
72
|
});
|
|
77
|
-
t.end();
|
|
78
73
|
});
|
|
79
74
|
|
|
80
|
-
test('findCoT - mixed', (
|
|
75
|
+
test('findCoT - mixed', () => {
|
|
81
76
|
const res = TAK.findCoT(`
|
|
82
77
|
<event><detail remarks="I am remarks"/>
|
|
83
78
|
</event>
|
|
84
79
|
<fake/>
|
|
85
80
|
<event><detail remarks="I am remarks"/></event>`);
|
|
86
|
-
|
|
81
|
+
assert.deepEqual(res, {
|
|
87
82
|
event: '<event><detail remarks="I am remarks"/>\n</event>',
|
|
88
83
|
remainder: '\n<fake/>\n<event><detail remarks="I am remarks"/></event>',
|
|
89
84
|
});
|
|
90
|
-
t.end();
|
|
91
85
|
});
|
package/test/pipeline.test.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import test from '
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
2
3
|
import { EventEmitter } from 'node:events';
|
|
3
4
|
import TAK, { CoT } from '../index.js';
|
|
4
5
|
import { CoTParser } from '@tak-ps/node-cot';
|
|
@@ -20,26 +21,24 @@ function createFakeSocket(opts: { write?: (...args: unknown[]) => boolean } = {}
|
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
test('write - resolves when all CoTs are queued and sent', async (
|
|
24
|
+
test('write - resolves when all CoTs are queued and sent', async () => {
|
|
24
25
|
const tak = createTAK();
|
|
25
26
|
tak.client = createFakeSocket();
|
|
26
27
|
|
|
27
28
|
const cots = [CoT.ping(), CoT.ping()];
|
|
28
29
|
await tak.write(cots);
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
t.end();
|
|
31
|
+
assert.equal(tak.queue.length, 0, 'queue empty after write + pull');
|
|
32
32
|
});
|
|
33
33
|
|
|
34
|
-
test('write - returns early when destroyed', async (
|
|
34
|
+
test('write - returns early when destroyed', async () => {
|
|
35
35
|
const tak = createTAK();
|
|
36
36
|
tak.destroyed = true;
|
|
37
37
|
await tak.write([CoT.ping()]);
|
|
38
|
-
|
|
39
|
-
t.end();
|
|
38
|
+
assert.equal(tak.queue.length, 0, 'nothing queued');
|
|
40
39
|
});
|
|
41
40
|
|
|
42
|
-
test('write - multiple concurrent writes', async (
|
|
41
|
+
test('write - multiple concurrent writes', async () => {
|
|
43
42
|
const tak = createTAK();
|
|
44
43
|
tak.client = createFakeSocket();
|
|
45
44
|
|
|
@@ -48,12 +47,11 @@ test('write - multiple concurrent writes', async (t) => {
|
|
|
48
47
|
const p2 = tak.write([CoT.ping()]).then(() => order.push(2));
|
|
49
48
|
await Promise.all([p1, p2]);
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
t.end();
|
|
50
|
+
assert.deepEqual(order, [1, 2], 'writes resolve in order');
|
|
51
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
54
52
|
});
|
|
55
53
|
|
|
56
|
-
test('pull - batches CoTs into single socket.write call', async (
|
|
54
|
+
test('pull - batches CoTs into single socket.write call', async () => {
|
|
57
55
|
const tak = createTAK({ socketBatchSize: 64 });
|
|
58
56
|
const writeCalls: string[] = [];
|
|
59
57
|
tak.client = createFakeSocket({
|
|
@@ -65,13 +63,12 @@ test('pull - batches CoTs into single socket.write call', async (t) => {
|
|
|
65
63
|
|
|
66
64
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
67
65
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
t.end();
|
|
66
|
+
assert.equal(writeCalls.length, 1, 'socket.write called once for batch');
|
|
67
|
+
assert.ok(writeCalls[0].includes('<event'), 'batch contains XML events');
|
|
68
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
72
69
|
});
|
|
73
70
|
|
|
74
|
-
test('pull - respects backpressure and resumes on process()', async (
|
|
71
|
+
test('pull - respects backpressure and resumes on process()', async () => {
|
|
75
72
|
const tak = createTAK({ socketBatchSize: 1 });
|
|
76
73
|
let callCount = 0;
|
|
77
74
|
const socket = createFakeSocket({
|
|
@@ -89,19 +86,18 @@ test('pull - respects backpressure and resumes on process()', async (t) => {
|
|
|
89
86
|
// Both CoTs get queued immediately, pull() sends 1 and hits backpressure
|
|
90
87
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
91
88
|
|
|
92
|
-
|
|
93
|
-
|
|
89
|
+
assert.equal(callCount, 1, 'one write before backpressure');
|
|
90
|
+
assert.equal(tak.queue.length, 1, 'one item still in queue');
|
|
94
91
|
|
|
95
92
|
// Simulate backpressure clearing (equivalent to drain event)
|
|
96
93
|
socket.writableNeedDrain = false;
|
|
97
94
|
tak.process();
|
|
98
95
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
t.end();
|
|
96
|
+
assert.equal(callCount, 2, 'second write after backpressure cleared');
|
|
97
|
+
assert.equal(tak.queue.length, 0, 'queue drained');
|
|
102
98
|
});
|
|
103
99
|
|
|
104
|
-
test('pull - error in socket.write triggers destroy + error event', async (
|
|
100
|
+
test('pull - error in socket.write triggers destroy + error event', async () => {
|
|
105
101
|
const tak = createTAK();
|
|
106
102
|
tak.client = createFakeSocket({
|
|
107
103
|
write() { throw new Error('write failed'); },
|
|
@@ -115,13 +111,12 @@ test('pull - error in socket.write triggers destroy + error event', async (t) =>
|
|
|
115
111
|
// write() sees destroyed=true on next check and returns
|
|
116
112
|
await tak.write([CoT.ping()]);
|
|
117
113
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
t.end();
|
|
114
|
+
assert.equal(tak.destroyed, true, 'destroyed after write error');
|
|
115
|
+
assert.ok(errorFired, 'error event fired');
|
|
116
|
+
assert.equal(errorMsg, 'write failed', 'error message matches');
|
|
122
117
|
});
|
|
123
118
|
|
|
124
|
-
test('pull - noop when already writing', (
|
|
119
|
+
test('pull - noop when already writing', () => {
|
|
125
120
|
const tak = createTAK();
|
|
126
121
|
tak.client = createFakeSocket();
|
|
127
122
|
tak.writing = true;
|
|
@@ -131,18 +126,16 @@ test('pull - noop when already writing', (t) => {
|
|
|
131
126
|
// pull() should return immediately since writing=true
|
|
132
127
|
tak.process();
|
|
133
128
|
|
|
134
|
-
|
|
135
|
-
t.end();
|
|
129
|
+
assert.equal(tak.queue.length, 1, 'queue unchanged');
|
|
136
130
|
});
|
|
137
131
|
|
|
138
|
-
test('flush - resolves immediately when nothing queued', async (
|
|
132
|
+
test('flush - resolves immediately when nothing queued', async () => {
|
|
139
133
|
const tak = createTAK();
|
|
140
134
|
await tak.flush();
|
|
141
|
-
|
|
142
|
-
t.end();
|
|
135
|
+
assert.ok(true, 'flush resolved immediately');
|
|
143
136
|
});
|
|
144
137
|
|
|
145
|
-
test('flush - rejects when destroyed mid-flush', async (
|
|
138
|
+
test('flush - rejects when destroyed mid-flush', async () => {
|
|
146
139
|
const tak = createTAK();
|
|
147
140
|
tak.client = createFakeSocket();
|
|
148
141
|
|
|
@@ -155,15 +148,14 @@ test('flush - rejects when destroyed mid-flush', async (t) => {
|
|
|
155
148
|
|
|
156
149
|
try {
|
|
157
150
|
await p;
|
|
158
|
-
|
|
151
|
+
assert.fail('should have rejected');
|
|
159
152
|
} catch (err) {
|
|
160
|
-
|
|
161
|
-
|
|
153
|
+
assert.ok(err instanceof Error, 'error is an Error');
|
|
154
|
+
assert.ok((err as Error).message.includes('destroyed'), 'error mentions destroyed');
|
|
162
155
|
}
|
|
163
|
-
t.end();
|
|
164
156
|
});
|
|
165
157
|
|
|
166
|
-
test('flush - waits for queue to drain via process()', async (
|
|
158
|
+
test('flush - waits for queue to drain via process()', async () => {
|
|
167
159
|
const tak = createTAK({ socketBatchSize: 1 });
|
|
168
160
|
let callCount = 0;
|
|
169
161
|
const socket = createFakeSocket({
|
|
@@ -179,7 +171,7 @@ test('flush - waits for queue to drain via process()', async (t) => {
|
|
|
179
171
|
tak.client = socket;
|
|
180
172
|
|
|
181
173
|
await tak.write([CoT.ping(), CoT.ping()]);
|
|
182
|
-
|
|
174
|
+
assert.equal(tak.queue.length, 1, 'one item in queue after backpressure');
|
|
183
175
|
|
|
184
176
|
// Clear backpressure and drain
|
|
185
177
|
socket.writableNeedDrain = false;
|
|
@@ -187,12 +179,11 @@ test('flush - waits for queue to drain via process()', async (t) => {
|
|
|
187
179
|
tak.process();
|
|
188
180
|
await flushP;
|
|
189
181
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
t.end();
|
|
182
|
+
assert.equal(tak.queue.length, 0, 'queue empty after flush');
|
|
183
|
+
assert.equal(callCount, 2, 'both items sent');
|
|
193
184
|
});
|
|
194
185
|
|
|
195
|
-
test('write - yields when queue is full and resumes after destroy', async (
|
|
186
|
+
test('write - yields when queue is full and resumes after destroy', async () => {
|
|
196
187
|
// writeQueueSize=4 → queue capacity = 4
|
|
197
188
|
const tak = createTAK({ writeQueueSize: 4 });
|
|
198
189
|
|
|
@@ -202,17 +193,16 @@ test('write - yields when queue is full and resumes after destroy', async (t) =>
|
|
|
202
193
|
.then(() => { writeResolved = true; });
|
|
203
194
|
await new Promise(r => setImmediate(r));
|
|
204
195
|
|
|
205
|
-
|
|
206
|
-
|
|
196
|
+
assert.equal(tak.queue.length, 4, 'queue at capacity');
|
|
197
|
+
assert.equal(writeResolved, false, 'write blocked waiting for space');
|
|
207
198
|
|
|
208
199
|
// Destroy unblocks write (destroyed check in loop)
|
|
209
200
|
tak.destroy();
|
|
210
201
|
await p;
|
|
211
|
-
|
|
212
|
-
t.end();
|
|
202
|
+
assert.ok(writeResolved, 'write resolved after destroy');
|
|
213
203
|
});
|
|
214
204
|
|
|
215
|
-
test('write - resumes after queue drains', async (
|
|
205
|
+
test('write - resumes after queue drains', async () => {
|
|
216
206
|
// writeQueueSize=8 → queue capacity = 8, socketBatchSize=4
|
|
217
207
|
const tak = createTAK({ writeQueueSize: 8, socketBatchSize: 4 });
|
|
218
208
|
let callCount = 0;
|
|
@@ -230,12 +220,11 @@ test('write - resumes after queue drains', async (t) => {
|
|
|
230
220
|
CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(), CoT.ping(),
|
|
231
221
|
]);
|
|
232
222
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
t.end();
|
|
223
|
+
assert.equal(tak.queue.length, 0, 'all drained');
|
|
224
|
+
assert.ok(callCount >= 2, 'multiple socket.write calls needed');
|
|
236
225
|
});
|
|
237
226
|
|
|
238
|
-
test('write - caller can safely modify array after write returns', async (
|
|
227
|
+
test('write - caller can safely modify array after write returns', async () => {
|
|
239
228
|
const tak = createTAK();
|
|
240
229
|
const writeCalls: string[] = [];
|
|
241
230
|
tak.client = createFakeSocket({
|
|
@@ -251,13 +240,12 @@ test('write - caller can safely modify array after write returns', async (t) =>
|
|
|
251
240
|
// Modify the array after write — should not affect what was sent
|
|
252
241
|
cots.length = 0;
|
|
253
242
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
t.end();
|
|
243
|
+
assert.equal(writeCalls.length, 1, 'socket.write was called');
|
|
244
|
+
assert.ok(writeCalls[0].includes('<event'), 'CoT was sent before array was cleared');
|
|
245
|
+
assert.equal(tak.queue.length, 0, 'queue empty');
|
|
258
246
|
});
|
|
259
247
|
|
|
260
|
-
test('write - stripFlow replaces existing flow tags in outbound XML', async (
|
|
248
|
+
test('write - stripFlow replaces existing flow tags in outbound XML', async () => {
|
|
261
249
|
const tak = createTAK();
|
|
262
250
|
const writeCalls: string[] = [];
|
|
263
251
|
tak.client = createFakeSocket({
|
|
@@ -292,30 +280,27 @@ test('write - stripFlow replaces existing flow tags in outbound XML', async (t)
|
|
|
292
280
|
|
|
293
281
|
await tak.write([cot], { stripFlow: true });
|
|
294
282
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
283
|
+
assert.equal(writeCalls.length, 1, 'socket.write was called');
|
|
284
|
+
assert.ok(!writeCalls[0].includes('TAK-Server-test='), 'server flow tag removed from outbound XML');
|
|
285
|
+
assert.ok(writeCalls[0].includes('NodeCoT-'), 'node-cot flow tag added to outbound XML');
|
|
298
286
|
|
|
299
287
|
const outbound = CoTParser.from_xml(writeCalls[0]);
|
|
300
288
|
const outboundFlow = outbound.raw.event.detail?.['_flow-tags_'];
|
|
301
289
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
290
|
+
assert.ok(outboundFlow, 'outbound CoT contains flow tags');
|
|
291
|
+
assert.equal(Object.keys(outboundFlow || {}).length, 1, 'outbound CoT flow object is reset to one initial tag');
|
|
292
|
+
assert.ok(!outboundFlow?.['TAK-Server-test'], 'outbound CoT flow object clears prior TAK Server tags');
|
|
305
293
|
|
|
306
294
|
const feat = await CoTParser.to_geojson(cot);
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
t.end();
|
|
295
|
+
assert.equal(feat.properties.flow?.['TAK-Server-test'], '2026-03-08T04:48:00Z', 'original CoT remains unchanged');
|
|
310
296
|
});
|
|
311
297
|
|
|
312
|
-
test('destroy - sets destroyed and clears ping interval', (
|
|
298
|
+
test('destroy - sets destroyed and clears ping interval', () => {
|
|
313
299
|
const tak = createTAK();
|
|
314
300
|
tak.pingInterval = setInterval(() => {}, 60000);
|
|
315
301
|
|
|
316
302
|
tak.destroy();
|
|
317
303
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
t.end();
|
|
304
|
+
assert.equal(tak.destroyed, true, 'destroyed is true');
|
|
305
|
+
assert.equal(tak.pingInterval, undefined, 'pingInterval cleared');
|
|
321
306
|
});
|
package/test/queue.test.ts
CHANGED
|
@@ -1,49 +1,46 @@
|
|
|
1
|
-
import test from '
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
2
3
|
import { Queue } from '../lib/utils/queue.js';
|
|
3
4
|
|
|
4
|
-
test('Queue - push/pop FIFO order', (
|
|
5
|
+
test('Queue - push/pop FIFO order', () => {
|
|
5
6
|
const q = new Queue<number>(4);
|
|
6
7
|
q.push(1);
|
|
7
8
|
q.push(2);
|
|
8
9
|
q.push(3);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
t.end();
|
|
10
|
+
assert.equal(q.pop(), 1);
|
|
11
|
+
assert.equal(q.pop(), 2);
|
|
12
|
+
assert.equal(q.pop(), 3);
|
|
13
13
|
});
|
|
14
14
|
|
|
15
|
-
test('Queue - capacity enforced', (
|
|
15
|
+
test('Queue - capacity enforced', () => {
|
|
16
16
|
const q = new Queue<number>(2);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
t.end();
|
|
17
|
+
assert.equal(q.push(1), true);
|
|
18
|
+
assert.equal(q.push(2), true);
|
|
19
|
+
assert.equal(q.isFull, true);
|
|
20
|
+
assert.equal(q.push(3), false);
|
|
21
|
+
assert.equal(q.length, 2);
|
|
23
22
|
});
|
|
24
23
|
|
|
25
|
-
test('Queue - pop from empty', (
|
|
24
|
+
test('Queue - pop from empty', () => {
|
|
26
25
|
const q = new Queue<number>(2);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
t.end();
|
|
26
|
+
assert.equal(q.pop(), undefined);
|
|
27
|
+
assert.equal(q.length, 0);
|
|
30
28
|
});
|
|
31
29
|
|
|
32
|
-
test('Queue - ring buffer wraparound', (
|
|
30
|
+
test('Queue - ring buffer wraparound', () => {
|
|
33
31
|
const q = new Queue<number>(3);
|
|
34
32
|
q.push(1);
|
|
35
33
|
q.push(2);
|
|
36
34
|
q.push(3);
|
|
37
35
|
// Pop two — head advances past midpoint
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
assert.equal(q.pop(), 1);
|
|
37
|
+
assert.equal(q.pop(), 2);
|
|
40
38
|
// Push two more — tail wraps around
|
|
41
39
|
q.push(4);
|
|
42
40
|
q.push(5);
|
|
43
41
|
// Remaining items come out in FIFO order
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
t.end();
|
|
42
|
+
assert.equal(q.pop(), 3);
|
|
43
|
+
assert.equal(q.pop(), 4);
|
|
44
|
+
assert.equal(q.pop(), 5);
|
|
45
|
+
assert.equal(q.length, 0);
|
|
49
46
|
});
|