1
0
mirror of https://github.com/square/okhttp.git synced 2025-08-08 23:42:08 +03:00

Add CI tests for Loom (#7613)

This commit is contained in:
Yuri Schimke
2023-01-02 16:08:53 +10:00
committed by GitHub
parent a55e0090c9
commit 5f7762d9f1
4 changed files with 117 additions and 0 deletions

View File

@@ -413,6 +413,33 @@ jobs:
env: env:
API_LEVEL: ${{ matrix.api-level }} API_LEVEL: ${{ matrix.api-level }}
testloom:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'loom')
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Configure JDK
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: 19
- name: Configure JDK
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: 11
- name: Run Checks
uses: gradle/gradle-build-action@v2
with:
arguments: jvmTest -Dokhttp.platform=loom -Dtest.java.version=19
testandroidregression: testandroidregression:
runs-on: macos-latest runs-on: macos-latest

View File

@@ -140,6 +140,13 @@ subprojects {
"-XX:+HeapDumpOnOutOfMemoryError" "-XX:+HeapDumpOnOutOfMemoryError"
) )
if (platform == "loom") {
jvmArgs = jvmArgs!! + listOf(
"-Djdk.tracePinnedThread=full",
"--enable-preview"
)
}
val javaToolchains = project.extensions.getByType<JavaToolchainService>() val javaToolchains = project.extensions.getByType<JavaToolchainService>()
javaLauncher.set(javaToolchains.launcherFor { javaLauncher.set(javaToolchains.launcherFor {
languageVersion.set(JavaLanguageVersion.of(testJavaVersion)) languageVersion.set(JavaLanguageVersion.of(testJavaVersion))

View File

@@ -214,6 +214,8 @@ open class PlatformRule @JvmOverloads constructor(
fun isOpenJsse() = getPlatformSystemProperty() == OPENJSSE_PROPERTY fun isOpenJsse() = getPlatformSystemProperty() == OPENJSSE_PROPERTY
fun isLoom() = getPlatformSystemProperty() == LOOM_PROPERTY
fun isGraalVMImage() = TestUtil.isGraalVmImage fun isGraalVMImage() = TestUtil.isGraalVmImage
fun hasHttp2Support() = !isJdk8() fun hasHttp2Support() = !isJdk8()
@@ -250,6 +252,10 @@ open class PlatformRule @JvmOverloads constructor(
assumeTrue(getPlatformSystemProperty() == OPENJSSE_PROPERTY) assumeTrue(getPlatformSystemProperty() == OPENJSSE_PROPERTY)
} }
fun assumeLoom() {
assumeTrue(getPlatformSystemProperty() == LOOM_PROPERTY)
}
fun assumeHttp2Support() { fun assumeHttp2Support() {
assumeTrue(getPlatformSystemProperty() != JDK8_PROPERTY) assumeTrue(getPlatformSystemProperty() != JDK8_PROPERTY)
} }
@@ -282,6 +288,10 @@ open class PlatformRule @JvmOverloads constructor(
assumeTrue(getPlatformSystemProperty() != OPENJSSE_PROPERTY) assumeTrue(getPlatformSystemProperty() != OPENJSSE_PROPERTY)
} }
fun assumeNotLoom() {
assumeTrue(getPlatformSystemProperty() != LOOM_PROPERTY)
}
fun assumeNotCorretto() { fun assumeNotCorretto() {
assumeTrue(getPlatformSystemProperty() != CORRETTO_PROPERTY) assumeTrue(getPlatformSystemProperty() != CORRETTO_PROPERTY)
} }
@@ -346,6 +356,7 @@ open class PlatformRule @JvmOverloads constructor(
const val JDK8_PROPERTY = "jdk8" const val JDK8_PROPERTY = "jdk8"
const val OPENJSSE_PROPERTY = "openjsse" const val OPENJSSE_PROPERTY = "openjsse"
const val BOUNCYCASTLE_PROPERTY = "bouncycastle" const val BOUNCYCASTLE_PROPERTY = "bouncycastle"
const val LOOM_PROPERTY = "loom"
/** /**
* For whatever reason our BouncyCastle provider doesn't work with ECDSA keys. Just configure it * For whatever reason our BouncyCastle provider doesn't work with ECDSA keys. Just configure it

View File

@@ -0,0 +1,72 @@
/*
* Copyright (C) 2018 Square, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package okhttp3
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import mockwebserver3.MockResponse
import mockwebserver3.MockWebServer
import okhttp3.testing.PlatformRule
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.RegisterExtension
class LoomTest {
@JvmField
@RegisterExtension
val platform = PlatformRule()
@JvmField
@RegisterExtension
val clientTestRule = OkHttpClientTestRule()
private lateinit var server: MockWebServer
private lateinit var client: OkHttpClient
@BeforeEach
fun setUp(
server: MockWebServer,
) {
platform.assumeLoom()
this.server = server
client = clientTestRule.newClientBuilder()
.dispatcher(Dispatcher(newVirtualThreadPerTaskExecutor()))
.build()
}
private fun newVirtualThreadPerTaskExecutor(): ExecutorService {
return Executors::class.java.getMethod("newVirtualThreadPerTaskExecutor").invoke(null) as ExecutorService
}
@Test
fun testRequest() {
server.enqueue(MockResponse())
val request = Request(server.url("/"))
client.newCall(request).execute().use {
assertThat(it.code).isEqualTo(200)
}
}
@Test
fun testIfSupported() {
assertThat(platform.isLoom()).isTrue()
}
}