Skip to content

Commit c44ceee

Browse files
committed
[Test] Stabilize message-translator tests on Node.js 26.4
1 parent a6af64d commit c44ceee

2 files changed

Lines changed: 28 additions & 4 deletions

File tree

test/test-message-translator-complex.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,10 @@ describe('Rclnodejs message translation: complex types', function () {
209209
const MessageType = testData.pkg + '/msg/' + testData.type;
210210
const publisher = node.createPublisher(MessageType, topic);
211211
return new Promise((resolve, reject) => {
212+
let timer;
212213
const sub = node.createSubscription(MessageType, topic, (value) => {
213214
if (deepEqual(value, v)) {
215+
clearInterval(timer);
214216
node.destroy();
215217
resolve();
216218
} else {
@@ -219,6 +221,10 @@ describe('Rclnodejs message translation: complex types', function () {
219221
reject('case ' + i + '. Expected: ' + v + ', Got: ' + value);
220222
}
221223
});
224+
// Keep republishing until the subscription is matched and the
225+
// message is received; a single publish can be lost while pub/sub
226+
// discovery is still in progress.
227+
timer = setInterval(() => publisher.publish(v), 100);
222228
publisher.publish(v);
223229
rclnodejs.spin(node);
224230
});

test/test-message-translator-primitive.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,18 +94,22 @@ describe('Rclnodejs message translation: primitive types', function () {
9494
const MessageType = 'std_msgs/msg/' + testData.type;
9595
const publisher = node.createPublisher(MessageType, topic);
9696
return new Promise((resolve, reject) => {
97+
let timer;
9798
const sub = node.createSubscription(MessageType, topic, (value) => {
9899
// For primitive types, msgs are defined as a single `.data` field
99100
if (value.data === v) {
101+
clearInterval(timer);
100102
node.destroy();
101103
resolve();
102104
} else {
105+
clearInterval(timer);
103106
node.destroy();
104107
reject(
105108
'case ' + i + '. Expected: ' + v + ', Got: ' + value.data
106109
);
107110
}
108111
});
112+
timer = setInterval(() => publisher.publish(v), 100);
109113
publisher.publish(v); // Short-cut form of publishing primitive types
110114
rclnodejs.spin(node);
111115
});
@@ -119,18 +123,22 @@ describe('Rclnodejs message translation: primitive types', function () {
119123
const MessageType = 'std_msgs/msg/' + testData.type;
120124
const publisher = node.createPublisher(MessageType, topic);
121125
return new Promise((resolve, reject) => {
126+
let timer;
122127
const sub = node.createSubscription(MessageType, topic, (value) => {
123128
// For primitive types, msgs are defined as a single `.data` field
124129
if (value.data === v) {
130+
clearInterval(timer);
125131
node.destroy();
126132
resolve();
127133
} else {
134+
clearInterval(timer);
128135
node.destroy();
129136
reject(
130137
'case ' + i + '. Expected: ' + v + ', Got: ' + value.data
131138
);
132139
}
133140
});
141+
timer = setInterval(() => publisher.publish({ data: v }), 100);
134142
publisher.publish({ data: v }); // Ensure the original form of the message can be used
135143
rclnodejs.spin(node);
136144
});
@@ -221,27 +229,32 @@ describe('Rclnodejs message translation: primitive types array', function () {
221229
const MessageType = 'std_msgs/msg/' + testData.type;
222230
const publisher = node.createPublisher(MessageType, topic);
223231
return new Promise((resolve, reject) => {
232+
let timer;
224233
const sub = node.createSubscription(MessageType, topic, (value) => {
225234
// For primitive types, msgs are defined as a single `.data` field
226235
if (
227236
(isTypedArray(value.data) &&
228237
deepEqual(Array.from(value.data), testData.values)) ||
229238
deepEqual(value.data, testData.values)
230239
) {
240+
clearInterval(timer);
231241
node.destroy();
232242
resolve();
233243
} else {
244+
clearInterval(timer);
234245
node.destroy();
235246
reject('Expected: ' + testData.values + ', Got: ' + value.data);
236247
}
237248
});
238-
publisher.publish({
249+
const msg = {
239250
layout: {
240251
dim: [{ label: 'length', size: 0, stride: 0 }],
241252
data_offset: 0,
242253
},
243254
data: testData.values,
244-
});
255+
};
256+
timer = setInterval(() => publisher.publish(msg), 100);
257+
publisher.publish(msg);
245258
rclnodejs.spin(node);
246259
});
247260
}
@@ -478,16 +491,19 @@ describe('Rclnodejs message translation: TypedArray large data', function () {
478491
const MessageType = 'std_msgs/msg/' + testData.type;
479492
const publisher = node.createPublisher(MessageType, topic);
480493
return new Promise((resolve, reject) => {
494+
let timer;
481495
const sub = node.createSubscription(MessageType, topic, (value) => {
482496
// For primitive types, msgs are defined as a single `.data` field
483497
if (
484498
(isTypedArray(value.data) &&
485499
deepEqual(Array.from(value.data), testData.values)) ||
486500
deepEqual(value.data, testData.values)
487501
) {
502+
clearInterval(timer);
488503
node.destroy();
489504
resolve();
490505
} else {
506+
clearInterval(timer);
491507
node.destroy();
492508
reject(
493509
'Expected: ' +
@@ -497,13 +513,15 @@ describe('Rclnodejs message translation: TypedArray large data', function () {
497513
);
498514
}
499515
});
500-
publisher.publish({
516+
const msg = {
501517
layout: {
502518
dim: [{ label: 'length', size: 0, stride: 0 }],
503519
data_offset: 0,
504520
},
505521
data: testData.values,
506-
});
522+
};
523+
timer = setInterval(() => publisher.publish(msg), 100);
524+
publisher.publish(msg);
507525
rclnodejs.spin(node);
508526
});
509527
}

0 commit comments

Comments
 (0)