mirror of
https://github.com/gradle/gradle-build-action.git
synced 2024-12-25 02:26:19 +08:00
Add test coverage for build-result-capture init script
This commit is contained in:
parent
748dc30fdc
commit
ea24a0ad75
@ -16,6 +16,12 @@ dependencies {
|
|||||||
testImplementation gradleTestKit()
|
testImplementation gradleTestKit()
|
||||||
testImplementation 'org.spockframework:spock-core:2.1-groovy-3.0'
|
testImplementation 'org.spockframework:spock-core:2.1-groovy-3.0'
|
||||||
testImplementation('org.spockframework:spock-junit4:2.1-groovy-3.0')
|
testImplementation('org.spockframework:spock-junit4:2.1-groovy-3.0')
|
||||||
|
|
||||||
|
testImplementation ('io.ratpack:ratpack-groovy-test:1.9.0') {
|
||||||
|
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
|
||||||
|
}
|
||||||
|
testImplementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.13.3'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
@ -1,13 +1,19 @@
|
|||||||
package com.gradle.gradlebuildaction
|
package com.gradle.gradlebuildaction
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonFactory
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
|
import com.fasterxml.jackson.dataformat.smile.SmileFactory
|
||||||
import org.gradle.testkit.runner.BuildResult
|
import org.gradle.testkit.runner.BuildResult
|
||||||
import org.gradle.testkit.runner.GradleRunner
|
import org.gradle.testkit.runner.GradleRunner
|
||||||
import org.gradle.testkit.runner.internal.DefaultGradleRunner
|
import org.gradle.testkit.runner.internal.DefaultGradleRunner
|
||||||
import org.gradle.util.GradleVersion
|
import org.gradle.util.GradleVersion
|
||||||
|
import ratpack.groovy.test.embed.GroovyEmbeddedApp
|
||||||
|
import spock.lang.AutoCleanup
|
||||||
import spock.lang.Specification
|
import spock.lang.Specification
|
||||||
import spock.lang.TempDir
|
import spock.lang.TempDir
|
||||||
|
|
||||||
import java.nio.file.Files
|
import java.nio.file.Files
|
||||||
|
import java.util.zip.GZIPOutputStream
|
||||||
|
|
||||||
class BaseInitScriptTest extends Specification {
|
class BaseInitScriptTest extends Specification {
|
||||||
|
|
||||||
@ -36,12 +42,60 @@ class BaseInitScriptTest extends Specification {
|
|||||||
static final List<TestGradleVersion> CONFIGURATION_CACHE_VERSIONS =
|
static final List<TestGradleVersion> CONFIGURATION_CACHE_VERSIONS =
|
||||||
[GRADLE_7_0, GRADLE_7_4]
|
[GRADLE_7_0, GRADLE_7_4]
|
||||||
|
|
||||||
|
static final String PUBLIC_BUILD_SCAN_ID = 'i2wepy2gr7ovw'
|
||||||
|
static final String DEFAULT_SCAN_UPLOAD_TOKEN = 'scan-upload-token'
|
||||||
|
static final String ROOT_PROJECT_NAME = 'test-init-script'
|
||||||
|
|
||||||
File settingsFile
|
File settingsFile
|
||||||
File buildFile
|
File buildFile
|
||||||
|
|
||||||
@TempDir
|
@TempDir
|
||||||
File testProjectDir
|
File testProjectDir
|
||||||
|
|
||||||
|
@AutoCleanup
|
||||||
|
def mockScansServer = GroovyEmbeddedApp.of {
|
||||||
|
def jsonWriter = new ObjectMapper(new JsonFactory()).writer()
|
||||||
|
def smileWriter = new ObjectMapper(new SmileFactory()).writer()
|
||||||
|
|
||||||
|
handlers {
|
||||||
|
post('in/:gradleVersion/:pluginVersion') {
|
||||||
|
def scanUrlString = "${mockScansServer.address}s/$PUBLIC_BUILD_SCAN_ID"
|
||||||
|
def body = [
|
||||||
|
id : PUBLIC_BUILD_SCAN_ID,
|
||||||
|
scanUrl: scanUrlString.toString(),
|
||||||
|
]
|
||||||
|
def out = new ByteArrayOutputStream()
|
||||||
|
new GZIPOutputStream(out).withStream { smileWriter.writeValue(it, body) }
|
||||||
|
context.response
|
||||||
|
.contentType('application/vnd.gradle.scan-ack')
|
||||||
|
.send(out.toByteArray())
|
||||||
|
}
|
||||||
|
prefix('scans/publish') {
|
||||||
|
post('gradle/:pluginVersion/token') {
|
||||||
|
def pluginVersion = context.pathTokens.pluginVersion
|
||||||
|
def scanUrlString = "${mockScansServer.address}s/$PUBLIC_BUILD_SCAN_ID"
|
||||||
|
def body = [
|
||||||
|
id : PUBLIC_BUILD_SCAN_ID,
|
||||||
|
scanUrl : scanUrlString.toString(),
|
||||||
|
scanUploadUrl : "${mockScansServer.address.toString()}scans/publish/gradle/$pluginVersion/upload".toString(),
|
||||||
|
scanUploadToken: DEFAULT_SCAN_UPLOAD_TOKEN
|
||||||
|
]
|
||||||
|
context.response
|
||||||
|
.contentType('application/vnd.gradle.scan-ack+json')
|
||||||
|
.send(jsonWriter.writeValueAsBytes(body))
|
||||||
|
}
|
||||||
|
post('gradle/:pluginVersion/upload') {
|
||||||
|
context.request.getBody(1024 * 1024 * 10).then {
|
||||||
|
context.response
|
||||||
|
.contentType('application/vnd.gradle.scan-upload-ack+json')
|
||||||
|
.send()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notFound()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def setup() {
|
def setup() {
|
||||||
settingsFile = new File(testProjectDir, 'settings.gradle')
|
settingsFile = new File(testProjectDir, 'settings.gradle')
|
||||||
buildFile = new File(testProjectDir, 'build.gradle')
|
buildFile = new File(testProjectDir, 'build.gradle')
|
||||||
@ -54,10 +108,63 @@ class BaseInitScriptTest extends Specification {
|
|||||||
File targetInitScript = new File(targetInitScriptsDir, srcInitScript.name)
|
File targetInitScript = new File(targetInitScriptsDir, srcInitScript.name)
|
||||||
Files.copy(srcInitScript.toPath(), targetInitScript.toPath())
|
Files.copy(srcInitScript.toPath(), targetInitScript.toPath())
|
||||||
}
|
}
|
||||||
settingsFile << "rootProject.name = 'test-init-script'\n"
|
settingsFile << "rootProject.name = '${ROOT_PROJECT_NAME}'\n"
|
||||||
buildFile << ''
|
buildFile << ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def declareGePluginApplication(GradleVersion gradleVersion) {
|
||||||
|
settingsFile.text = maybeAddPluginsToSettings(gradleVersion) + settingsFile.text
|
||||||
|
buildFile.text = maybeAddPluginsToRootProject(gradleVersion) + buildFile.text
|
||||||
|
}
|
||||||
|
|
||||||
|
String maybeAddPluginsToSettings(GradleVersion gradleVersion) {
|
||||||
|
if (gradleVersion < GradleVersion.version('5.0')) {
|
||||||
|
'' // applied in build.gradle
|
||||||
|
} else if (gradleVersion < GradleVersion.version('6.0')) {
|
||||||
|
'' // applied in build.gradle
|
||||||
|
} else {
|
||||||
|
"""
|
||||||
|
plugins {
|
||||||
|
id 'com.gradle.enterprise' version '3.4.1'
|
||||||
|
}
|
||||||
|
gradleEnterprise {
|
||||||
|
server = '$mockScansServer.address'
|
||||||
|
buildScan {
|
||||||
|
publishAlways()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String maybeAddPluginsToRootProject(GradleVersion gradleVersion) {
|
||||||
|
if (gradleVersion < GradleVersion.version('5.0')) {
|
||||||
|
"""
|
||||||
|
plugins {
|
||||||
|
id 'com.gradle.build-scan' version '1.16'
|
||||||
|
}
|
||||||
|
buildScan {
|
||||||
|
server = '$mockScansServer.address'
|
||||||
|
publishAlways()
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
} else if (gradleVersion < GradleVersion.version('6.0')) {
|
||||||
|
"""
|
||||||
|
plugins {
|
||||||
|
id 'com.gradle.build-scan' version '3.4.1'
|
||||||
|
}
|
||||||
|
gradleEnterprise {
|
||||||
|
server = '$mockScansServer.address'
|
||||||
|
buildScan {
|
||||||
|
publishAlways()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
} else {
|
||||||
|
'' // applied in settings.gradle
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def addFailingTaskToBuild() {
|
def addFailingTaskToBuild() {
|
||||||
buildFile << '''
|
buildFile << '''
|
||||||
task expectFailure {
|
task expectFailure {
|
||||||
|
@ -0,0 +1,128 @@
|
|||||||
|
package com.gradle.gradlebuildaction
|
||||||
|
|
||||||
|
import groovy.json.JsonSlurper
|
||||||
|
import spock.lang.Ignore
|
||||||
|
|
||||||
|
import static org.junit.Assume.assumeTrue
|
||||||
|
|
||||||
|
class TestBuildResultOutput extends BaseInitScriptTest {
|
||||||
|
def initScript = 'build-result-capture.init.gradle'
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
def "produces build results file for build with #testGradleVersion"() {
|
||||||
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
|
when:
|
||||||
|
run(['help'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('help', testGradleVersion, false, false)
|
||||||
|
|
||||||
|
where:
|
||||||
|
testGradleVersion << ALL_VERSIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
def "produces build results file for failing build with #testGradleVersion"() {
|
||||||
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
|
when:
|
||||||
|
addFailingTaskToBuild()
|
||||||
|
runAndFail(['expectFailure'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('expectFailure', testGradleVersion, true, false)
|
||||||
|
|
||||||
|
where:
|
||||||
|
testGradleVersion << ALL_VERSIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
def "produces build results file for build with --configuration-cache on #testGradleVersion"() {
|
||||||
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
|
when:
|
||||||
|
run(['help', '--configuration-cache'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('help', testGradleVersion, false, false)
|
||||||
|
assert buildResultFile.delete()
|
||||||
|
|
||||||
|
when:
|
||||||
|
run(['help', '--configuration-cache'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('help', testGradleVersion, false, false)
|
||||||
|
|
||||||
|
where:
|
||||||
|
testGradleVersion << CONFIGURATION_CACHE_VERSIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
def "produces build results file for #testGradleVersion with build scan published"() {
|
||||||
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
|
when:
|
||||||
|
declareGePluginApplication(testGradleVersion.gradleVersion)
|
||||||
|
run(['help'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('help', testGradleVersion, false, true)
|
||||||
|
|
||||||
|
where:
|
||||||
|
testGradleVersion << ALL_VERSIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
def "produces build results file for failing build on #testGradleVersion with build scan published"() {
|
||||||
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
|
when:
|
||||||
|
declareGePluginApplication(testGradleVersion.gradleVersion)
|
||||||
|
addFailingTaskToBuild()
|
||||||
|
runAndFail(['expectFailure'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('expectFailure', testGradleVersion, true, true)
|
||||||
|
|
||||||
|
where:
|
||||||
|
testGradleVersion << ALL_VERSIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
def "produces build results file for build with --configuration-cache on #testGradleVersion with build scan published"() {
|
||||||
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
|
when:
|
||||||
|
declareGePluginApplication(testGradleVersion.gradleVersion)
|
||||||
|
run(['help', '--configuration-cache'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('help', testGradleVersion, false, true)
|
||||||
|
assert buildResultFile.delete()
|
||||||
|
|
||||||
|
when:
|
||||||
|
run(['help', '--configuration-cache'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('help', testGradleVersion, false, true)
|
||||||
|
|
||||||
|
where:
|
||||||
|
testGradleVersion << CONFIGURATION_CACHE_VERSIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
void assertResults(String task, TestGradleVersion testGradleVersion, boolean hasFailure, boolean hasBuildScan) {
|
||||||
|
def results = new JsonSlurper().parse(buildResultFile)
|
||||||
|
assert results['rootProject'] == ROOT_PROJECT_NAME
|
||||||
|
assert results['requestedTasks'] == task
|
||||||
|
assert results['gradleVersion'] == testGradleVersion.gradleVersion.version
|
||||||
|
assert results['buildFailed'] == hasFailure
|
||||||
|
assert results['buildScanUri'] == (hasBuildScan ? "${mockScansServer.address}s/${PUBLIC_BUILD_SCAN_ID}" : null)
|
||||||
|
}
|
||||||
|
|
||||||
|
private File getBuildResultFile() {
|
||||||
|
def buildResultsDir = new File(testProjectDir, '.build-results')
|
||||||
|
assert buildResultsDir.directory
|
||||||
|
assert buildResultsDir.listFiles().size() == 1
|
||||||
|
def resultsFile = buildResultsDir.listFiles()[0]
|
||||||
|
assert resultsFile.name.startsWith('github-step-id')
|
||||||
|
return resultsFile
|
||||||
|
}
|
||||||
|
}
|
@ -6,7 +6,7 @@ class TestProjectRootCapture extends BaseInitScriptTest {
|
|||||||
def initScript = 'project-root-capture.init.gradle'
|
def initScript = 'project-root-capture.init.gradle'
|
||||||
|
|
||||||
def "captures project root on #testGradleVersion"() {
|
def "captures project root on #testGradleVersion"() {
|
||||||
assumeTrue testGradleVersion.isCompatibleWithCurrentJvm()
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
when:
|
when:
|
||||||
run(['help'], initScript, testGradleVersion.gradleVersion)
|
run(['help'], initScript, testGradleVersion.gradleVersion)
|
||||||
@ -19,7 +19,7 @@ class TestProjectRootCapture extends BaseInitScriptTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def "captures project root on #testGradleVersion when build fails"() {
|
def "captures project root on #testGradleVersion when build fails"() {
|
||||||
assumeTrue testGradleVersion.isCompatibleWithCurrentJvm()
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
addFailingTaskToBuild()
|
addFailingTaskToBuild()
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ class TestProjectRootCapture extends BaseInitScriptTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def "captures project root on #testGradleVersion with --configuration-cache"() {
|
def "captures project root on #testGradleVersion with --configuration-cache"() {
|
||||||
assumeTrue testGradleVersion.isCompatibleWithCurrentJvm()
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
when:
|
when:
|
||||||
run(['help', '--configuration-cache'], initScript, testGradleVersion.gradleVersion)
|
run(['help', '--configuration-cache'], initScript, testGradleVersion.gradleVersion)
|
||||||
@ -54,7 +54,7 @@ class TestProjectRootCapture extends BaseInitScriptTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def "has no effect on #testVersion"() {
|
def "has no effect on #testVersion"() {
|
||||||
assumeTrue testVersion.isCompatibleWithCurrentJvm()
|
assumeTrue testVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
when:
|
when:
|
||||||
run(['help'], initScript, testVersion.gradleVersion)
|
run(['help'], initScript, testVersion.gradleVersion)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user