* add support for dragonwell * fix: update logic of parsing json file, refactor code * build: rebuild action * chore: update error message * build: rebuild action * tests: fix unit tests, add e2e tests * chore: prettier, lint and rebuild solution * feat: add check for the package type, update unit tests * tests: update e2e tests * tests: remove excess entries from e2e tests * feat: update logic of getting json file * feat: add logic for backuping getting json * chore: update wordings * chore: fix typos, add additional logs * fix: fix review points * chore: rebuild solution * chore: update wordings * chore: refactor code --------- Co-authored-by: Ivan Zosimov <ivanzosimov@github.com> Co-authored-by: Ivan <98037481+IvanZosimov@users.noreply.github.com>
		
			
				
	
	
		
			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');
 | |
|     });
 | |
|   });
 | |
| });
 |