mirror of
				https://gitea.com/actions/setup-java.git
				synced 2025-11-04 07:47:06 +00:00 
			
		
		
		
	* 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);
 | 
						|
  };
 | 
						|
});
 |