From c041f7cce2c4052df3b4135c295379b071592d00 Mon Sep 17 00:00:00 2001 From: Wes Morgan Date: Tue, 20 Sep 2022 10:03:12 -0600 Subject: [PATCH] Add arch default tests to all distros ...and update temurin's to test 2 architectures instead of 1. --- .../distributors/adopt-installer.test.ts | 31 ++++++++++++++ .../distributors/corretto-installer.test.ts | 29 +++++++++++++ .../distributors/liberica-installer.test.ts | 34 +++++++++++++++ .../distributors/microsoft-installer.test.ts | 28 +++++++++++++ .../distributors/temurin-installer.test.ts | 41 +++++++++++-------- __tests__/distributors/zulu-installer.test.ts | 29 +++++++++++++ 6 files changed, 174 insertions(+), 18 deletions(-) diff --git a/__tests__/distributors/adopt-installer.test.ts b/__tests__/distributors/adopt-installer.test.ts index ce862c26..a900f858 100644 --- a/__tests__/distributors/adopt-installer.test.ts +++ b/__tests__/distributors/adopt-installer.test.ts @@ -3,6 +3,8 @@ import { HttpClient } from '@actions/http-client'; import { AdoptDistribution, AdoptImplementation } from '../../src/distributions/adopt/installer'; import { JavaInstallerOptions } from '../../src/distributions/base-models'; +import os from 'os'; + let manifestData = require('../data/adopt.json') as []; describe('getAvailableVersions', () => { @@ -128,6 +130,35 @@ describe('getAvailableVersions', () => { expect(distribution.toolcacheFolderName).toBe(expected); } ); + + it.each([ + ['amd64', 'x64'], + ['arm64', 'aarch64'] + ])( + 'defaults to os.arch(): %s mapped to distro arch: %s', + async (osArch: string, distroArch: string) => { + jest.spyOn(os, 'arch').mockReturnValue(osArch); + + const installerOptions: JavaInstallerOptions = { + version: '17', + architecture: '', // to get default value + packageType: 'jdk', + checkLatest: false + }; + + const expectedParameters = `os=mac&architecture=${distroArch}&image_type=jdk&release_type=ga&jvm_impl=hotspot&page_size=20&page=0`; + + const distribution = new AdoptDistribution(installerOptions, AdoptImplementation.Hotspot); + const baseUrl = 'https://api.adoptopenjdk.net/v3/assets/version/%5B1.0,100.0%5D'; + const expectedUrl = `${baseUrl}?project=jdk&vendor=adoptopenjdk&heap_size=normal&sort_method=DEFAULT&sort_order=DESC&${expectedParameters}`; + distribution['getPlatformOption'] = () => 'mac'; + + await distribution['getAvailableVersions'](); + + expect(spyHttpClient.mock.calls).toHaveLength(1); + expect(spyHttpClient.mock.calls[0][0]).toBe(expectedUrl); + } + ); }); describe('findPackageForDownload', () => { diff --git a/__tests__/distributors/corretto-installer.test.ts b/__tests__/distributors/corretto-installer.test.ts index 3e3322fe..eae259da 100644 --- a/__tests__/distributors/corretto-installer.test.ts +++ b/__tests__/distributors/corretto-installer.test.ts @@ -3,6 +3,8 @@ 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 []; @@ -142,6 +144,33 @@ describe('getAvailableVersions', () => { "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) => { diff --git a/__tests__/distributors/liberica-installer.test.ts b/__tests__/distributors/liberica-installer.test.ts index 1044e7f4..18135f29 100644 --- a/__tests__/distributors/liberica-installer.test.ts +++ b/__tests__/distributors/liberica-installer.test.ts @@ -1,6 +1,7 @@ import { LibericaDistributions } from '../../src/distributions/liberica/installer'; import { ArchitectureOptions, LibericaVersion } from '../../src/distributions/liberica/models'; import { HttpClient } from '@actions/http-client'; +import os from 'os'; const manifestData = require('../data/liberica.json') as LibericaVersion[]; @@ -61,6 +62,39 @@ describe('getAvailableVersions', () => { expect(spyHttpClient.mock.calls[0][0]).toBe(buildUrl); }); + type DistroArch = { + bitness: string; + arch: string; + }; + it.each([ + ['amd64', { bitness: '64', arch: 'x86' }], + ['arm64', { bitness: '64', arch: 'arm' }] + ])( + 'defaults to os.arch(): %s mapped to distro arch: %s', + async (osArch: string, distroArch: DistroArch) => { + jest.spyOn(os, 'arch').mockReturnValue(osArch); + + const distribution = new LibericaDistributions({ + version: '17', + architecture: '', // to get default value + packageType: 'jdk', + checkLatest: false + }); + + const additionalParams = + '&installation-type=archive&fields=downloadUrl%2Cversion%2CfeatureVersion%2CinterimVersion%2C' + + 'updateVersion%2CbuildVersion'; + distribution['getPlatformOption'] = () => 'macos'; + + const buildUrl = `https://api.bell-sw.com/v1/liberica/releases?os=macos&bundle-type=jdk&bitness=${distroArch.bitness}&arch=${distroArch.arch}&build-type=all${additionalParams}`; + + await distribution['getAvailableVersions'](); + + expect(spyHttpClient.mock.calls).toHaveLength(1); + expect(spyHttpClient.mock.calls[0][0]).toBe(buildUrl); + } + ); + it('load available versions', async () => { const distribution = new LibericaDistributions({ version: '11', diff --git a/__tests__/distributors/microsoft-installer.test.ts b/__tests__/distributors/microsoft-installer.test.ts index 9be0f50e..eca3ccfa 100644 --- a/__tests__/distributors/microsoft-installer.test.ts +++ b/__tests__/distributors/microsoft-installer.test.ts @@ -1,4 +1,5 @@ import { MicrosoftDistributions } from '../../src/distributions/microsoft/installer'; +import os from 'os'; describe('findPackageForDownload', () => { let distribution: MicrosoftDistributions; @@ -61,6 +62,33 @@ describe('findPackageForDownload', () => { expect(result.url).toBe(url); }); + it.each([ + ['amd64', 'x64'], + ['arm64', 'aarch64'] + ])( + '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 distro = new MicrosoftDistributions({ + version, + architecture: '', // to get default value + packageType: 'jdk', + checkLatest: false + }); + + distribution['getPlatformOption'] = () => { + return { archive: 'tar.gz', os: 'macos' }; + }; + + const result = await distro['findPackageForDownload'](version); + const expectedUrl = `https://aka.ms/download-jdk/microsoft-jdk-17.0.3-macos-${distroArch}.tar.gz`; + + expect(result.url).toBe(expectedUrl); + } + ); + it('should throw an error', async () => { await expect(distribution['findPackageForDownload']('8')).rejects.toThrow( /Could not find satisfied version for SemVer */ diff --git a/__tests__/distributors/temurin-installer.test.ts b/__tests__/distributors/temurin-installer.test.ts index 58169650..554668ba 100644 --- a/__tests__/distributors/temurin-installer.test.ts +++ b/__tests__/distributors/temurin-installer.test.ts @@ -110,29 +110,34 @@ describe('getAvailableVersions', () => { } ); - it('defaults to os.arch() mapped to temurin arch', async () => { - jest.spyOn(os, 'arch').mockReturnValue('amd64'); + it.each([ + ['amd64', 'x64'], + ['arm64', 'aarch64'] + ])( + 'defaults to os.arch(): %s mapped to distro arch: %s', + async (osArch: string, distroArch: string) => { + jest.spyOn(os, 'arch').mockReturnValue(distroArch); - const installerOptions: JavaInstallerOptions = { - version: '17', - architecture: '', - packageType: 'jdk', - checkLatest: false - }; + const installerOptions: JavaInstallerOptions = { + version: '17', + architecture: '', + packageType: 'jdk', + checkLatest: false + }; - const expectedParameters = - 'os=mac&architecture=x64&image_type=jdk&release_type=ga&jvm_impl=hotspot&page_size=20&page=0'; + const expectedParameters = `os=mac&architecture=${distroArch}&image_type=jdk&release_type=ga&jvm_impl=hotspot&page_size=20&page=0`; - const distribution = new TemurinDistribution(installerOptions, TemurinImplementation.Hotspot); - const baseUrl = 'https://api.adoptium.net/v3/assets/version/%5B1.0,100.0%5D'; - const expectedUrl = `${baseUrl}?project=jdk&vendor=adoptium&heap_size=normal&sort_method=DEFAULT&sort_order=DESC&${expectedParameters}`; - distribution['getPlatformOption'] = () => 'mac'; + const distribution = new TemurinDistribution(installerOptions, TemurinImplementation.Hotspot); + const baseUrl = 'https://api.adoptium.net/v3/assets/version/%5B1.0,100.0%5D'; + const expectedUrl = `${baseUrl}?project=jdk&vendor=adoptium&heap_size=normal&sort_method=DEFAULT&sort_order=DESC&${expectedParameters}`; + distribution['getPlatformOption'] = () => 'mac'; - await distribution['getAvailableVersions'](); + await distribution['getAvailableVersions'](); - expect(spyHttpClient.mock.calls).toHaveLength(1); - expect(spyHttpClient.mock.calls[0][0]).toBe(expectedUrl); - }); + expect(spyHttpClient.mock.calls).toHaveLength(1); + expect(spyHttpClient.mock.calls[0][0]).toBe(expectedUrl); + } + ); }); describe('findPackageForDownload', () => { diff --git a/__tests__/distributors/zulu-installer.test.ts b/__tests__/distributors/zulu-installer.test.ts index 8f73192d..4a43c789 100644 --- a/__tests__/distributors/zulu-installer.test.ts +++ b/__tests__/distributors/zulu-installer.test.ts @@ -3,6 +3,7 @@ import * as semver from 'semver'; import { ZuluDistribution } from '../../src/distributions/zulu/installer'; import { IZuluVersions } from '../../src/distributions/zulu/models'; import * as utils from '../../src/util'; +import os from 'os'; const manifestData = require('../data/zulu-releases-default.json') as []; @@ -72,6 +73,34 @@ describe('getAvailableVersions', () => { expect(spyHttpClient.mock.calls[0][0]).toBe(buildUrl); }); + type DistroArch = { + bitness: string; + arch: string; + }; + it.each([ + ['amd64', { bitness: '64', arch: 'x86' }], + ['arm64', { bitness: '64', arch: 'arm' }] + ])( + 'defaults to os.arch(): %s mapped to distro arch: %s', + async (osArch: string, distroArch: DistroArch) => { + jest.spyOn(os, 'arch').mockReturnValue(osArch); + + const distribution = new ZuluDistribution({ + version: '17', + architecture: '', // to get default value + packageType: 'jdk', + checkLatest: false + }); + distribution['getPlatformOption'] = () => 'macos'; + const buildUrl = `https://api.azul.com/zulu/download/community/v1.0/bundles/?os=macos&ext=tar.gz&bundle_type=jdk&javafx=false&arch=${distroArch.arch}&hw_bitness=${distroArch.bitness}&release_status=ga`; + + await distribution['getAvailableVersions'](); + + expect(spyHttpClient.mock.calls).toHaveLength(1); + expect(spyHttpClient.mock.calls[0][0]).toBe(buildUrl); + } + ); + it('load available versions', async () => { const distribution = new ZuluDistribution({ version: '11',