From 492ff5b07c6457b0b4b0d05e331cce968f598022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C5=ABdolfs=20O=C5=A1i=C5=86=C5=A1?= Date: Tue, 15 Aug 2023 12:08:19 +0200 Subject: [PATCH] Properly handle event streams with readline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The stream would otherwise split longer events into multiple chunks which would fail to parse. Signed-off-by: Rūdolfs Ošiņš --- tests/support/peerManager.ts | 38 +++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/tests/support/peerManager.ts b/tests/support/peerManager.ts index 3e8d30821..4400f4a35 100644 --- a/tests/support/peerManager.ts +++ b/tests/support/peerManager.ts @@ -10,6 +10,7 @@ import getPort from "get-port"; import lodash from "lodash"; import waitOn from "wait-on"; import { execa } from "execa"; +import * as readline from "node:readline/promises"; import * as Process from "./process.js"; import { randomTag } from "@tests/support/support.js"; @@ -292,24 +293,25 @@ export class RadiclePeer { resources: [`socket:${this.#socket}`], }); - this.rad(["node", "events"], { cwd: this.#radHome }).stdout?.on( - "data", - (data: any) => { - data - .toString() - .split("\n") - .forEach((data: unknown) => { - if (data && typeof data === "string" && data.trim() !== "") { - try { - const result: NodeEvent = JSON.parse(data); - this.#eventRecords.push(result); - } catch (e) { - console.log("Error parsing event", data); - } - } - }); - }, - ); + const stdout = this.rad(["node", "events"], { cwd: this.#radHome }).stdout; + + if (stdout) { + readline + .createInterface({ + input: stdout, + terminal: false, + }) + .on("line", line => { + try { + const result: NodeEvent = JSON.parse(line); + this.#eventRecords.push(result); + } catch (e) { + console.log("Error parsing event", line); + } + }); + } else { + throw new Error("Could not get stdout to track events"); + } } public async stopNode() {