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

OpenJSSE Platform support (#5369)

Adds support for OpenJSSE when registered as the first security provider.
This commit is contained in:
Yuri Schimke
2019-08-18 12:03:51 +03:00
committed by GitHub
parent a1994dab34
commit 7cf508a30b
21 changed files with 267 additions and 65 deletions

View File

@@ -3,6 +3,7 @@ dependencies {
api deps.junit
api deps.assertj
api deps.conscrypt
api deps.openjsse
compileOnly deps.jsr305
}

View File

@@ -15,12 +15,16 @@
*/
package okhttp3;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import okhttp3.internal.http2.Header;
import static org.junit.Assume.assumeNoException;
public final class TestUtil {
public static final InetSocketAddress UNREACHABLE_ADDRESS
= new InetSocketAddress("198.51.100.1", 8080);
@@ -52,4 +56,12 @@ public final class TestUtil {
Thread.sleep(100);
System.runFinalization();
}
public static void assumeNetwork() {
try {
InetAddress.getByName("www.google.com");
} catch (UnknownHostException uhe) {
assumeNoException(uhe);
}
}
}

View File

@@ -18,6 +18,7 @@ package okhttp3.testing
import okhttp3.internal.platform.ConscryptPlatform
import okhttp3.internal.platform.Jdk8WithJettyBootPlatform
import okhttp3.internal.platform.Jdk9Platform
import okhttp3.internal.platform.OpenJSSEPlatform
import okhttp3.internal.platform.Platform
import org.conscrypt.Conscrypt
import org.hamcrest.BaseMatcher
@@ -34,6 +35,7 @@ import org.junit.Assume.assumeTrue
import org.junit.AssumptionViolatedException
import org.junit.rules.TestRule
import org.junit.runners.model.Statement
import org.openjsse.net.ssl.OpenJSSE
import java.security.Security
/**
@@ -57,6 +59,8 @@ open class PlatformRule @JvmOverloads constructor(
try {
setupPlatform()
System.err.println("Running with ${Platform.get().javaClass.simpleName}")
base.evaluate()
} catch (e: AssumptionViolatedException) {
throw e
@@ -95,6 +99,10 @@ open class PlatformRule @JvmOverloads constructor(
expectFailure(platformMatches(CONSCRYPT_PROPERTY))
}
fun expectFailureOnOpenJSSEPlatform() {
expectFailure(platformMatches(OPENJSSE_PROPERTY))
}
fun expectFailureFromJdkVersion(majorVersion: Int) {
expectFailure(fromMajor(majorVersion))
}
@@ -118,7 +126,7 @@ open class PlatformRule @JvmOverloads constructor(
fun fromMajor(version: Int): Matcher<PlatformVersion> {
return object : TypeSafeMatcher<PlatformVersion>() {
override fun describeTo(description: org.hamcrest.Description) {
override fun describeTo(description: Description) {
description.appendText("JDK with version from $version")
}
@@ -171,6 +179,11 @@ open class PlatformRule @JvmOverloads constructor(
JDK9_PROPERTY))
}
fun assumeOpenJSSE() {
assumeThat(getPlatformSystemProperty(), equalTo(
OPENJSSE_PROPERTY))
}
fun assumeJdk8() {
assumeThat(getPlatformSystemProperty(), equalTo(
JDK8_PROPERTY))
@@ -206,6 +219,11 @@ open class PlatformRule @JvmOverloads constructor(
JDK8_ALPN_PROPERTY))
}
fun assumeNotOpenJSSE() {
assumeThat(getPlatformSystemProperty(), not(
OPENJSSE_PROPERTY))
}
fun assumeNotHttp2Support() {
assumeThat(getPlatformSystemProperty(), equalTo(
JDK8_PROPERTY))
@@ -221,6 +239,7 @@ open class PlatformRule @JvmOverloads constructor(
const val JDK9_PROPERTY = "jdk9"
const val JDK8_ALPN_PROPERTY = "jdk8alpn"
const val JDK8_PROPERTY = "jdk8"
const val OPENJSSE_PROPERTY = "openjsse"
init {
if (getPlatformSystemProperty() == CONSCRYPT_PROPERTY && Security.getProviders()[0].name != "Conscrypt") {
@@ -238,7 +257,15 @@ open class PlatformRule @JvmOverloads constructor(
if (isAlpnBootEnabled()) {
System.err.println("Warning: ALPN Boot enabled unintentionally")
}
} else if (getPlatformSystemProperty() == OPENJSSE_PROPERTY && Security.getProviders()[0].name != "OpenJSSE") {
if (!OpenJSSEPlatform.isSupported) {
System.err.println("Warning: OpenJSSE not available")
}
Security.insertProviderAt(OpenJSSE(), 1)
}
Platform.resetForTests()
}
@JvmStatic
@@ -249,6 +276,7 @@ open class PlatformRule @JvmOverloads constructor(
if (property == null) {
property = when (Platform.get()) {
is ConscryptPlatform -> CONSCRYPT_PROPERTY
is OpenJSSEPlatform -> OPENJSSE_PROPERTY
is Jdk8WithJettyBootPlatform -> CONSCRYPT_PROPERTY
is Jdk9Platform -> JDK9_PROPERTY
else -> JDK8_PROPERTY
@@ -261,6 +289,9 @@ open class PlatformRule @JvmOverloads constructor(
@JvmStatic
fun conscrypt() = PlatformRule(CONSCRYPT_PROPERTY)
@JvmStatic
fun openjsse() = PlatformRule(OPENJSSE_PROPERTY)
@JvmStatic
fun jdk9() = PlatformRule(JDK9_PROPERTY)