Skip to content
Merged
2 changes: 1 addition & 1 deletion .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ jobs:
cache-read-only: false

- name: Execute Gradle build
run: ./gradlew build
run: ${{ matrix.platform == 'windows-latest' && '.\gradlew.bat' || './gradlew' }} build
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,16 @@ class JavaagentJibExtensionFunctionalTest {
buildArgs: List<String>,
): BuildResult {
val helloWorldDir = File(functionalTestDir, "hello-world")
File("src/functionalTest/resources/hello-world-project/").copyRecursively(helloWorldDir)
File(
"src${File.separator}functionalTest${File.separator}resources${File.separator}hello-world-project",
).copyRecursively(helloWorldDir)
val simpleAgentTestDir = File(functionalTestDir, "simple-agent")
val simpleAgentBuildScript = simpleAgentTestDir.resolve("build.gradle.kts")
File("../simple-agent/").copyRecursively(simpleAgentTestDir)
File("..${File.separator}simple-agent").copyRecursively(simpleAgentTestDir)
// remove a constant from the above file
simpleAgentBuildScript.writeText(
simpleAgentBuildScript.readText().replace(
"id(\"com.ryandens.java-conventions\")\n",
"id(\"com.ryandens.java-conventions\")",
"",
),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.ryandens.javaagent

import org.apache.commons.text.StringEscapeUtils
import org.gradle.internal.jvm.Jvm
import org.gradle.internal.os.OperatingSystem
import org.gradle.testkit.runner.BuildResult
import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
Expand All @@ -25,6 +26,10 @@ class JavaagentPluginFunctionalTest {

private lateinit var helloWorldDir: File

private val isWindows = OperatingSystem.current().isWindows

private val scriptExtension = if (isWindows) ".bat" else ""

@BeforeTest
fun beforeEach() {
functionalTestDir = File("build", "functionalTest")
Expand Down Expand Up @@ -127,21 +132,17 @@ class JavaagentPluginFunctionalTest {
assertTrue(applicationDistribution.exists())

// verify the expected text was injected into the start script
val expectedDefaultJavaOpts = """
DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/agent-libs/simple-agent.jar -Xmx256m"
"""
val applicationDistributionScript =
File(functionalTestDir, "hello-world${File.separator}build${File.separator}scripts${File.separator}hello-world")
assertTrue(applicationDistributionScript.readText().contains(expectedDefaultJavaOpts))

/*
* TODO add support for windows
* val expectedWindowsDefaultJvmOpts = """
DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m"
File(functionalTestDir, "hello-world${File.separator}build${File.separator}scripts${File.separator}hello-world$scriptExtension")
if (isWindows) {
val expectedWindowsDefaultJvmOpts = """set DEFAULT_JVM_OPTS="-javaagent:%APP_HOME%\agent-libs\simple-agent.jar" "-Xmx256m""""
assertTrue(applicationDistributionScript.readText().contains(expectedWindowsDefaultJvmOpts))
} else {
val expectedDefaultJavaOpts = """
DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/agent-libs/simple-agent.jar -Xmx256m"
"""
val applicationDistributionScript = File(functionalTestDir, "hello-world/build/scripts/hello-world.bat")
assertTrue(applicationDistributionScript.readText().contains(expectedWindowsDefaultJvmOpts))
*/
assertTrue(applicationDistributionScript.readText().contains(expectedDefaultJavaOpts))
}

// verify the agent was added to the /lib/ dir of the distribution
assertTrue(
Expand Down Expand Up @@ -194,8 +195,12 @@ DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m"
assertTrue(applicationDistribution.exists())

val applicationDistributionScript =
File(functionalTestDir, "hello-world${File.separator}build${File.separator}scripts${File.separator}hello-world")
assertTrue(applicationDistributionScript.readText().contains("""DEFAULT_JVM_OPTS="-Xmx256m"""))
File(functionalTestDir, "hello-world${File.separator}build${File.separator}scripts${File.separator}hello-world$scriptExtension")
if (isWindows) {
assertTrue(applicationDistributionScript.readText().contains("""set DEFAULT_JVM_OPTS="-Xmx256m""""))
} else {
assertTrue(applicationDistributionScript.readText().contains("""DEFAULT_JVM_OPTS="-Xmx256m"""))
}

assertFalse(
File(
Expand Down Expand Up @@ -227,7 +232,7 @@ DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m"
""",
)

val commandLine = StringEscapeUtils.escapeJava(""".${File.separator}hello-world""")
val commandLine = StringEscapeUtils.escapeJava(""".${File.separator}hello-world$scriptExtension""")
val javaHome = StringEscapeUtils.escapeJava(Jvm.current().getJavaHome().toString())
helloWorldDir.resolve("build.gradle").writeText(
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class JavaagentAwareStartScriptGenerator(
details: JavaAppStartScriptGenerationDetails,
destination: Writer,
) {
inner.generateScript(details, Fake(destination, javaagentConfiguration, platform.pathSeparator))
inner.generateScript(details, Fake(destination, javaagentConfiguration, platform.pathSeparator, platform.appHomeVar))
}

private class FakeTransformer(
Expand All @@ -47,6 +47,7 @@ class JavaagentAwareStartScriptGenerator(
private val inner: Writer,
private val javaagentFiles: Provider<Set<File>>,
private val pathSeparator: String,
private val appHomeVar: String,
) : Writer() {
override fun close() {
inner.close()
Expand Down Expand Up @@ -79,7 +80,7 @@ class JavaagentAwareStartScriptGenerator(
"-javaagent:COM_RYANDENS_JAVAAGENTS_PLACEHOLDER.jar",
javaagentFiles.get().joinToString(
" ",
) { jar -> "-javaagent:\$APP_HOME${pathSeparator}agent-libs${pathSeparator}${jar.name}" },
) { jar -> "-javaagent:${appHomeVar}${pathSeparator}agent-libs${pathSeparator}${jar.name}" },
)
}
super.write(replace)
Expand Down
5 changes: 3 additions & 2 deletions plugin/src/main/kotlin/com/ryandens/javaagent/Platform.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ import org.gradle.api.resources.TextResource
enum class Platform(
val lineSeparator: String,
val pathSeparator: String,
val appHomeVar: String,
val templateBindingFactory: StartScriptTemplateBindingFactory,
val template: TextResource,
) {
UNIX("\n", "/", StartScriptTemplateBindingFactory.unix(), UnixStartScriptGenerator().template),
WINDOWS("\r\n", "\\", StartScriptTemplateBindingFactory.windows(), WindowsStartScriptGenerator().template),
UNIX("\n", "/", "\$APP_HOME", StartScriptTemplateBindingFactory.unix(), UnixStartScriptGenerator().template),
WINDOWS("\r\n", "\\", "%APP_HOME%", StartScriptTemplateBindingFactory.windows(), WindowsStartScriptGenerator().template),
}
Loading