diff --git a/resource-managers/kubernetes/core/pom.xml b/resource-managers/kubernetes/core/pom.xml
index f9711d8c81b4b..1ef1903f7ff41 100644
--- a/resource-managers/kubernetes/core/pom.xml
+++ b/resource-managers/kubernetes/core/pom.xml
@@ -47,6 +47,64 @@
test
+
+
+ org.eclipse.jetty
+ jetty-plus
+ compile
+
+
+ org.eclipse.jetty
+ jetty-security
+ compile
+
+
+ org.eclipse.jetty
+ jetty-util
+ compile
+
+
+ org.eclipse.jetty
+ jetty-server
+ compile
+
+
+ org.eclipse.jetty
+ jetty-http
+ compile
+
+
+ org.eclipse.jetty
+ jetty-continuation
+ compile
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ compile
+
+
+ org.eclipse.jetty
+ jetty-proxy
+ compile
+
+
+ org.eclipse.jetty
+ jetty-client
+ compile
+
+
+ org.eclipse.jetty
+ jetty-servlets
+ compile
+
+
+ javax.servlet
+ javax.servlet-api
+ ${javaxservlet.version}
+
+
io.fabric8
kubernetes-client
diff --git a/resource-managers/kubernetes/core/src/test/scala/org/apache/spark/deploy/rest/k8s/ResourceStagingServerSuite.scala b/resource-managers/kubernetes/core/src/test/scala/org/apache/spark/deploy/rest/k8s/ResourceStagingServerSuite.scala
index 4e6b4abfb6874..6b06efaaa6259 100644
--- a/resource-managers/kubernetes/core/src/test/scala/org/apache/spark/deploy/rest/k8s/ResourceStagingServerSuite.scala
+++ b/resource-managers/kubernetes/core/src/test/scala/org/apache/spark/deploy/rest/k8s/ResourceStagingServerSuite.scala
@@ -75,22 +75,43 @@ class ResourceStagingServerSuite extends SparkFunSuite with BeforeAndAfter with
runUploadAndDownload(SSLOptions(), serverPort)
}
+ /**
+ * This test will run only if the current classpath does not contain
+ * the shaded jetty classes.
+ *
+ * If you rely on the spark-core.jar in your classpath, this test will not run.
+ *
+ * If you rely on the spark-core module (without shading), this test will be run.
+ *
+ * @see https://github.com/apache-spark-on-k8s/spark/issues/463
+ *
+ */
test("Enable SSL on the server") {
- val keyStoreAndTrustStore = SSLUtils.generateKeyStoreTrustStorePair(
- ipAddress = "127.0.0.1",
- keyStorePassword = "keyStore",
- keyPassword = "key",
- trustStorePassword = "trustStore")
- val sslOptions = SSLOptions(
- enabled = true,
- keyStore = Some(keyStoreAndTrustStore.keyStore),
- keyStorePassword = Some("keyStore"),
- keyPassword = Some("key"),
- trustStore = Some(keyStoreAndTrustStore.trustStore),
- trustStorePassword = Some("trustStore"))
- sslOptionsProvider.setOptions(sslOptions)
- val serverPort = startServer()
- runUploadAndDownload(sslOptions, serverPort)
+
+ def testEnableSslOnServer(): Unit = {
+ val keyStoreAndTrustStore = SSLUtils.generateKeyStoreTrustStorePair(
+ ipAddress = "127.0.0.1",
+ keyStorePassword = "keyStore",
+ keyPassword = "key",
+ trustStorePassword = "trustStore")
+ val sslOptions = SSLOptions(
+ enabled = true,
+ keyStore = Some(keyStoreAndTrustStore.keyStore),
+ keyStorePassword = Some("keyStore"),
+ keyPassword = Some("key"),
+ trustStore = Some(keyStoreAndTrustStore.trustStore),
+ trustStorePassword = Some("trustStore"))
+ sslOptionsProvider.setOptions(sslOptions)
+ val serverPort = startServer()
+ runUploadAndDownload(sslOptions, serverPort)
+ }
+
+ try {
+ Utils.classForName("org.spark_project.jetty.util.ssl.SslContextFactory")
+ }
+ catch {
+ case e: ClassNotFoundException => testEnableSslOnServer()
+ }
}
private def runUploadAndDownload(sslOptions: SSLOptions, serverPort: Int): Unit = {