import { HttpClient } from '@actions/http-client'; import { JavaInstallerOptions } from '../../src/distributions/base-models'; import { CorrettoDistribution } from '../../src/distributions/corretto/installer'; import * as util from '../../src/util'; import os from 'os'; import { isGeneratorFunction } from 'util/types'; const manifestData = require('../data/corretto.json') as []; describe('getAvailableVersions', () => { let spyHttpClient: jest.SpyInstance; let spyGetDownloadArchiveExtension: jest.SpyInstance; beforeEach(() => { spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson'); spyHttpClient.mockReturnValue({ statusCode: 200, headers: {}, result: manifestData }); spyGetDownloadArchiveExtension = jest.spyOn(util, 'getDownloadArchiveExtension'); }); afterEach(() => { jest.resetAllMocks(); jest.clearAllMocks(); jest.restoreAllMocks(); }); describe('getAvailableVersions', () => { it('load available versions', async () => { const distribution = new CorrettoDistribution({ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false }); mockPlatform(distribution, 'linux'); const availableVersions = await distribution['getAvailableVersions'](); expect(availableVersions).not.toBeNull(); expect(availableVersions.length).toBe(6); }); it.each([ [{ version: '16', architecture: 'x64', packageType: 'jdk', checkLatest: false }, 'macos', 6], [{ version: '16', architecture: 'x86', packageType: 'jdk', checkLatest: false }, 'macos', 0], [{ version: '16', architecture: 'x64', packageType: 'jre', checkLatest: false }, 'macos', 0], [{ version: '16', architecture: 'x64', packageType: 'jdk', checkLatest: false }, 'linux', 6], [ { version: '18', architecture: 'x64', packageType: 'jdk', checkLatest: false }, 'windows', 6 ], [{ version: '18', architecture: 'x64', packageType: 'jre', checkLatest: false }, 'windows', 1] ])( 'fetch expected amount of available versions for %s', async ( installerOptions: JavaInstallerOptions, platform: string, expectedAmountOfAvailableVersions ) => { const distribution = new CorrettoDistribution(installerOptions); mockPlatform(distribution, platform); const availableVersions = await distribution['getAvailableVersions'](); expect(availableVersions).not.toBeNull(); expect(availableVersions.length).toBe(expectedAmountOfAvailableVersions); } ); }); describe('findPackageForDownload', () => { it.each([ [ 'macos', 'https://corretto.aws/downloads/resources/18.0.0.37.1/amazon-corretto-18.0.0.37.1-macosx-x64.tar.gz' ], [ 'windows', 'https://corretto.aws/downloads/resources/18.0.0.37.1/amazon-corretto-18.0.0.37.1-windows-x64-jdk.zip' ], [ 'linux', 'https://corretto.aws/downloads/resources/18.0.0.37.1/amazon-corretto-18.0.0.37.1-linux-x64.tar.gz' ] ])('for os: %s', async (platform: string, expectedLink: string) => { const version = '18'; const distribution = new CorrettoDistribution({ version, architecture: 'x64', packageType: 'jdk', checkLatest: false }); mockPlatform(distribution, platform); const availableVersion = await distribution['findPackageForDownload'](version); expect(availableVersion).not.toBeNull(); expect(availableVersion.url).toBe(expectedLink); }); it('with unstable version expect to throw not supported error', async () => { const version = '18.0.1-ea'; const distribution = new CorrettoDistribution({ version, architecture: 'x64', packageType: 'jdk', checkLatest: false }); mockPlatform(distribution, 'linux'); await expect(distribution['findPackageForDownload'](version)).rejects.toThrowError( 'Early access versions are not supported' ); }); it('with non major version expect to throw not supported error', async () => { const version = '18.0.1'; const distribution = new CorrettoDistribution({ version, architecture: 'x64', packageType: 'jdk', checkLatest: false }); mockPlatform(distribution, 'linux'); await expect(distribution['findPackageForDownload'](version)).rejects.toThrowError( 'Only major versions are supported' ); }); it('with unfound version throw could not find error', async () => { const version = '4'; const distribution = new CorrettoDistribution({ version, architecture: 'x64', packageType: 'jdk', checkLatest: false }); mockPlatform(distribution, 'linux'); await expect(distribution['findPackageForDownload'](version)).rejects.toThrowError( "Could not find satisfied version for SemVer '4'" ); }); it.each([ ['arm64', 'aarch64'], ['amd64', 'x64'] ])( 'defaults to os.arch(): %s mapped to distro arch: %s', async (osArch: string, distroArch: string) => { jest.spyOn(os, 'arch').mockReturnValue(osArch); const version = '17'; const installerOptions: JavaInstallerOptions = { version, architecture: '', // to get default value packageType: 'jdk', checkLatest: false }; const distribution = new CorrettoDistribution(installerOptions); mockPlatform(distribution, 'macos'); const expectedLink = `https://corretto.aws/downloads/resources/17.0.2.8.1/amazon-corretto-17.0.2.8.1-macosx-${distroArch}.tar.gz`; const availableVersion = await distribution['findPackageForDownload'](version); expect(availableVersion).not.toBeNull(); expect(availableVersion.url).toBe(expectedLink); } ); }); const mockPlatform = (distribution: CorrettoDistribution, platform: string) => { distribution['getPlatformOption'] = () => platform; const mockedExtension = platform === 'windows' ? 'zip' : 'tar.gz'; spyGetDownloadArchiveExtension.mockReturnValue(mockedExtension); }; });