summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoung Gyu Park <younggyu@google.com>2018-03-19 16:08:48 +0900
committerYoung Gyu Park <younggyu@google.com>2018-03-20 14:26:24 +0900
commitb73a5e5d5967996b8b075021014c351fc76b0d62 (patch)
treec0be1b5fbe3bf32d680623505f561be1c3d26284
parentd7557ead04451532e9f0dc6987f1633d7f44af38 (diff)
downloaddashboard-b73a5e5d5967996b8b075021014c351fc76b0d62.tar.gz
Adding new library and entity class for the new API
Test: Tested with browser on my local dev machine Bug: 75494170 Change-Id: Icdcbf44a4d163c29f6452c14ee3f3bdd72997c38
-rw-r--r--pom.xml28
-rw-r--r--src/main/java/com/android/vts/config/ObjectifyListener.java55
-rw-r--r--src/main/java/com/android/vts/config/ObjectifyWebFilter.java29
-rw-r--r--src/main/java/com/android/vts/entity/TestLogSummaryEntity.java91
-rw-r--r--src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java2
-rw-r--r--src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java3
-rw-r--r--src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java4
-rw-r--r--src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java2
-rw-r--r--src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java2
-rw-r--r--src/main/java/com/android/vts/servlet/ShowTableServlet.java2
-rw-r--r--src/main/java/com/android/vts/servlet/ShowTreeServlet.java2
-rw-r--r--src/main/java/com/android/vts/util/FilterUtil.java10
12 files changed, 213 insertions, 17 deletions
diff --git a/pom.xml b/pom.xml
index ee3e319..85c5bc5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
<properties>
<app.id>s~google.com:android-vts-staging</app.id>
<app.version>4</app.version>
- <appengine.version>1.9.62</appengine.version>
+ <appengine.version>1.9.63</appengine.version>
<appengine.clientID></appengine.clientID>
<appengine.serviceClientID></appengine.serviceClientID>
@@ -52,8 +52,9 @@
<dependency>
<groupId>javax.servlet</groupId>
- <artifactId>jsp-api</artifactId>
- <version>2.0</version>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.0.1</version>
+ <scope>provided</scope>
</dependency>
<dependency>
@@ -77,7 +78,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud</artifactId>
- <version>0.8.0</version>
+ <version>0.39.0-alpha</version>
</dependency>
<dependency>
@@ -87,6 +88,18 @@
</dependency>
<dependency>
+ <groupId>com.googlecode.objectify</groupId>
+ <artifactId>objectify</artifactId>
+ <version>6.0b1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ <version>20180130</version>
+ </dependency>
+
+ <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
@@ -116,6 +129,13 @@
<version>v1-rev136-1.23.0</version>
</dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>1.16.20</version>
+ <scope>provided</scope>
+ </dependency>
+
<!-- Test Dependencies -->
<dependency>
<groupId>junit</groupId>
diff --git a/src/main/java/com/android/vts/config/ObjectifyListener.java b/src/main/java/com/android/vts/config/ObjectifyListener.java
new file mode 100644
index 0000000..8857764
--- /dev/null
+++ b/src/main/java/com/android/vts/config/ObjectifyListener.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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 com.android.vts.config;
+
+import com.android.vts.entity.TestLogSummaryEntity;
+import com.googlecode.objectify.ObjectifyService;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.annotation.WebListener;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/** The @WebListener annotation for registering a class as a listener of a web application. */
+@WebListener
+/**
+ * Initializing Objectify Service at the container start up before any web components like servlet
+ * get initialized.
+ */
+public class ObjectifyListener implements ServletContextListener {
+
+ private static final Logger logger = Logger.getLogger(ObjectifyListener.class.getName());
+
+ /** Receives notification that the web application initialization process is starting.
+ * This function will register Entity classes for objectify.
+ */
+ @Override
+ public void contextInitialized(ServletContextEvent servletContextEvent) {
+ ObjectifyService.init();
+ ObjectifyService.register(TestLogSummaryEntity.class);
+ logger.log(Level.INFO, "Value Initialized from context.");
+ }
+
+ /** Receives notification that the ServletContext is about to be shut down. */
+ @Override
+ public void contextDestroyed(ServletContextEvent servletContextEvent) {
+ ServletContext servletContext = servletContextEvent.getServletContext();
+ logger.log(Level.INFO, "Value deleted from context.");
+ }
+}
diff --git a/src/main/java/com/android/vts/config/ObjectifyWebFilter.java b/src/main/java/com/android/vts/config/ObjectifyWebFilter.java
new file mode 100644
index 0000000..3813d0b
--- /dev/null
+++ b/src/main/java/com/android/vts/config/ObjectifyWebFilter.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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 com.android.vts.config;
+
+import com.googlecode.objectify.ObjectifyFilter;
+
+import javax.servlet.annotation.WebFilter;
+
+/** Annotation used to declare a servlet filter. */
+@WebFilter(urlPatterns = {"/*"})
+/**
+ * Servlet filter for objectify library. Objectify requires a filter to clean up any thread-local
+ * transaction contexts and pending asynchronous operations that remain at the end of a request.
+ */
+public class ObjectifyWebFilter extends ObjectifyFilter {}
diff --git a/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java b/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java
new file mode 100644
index 0000000..787295c
--- /dev/null
+++ b/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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 com.android.vts.entity;
+
+import com.googlecode.objectify.annotation.Cache;
+import com.googlecode.objectify.annotation.Entity;
+import com.googlecode.objectify.annotation.Id;
+import com.googlecode.objectify.annotation.Index;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.Date;
+
+import static com.googlecode.objectify.ObjectifyService.ofy;
+
+/** Entity Class for saving Test Log Summary */
+@Cache
+@Entity
+@EqualsAndHashCode(of = "id")
+@NoArgsConstructor
+public class TestLogSummaryEntity {
+
+ /** Test Log Summary id */
+ @Id Long id;
+
+ /** Test Log Summary branch information */
+ @Index @Getter @Setter String branch;
+
+ /** Test Log Summary build target information */
+ @Index @Getter @Setter String target;
+
+ /** Test Log Summary build ID information */
+ @Index @Getter @Setter String build_id;
+
+ /** Test Log Summary system finrgerprint information */
+ @Getter @Setter String system_fingerprint;
+
+ /** Test Log Summary vendor fingerprint information */
+ @Getter @Setter String vendor_fingerprint;
+
+ /** Test Log Summary test count for success information */
+ @Index @Getter @Setter int pass;
+
+ /** Test Log Summary test count for failure information */
+ @Index @Getter @Setter int fail;
+
+ /** When this record was created or updated */
+ @Index @Getter Date updated;
+
+ /** Construction function for TestLogSummaryEntity Class */
+ public TestLogSummaryEntity(
+ Long id,
+ String branch,
+ String target,
+ String build_id,
+ String system_fingerprint,
+ String vendor_fingerprint,
+ int pass,
+ int fail) {
+ this.id = id;
+ this.branch = branch;
+ this.target = target;
+ this.build_id = build_id;
+ this.system_fingerprint = system_fingerprint;
+ this.vendor_fingerprint = vendor_fingerprint;
+ this.pass = pass;
+ this.fail = fail;
+ }
+
+ /** Saving function for the instance of this class */
+ private void save() {
+ this.updated = new Date();
+ ofy().defer().save().entity(this);
+ }
+}
diff --git a/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java b/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java
index d011c02..f9240c0 100644
--- a/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java
@@ -96,7 +96,7 @@ public class ShowCoverageOverviewServlet extends BaseServlet {
if (timeFilter != null) {
testFilter = Query.CompositeFilterOperator.and(testFilter, timeFilter);
}
- Map<String, Object> parameterMap = request.getParameterMap();
+ Map<String, String[]> parameterMap = request.getParameterMap();
List<Query.Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap);
userTestFilters.add(0, testFilter);
Query.Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap);
diff --git a/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java b/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java
index 7921ba6..abde1f4 100644
--- a/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java
@@ -205,7 +205,8 @@ public class ShowGcsLogServlet extends BaseServlet {
};
}
- Iterator<Blob> blobIterator = vtsReportBucket.list(listOptions).iterateAll();
+ Iterable<Blob> blobIterable = vtsReportBucket.list(listOptions).iterateAll();
+ Iterator<Blob> blobIterator = blobIterable.iterator();
while (blobIterator.hasNext()) {
Blob blob = blobIterator.next();
logger.log(Level.INFO, "blob name => " + blob);
diff --git a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java
index 194f410..9564ed2 100644
--- a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java
@@ -212,8 +212,8 @@ public class ShowGreenReleaseServlet extends BaseServlet {
Map<String, List<TestPlanRunEntity>> allTestPlanRunEntityMap = new HashMap<>();
deviceBuildInfoList.forEach(
deviceBuildInfo -> {
- Map<String, Object> paramMap =
- new HashMap<String, Object>() {
+ Map<String, String[]> paramMap =
+ new HashMap<String, String[]>() {
{
put("branch", new String[] {branchKey});
put(
diff --git a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java
index 4eb4078..357ef27 100644
--- a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java
@@ -143,7 +143,7 @@ public class ShowPlanReleaseServlet extends BaseServlet {
Filter testPlanRunFilter =
FilterUtil.getTimeFilter(
testPlanKey, TestPlanRunEntity.KIND, startTime, endTime, typeFilter);
- Map<String, Object> parameterMap = request.getParameterMap();
+ Map<String, String[]> parameterMap = request.getParameterMap();
List<Filter> userTestFilters =
FilterUtil.getUserTestFilters(parameterMap);
userTestFilters.add(0, testPlanRunFilter);
diff --git a/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java b/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java
index 0b28197..558654e 100644
--- a/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java
@@ -74,7 +74,7 @@ public class ShowProfilingOverviewServlet extends BaseServlet {
// Create a query for test runs matching the time window filter
- Map<String, Object> parameterMap = request.getParameterMap();
+ Map<String, String[]> parameterMap = request.getParameterMap();
boolean hasBranchFilter = parameterMap.containsKey(FilterUtil.FilterKey.BRANCH.getValue());
Filter deviceFilter;
if (hasBranchFilter) {
diff --git a/src/main/java/com/android/vts/servlet/ShowTableServlet.java b/src/main/java/com/android/vts/servlet/ShowTableServlet.java
index 3a5b9ae..0afaadf 100644
--- a/src/main/java/com/android/vts/servlet/ShowTableServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowTableServlet.java
@@ -155,7 +155,7 @@ public class ShowTableServlet extends BaseServlet {
FilterUtil.getTimeFilter(
testKey, TestRunEntity.KIND, startTime, endTime, typeFilter);
- Map<String, Object> parameterMap = request.getParameterMap();
+ Map<String, String[]> parameterMap = request.getParameterMap();
List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap);
userTestFilters.add(0, testFilter);
Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap);
diff --git a/src/main/java/com/android/vts/servlet/ShowTreeServlet.java b/src/main/java/com/android/vts/servlet/ShowTreeServlet.java
index ca395b1..0338bf9 100644
--- a/src/main/java/com/android/vts/servlet/ShowTreeServlet.java
+++ b/src/main/java/com/android/vts/servlet/ShowTreeServlet.java
@@ -165,7 +165,7 @@ public class ShowTreeServlet extends BaseServlet {
FilterUtil.getTimeFilter(
testKey, TestRunEntity.KIND, startTime, endTime, typeFilter);
- Map<String, Object> parameterMap = request.getParameterMap();
+ Map<String, String[]> parameterMap = request.getParameterMap();
List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap);
userTestFilters.add(0, testFilter);
Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap);
diff --git a/src/main/java/com/android/vts/util/FilterUtil.java b/src/main/java/com/android/vts/util/FilterUtil.java
index ebdb479..1c7a441 100644
--- a/src/main/java/com/android/vts/util/FilterUtil.java
+++ b/src/main/java/com/android/vts/util/FilterUtil.java
@@ -204,7 +204,7 @@ public class FilterUtil {
* @param key The key whose value to get.
* @return The first value associated with the provided key.
*/
- public static String getFirstParameter(Map<String, Object> parameterMap, String key) {
+ public static String getFirstParameter(Map<String, String[]> parameterMap, String key) {
String[] values = (String[]) parameterMap.get(key);
if (values.length == 0) return null;
return values[0];
@@ -216,7 +216,7 @@ public class FilterUtil {
* @param parameterMap The key-value map of url parameters.
* @return A filter with the values from the user search parameters.
*/
- public static Filter getUserDeviceFilter(Map<String, Object> parameterMap) {
+ public static Filter getUserDeviceFilter(Map<String, String[]> parameterMap) {
Filter deviceFilter = null;
for (String key : parameterMap.keySet()) {
if (!FilterKey.isDeviceKey(key)) continue;
@@ -239,7 +239,7 @@ public class FilterUtil {
* @param parameterMap The key-value map of url parameters.
* @return A list of filters, each having at most one inequality filter.
*/
- public static List<Filter> getUserTestFilters(Map<String, Object> parameterMap) {
+ public static List<Filter> getUserTestFilters(Map<String, String[]> parameterMap) {
List<Filter> userFilters = new ArrayList<>();
for (String key : parameterMap.keySet()) {
if (!FilterKey.isTestKey(key)) continue;
@@ -520,11 +520,11 @@ public class FilterUtil {
* @param request The request whose attributes to set.
* @param parameterMap The map from key to (Object) String[] value whose entries to parse.
*/
- public static void setAttributes(HttpServletRequest request, Map<String, Object> parameterMap) {
+ public static void setAttributes(HttpServletRequest request, Map<String, String[]> parameterMap) {
for (String key : parameterMap.keySet()) {
if (!FilterKey.isDeviceKey(key) && !FilterKey.isTestKey(key)) continue;
FilterKey filterKey = FilterKey.parse(key);
- String[] values = (String[]) parameterMap.get(key);
+ String[] values = parameterMap.get(key);
if (values.length == 0) continue;
String stringValue = values[0];
request.setAttribute(filterKey.keyString, new Gson().toJson(stringValue));