mirror of
				https://hub.gitmirror.com/https://github.com/actions/setup-java.git
				synced 2025-10-29 00:50:04 +08:00 
			
		
		
		
	 0de5c66fc0
			
		
	
	
		0de5c66fc0
		
			
		
	
	
	
	
		
			
			* Add ESLint config and update Prettier * Update test files * Rebuild action * Update docs * Update licenses * Update tsconfig * Rebuild action * Update tsconfig.json * Fix console.time calls * Rebuild action * Rebuild action on Linux
		
			
				
	
	
		
			244 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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';
 | |
| 
 | |
| import manifestData from '../data/corretto.json';
 | |
| 
 | |
| 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.toThrow('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.toThrow('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.toThrow("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);
 | |
|   };
 | |
| });
 |