Move to Java 11 for building and running (#4706)
* Move to use JDK11 containers for running
* Switch to JDK11 for build
* Remove timestamps from generated code to work with JDK11
* Update gatling to support JDK11
* Fix up gradle tests to work with later version and JDK11
* Allow for gradle to target correct JDK
Co-authored-by: Chetan Mehrotra <chetanm@apache.org>
diff --git a/.travis.yml b/.travis.yml
index 40d85f8..7d9cfd6 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,8 +18,13 @@
sudo: required
dist: xenial
-jdk: openjdk8
-language: java
+
+language: scala
+scala:
+ - 2.12.7
+
+jdk:
+ - openjdk11
services:
- docker
diff --git a/common/scala/Dockerfile b/common/scala/Dockerfile
index 6aa9637..8f52eff 100644
--- a/common/scala/Dockerfile
+++ b/common/scala/Dockerfile
@@ -14,8 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-
-FROM adoptopenjdk/openjdk8:x86_64-alpine-jdk8u172-b11
+FROM adoptopenjdk/openjdk11:x86_64-alpine-jdk-11.0.3_7
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
diff --git a/tests/performance/gatling_tests/build.gradle b/tests/performance/gatling_tests/build.gradle
index 04c1b05..2600776 100644
--- a/tests/performance/gatling_tests/build.gradle
+++ b/tests/performance/gatling_tests/build.gradle
@@ -16,11 +16,18 @@
*/
plugins {
- id 'com.github.lkishalmi.gatling' version '0.7.2'
+ id 'com.github.lkishalmi.gatling' version '3.2.1'
id 'eclipse'
id 'scala'
}
+sourceSets {
+ gatling {
+ scala.srcDirs = ["src/gatling/scala/"]
+ resources.srcDirs = ["src/gatling/resources/"]
+ }
+}
+
dependencies {
gatling "io.spray:spray-json_${gradle.scala.depVersion}:1.3.4"
gatling "commons-io:commons-io:2.6"
diff --git a/tests/performance/gatling_tests/build.sh b/tests/performance/gatling_tests/build.sh
index 02cd3fa..8c60dea 100755
--- a/tests/performance/gatling_tests/build.sh
+++ b/tests/performance/gatling_tests/build.sh
@@ -25,13 +25,7 @@
exit 0
fi
-# need java 8 to build java actions since that's the version of the runtime currently
-jv=$(java -version 2>&1 | head -1 | awk -F'"' '{print $2}')
-if [[ $jv == 1.8.* ]]; then
- echo "java version is $jv (ok)"
- (cd src/gatling/resources/data/src/java && "$GRADLEW_PATH/gradlew" build && cp build/libs/gatling-1.0.jar ../../javaAction.jar)
- touch .built
-else
- echo "java version is $jv (not ok)"
- echo "skipping java actions"
-fi
+# Let gradle set the source and target versions to let it sort out if it can produce
+# byte code that is compatible with java8.
+(cd src/gatling/resources/data/src/java && "$GRADLEW_PATH/gradlew" build && cp build/libs/gatling-1.0.jar ../../javaAction.jar)
+touch .built
diff --git a/tests/performance/gatling_tests/src/gatling/resources/data/src/java/build.gradle b/tests/performance/gatling_tests/src/gatling/resources/data/src/java/build.gradle
index c6df5f6..390d17d 100644
--- a/tests/performance/gatling_tests/src/gatling/resources/data/src/java/build.gradle
+++ b/tests/performance/gatling_tests/src/gatling/resources/data/src/java/build.gradle
@@ -19,6 +19,11 @@
id 'java'
}
+compileJava {
+ sourceCompatibility = '1.8'
+ targetCompatibility = '1.8'
+}
+
version = '1.0'
repositories {
diff --git a/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/BlockingInvokeOneActionSimulation.scala b/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/BlockingInvokeOneActionSimulation.scala
index 4fb2540..fc053d6 100644
--- a/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/BlockingInvokeOneActionSimulation.scala
+++ b/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/BlockingInvokeOneActionSimulation.scala
@@ -23,8 +23,7 @@
import org.apache.openwhisk.extension.whisk.Predef._
import io.gatling.core.Predef._
import io.gatling.core.structure.ScenarioBuilder
-import io.gatling.core.util.Resource
-import org.apache.commons.io.FileUtils
+import io.gatling.core.util.ClasspathPackagedResource
import scala.concurrent.duration._
@@ -51,17 +50,15 @@
val async = sys.env.getOrElse("ASYNC", "false").toBoolean
val actionName = "testActionForBlockingInvokeOneAction"
- val actionfile = if (async) "nodeJSAsyncAction.js" else "nodeJSAction.js"
+ val actionfile = if (async) "/data/nodeJSAsyncAction.js" else "/data/nodeJSAction.js"
// Define scenario
val test: ScenarioBuilder = scenario(s"Invoke one ${if (async) "async" else "sync"} action blocking")
.doIf(_.userId == 1) {
- exec(
- openWhisk("Create action")
- .authenticate(uuid, key)
- .action(actionName)
- .create(FileUtils
- .readFileToString(Resource.body(actionfile).get.file, StandardCharsets.UTF_8)))
+ exec(openWhisk("Create action")
+ .authenticate(uuid, key)
+ .action(actionName)
+ .create(ClasspathPackagedResource(actionfile, getClass.getResource(actionfile)).string(StandardCharsets.UTF_8)))
}
.rendezVous(connections)
.during(5.seconds) {
diff --git a/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/ColdBlockingInvokeSimulation.scala b/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/ColdBlockingInvokeSimulation.scala
index 81acdb0..610c8ed 100644
--- a/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/ColdBlockingInvokeSimulation.scala
+++ b/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/ColdBlockingInvokeSimulation.scala
@@ -24,8 +24,7 @@
import io.gatling.core.Predef._
import io.gatling.core.session.Expression
import io.gatling.core.structure.ScenarioBuilder
-import io.gatling.core.util.Resource
-import org.apache.commons.io.FileUtils
+import io.gatling.core.util.ClasspathPackagedResource
import scala.concurrent.duration._
@@ -47,7 +46,7 @@
// Generate the OpenWhiskProtocol
val openWhiskProtocol: OpenWhiskProtocolBuilder = openWhisk.apiHost(host)
- val feeder = csv("users.csv").queue
+ val feeder = csv("data/users.csv").queue
// Define scenario
val test: ScenarioBuilder = scenario("Invoke one action blocking")
@@ -84,8 +83,8 @@
}
private def actionCode = {
- val code = FileUtils
- .readFileToString(Resource.body("nodeJSAction.js").get.file, StandardCharsets.UTF_8)
+ val code = ClasspathPackagedResource("nodeJSAction.js", getClass.getResource("/data/nodeJSAction.js"))
+ .string(StandardCharsets.UTF_8)
//Pad the code with empty space to increase the stored code size
if (codeSize > 0) code + " " * codeSize else code
}
diff --git a/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/LatencySimulation.scala b/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/LatencySimulation.scala
index 34eeee2..c3c4d79 100644
--- a/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/LatencySimulation.scala
+++ b/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/LatencySimulation.scala
@@ -23,8 +23,7 @@
import org.apache.openwhisk.extension.whisk.Predef._
import io.gatling.core.Predef._
import io.gatling.core.session.Expression
-import io.gatling.core.util.Resource
-import org.apache.commons.io.FileUtils
+import io.gatling.core.util.ClasspathPackagedResource
import scala.concurrent.duration._
@@ -65,14 +64,15 @@
* `main` is only needed for java. This is the name of the class where the main method is located.
*/
val actions: Seq[(String, String, String, String)] = Map(
- "nodejs:default" -> (FileUtils
- .readFileToString(Resource.body("nodeJSAction.js").get.file, StandardCharsets.UTF_8), "latencyTest_node", ""),
- "python:default" -> (FileUtils
- .readFileToString(Resource.body("pythonAction.py").get.file, StandardCharsets.UTF_8), "latencyTest_python", ""),
- "swift:default" -> (FileUtils
- .readFileToString(Resource.body("swiftAction.swift").get.file, StandardCharsets.UTF_8), "latencyTest_swift", ""),
- "java:default" -> (Base64.getEncoder.encodeToString(
- FileUtils.readFileToByteArray(Resource.body("javaAction.jar").get.file)), "latencyTest_java", "JavaAction"))
+ "nodejs:default" -> (ClasspathPackagedResource("nodeJSAction.js", getClass.getResource("/data/nodeJSAction.js"))
+ .string(StandardCharsets.UTF_8), "latencyTest_node", ""),
+ "python:default" -> (ClasspathPackagedResource("pythonAction.py", getClass.getResource("/data/pythonAction.py"))
+ .string(StandardCharsets.UTF_8), "latencyTest_python", ""),
+ "swift:default" -> (ClasspathPackagedResource("swiftAction.swift", getClass.getResource("/data/swiftAction.swift"))
+ .string(StandardCharsets.UTF_8), "latencyTest_swift", ""),
+ "java:default" -> (Base64.getEncoder.encodeToString(ClasspathPackagedResource(
+ "javaAction.jar",
+ getClass.getResource("/data/javaAction.jar")).bytes), "latencyTest_java", "JavaAction"))
.filterNot(e => excludedKinds.contains(e._1))
.map {
case (kind, (code, name, main)) =>
diff --git a/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/extension/whisk/OpenWhiskProtocolBuilder.scala b/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/extension/whisk/OpenWhiskProtocolBuilder.scala
index a3564e9..8a0ac13 100644
--- a/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/extension/whisk/OpenWhiskProtocolBuilder.scala
+++ b/tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/extension/whisk/OpenWhiskProtocolBuilder.scala
@@ -20,9 +20,9 @@
import java.net.URL
import com.softwaremill.quicklens._
-import io.gatling.core.Predef._
import io.gatling.core.config.GatlingConfiguration
import io.gatling.http.Predef._
+import io.gatling.core.Predef._
import io.gatling.http.protocol.HttpProtocol
import scala.language.implicitConversions
@@ -72,7 +72,7 @@
/** build the http protocol with the parameters provided by the openwhisk-protocol. */
def build(implicit configuration: GatlingConfiguration) = {
http
- .baseURL(s"${protocol.protocol}://${protocol.apiHost}:${protocol.port}")
+ .baseUrl(s"${protocol.protocol}://${protocol.apiHost}:${protocol.port}")
.contentTypeHeader("application/json")
.userAgentHeader("gatlingLoadTest")
.warmUp("http://google.com")
diff --git a/tests/src/test/resources/swagger-config.json b/tests/src/test/resources/swagger-config.json
index f8696d3..3bb7d7e 100644
--- a/tests/src/test/resources/swagger-config.json
+++ b/tests/src/test/resources/swagger-config.json
@@ -1,4 +1,5 @@
{
"library": "okhttp-gson",
- "dateLibrary": "java8"
+ "dateLibrary": "java8",
+ "hideGenerationTimestamp": true
}