From deaf43692dc17489000e882d62134ed1417e9f1e Mon Sep 17 00:00:00 2001 From: Sergey Dolin Date: Fri, 18 Aug 2023 09:01:34 +0200 Subject: [PATCH] Add unit tests --- __tests__/cache-utils.test.ts | 74 +++++++++++++++++++++++++++++++++++ dist/cache-save/index.js | 46 ++++++---------------- dist/setup/index.js | 46 ++++++---------------- src/cache-save.ts | 7 +++- src/cache-utils.ts | 7 ++++ src/main.ts | 3 +- src/utils.ts | 9 +---- 7 files changed, 114 insertions(+), 78 deletions(-) diff --git a/__tests__/cache-utils.test.ts b/__tests__/cache-utils.test.ts index 695c561..58e7ac6 100644 --- a/__tests__/cache-utils.test.ts +++ b/__tests__/cache-utils.test.ts @@ -3,6 +3,7 @@ import * as cache from '@actions/cache'; import * as core from '@actions/core'; import * as cacheUtils from '../src/cache-utils'; import {PackageManagerInfo} from '../src/package-managers'; +import * as utils from '../src/utils'; describe('getCommandOutput', () => { //Arrange @@ -209,3 +210,76 @@ describe('isCacheFeatureAvailable', () => { expect(warningSpy).toHaveBeenCalledWith(warningMessage); }); }); + +describe('Detect environment', () => { + it('"RUNNER_ENVIRONMENT" = "github-hosted" should be hosted environment', () => { + delete process.env['AGENT_ISSELFHOSTED']; + process.env['RUNNER_ENVIRONMENT'] = 'github-hosted'; + expect(utils.isSelfHosted()).toBeFalsy(); + }); + + it('"RUNNER_ENVIRONMENT" = "hosted" should be self-hosted environment', () => { + delete process.env['AGENT_ISSELFHOSTED']; + process.env['RUNNER_ENVIRONMENT'] = 'hosted'; + expect(utils.isSelfHosted()).toBeTruthy(); + }); + + it('"AGENT_ISSELFHOSTED" = "0" should be hosted environment', () => { + process.env['AGENT_ISSELFHOSTED'] = '0'; + delete process.env['RUNNER_ENVIRONMENT']; + expect(utils.isSelfHosted()).toBeFalsy(); + }); + + it('"AGENT_ISSELFHOSTED" = "0" should be self-hosted environment', () => { + process.env['AGENT_ISSELFHOSTED'] = '1'; + delete process.env['RUNNER_ENVIRONMENT']; + expect(utils.isSelfHosted()).toBeTruthy(); + }); + + it('unset "RUNNER_ENVIRONMENT" and "AGENT_ISSELFHOSTED" should be self-hosted environment', () => { + delete process.env['AGENT_ISSELFHOSTED']; + delete process.env['RUNNER_ENVIRONMENT']; + expect(utils.isSelfHosted()).toBeTruthy(); + }); +}); +describe('Default cache values', () => { + const inputSpy = jest.spyOn(utils, 'isSelfHosted'); + + beforeEach(() => { + delete process.env['INPUT_CACHE']; + }); + + it('default cache should be false in self-hosted environment', () => { + inputSpy.mockReturnValueOnce(true); + expect(cacheUtils.getCacheInput()).toBeFalsy(); + }); + + it('cache should be false if set to false in self-hosted environment', () => { + inputSpy.mockReturnValueOnce(true); + process.env['INPUT_CACHE'] = 'false'; + expect(cacheUtils.getCacheInput()).toBeFalsy(); + }); + + it('cache should be tue if set to true in self-hosted environment', () => { + inputSpy.mockReturnValueOnce(true); + process.env['INPUT_CACHE'] = 'true'; + expect(cacheUtils.getCacheInput()).toBeTruthy(); + }); + + it('default cache should be handled by action.yml default in hosted environment', () => { + inputSpy.mockReturnValueOnce(false); + expect(() => cacheUtils.getCacheInput()).toThrow(); + }); + + it('cache should be false if set to false in hosted environment', () => { + inputSpy.mockReturnValueOnce(false); + process.env['INPUT_CACHE'] = 'true'; + expect(cacheUtils.getCacheInput()).toBeTruthy(); + }); + + it('cache should be tue if set to true in hosted environment', () => { + inputSpy.mockReturnValueOnce(false); + process.env['INPUT_CACHE'] = 'false'; + expect(cacheUtils.getCacheInput()).toBeFalsy(); + }); +}); diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js index e286017..78584ea 100644 --- a/dist/cache-save/index.js +++ b/dist/cache-save/index.js @@ -58495,7 +58495,6 @@ const cache = __importStar(__nccwpck_require__(7799)); const fs_1 = __importDefault(__nccwpck_require__(7147)); const constants_1 = __nccwpck_require__(9042); const cache_utils_1 = __nccwpck_require__(1678); -const utils_1 = __nccwpck_require__(1314); // Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in // @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to // throw an uncaught exception. Instead of failing this action, just warn. @@ -58522,7 +58521,7 @@ function run() { } exports.run = run; const cachePackages = () => __awaiter(void 0, void 0, void 0, function* () { - if (!utils_1.getCacheInput()) + if (!cache_utils_1.getCacheInput()) return; const packageManager = 'default'; const state = core.getState(constants_1.State.CacheMatchedKey); @@ -58594,11 +58593,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0; +exports.getCacheInput = exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0; const cache = __importStar(__nccwpck_require__(7799)); const core = __importStar(__nccwpck_require__(2186)); const exec = __importStar(__nccwpck_require__(1514)); const package_managers_1 = __nccwpck_require__(6663); +const utils_1 = __nccwpck_require__(1314); const getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () { let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, { ignoreReturnCode: true }); if (exitCode) { @@ -58653,6 +58653,13 @@ function isCacheFeatureAvailable() { return false; } exports.isCacheFeatureAvailable = isCacheFeatureAvailable; +const getCacheInput = () => { + // for self-hosted environment turn off cache by default + if (utils_1.isSelfHosted() && core.getInput('cache') === '') + return false; + return core.getBooleanInput('cache'); +}; +exports.getCacheInput = getCacheInput; /***/ }), @@ -58695,47 +58702,20 @@ exports.supportedPackageManagers = { /***/ }), /***/ 1314: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { +/***/ ((__unused_webpack_module, exports) => { "use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getCacheInput = exports.isSelfHosted = exports.StableReleaseAlias = void 0; -const core = __importStar(__nccwpck_require__(2186)); +exports.isSelfHosted = exports.StableReleaseAlias = void 0; var StableReleaseAlias; (function (StableReleaseAlias) { StableReleaseAlias["Stable"] = "stable"; StableReleaseAlias["OldStable"] = "oldstable"; })(StableReleaseAlias = exports.StableReleaseAlias || (exports.StableReleaseAlias = {})); const isSelfHosted = () => process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' && - process.env['AGENT_ISSELFHOSTED'] === '1'; + process.env['AGENT_ISSELFHOSTED'] !== '0'; exports.isSelfHosted = isSelfHosted; -const getCacheInput = () => { - // for self-hosted environment turn off cache by default - if (exports.isSelfHosted() && core.getInput('cache') === '') - return false; - return core.getBooleanInput('cache'); -}; -exports.getCacheInput = getCacheInput; /***/ }), diff --git a/dist/setup/index.js b/dist/setup/index.js index 9b5533d..3e993d2 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -61265,11 +61265,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0; +exports.getCacheInput = exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0; const cache = __importStar(__nccwpck_require__(7799)); const core = __importStar(__nccwpck_require__(2186)); const exec = __importStar(__nccwpck_require__(1514)); const package_managers_1 = __nccwpck_require__(6663); +const utils_1 = __nccwpck_require__(1314); const getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () { let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, { ignoreReturnCode: true }); if (exitCode) { @@ -61324,6 +61325,13 @@ function isCacheFeatureAvailable() { return false; } exports.isCacheFeatureAvailable = isCacheFeatureAvailable; +const getCacheInput = () => { + // for self-hosted environment turn off cache by default + if (utils_1.isSelfHosted() && core.getInput('cache') === '') + return false; + return core.getBooleanInput('cache'); +}; +exports.getCacheInput = getCacheInput; /***/ }), @@ -61776,7 +61784,6 @@ const cache_utils_1 = __nccwpck_require__(1678); const child_process_1 = __importDefault(__nccwpck_require__(2081)); const fs_1 = __importDefault(__nccwpck_require__(7147)); const os_1 = __importDefault(__nccwpck_require__(2037)); -const utils_1 = __nccwpck_require__(1314); function run() { return __awaiter(this, void 0, void 0, function* () { try { @@ -61785,7 +61792,7 @@ function run() { // If not supplied then problem matchers will still be setup. Useful for self-hosted. // const versionSpec = resolveVersionInput(); - const cache = utils_1.getCacheInput(); + const cache = cache_utils_1.getCacheInput(); core.info(`Setup go version spec ${versionSpec}`); let arch = core.getInput('architecture'); if (!arch) { @@ -61966,47 +61973,20 @@ exports.getArch = getArch; /***/ }), /***/ 1314: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { +/***/ ((__unused_webpack_module, exports) => { "use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getCacheInput = exports.isSelfHosted = exports.StableReleaseAlias = void 0; -const core = __importStar(__nccwpck_require__(2186)); +exports.isSelfHosted = exports.StableReleaseAlias = void 0; var StableReleaseAlias; (function (StableReleaseAlias) { StableReleaseAlias["Stable"] = "stable"; StableReleaseAlias["OldStable"] = "oldstable"; })(StableReleaseAlias = exports.StableReleaseAlias || (exports.StableReleaseAlias = {})); const isSelfHosted = () => process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' && - process.env['AGENT_ISSELFHOSTED'] === '1'; + process.env['AGENT_ISSELFHOSTED'] !== '0'; exports.isSelfHosted = isSelfHosted; -const getCacheInput = () => { - // for self-hosted environment turn off cache by default - if (exports.isSelfHosted() && core.getInput('cache') === '') - return false; - return core.getBooleanInput('cache'); -}; -exports.getCacheInput = getCacheInput; /***/ }), diff --git a/src/cache-save.ts b/src/cache-save.ts index 76ea87a..a9d9139 100644 --- a/src/cache-save.ts +++ b/src/cache-save.ts @@ -2,8 +2,11 @@ import * as core from '@actions/core'; import * as cache from '@actions/cache'; import fs from 'fs'; import {State} from './constants'; -import {getCacheDirectoryPath, getPackageManagerInfo} from './cache-utils'; -import {getCacheInput} from './utils'; +import { + getCacheDirectoryPath, + getPackageManagerInfo, + getCacheInput +} from './cache-utils'; // Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in // @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to diff --git a/src/cache-utils.ts b/src/cache-utils.ts index 545c97a..460e1f5 100644 --- a/src/cache-utils.ts +++ b/src/cache-utils.ts @@ -2,6 +2,7 @@ import * as cache from '@actions/cache'; import * as core from '@actions/core'; import * as exec from '@actions/exec'; import {supportedPackageManagers, PackageManagerInfo} from './package-managers'; +import {isSelfHosted} from './utils'; export const getCommandOutput = async (toolCommand: string) => { let {stdout, stderr, exitCode} = await exec.getExecOutput( @@ -83,3 +84,9 @@ export function isCacheFeatureAvailable(): boolean { ); return false; } +export const getCacheInput = (): boolean => { + // for self-hosted environment turn off cache by default + if (isSelfHosted() && core.getInput('cache') === '') return false; + + return core.getBooleanInput('cache'); +}; diff --git a/src/main.ts b/src/main.ts index d03c8f7..f655d87 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,11 +4,10 @@ import * as installer from './installer'; import * as semver from 'semver'; import path from 'path'; import {restoreCache} from './cache-restore'; -import {isCacheFeatureAvailable} from './cache-utils'; +import {isCacheFeatureAvailable, getCacheInput} from './cache-utils'; import cp from 'child_process'; import fs from 'fs'; import os from 'os'; -import {getCacheInput} from './utils'; export async function run() { try { diff --git a/src/utils.ts b/src/utils.ts index ddd3f74..f8e4597 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -7,11 +7,4 @@ export enum StableReleaseAlias { export const isSelfHosted = (): boolean => process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' && - process.env['AGENT_ISSELFHOSTED'] === '1'; - -export const getCacheInput = (): boolean => { - // for self-hosted environment turn off cache by default - if (isSelfHosted() && core.getInput('cache') === '') return false; - - return core.getBooleanInput('cache'); -}; + process.env['AGENT_ISSELFHOSTED'] !== '0';