mirror of
https://github.com/actions/setup-java
synced 2024-12-17 21:22:13 +00:00
293 lines
8.2 KiB
TypeScript
293 lines
8.2 KiB
TypeScript
|
import * as fs from 'fs';
|
||
|
import os from 'os';
|
||
|
import * as path from 'path';
|
||
|
import * as core from '@actions/core';
|
||
|
import * as io from '@actions/io';
|
||
|
import * as toolchains from '../src/toolchains';
|
||
|
import { M2_DIR, MVN_TOOLCHAINS_FILE } from '../src/constants';
|
||
|
|
||
|
const m2Dir = path.join(__dirname, M2_DIR);
|
||
|
const toolchainsFile = path.join(m2Dir, MVN_TOOLCHAINS_FILE);
|
||
|
|
||
|
describe('toolchains tests', () => {
|
||
|
let spyOSHomedir: jest.SpyInstance;
|
||
|
let spyInfo: jest.SpyInstance;
|
||
|
|
||
|
beforeEach(async () => {
|
||
|
await io.rmRF(m2Dir);
|
||
|
spyOSHomedir = jest.spyOn(os, 'homedir');
|
||
|
spyOSHomedir.mockReturnValue(__dirname);
|
||
|
spyInfo = jest.spyOn(core, 'info');
|
||
|
spyInfo.mockImplementation(() => null);
|
||
|
}, 300000);
|
||
|
|
||
|
afterAll(async () => {
|
||
|
try {
|
||
|
await io.rmRF(m2Dir);
|
||
|
} catch {
|
||
|
console.log('Failed to remove test directories');
|
||
|
}
|
||
|
jest.resetAllMocks();
|
||
|
jest.clearAllMocks();
|
||
|
jest.restoreAllMocks();
|
||
|
}, 100000);
|
||
|
|
||
|
it('creates toolchains.xml in alternate locations', async () => {
|
||
|
const jdkInfo = {
|
||
|
version: '17',
|
||
|
vendor: 'Eclipse Temurin',
|
||
|
id: 'temurin_17',
|
||
|
jdkHome: '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
|
||
|
};
|
||
|
|
||
|
const altHome = path.join(__dirname, 'runner', 'toolchains');
|
||
|
const altToolchainsFile = path.join(altHome, MVN_TOOLCHAINS_FILE);
|
||
|
await io.rmRF(altHome); // ensure it doesn't already exist
|
||
|
|
||
|
await toolchains.createToolchainsSettings({
|
||
|
jdkInfo,
|
||
|
settingsDirectory: altHome,
|
||
|
overwriteSettings: true
|
||
|
});
|
||
|
|
||
|
expect(fs.existsSync(m2Dir)).toBe(false);
|
||
|
expect(fs.existsSync(toolchainsFile)).toBe(false);
|
||
|
|
||
|
expect(fs.existsSync(altHome)).toBe(true);
|
||
|
expect(fs.existsSync(altToolchainsFile)).toBe(true);
|
||
|
expect(fs.readFileSync(altToolchainsFile, 'utf-8')).toEqual(
|
||
|
toolchains.generateToolchainDefinition(
|
||
|
'',
|
||
|
jdkInfo.version,
|
||
|
jdkInfo.vendor,
|
||
|
jdkInfo.id,
|
||
|
jdkInfo.jdkHome
|
||
|
)
|
||
|
);
|
||
|
|
||
|
await io.rmRF(altHome);
|
||
|
}, 100000);
|
||
|
|
||
|
it('creates toolchains.xml with minimal configuration', async () => {
|
||
|
const jdkInfo = {
|
||
|
version: '17',
|
||
|
vendor: 'Eclipse Temurin',
|
||
|
id: 'temurin_17',
|
||
|
jdkHome: '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
|
||
|
};
|
||
|
|
||
|
const result = `<?xml version="1.0"?>
|
||
|
<toolchains xmlns="https://maven.apache.org/TOOLCHAINS/1.1.0"
|
||
|
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
|
||
|
xsi:schemaLocation="https://maven.apache.org/TOOLCHAINS/1.1.0 https://maven.apache.org/xsd/toolchains-1.1.0.xsd">
|
||
|
<toolchain>
|
||
|
<type>jdk</type>
|
||
|
<provides>
|
||
|
<version>17</version>
|
||
|
<vendor>Eclipse Temurin</vendor>
|
||
|
<id>temurin_17</id>
|
||
|
</provides>
|
||
|
<configuration>
|
||
|
<jdkHome>/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64</jdkHome>
|
||
|
</configuration>
|
||
|
</toolchain>
|
||
|
</toolchains>`;
|
||
|
|
||
|
await toolchains.createToolchainsSettings({
|
||
|
jdkInfo,
|
||
|
settingsDirectory: m2Dir,
|
||
|
overwriteSettings: true
|
||
|
});
|
||
|
|
||
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||
|
expect(fs.existsSync(toolchainsFile)).toBe(true);
|
||
|
expect(fs.readFileSync(toolchainsFile, 'utf-8')).toEqual(
|
||
|
toolchains.generateToolchainDefinition(
|
||
|
'',
|
||
|
jdkInfo.version,
|
||
|
jdkInfo.vendor,
|
||
|
jdkInfo.id,
|
||
|
jdkInfo.jdkHome
|
||
|
)
|
||
|
);
|
||
|
expect(
|
||
|
toolchains.generateToolchainDefinition(
|
||
|
'',
|
||
|
jdkInfo.version,
|
||
|
jdkInfo.vendor,
|
||
|
jdkInfo.id,
|
||
|
jdkInfo.jdkHome
|
||
|
)
|
||
|
).toEqual(result);
|
||
|
}, 100000);
|
||
|
|
||
|
it('reuses existing toolchains.xml files', async () => {
|
||
|
const jdkInfo = {
|
||
|
version: '17',
|
||
|
vendor: 'Eclipse Temurin',
|
||
|
id: 'temurin_17',
|
||
|
jdkHome: '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
|
||
|
};
|
||
|
|
||
|
const originalFile = `<toolchains>
|
||
|
<toolchain>
|
||
|
<type>jdk</type>
|
||
|
<provides>
|
||
|
<version>1.6</version>
|
||
|
<vendor>Sun</vendor>
|
||
|
<id>sun_1.6</id>
|
||
|
</provides>
|
||
|
<configuration>
|
||
|
<jdkHome>/opt/jdk/sun/1.6</jdkHome>
|
||
|
</configuration>
|
||
|
</toolchain>
|
||
|
</toolchains>`;
|
||
|
const result = `<?xml version="1.0"?>
|
||
|
<toolchains>
|
||
|
<toolchain>
|
||
|
<type>jdk</type>
|
||
|
<provides>
|
||
|
<version>1.6</version>
|
||
|
<vendor>Sun</vendor>
|
||
|
<id>sun_1.6</id>
|
||
|
</provides>
|
||
|
<configuration>
|
||
|
<jdkHome>/opt/jdk/sun/1.6</jdkHome>
|
||
|
</configuration>
|
||
|
</toolchain>
|
||
|
<toolchain>
|
||
|
<type>jdk</type>
|
||
|
<provides>
|
||
|
<version>17</version>
|
||
|
<vendor>Eclipse Temurin</vendor>
|
||
|
<id>temurin_17</id>
|
||
|
</provides>
|
||
|
<configuration>
|
||
|
<jdkHome>/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64</jdkHome>
|
||
|
</configuration>
|
||
|
</toolchain>
|
||
|
</toolchains>`;
|
||
|
|
||
|
fs.mkdirSync(m2Dir, { recursive: true });
|
||
|
fs.writeFileSync(toolchainsFile, originalFile);
|
||
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||
|
expect(fs.existsSync(toolchainsFile)).toBe(true);
|
||
|
|
||
|
await toolchains.createToolchainsSettings({
|
||
|
jdkInfo,
|
||
|
settingsDirectory: m2Dir,
|
||
|
overwriteSettings: true
|
||
|
});
|
||
|
|
||
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||
|
expect(fs.existsSync(toolchainsFile)).toBe(true);
|
||
|
expect(fs.readFileSync(toolchainsFile, 'utf-8')).toEqual(
|
||
|
toolchains.generateToolchainDefinition(
|
||
|
originalFile,
|
||
|
jdkInfo.version,
|
||
|
jdkInfo.vendor,
|
||
|
jdkInfo.id,
|
||
|
jdkInfo.jdkHome
|
||
|
)
|
||
|
);
|
||
|
expect(
|
||
|
toolchains.generateToolchainDefinition(
|
||
|
originalFile,
|
||
|
jdkInfo.version,
|
||
|
jdkInfo.vendor,
|
||
|
jdkInfo.id,
|
||
|
jdkInfo.jdkHome
|
||
|
)
|
||
|
).toEqual(result);
|
||
|
}, 100000);
|
||
|
|
||
|
it('does not overwrite existing toolchains.xml files', async () => {
|
||
|
const jdkInfo = {
|
||
|
version: '17',
|
||
|
vendor: 'Eclipse Temurin',
|
||
|
id: 'temurin_17',
|
||
|
jdkHome: '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
|
||
|
};
|
||
|
|
||
|
const originalFile = `<toolchains>
|
||
|
<toolchain>
|
||
|
<type>jdk</type>
|
||
|
<provides>
|
||
|
<version>1.6</version>
|
||
|
<vendor>Sun</vendor>
|
||
|
<id>sun_1.6</id>
|
||
|
</provides>
|
||
|
<configuration>
|
||
|
<jdkHome>/opt/jdk/sun/1.6</jdkHome>
|
||
|
</configuration>
|
||
|
</toolchain>
|
||
|
</toolchains>`;
|
||
|
|
||
|
fs.mkdirSync(m2Dir, { recursive: true });
|
||
|
fs.writeFileSync(toolchainsFile, originalFile);
|
||
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||
|
expect(fs.existsSync(toolchainsFile)).toBe(true);
|
||
|
|
||
|
await toolchains.createToolchainsSettings({
|
||
|
jdkInfo,
|
||
|
settingsDirectory: m2Dir,
|
||
|
overwriteSettings: false
|
||
|
});
|
||
|
|
||
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||
|
expect(fs.existsSync(toolchainsFile)).toBe(true);
|
||
|
expect(fs.readFileSync(toolchainsFile, 'utf-8')).toEqual(originalFile);
|
||
|
}, 100000);
|
||
|
|
||
|
it('generates valid toolchains.xml with minimal configuration', () => {
|
||
|
const jdkInfo = {
|
||
|
version: 'JAVA_VERSION',
|
||
|
vendor: 'JAVA_VENDOR',
|
||
|
id: 'VENDOR_VERSION',
|
||
|
jdkHome: 'JAVA_HOME'
|
||
|
};
|
||
|
|
||
|
const expectedToolchains = `<?xml version="1.0"?>
|
||
|
<toolchains xmlns="https://maven.apache.org/TOOLCHAINS/1.1.0"
|
||
|
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
|
||
|
xsi:schemaLocation="https://maven.apache.org/TOOLCHAINS/1.1.0 https://maven.apache.org/xsd/toolchains-1.1.0.xsd">
|
||
|
<toolchain>
|
||
|
<type>jdk</type>
|
||
|
<provides>
|
||
|
<version>${jdkInfo.version}</version>
|
||
|
<vendor>${jdkInfo.vendor}</vendor>
|
||
|
<id>${jdkInfo.id}</id>
|
||
|
</provides>
|
||
|
<configuration>
|
||
|
<jdkHome>${jdkInfo.jdkHome}</jdkHome>
|
||
|
</configuration>
|
||
|
</toolchain>
|
||
|
</toolchains>`;
|
||
|
|
||
|
expect(
|
||
|
toolchains.generateToolchainDefinition(
|
||
|
'',
|
||
|
jdkInfo.version,
|
||
|
jdkInfo.vendor,
|
||
|
jdkInfo.id,
|
||
|
jdkInfo.jdkHome
|
||
|
)
|
||
|
).toEqual(expectedToolchains);
|
||
|
}, 100000);
|
||
|
|
||
|
it('creates toolchains.xml with correct id when none is supplied', async () => {
|
||
|
const version = '17';
|
||
|
const distributionName = 'temurin';
|
||
|
const id = 'temurin_17';
|
||
|
const jdkHome = '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64';
|
||
|
|
||
|
await toolchains.configureToolchains(version, distributionName, jdkHome, undefined);
|
||
|
|
||
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||
|
expect(fs.existsSync(toolchainsFile)).toBe(true);
|
||
|
expect(fs.readFileSync(toolchainsFile, 'utf-8')).toEqual(
|
||
|
toolchains.generateToolchainDefinition('', version, distributionName, id, jdkHome)
|
||
|
);
|
||
|
}, 100000);
|
||
|
});
|