mirror of
https://github.com/actions/setup-java
synced 2024-12-22 21:22:41 +00:00
227 lines
7.5 KiB
TypeScript
227 lines
7.5 KiB
TypeScript
|
import {HttpClient} from '@actions/http-client';
|
||
|
import {DragonwellDistribution} from '../../src/distributions/dragonwell/installer';
|
||
|
import * as utils from '../../src/util';
|
||
|
|
||
|
import manifestData from '../data/dragonwell.json';
|
||
|
|
||
|
describe('getAvailableVersions', () => {
|
||
|
let spyHttpClient: jest.SpyInstance;
|
||
|
let spyUtilGetDownloadArchiveExtension: jest.SpyInstance;
|
||
|
|
||
|
beforeEach(() => {
|
||
|
spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson');
|
||
|
spyHttpClient.mockReturnValue({
|
||
|
statusCode: 200,
|
||
|
headers: {},
|
||
|
result: manifestData
|
||
|
});
|
||
|
|
||
|
spyUtilGetDownloadArchiveExtension = jest.spyOn(
|
||
|
utils,
|
||
|
'getDownloadArchiveExtension'
|
||
|
);
|
||
|
spyUtilGetDownloadArchiveExtension.mockReturnValue('tar.gz');
|
||
|
});
|
||
|
|
||
|
afterEach(() => {
|
||
|
jest.resetAllMocks();
|
||
|
jest.clearAllMocks();
|
||
|
jest.restoreAllMocks();
|
||
|
});
|
||
|
|
||
|
const mockPlatform = (
|
||
|
distribution: DragonwellDistribution,
|
||
|
platform: string
|
||
|
) => {
|
||
|
distribution['getPlatformOption'] = () => platform;
|
||
|
const mockedExtension = platform == 'windows' ? 'zip' : 'tar.gz';
|
||
|
spyUtilGetDownloadArchiveExtension.mockReturnValue(mockedExtension);
|
||
|
};
|
||
|
|
||
|
describe('getAvailableVersions', () => {
|
||
|
it.each([
|
||
|
['8', 'x86', 'linux', 0],
|
||
|
['8', 'aarch64', 'linux', 24],
|
||
|
['8.6.6', 'x64', 'linux', 27],
|
||
|
['8', 'x86', 'anolis', 0],
|
||
|
['8', 'x86', 'windows', 0],
|
||
|
['8', 'x86', 'mac', 0],
|
||
|
['11', 'x64', 'linux', 27],
|
||
|
['11', 'aarch64', 'linux', 24],
|
||
|
['17', 'riscv', 'linux', 0],
|
||
|
['16.0.1', 'x64', 'linux', 27]
|
||
|
])(
|
||
|
'should get right number of available versions from JSON',
|
||
|
async (
|
||
|
jdkVersion: string,
|
||
|
arch: string,
|
||
|
platform: string,
|
||
|
len: number
|
||
|
) => {
|
||
|
const distribution = new DragonwellDistribution({
|
||
|
version: jdkVersion,
|
||
|
architecture: arch,
|
||
|
packageType: 'jdk',
|
||
|
checkLatest: false
|
||
|
});
|
||
|
mockPlatform(distribution, platform);
|
||
|
|
||
|
const availableVersions = await distribution['getAvailableVersions']();
|
||
|
expect(availableVersions).not.toBeNull();
|
||
|
expect(availableVersions.length).toBe(len);
|
||
|
}
|
||
|
);
|
||
|
});
|
||
|
|
||
|
describe('findPackageForDownload', () => {
|
||
|
it.each([
|
||
|
[
|
||
|
'8',
|
||
|
'linux',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell8/releases/download/dragonwell-extended-8.13.14_jdk8u352-ga/Alibaba_Dragonwell_Extended_8.13.14_x64_linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'8',
|
||
|
'linux',
|
||
|
'aarch64',
|
||
|
'https://github.com/alibaba/dragonwell8/releases/download/dragonwell-extended-8.13.14_jdk8u352-ga/Alibaba_Dragonwell_Extended_8.13.14_aarch64_linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'8',
|
||
|
'windows',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell8/releases/download/dragonwell-extended-8.13.14_jdk8u352-ga/Alibaba_Dragonwell_Extended_8.13.14_x64_windows.zip'
|
||
|
],
|
||
|
[
|
||
|
'8.13.14',
|
||
|
'linux',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell8/releases/download/dragonwell-extended-8.13.14_jdk8u352-ga/Alibaba_Dragonwell_Extended_8.13.14_x64_linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'11',
|
||
|
'linux',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell11/releases/download/dragonwell-extended-11.0.17.13_jdk-11.0.17-ga/Alibaba_Dragonwell_Extended_11.0.17.13.8_x64_linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'11',
|
||
|
'linux',
|
||
|
'aarch64',
|
||
|
'https://github.com/alibaba/dragonwell11/releases/download/dragonwell-extended-11.0.17.13_jdk-11.0.17-ga/Alibaba_Dragonwell_Extended_11.0.17.13.8_aarch64_linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'11',
|
||
|
'windows',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell11/releases/download/dragonwell-extended-11.0.17.13_jdk-11.0.17-ga/Alibaba_Dragonwell_Extended_11.0.17.13.8_x64_windows.zip'
|
||
|
],
|
||
|
[
|
||
|
'11',
|
||
|
'alpine-linux',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell11/releases/download/dragonwell-extended-11.0.17.13_jdk-11.0.17-ga/Alibaba_Dragonwell_Extended_11.0.17.13.8_x64_alpine-linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'11.0.17',
|
||
|
'linux',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell11/releases/download/dragonwell-extended-11.0.17.13_jdk-11.0.17-ga/Alibaba_Dragonwell_Extended_11.0.17.13.8_x64_linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'17',
|
||
|
'linux',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell17/releases/download/dragonwell-standard-17.0.5.0.5%2B8_jdk-17.0.5-ga/Alibaba_Dragonwell_Standard_17.0.5.0.5.8_x64_linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'17',
|
||
|
'linux',
|
||
|
'aarch64',
|
||
|
'https://github.com/alibaba/dragonwell17/releases/download/dragonwell-standard-17.0.5.0.5%2B8_jdk-17.0.5-ga/Alibaba_Dragonwell_Standard_17.0.5.0.5.8_aarch64_linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'17',
|
||
|
'windows',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell17/releases/download/dragonwell-standard-17.0.5.0.5%2B8_jdk-17.0.5-ga/Alibaba_Dragonwell_Standard_17.0.5.0.5.8_x64_windows.zip'
|
||
|
],
|
||
|
[
|
||
|
'17',
|
||
|
'alpine-linux',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell17/releases/download/dragonwell-standard-17.0.5.0.5%2B8_jdk-17.0.5-ga/Alibaba_Dragonwell_Standard_17.0.5.0.5.8_x64_alpine-linux.tar.gz'
|
||
|
],
|
||
|
[
|
||
|
'17.0.4',
|
||
|
'linux',
|
||
|
'x64',
|
||
|
'https://github.com/alibaba/dragonwell17/releases/download/dragonwell-standard-17.0.4.0.4%2B8_jdk-17.0.4-ga/Alibaba_Dragonwell_Standard_17.0.4.0.4%2B8_x64_linux.tar.gz'
|
||
|
]
|
||
|
])(
|
||
|
'should return proper link according to the specified java-version, platform and arch',
|
||
|
async (
|
||
|
jdkVersion: string,
|
||
|
platform: string,
|
||
|
arch: string,
|
||
|
expectedLink: string
|
||
|
) => {
|
||
|
const distribution = new DragonwellDistribution({
|
||
|
version: jdkVersion,
|
||
|
architecture: arch,
|
||
|
packageType: 'jdk',
|
||
|
checkLatest: false
|
||
|
});
|
||
|
mockPlatform(distribution, platform);
|
||
|
|
||
|
const availableVersion = await distribution['findPackageForDownload'](
|
||
|
jdkVersion
|
||
|
);
|
||
|
expect(availableVersion).not.toBeNull();
|
||
|
expect(availableVersion.url).toBe(expectedLink);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
it.each([
|
||
|
['8', 'alpine-linux', 'x64'],
|
||
|
['8', 'macos', 'aarch64'],
|
||
|
['11', 'macos', 'aarch64'],
|
||
|
['17', 'linux', 'riscv']
|
||
|
])(
|
||
|
'should throw when required version of JDK can not be found in the JSON',
|
||
|
async (jdkVersion: string, platform: string, arch: string) => {
|
||
|
const distribution = new DragonwellDistribution({
|
||
|
version: jdkVersion,
|
||
|
architecture: arch,
|
||
|
packageType: 'jdk',
|
||
|
checkLatest: false
|
||
|
});
|
||
|
mockPlatform(distribution, platform);
|
||
|
|
||
|
await expect(
|
||
|
distribution['findPackageForDownload'](jdkVersion)
|
||
|
).rejects.toThrow(
|
||
|
`Couldn't find any satisfied version for the specified java-version: "${jdkVersion}" and architecture: "${arch}".`
|
||
|
);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
it('should throw when required package type is not jdk', async () => {
|
||
|
const jdkVersion = '17';
|
||
|
const arch = 'x64';
|
||
|
const platform = 'linux';
|
||
|
const distribution = new DragonwellDistribution({
|
||
|
version: jdkVersion,
|
||
|
architecture: arch,
|
||
|
packageType: 'jre',
|
||
|
checkLatest: false
|
||
|
});
|
||
|
mockPlatform(distribution, platform);
|
||
|
await expect(
|
||
|
distribution['findPackageForDownload'](jdkVersion)
|
||
|
).rejects.toThrow('Dragonwell provides only the `jdk` package type');
|
||
|
});
|
||
|
});
|
||
|
});
|