-
Notifications
You must be signed in to change notification settings - Fork 749
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 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 <[email protected]> Co-authored-by: Ivan <[email protected]>
- Loading branch information
1 parent
4075bfc
commit 0ab4596
Showing
12 changed files
with
1,918 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,226 @@ | ||
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'); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.