Skip to content

Commit

Permalink
DCPERF-430 Add VersionedOracleJdk
Browse files Browse the repository at this point in the history
  • Loading branch information
mgrzaslewicz committed Jun 4, 2024
1 parent 919cf60 commit 7e7f427
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ Dropping a requirement of a major version of a dependency is a new contract.

## [Unreleased]
[Unreleased]: https://github.com/atlassian/infrastructure/compare/release-4.28.3...master
### Added
- Add `VersionedOracleJdk` to support Oracle JDK 11+

## [4.28.3] - 2024-02-08
### Fixed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.atlassian.performance.tools.infrastructure.api.jvm

import com.atlassian.performance.tools.jvmtasks.api.ExponentialBackoff
import com.atlassian.performance.tools.jvmtasks.api.IdempotentAction
import com.atlassian.performance.tools.ssh.api.SshConnection
import java.time.Duration.ofSeconds


/**
* Supports Oracle JDK 11 and later.
*/
class VersionedOracleJdk private constructor(
private val majorVersion: String,
private val minorVersion: String,
private val patchVersion: String
) : VersionedJavaDevelopmentKit {
private val version = "$majorVersion.$minorVersion.$patchVersion"
private val downloadUrl =
"https://download.oracle.com/java/$majorVersion/archive/jdk-${version}_linux-x64_bin.tar.gz"
private val javaHome = "~/jdk-$version"

override fun getMajorVersion() = majorVersion.toInt()

override fun install(connection: SshConnection) {
IdempotentAction("download JDK $version") {
connection.execute(
cmd = "curl $downloadUrl > jdk-$version.tar.gz",
timeout = ofSeconds(120)
)
}.retry(3, ExponentialBackoff(ofSeconds(10)))
connection.execute("tar --extract --gunzip --file jdk-$version.tar.gz")
connection.execute("echo '${use()}' >> ~/.profile")
}

override fun use(): String = "export PATH=$javaHome/bin:\$PATH; export JAVA_HOME=$javaHome"

override fun command(options: String) = "$javaHome/bin/java $options"

override val jstatMonitoring = Jstat("$javaHome/bin/")

class Builder {
private var majorVersion: String = "17"
private var minorVersion: String = "0"
private var patchVersion: String = "11"

fun version(majorVersion: String, minorVersion: String, patchVersion: String) = apply {
this.majorVersion = majorVersion
this.minorVersion = minorVersion
this.patchVersion = patchVersion
}

fun build(): VersionedOracleJdk = VersionedOracleJdk(
majorVersion = majorVersion,
minorVersion = minorVersion,
patchVersion = patchVersion
)

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.atlassian.performance.tools.infrastructure.api.jvm

import org.junit.Test

class VersionedOracleJdkIT {

@Test
fun shouldSupportJstat() {
JstatSupport(VersionedOracleJdk.Builder().build()).shouldSupportJstat()
}

@Test
fun shouldGatherThreadDump() {
ThreadDumpTest(VersionedOracleJdk.Builder().build()).shouldGatherThreadDump()
}

@Test
fun shouldHaveJavaHomeSet() {
JdkSupport(VersionedOracleJdk.Builder().build()).shouldHaveJavaHomeSet("/jdk-17.0.11")
}

@Test
fun shouldHaveJavaHomeSetForJdk21() {
JdkSupport(
VersionedOracleJdk.Builder()
.version("21", "0", "2")
.build()
).shouldHaveJavaHomeSet("/jdk-21.0.2")
}

}

0 comments on commit 7e7f427

Please sign in to comment.