2022-03-31 19:09:57 +00:00
import * as cache from '@actions/cache' ;
import * as core from '@actions/core' ;
2025-01-25 22:51:06 +00:00
import * as fs from 'fs' ;
import * as path from 'path' ;
2023-04-10 08:29:19 +00:00
import {
convertVersionToSemver ,
2025-01-25 21:02:44 +00:00
getVersionFromFileContent ,
2023-04-10 08:29:19 +00:00
isVersionSatisfies ,
2024-10-21 17:57:52 +00:00
isCacheFeatureAvailable ,
isGhes
2023-04-10 08:29:19 +00:00
} from '../src/util' ;
2022-03-31 19:09:57 +00:00
jest . mock ( '@actions/cache' ) ;
jest . mock ( '@actions/core' ) ;
2021-04-05 10:02:27 +00:00
describe ( 'isVersionSatisfies' , ( ) = > {
it . each ( [
[ 'x' , '11.0.0' , true ] ,
[ '3' , '3.7.1' , true ] ,
[ '3' , '3.7.2' , true ] ,
[ '3' , '3.7.2+4' , true ] ,
[ '2.5' , '2.5.0' , true ] ,
[ '2.5' , '2.5.0+1' , true ] ,
[ '2.5' , '2.6.1' , false ] ,
[ '2.5.1' , '2.5.0' , false ] ,
[ '2.5.1+3' , '2.5.0' , false ] ,
[ '2.5.1+3' , '2.5.1+3' , true ] ,
[ '2.5.1+3' , '2.5.1+2' , false ] ,
[ '15.0.0+14' , '15.0.0+14.1.202003190635' , false ] ,
[ '15.0.0+14.1.202003190635' , '15.0.0+14.1.202003190635' , true ]
2023-03-09 12:49:35 +00:00
] ) (
'%s, %s -> %s' ,
( inputRange : string , inputVersion : string , expected : boolean ) = > {
const actual = isVersionSatisfies ( inputRange , inputVersion ) ;
expect ( actual ) . toBe ( expected ) ;
}
) ;
2020-05-02 11:33:15 +00:00
} ) ;
2022-03-31 19:09:57 +00:00
describe ( 'isCacheFeatureAvailable' , ( ) = > {
it ( 'isCacheFeatureAvailable disabled on GHES' , ( ) = > {
jest . spyOn ( cache , 'isFeatureAvailable' ) . mockImplementation ( ( ) = > false ) ;
2022-12-16 14:04:57 +00:00
const infoMock = jest . spyOn ( core , 'warning' ) ;
const message =
'Caching is only supported on GHES version >= 3.5. If you are on a version >= 3.5, please check with your GHES admin if the Actions cache service is enabled or not.' ;
2022-03-31 19:09:57 +00:00
try {
process . env [ 'GITHUB_SERVER_URL' ] = 'http://example.com' ;
2022-12-16 14:04:57 +00:00
expect ( isCacheFeatureAvailable ( ) ) . toBeFalsy ( ) ;
expect ( infoMock ) . toHaveBeenCalledWith ( message ) ;
2022-03-31 19:09:57 +00:00
} finally {
delete process . env [ 'GITHUB_SERVER_URL' ] ;
}
} ) ;
it ( 'isCacheFeatureAvailable disabled on dotcom' , ( ) = > {
jest . spyOn ( cache , 'isFeatureAvailable' ) . mockImplementation ( ( ) = > false ) ;
const infoMock = jest . spyOn ( core , 'warning' ) ;
2023-03-09 12:49:35 +00:00
const message =
'The runner was not able to contact the cache service. Caching will be skipped' ;
2022-03-31 19:09:57 +00:00
try {
process . env [ 'GITHUB_SERVER_URL' ] = 'http://github.com' ;
expect ( isCacheFeatureAvailable ( ) ) . toBe ( false ) ;
expect ( infoMock ) . toHaveBeenCalledWith ( message ) ;
} finally {
delete process . env [ 'GITHUB_SERVER_URL' ] ;
}
} ) ;
it ( 'isCacheFeatureAvailable is enabled' , ( ) = > {
jest . spyOn ( cache , 'isFeatureAvailable' ) . mockImplementation ( ( ) = > true ) ;
expect ( isCacheFeatureAvailable ( ) ) . toBe ( true ) ;
} ) ;
} ) ;
2023-04-10 08:29:19 +00:00
describe ( 'convertVersionToSemver' , ( ) = > {
it . each ( [
[ '12' , '12' ] ,
[ '12.0' , '12.0' ] ,
[ '12.0.2' , '12.0.2' ] ,
[ '12.0.2.1' , '12.0.2+1' ] ,
[ '12.0.2.1.0' , '12.0.2+1.0' ]
] ) ( '%s -> %s' , ( input : string , expected : string ) = > {
const actual = convertVersionToSemver ( input ) ;
expect ( actual ) . toBe ( expected ) ;
} ) ;
} ) ;
2024-10-21 17:57:52 +00:00
2025-01-25 21:02:44 +00:00
describe ( 'getVersionFromFileContent' , ( ) = > {
describe ( '.sdkmanrc' , ( ) = > {
it . each ( [
[ 'java=11.0.20.1-tem' , '11.0.20' ] ,
[ 'java = 11.0.20.1-tem' , '11.0.20' ] ,
[ 'java=11.0.20.1-tem # a comment in sdkmanrc' , '11.0.20' ] ,
[ 'java=11.0.20.1-tem\n#java=21.0.20.1-tem\n' , '11.0.20' ] , // choose first match
[ 'java=11.0.20.1-tem\njava=21.0.20.1-tem\n' , '11.0.20' ] , // choose first match
[ '#java=11.0.20.1-tem\njava=21.0.20.1-tem\n' , '21.0.20' ] // first one is 'commented' in .sdkmanrc
] ) ( 'parsing %s should return %s' , ( content : string , expected : string ) = > {
const actual = getVersionFromFileContent ( content , 'openjdk' , '.sdkmanrc' ) ;
expect ( actual ) . toBe ( expected ) ;
} ) ;
2025-01-25 22:51:06 +00:00
describe ( 'known versions' , ( ) = > {
const csv = fs . readFileSync (
path . join ( __dirname , 'data/sdkman-java-versions.csv' ) ,
'utf8'
) ;
const versions = csv . split ( '\n' ) . map ( r = > r . split ( ', ' ) ) ;
it . each ( versions ) (
'parsing %s should return %s' ,
( sdkmanJavaVersion : string , expected : string ) = > {
const asContent = ` java= ${ sdkmanJavaVersion } ` ;
const actual = getVersionFromFileContent (
asContent ,
'openjdk' ,
'.sdkmanrc'
) ;
expect ( actual ) . toBe ( expected ) ;
}
) ;
} ) ;
2025-01-25 21:02:44 +00:00
} ) ;
} ) ;
2024-10-21 17:57:52 +00:00
describe ( 'isGhes' , ( ) = > {
const pristineEnv = process . env ;
beforeEach ( ( ) = > {
jest . resetModules ( ) ;
process . env = { . . . pristineEnv } ;
} ) ;
afterAll ( ( ) = > {
process . env = pristineEnv ;
} ) ;
it ( 'returns false when the GITHUB_SERVER_URL environment variable is not defined' , async ( ) = > {
delete process . env [ 'GITHUB_SERVER_URL' ] ;
expect ( isGhes ( ) ) . toBeFalsy ( ) ;
} ) ;
it ( 'returns false when the GITHUB_SERVER_URL environment variable is set to github.com' , async ( ) = > {
process . env [ 'GITHUB_SERVER_URL' ] = 'https://github.com' ;
expect ( isGhes ( ) ) . toBeFalsy ( ) ;
} ) ;
it ( 'returns false when the GITHUB_SERVER_URL environment variable is set to a GitHub Enterprise Cloud-style URL' , async ( ) = > {
process . env [ 'GITHUB_SERVER_URL' ] = 'https://contoso.ghe.com' ;
expect ( isGhes ( ) ) . toBeFalsy ( ) ;
} ) ;
it ( 'returns false when the GITHUB_SERVER_URL environment variable has a .localhost suffix' , async ( ) = > {
process . env [ 'GITHUB_SERVER_URL' ] = 'https://mock-github.localhost' ;
expect ( isGhes ( ) ) . toBeFalsy ( ) ;
} ) ;
it ( 'returns true when the GITHUB_SERVER_URL environment variable is set to some other URL' , async ( ) = > {
process . env [ 'GITHUB_SERVER_URL' ] = 'https://src.onpremise.fabrikam.com' ;
expect ( isGhes ( ) ) . toBeTruthy ( ) ;
} ) ;
} ) ;