Add a test for merging existing toolchains.xml

This commit is contained in:
hfhbd 2024-04-10 20:50:12 +02:00
parent 30a2ee13f2
commit 864fa80f2e
3 changed files with 60 additions and 4 deletions

View File

@ -9,7 +9,7 @@ import {CacheListener} from './cache-reporting'
import {saveCache, restoreCache, cacheDebug, isCacheDebuggingEnabled, tryDelete} from './cache-utils' import {saveCache, restoreCache, cacheDebug, isCacheDebuggingEnabled, tryDelete} from './cache-utils'
import {CacheConfig} from '../configuration' import {CacheConfig} from '../configuration'
import {GradleHomeEntryExtractor, ConfigurationCacheEntryExtractor} from './gradle-home-extry-extractor' import {GradleHomeEntryExtractor, ConfigurationCacheEntryExtractor} from './gradle-home-extry-extractor'
import {getPredefinedToolchains, readResourceFileAsString} from './gradle-user-home-utils' import {getPredefinedToolchains, mergeToolchainContent, readResourceFileAsString} from './gradle-user-home-utils'
const RESTORED_CACHE_KEY_KEY = 'restored-cache-key' const RESTORED_CACHE_KEY_KEY = 'restored-cache-key'
@ -233,8 +233,7 @@ export class GradleUserHomeCache {
} else { } else {
// Merge into an existing toolchains.xml file // Merge into an existing toolchains.xml file
const existingToolchainContent = fs.readFileSync(toolchainXmlTarget, 'utf8') const existingToolchainContent = fs.readFileSync(toolchainXmlTarget, 'utf8')
const appendedContent = preInstalledToolchains.split('<toolchains>').pop()! const mergedContent = mergeToolchainContent(existingToolchainContent, preInstalledToolchains)
const mergedContent = existingToolchainContent.replace('</toolchains>', appendedContent)
fs.writeFileSync(toolchainXmlTarget, mergedContent) fs.writeFileSync(toolchainXmlTarget, mergedContent)
core.info(`Merged default JDK locations into ${toolchainXmlTarget}`) core.info(`Merged default JDK locations into ${toolchainXmlTarget}`)

View File

@ -42,3 +42,8 @@ export function getPredefinedToolchains(): string | null {
toolchainsXml += `</toolchains>\n` toolchainsXml += `</toolchains>\n`
return toolchainsXml return toolchainsXml
} }
export function mergeToolchainContent(existingToolchainContent: string, preInstalledToolchains: string): string {
const appendedContent = preInstalledToolchains.split('<toolchains>').pop()!
return existingToolchainContent.replace('</toolchains>', appendedContent)
}

View File

@ -1,4 +1,4 @@
import {getPredefinedToolchains} from "../../src/caching/gradle-user-home-utils"; import {getPredefinedToolchains, mergeToolchainContent} from "../../src/caching/gradle-user-home-utils";
describe('predefined-toolchains', () => { describe('predefined-toolchains', () => {
const OLD_ENV = process.env const OLD_ENV = process.env
@ -62,4 +62,56 @@ describe('predefined-toolchains', () => {
`) `)
}) })
}) })
it("merges with existing toolchains", async () => {
jest.resetModules()
process.env = {
"JAVA_HOME_11_X64": "/jdks/foo_11",
}
// language=XML
const existingToolchains =
`<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
<toolchain>
<type>jdk</type>
<provides>
<version>8</version>
</provides>
<configuration>
<jdkHome>\${env.JAVA_HOME_8_X64}</jdkHome>
</configuration>
</toolchain>
</toolchains>
`
const mergedContent = mergeToolchainContent(existingToolchains, getPredefinedToolchains()!)
expect(mergedContent).toBe(
// language=XML
`<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
<toolchain>
<type>jdk</type>
<provides>
<version>8</version>
</provides>
<configuration>
<jdkHome>\${env.JAVA_HOME_8_X64}</jdkHome>
</configuration>
</toolchain>
<!-- JDK Toolchains installed by default on GitHub-hosted runners -->
<toolchain>
<type>jdk</type>
<provides>
<version>11</version>
</provides>
<configuration>
<jdkHome>\${env.JAVA_HOME_11_X64}</jdkHome>
</configuration>
</toolchain>
</toolchains>
`)
})
}) })