From 0a621ba73a974d1052fc9a6f796632be3c9b975e Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sun, 22 Sep 2024 12:57:23 +0200 Subject: [PATCH] Use `fs/promises` in the Node.js unit-tests (PR 17714 follow-up) This is available in all Node.js versions that we currently support, and using it allows us to remove callback-functions; please see https://nodejs.org/docs/latest-v18.x/api/fs.html#promises-api --- test/unit/test_utils.js | 60 +++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/test/unit/test_utils.js b/test/unit/test_utils.js index bc1d839d5eadd..507fc15649f48 100644 --- a/test/unit/test_utils.js +++ b/test/unit/test_utils.js @@ -45,15 +45,8 @@ class DOMFileReaderFactory { class NodeFileReaderFactory { static async fetch(params) { - return new Promise((resolve, reject) => { - fs.readFile(params.path, (error, data) => { - if (error || !data) { - reject(error || new Error(`Empty file for: ${params.path}`)); - return; - } - resolve(new Uint8Array(data)); - }); - }); + const data = await fs.promises.readFile(params.path); + return new Uint8Array(data); } } @@ -152,33 +145,34 @@ function createTemporaryNodeServer() { const server = http .createServer((request, response) => { const filePath = process.cwd() + "/test/pdfs" + request.url; - fs.lstat(filePath, (error, stat) => { - if (error) { + fs.promises.lstat(filePath).then( + stat => { + if (!request.headers.range) { + const contentLength = stat.size; + const stream = fs.createReadStream(filePath); + response.writeHead(200, { + "Content-Type": "application/pdf", + "Content-Length": contentLength, + "Accept-Ranges": "bytes", + }); + stream.pipe(response); + } else { + const [start, end] = request.headers.range + .split("=")[1] + .split("-") + .map(x => Number(x)); + const stream = fs.createReadStream(filePath, { start, end }); + response.writeHead(206, { + "Content-Type": "application/pdf", + }); + stream.pipe(response); + } + }, + error => { response.writeHead(404); response.end(`File ${request.url} not found!`); - return; - } - if (!request.headers.range) { - const contentLength = stat.size; - const stream = fs.createReadStream(filePath); - response.writeHead(200, { - "Content-Type": "application/pdf", - "Content-Length": contentLength, - "Accept-Ranges": "bytes", - }); - stream.pipe(response); - } else { - const [start, end] = request.headers.range - .split("=")[1] - .split("-") - .map(x => Number(x)); - const stream = fs.createReadStream(filePath, { start, end }); - response.writeHead(206, { - "Content-Type": "application/pdf", - }); - stream.pipe(response); } - }); + ); }) .listen(0); /* Listen on a random free port */