Browse Source

Convert servlet tests to docker (#3395)

* Convert servlet tests to docker

* Re-enable servlet tests in .travis.yml
Michael Hixson 7 years ago
parent
commit
32dd06a4a3
32 changed files with 213 additions and 150 deletions
  1. 2 2
      .travis.yml
  2. 9 9
      frameworks/Java/servlet/README.md
  3. 15 58
      frameworks/Java/servlet/benchmark_config.json
  4. 8 0
      frameworks/Java/servlet/servlet-afterburner.dockerfile
  5. 8 0
      frameworks/Java/servlet/servlet-cjs.dockerfile
  6. 8 0
      frameworks/Java/servlet/servlet-mysql.dockerfile
  7. 8 0
      frameworks/Java/servlet/servlet-postgresql.dockerfile
  8. 8 0
      frameworks/Java/servlet/servlet.dockerfile
  9. 0 9
      frameworks/Java/servlet/servlet3-async.sh
  10. 0 9
      frameworks/Java/servlet/servlet3-sync.sh
  11. 0 8
      frameworks/Java/servlet/setup.sh
  12. 0 8
      frameworks/Java/servlet/setup_afterburner.sh
  13. 0 8
      frameworks/Java/servlet/setup_cjs.sh
  14. 0 8
      frameworks/Java/servlet/setup_mysql.sh
  15. 0 8
      frameworks/Java/servlet/setup_postgresql.sh
  16. 0 19
      frameworks/Java/servlet/source_code
  17. 4 4
      frameworks/Java/servlet3/README.md
  18. 41 0
      frameworks/Java/servlet3/benchmark_config.json
  19. 0 0
      frameworks/Java/servlet3/pom.xml
  20. 74 0
      frameworks/Java/servlet3/server.xml
  21. 9 0
      frameworks/Java/servlet3/servlet3-sync.dockerfile
  22. 9 0
      frameworks/Java/servlet3/servlet3.dockerfile
  23. 0 0
      frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/HelloMessage.java
  24. 0 0
      frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/Helper.java
  25. 0 0
      frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/World.java
  26. 0 0
      frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/async/JSON.java
  27. 0 0
      frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/async/Plaintext.java
  28. 0 0
      frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/sync/JSON.java
  29. 0 0
      frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/sync/Plaintext.java
  30. 0 0
      frameworks/Java/servlet3/src/main/resources/logback.xml
  31. 0 0
      frameworks/Java/servlet3/src/main/webapp/jsp/error.jsp
  32. 10 0
      toolset/setup/docker/webservers/tomcat.dockerfile

+ 2 - 2
.travis.yml

@@ -97,7 +97,7 @@ env:
      - "TESTDIR=Java/rapidoid"
      - "TESTDIR=Java/restexpress"
      - "TESTDIR=Java/revenj-jvm"
-    # - "TESTDIR=Java/servlet"
+     - "TESTDIR=Java/servlet"
      - "TESTDIR=Java/spark"
      - "TESTDIR=Java/spring"
      - "TESTDIR=Java/tapestry"
@@ -235,4 +235,4 @@ script:
 cache:
   directories:
     - $HOME/.m2/repository
-    - $HOME/.cache/pip
+    - $HOME/.cache/pip

+ 9 - 9
frameworks/Java/servlet/README.md

@@ -42,24 +42,24 @@ Please confirm the versions data with the latest install scripts of TFB project.
 
 ### Default Maven profile
 
- * Plaintext - `http://localhost:8080/servlet/plaintext`
- * JSON - `http://localhost:8080/servlet/json`
+ * Plaintext - `http://localhost:8080/plaintext`
+ * JSON - `http://localhost:8080/json`
 
 ### `afterburner` Maven profile
 
- * JSON - `http://localhost:8080/servlet/json`
+ * JSON - `http://localhost:8080/json`
 
 ### `cjs` Maven profile
 
- * JSON - `http://localhost:8080/servlet/json`
+ * JSON - `http://localhost:8080/json`
 
 ### `mysql` and `postgresql` Maven profiles
 
- * DB - `http://localhost:8080/servlet/db`
- * Queries - `http://localhost:8080/servlet/db?queries=`
- * Updates - `http://localhost:8080/servlet/update?queries=`
- * Fortune - `http://localhost:8080/servlet/fortunes`
+ * DB - `http://localhost:8080/db`
+ * Queries - `http://localhost:8080/db?queries=`
+ * Updates - `http://localhost:8080/update?queries=`
+ * Fortune - `http://localhost:8080/fortunes`
 
 ### `postgresql` Maven profile
  
- * Cache - `http://localhost:8080/servlet/cached-worlds`
+ * Cache - `http://localhost:8080/cached-worlds`

+ 15 - 58
frameworks/Java/servlet/benchmark_config.json

@@ -2,9 +2,8 @@
   "framework": "servlet",
   "tests": [{
     "default": {
-      "setup_file": "setup",
-      "json_url": "/servlet/json",
-      "plaintext_url": "/servlet/plaintext",
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -22,8 +21,7 @@
       "versus": "servlet"
     },
     "afterburner": {
-      "setup_file": "setup_afterburner",
-      "json_url": "/servlet/json",
+      "json_url": "/json",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -41,8 +39,7 @@
       "versus": "servlet"
     },
     "cjs": {
-      "setup_file": "setup_cjs",
-      "json_url": "/servlet/json",
+      "json_url": "/json",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -59,12 +56,11 @@
       "notes": "Jackson with custom serialization",
       "versus": "servlet"
     },
-    "raw": {
-      "setup_file": "setup_mysql",
-      "db_url": "/servlet/db",
-      "query_url": "/servlet/queries?queries=",
-      "fortune_url": "/servlet/fortunes",
-      "update_url": "/servlet/update?queries=",
+    "mysql": {
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/update?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -80,13 +76,12 @@
       "display_name": "servlet",
       "notes": ""
     },
-    "postgres-raw": {
-      "setup_file": "setup_postgresql",
-      "db_url": "/servlet/db",
-      "query_url": "/servlet/queries?queries=",
-      "cached_query_url": "/servlet/cached-worlds?queries=",
-      "fortune_url": "/servlet/fortunes",
-      "update_url": "/servlet/update?queries=",
+    "postgresql": {
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "cached_query_url": "/cached-worlds?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/update?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -102,44 +97,6 @@
       "display_name": "servlet",
       "notes": "",
       "versus": "servlet-raw"
-    },
-    "async-tomcat": {
-      "setup_file": "servlet3-async",
-      "json_url": "/servlet3/json",
-      "plaintext_url": "/servlet3/plaintext",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Platform",
-      "database": "None",
-      "framework": "None",
-      "language": "Java",
-      "orm": "Raw",
-      "platform": "Servlet",
-      "webserver": "Tomcat",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "servlet3",
-      "notes": "Servlet 3.1 Async I/O",
-      "versus": "servlet"
-    },
-    "sync-tomcat": {
-      "setup_file": "servlet3-sync",
-      "json_url": "/servlet3/json",
-      "plaintext_url": "/servlet3/plaintext",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification" : "Platform",
-      "database": "None",
-      "framework": "None",
-      "language": "Java",
-      "orm": "Raw",
-      "platform": "Servlet",
-      "webserver": "Tomcat",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "servlet3",
-      "notes": "",
-      "versus": "servlet"
     }
   }]
 }

+ 8 - 0
frameworks/Java/servlet/servlet-afterburner.dockerfile

@@ -0,0 +1,8 @@
+FROM tfb/maven:latest as maven
+ADD ./ /servlet
+WORKDIR /servlet
+RUN mvn clean compile war:war -P afterburner
+
+FROM tfb/resin:latest
+COPY --from=maven /servlet/target/servlet.war /var/resin/webapps/ROOT.war
+CMD resinctl console

+ 8 - 0
frameworks/Java/servlet/servlet-cjs.dockerfile

@@ -0,0 +1,8 @@
+FROM tfb/maven:latest as maven
+ADD ./ /servlet
+WORKDIR /servlet
+RUN mvn clean compile war:war -P cjs
+
+FROM tfb/resin:latest
+COPY --from=maven /servlet/target/servlet.war /var/resin/webapps/ROOT.war
+CMD resinctl console

+ 8 - 0
frameworks/Java/servlet/servlet-mysql.dockerfile

@@ -0,0 +1,8 @@
+FROM tfb/maven:latest as maven
+ADD ./ /servlet
+WORKDIR /servlet
+RUN mvn clean compile war:war -P mysql
+
+FROM tfb/resin:latest
+COPY --from=maven /servlet/target/servlet.war /var/resin/webapps/ROOT.war
+CMD resinctl console

+ 8 - 0
frameworks/Java/servlet/servlet-postgresql.dockerfile

@@ -0,0 +1,8 @@
+FROM tfb/maven:latest as maven
+ADD ./ /servlet
+WORKDIR /servlet
+RUN mvn clean compile war:war -P postgresql
+
+FROM tfb/resin:latest
+COPY --from=maven /servlet/target/servlet.war /var/resin/webapps/ROOT.war
+CMD resinctl console

+ 8 - 0
frameworks/Java/servlet/servlet.dockerfile

@@ -0,0 +1,8 @@
+FROM tfb/maven:latest as maven
+ADD ./ /servlet
+WORKDIR /servlet
+RUN mvn clean compile war:war
+
+FROM tfb/resin:latest
+COPY --from=maven /servlet/target/servlet.war /var/resin/webapps/ROOT.war
+CMD resinctl console

+ 0 - 9
frameworks/Java/servlet/servlet3-async.sh

@@ -1,9 +0,0 @@
-#!/bin/bash
-
-fw_depends java tomcat maven
-
-cd servlet3
-mvn clean compile war:war
-rm -rf $CATALINA_HOME/webapps/*
-cp target/servlet3.war $CATALINA_HOME/webapps
-$CATALINA_HOME/bin/startup.sh

+ 0 - 9
frameworks/Java/servlet/servlet3-sync.sh

@@ -1,9 +0,0 @@
-#!/bin/bash
-
-fw_depends java tomcat maven
-
-cd servlet3
-mvn clean compile war:war -P sync
-rm -rf $CATALINA_HOME/webapps/*
-cp target/servlet3.war $CATALINA_HOME/webapps
-$CATALINA_HOME/bin/startup.sh

+ 0 - 8
frameworks/Java/servlet/setup.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends java resin maven
-
-mvn clean install
-rm -rf $RESIN_HOME/webapps/*
-cp target/servlet.war $RESIN_HOME/webapps/
-resinctl console

+ 0 - 8
frameworks/Java/servlet/setup_afterburner.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends java resin maven
-
-mvn clean compile war:war -P afterburner
-rm -rf $RESIN_HOME/webapps/*
-cp target/servlet.war $RESIN_HOME/webapps/
-resinctl console

+ 0 - 8
frameworks/Java/servlet/setup_cjs.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends java resin maven
-
-mvn clean compile war:war -P cjs
-rm -rf $RESIN_HOME/webapps/*
-cp target/servlet.war $RESIN_HOME/webapps/
-resinctl console

+ 0 - 8
frameworks/Java/servlet/setup_mysql.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends java resin maven mysql
-
-mvn clean compile war:war -P mysql
-rm -rf $RESIN_HOME/webapps/*
-cp target/servlet.war $RESIN_HOME/webapps/
-resinctl console

+ 0 - 8
frameworks/Java/servlet/setup_postgresql.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends java resin maven postgresql
-
-mvn clean compile war:war -P postgresql
-rm -rf $RESIN_HOME/webapps/*
-cp target/servlet.war $RESIN_HOME/webapps/
-resinctl console

+ 0 - 19
frameworks/Java/servlet/source_code

@@ -1,19 +0,0 @@
-./servlet/src/main/
-./servlet/src/main/webapp
-./servlet/src/main/webapp/WEB-INF
-./servlet/src/main/webapp/WEB-INF/resin-web.xml
-./servlet/src/main/webapp/WEB-INF/web.xml
-./servlet/src/main/webapp/WEB-INF/jsp
-./servlet/src/main/webapp/WEB-INF/jsp/fortunes.jsp
-./servlet/src/main/java
-./servlet/src/main/java/hello
-./servlet/src/main/java/hello/DbPoolServlet.java
-./servlet/src/main/java/hello/FortunesServlet.java
-./servlet/src/main/java/hello/Common.java
-./servlet/src/main/java/hello/PostgresUpdateServlet.java
-./servlet/src/main/java/hello/PostgresServlet.java
-./servlet/src/main/java/hello/JsonServlet.java
-./servlet/src/main/java/hello/PlaintextServlet.java
-./servlet/src/main/java/hello/UpdateServlet.java
-./servlet/src/main/java/hello/World.java
-./servlet/src/main/java/hello/Fortune.java

+ 4 - 4
frameworks/Java/servlet/servlet3/README.md → frameworks/Java/servlet3/README.md

@@ -25,10 +25,10 @@ Currently implemented test types are Plaintext and JSON. Their implementation co
 
 The `async` profile is activated by default.
 
-* Plaintext - `http://localhost:8080/servlet3/plaintext`
-* JSON - `http://localhost:8080/servlet3/json`
+* Plaintext - `http://localhost:8080/plaintext`
+* JSON - `http://localhost:8080/json`
 
 ### `sync` Maven profile
 
-* Plaintext - `http://localhost:8080/servlet3/plaintext`
-* JSON - `http://localhost:8080/servlet3/json`
+* Plaintext - `http://localhost:8080/plaintext`
+* JSON - `http://localhost:8080/json`

+ 41 - 0
frameworks/Java/servlet3/benchmark_config.json

@@ -0,0 +1,41 @@
+{
+  "framework": "servlet3",
+  "tests": [{
+    "default": {
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "None",
+      "framework": "None",
+      "language": "Java",
+      "orm": "Raw",
+      "platform": "Servlet",
+      "webserver": "Tomcat",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "servlet3",
+      "notes": "Servlet 3.1 Async I/O",
+      "versus": "servlet"
+    },
+    "sync": {
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification" : "Platform",
+      "database": "None",
+      "framework": "None",
+      "language": "Java",
+      "orm": "Raw",
+      "platform": "Servlet",
+      "webserver": "Tomcat",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "servlet3",
+      "notes": "",
+      "versus": "servlet"
+    }
+  }]
+}

+ 0 - 0
frameworks/Java/servlet/servlet3/pom.xml → frameworks/Java/servlet3/pom.xml


+ 74 - 0
frameworks/Java/servlet3/server.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<Server port="8005" shutdown="SHUTDOWN">
+  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
+
+  <!--APR library loader. Documentation at /docs/apr.html -->
+  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
+
+  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
+  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+
+  <!-- Global JNDI resources
+       Documentation at /docs/jndi-resources-howto.html
+  -->
+  <GlobalNamingResources>
+    <!-- Editable user database that can also be used by
+         UserDatabaseRealm to authenticate users
+    -->
+    <Resource name="UserDatabase" auth="Container"
+              type="org.apache.catalina.UserDatabase"
+              description="User database that can be updated and saved"
+              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
+              pathname="conf/tomcat-users.xml" />
+  </GlobalNamingResources>
+
+  <Service name="Catalina">
+    <!--The connectors can use a shared executor, you can define one or more named thread pools
+    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
+        maxThreads="250" minSpareThreads="4"/>-->
+
+    <!-- A "Connector" using the shared thread pool
+    <Connector executor="tomcatThreadPool"
+               port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443"
+               server="Tomcat"/>
+    -->
+    <!-- Connector with NIO2 without too much tweaks -->
+    <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
+               connectionTimeout="30000"
+               keepAliveTimeout="30000"
+               URIEncoding="UTF-8"
+               redirectPort="8443"
+               server="Tomcat"/>
+
+    <Engine name="Catalina" defaultHost="localhost">
+      <Realm className="org.apache.catalina.realm.LockOutRealm">
+        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
+               resourceName="UserDatabase"/>
+      </Realm>
+
+      <Host name="localhost"  appBase="webapps"
+            unpackWARs="true" autoDeploy="true">
+      </Host>
+    </Engine>
+  </Service>
+</Server>

+ 9 - 0
frameworks/Java/servlet3/servlet3-sync.dockerfile

@@ -0,0 +1,9 @@
+FROM tfb/maven:latest as maven
+ADD ./ /servlet3
+WORKDIR /servlet3
+RUN mvn clean compile war:war -P sync
+
+FROM tfb/tomcat:latest
+COPY --from=maven /servlet3/target/servlet3.war ${CATALINA_HOME}/webapps/ROOT.war
+COPY --from=maven /servlet3/server.xml ${CATALINA_HOME}/conf/server.xml
+CMD bash ${CATALINA_HOME}/bin/catalina.sh run

+ 9 - 0
frameworks/Java/servlet3/servlet3.dockerfile

@@ -0,0 +1,9 @@
+FROM tfb/maven:latest as maven
+ADD ./ /servlet3
+WORKDIR /servlet3
+RUN mvn clean compile war:war
+
+FROM tfb/tomcat:latest
+COPY --from=maven /servlet3/target/servlet3.war ${CATALINA_HOME}/webapps/ROOT.war
+COPY --from=maven /servlet3/server.xml ${CATALINA_HOME}/conf/server.xml
+CMD bash ${CATALINA_HOME}/bin/catalina.sh run

+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/HelloMessage.java → frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/HelloMessage.java


+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/Helper.java → frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/Helper.java


+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/World.java → frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/World.java


+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/async/JSON.java → frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/async/JSON.java


+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/async/Plaintext.java → frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/async/Plaintext.java


+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/sync/JSON.java → frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/sync/JSON.java


+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/sync/Plaintext.java → frameworks/Java/servlet3/src/main/java/com/gitlab/zloster/tfb/servlet3/sync/Plaintext.java


+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/resources/logback.xml → frameworks/Java/servlet3/src/main/resources/logback.xml


+ 0 - 0
frameworks/Java/servlet/servlet3/src/main/webapp/jsp/error.jsp → frameworks/Java/servlet3/src/main/webapp/jsp/error.jsp


+ 10 - 0
toolset/setup/docker/webservers/tomcat.dockerfile

@@ -0,0 +1,10 @@
+FROM tfb/java:latest
+
+RUN mkdir /tomcat
+WORKDIR /tomcat
+RUN curl -s http://mirror.stjschools.org/public/apache/tomcat/tomcat-9/v9.0.6/bin/apache-tomcat-9.0.6.tar.gz | tar xz
+
+# Remove the default app so that frameworks using Tomcat don't have to.
+RUN rm -rf /tomcat/apache-tomcat-9.0.6/webapps/*
+
+ENV CATALINA_HOME=/tomcat/apache-tomcat-9.0.6