From 399ab4e98661de0e07f3212b17fba5281c2015f7 Mon Sep 17 00:00:00 2001 From: Martijn Swaagman Date: Fri, 6 Mar 2020 00:19:43 +0100 Subject: [PATCH 1/2] fix: reject on non-zero exit codes --- packages/bindings/lib/linux-list.js | 1 + packages/bindings/lib/linux-list.test.js | 14 ++++++++++++++ packages/bindings/lib/mocks/linux-list.js | 7 ++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/bindings/lib/linux-list.js b/packages/bindings/lib/linux-list.js index 6985eed9a..1b0329186 100644 --- a/packages/bindings/lib/linux-list.js +++ b/packages/bindings/lib/linux-list.js @@ -42,6 +42,7 @@ function listLinux() { const ports = [] const ude = childProcess.spawn('udevadm', ['info', '-e']) const lines = ude.stdout.pipe(new Readline()) + ude.on('close', code => code && reject(new Error(`List exited with code: ${code}`))) ude.on('error', reject) lines.on('error', reject) diff --git a/packages/bindings/lib/linux-list.test.js b/packages/bindings/lib/linux-list.test.js index 6de521407..5d5bc9fd9 100644 --- a/packages/bindings/lib/linux-list.test.js +++ b/packages/bindings/lib/linux-list.test.js @@ -113,4 +113,18 @@ describe('listLinux', () => { assert.containSubset(ports, portOutput) }) }) + + it('rejects on non-zero exit codes', () => { + const list = listLinux() + listLinux.emit('close', 1) + + list.then( + () => { + assert.fail('should not resolve for non-zero exit codes') + }, + error => { + assert(error, new Error('List exited with code: 1')) + } + ) + }) }) diff --git a/packages/bindings/lib/mocks/linux-list.js b/packages/bindings/lib/mocks/linux-list.js index 537fce763..0ac81f010 100644 --- a/packages/bindings/lib/mocks/linux-list.js +++ b/packages/bindings/lib/mocks/linux-list.js @@ -4,13 +4,14 @@ const EventEmitter = require('events') const proxyquire = require('proxyquire') const Readable = require('stream').Readable let mockPorts +let event proxyquire.noPreserveCache() const listLinux = proxyquire('../linux-list', { child_process: { spawn() { - const event = new EventEmitter() const stream = new Readable() + event = new EventEmitter() event.stdout = stream stream.push(mockPorts) stream.push(null) @@ -24,6 +25,10 @@ listLinux.setPorts = ports => { mockPorts = ports } +listLinux.emit = function() { + event.emit.apply(event, arguments) +} + listLinux.reset = () => { mockPorts = {} } From 0fe409fd2495db89890aa171c8f513c55c8bf386 Mon Sep 17 00:00:00 2001 From: Martijn Swaagman Date: Sat, 7 Mar 2020 11:15:16 +0100 Subject: [PATCH 2/2] fix: use more descriptive error message --- packages/bindings/lib/linux-list.js | 2 +- packages/bindings/lib/linux-list.test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bindings/lib/linux-list.js b/packages/bindings/lib/linux-list.js index 1b0329186..63cb95a89 100644 --- a/packages/bindings/lib/linux-list.js +++ b/packages/bindings/lib/linux-list.js @@ -42,7 +42,7 @@ function listLinux() { const ports = [] const ude = childProcess.spawn('udevadm', ['info', '-e']) const lines = ude.stdout.pipe(new Readline()) - ude.on('close', code => code && reject(new Error(`List exited with code: ${code}`))) + ude.on('close', code => code && reject(new Error(`Error listing ports udevadm exited with error code: ${code}`))) ude.on('error', reject) lines.on('error', reject) diff --git a/packages/bindings/lib/linux-list.test.js b/packages/bindings/lib/linux-list.test.js index 5d5bc9fd9..ec58f85b4 100644 --- a/packages/bindings/lib/linux-list.test.js +++ b/packages/bindings/lib/linux-list.test.js @@ -123,7 +123,7 @@ describe('listLinux', () => { assert.fail('should not resolve for non-zero exit codes') }, error => { - assert(error, new Error('List exited with code: 1')) + assert(error, new Error('Error listing ports udevadm exited with error code: 1')) } ) })