From 71784b1d646c5960b9213bee960e56e12f7b2ea8 Mon Sep 17 00:00:00 2001 From: John Knox Date: Tue, 23 Jul 2019 02:21:55 -0700 Subject: [PATCH] Headless tests - Include flipper logs in test output Summary: Useful for debugging test failures. Reviewed By: bnelo12 Differential Revision: D16419182 fbshipit-source-id: 651eaded54aa001765aadcf966a2ce93e89f2854 --- .../__tests__/headlessIntegrationTests.js | 80 ++++++++++--------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/headless-tests/__tests__/headlessIntegrationTests.js b/headless-tests/__tests__/headlessIntegrationTests.js index f182d9806..690ba6648 100644 --- a/headless-tests/__tests__/headlessIntegrationTests.js +++ b/headless-tests/__tests__/headlessIntegrationTests.js @@ -48,42 +48,48 @@ const basicArgs = [ params.insecurePort, ]; -const runHeadless = memoize((args: Array) => { - return new Promise((resolve, reject) => { - const stdoutChunks = []; - const stderrChunks = []; - console.info(`Running ${params.bin} ${args.join(' ')}`); - const process = spawn(params.bin, args, {}); - process.stdout.setEncoding('utf8'); - process.stdout.on('data', chunk => { - stdoutChunks.push(chunk); - }); - process.stderr.on('data', chunk => { - stderrChunks.push(chunk); - }); - process.stdout.on('end', chunk => { - const stdout = stdoutChunks.join(''); - try { - resolve(JSON.parse(stdout)); - } catch (e) { - console.warn(stderrChunks.join('')); - reject( - new Error( - `Failed to parse headless output as JSON (${e.message}): ${stdout}`, - ), - ); - } - }); +const runHeadless = memoize( + (args: Array): Promise<{output: Object, stderr: string}> => { + return new Promise((resolve, reject) => { + const stdoutChunks = []; + const stderrChunks = []; + console.info(`Running ${params.bin} ${args.join(' ')}`); + const process = spawn(params.bin, args, {}); + process.stdout.setEncoding('utf8'); + process.stdout.on('data', chunk => { + stdoutChunks.push(chunk); + }); + process.stderr.on('data', chunk => { + stderrChunks.push(chunk); + }); + process.stdout.on('end', chunk => { + const stdout = stdoutChunks.join(''); + const stderr = stderrChunks.join(''); + try { + console.log(stderr); + resolve({output: JSON.parse(stdout), stderr: stderr}); + } catch (e) { + console.warn(stderr); + reject( + new Error( + `Failed to parse headless output as JSON (${ + e.message + }): ${stdout}`, + ), + ); + } + }); - setTimeout(() => { - process.kill('SIGINT'); - }, 20000); - }); -}); + setTimeout(() => { + process.kill('SIGINT'); + }, 20000); + }); + }, +); function getPluginState(app: string, plugin: string): Promise { return runHeadless(basicArgs).then(result => { - const pluginStates = result.store.pluginStates; + const pluginStates = result.output.store.pluginStates; for (const pluginId of Object.keys(pluginStates)) { const matches = /([^#]+)#([^#]+)#([^#]+)#([^#]+)#([^#]+)/.exec(pluginId); if ( @@ -104,7 +110,7 @@ test( 'Flipper app appears in exported clients', () => { return runHeadless(basicArgs).then(result => { - expect(result.clients.map(c => c.query.app)).toContain('Flipper'); + expect(result.output.clients.map(c => c.query.app)).toContain('Flipper'); }); }, TEST_TIMEOUT_MS, @@ -114,7 +120,7 @@ test( 'Output includes fileVersion', () => { return runHeadless(basicArgs).then(result => { - expect(result.fileVersion).toMatch(/[0-9]+\.[0-9]+\.[0-9]+/); + expect(result.output.fileVersion).toMatch(/[0-9]+\.[0-9]+\.[0-9]+/); }); }, TEST_TIMEOUT_MS, @@ -124,7 +130,7 @@ test( 'Output includes device', () => { return runHeadless(basicArgs).then(result => { - expect(result.device).toBeTruthy(); + expect(result.output.device).toBeTruthy(); }); }, TEST_TIMEOUT_MS, @@ -134,7 +140,7 @@ test( 'Output includes flipperReleaseRevision', () => { return runHeadless(basicArgs).then(result => { - expect(result.flipperReleaseRevision).toBeTruthy(); + expect(result.output.flipperReleaseRevision).toBeTruthy(); }); }, TEST_TIMEOUT_MS, @@ -144,7 +150,7 @@ test( 'Output includes store', () => { return runHeadless(basicArgs).then(result => { - expect(result.store).toBeTruthy(); + expect(result.output.store).toBeTruthy(); }); }, TEST_TIMEOUT_MS,