From c08e62dd1d35303981ed86dda7760be74c414fe7 Mon Sep 17 00:00:00 2001 From: Tyler Ang-Wanek Date: Fri, 27 Sep 2019 13:43:33 -0700 Subject: [PATCH] Clean up from review and add nock for test validation --- .../mock-node-v8.8.0-linux-x86.tar.gz | Bin 0 -> 211 bytes .../__fixtures__/mock-node-v8.8.0-win-x86.7z | Bin 0 -> 211 bytes .../mock-node-v8.9.1-linux-x64.tar.gz | Bin 0 -> 212 bytes .../__fixtures__/mock-node-v8.9.1-win-x64.7z | Bin 0 -> 213 bytes __tests__/installer.test.ts | 45 ++++++++- lib/setup-node.js | 2 +- package-lock.json | 90 ++++++++++++++++++ package.json | 5 +- src/setup-node.ts | 3 +- 9 files changed, 137 insertions(+), 8 deletions(-) create mode 100644 __tests__/__fixtures__/mock-node-v8.8.0-linux-x86.tar.gz create mode 100644 __tests__/__fixtures__/mock-node-v8.8.0-win-x86.7z create mode 100644 __tests__/__fixtures__/mock-node-v8.9.1-linux-x64.tar.gz create mode 100644 __tests__/__fixtures__/mock-node-v8.9.1-win-x64.7z diff --git a/__tests__/__fixtures__/mock-node-v8.8.0-linux-x86.tar.gz b/__tests__/__fixtures__/mock-node-v8.8.0-linux-x86.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..fd88664a8a7f04170d46129113f8fc7b88d2b826 GIT binary patch literal 211 zcmV;^04)C>iwFQcV~$+_1MSk?YQrEHfMJh!72ZHv6a6%|lXk)a!9r`=^zN4o%68D~ z2V`UPeGokO1cldhc#hS%-LxB14SgD?YHIyf6=h~2$gPBf(=K9Y)c>ny;pY*)aA?q&bIK};#yWJ3<{`zGA00000000000002^ Nj#t=hVFmyw002KFZCC&R literal 0 HcmV?d00001 diff --git a/__tests__/__fixtures__/mock-node-v8.8.0-win-x86.7z b/__tests__/__fixtures__/mock-node-v8.8.0-win-x86.7z new file mode 100644 index 0000000000000000000000000000000000000000..9a16b0912b48cd5ce688931498b33d2ee3f50966 GIT binary patch literal 211 zcmXr7+Ou9=hJj_W6i>$_1_)4u(vO~=jALYwEXl|$Rsf>B{1S!4JcZPX)a25V#H5^5 zE}*(bWA=6Y=U*F$@V|aFXTO>4zl!DGG#K`J>`2s!V4r=={_ozqdRJWg{^zB$x;WSr zG96HEx4P7M?S{^b)72HMCIP{pt)9xxzsUY~kL&lcEd|QjTMP@d^wz{1PYddH5 zTgU8(r%f^MiuTTMFzD|G+9=K@$H-a2z|PIcz^Kg3$jBPYAi%)D)3A+;F}H&|hk*eA D;;BkK literal 0 HcmV?d00001 diff --git a/__tests__/__fixtures__/mock-node-v8.9.1-linux-x64.tar.gz b/__tests__/__fixtures__/mock-node-v8.9.1-linux-x64.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..3a482445663d36b0561995378b3ee110ab278c4a GIT binary patch literal 212 zcmV;_04x6=iwFQQVvbz^1MSk$O2aS|fZ<&G6nTNpq{&J2aXJmGP%_w3SKr=NknLi1 z3PBP7k3cR?Ab~%5|D2kaht1>0HbbAsshNVmS5=u=jI!)Din-iBDC@*KFA~~T8S727 zN=w~mTsIy|chFju*C8EF>*sFG|EPSm|F+K+|G+o;`{>{M2k+?r6W04LlR9@SfkW`? z{at(RFK+HHVvW+K&h?-B=l#pBKk9kqebHUkX-ZFH>9#|<`|Xzj00000000000002s OE8YM%&4C>NC;$M&dTOBn literal 0 HcmV?d00001 diff --git a/__tests__/__fixtures__/mock-node-v8.9.1-win-x64.7z b/__tests__/__fixtures__/mock-node-v8.9.1-win-x64.7z new file mode 100644 index 0000000000000000000000000000000000000000..dda8188f32ff927873fd7f8d9150c8649e0c157d GIT binary patch literal 213 zcmXr7+Ou9=hJhtMV&(TK3=p6QrQ3e*TEfU6S(1@itN=uL`6UX8c?zi&smY}!iAg!B zTtIb=#_a3(&%ZVh;eY*V&VDo7e-+EWX)x^d*pa9c!9M$#{olQJ^{%+~{m)Bhb#bsM zWICYSZgr{i+LiciDskVXINSx-q%#`$?EFx=+W+^@_i4JdYW%ZKyM{T}GS3v{V0n9I zBd2@)dfwgAAEj;cp1)dh@-@&-aW*+d&N2peZbk-1WoAZ3)>sAs1_qvnZCs4eMsK$= GFaQAO1xt$n literal 0 HcmV?d00001 diff --git a/__tests__/installer.test.ts b/__tests__/installer.test.ts index 43545e21..edbd9af0 100644 --- a/__tests__/installer.test.ts +++ b/__tests__/installer.test.ts @@ -1,5 +1,6 @@ import io = require('@actions/io'); import fs = require('fs'); +import nock = require('nock'); import os = require('os'); import path = require('path'); @@ -36,6 +37,10 @@ describe('installer tests', () => { await io.rmRF(tempDir); }, 100000); + beforeEach(() => { + nock.cleanAll(); + }); + it('Acquires version of node if no matching version is installed', async () => { await installer.getNode('10.16.0'); const nodeDir = path.join(toolDir, 'node', '10.16.0', os.arch()); @@ -123,9 +128,25 @@ describe('installer tests', () => { it('Acquires specified x86 version of node if no matching version is installed', async () => { const arch = 'x86'; - await installer.getNode('8.8.1', arch); - const nodeDir = path.join(toolDir, 'node', '8.8.1', arch); + const version = '8.8.0'; + const fileExtension = IS_WINDOWS ? '7z' : 'tar.gz'; + const platform = { + linux: 'linux', + darwin: 'darwin', + win32: 'win' + }[process.platform]; + const fileName = `node-v${version}-${platform}-${arch}.${fileExtension}`; + const pathOnNodeJs = `/dist/v${version}/${fileName}`; + const scope = nock('https://nodejs.org') + .get(pathOnNodeJs) + .replyWithFile( + 200, + path.join(__dirname, '__fixtures__', `mock-${fileName}`) + ); + await installer.getNode(version, arch); + const nodeDir = path.join(toolDir, 'node', version, arch); + expect(scope.isDone()).toBe(true); expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); if (IS_WINDOWS) { expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); @@ -136,9 +157,25 @@ describe('installer tests', () => { it('Acquires specified x64 version of node if no matching version is installed', async () => { const arch = 'x64'; - await installer.getNode('8.8.1', arch); - const nodeDir = path.join(toolDir, 'node', '8.8.1', arch); + const version = '8.9.1'; + const fileExtension = IS_WINDOWS ? '7z' : 'tar.gz'; + const platform = { + linux: 'linux', + darwin: 'darwin', + win32: 'win' + }[process.platform]; + const fileName = `node-v${version}-${platform}-${arch}.${fileExtension}`; + const pathOnNodeJs = `/dist/v${version}/${fileName}`; + const scope = nock('https://nodejs.org') + .get(pathOnNodeJs) + .replyWithFile( + 200, + path.join(__dirname, '__fixtures__', `mock-${fileName}`) + ); + await installer.getNode(version, arch); + const nodeDir = path.join(toolDir, 'node', version, arch); + expect(scope.isDone()).toBe(true); expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); if (IS_WINDOWS) { expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); diff --git a/lib/setup-node.js b/lib/setup-node.js index a3b07707..1607c660 100644 --- a/lib/setup-node.js +++ b/lib/setup-node.js @@ -31,8 +31,8 @@ function run() { if (!version) { version = core.getInput('node-version'); } - const osArch = core.getInput('node-arch') || os.arch(); if (version) { + const osArch = core.getInput('node-arch') || os.arch(); // TODO: installer doesn't support proxy yield installer.getNode(version, osArch); } diff --git a/package-lock.json b/package-lock.json index 6c153539..bda8d2e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -821,6 +821,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -1149,6 +1155,20 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1160,6 +1180,12 @@ "supports-color": "^5.3.0" } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1403,6 +1429,15 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -2423,6 +2458,12 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "get-stdin": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", @@ -3895,6 +3936,37 @@ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "nock": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/nock/-/nock-11.3.5.tgz", + "integrity": "sha512-6WGeZcWc3RExkBcMSYSrUm/5YukDo52m/jhwniQyrnuiCnKRljBwwje9vTwJyEi4J6m2bq0Aj6C1vzuM6iuaeg==", + "dev": true, + "requires": { + "chai": "^4.1.2", + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.13", + "mkdirp": "^0.5.0", + "propagate": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "node-fetch": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", @@ -4236,6 +4308,12 @@ "pify": "^3.0.0" } }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -4363,6 +4441,12 @@ "sisteransi": "^1.0.0" } }, + "propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true + }, "psl": { "version": "1.1.33", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", @@ -5247,6 +5331,12 @@ "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-fest": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", diff --git a/package.json b/package.json index 19b64150..ead9c73f 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ "@actions/github": "^1.0.0", "@actions/io": "^1.0.0", "@actions/tool-cache": "^1.0.0", - "typed-rest-client": "^1.5.0", - "semver": "^6.1.1" + "semver": "^6.1.1", + "typed-rest-client": "^1.5.0" }, "devDependencies": { "@types/jest": "^24.0.13", @@ -36,6 +36,7 @@ "husky": "^2.3.0", "jest": "^24.8.0", "jest-circus": "^24.7.1", + "nock": "^11.3.5", "prettier": "^1.17.1", "ts-jest": "^24.0.2", "typescript": "^3.5.1" diff --git a/src/setup-node.ts b/src/setup-node.ts index 2c2e12ea..ceee1551 100644 --- a/src/setup-node.ts +++ b/src/setup-node.ts @@ -14,8 +14,9 @@ async function run() { if (!version) { version = core.getInput('node-version'); } - const osArch = core.getInput('node-arch') || os.arch(); + if (version) { + const osArch = core.getInput('node-arch') || os.arch(); // TODO: installer doesn't support proxy await installer.getNode(version, osArch); }