diff options
Diffstat (limited to 'src')
165 files changed, 0 insertions, 54912 deletions
diff --git a/src/main/java/com/android/vts/api/BaseApiServlet.java b/src/main/java/com/android/vts/api/BaseApiServlet.java deleted file mode 100644 index b7384a7..0000000 --- a/src/main/java/com/android/vts/api/BaseApiServlet.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.google.apphosting.api.ApiProxy; -import java.util.Properties; -import java.util.logging.Logger; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletResponse; - -/** An abstract class to be subclassed to create API Servlet */ -public class BaseApiServlet extends HttpServlet { - - private static final Logger logger = Logger.getLogger(BaseApiServlet.class.getName()); - - /** System Configuration Property class */ - protected Properties systemConfigProp = new Properties(); - - /** Appengine server host name */ - protected String hostName; - - /** - * This variable is for maximum number of entities per transaction You can find the detail here - * (https://cloud.google.com/datastore/docs/concepts/limits) - */ - protected int MAX_ENTITY_SIZE_PER_TRANSACTION = 300; - - @Override - public void init(ServletConfig cfg) throws ServletException { - super.init(cfg); - - systemConfigProp = - Properties.class.cast(cfg.getServletContext().getAttribute("systemConfigProp")); - - this.MAX_ENTITY_SIZE_PER_TRANSACTION = - Integer.parseInt(systemConfigProp.getProperty("datastore.maxEntitySize")); - - ApiProxy.Environment env = ApiProxy.getCurrentEnvironment(); - hostName = - env.getAttributes() - .get("com.google.appengine.runtime.default_version_hostname") - .toString(); - } - - protected void setAccessControlHeaders(HttpServletResponse resp) { - resp.setHeader("Access-Control-Allow-Origin", hostName); - resp.setHeader("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS, DELETE"); - resp.addHeader("Access-Control-Allow-Headers", "Content-Type"); - resp.addHeader("Access-Control-Max-Age", "86400"); - } -} diff --git a/src/main/java/com/android/vts/api/BigtableLegacyJsonServlet.java b/src/main/java/com/android/vts/api/BigtableLegacyJsonServlet.java deleted file mode 100644 index d331d4b..0000000 --- a/src/main/java/com/android/vts/api/BigtableLegacyJsonServlet.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.android.vts.proto.VtsReportMessage.TestReportMessage; -import com.android.vts.servlet.BaseServlet; -import com.android.vts.util.DatastoreHelper; -import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; -import com.google.api.client.http.javanet.NetHttpTransport; -import com.google.api.client.json.jackson.JacksonFactory; -import com.google.api.services.oauth2.Oauth2; -import com.google.api.services.oauth2.model.Tokeninfo; -import com.google.protobuf.InvalidProtocolBufferException; -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.apache.commons.codec.binary.Base64; -import org.json.JSONException; -import org.json.JSONObject; - -/** REST endpoint for posting data JSON to the Dashboard. */ -@Deprecated -public class BigtableLegacyJsonServlet extends HttpServlet { - private static String SERVICE_CLIENT_ID; - private static final String SERVICE_NAME = "VTS Dashboard"; - private static final Logger logger = - Logger.getLogger(BigtableLegacyJsonServlet.class.getName()); - - /** System Configuration Property class */ - protected Properties systemConfigProp = new Properties(); - - @Override - public void init(ServletConfig cfg) throws ServletException { - super.init(cfg); - - try { - InputStream defaultInputStream = - BigtableLegacyJsonServlet.class - .getClassLoader() - .getResourceAsStream("config.properties"); - systemConfigProp.load(defaultInputStream); - - SERVICE_CLIENT_ID = systemConfigProp.getProperty("appengine.serviceClientID"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - // Retrieve the params - String payload = new String(); - JSONObject payloadJson; - try { - String line = null; - BufferedReader reader = request.getReader(); - while ((line = reader.readLine()) != null) { - payload += line; - } - payloadJson = new JSONObject(payload); - } catch (IOException | JSONException e) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - logger.log(Level.WARNING, "Invalid JSON: " + payload); - return; - } - - // Verify service account access token. - boolean authorized = false; - if (payloadJson.has("accessToken")) { - String accessToken = payloadJson.getString("accessToken").trim(); - GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken); - Oauth2 oauth2 = - new Oauth2.Builder(new NetHttpTransport(), new JacksonFactory(), credential) - .setApplicationName(SERVICE_NAME) - .build(); - Tokeninfo tokenInfo = oauth2.tokeninfo().setAccessToken(accessToken).execute(); - if (tokenInfo.getIssuedTo().equals(SERVICE_CLIENT_ID)) { - authorized = true; - } - } - - if (!authorized) { - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - return; - } - - // Parse the desired action and execute the command - try { - if (payloadJson.has("verb")) { - switch (payloadJson.getString("verb")) { - case "createTable": - logger.log(Level.INFO, "Deprecated verb: createTable."); - break; - case "insertRow": - insertData(payloadJson); - break; - default: - logger.log( - Level.WARNING, - "Invalid Datastore REST verb: " + payloadJson.getString("verb")); - throw new IOException("Unsupported POST verb."); - } - } - } catch (IOException e) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return; - } - response.setStatus(HttpServletResponse.SC_OK); - } - - /** - * Inserts a data into the Cloud Datastore - * - * @param payloadJson The JSON object representing the row to be inserted. Of the form: { - * (deprecated) 'tableName' : 'table', (deprecated) 'rowKey' : 'row', (deprecated) 'family' - * : 'family', (deprecated) 'qualifier' : 'qualifier', 'value' : 'value' } - * @throws IOException - */ - private void insertData(JSONObject payloadJson) throws IOException { - if (!payloadJson.has("value")) { - logger.log(Level.WARNING, "Missing attributes for datastore api insertRow()."); - return; - } - try { - byte[] value = Base64.decodeBase64(payloadJson.getString("value")); - TestReportMessage testReportMessage = TestReportMessage.parseFrom(value); - } catch (InvalidProtocolBufferException e) { - logger.log(Level.WARNING, "Invalid report posted to dashboard."); - } - } -} diff --git a/src/main/java/com/android/vts/api/CoverageRestServlet.java b/src/main/java/com/android/vts/api/CoverageRestServlet.java deleted file mode 100644 index aebd3e5..0000000 --- a/src/main/java/com/android/vts/api/CoverageRestServlet.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.android.vts.entity.ApiCoverageEntity; -import com.android.vts.entity.CoverageEntity; -import com.android.vts.entity.TestCoverageStatusEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestRunEntity; -import com.google.gson.Gson; -import com.googlecode.objectify.Key; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** REST endpoint for posting test suite data to the Dashboard. */ -public class CoverageRestServlet extends BaseApiServlet { - - private static final Logger logger = Logger.getLogger(CoverageRestServlet.class.getName()); - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - String pathInfo = request.getPathInfo(); - String json = ""; - if (Objects.nonNull(pathInfo)) { - if (pathInfo.equalsIgnoreCase("/api/data")) { - String key = request.getParameter("key"); - json = apiCoverageData(key); - } else { - json = "{error: 'true', message: 'unexpected path!!!'}"; - logger.log(Level.INFO, "Path Info => " + pathInfo); - logger.log(Level.WARNING, "Unknown path access!"); - } - } else { - json = "{error: 'true', message: 'the path info is not existed!!!'}"; - } - - response.setStatus(HttpServletResponse.SC_OK); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(json); - } - - private String apiCoverageData(String key) { - ApiCoverageEntity apiCoverageEntity = ApiCoverageEntity.getByUrlSafeKey(key); - String apiCoverageEntityJson = new Gson().toJson(apiCoverageEntity); - return apiCoverageEntityJson; - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - - String pathInfo = request.getPathInfo(); - String json = ""; - if (Objects.nonNull(pathInfo)) { - if (pathInfo.equalsIgnoreCase("/api/data")) { - String cmd = request.getParameter("cmd"); - String coverageId = request.getParameter("coverageId"); - String testName = request.getParameter("testName"); - String testRunId = request.getParameter("testRunId"); - json = postCoverageData(cmd, coverageId, testName, testRunId); - } else if (pathInfo.equalsIgnoreCase("/api/sum")) { - String urlSafeKey = request.getParameter("urlSafeKey"); - json = postCoverageDataSum(urlSafeKey); - } else { - json = "{error: 'true', message: 'unexpected path!!!'}"; - } - } else { - json = "{error: 'true', message: 'the path info is not existed!!!'}"; - } - - response.setStatus(HttpServletResponse.SC_OK); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(json); - } - - private String postCoverageDataSum(String urlSafeKey) { - List<List<String>> allHalApiList = new ArrayList(); - List<List<String>> allCoveredHalApiList = new ArrayList(); - - Key<TestPlanRunEntity> key = Key.create(urlSafeKey); - TestPlanRunEntity testPlanRunEntity = ofy().load().key(key).safe(); - - for (Key<TestRunEntity> testRunKey : testPlanRunEntity.getTestRuns()) { - List<ApiCoverageEntity> apiCoverageEntityList = - ofy().load().type(ApiCoverageEntity.class).ancestor(testRunKey).list(); - for (ApiCoverageEntity apiCoverageEntity : apiCoverageEntityList) { - allHalApiList.add(apiCoverageEntity.getHalApi()); - allCoveredHalApiList.add(apiCoverageEntity.getCoveredHalApi()); - } - } - long totalHalApiNum = allHalApiList.stream().flatMap(Collection::stream).distinct().count(); - long totalCoveredHalApiNum = - allCoveredHalApiList.stream().flatMap(Collection::stream).distinct().count(); - if (totalHalApiNum > 0) { - testPlanRunEntity.setTotalApiCount(totalHalApiNum); - if (totalCoveredHalApiNum > 0) { - testPlanRunEntity.setCoveredApiCount(totalCoveredHalApiNum); - } - testPlanRunEntity.save(); - } - - Map<String, Long> halApiNumMap = - new HashMap<String, Long>() { - { - put("totalHalApiNum", totalHalApiNum); - put("totalCoveredHalApiNum", totalCoveredHalApiNum); - } - }; - String json = new Gson().toJson(halApiNumMap); - return json; - } - - /** - * The API to ignore the irrelevant code for calculating ratio - * - * @param cmd disable or enable command to ignore the code. - * @param coverageId the datastore ID for code coverage. - * @param testName the test name. - * @param testRunId the test run ID from datastore. - * @return success json. - */ - private String postCoverageData( - String cmd, String coverageId, String testName, String testRunId) { - - Boolean isIgnored = false; - if (cmd.equals("disable")) { - isIgnored = true; - } - CoverageEntity coverageEntity = CoverageEntity.findById(testName, testRunId, coverageId); - coverageEntity.setIsIgnored(isIgnored); - coverageEntity.save(); - - TestCoverageStatusEntity testCoverageStatusEntity = - TestCoverageStatusEntity.findById(testName); - Long newCoveredLineCount = - cmd.equals("disable") - ? testCoverageStatusEntity.getUpdatedCoveredLineCount() - - coverageEntity.getCoveredCount() - : testCoverageStatusEntity.getUpdatedCoveredLineCount() - + coverageEntity.getCoveredCount(); - Long newTotalLineCount = - cmd.equals("disable") - ? testCoverageStatusEntity.getUpdatedTotalLineCount() - - coverageEntity.getTotalCount() - : testCoverageStatusEntity.getUpdatedTotalLineCount() - + coverageEntity.getTotalCount(); - testCoverageStatusEntity.setUpdatedCoveredLineCount(newCoveredLineCount); - testCoverageStatusEntity.setUpdatedTotalLineCount(newTotalLineCount); - testCoverageStatusEntity.save(); - - String json = new Gson().toJson("Success!"); - return json; - } -} diff --git a/src/main/java/com/android/vts/api/DataRestServlet.java b/src/main/java/com/android/vts/api/DataRestServlet.java deleted file mode 100644 index 409818e..0000000 --- a/src/main/java/com/android/vts/api/DataRestServlet.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.android.vts.entity.BranchEntity; -import com.android.vts.entity.TestCoverageStatusEntity; -import com.google.gson.Gson; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; -import java.util.Objects; -import java.util.logging.Level; -import java.util.logging.Logger; - -import com.android.vts.entity.BuildTargetEntity; - -/** REST endpoint for getting all branch and buildFlavors information. */ -public class DataRestServlet extends BaseApiServlet { - - private static final Logger logger = Logger.getLogger(DataRestServlet.class.getName()); - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - String pathInfo = request.getPathInfo(); - String json = ""; - if (Objects.nonNull(pathInfo)) { - String schKey = - Objects.isNull(request.getParameter("schKey")) - ? "" - : request.getParameter("schKey"); - if (pathInfo.equalsIgnoreCase("/branch")) { - json = new Gson().toJson(BranchEntity.getByBranch(schKey)); - } else if (pathInfo.equalsIgnoreCase("/device")) { - json = new Gson().toJson(BuildTargetEntity.getByBuildTarget(schKey)); - } else if (pathInfo.startsWith("/code/coverage/status/")) { - List<TestCoverageStatusEntity> testCoverageStatusEntityList = - TestCoverageStatusEntity.getAllTestCoverage(); - if (pathInfo.endsWith("branch")) { - json = - new Gson() - .toJson( - TestCoverageStatusEntity.getBranchSet( - testCoverageStatusEntityList)); - } else { - json = - new Gson() - .toJson( - TestCoverageStatusEntity.getDeviceSet( - testCoverageStatusEntityList)); - } - } else { - json = "{error: 'true', message: 'unexpected path!!!'}"; - logger.log(Level.INFO, "Path Info => " + pathInfo); - logger.log(Level.WARNING, "Unknown path access!"); - } - } else { - json = "{error: 'true', message: 'the path info is not existed!!!'}"; - } - - response.setStatus(HttpServletResponse.SC_OK); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(json); - } -} diff --git a/src/main/java/com/android/vts/api/DatastoreRestServlet.java b/src/main/java/com/android/vts/api/DatastoreRestServlet.java deleted file mode 100644 index fa0ae65..0000000 --- a/src/main/java/com/android/vts/api/DatastoreRestServlet.java +++ /dev/null @@ -1,556 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.android.vts.entity.ApiCoverageEntity; -import com.android.vts.entity.BranchEntity; -import com.android.vts.entity.BuildTargetEntity; -import com.android.vts.entity.CodeCoverageEntity; -import com.android.vts.entity.CoverageEntity; -import com.android.vts.entity.DashboardEntity; -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.HalApiEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.proto.VtsReportMessage; -import com.android.vts.proto.VtsReportMessage.DashboardPostMessage; -import com.android.vts.proto.VtsReportMessage.TestPlanReportMessage; -import com.android.vts.proto.VtsReportMessage.TestReportMessage; -import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; -import com.google.api.client.http.javanet.NetHttpTransport; -import com.google.api.client.json.jackson.JacksonFactory; -import com.google.api.services.oauth2.Oauth2; -import com.google.api.services.oauth2.model.Tokeninfo; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.google.appengine.api.datastore.Key; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.codec.binary.Base64; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@Slf4j -/** REST endpoint for posting data to the Dashboard. */ -public class DatastoreRestServlet extends BaseApiServlet { - private static String SERVICE_CLIENT_ID; - private static final String SERVICE_NAME = "VTS Dashboard"; - - @Override - public void init(ServletConfig cfg) throws ServletException { - super.init(cfg); - - SERVICE_CLIENT_ID = this.systemConfigProp.getProperty("appengine.serviceClientID"); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - // Retrieve the params - DashboardPostMessage postMessage; - try { - String payload = request.getReader().lines().collect(Collectors.joining()); - byte[] value = Base64.decodeBase64(payload); - postMessage = DashboardPostMessage.parseFrom(value); - } catch (IOException e) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - log.error("Invalid proto: " + e.getLocalizedMessage()); - return; - } - - String resultMsg = ""; - // Verify service account access token. - if (postMessage.hasAccessToken()) { - String accessToken = postMessage.getAccessToken(); - log.debug("accessToken => " + accessToken); - - GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken); - Oauth2 oauth2 = - new Oauth2.Builder(new NetHttpTransport(), new JacksonFactory(), credential) - .setApplicationName(SERVICE_NAME) - .build(); - Tokeninfo tokenInfo = oauth2.tokeninfo().setAccessToken(accessToken).execute(); - if (tokenInfo.getIssuedTo().equals(SERVICE_CLIENT_ID)) { - for (TestReportMessage testReportMessage : postMessage.getTestReportList()) { - this.insertTestReport(testReportMessage); - } - - for (TestPlanReportMessage planReportMessage : - postMessage.getTestPlanReportList()) { - this.insertTestPlanReport(planReportMessage); - } - - response.setStatus(HttpServletResponse.SC_OK); - resultMsg = "Success!!"; - } else { - log.warn("service_client_id didn't match!"); - log.debug("SERVICE_CLIENT_ID => " + tokenInfo.getIssuedTo()); - resultMsg = "Your SERVICE_CLIENT_ID is incorrect!"; - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - } - } else { - log.error("postMessage do not contain any accessToken!"); - resultMsg = "Your message do not have access token!"; - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - } - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write("{'result_msg': " + resultMsg + "}"); - } - - /** - * Upload data from a test report message - * - * @param report The test report containing data to upload. - */ - private void insertTestReport(TestReportMessage report) { - - if (!report.hasStartTimestamp() - || !report.hasEndTimestamp() - || !report.hasTest() - || !report.hasHostInfo() - || !report.hasBuildInfo()) { - // missing information - log.error("Missing information in report !"); - return; - } - - List<TestEntity> testEntityList = new ArrayList<>(); - List<TestRunEntity> testRunEntityList = new ArrayList<>(); - List<BranchEntity> branchEntityList = new ArrayList<>(); - List<BuildTargetEntity> buildTargetEntityList = new ArrayList<>(); - List<CoverageEntity> coverageEntityList = new ArrayList<>(); - List<CodeCoverageEntity> codeCoverageEntityList = new ArrayList<>(); - List<DeviceInfoEntity> deviceInfoEntityList = new ArrayList<>(); - List<ProfilingPointRunEntity> profilingPointRunEntityList = new ArrayList<>(); - List<TestCaseRunEntity> testCaseRunEntityList = new ArrayList<>(); - List<ApiCoverageEntity> apiCoverageEntityList = new ArrayList<>(); - - List<?> allEntityList = - Arrays.asList( - testEntityList, - branchEntityList, - buildTargetEntityList, - coverageEntityList, - codeCoverageEntityList, - deviceInfoEntityList, - profilingPointRunEntityList, - testCaseRunEntityList, - apiCoverageEntityList, - testRunEntityList); - - long passCount = 0; - long failCount = 0; - long coveredLineCount = 0; - long totalLineCount = 0; - - Set<Key> buildTargetKeys = new HashSet<>(); - Set<Key> branchKeys = new HashSet<>(); - List<Key> profilingPointKeyList = new ArrayList<>(); - List<String> linkList = new ArrayList<>(); - - long startTimestamp = report.getStartTimestamp(); - long endTimestamp = report.getEndTimestamp(); - String testName = report.getTest().toStringUtf8(); - String testBuildId = report.getBuildInfo().getId().toStringUtf8(); - String hostName = report.getHostInfo().getHostname().toStringUtf8(); - - TestEntity testEntity = new TestEntity(testName); - - com.googlecode.objectify.Key testRunKey = - testEntity.getTestRunKey(report.getStartTimestamp()); - - testEntityList.add(testEntity); - - int testCaseRunEntityIndex = 0; - testCaseRunEntityList.add(new TestCaseRunEntity()); - // Process test cases - for (VtsReportMessage.TestCaseReportMessage testCase : report.getTestCaseList()) { - String testCaseName = testCase.getName().toStringUtf8(); - VtsReportMessage.TestCaseResult result = testCase.getTestResult(); - // Track global pass/fail counts - if (result == VtsReportMessage.TestCaseResult.TEST_CASE_RESULT_PASS) { - ++passCount; - } else if (result != VtsReportMessage.TestCaseResult.TEST_CASE_RESULT_SKIP) { - ++failCount; - } - if (testCase.getSystraceCount() > 0 - && testCase.getSystraceList().get(0).getUrlCount() > 0) { - String systraceLink = testCase.getSystraceList().get(0).getUrl(0).toStringUtf8(); - linkList.add(systraceLink); - } - - // Process coverage data for test case - for (VtsReportMessage.CoverageReportMessage coverage : testCase.getCoverageList()) { - CoverageEntity coverageEntity = - CoverageEntity.fromCoverageReport(testRunKey, testCaseName, coverage); - if (coverageEntity == null) { - log.warn("Invalid coverage report in test run " + testRunKey); - } else { - coveredLineCount += coverageEntity.getCoveredCount(); - totalLineCount += coverageEntity.getTotalCount(); - coverageEntityList.add(coverageEntity); - } - } - - // Process profiling data for test case - for (VtsReportMessage.ProfilingReportMessage profiling : testCase.getProfilingList()) { - ProfilingPointRunEntity profilingPointRunEntity = - ProfilingPointRunEntity.fromProfilingReport(testRunKey, profiling); - if (profilingPointRunEntity == null) { - log.warn("Invalid profiling report in test run " + testRunKey); - } else { - profilingPointRunEntityList.add(profilingPointRunEntity); - profilingPointKeyList.add(profilingPointRunEntity.getKey()); - testEntity.setHasProfilingData(true); - } - } - - TestCaseRunEntity testCaseRunEntity = testCaseRunEntityList.get(testCaseRunEntityIndex); - if (!testCaseRunEntity.addTestCase(testCaseName, result.getNumber())) { - testCaseRunEntity = new TestCaseRunEntity(); - testCaseRunEntity.addTestCase(testCaseName, result.getNumber()); - testCaseRunEntityList.add(testCaseRunEntity); - testCaseRunEntityIndex++; - } - } - - // Process device information - long testRunType = 0; - for (VtsReportMessage.AndroidDeviceInfoMessage device : report.getDeviceInfoList()) { - DeviceInfoEntity deviceInfoEntity = - DeviceInfoEntity.fromDeviceInfoMessage(testRunKey, device); - if (deviceInfoEntity == null) { - log.warn("Invalid device info in test run " + testRunKey); - } else { - // Run type on devices must be the same, else set to OTHER - TestRunEntity.TestRunType runType = - TestRunEntity.TestRunType.fromBuildId(deviceInfoEntity.getBuildId()); - if (runType == null) { - testRunType = TestRunEntity.TestRunType.OTHER.getNumber(); - } else { - testRunType = runType.getNumber(); - } - deviceInfoEntityList.add(deviceInfoEntity); - BuildTargetEntity target = new BuildTargetEntity(deviceInfoEntity.getBuildFlavor()); - if (buildTargetKeys.add(target.getKey())) { - buildTargetEntityList.add(target); - } - BranchEntity branch = new BranchEntity(deviceInfoEntity.getBranch()); - if (branchKeys.add(branch.getKey())) { - branchEntityList.add(branch); - } - } - } - - // Overall run type should be determined by the device builds unless test build is OTHER - if (testRunType == TestRunEntity.TestRunType.OTHER.getNumber()) { - testRunType = TestRunEntity.TestRunType.fromBuildId(testBuildId).getNumber(); - } else if (TestRunEntity.TestRunType.fromBuildId(testBuildId) - == TestRunEntity.TestRunType.OTHER) { - testRunType = TestRunEntity.TestRunType.OTHER.getNumber(); - } - - // Process global coverage data - for (VtsReportMessage.CoverageReportMessage coverage : report.getCoverageList()) { - CoverageEntity coverageEntity = - CoverageEntity.fromCoverageReport(testRunKey, new String(), coverage); - if (coverageEntity == null) { - log.warn("Invalid coverage report in test run " + testRunKey); - } else { - coveredLineCount += coverageEntity.getCoveredCount(); - totalLineCount += coverageEntity.getTotalCount(); - coverageEntityList.add(coverageEntity); - } - } - - // Process global API coverage data - for (VtsReportMessage.ApiCoverageReportMessage apiCoverage : report.getApiCoverageList()) { - VtsReportMessage.HalInterfaceMessage halInterfaceMessage = - apiCoverage.getHalInterface(); - List<String> halApiList = - apiCoverage - .getHalApiList() - .stream() - .map(h -> h.toStringUtf8()) - .collect(Collectors.toList()); - List<String> coveredHalApiList = - apiCoverage - .getCoveredHalApiList() - .stream() - .map(h -> h.toStringUtf8()) - .collect(Collectors.toList()); - ApiCoverageEntity apiCoverageEntity = - new ApiCoverageEntity( - testRunKey, - halInterfaceMessage.getHalPackageName().toStringUtf8(), - halInterfaceMessage.getHalVersionMajor(), - halInterfaceMessage.getHalVersionMinor(), - halInterfaceMessage.getHalInterfaceName().toStringUtf8(), - halApiList, - coveredHalApiList); - apiCoverageEntityList.add(apiCoverageEntity); - } - - // Process global profiling data - for (VtsReportMessage.ProfilingReportMessage profiling : report.getProfilingList()) { - ProfilingPointRunEntity profilingPointRunEntity = - ProfilingPointRunEntity.fromProfilingReport(testRunKey, profiling); - if (profilingPointRunEntity == null) { - log.warn("Invalid profiling report in test run " + testRunKey); - } else { - profilingPointRunEntityList.add(profilingPointRunEntity); - profilingPointKeyList.add(profilingPointRunEntity.getKey()); - testEntity.setHasProfilingData(true); - } - } - - // Process log data - for (VtsReportMessage.LogMessage log : report.getLogList()) { - if (log.hasUrl()) { - linkList.add(log.getUrl().toStringUtf8()); - } - } - // Process url resource - for (VtsReportMessage.UrlResourceMessage resource : report.getLinkResourceList()) { - if (resource.hasUrl()) { - linkList.add(resource.getUrl().toStringUtf8()); - } - } - - boolean hasCodeCoverage = totalLineCount > 0 && coveredLineCount >= 0; - TestRunEntity testRunEntity = - new TestRunEntity( - testEntity.getOldKey(), - testRunType, - startTimestamp, - endTimestamp, - testBuildId, - hostName, - passCount, - failCount, - hasCodeCoverage, - new ArrayList<>(), - linkList); - testRunEntityList.add(testRunEntity); - - CodeCoverageEntity codeCoverageEntity = - new CodeCoverageEntity( - testRunEntity.getId(), - testRunEntity.getKey(), - coveredLineCount, - totalLineCount); - codeCoverageEntityList.add(codeCoverageEntity); - - ofy().transact( - () -> { - List<Long> testCaseIds = new ArrayList<>(); - for (Object entity : allEntityList) { - if (entity instanceof List) { - List listEntity = (List) entity; - if (listEntity.size() > 0 - && listEntity.get(0) instanceof TestCaseRunEntity) { - Map< - com.googlecode.objectify.Key< - TestCaseRunEntity>, - TestCaseRunEntity> - testCaseRunEntityMap = - DashboardEntity.saveAll( - testCaseRunEntityList, - this - .MAX_ENTITY_SIZE_PER_TRANSACTION); - - testCaseIds = - testCaseRunEntityMap - .values() - .stream() - .map( - testCaseRunEntity -> - testCaseRunEntity.getId()) - .collect(Collectors.toList()); - } else if (listEntity.size() > 0 - && listEntity.get(0) instanceof TestRunEntity) { - testRunEntityList.get(0).setTestCaseIds(testCaseIds); - DashboardEntity.saveAll( - testRunEntityList, - this.MAX_ENTITY_SIZE_PER_TRANSACTION); - } else { - List<DashboardEntity> dashboardEntityList = - (List<DashboardEntity>) entity; - DashboardEntity.saveAll( - dashboardEntityList, - this.MAX_ENTITY_SIZE_PER_TRANSACTION); - } - } - } - }); - } - - /** - * Upload data from a test plan report message - * - * @param report The test plan report containing data to upload. - */ - private void insertTestPlanReport(TestPlanReportMessage report) { - List<DeviceInfoEntity> deviceInfoEntityList = new ArrayList<>(); - List<HalApiEntity> halApiEntityList = new ArrayList<>(); - - List allEntityList = Arrays.asList(deviceInfoEntityList, halApiEntityList); - - List<String> testModules = report.getTestModuleNameList(); - List<Long> testTimes = report.getTestModuleStartTimestampList(); - if (testModules.size() != testTimes.size() || !report.hasTestPlanName()) { - log.error("TestPlanReportMessage is missing information."); - return; - } - - String testPlanName = report.getTestPlanName(); - TestPlanEntity testPlanEntity = new TestPlanEntity(testPlanName); - List<com.googlecode.objectify.Key<TestRunEntity>> testRunKeyList = new ArrayList<>(); - for (int index = 0; index < testModules.size(); index++) { - String test = testModules.get(index); - long time = testTimes.get(index); - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create(TestEntity.class, test); - com.googlecode.objectify.Key testRunKey = - com.googlecode.objectify.Key.create(testKey, TestRunEntity.class, time); - testRunKeyList.add(testRunKey); - } - - Map<com.googlecode.objectify.Key<TestRunEntity>, TestRunEntity> testRunEntityMap = - ofy().load().keys(() -> testRunKeyList.iterator()); - - long passCount = 0; - long failCount = 0; - long startTimestamp = -1; - long endTimestamp = -1; - String testBuildId = null; - long testType = -1; - Set<DeviceInfoEntity> deviceInfoEntitySet = new HashSet<>(); - for (TestRunEntity testRunEntity : testRunEntityMap.values()) { - passCount += testRunEntity.getPassCount(); - failCount += testRunEntity.getFailCount(); - if (startTimestamp < 0 || testRunEntity.getStartTimestamp() < startTimestamp) { - startTimestamp = testRunEntity.getStartTimestamp(); - } - if (endTimestamp < 0 || testRunEntity.getEndTimestamp() > endTimestamp) { - endTimestamp = testRunEntity.getEndTimestamp(); - } - testType = testRunEntity.getType(); - testBuildId = testRunEntity.getTestBuildId(); - - List<DeviceInfoEntity> deviceInfoEntityListWithTestRunKey = - ofy().load() - .type(DeviceInfoEntity.class) - .ancestor(testRunEntity.getOfyKey()) - .list(); - - for (DeviceInfoEntity deviceInfoEntity : deviceInfoEntityListWithTestRunKey) { - deviceInfoEntitySet.add(deviceInfoEntity); - } - } - - if (startTimestamp < 0 || testBuildId == null || testType == -1) { - log.debug("startTimestamp => " + startTimestamp); - log.debug("testBuildId => " + testBuildId); - log.debug("type => " + testType); - log.error("Couldn't infer test run information from runs."); - return; - } - - TestPlanRunEntity testPlanRunEntity = - new TestPlanRunEntity( - testPlanEntity.getKey(), - testPlanName, - testType, - startTimestamp, - endTimestamp, - testBuildId, - passCount, - failCount, - 0L, - 0L, - testRunKeyList); - - // Create the device infos. - for (DeviceInfoEntity device : deviceInfoEntitySet) { - deviceInfoEntityList.add(device.copyWithParent(testPlanRunEntity.getOfyKey())); - } - - // Process global HAL API coverage data - for (VtsReportMessage.ApiCoverageReportMessage apiCoverage : report.getHalApiReportList()) { - VtsReportMessage.HalInterfaceMessage halInterfaceMessage = - apiCoverage.getHalInterface(); - List<String> halApiList = - apiCoverage - .getHalApiList() - .stream() - .map(h -> h.toStringUtf8()) - .collect(Collectors.toList()); - List<String> coveredHalApiList = - apiCoverage - .getCoveredHalApiList() - .stream() - .map(h -> h.toStringUtf8()) - .collect(Collectors.toList()); - HalApiEntity halApiEntity = - new HalApiEntity( - testPlanRunEntity.getOfyKey(), - halInterfaceMessage.getHalReleaseLevel().toStringUtf8(), - halInterfaceMessage.getHalPackageName().toStringUtf8(), - halInterfaceMessage.getHalVersionMajor(), - halInterfaceMessage.getHalVersionMinor(), - halInterfaceMessage.getHalInterfaceName().toStringUtf8(), - halApiList, - coveredHalApiList); - halApiEntityList.add(halApiEntity); - } - - ofy().transact( - () -> { - testPlanEntity.save(); - testPlanRunEntity.save(); - for (Object entity : allEntityList) { - List<DashboardEntity> dashboardEntityList = - (List<DashboardEntity>) entity; - Map<com.googlecode.objectify.Key<DashboardEntity>, DashboardEntity> - mapInfo = - DashboardEntity.saveAll( - dashboardEntityList, - this.MAX_ENTITY_SIZE_PER_TRANSACTION); - } - }); - - // Add the task to calculate total number API list. - testPlanRunEntity.addCoverageApiTask(); - } -} diff --git a/src/main/java/com/android/vts/api/TestAcknowledgmentRestServlet.java b/src/main/java/com/android/vts/api/TestAcknowledgmentRestServlet.java deleted file mode 100644 index 309c3e2..0000000 --- a/src/main/java/com/android/vts/api/TestAcknowledgmentRestServlet.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (C) 2017 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.api; - -import com.android.vts.entity.TestAcknowledgmentEntity; -import com.android.vts.util.DatastoreHelper; -import com.google.appengine.api.datastore.DatastoreFailureException; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.DatastoreTimeoutException; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Transaction; -import com.google.appengine.api.users.User; -import com.google.appengine.api.users.UserService; -import com.google.appengine.api.users.UserServiceFactory; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.ConcurrentModificationException; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Servlet for handling requests to fetch test acknowledgments. */ -public class TestAcknowledgmentRestServlet extends HttpServlet { - protected static final Logger logger = - Logger.getLogger(TestAcknowledgmentRestServlet.class.getName()); - - /** Read all test acknowledgments. */ - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - Query ackQuery = new Query(TestAcknowledgmentEntity.KIND); - List<JsonObject> testAcks = new ArrayList<>(); - for (Entity ackEntity : - datastore.prepare(ackQuery).asIterable(DatastoreHelper.getLargeBatchOptions())) { - TestAcknowledgmentEntity ack = TestAcknowledgmentEntity.fromEntity(ackEntity); - if (ack == null) continue; - testAcks.add(ack.toJson()); - } - response.setContentType("application/json"); - PrintWriter writer = response.getWriter(); - writer.print(new Gson().toJson(testAcks)); - writer.flush(); - } - - /** Create a test acknowledgment. */ - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - UserService userService = UserServiceFactory.getUserService(); - if (!userService.isUserAdmin()) { - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - return; - } - User currentUser = userService.getCurrentUser(); - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - StringBuilder sb = new StringBuilder(); - BufferedReader br = new BufferedReader(request.getReader()); - String str; - while ((str = br.readLine()) != null) { - sb.append(str); - } - JsonObject json; - try { - json = new JsonParser().parse(sb.toString()).getAsJsonObject(); - } catch (IllegalStateException e) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return; - } - TestAcknowledgmentEntity ack = TestAcknowledgmentEntity.fromJson(currentUser, json); - Transaction txn = datastore.beginTransaction(); - try { - Key key = datastore.put(ack.toEntity()); - txn.commit(); - - response.setContentType("application/json"); - PrintWriter writer = response.getWriter(); - writer.print(new Gson().toJson(KeyFactory.keyToString(key))); - writer.flush(); - } catch (ConcurrentModificationException - | DatastoreFailureException - | DatastoreTimeoutException e) { - txn.rollback(); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return; - } finally { - if (txn.isActive()) { - logger.log(Level.WARNING, "Transaction rollback forced acknowledgment post."); - txn.rollback(); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return; - } - } - response.setStatus(HttpServletResponse.SC_OK); - } - - /** Remove a test acknowledgment. */ - @Override - public void doDelete(HttpServletRequest request, HttpServletResponse response) - throws IOException { - UserService userService = UserServiceFactory.getUserService(); - if (!userService.isUserAdmin()) { - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - return; - } - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - String stringKey = request.getPathInfo(); - if (stringKey == null) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return; - } - if (stringKey.startsWith("/")) { - stringKey = stringKey.substring(1); - } - Key key = KeyFactory.stringToKey(stringKey); - if (!key.getKind().equals(TestAcknowledgmentEntity.KIND)) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return; - } - datastore.delete(key); - response.setStatus(HttpServletResponse.SC_OK); - } -} diff --git a/src/main/java/com/android/vts/api/TestDataForDevServlet.java b/src/main/java/com/android/vts/api/TestDataForDevServlet.java deleted file mode 100644 index 2ed387b..0000000 --- a/src/main/java/com/android/vts/api/TestDataForDevServlet.java +++ /dev/null @@ -1,676 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.android.vts.entity.BranchEntity; -import com.android.vts.entity.BuildTargetEntity; -import com.android.vts.entity.CodeCoverageEntity; -import com.android.vts.entity.CoverageEntity; -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.entity.TestStatusEntity; -import com.android.vts.entity.TestStatusEntity.TestCaseReference; -import com.android.vts.entity.TestSuiteFileEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.google.appengine.api.datastore.DatastoreFailureException; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.DatastoreTimeoutException; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Transaction; -import com.google.appengine.api.users.User; -import com.google.appengine.api.users.UserService; -import com.google.appengine.api.users.UserServiceFactory; -import com.google.appengine.api.utils.SystemProperty; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.file.FileSystems; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.Arrays; -import java.util.ArrayList; -import java.util.ConcurrentModificationException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Random; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.IntStream; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Servlet for handling requests to add mock data in datastore. */ -public class TestDataForDevServlet extends HttpServlet { - protected static final Logger logger = Logger.getLogger(TestDataForDevServlet.class.getName()); - - /** Google Cloud Storage project's default directory name for suite test result files */ - private static String GCS_SUITE_TEST_FOLDER_NAME; - - /** datastore instance to save the test data into datastore through datastore library. */ - private DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - /** - * Gson is a Java library that can be used to convert Java Objects into their JSON - * representation. It can also be used to convert a JSON string to an equivalent Java object. - */ - private Gson gson = new GsonBuilder().create(); - - /** System Configuration Property class */ - protected Properties systemConfigProp = new Properties(); - - @Override - public void init(ServletConfig cfg) throws ServletException { - super.init(cfg); - - try { - InputStream defaultInputStream = - TestDataForDevServlet.class - .getClassLoader() - .getResourceAsStream("config.properties"); - systemConfigProp.load(defaultInputStream); - - GCS_SUITE_TEST_FOLDER_NAME = systemConfigProp.getProperty("gcs.suiteTestFolderName"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * TestReportData class for mapping test-report-data.json. This internal class's each fields - * will be automatically mapped to test-report-data.json file through Gson - */ - private class TestReportDataObject { - private List<Test> testList; - - private class Test { - private List<TestRun> testRunList; - - private class TestRun { - private String testName; - private int type; - private long startTimestamp; - private long endTimestamp; - private String testBuildId; - private String hostName; - private long passCount; - private long failCount; - private boolean hasCoverage; - private long coveredLineCount; - private long totalLineCount; - private List<Long> testCaseIds; - private List<Long> failingTestcaseIds; - private List<Integer> failingTestcaseOffsets; - private List<String> links; - - private List<Coverage> coverageList; - private List<Profiling> profilingList; - private List<TestCaseRun> testCaseRunList; - private List<DeviceInfo> deviceInfoList; - private List<BuildTarget> buildTargetList; - private List<Branch> branchList; - - private class Coverage { - private String group; - private long coveredLineCount; - private long totalLineCount; - private String filePath; - private String projectName; - private String projectVersion; - private List<Long> lineCoverage; - } - - private class Profiling { - private String name; - private int type; - private int regressionMode; - private List<String> labels; - private List<Long> values; - private String xLabel; - private String yLabel; - private List<String> options; - } - - private class TestCaseRun { - private List<String> testCaseNames; - private List<Integer> results; - } - - private class DeviceInfo { - private String branch; - private String product; - private String buildFlavor; - private String buildId; - private String abiBitness; - private String abiName; - } - - private class BuildTarget { - private String targetName; - } - - private class Branch { - private String branchName; - } - } - } - - @Override - public String toString() { - return "(" + testList + ")"; - } - } - - private class TestPlanReportDataObject { - private List<TestPlan> testPlanList; - - private class TestPlan { - - private String testPlanName; - private List<String> testModules; - private List<Long> testTimes; - } - - @Override - public String toString() { - return "(" + testPlanList + ")"; - } - } - - private Map<String, Object> generateSuiteTestData( - HttpServletRequest request, HttpServletResponse response) { - Map<String, Object> resultMap = new HashMap<>(); - String fileSeparator = FileSystems.getDefault().getSeparator(); - Random rand = new Random(); - List<String> branchList = Arrays.asList("master", "oc_mr", "oc"); - List<String> targetList = - Arrays.asList( - "sailfish-userdebug", - "marlin-userdebug", - "taimen-userdebug", - "walleye-userdebug", - "aosp_arm_a-userdebug"); - branchList.forEach( - branch -> - targetList.forEach( - target -> - IntStream.range(0, 10) - .forEach( - idx -> { - String year = - String.format( - "%04d", 2010 + idx); - String month = - String.format( - "%02d", - rand.nextInt(12)); - String day = - String.format( - "%02d", - rand.nextInt(30)); - String fileName = - String.format( - "%02d%02d%02d.bin", - rand.nextInt(23) + 1, - rand.nextInt(59) + 1, - rand.nextInt(59) + 1); - - List<String> pathList = - Arrays.asList( - GCS_SUITE_TEST_FOLDER_NAME - == "" - ? "suite_result" - : GCS_SUITE_TEST_FOLDER_NAME, - year, - month, - day, - fileName); - - Path pathInfo = - Paths.get( - String.join( - fileSeparator, - pathList)); - - TestSuiteFileEntity - newTestSuiteFileEntity = - new TestSuiteFileEntity( - pathInfo - .toString()); - - com.googlecode.objectify.Key< - TestSuiteFileEntity> - testSuiteFileParent = - com.googlecode.objectify - .Key.create( - TestSuiteFileEntity - .class, - newTestSuiteFileEntity - .getFilePath()); - - - TestSuiteResultEntity - testSuiteResultEntity = - new TestSuiteResultEntity( - testSuiteFileParent, - Instant.now() - .minus( - rand - .nextInt( - 100), - ChronoUnit - .DAYS) - .getEpochSecond(), - Instant.now() - .minus( - rand - .nextInt( - 100), - ChronoUnit - .DAYS) - .getEpochSecond(), - 1, - idx / 2 == 0 - ? false - : true, - pathInfo - .toString(), - idx / 2 == 0 - ? "/error/infra/log" - : "", - "Test Place Name -" - + idx, - "Suite Test Plan", - "Suite Version " - + idx, - "Suite Test Name", - "Suite Build Number " - + idx, - rand.nextInt(), - rand.nextInt(), - branch, - target, - Long.toString( - Math - .abs( - rand - .nextLong())), - "Build System Fingerprint " - + idx, - "Build Vendor Fingerprint " - + idx, - rand.nextInt(), - rand.nextInt()); - - testSuiteResultEntity.save(newTestSuiteFileEntity); - }))); - resultMap.put("result", "successfully generated!"); - return resultMap; - } - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - String requestUri = request.getRequestURI(); - String requestArgs = request.getQueryString(); - - Map<String, Object> resultMap = new HashMap<>(); - String pathInfo = requestUri.replace("/api/test_data/", ""); - switch (pathInfo) { - case "suite": - resultMap = this.generateSuiteTestData(request, response); - break; - default: - throw new IllegalArgumentException("Invalid path info of URL"); - } - - String json = new Gson().toJson(resultMap); - response.setStatus(HttpServletResponse.SC_OK); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(json); - } - - /** Add mock data to local dev datastore. */ - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) { - response.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE); - return; - } - - UserService userService = UserServiceFactory.getUserService(); - User currentUser = userService.getCurrentUser(); - - String pathInfo = request.getPathInfo(); - String[] pathParts = pathInfo.split("/"); - if (pathParts.length > 1) { - // Read the json output - Reader postJsonReader = new InputStreamReader(request.getInputStream()); - Gson gson = new GsonBuilder().create(); - - String testType = pathParts[1]; - if (testType.equalsIgnoreCase("report")) { - TestReportDataObject trdObj = - gson.fromJson(postJsonReader, TestReportDataObject.class); - logger.log(Level.INFO, "trdObj => " + trdObj); - trdObj.testList.forEach( - test -> { - test.testRunList.forEach( - testRun -> { - TestEntity testEntity = new TestEntity(testRun.testName); - - Key testRunKey = - KeyFactory.createKey( - testEntity.getOldKey(), - TestRunEntity.KIND, - testRun.startTimestamp); - - List<TestCaseReference> failingTestCases = - new ArrayList<>(); - for (int idx = 0; - idx < testRun.failingTestcaseIds.size(); - idx++) { - failingTestCases.add( - new TestCaseReference( - testRun.failingTestcaseIds.get(idx), - testRun.failingTestcaseOffsets.get( - idx))); - } - - TestStatusEntity testStatusEntity = - new TestStatusEntity( - testRun.testName, - testRun.startTimestamp, - (int) testRun.passCount, - failingTestCases.size(), - failingTestCases); - datastore.put(testStatusEntity.toEntity()); - - testRun.coverageList.forEach( - testRunCoverage -> { - CoverageEntity coverageEntity = - new CoverageEntity( - testRunKey, - testRunCoverage.group, - testRunCoverage - .coveredLineCount, - testRunCoverage.totalLineCount, - testRunCoverage.filePath, - testRunCoverage.projectName, - testRunCoverage.projectVersion, - testRunCoverage.lineCoverage); - datastore.put(coverageEntity.toEntity()); - }); - - testRun.profilingList.forEach( - testRunProfile -> { - ProfilingPointRunEntity profilingEntity = - new ProfilingPointRunEntity( - testRunKey, - testRunProfile.name, - testRunProfile.type, - testRunProfile.regressionMode, - testRunProfile.labels, - testRunProfile.values, - testRunProfile.xLabel, - testRunProfile.yLabel, - testRunProfile.options); - datastore.put(profilingEntity.toEntity()); - }); - - TestCaseRunEntity testCaseEntity = new TestCaseRunEntity(); - testRun.testCaseRunList.forEach( - testCaseRun -> { - for (int idx = 0; - idx < testCaseRun.testCaseNames.size(); - idx++) { - testCaseEntity.addTestCase( - testCaseRun.testCaseNames.get(idx), - testCaseRun.results.get(idx)); - } - }); - datastore.put(testCaseEntity.toEntity()); - - testRun.deviceInfoList.forEach( - deviceInfo -> { - DeviceInfoEntity deviceInfoEntity = - new DeviceInfoEntity( - testRunKey, - deviceInfo.branch, - deviceInfo.product, - deviceInfo.buildFlavor, - deviceInfo.buildId, - deviceInfo.abiBitness, - deviceInfo.abiName); - ; - datastore.put(deviceInfoEntity.toEntity()); - }); - - testRun.buildTargetList.forEach( - buildTarget -> { - BuildTargetEntity buildTargetEntity = - new BuildTargetEntity( - buildTarget.targetName); - buildTargetEntity.save(); - }); - - testRun.branchList.forEach( - branch -> { - BranchEntity branchEntity = - new BranchEntity(branch.branchName); - branchEntity.save(); - }); - - boolean hasCodeCoverage = - testRun.totalLineCount > 0 - && testRun.coveredLineCount >= 0; - TestRunEntity testRunEntity = - new TestRunEntity( - testEntity.getOldKey(), - testRun.type, - testRun.startTimestamp, - testRun.endTimestamp, - testRun.testBuildId, - testRun.hostName, - testRun.passCount, - testRun.failCount, - hasCodeCoverage, - testRun.testCaseIds, - testRun.links); - datastore.put(testRunEntity.toEntity()); - - CodeCoverageEntity codeCoverageEntity = - new CodeCoverageEntity( - testRunEntity.getKey(), - testRun.coveredLineCount, - testRun.totalLineCount); - datastore.put(codeCoverageEntity.toEntity()); - - Entity newTestEntity = testEntity.toEntity(); - - Transaction txn = datastore.beginTransaction(); - try { - // Check if test already exists in the datastore - try { - Entity oldTest = - datastore.get(testEntity.getOldKey()); - TestEntity oldTestEntity = - TestEntity.fromEntity(oldTest); - if (oldTestEntity == null - || !oldTestEntity.equals(testEntity)) { - datastore.put(newTestEntity); - } - } catch (EntityNotFoundException e) { - datastore.put(newTestEntity); - } - txn.commit(); - - } catch (ConcurrentModificationException - | DatastoreFailureException - | DatastoreTimeoutException e) { - logger.log( - Level.WARNING, - "Retrying test run insert: " - + newTestEntity.getKey()); - } finally { - if (txn.isActive()) { - logger.log( - Level.WARNING, - "Transaction rollback forced for run: " - + testRunEntity.getKey()); - txn.rollback(); - } - } - }); - }); - } else { - TestPlanReportDataObject tprdObj = - gson.fromJson(postJsonReader, TestPlanReportDataObject.class); - tprdObj.testPlanList.forEach( - testPlan -> { - Entity testPlanEntity = - new TestPlanEntity(testPlan.testPlanName).toEntity(); - List<Key> testRunKeys = new ArrayList<>(); - for (int idx = 0; idx < testPlan.testModules.size(); idx++) { - String test = testPlan.testModules.get(idx); - long time = testPlan.testTimes.get(idx); - Key parentKey = KeyFactory.createKey(TestEntity.KIND, test); - Key testRunKey = - KeyFactory.createKey(parentKey, TestRunEntity.KIND, time); - testRunKeys.add(testRunKey); - } - Map<Key, Entity> testRuns = datastore.get(testRunKeys); - long passCount = 0; - long failCount = 0; - long startTimestamp = -1; - long endTimestamp = -1; - String testBuildId = null; - long type = 0; - Set<DeviceInfoEntity> devices = new HashSet<>(); - for (Key testRunKey : testRuns.keySet()) { - TestRunEntity testRun = - TestRunEntity.fromEntity(testRuns.get(testRunKey)); - if (testRun == null) { - continue; // not a valid test run - } - passCount += testRun.getPassCount(); - failCount += testRun.getFailCount(); - if (startTimestamp < 0 || testRunKey.getId() < startTimestamp) { - startTimestamp = testRunKey.getId(); - } - if (endTimestamp < 0 || testRun.getEndTimestamp() > endTimestamp) { - endTimestamp = testRun.getEndTimestamp(); - } - type = testRun.getType(); - testBuildId = testRun.getTestBuildId(); - Query deviceInfoQuery = - new Query(DeviceInfoEntity.KIND).setAncestor(testRunKey); - for (Entity deviceInfoEntity : - datastore.prepare(deviceInfoQuery).asIterable()) { - DeviceInfoEntity device = - DeviceInfoEntity.fromEntity(deviceInfoEntity); - if (device == null) { - continue; // invalid entity - } - devices.add(device); - } - } - if (startTimestamp < 0 || testBuildId == null || type == 0) { - logger.log( - Level.WARNING, - "Couldn't infer test run information from runs."); - return; - } - TestPlanRunEntity testPlanRun = - new TestPlanRunEntity( - testPlanEntity.getKey(), - testPlan.testPlanName, - type, - startTimestamp, - endTimestamp, - testBuildId, - passCount, - failCount, - 0L, - 0L, - testRunKeys); - - // Create the device infos. - for (DeviceInfoEntity device : devices) { - datastore.put( - device.copyWithParent(testPlanRun.getOfyKey()).toEntity()); - } - datastore.put(testPlanRun.toEntity()); - - Transaction txn = datastore.beginTransaction(); - try { - // Check if test already exists in the database - try { - datastore.get(testPlanEntity.getKey()); - } catch (EntityNotFoundException e) { - datastore.put(testPlanEntity); - } - txn.commit(); - } catch (ConcurrentModificationException - | DatastoreFailureException - | DatastoreTimeoutException e) { - logger.log( - Level.WARNING, - "Retrying test plan insert: " + testPlanEntity.getKey()); - } finally { - if (txn.isActive()) { - logger.log( - Level.WARNING, - "Transaction rollback forced for plan run: " - + testPlanRun.key); - txn.rollback(); - } - } - }); - } - } else { - logger.log(Level.WARNING, "URL path parameter is omitted!"); - } - - response.setStatus(HttpServletResponse.SC_OK); - } -} diff --git a/src/main/java/com/android/vts/api/TestRunRestServlet.java b/src/main/java/com/android/vts/api/TestRunRestServlet.java deleted file mode 100644 index 90fd3f9..0000000 --- a/src/main/java/com/android/vts/api/TestRunRestServlet.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.util.TestRunDetails; -import com.google.gson.Gson; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.logging.Logger; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Servlet for handling requests to fetch test case results. */ -public class TestRunRestServlet extends BaseApiServlet { - private static final String LATEST = "latest"; - protected static final Logger logger = Logger.getLogger(TestRunRestServlet.class.getName()); - - /** - * Get the test case results for the specified run of the specified test. - * - * @param test The test whose test cases to get. - * @param timeString The string representation of the test run timestamp (in microseconds). - * @return A TestRunDetails object with the test case details for the specified run. - */ - private TestRunDetails getTestRunDetails(String test, String timeString) { - long timestamp; - try { - timestamp = Long.parseLong(timeString); - if (timestamp <= 0) throw new NumberFormatException(); - timestamp = timestamp > 0 ? timestamp : null; - } catch (NumberFormatException e) { - return null; - } - - TestRunEntity testRunEntity = TestRunEntity.getByTestNameId(test, timestamp); - - return getTestRunDetails(testRunEntity); - } - - /** - * Get the test case results for the latest run of the specified test. - * - * @param testName The test whose test cases to get. - * @return A TestRunDetails object with the test case details for the latest run. - */ - private TestRunDetails getLatestTestRunDetails(String testName) { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create( - TestEntity.class, testName); - - TestRunEntity testRun = ofy().load().type(TestRunEntity.class).ancestor(testKey) - .filter("type", 2).orderKey(true).first().now(); - - if (testRun == null) return null; - - return getTestRunDetails(testRun); - } - - /** - * Get TestRunDetails instance from codeCoverageEntity instance. - * - * @param testRunEntity The TestRunEntity to access testCaseId. - * @return A TestRunDetails object with the test case details for the latest run. - */ - private TestRunDetails getTestRunDetails(TestRunEntity testRunEntity) { - TestRunDetails details = new TestRunDetails(); - List<com.googlecode.objectify.Key<TestCaseRunEntity>> testCaseKeyList = new ArrayList<>(); - if ( Objects.isNull(testRunEntity.getTestCaseIds()) ) { - return details; - } else { - for (long testCaseId : testRunEntity.getTestCaseIds()) { - testCaseKeyList.add( - com.googlecode.objectify.Key.create(TestCaseRunEntity.class, testCaseId)); - } - Map<com.googlecode.objectify.Key<TestCaseRunEntity>, TestCaseRunEntity> - testCaseRunEntityKeyMap = ofy().load().keys(() -> testCaseKeyList.iterator()); - testCaseRunEntityKeyMap.forEach((key, value) -> details.addTestCase(value)); - } - return details; - } - - /** - * Get the test case details for a test run. - * - * Expected format: (1) /api/test_run?test=[test name]×tamp=[timestamp] to the details - * for a specific run, or (2) /api/test_run?test=[test name]×tamp=latest -- the details for - * the latest test run. - */ - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - String test = request.getParameter("test"); - String timeString = request.getParameter("timestamp"); - TestRunDetails details = null; - - if (timeString != null && timeString.equals(LATEST)) { - details = getLatestTestRunDetails(test); - } else if (timeString != null) { - details = getTestRunDetails(test, timeString); - } - - if (details == null) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - } else { - response.setStatus(HttpServletResponse.SC_OK); - response.setContentType("application/json"); - PrintWriter writer = response.getWriter(); - writer.print(new Gson().toJson(details.toJson())); - writer.flush(); - } - } -} diff --git a/src/main/java/com/android/vts/api/TestSuiteResultRestServlet.java b/src/main/java/com/android/vts/api/TestSuiteResultRestServlet.java deleted file mode 100644 index 38be2c0..0000000 --- a/src/main/java/com/android/vts/api/TestSuiteResultRestServlet.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.android.vts.entity.TestSuiteFileEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.android.vts.proto.TestSuiteResultMessageProto; -import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; -import com.google.api.client.http.javanet.NetHttpTransport; -import com.google.api.client.json.jackson.JacksonFactory; -import com.google.api.services.oauth2.Oauth2; -import com.google.api.services.oauth2.model.Tokeninfo; -import com.google.gson.Gson; -import com.googlecode.objectify.Key; -import org.apache.commons.codec.binary.Base64; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; - -/** REST endpoint for posting test suite data to the Dashboard. */ -public class TestSuiteResultRestServlet extends BaseApiServlet { - private static String SERVICE_CLIENT_ID; - private static final String SERVICE_NAME = "VTS Dashboard"; - private static final Logger logger = - Logger.getLogger(TestSuiteResultRestServlet.class.getName()); - - @Override - public void init(ServletConfig cfg) throws ServletException { - super.init(cfg); - - SERVICE_CLIENT_ID = systemConfigProp.getProperty("appengine.serviceClientID"); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - // Retrieve the params - TestSuiteResultMessageProto.TestSuiteResultMessage testSuiteResultMessage; - try { - String payload = request.getReader().lines().collect(Collectors.joining()); - byte[] value = Base64.decodeBase64(payload); - testSuiteResultMessage = - TestSuiteResultMessageProto.TestSuiteResultMessage.parseFrom(value); - } catch (IOException e) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - logger.log(Level.WARNING, "Invalid proto: " + e.getLocalizedMessage()); - return; - } - - Map<String, Object> resultMap = new HashMap<>(); - // Verify service account access token. - if (testSuiteResultMessage.hasAccessToken()) { - String accessToken = testSuiteResultMessage.getAccessToken(); - logger.log(Level.INFO, "accessToken => " + accessToken); - GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken); - Oauth2 oauth2 = - new Oauth2.Builder(new NetHttpTransport(), new JacksonFactory(), credential) - .setApplicationName(SERVICE_NAME) - .build(); - Tokeninfo tokenInfo = oauth2.tokeninfo().setAccessToken(accessToken).execute(); - - if (tokenInfo.getIssuedTo().equals(SERVICE_CLIENT_ID)) { - String filePath = "suite_result/2019/04/06/132343.bin"; - Key<TestSuiteFileEntity> testSuiteFileParent = - Key.create(TestSuiteFileEntity.class, filePath); - TestSuiteFileEntity newTestSuiteFileEntity = new TestSuiteFileEntity(filePath); - TestSuiteResultEntity testSuiteResultEntity = - new TestSuiteResultEntity( - testSuiteFileParent, - testSuiteResultMessage.getStartTime(), - testSuiteResultMessage.getEndTime(), - testSuiteResultMessage.getTestType(), - testSuiteResultMessage.getBootSuccess(), - testSuiteResultMessage.getResultPath(), - testSuiteResultMessage.getInfraLogPath(), - testSuiteResultMessage.getHostName(), - testSuiteResultMessage.getSuitePlan(), - testSuiteResultMessage.getSuiteVersion(), - testSuiteResultMessage.getSuiteName(), - testSuiteResultMessage.getSuiteBuildNumber(), - testSuiteResultMessage.getModulesDone(), - testSuiteResultMessage.getModulesTotal(), - testSuiteResultMessage.getBranch(), - testSuiteResultMessage.getTarget(), - testSuiteResultMessage.getBuildId(), - testSuiteResultMessage.getBuildSystemFingerprint(), - testSuiteResultMessage.getBuildVendorFingerprint(), - testSuiteResultMessage.getPassedTestCaseCount(), - testSuiteResultMessage.getFailedTestCaseCount()); - - testSuiteResultEntity.save(newTestSuiteFileEntity); - resultMap.put("result", "successfully saved!"); - } else { - logger.log(Level.WARNING, "service_client_id didn't match!"); - logger.log(Level.INFO, "SERVICE_CLIENT_ID => " + tokenInfo.getIssuedTo()); - resultMap.put("result", "Wrong Service Client ID!"); - } - } else { - logger.log(Level.WARNING, "postMessage do not contain any accessToken!"); - resultMap.put("result", "Access Token Missing!"); - } - String json = new Gson().toJson(resultMap); - response.setStatus(HttpServletResponse.SC_OK); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(json); - } -} diff --git a/src/main/java/com/android/vts/api/UserFavoriteRestServlet.java b/src/main/java/com/android/vts/api/UserFavoriteRestServlet.java deleted file mode 100644 index 30fd649..0000000 --- a/src/main/java/com/android/vts/api/UserFavoriteRestServlet.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.api; - -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.UserFavoriteEntity; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.CompositeFilterOperator; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.FilterOperator; -import com.google.appengine.api.datastore.Query.FilterPredicate; -import com.google.appengine.api.datastore.Transaction; -import com.google.appengine.api.users.User; -import com.google.appengine.api.users.UserService; -import com.google.appengine.api.users.UserServiceFactory; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Servlet for handling requests to add or remove subscriptions. */ -public class UserFavoriteRestServlet extends BaseApiServlet { - protected static final Logger logger = - Logger.getLogger(UserFavoriteRestServlet.class.getName()); - - /** - * Add a new favorite entity. - * - * @param user The user for which to add a favorite. - * @param test The name of the test. - * @param muteNotifications True if the subscriber has muted notifications, false otherwise. - * @param response The servlet response object. - * @return a json object with the generated key to the new favorite entity. - * @throws IOException - */ - private static JsonObject addFavorite( - User user, String test, boolean muteNotifications, HttpServletResponse response) - throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Key addedTestKey = KeyFactory.createKey(TestEntity.KIND, test); - // Filter the tests that exist from the set of tests to add - try { - datastore.get(addedTestKey); - } catch (EntityNotFoundException e) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return null; - } - - Filter userFilter = - new FilterPredicate(UserFavoriteEntity.USER, FilterOperator.EQUAL, user); - Filter testFilter = - new FilterPredicate( - UserFavoriteEntity.TEST_KEY, FilterOperator.EQUAL, addedTestKey); - Query q = - new Query(UserFavoriteEntity.KIND) - .setFilter(CompositeFilterOperator.and(userFilter, testFilter)) - .setKeysOnly(); - - Key favoriteKey = null; - - Transaction txn = datastore.beginTransaction(); - try { - for (Entity e : datastore.prepare(q).asIterable()) { - favoriteKey = e.getKey(); - break; - } - if (favoriteKey == null) { - UserFavoriteEntity favorite = - new UserFavoriteEntity(user, addedTestKey, muteNotifications); - Entity entity = favorite.toEntity(); - datastore.put(entity); - favoriteKey = entity.getKey(); - } - txn.commit(); - } finally { - if (txn.isActive()) { - logger.log( - Level.WARNING, - "Transaction rollback forced for favorite creation: " + test); - txn.rollback(); - } - } - JsonObject json = new JsonObject(); - json.add("key", new JsonPrimitive(KeyFactory.keyToString(favoriteKey))); - return json; - } - - /** - * @param user The user for which to add a favorite. - * @param favoriteKey The database key to the favorite entity to update. - * @param muteNotifications True if the subscriber has muted notifications, false otherwise. - * @param response The servlet response object. - * @return a json object with the generated key to the new favorite entity. - * @throws IOException - */ - private static JsonObject updateFavorite( - User user, Key favoriteKey, boolean muteNotifications, HttpServletResponse response) - throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Entity favoriteEntity; - try { - favoriteEntity = datastore.get(favoriteKey); - } catch (EntityNotFoundException e) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return null; - } - UserFavoriteEntity favorite = UserFavoriteEntity.fromEntity(favoriteEntity); - if (favorite.user.getUserId() == user.getUserId()) { - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - return null; - } - if (favorite.muteNotifications != muteNotifications) { - Transaction txn = datastore.beginTransaction(); - try { - favorite.muteNotifications = muteNotifications; - datastore.put(favorite.toEntity()); - txn.commit(); - } finally { - if (txn.isActive()) { - logger.log( - Level.WARNING, - "Transaction rollback forced for favorite update: " + favoriteKey); - txn.rollback(); - } - } - } - JsonObject json = new JsonObject(); - json.add("key", new JsonPrimitive(KeyFactory.keyToString(favoriteKey))); - return json; - } - - /** Add a test to the user's favorites. */ - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - UserService userService = UserServiceFactory.getUserService(); - User currentUser = userService.getCurrentUser(); - - boolean muteNotifications = false; - if (request.getParameter(UserFavoriteEntity.MUTE_NOTIFICATIONS) != null) { - muteNotifications = - Boolean.parseBoolean( - request.getParameter(UserFavoriteEntity.MUTE_NOTIFICATIONS)); - } - - String userFavoritesKeyString = request.getParameter("userFavoritesKey"); - String testName = request.getParameter("testName"); - - JsonObject returnData = null; - if (userFavoritesKeyString != null) { - Key userFavoritesKey = KeyFactory.stringToKey(userFavoritesKeyString); - returnData = updateFavorite(currentUser, userFavoritesKey, muteNotifications, response); - } else if (testName != null) { - returnData = addFavorite(currentUser, testName, muteNotifications, response); - } - - if (returnData != null) { - response.setContentType("application/json"); - PrintWriter writer = response.getWriter(); - writer.print(new Gson().toJson(returnData)); - writer.flush(); - } - } - - /** Remove a test from the user's favorites. */ - @Override - public void doDelete(HttpServletRequest request, HttpServletResponse response) - throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - String stringKey = request.getPathInfo(); - if (stringKey == null) { - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return; - } - if (stringKey.startsWith("/")) { - stringKey = stringKey.substring(1); - } - datastore.delete(KeyFactory.stringToKey(stringKey)); - response.setStatus(HttpServletResponse.SC_OK); - } -} diff --git a/src/main/java/com/android/vts/config/ObjectifyListener.java b/src/main/java/com/android/vts/config/ObjectifyListener.java deleted file mode 100644 index 02e0215..0000000 --- a/src/main/java/com/android/vts/config/ObjectifyListener.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * 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.ApiCoverageEntity; -import com.android.vts.entity.BranchEntity; -import com.android.vts.entity.BuildTargetEntity; -import com.android.vts.entity.ApiCoverageExcludedEntity; -import com.android.vts.entity.CodeCoverageEntity; -import com.android.vts.entity.CoverageEntity; -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.HalApiEntity; -import com.android.vts.entity.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.entity.RoleEntity; -import com.android.vts.entity.TestAcknowledgmentEntity; -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestCoverageStatusEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.entity.TestStatusEntity; -import com.android.vts.entity.TestSuiteFileEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.android.vts.entity.UserEntity; -import com.google.api.client.extensions.appengine.datastore.AppEngineDataStoreFactory; -import com.google.api.services.sheets.v4.SheetsScopes; -import com.googlecode.objectify.ObjectifyService; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.function.Supplier; -import java.util.stream.Stream; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; -import javax.servlet.annotation.WebListener; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; -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()); - - - /** Global instance of the DataStoreFactory. */ - private static final AppEngineDataStoreFactory DATA_STORE_FACTORY = - AppEngineDataStoreFactory.getDefaultInstance(); - - /** Global instance of the scopes. */ - private static final List<String> GOOGLE_API_SCOPES = - Collections.singletonList(SheetsScopes.SPREADSHEETS_READONLY); - - /** - * 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(BranchEntity.class); - ObjectifyService.register(BuildTargetEntity.class); - - ObjectifyService.register(HalApiEntity.class); - ObjectifyService.register(ApiCoverageEntity.class); - ObjectifyService.register(ApiCoverageExcludedEntity.class); - ObjectifyService.register(CodeCoverageEntity.class); - ObjectifyService.register(CoverageEntity.class); - ObjectifyService.register(DeviceInfoEntity.class); - ObjectifyService.register(TestCoverageStatusEntity.class); - - ObjectifyService.register(ProfilingPointEntity.class); - ObjectifyService.register(ProfilingPointRunEntity.class); - ObjectifyService.register(ProfilingPointSummaryEntity.class); - - ObjectifyService.register(TestEntity.class); - ObjectifyService.register(TestPlanEntity.class); - ObjectifyService.register(TestPlanRunEntity.class); - ObjectifyService.register(TestRunEntity.class); - ObjectifyService.register(TestCaseRunEntity.class); - ObjectifyService.register(TestStatusEntity.class); - ObjectifyService.register(TestSuiteFileEntity.class); - ObjectifyService.register(TestSuiteResultEntity.class); - ObjectifyService.register(TestAcknowledgmentEntity.class); - ObjectifyService.register(RoleEntity.class); - ObjectifyService.register(UserEntity.class); - ObjectifyService.begin(); - logger.log(Level.INFO, "Value Initialized from context."); - - Properties systemConfigProp = new Properties(); - - try { - InputStream defaultInputStream = - ObjectifyListener.class - .getClassLoader() - .getResourceAsStream("config.properties"); - - systemConfigProp.load(defaultInputStream); - - servletContextEvent - .getServletContext() - .setAttribute("systemConfigProp", systemConfigProp); - servletContextEvent - .getServletContext() - .setAttribute("dataStoreFactory", DATA_STORE_FACTORY); - servletContextEvent - .getServletContext() - .setAttribute("googleApiScopes", GOOGLE_API_SCOPES); - - String roleList = systemConfigProp.getProperty("user.roleList"); - Supplier<Stream<String>> streamSupplier = () -> Arrays.stream(roleList.split(",")); - this.createRoles(streamSupplier.get()); - - String adminEmail = systemConfigProp.getProperty("user.adminEmail"); - if (adminEmail.isEmpty()) { - logger.log(Level.WARNING, "Admin email is not properly set. Check config file"); - } else { - String adminName = systemConfigProp.getProperty("user.adminName"); - String adminCompany = systemConfigProp.getProperty("user.adminCompany"); - Optional<String> roleName = - streamSupplier.get().filter(r -> r.equals("admin")).findFirst(); - this.createAdminUser(adminEmail, adminName, adminCompany, roleName.orElse("admin")); - } - } catch (FileNotFoundException e) { - logger.log(Level.SEVERE, e.getMessage()); - } catch (IOException e) { - logger.log(Level.SEVERE, e.getMessage()); - } - } - - /** 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."); - } - - private void createRoles(Stream<String> roleStream) { - roleStream - .map(role -> role.trim()) - .forEach( - roleName -> { - RoleEntity roleEntity = new RoleEntity(roleName); - roleEntity.save(); - }); - } - - private void createAdminUser(String email, String name, String company, String role) { - Optional<UserEntity> adminUserEntityOptional = - Optional.ofNullable(UserEntity.getAdminUser(email)); - if (adminUserEntityOptional.isPresent()) { - logger.log(Level.INFO, "The user is already registered."); - } else { - UserEntity userEntity = new UserEntity(email, name, company, role); - userEntity.setIsAdmin(true); - userEntity.save(); - logger.log(Level.INFO, "The user is saved successfully."); - } - } -} diff --git a/src/main/java/com/android/vts/config/ObjectifyWebFilter.java b/src/main/java/com/android/vts/config/ObjectifyWebFilter.java deleted file mode 100644 index 3813d0b..0000000 --- a/src/main/java/com/android/vts/config/ObjectifyWebFilter.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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/ApiCoverageEntity.java b/src/main/java/com/android/vts/entity/ApiCoverageEntity.java deleted file mode 100644 index 9c74032..0000000 --- a/src/main/java/com/android/vts/entity/ApiCoverageEntity.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * 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 static com.googlecode.objectify.ObjectifyService.ofy; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.googlecode.objectify.Key; -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 com.googlecode.objectify.annotation.Parent; -import java.util.Date; -import java.util.List; -import java.util.UUID; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -/** Entity Class for ApiCoverageEntity */ -@Cache -@Entity(name = "ApiCoverage") -@EqualsAndHashCode(of = "id") -@NoArgsConstructor -@JsonAutoDetect(fieldVisibility = Visibility.ANY) -@JsonIgnoreProperties({"id", "parent"}) -public class ApiCoverageEntity implements DashboardEntity { - - /** ApiCoverageEntity id field */ - @Id @Getter @Setter String id; - - @Parent @Getter Key<?> parent; - - /** HAL package name. e.g. android.hardware.foo. */ - @Index @Getter @Setter String halPackageName; - - /** HAL (major) version. e.g. 1. */ - @Index @Getter @Setter int halMajorVersion; - - /** HAL (minor) version. e.g. 0. */ - @Index @Getter @Setter int halMinorVersion; - - /** HAL interface name. e.g. IFoo. */ - @Index @Getter @Setter String halInterfaceName; - - /** List of HAL API */ - @Getter @Setter List<String> halApi; - - /** List of HAL covered API */ - @Getter @Setter List<String> coveredHalApi; - - /** When this record was created or updated */ - @Index Date updated; - - /** Constructor function for ApiCoverageEntity Class */ - public ApiCoverageEntity( - com.google.appengine.api.datastore.Key testRunKey, - String halPackageName, - int halVersionMajor, - int halVersionMinor, - String halInterfaceName, - List<String> halApi, - List<String> coveredHalApi) { - this.id = UUID.randomUUID().toString(); - this.parent = getParentKey(testRunKey); - - this.halPackageName = halPackageName; - this.halMajorVersion = halVersionMajor; - this.halMinorVersion = halVersionMinor; - this.halInterfaceName = halInterfaceName; - this.halApi = halApi; - this.coveredHalApi = coveredHalApi; - this.updated = new Date(); - } - - /** Constructor function for ApiCoverageEntity Class with objectify Key. */ - public ApiCoverageEntity( - Key testRunKey, - String halPackageName, - int halVersionMajor, - int halVersionMinor, - String halInterfaceName, - List<String> halApi, - List<String> coveredHalApi) { - this.id = UUID.randomUUID().toString(); - this.parent = testRunKey; - - this.halPackageName = halPackageName; - this.halMajorVersion = halVersionMajor; - this.halMinorVersion = halVersionMinor; - this.halInterfaceName = halInterfaceName; - this.halApi = halApi; - this.coveredHalApi = coveredHalApi; - this.updated = new Date(); - } - - /** Get objectify Key from datastore Key type */ - private Key getParentKey(com.google.appengine.api.datastore.Key testRunKey) { - Key testParentKey = Key.create(TestEntity.class, testRunKey.getParent().getName()); - return Key.create(testParentKey, TestRunEntity.class, testRunKey.getId()); - } - - /** Get UrlSafeKey from ApiCoverageEntity Information */ - public String getUrlSafeKey() { - Key uuidKey = Key.create(this.parent, ApiCoverageEntity.class, this.id); - return uuidKey.toUrlSafe(); - } - - /** Saving function for the instance of this class */ - @Override - public Key<ApiCoverageEntity> save() { - this.id = UUID.randomUUID().toString(); - this.updated = new Date(); - return ofy().save().entity(this).now(); - } - - /** Get List of ApiCoverageEntity by HAL interface name */ - public static ApiCoverageEntity getByUrlSafeKey(String urlSafeKey) { - return ofy().load() - .type(ApiCoverageEntity.class) - .filterKey(com.google.cloud.datastore.Key.fromUrlSafe(urlSafeKey)) - .first() - .now(); - } - - /** Get List of ApiCoverageEntity by HAL interface name */ - public static List<ApiCoverageEntity> getByInterfaceNameList(String halInterfaceName) { - return ofy().load() - .type(ApiCoverageEntity.class) - .filter("halInterfaceName", halInterfaceName) - .list(); - } - - /** Get List of ApiCoverageEntity by HAL package name */ - public static List<ApiCoverageEntity> getByPackageNameList(String packageName) { - return ofy().load() - .type(ApiCoverageEntity.class) - .filter("halPackageName", packageName) - .list(); - } -} diff --git a/src/main/java/com/android/vts/entity/ApiCoverageExcludedEntity.java b/src/main/java/com/android/vts/entity/ApiCoverageExcludedEntity.java deleted file mode 100644 index 61bd6a7..0000000 --- a/src/main/java/com/android/vts/entity/ApiCoverageExcludedEntity.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.googlecode.objectify.Key; -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 java.util.List; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** - * This entity class contain the excluded API information. And this information will be used to - * calculate more precise the ratio of API coverage. - */ -@Cache -@Entity(name = "ApiCoverageExcluded") -@EqualsAndHashCode(of = "id") -@NoArgsConstructor -@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) -@JsonIgnoreProperties({"id", "parent"}) -public class ApiCoverageExcludedEntity implements DashboardEntity { - - /** ApiCoverageEntity id field */ - @Id @Getter @Setter private String id; - - /** Package name. e.g. android.hardware.foo. */ - @Index @Getter @Setter private String packageName; - - /** Major Version. e.g. 1, 2. */ - @Getter @Setter private int majorVersion; - - /** Minor Version. e.g. 0. */ - @Getter @Setter private int minorVersion; - - /** Interface name. e.g. IFoo. */ - @Index @Getter @Setter private String interfaceName; - - /** API Name */ - @Index @Getter @Setter private String apiName; - - /** The reason comment for the excluded API */ - @Getter @Setter private String comment; - - /** When this record was created or updated */ - @Index @Getter @Setter private Date updated; - - /** Constructor function for ApiCoverageExcludedEntity Class */ - public ApiCoverageExcludedEntity( - String packageName, - String version, - String interfaceName, - String apiName, - String comment) { - this.id = this.getObjectifyId(); - this.packageName = packageName; - this.interfaceName = interfaceName; - this.apiName = apiName; - this.comment = comment; - this.updated = new Date(); - - this.setVersions(version); - } - - /** Setting major and minor version from version string */ - private void setVersions(String version) { - String[] versionArray = version.split("[.]"); - if (versionArray.length == 0) { - this.majorVersion = 0; - this.minorVersion = 0; - } else if (versionArray.length == 1) { - this.majorVersion = Integer.parseInt(versionArray[0]); - this.minorVersion = 0; - } else { - this.majorVersion = Integer.parseInt(versionArray[0]); - this.minorVersion = Integer.parseInt(versionArray[1]); - } - } - - /** Getting objectify ID from the entity information */ - private String getObjectifyId() { - return this.packageName - + "." - + this.majorVersion - + "." - + this.minorVersion - + "." - + this.interfaceName - + "." - + this.apiName; - } - - /** Getting key from the entity */ - public Key<ApiCoverageExcludedEntity> getKey() { - return Key.create(ApiCoverageExcludedEntity.class, this.getObjectifyId()); - } - - /** Saving function for the instance of this class */ - @Override - public Key<ApiCoverageExcludedEntity> save() { - return ofy().save().entity(this).now(); - } - - /** Get All Key List of ApiCoverageExcludedEntity */ - public static List<Key<ApiCoverageExcludedEntity>> getAllKeyList() { - return ofy().load().type(ApiCoverageExcludedEntity.class).keys().list(); - } - -} diff --git a/src/main/java/com/android/vts/entity/BranchEntity.java b/src/main/java/com/android/vts/entity/BranchEntity.java deleted file mode 100644 index 1c9ea52..0000000 --- a/src/main/java/com/android/vts/entity/BranchEntity.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "Branch") -@Cache -@Data -@NoArgsConstructor -/** Entity describing a branch. */ -public class BranchEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(BranchEntity.class.getName()); - - public static final String KIND = "Branch"; // The entity kind. - - @Id private String name; - - /** - * Create a BranchEntity object. - * - * @param branchName The name of the branch. - */ - public BranchEntity(String branchName) { - this.name = branchName; - } - - public Key getKey() { - return KeyFactory.createKey(KIND, this.name); - } - - /** find by branch name */ - public static List<String> getByBranch(String branchName) { - if (branchName.equals("*")) { - return ofy().load() - .type(BranchEntity.class) - .limit(100) - .list() - .stream() - .map(b -> b.name) - .collect(Collectors.toList()); - } else { - com.googlecode.objectify.Key startKey = - com.googlecode.objectify.Key.create(BranchEntity.class, branchName); - - int lastPosition = branchName.length() - 1; - int lastCharValue = branchName.charAt(lastPosition); - String nextChar = String.valueOf((char) (lastCharValue + 1)); - - String nextBranchName = branchName.substring(0, lastPosition) + nextChar; - com.googlecode.objectify.Key endKey = - com.googlecode.objectify.Key.create(BranchEntity.class, nextBranchName); - return ofy().load() - .type(BranchEntity.class) - .filterKey(">=", startKey) - .filterKey("<", endKey) - .list() - .stream() - .map(b -> b.name) - .collect(Collectors.toList()); - } - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<BranchEntity> save() { - return ofy().save().entity(this).now(); - } - - /** - * Convert an Entity object to a BranchEntity. - * - * @param e The entity to process. - * @return BranchEntity object with the properties from e, or null if incompatible. - */ - public static BranchEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) || e.getKey().getName() == null) { - logger.log(Level.WARNING, "Missing branch attributes in entity: " + e.toString()); - return null; - } - String branchName = e.getKey().getName(); - return new BranchEntity(branchName); - } -} diff --git a/src/main/java/com/android/vts/entity/BuildTargetEntity.java b/src/main/java/com/android/vts/entity/BuildTargetEntity.java deleted file mode 100644 index 4180213..0000000 --- a/src/main/java/com/android/vts/entity/BuildTargetEntity.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "BuildTarget") -@Cache -@Data -@NoArgsConstructor -/** Entity describing a build target. */ -public class BuildTargetEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(BuildTargetEntity.class.getName()); - - public static final String KIND = "BuildTarget"; // The entity kind. - - @Id private String name; - - /** - * Create a BuildTargetEntity object. - * - * @param targetName The name of the build target. - */ - public BuildTargetEntity(String targetName) { - this.name = targetName; - } - - public Key getKey() { - return KeyFactory.createKey(KIND, this.name); - } - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<BuildTargetEntity> save() { - return ofy().save().entity(this).now(); - } - - /** find by Build Target Name */ - public static List<String> getByBuildTarget(String buildTargetName) { - if (buildTargetName.equals("*")) { - return ofy().load() - .type(BuildTargetEntity.class) - .limit(100) - .list() - .stream() - .map(b -> b.name) - .collect(Collectors.toList()); - } else { - com.googlecode.objectify.Key startKey = - com.googlecode.objectify.Key.create(BuildTargetEntity.class, buildTargetName); - - int lastPosition = buildTargetName.length() - 1; - int lastCharValue = buildTargetName.charAt(lastPosition); - String nextChar = String.valueOf((char) (lastCharValue + 1)); - - String nextBuildTargetName = buildTargetName.substring(0, lastPosition) + nextChar; - com.googlecode.objectify.Key endKey = - com.googlecode.objectify.Key.create( - BuildTargetEntity.class, nextBuildTargetName); - return ofy().load() - .type(BuildTargetEntity.class) - .filterKey(">=", startKey) - .filterKey("<", endKey) - .list() - .stream() - .map(b -> b.name) - .collect(Collectors.toList()); - } - } - - /** - * Convert an Entity object to a BuildTargetEntity. - * - * @param e The entity to process. - * @return BuildTargetEntity object with the properties from e, or null if incompatible. - */ - public static BuildTargetEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) || e.getKey().getName() == null) { - logger.log(Level.WARNING, "Missing build target attributes in entity: " + e.toString()); - return null; - } - String targetName = e.getKey().getName(); - return new BuildTargetEntity(targetName); - } -} diff --git a/src/main/java/com/android/vts/entity/CodeCoverageEntity.java b/src/main/java/com/android/vts/entity/CodeCoverageEntity.java deleted file mode 100644 index 2a46b1f..0000000 --- a/src/main/java/com/android/vts/entity/CodeCoverageEntity.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * 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.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.google.appengine.api.datastore.KeyFactory; -import com.googlecode.objectify.Key; - -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 com.googlecode.objectify.annotation.Parent; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.util.Date; -import java.util.logging.Logger; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Entity Class for CodeCoverageEntity */ -@Cache -@Entity(name = "CodeCoverage") -@EqualsAndHashCode(of = "id") -@NoArgsConstructor -@JsonAutoDetect(fieldVisibility = Visibility.ANY) -@JsonIgnoreProperties({"id", "parent"}) -public class CodeCoverageEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(CodeCoverageEntity.class.getName()); - - public static final String KIND = "CodeCoverage"; - - public static final String COVERED_LINE_COUNT = "coveredLineCount"; - public static final String TOTAL_LINE_COUNT = "totalLineCount"; - - /** CodeCoverageEntity id field */ - @Id @Getter @Setter Long id; - - @Parent @Getter Key<?> parent; - - @Index @Getter @Setter private long coveredLineCount; - - @Index @Getter @Setter private long totalLineCount; - - /** When this record was created or updated */ - @Index Date updated; - - /** Constructor function for ApiCoverageEntity Class */ - public CodeCoverageEntity( - com.google.appengine.api.datastore.Key testRunKey, - long coveredLineCount, - long totalLineCount) { - - this.parent = getParentKey(testRunKey); - - this.coveredLineCount = coveredLineCount; - this.totalLineCount = totalLineCount; - } - - /** Constructor function for ApiCoverageEntity Class */ - public CodeCoverageEntity( - long id, - com.google.appengine.api.datastore.Key testRunKey, - long coveredLineCount, - long totalLineCount) { - this.id = id; - - this.parent = getParentKey(testRunKey); - - this.coveredLineCount = coveredLineCount; - this.totalLineCount = totalLineCount; - } - - /** Constructor function for ApiCoverageEntity Class with objectify key*/ - public CodeCoverageEntity(Key testRunKey, long coveredLineCount, long totalLineCount) { - this.parent = testRunKey; - this.coveredLineCount = coveredLineCount; - this.totalLineCount = totalLineCount; - } - - /** Get objectify Key from datastore Key type */ - private Key getParentKey(com.google.appengine.api.datastore.Key testRunKey) { - Key testParentKey = Key.create(TestEntity.class, testRunKey.getParent().getName()); - return Key.create(testParentKey, TestRunEntity.class, testRunKey.getId()); - } - - /** Get UrlSafeKey from ApiCoverageEntity Information */ - public String getUrlSafeKey() { - Key uuidKey = Key.create(this.parent, CodeCoverageEntity.class, this.id); - return uuidKey.toUrlSafe(); - } - - /** Saving function for the instance of this class */ - @Override - public Key<CodeCoverageEntity> save() { - this.id = this.getParent().getId(); - this.updated = new Date(); - return ofy().save().entity(this).now(); - } - - public com.google.appengine.api.datastore.Entity toEntity() { - com.google.appengine.api.datastore.Key testKey = - KeyFactory.createKey(TestEntity.KIND, this.getParent().getParent().getName()); - com.google.appengine.api.datastore.Key testRunKey = - KeyFactory.createKey(testKey, TestRunEntity.KIND, this.getParent().getId()); - com.google.appengine.api.datastore.Key codeCoverageKey = - KeyFactory.createKey(testRunKey, KIND, this.getParent().getId()); - - com.google.appengine.api.datastore.Entity codeCoverageEntity = - new com.google.appengine.api.datastore.Entity(codeCoverageKey); - codeCoverageEntity.setProperty(COVERED_LINE_COUNT, this.coveredLineCount); - codeCoverageEntity.setProperty(TOTAL_LINE_COUNT, this.totalLineCount); - codeCoverageEntity.setIndexedProperty("updated", new Date()); - return codeCoverageEntity; - } -} diff --git a/src/main/java/com/android/vts/entity/CodeCoverageFileEntity.java b/src/main/java/com/android/vts/entity/CodeCoverageFileEntity.java deleted file mode 100644 index fe4e8a0..0000000 --- a/src/main/java/com/android/vts/entity/CodeCoverageFileEntity.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * 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.Key; - -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 com.googlecode.objectify.annotation.Parent; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.util.List; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Entity Class for CodeCoverageFile */ -@Cache -@Entity(name = "CodeCoverageFile") -@EqualsAndHashCode(of = "id") -@NoArgsConstructor -public class CodeCoverageFileEntity implements DashboardEntity { - - /** CodeCoverageFileEntity testName field */ - @Id @Getter @Setter Long id; - - @Parent - @Getter @Setter private Key<?> coverageParent; - - /** CodeCoverageFileEntity filePath field */ - @Getter @Setter String filePath; - - /** CodeCoverageFileEntity group field */ - @Getter @Setter String group; - - /** CodeCoverageFileEntity lineCoverage field */ - @Getter @Setter List<Long> lineCoverage; - - /** CodeCoverageFileEntity coveredCount field */ - @Getter @Setter long coveredCount; - - /** CodeCoverageFileEntity totalCount field */ - @Getter @Setter long totalCount; - - /** CodeCoverageFileEntity projectName field */ - @Getter @Setter String projectName; - - /** CodeCoverageFileEntity projectVersion field */ - @Getter @Setter String projectVersion; - - /** CodeCoverageFileEntity isIgnored field */ - @Index - @Getter @Setter Boolean isIgnored; - - /** Constructor function for CodeCoverageFileEntity Class */ - public CodeCoverageFileEntity( - long id, - Key<?> coverageParent, - String filePath, - String group, - List<Long> lineCoverage, - long coveredCount, - long totalCount, - String projectName, - String projectVersion) { - this.id = id; - this.coverageParent = coverageParent; - this.filePath = filePath; - this.group = group; - this.lineCoverage = lineCoverage; - this.coveredCount = coveredCount; - this.totalCount = totalCount; - this.projectName = projectName; - this.projectVersion = projectVersion; - } - - /** Saving function for the instance of this class */ - @Override - public Key<CodeCoverageFileEntity> save() { - this.isIgnored = false; - return ofy().save().entity(this).now(); - } -} diff --git a/src/main/java/com/android/vts/entity/CoverageEntity.java b/src/main/java/com/android/vts/entity/CoverageEntity.java deleted file mode 100644 index 50d2f4e..0000000 --- a/src/main/java/com/android/vts/entity/CoverageEntity.java +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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 static com.googlecode.objectify.ObjectifyService.ofy; - -import com.android.vts.proto.VtsReportMessage.CoverageReportMessage; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import com.googlecode.objectify.annotation.Parent; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; -import lombok.Data; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@com.googlecode.objectify.annotation.Entity(name = "Coverage") -@Cache -@Data -@NoArgsConstructor -/** Object describing coverage data gathered for a file. */ -public class CoverageEntity implements DashboardEntity { - - protected static final Logger logger = Logger.getLogger(CoverageEntity.class.getName()); - - public static final String KIND = "Coverage"; - - public static String GERRIT_URI; - - // Property keys - public static final String GROUP = "group"; - public static final String COVERED_LINE_COUNT = "coveredCount"; - public static final String TOTAL_LINE_COUNT = "totalCount"; - public static final String FILE_PATH = "filePath"; - public static final String PROJECT_NAME = "projectName"; - public static final String PROJECT_VERSION = "projectVersion"; - public static final String LINE_COVERAGE = "lineCoverage"; - - @Ignore @Getter @Setter private Key parentKey; - - @Id @Getter @Setter private Long id; - - @Parent @Getter @Setter private com.googlecode.objectify.Key<?> testParent; - - @Index @Getter @Setter private String group; - - @Getter @Setter private long coveredCount; - - @Getter @Setter private long totalCount; - - @Index @Getter @Setter private String filePath; - - @Getter @Setter private String projectName; - - @Getter @Setter private String projectVersion; - - @Getter @Setter private List<Long> lineCoverage; - - /** CoverageEntity isIgnored field */ - @Index @Getter @Setter Boolean isIgnored; - - /** - * Create a CoverageEntity object for a file. - * - * @param parentKey The key to the parent TestRunEntity object in the database. - * @param group The group within the test run describing the coverage. - * @param coveredLineCount The total number of covered lines in the file. - * @param totalLineCount The total number of uncovered executable lines in the file. - * @param filePath The path to the file. - * @param projectName The name of the git project. - * @param projectVersion The commit hash of the project at the time the test was executed. - * @param lineCoverage List of coverage counts per executable line in the file. - */ - public CoverageEntity( - Key parentKey, - String group, - long coveredLineCount, - long totalLineCount, - String filePath, - String projectName, - String projectVersion, - List<Long> lineCoverage) { - this.parentKey = parentKey; - this.group = group; - this.coveredCount = coveredLineCount; - this.totalCount = totalLineCount; - this.filePath = filePath; - this.projectName = projectName; - this.projectVersion = projectVersion; - this.lineCoverage = lineCoverage; - } - - /** - * Create a CoverageEntity object for a file. - * - * @param testParent The objectify key to the parent TestRunEntity object in the database. - * @param group The group within the test run describing the coverage. - * @param coveredLineCount The total number of covered lines in the file. - * @param totalLineCount The total number of uncovered executable lines in the file. - * @param filePath The path to the file. - * @param projectName The name of the git project. - * @param projectVersion The commit hash of the project at the time the test was executed. - * @param lineCoverage List of coverage counts per executable line in the file. - */ - public CoverageEntity( - com.googlecode.objectify.Key testParent, - String group, - long coveredLineCount, - long totalLineCount, - String filePath, - String projectName, - String projectVersion, - List<Long> lineCoverage) { - this.testParent = testParent; - this.group = group; - this.coveredCount = coveredLineCount; - this.totalCount = totalLineCount; - this.filePath = filePath; - this.projectName = projectName; - this.projectVersion = projectVersion; - this.lineCoverage = lineCoverage; - } - - /** find coverage entity by ID */ - public static CoverageEntity findById(String testName, String testRunId, String id) { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create(TestEntity.class, testName); - com.googlecode.objectify.Key testRunKey = - com.googlecode.objectify.Key.create( - testKey, TestRunEntity.class, Long.parseLong(testRunId)); - return ofy().load() - .type(CoverageEntity.class) - .parent(testRunKey) - .id(Long.parseLong(id)) - .now(); - } - - public static void setPropertyValues(Properties newSystemConfigProp) { - GERRIT_URI = newSystemConfigProp.getProperty("gerrit.uri"); - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<CoverageEntity> save() { - return ofy().save().entity(this).now(); - } - - /** Get percentage from calculating coveredCount and totalCount values */ - public Double getPercentage() { - return Math.round(coveredCount * 10000d / totalCount) / 100d; - } - - /** Get Gerrit Url function from the attributes of this class */ - public String getGerritUrl() throws UnsupportedEncodingException { - String gerritPath = - GERRIT_URI - + "/projects/" - + URLEncoder.encode(projectName, "UTF-8") - + "/commits/" - + URLEncoder.encode(projectVersion, "UTF-8") - + "/files/" - + URLEncoder.encode(filePath, "UTF-8") - + "/content"; - return gerritPath; - } - - /* Comparator for sorting the list by isIgnored field */ - public static Comparator<CoverageEntity> isIgnoredComparator = - new Comparator<CoverageEntity>() { - - public int compare(CoverageEntity coverageEntity1, CoverageEntity coverageEntity2) { - Boolean isIgnored1 = - Objects.isNull(coverageEntity1.getIsIgnored()) - ? false - : coverageEntity1.getIsIgnored(); - Boolean isIgnored2 = - Objects.isNull(coverageEntity2.getIsIgnored()) - ? false - : coverageEntity2.getIsIgnored(); - - // ascending order - return isIgnored1.compareTo(isIgnored2); - } - }; - - public Entity toEntity() { - Entity coverageEntity = new Entity(KIND, parentKey); - coverageEntity.setProperty(GROUP, group); - coverageEntity.setUnindexedProperty(COVERED_LINE_COUNT, coveredCount); - coverageEntity.setUnindexedProperty(TOTAL_LINE_COUNT, totalCount); - coverageEntity.setProperty(FILE_PATH, filePath); - coverageEntity.setUnindexedProperty(PROJECT_NAME, projectName); - coverageEntity.setUnindexedProperty(PROJECT_VERSION, projectVersion); - if (lineCoverage != null && lineCoverage.size() > 0) { - coverageEntity.setUnindexedProperty(LINE_COVERAGE, lineCoverage); - } - return coverageEntity; - } - - /** - * Convert an Entity object to a CoverageEntity. - * - * @param e The entity to process. - * @return CoverageEntity object with the properties from e, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static CoverageEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) - || !e.hasProperty(GROUP) - || !e.hasProperty(COVERED_LINE_COUNT) - || !e.hasProperty(TOTAL_LINE_COUNT) - || !e.hasProperty(FILE_PATH) - || !e.hasProperty(PROJECT_NAME) - || !e.hasProperty(PROJECT_VERSION)) { - logger.log(Level.WARNING, "Missing coverage attributes in entity: " + e.toString()); - return null; - } - try { - String group = (String) e.getProperty(GROUP); - long coveredLineCount = (long) e.getProperty(COVERED_LINE_COUNT); - long totalLineCount = (long) e.getProperty(TOTAL_LINE_COUNT); - String filePath = (String) e.getProperty(FILE_PATH); - String projectName = (String) e.getProperty(PROJECT_NAME); - String projectVersion = (String) e.getProperty(PROJECT_VERSION); - List<Long> lineCoverage; - if (e.hasProperty(LINE_COVERAGE)) { - lineCoverage = (List<Long>) e.getProperty(LINE_COVERAGE); - } else { - lineCoverage = new ArrayList<>(); - } - return new CoverageEntity( - e.getKey().getParent(), - group, - coveredLineCount, - totalLineCount, - filePath, - projectName, - projectVersion, - lineCoverage); - } catch (ClassCastException exception) { - // Invalid contents or null values - logger.log(Level.WARNING, "Error parsing coverage entity.", exception); - } - return null; - } - - /** - * Convert a coverage report to a CoverageEntity. - * - * @param parentKey The ancestor key for the coverage entity. - * @param group The group to display the coverage report with. - * @param coverage The coverage report containing coverage data. - * @return The CoverageEntity for the coverage report message, or null if not compatible. - */ - public static CoverageEntity fromCoverageReport( - com.googlecode.objectify.Key parentKey, String group, CoverageReportMessage coverage) { - if (!coverage.hasFilePath() - || !coverage.hasProjectName() - || !coverage.hasRevision() - || !coverage.hasTotalLineCount() - || !coverage.hasCoveredLineCount()) { - return null; // invalid coverage report; - } - long coveredLineCount = coverage.getCoveredLineCount(); - long totalLineCount = coverage.getTotalLineCount(); - String filePath = coverage.getFilePath().toStringUtf8(); - String projectName = coverage.getProjectName().toStringUtf8(); - String projectVersion = coverage.getRevision().toStringUtf8(); - List<Long> lineCoverage = null; - if (coverage.getLineCoverageVectorCount() > 0) { - lineCoverage = new ArrayList<>(); - for (long count : coverage.getLineCoverageVectorList()) { - lineCoverage.add(count); - } - } - return new CoverageEntity( - parentKey, - group, - coveredLineCount, - totalLineCount, - filePath, - projectName, - projectVersion, - lineCoverage); - } -} diff --git a/src/main/java/com/android/vts/entity/DashboardEntity.java b/src/main/java/com/android/vts/entity/DashboardEntity.java deleted file mode 100644 index a42c1eb..0000000 --- a/src/main/java/com/android/vts/entity/DashboardEntity.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.google.common.collect.Lists; -import com.googlecode.objectify.Key; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Interface for interacting with VTS Dashboard entities in Cloud Datastore. */ -public interface DashboardEntity extends Serializable { - /** - * Save the Entity to the datastore. - * - * @return The saved entity's key value. - */ - <T> Key<T> save(); - - /** Save List of entity through objectify entities method. */ - static <T> Map<Key<T>, T> saveAll(List<T> entityList, int maxEntitySize) { - return ofy().transact( - () -> { - List<List<T>> partitionedList = - Lists.partition(entityList, maxEntitySize); - return partitionedList - .stream() - .map( - subEntityList -> - ofy().save().entities(subEntityList).now()) - .flatMap(m -> m.entrySet().stream()) - .collect( - Collectors.toMap( - entry -> entry.getKey(), - entry -> entry.getValue())); - }); - } -} diff --git a/src/main/java/com/android/vts/entity/DeviceInfoEntity.java b/src/main/java/com/android/vts/entity/DeviceInfoEntity.java deleted file mode 100644 index 2b98355..0000000 --- a/src/main/java/com/android/vts/entity/DeviceInfoEntity.java +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.memcache.MemcacheService; -import com.google.appengine.api.memcache.MemcacheServiceFactory; -import com.google.apphosting.api.ApiProxy; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import com.googlecode.objectify.annotation.Parent; -import java.util.List; -import java.util.Objects; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "DeviceInfo") -@Cache -@Data -@NoArgsConstructor -/** Class describing a device used for a test run. */ -public class DeviceInfoEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(DeviceInfoEntity.class.getName()); - - /** This is the instance of App Engine memcache service java library */ - private static MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService(); - - public static final String KIND = "DeviceInfo"; - - // Property keys - public static final String BRANCH = "branch"; - public static final String PRODUCT = "product"; - public static final String BUILD_FLAVOR = "buildFlavor"; - public static final String BUILD_ID = "buildId"; - public static final String ABI_BITNESS = "abiBitness"; - public static final String ABI_NAME = "abiName"; - - @Ignore - private Key parentKey; - - /** ID field using start timestamp */ - @Id private Long id; - - /** parent field based on Test and TestRun key */ - @Parent - private com.googlecode.objectify.Key<?> parent; - - @Index - private String branch; - - @Index - private String product; - - @Index - private String buildFlavor; - - @Index - private String buildId; - - private String abiBitness; - - private String abiName; - - /** - * Create a DeviceInfoEntity object. - * - * @param parentKey The key for the parent entity in the database. - * @param branch The build branch. - * @param product The device product. - * @param buildFlavor The device build flavor. - * @param buildID The device build ID. - * @param abiBitness The abi bitness of the device. - * @param abiName The name of the abi. - */ - public DeviceInfoEntity( - Key parentKey, - String branch, - String product, - String buildFlavor, - String buildID, - String abiBitness, - String abiName) { - this.parentKey = parentKey; - this.branch = branch; - this.product = product; - this.buildFlavor = buildFlavor; - this.buildId = buildID; - this.abiBitness = abiBitness; - this.abiName = abiName; - } - - /** - * Create a DeviceInfoEntity object with objectify Key - * - * @param parent The objectify key for the parent entity in the database. - * @param branch The build branch. - * @param product The device product. - * @param buildFlavor The device build flavor. - * @param buildID The device build ID. - * @param abiBitness The abi bitness of the device. - * @param abiName The name of the abi. - */ - public DeviceInfoEntity( - com.googlecode.objectify.Key parent, - String branch, - String product, - String buildFlavor, - String buildID, - String abiBitness, - String abiName) { - this.parent = parent; - this.branch = branch; - this.product = product; - this.buildFlavor = buildFlavor; - this.buildId = buildID; - this.abiBitness = abiBitness; - this.abiName = abiName; - } - - /** - * Get All Branch List from DeviceInfoEntity - */ - public static List<String> getAllBranches() { - try { - List<String> branchList = (List<String>) syncCache.get("branchList"); - if (Objects.isNull(branchList)) { - branchList = - ofy().load() - .type(DeviceInfoEntity.class) - .project("branch") - .distinct(true) - .list() - .stream() - .map(device -> device.branch) - .collect(Collectors.toList()); - syncCache.put("branchList", branchList); - } - return branchList; - } catch (ApiProxy.CallNotFoundException e) { - return ofy().load() - .type(DeviceInfoEntity.class) - .project("branch") - .distinct(true) - .list() - .stream() - .map(device -> device.branch) - .collect(Collectors.toList()); - } - } - - /** - * Get All BuildFlavors List from DeviceInfoEntity - */ - public static List<String> getAllBuildFlavors() { - try { - List<String> buildFlavorList = (List<String>) syncCache.get("buildFlavorList"); - if (Objects.isNull(buildFlavorList)) { - buildFlavorList = - ofy().load() - .type(DeviceInfoEntity.class) - .project("buildFlavor") - .distinct(true) - .list() - .stream() - .map(device -> device.buildFlavor) - .collect(Collectors.toList()); - syncCache.put("buildFlavorList", buildFlavorList); - } - return buildFlavorList; - } catch (ApiProxy.CallNotFoundException e) { - return ofy().load() - .type(DeviceInfoEntity.class) - .project("buildFlavor") - .distinct(true) - .list() - .stream() - .map(device -> device.buildFlavor) - .collect(Collectors.toList()); - } - } - - /** Saving function for the instance of this class */ - public com.googlecode.objectify.Key<DeviceInfoEntity> save() { - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity deviceEntity = new Entity(KIND, this.parentKey); - deviceEntity.setProperty(BRANCH, this.branch.toLowerCase()); - deviceEntity.setProperty(PRODUCT, this.product.toLowerCase()); - deviceEntity.setProperty(BUILD_FLAVOR, this.buildFlavor.toLowerCase()); - deviceEntity.setProperty(BUILD_ID, this.buildId.toLowerCase()); - if (this.abiBitness != null && this.abiName != null) { - deviceEntity.setUnindexedProperty(ABI_BITNESS, this.abiBitness.toLowerCase()); - deviceEntity.setUnindexedProperty(ABI_NAME, this.abiName.toLowerCase()); - } - - return deviceEntity; - } - - /** - * Convert an Entity object to a DeviceInfoEntity. - * - * @param e The entity to process. - * @return DeviceInfoEntity object with the properties from e, or null if incompatible. - */ - public static DeviceInfoEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) || !e.hasProperty(BRANCH) || !e.hasProperty(PRODUCT) - || !e.hasProperty(BUILD_FLAVOR) || !e.hasProperty(BUILD_ID) - || !e.hasProperty(ABI_BITNESS) || !e.hasProperty(ABI_NAME)) { - logger.log(Level.WARNING, "Missing device info attributes in entity: " + e.toString()); - return null; - } - try { - Key parentKey = e.getKey().getParent(); - String branch = (String) e.getProperty(BRANCH); - String product = (String) e.getProperty(PRODUCT); - String buildFlavor = (String) e.getProperty(BUILD_FLAVOR); - String buildId = (String) e.getProperty(BUILD_ID); - String abiBitness = null; - String abiName = null; - if (e.hasProperty(ABI_BITNESS) && e.hasProperty(ABI_NAME)) { - abiBitness = (String) e.getProperty(ABI_BITNESS); - abiName = (String) e.getProperty(ABI_NAME); - } - return new DeviceInfoEntity( - parentKey, branch, product, buildFlavor, buildId, abiBitness, abiName); - } catch (ClassCastException exception) { - // Invalid cast - logger.log(Level.WARNING, "Error parsing device info entity.", exception); - } - return null; - } - - /** - * Convert a device info message to a DeviceInfoEntity. - * - * @param parent The ancestor key for the device entity. - * @param device The device info report describing the target Android device. - * @return The DeviceInfoEntity for the target device, or null if incompatible - */ - public static DeviceInfoEntity fromDeviceInfoMessage( - com.googlecode.objectify.Key parent, AndroidDeviceInfoMessage device) { - if (!device.hasBuildAlias() || !device.hasBuildFlavor() || !device.hasProductVariant() - || !device.hasBuildId()) { - return null; - } - String branch = device.getBuildAlias().toStringUtf8(); - String buildFlavor = device.getBuildFlavor().toStringUtf8(); - String product = device.getProductVariant().toStringUtf8(); - String buildId = device.getBuildId().toStringUtf8(); - String abiBitness = device.getAbiBitness().toStringUtf8(); - String abiName = device.getAbiName().toStringUtf8(); - return new DeviceInfoEntity( - parent, branch, product, buildFlavor, buildId, abiBitness, abiName); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof DeviceInfoEntity)) { - return false; - } - DeviceInfoEntity device2 = (DeviceInfoEntity) obj; - if (!this.branch.equals(device2.branch) || !this.product.equals(device2.product) - || !this.buildFlavor.equals(device2.buildFlavor) - || !this.buildId.equals(device2.buildId)) { - return false; - } - return true; - } - - @Override - public int hashCode() { - String deviceId = this.branch + this.product + this.buildFlavor + this.buildId; - return deviceId.hashCode(); - } - - /** - * Create a copy of the device info under a near parent. - * - * @param parentKey The new parent key. - * @return A copy of the DeviceInfoEntity with the specified parent. - */ - public DeviceInfoEntity copyWithParent(com.googlecode.objectify.Key parentKey) { - return new DeviceInfoEntity(parentKey, this.branch, this.product, this.buildFlavor, - this.buildId, this.abiBitness, this.abiName); - } - - /** - * Create a string representation of the device build information. - * @return A String fingerprint of the format: branch/buildFlavor (build ID) - */ - public String getFingerprint() { - return this.branch + "/" + this.buildFlavor + " (" + this.buildId + ")"; - } -} diff --git a/src/main/java/com/android/vts/entity/HalApiEntity.java b/src/main/java/com/android/vts/entity/HalApiEntity.java deleted file mode 100644 index 16b5d10..0000000 --- a/src/main/java/com/android/vts/entity/HalApiEntity.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * 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 static com.googlecode.objectify.ObjectifyService.ofy; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.googlecode.objectify.Key; -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 com.googlecode.objectify.annotation.Parent; -import java.util.Date; -import java.util.List; -import java.util.UUID; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -/** Entity Class for HalApiEntity */ -@Cache -@Entity(name = "HalApiEntity") -@EqualsAndHashCode(of = "id") -@NoArgsConstructor -@JsonAutoDetect(fieldVisibility = Visibility.ANY) -@JsonIgnoreProperties({"id", "parent"}) -public class HalApiEntity implements DashboardEntity { - - /** HalApiEntity id field */ - @Id @Getter @Setter String id; - - @Parent @Getter Key<?> parent; - - /** HAL Api Release Level. e.g. */ - @Index @Getter @Setter String halApiReleaseLevel; - - /** HAL package name. e.g. android.hardware.foo. */ - @Index @Getter @Setter String halPackageName; - - /** HAL (major) version. e.g. 1. */ - @Index @Getter @Setter int halMajorVersion; - - /** HAL (minor) version. e.g. 0. */ - @Index @Getter @Setter int halMinorVersion; - - /** HAL interface name. e.g. IFoo. */ - @Index @Getter @Setter String halInterfaceName; - - /** List of HAL API */ - @Getter @Setter List<String> halApi; - - /** List of HAL covered API */ - @Getter @Setter List<String> coveredHalApi; - - /** When this record was created or updated */ - @Index Date updated; - - /** Constructor function for HalApiEntity Class */ - public HalApiEntity( - com.googlecode.objectify.Key testRunKey, - String halApiReleaseLevel, - String halPackageName, - int halMajorVersion, - int halMinorVersion, - String halInterfaceName, - List<String> halApi, - List<String> coveredHalApi) { - - this.id = UUID.randomUUID().toString(); - this.parent = testRunKey; - - this.halApiReleaseLevel = halApiReleaseLevel; - this.halPackageName = halPackageName; - this.halMajorVersion = halMajorVersion; - this.halMinorVersion = halMinorVersion; - this.halInterfaceName = halInterfaceName; - this.halApi = halApi; - this.coveredHalApi = coveredHalApi; - this.updated = new Date(); - } - - /** Saving function for the instance of this class */ - @Override - public Key<HalApiEntity> save() { - return ofy().save().entity(this).now(); - } -} diff --git a/src/main/java/com/android/vts/entity/ProfilingPointEntity.java b/src/main/java/com/android/vts/entity/ProfilingPointEntity.java deleted file mode 100644 index 9e2cae6..0000000 --- a/src/main/java/com/android/vts/entity/ProfilingPointEntity.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (C) 2017 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.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; -import com.android.vts.proto.VtsReportMessage.VtsProfilingType; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import java.util.Date; -import java.util.logging.Level; -import java.util.logging.Logger; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "ProfilingPoint") -@Cache -@Data -@NoArgsConstructor -/** Entity describing a profiling point. */ -public class ProfilingPointEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(ProfilingPointEntity.class.getName()); - protected static final String DELIMITER = "#"; - - public static final String KIND = "ProfilingPoint"; - - // Property keys - public static final String TEST_NAME = "testName"; - public static final String PROFILING_POINT_NAME = "profilingPointName"; - public static final String TYPE = "type"; - public static final String REGRESSION_MODE = "regressionMode"; - public static final String X_LABEL = "xLabel"; - public static final String Y_LABEL = "yLabel"; - - @Ignore - private Key key; - - /** ProfilingPointEntity testName field */ - @Id - private String name; - - /** ProfilingPointEntity profilingPointName field */ - @Index - private String profilingPointName; - - /** ProfilingPointEntity testName field */ - @Index - private String testName; - - /** ProfilingPointEntity type field */ - private int type; - - /** ProfilingPointEntity regressionMode field */ - private int regressionMode; - - /** ProfilingPointEntity xLabel field */ - private String xLabel; - - /** ProfilingPointEntity xLabel field */ - private String yLabel; - - /** - * When this record was created or updated - */ - @Index - Date updated; - - /** - * Create a ProfilingPointEntity object. - * - * @param testName The name of test containing the profiling point. - * @param profilingPointName The name of the profiling point. - * @param type The (number) type of the profiling point data. - * @param regressionMode The (number) mode to use for detecting regression. - * @param xLabel The x axis label. - * @param yLabel The y axis label. - */ - public ProfilingPointEntity( - String testName, - String profilingPointName, - int type, - int regressionMode, - String xLabel, - String yLabel) { - this.key = createKey(testName, profilingPointName); - this.testName = testName; - this.profilingPointName = profilingPointName; - this.type = type; - this.regressionMode = regressionMode; - this.xLabel = xLabel; - this.yLabel = yLabel; - this.updated = new Date(); - } - - /** - * Get VtsProfilingType from int value. - * - * @return VtsProfilingType class. - */ - public VtsProfilingType getVtsProfilingType(int type) { - return VtsProfilingType.forNumber(type); - } - - /** - * Get VtsProfilingRegressionMode from int value. - * - * @return VtsProfilingType class. - */ - public VtsProfilingRegressionMode getVtsProfilingRegressionMode(int regressionMode) { - return VtsProfilingRegressionMode.forNumber(regressionMode); - } - - /** - * Create a key for a ProfilingPointEntity. - * - * @param testName The name of test containing the profiling point. - * @param profilingPointName The name of the profiling point. - * @return a Key object for the ProfilingEntity in the database. - */ - public static Key createKey(String testName, String profilingPointName) { - return KeyFactory.createKey(KIND, testName + DELIMITER + profilingPointName); - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<ProfilingPointEntity> save() { - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity profilingPoint = new Entity(key); - profilingPoint.setIndexedProperty(TEST_NAME, this.testName); - profilingPoint.setIndexedProperty(PROFILING_POINT_NAME, this.profilingPointName); - profilingPoint.setUnindexedProperty(TYPE, this.type); - profilingPoint.setUnindexedProperty(REGRESSION_MODE, this.regressionMode); - profilingPoint.setUnindexedProperty(X_LABEL, this.xLabel); - profilingPoint.setUnindexedProperty(Y_LABEL, this.yLabel); - - return profilingPoint; - } - - /** - * Convert an Entity object to a ProfilingPointEntity. - * - * @param e The entity to process. - * @return ProfilingPointEntity object with the properties from e, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static ProfilingPointEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) - || e.getKey().getName() == null - || !e.hasProperty(TEST_NAME) - || !e.hasProperty(PROFILING_POINT_NAME) - || !e.hasProperty(TYPE) - || !e.hasProperty(REGRESSION_MODE) - || !e.hasProperty(X_LABEL) - || !e.hasProperty(Y_LABEL)) { - logger.log( - Level.WARNING, "Missing profiling point attributes in entity: " + e.toString()); - return null; - } - try { - String testName = (String) e.getProperty(TEST_NAME); - String profilingPointName = (String) e.getProperty(PROFILING_POINT_NAME); - int type = (int) (long) e.getProperty(TYPE); - int regressionMode = (int) (long) e.getProperty(REGRESSION_MODE); - String xLabel = (String) e.getProperty(X_LABEL); - String yLabel = (String) e.getProperty(Y_LABEL); - - return new ProfilingPointEntity( - testName, profilingPointName, type, regressionMode, xLabel, yLabel); - } catch (ClassCastException exception) { - // Invalid cast - logger.log(Level.WARNING, "Error parsing profiling point entity.", exception); - } - return null; - } -} diff --git a/src/main/java/com/android/vts/entity/ProfilingPointRunEntity.java b/src/main/java/com/android/vts/entity/ProfilingPointRunEntity.java deleted file mode 100644 index 124b61d..0000000 --- a/src/main/java/com/android/vts/entity/ProfilingPointRunEntity.java +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.android.vts.proto.VtsReportMessage.ProfilingReportMessage; -import com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; -import com.android.vts.proto.VtsReportMessage.VtsProfilingType; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.common.collect.Lists; -import com.google.protobuf.ByteString; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import com.googlecode.objectify.annotation.Parent; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.extern.log4j.Log4j2; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "ProfilingPointRun") -@Cache -@Data -@NoArgsConstructor -@Log4j2 -/** Entity describing a profiling point execution. */ -public class ProfilingPointRunEntity implements DashboardEntity { - - public static final String KIND = "ProfilingPointRun"; - - // Property keys - public static final String TYPE = "type"; - public static final String REGRESSION_MODE = "regressionMode"; - public static final String LABELS = "labels"; - public static final String VALUES = "values"; - public static final String X_LABEL = "xLabel"; - public static final String Y_LABEL = "yLabel"; - public static final String OPTIONS = "options"; - - /** This value will set the limit size of values array field */ - public static final int VALUE_SIZE_LIMIT = 50000; - - @Ignore - private Key key; - - /** ID field using profilingPointName */ - @Id - private String name; - - /** parent field based on Test and TestRun key */ - @Parent - private com.googlecode.objectify.Key<?> parent; - - /** VtsProfilingType in ProfilingPointRunEntity class */ - private int type; - - /** VtsProfilingType in ProfilingPointRunEntity class */ - private int regressionMode; - - /** list of label name */ - private List<String> labels; - - /** list of values */ - private List<Long> values; - - /** X axis label name */ - private String xLabel; - - /** Y axis label name */ - private String yLabel; - - /** Test Suite file name field */ - private List<String> options; - - /** When this record was created or updated */ - @Index Date updated; - - /** - * Create a ProfilingPointRunEntity object. - * - * @param parentKey The Key object for the parent TestRunEntity in datastore. - * @param name The name of the profiling point. - * @param type The (number) type of the profiling point data. - * @param regressionMode The (number) mode to use for detecting regression. - * @param labels List of data labels, or null if the data is unlabeled. - * @param values List of data values. - * @param xLabel The x axis label. - * @param yLabel The y axis label. - * @param options The list of key=value options for the profiling point run. - */ - public ProfilingPointRunEntity( - Key parentKey, - String name, - int type, - int regressionMode, - List<String> labels, - List<Long> values, - String xLabel, - String yLabel, - List<String> options) { - this.key = KeyFactory.createKey(parentKey, KIND, name); - this.name = name; - this.type = type; - this.regressionMode = regressionMode; - this.labels = labels == null ? null : new ArrayList<>(labels); - this.values = new ArrayList<>(values); - this.xLabel = xLabel; - this.yLabel = yLabel; - this.options = options; - this.updated = new Date(); - } - - - /** - * Create a ProfilingPointRunEntity object. - * - * @param parent The objectify Key for the parent TestRunEntity in datastore. - * @param name The name of the profiling point. - * @param type The (number) type of the profiling point data. - * @param regressionMode The (number) mode to use for detecting regression. - * @param labels List of data labels, or null if the data is unlabeled. - * @param values List of data values. - * @param xLabel The x axis label. - * @param yLabel The y axis label. - * @param options The list of key=value options for the profiling point run. - */ - public ProfilingPointRunEntity( - com.googlecode.objectify.Key parent, - String name, - int type, - int regressionMode, - List<String> labels, - List<Long> values, - String xLabel, - String yLabel, - List<String> options) { - this.parent = parent; - this.name = name; - this.type = type; - this.regressionMode = regressionMode; - this.labels = labels == null ? null : new ArrayList<>(labels); - this.values = new ArrayList<>(values); - this.xLabel = xLabel; - this.yLabel = yLabel; - this.options = options; - this.updated = new Date(); - } - - /** - * Get VtsProfilingType from int value. - * - * @return VtsProfilingType class. - */ - public VtsProfilingType getVtsProfilingType(int type) { - return VtsProfilingType.forNumber(type); - } - - /** - * Get VtsProfilingRegressionMode from int value. - * - * @return VtsProfilingType class. - */ - public VtsProfilingRegressionMode getVtsProfilingRegressionMode(int regressionMode) { - return VtsProfilingRegressionMode.forNumber(regressionMode); - } - - /** - * Save multi rows function when the record exceed the limit which is 1MB. - * - * @return ProfilingPointRunEntity's key value. - */ - public com.googlecode.objectify.Key<ProfilingPointRunEntity> saveMultiRow() { - if (this.getValues().size() > VALUE_SIZE_LIMIT) { - - List<List<Long>> partitionedValueList = - Lists.partition(this.getValues(), VALUE_SIZE_LIMIT); - int partitionedValueListSize = partitionedValueList.size(); - - List<List<String>> partitionedLabelList = new ArrayList<>(); - if (Objects.nonNull(this.getLabels()) && this.getLabels().size() > VALUE_SIZE_LIMIT) { - partitionedLabelList = Lists.partition(this.getLabels(), VALUE_SIZE_LIMIT); - } - - com.googlecode.objectify.Key<ProfilingPointRunEntity> profilingPointRunEntityKey = null; - if (partitionedValueListSize < VALUE_SIZE_LIMIT) { - for (int index = 0; index < partitionedValueListSize; index++) { - if (index > 0) { - this.values.addAll(partitionedValueList.get(index)); - if (index < partitionedLabelList.size()) { - this.labels.addAll(partitionedLabelList.get(index)); - } - } else { - this.values = partitionedValueList.get(index); - if (index < partitionedLabelList.size()) { - this.labels = partitionedLabelList.get(index); - } - } - profilingPointRunEntityKey = ofy().save().entity(this).now(); - } - } - return profilingPointRunEntityKey; - } else { - return ofy().save().entity(this).now(); - } - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<ProfilingPointRunEntity> save() { - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity profilingRun = new Entity(this.key); - profilingRun.setUnindexedProperty(TYPE, this.type); - profilingRun.setUnindexedProperty(REGRESSION_MODE, this.regressionMode); - if (this.labels != null) { - profilingRun.setUnindexedProperty(LABELS, this.labels); - } - profilingRun.setUnindexedProperty(VALUES, this.values); - profilingRun.setUnindexedProperty(X_LABEL, this.xLabel); - profilingRun.setUnindexedProperty(Y_LABEL, this.yLabel); - if (this.options != null) { - profilingRun.setUnindexedProperty(OPTIONS, this.options); - } - - return profilingRun; - } - - /** - * Convert an Entity object to a ProflilingPointRunEntity. - * - * @param e The entity to process. - * @return ProfilingPointRunEntity object with the properties from e, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static ProfilingPointRunEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) - || e.getKey().getName() == null - || !e.hasProperty(TYPE) - || !e.hasProperty(REGRESSION_MODE) - || !e.hasProperty(VALUES) - || !e.hasProperty(X_LABEL) - || !e.hasProperty(Y_LABEL)) { - log.error("Missing profiling point attributes in entity: " + e.toString()); - return null; - } - try { - Key parentKey = e.getParent(); - String name = e.getKey().getName(); - int type = (int) (long) e.getProperty(TYPE); - int regressionMode = (int) (long) e.getProperty(REGRESSION_MODE); - List<Long> values = (List<Long>) e.getProperty(VALUES); - String xLabel = (String) e.getProperty(X_LABEL); - String yLabel = (String) e.getProperty(Y_LABEL); - List<String> labels = null; - if (e.hasProperty(LABELS)) { - labels = (List<String>) e.getProperty(LABELS); - } - List<String> options = null; - if (e.hasProperty(OPTIONS)) { - options = (List<String>) e.getProperty(OPTIONS); - } - return new ProfilingPointRunEntity( - parentKey, name, type, regressionMode, labels, values, xLabel, yLabel, options); - } catch (ClassCastException exception) { - // Invalid cast - log.warn("Error parsing profiling point run entity.", exception); - } - return null; - } - - /** - * Convert a coverage report to a CoverageEntity. - * - * @param parent The ancestor objectify key for the coverage entity. - * @param profilingReport The profiling report containing profiling data. - * @return The ProfilingPointRunEntity for the profiling report message, or null if incompatible - */ - public static ProfilingPointRunEntity fromProfilingReport( - com.googlecode.objectify.Key parent, ProfilingReportMessage profilingReport) { - if (!profilingReport.hasName() - || !profilingReport.hasType() - || profilingReport.getType() == VtsProfilingType.UNKNOWN_VTS_PROFILING_TYPE - || !profilingReport.hasRegressionMode() - || !profilingReport.hasXAxisLabel() - || !profilingReport.hasYAxisLabel()) { - return null; // invalid profiling report; - } - String name = profilingReport.getName().toStringUtf8(); - VtsProfilingType type = profilingReport.getType(); - VtsProfilingRegressionMode regressionMode = profilingReport.getRegressionMode(); - String xLabel = profilingReport.getXAxisLabel().toStringUtf8(); - String yLabel = profilingReport.getYAxisLabel().toStringUtf8(); - List<Long> values; - List<String> labels = null; - switch (type) { - case VTS_PROFILING_TYPE_TIMESTAMP: - if (!profilingReport.hasStartTimestamp() - || !profilingReport.hasEndTimestamp() - || profilingReport.getEndTimestamp() - < profilingReport.getStartTimestamp()) { - return null; // missing timestamp - } - long value = - profilingReport.getEndTimestamp() - profilingReport.getStartTimestamp(); - values = new ArrayList<>(); - values.add(value); - break; - case VTS_PROFILING_TYPE_LABELED_VECTOR: - if (profilingReport.getValueCount() != profilingReport.getLabelCount()) { - return null; // jagged data - } - labels = new ArrayList<>(); - for (ByteString label : profilingReport.getLabelList()) { - labels.add(label.toStringUtf8()); - } - values = profilingReport.getValueList(); - break; - case VTS_PROFILING_TYPE_UNLABELED_VECTOR: - values = profilingReport.getValueList(); - break; - default: // should never happen - return null; - } - if (values.size() > VALUE_SIZE_LIMIT) { - values = values.subList(0, VALUE_SIZE_LIMIT); - } - List<String> options = null; - if (profilingReport.getOptionsCount() > 0) { - options = new ArrayList<>(); - for (ByteString optionBytes : profilingReport.getOptionsList()) { - options.add(optionBytes.toStringUtf8()); - } - } - return new ProfilingPointRunEntity( - parent, - name, - type.getNumber(), - regressionMode.getNumber(), - labels, - values, - xLabel, - yLabel, - options); - } -} diff --git a/src/main/java/com/android/vts/entity/ProfilingPointSummaryEntity.java b/src/main/java/com/android/vts/entity/ProfilingPointSummaryEntity.java deleted file mode 100644 index e4a1911..0000000 --- a/src/main/java/com/android/vts/entity/ProfilingPointSummaryEntity.java +++ /dev/null @@ -1,371 +0,0 @@ -/* - * Copyright (C) 2017 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.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; -import com.android.vts.util.StatSummary; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "ProfilingPointSummary") -@Cache -@Data -@NoArgsConstructor -/** Entity describing a profiling point summary. */ -public class ProfilingPointSummaryEntity implements DashboardEntity { - protected static final Logger logger = - Logger.getLogger(ProfilingPointSummaryEntity.class.getName()); - protected static final String DELIMITER = "#"; - - public static final String KIND = "ProfilingPointSummary"; - public static final String ALL = "ALL"; - - // Property keys - public static final String START_TIME = "startTime"; - public static final String MEAN = "mean"; - public static final String SUMSQ = "sumSq"; - public static final String MIN = "min"; - public static final String MAX = "max"; - public static final String LABELS = "labels"; - public static final String LABEL_MEANS = "labelMeans"; - public static final String LABEL_SUMSQS = "labelSumSqs"; - public static final String LABEL_MINS = "labelMins"; - public static final String LABEL_MAXES = "labelMaxes"; - public static final String LABEL_COUNTS = "labelCounts"; - public static final String COUNT = "count"; - public static final String BRANCH = "branch"; - public static final String BUILD_FLAVOR = "buildFlavor"; - public static final String SERIES = "series"; - - @Ignore - private Key key; - - /** ID field */ - @Id private String name; - - /** branch field */ - @Index private String branch; - - /** build field */ - @Index private String buildFlavor; - - /** total count */ - @Index private int count; - - /** For each label count field */ - @Index private List<String> labelCounts; - - /** Maximum value for each label */ - private List<Integer> labelMaxes; - - /** Mean value for each label */ - private List<Integer> labelMeans; - - /** Minimum value for each label */ - private List<Integer> labelMins; - - /** Label name for each label point */ - private List<String> labels; - - /** Summation for sequence for each label */ - private List<Integer> labelSumSqs; - - /** Maximum value for total */ - private Long max; - - /** Mean value for total */ - private Long mean; - - /** Minimum value for total */ - private Long min; - - /** The list of series */ - private String series; - - /** The start time field of the test */ - private Long startTime; - - /** The summation of sequences */ - private Long sumSq; - - @Ignore private StatSummary globalStats; - - @Ignore private Map<String, StatSummary> labelStats; - - /* - public final StatSummary globalStats; - public final List<String> labels; - public final Map<String, StatSummary> labelStats; - public final String branch; - public final String buildFlavor; - public final String series; - public final long startTime; - */ - - /** - * Create a ProfilingPointSummaryEntity object. - * - * @param parentKey The Key object for the parent TestRunEntity in the database. - * @param globalStats The StatSummary object recording global statistics about the profiling - * point. - * @param labels The list of data labels. - * @param labelStats The map from data label to StatSummary object for the label. - * @param branch The branch. - * @param buildFlavor The device build flavor. - * @param series The string describing the profiling point series (e.g. binder or passthrough). - * @param startTime The timestamp indicating the beginning of the summary. - */ - public ProfilingPointSummaryEntity( - Key parentKey, - StatSummary globalStats, - List<String> labels, - Map<String, StatSummary> labelStats, - String branch, - String buildFlavor, - String series, - long startTime) { - this.globalStats = globalStats; - this.labels = labels; - this.labelStats = labelStats; - this.buildFlavor = buildFlavor == null ? ALL : buildFlavor; - this.branch = branch == null ? ALL : branch; - this.series = series == null ? "" : series; - this.startTime = startTime; - this.key = createKey(parentKey, this.branch, this.buildFlavor, this.series, this.startTime); - } - - /** - * Create a new ProfilingPointSummaryEntity object. - * - * @param parentKey The Key object for the parent TestRunEntity in the database. - * @param branch The branch. - * @param buildFlavor The buildFlavor name. - * @param series The string describing the profiling point series (e.g. binder or passthrough). - * @param startTime The timestamp indicating the beginning of the summary. - */ - public ProfilingPointSummaryEntity( - Key parentKey, String branch, String buildFlavor, String series, long startTime) { - this( - parentKey, - new StatSummary(null, VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE), - new ArrayList<>(), - new HashMap<>(), - branch, - buildFlavor, - series, - startTime); - } - - /** - * Create a key for a ProfilingPointSummaryEntity. - * - * @param parentKey The Key object for the parent TestRunEntity in the database. - * @param branch The branch. - * @param buildFlavor The device build flavor. - * @param series The string describing the profiling point series (e.g. binder or passthrough). - * @param startTime The timestamp indicating the beginning of the summary. - * @return a Key object for the ProfilingPointSummaryEntity in the database. - */ - public static Key createKey( - Key parentKey, String branch, String buildFlavor, String series, long startTime) { - StringBuilder sb = new StringBuilder(); - sb.append(branch); - sb.append(DELIMITER); - sb.append(buildFlavor); - sb.append(DELIMITER); - sb.append(series); - sb.append(DELIMITER); - sb.append(startTime); - return KeyFactory.createKey(parentKey, KIND, sb.toString()); - } - - /** - * Updates the profiling summary with the data from a new profiling report. - * - * @param profilingRun The profiling point run entity object containing profiling data. - */ - public void update(ProfilingPointRunEntity profilingRun) { - if (profilingRun.getLabels() != null - && profilingRun.getLabels().size() == profilingRun.getValues().size()) { - for (int i = 0; i < profilingRun.getLabels().size(); i++) { - String label = profilingRun.getLabels().get(i); - if (!this.labelStats.containsKey(label)) { - VtsProfilingRegressionMode vtsProfilingRegressionMode = - profilingRun.getVtsProfilingRegressionMode( - profilingRun.getRegressionMode()); - StatSummary summary = new StatSummary(label, vtsProfilingRegressionMode); - this.labelStats.put(label, summary); - } - StatSummary summary = this.labelStats.get(label); - summary.updateStats(profilingRun.getValues().get(i)); - } - this.labels.clear(); - this.labels.addAll(profilingRun.getLabels()); - } - for (long value : profilingRun.getValues()) { - this.globalStats.updateStats(value); - } - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<ProfilingPointSummaryEntity> save() { - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity profilingSummary; - profilingSummary = new Entity(this.key); - profilingSummary.setUnindexedProperty(MEAN, this.globalStats.getMean()); - profilingSummary.setUnindexedProperty(SUMSQ, this.globalStats.getSumSq()); - profilingSummary.setUnindexedProperty(MIN, this.globalStats.getMin()); - profilingSummary.setUnindexedProperty(MAX, this.globalStats.getMax()); - profilingSummary.setUnindexedProperty(COUNT, this.globalStats.getCount()); - profilingSummary.setIndexedProperty(START_TIME, this.startTime); - profilingSummary.setIndexedProperty(BRANCH, this.branch); - profilingSummary.setIndexedProperty(BUILD_FLAVOR, this.buildFlavor); - profilingSummary.setIndexedProperty(SERIES, this.series); - if (this.labels.size() != 0) { - List<Double> labelMeans = new ArrayList<>(); - List<Double> labelSumsqs = new ArrayList<>(); - List<Double> labelMins = new ArrayList<>(); - List<Double> labelMaxes = new ArrayList<>(); - List<Long> labelCounts = new ArrayList<>(); - for (String label : this.labels) { - if (!this.labelStats.containsKey(label)) continue; - StatSummary labelStat = this.labelStats.get(label); - labelMeans.add(labelStat.getMean()); - labelSumsqs.add(labelStat.getSumSq()); - labelMins.add(labelStat.getMin()); - labelMaxes.add(labelStat.getMax()); - labelCounts.add(new Long(labelStat.getCount())); - } - profilingSummary.setUnindexedProperty(LABELS, this.labels); - profilingSummary.setUnindexedProperty(LABEL_MEANS, labelMeans); - profilingSummary.setUnindexedProperty(LABEL_SUMSQS, labelSumsqs); - profilingSummary.setUnindexedProperty(LABEL_MINS, labelMins); - profilingSummary.setUnindexedProperty(LABEL_MAXES, labelMaxes); - profilingSummary.setUnindexedProperty(LABEL_COUNTS, labelCounts); - } - - return profilingSummary; - } - - /** - * Convert an Entity object to a ProfilingPointSummaryEntity. - * - * @param e The entity to process. - * @return ProfilingPointSummaryEntity object with the properties from e, or null if - * incompatible. - */ - @SuppressWarnings("unchecked") - public static ProfilingPointSummaryEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) - || !e.hasProperty(MEAN) - || !e.hasProperty(SUMSQ) - || !e.hasProperty(MIN) - || !e.hasProperty(MAX) - || !e.hasProperty(COUNT) - || !e.hasProperty(START_TIME) - || !e.hasProperty(BRANCH) - || !e.hasProperty(BUILD_FLAVOR) - || !e.hasProperty(SERIES)) { - logger.log( - Level.WARNING, "Missing profiling point attributes in entity: " + e.toString()); - return null; - } - try { - Key parentKey = e.getParent(); - double mean = (double) e.getProperty(MEAN); - double sumsq = (double) e.getProperty(SUMSQ); - double min = (double) e.getProperty(MIN); - double max = (double) e.getProperty(MAX); - int count = (int) (long) e.getProperty(COUNT); - StatSummary globalStats = - new StatSummary( - null, - min, - max, - mean, - sumsq, - count, - VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE); - Map<String, StatSummary> labelStats = new HashMap<>(); - List<String> labels = new ArrayList<>(); - if (e.hasProperty(LABELS)) { - labels = (List<String>) e.getProperty(LABELS); - List<Double> labelMeans = (List<Double>) e.getProperty(LABEL_MEANS); - List<Double> labelSumsqs = (List<Double>) e.getProperty(LABEL_SUMSQS); - List<Double> labelMins = (List<Double>) e.getProperty(LABEL_MINS); - List<Double> labelMaxes = (List<Double>) e.getProperty(LABEL_MAXES); - List<Long> labelCounts = (List<Long>) e.getProperty(LABEL_COUNTS); - if (labels.size() != labelMeans.size() - || labels.size() != labelSumsqs.size() - || labels.size() != labelMins.size() - || labels.size() != labelMaxes.size() - || labels.size() != labelCounts.size()) { - logger.log(Level.WARNING, "Jagged label information for entity: " + e.getKey()); - return null; - } - for (int i = 0; i < labels.size(); ++i) { - StatSummary labelStat = - new StatSummary( - labels.get(i), - labelMins.get(i), - labelMaxes.get(i), - labelMeans.get(i), - labelSumsqs.get(i), - labelCounts.get(i).intValue(), - VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE); - labelStats.put(labels.get(i), labelStat); - } - } - String branch = (String) e.getProperty(BRANCH); - String buildFlavor = (String) e.getProperty(BUILD_FLAVOR); - String series = (String) e.getProperty(SERIES); - long startTime = (long) e.getProperty(START_TIME); - return new ProfilingPointSummaryEntity( - parentKey, - globalStats, - labels, - labelStats, - branch, - buildFlavor, - series, - startTime); - } catch (ClassCastException exception) { - // Invalid cast - logger.log(Level.WARNING, "Error parsing profiling point summary entity.", exception); - } - return null; - } -} diff --git a/src/main/java/com/android/vts/entity/RoleEntity.java b/src/main/java/com/android/vts/entity/RoleEntity.java deleted file mode 100644 index 508a9ca..0000000 --- a/src/main/java/com/android/vts/entity/RoleEntity.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.android.vts.entity; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -import com.googlecode.objectify.Key; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Entity; -import com.googlecode.objectify.annotation.Id; -import java.util.Date; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Cache -@Entity -@EqualsAndHashCode(of = "role") -@NoArgsConstructor -public class RoleEntity implements DashboardEntity { - - private static final long serialVersionUID = 1L; - - @Id private String role; - - /** When this record was created or updated */ - @Getter Date updated; - - /** Construction function for UserEntity Class */ - public RoleEntity(String roleName) { - this.role = roleName; - } - - /** Get role by email */ - public static RoleEntity getRole(String role) { - return ofy().load().type(RoleEntity.class).id(role).now(); - } - - /** Saving function for the instance of this class */ - @Override - public Key<RoleEntity> save() { - this.updated = new Date(); - return ofy().save().entity(this).now(); - } -} diff --git a/src/main/java/com/android/vts/entity/TestAcknowledgmentEntity.java b/src/main/java/com/android/vts/entity/TestAcknowledgmentEntity.java deleted file mode 100644 index a594f85..0000000 --- a/src/main/java/com/android/vts/entity/TestAcknowledgmentEntity.java +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright (C) 2017 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.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Text; -import com.google.appengine.api.users.User; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.google.gson.reflect.TypeToken; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import lombok.Data; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "TestAcknowledgment") -@Cache -@Data -/** Entity describing a test failure acknowledgment. */ -public class TestAcknowledgmentEntity implements DashboardEntity { - protected static final Logger logger = - Logger.getLogger(TestAcknowledgmentEntity.class.getName()); - - public static final String KIND = "TestAcknowledgment"; - public static final String KEY = "key"; - public static final String TEST_KEY = "testKey"; - public static final String TEST_NAME = "testName"; - public static final String USER_OBJ = "userObj"; - public static final String CREATED = "created"; - public static final String BRANCHES = "branches"; - public static final String DEVICES = "devices"; - public static final String TEST_CASE_NAMES = "testCaseNames"; - public static final String NOTE = "note"; - - @Ignore private final Key key; - @Ignore public final Key test; - @Ignore public final User userObj; - - @Id private Long id; - - private com.googlecode.objectify.Key testKey; - private Set<String> branches; - private Set<String> devices; - private Set<String> testCaseNames; - private String note; - private String user; - - @Index private final long created; - - /** - * Create a AcknowledgmentEntity object. - * - * @param key The key of the AcknowledgmentEntity in the database. - * @param created The timestamp when the entity was created (in microseconds). - * @param test The key of the test. - * @param userObj The user who created or last modified the entity. - * @param branches The list of branch names for which the acknowledgment applies (or null if - * all). - * @param devices The list of device build flavors for which the acknowledgment applies (or null - * if all). - * @param testCaseNames The list of test case names known to fail (or null if all). - * @param note A text blob with details about the failure (or null if all). - */ - private TestAcknowledgmentEntity( - Key key, - long created, - Key test, - User userObj, - List<String> branches, - List<String> devices, - List<String> testCaseNames, - Text note) { - this.test = test; - this.userObj = userObj; - if (branches != null) this.branches = new HashSet(branches); - else this.branches = new HashSet<>(); - - if (devices != null) this.devices = new HashSet(devices); - else this.devices = new HashSet<>(); - - if (testCaseNames != null) this.testCaseNames = new HashSet(testCaseNames); - else this.testCaseNames = new HashSet<>(); - - if (note != null) this.note = note.getValue(); - else this.note = null; - - this.key = key; - this.created = created; - } - - /** - * Create a AcknowledgmentEntity object. - * - * @param test The key of the test. - * @param userObj The user who created or last modified the entity. - * @param branches The list of branch names for which the acknowledgment applies (or null if - * all). - * @param devices The list of device build flavors for which the acknowledgment applies (or null - * if all). - * @param testCaseNames The list of test case names known to fail (or null if all). - * @param note A text blob with details about the failure (or null if all). - */ - public TestAcknowledgmentEntity( - Key test, - User userObj, - List<String> branches, - List<String> devices, - List<String> testCaseNames, - Text note) { - this(null, -1, test, userObj, branches, devices, testCaseNames, note); - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<TestAcknowledgmentEntity> save() { - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity ackEntity; - if (this.key == null) ackEntity = new Entity(KIND); - else ackEntity = new Entity(key); - - ackEntity.setProperty(TEST_KEY, this.test); - ackEntity.setProperty(USER_OBJ, this.userObj); - - long created = this.created; - if (created < 0) created = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - ackEntity.setProperty(CREATED, created); - - if (this.branches != null && this.branches.size() > 0) - ackEntity.setUnindexedProperty(BRANCHES, new ArrayList<>(this.branches)); - - if (this.devices != null && this.devices.size() > 0) - ackEntity.setUnindexedProperty(DEVICES, new ArrayList<>(this.devices)); - - if (this.testCaseNames != null && this.testCaseNames.size() > 0) - ackEntity.setUnindexedProperty(TEST_CASE_NAMES, new ArrayList<>(this.testCaseNames)); - - if (this.note != null) ackEntity.setUnindexedProperty(NOTE, new Text(this.note)); - return ackEntity; - } - - /** - * Convert an Entity object to a TestAcknowledgmentEntity. - * - * @param e The entity to process. - * @return TestEntity object with the properties from e processed, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static TestAcknowledgmentEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) - || !e.hasProperty(TEST_KEY) - || !e.hasProperty(USER_OBJ) - || !e.hasProperty(CREATED)) { - logger.log( - Level.WARNING, "Missing attributes in acknowledgment entity: " + e.toString()); - return null; - } - try { - Key test = (Key) e.getProperty(TEST_KEY); - User user = (User) e.getProperty(USER_OBJ); - long created = (long) e.getProperty(CREATED); - - List<String> branches; - if (e.hasProperty(BRANCHES)) branches = (List<String>) e.getProperty(BRANCHES); - else branches = null; - - List<String> devices; - if (e.hasProperty(DEVICES)) devices = (List<String>) e.getProperty(DEVICES); - else devices = null; - - List<String> testCaseNames; - if (e.hasProperty(TEST_CASE_NAMES)) - testCaseNames = (List<String>) e.getProperty(TEST_CASE_NAMES); - else testCaseNames = null; - - Text note = null; - if (e.hasProperty(NOTE)) note = (Text) e.getProperty(NOTE); - return new TestAcknowledgmentEntity( - e.getKey(), created, test, user, branches, devices, testCaseNames, note); - } catch (ClassCastException exception) { - logger.log(Level.WARNING, "Corrupted data in entity: " + e.getKey()); - return null; - } - } - - /** - * Convert a JSON object to a TestAcknowledgmentEntity. - * - * @param user The user requesting the conversion. - * @param json The json object to convert. - * @return TestAcknowledgmentEntity with the data from the json object. - */ - public static TestAcknowledgmentEntity fromJson(User user, JsonObject json) { - try { - if (!json.has(TEST_NAME)) return null; - String testName = json.get(TEST_NAME).getAsString(); - Key testKey = KeyFactory.createKey(TestEntity.KIND, testName); - List<String> branches = null; - - Type listType = new TypeToken<List<String>>() {}.getType(); - if (json.has(BRANCHES)) { - branches = new Gson().fromJson(json.get(BRANCHES), listType); - } - - List<String> devices = null; - if (json.has(DEVICES)) { - devices = new Gson().fromJson(json.get(DEVICES), listType); - } - - List<String> testCaseNames = null; - if (json.has(TEST_CASE_NAMES)) { - testCaseNames = new Gson().fromJson(json.get(TEST_CASE_NAMES), listType); - } - - Text note = null; - if (json.has(NOTE)) { - note = new Text(json.get(NOTE).getAsString()); - } - - Key key = null; - if (json.has(KEY)) { - key = KeyFactory.stringToKey(json.get(KEY).getAsString()); - } - return new TestAcknowledgmentEntity( - key, -1l, testKey, user, branches, devices, testCaseNames, note); - } catch (ClassCastException | IllegalStateException e) { - return null; - } - } - - /** - * Convert the entity to a json object. - * - * @return The entity serialized in JSON format. - */ - public JsonObject toJson() { - JsonObject json = new JsonObject(); - json.add(KEY, new JsonPrimitive(KeyFactory.keyToString(this.key))); - json.add(TEST_NAME, new JsonPrimitive(this.test.getName())); - json.add(USER_OBJ, new JsonPrimitive(this.userObj.getEmail())); - json.add(CREATED, new JsonPrimitive(this.created)); - - List<JsonElement> branches = new ArrayList<>(); - if (this.branches != null) { - for (String branch : this.branches) { - branches.add(new JsonPrimitive(branch)); - } - } - json.add(BRANCHES, new Gson().toJsonTree(branches)); - - List<JsonElement> devices = new ArrayList<>(); - if (this.devices != null) { - for (String device : this.devices) { - devices.add(new JsonPrimitive(device)); - } - } - json.add(DEVICES, new Gson().toJsonTree(devices)); - - List<JsonElement> testCaseNames = new ArrayList<>(); - if (this.testCaseNames != null) { - for (String testCaseName : this.testCaseNames) { - testCaseNames.add(new JsonPrimitive(testCaseName)); - } - } - json.add(TEST_CASE_NAMES, new Gson().toJsonTree(testCaseNames)); - - String note = ""; - if (this.note != null) note = this.note; - json.add(NOTE, new JsonPrimitive(note)); - return json; - } -} diff --git a/src/main/java/com/android/vts/entity/TestCaseRunEntity.java b/src/main/java/com/android/vts/entity/TestCaseRunEntity.java deleted file mode 100644 index 85a6c43..0000000 --- a/src/main/java/com/android/vts/entity/TestCaseRunEntity.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.KeyFactory; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.OnLoad; -import java.util.ArrayList; -import java.util.List; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "TestCaseRun") -@Cache -@Data -@Slf4j -/** Entity describing the execution of a test case. */ -public class TestCaseRunEntity implements DashboardEntity { - - public static final String KIND = "TestCaseRun"; - - // Property keys - public static final String TEST_CASE_NAME = "testCaseName"; - public static final String RESULT = "result"; - public static final String TEST_CASE_NAMES = "testCaseNames"; - public static final String RESULTS = "results"; - public static final String SYSTRACE_URL = "systraceUrl"; - - // Maximum number of test cases in the entity. - private static final int SIZE_LIMIT = 500; - - @Id - private Long id; - - private List<Integer> results; - - private List<String> testCaseNames; - - @Ignore - public final List<TestCase> testCases; - - @Ignore - private String systraceUrl; - - /** - * Class describing an individual test case run. - */ - public static class TestCase { - public final long parentId; - public final int offset; - public final String name; - public final int result; - - /** - * Create a test case run. - * @param parentId The ID of the TestCaseRunEntity containing the test case. - * @param offset The offset of the TestCase into the TestCaseRunEntity. - * @param name The name of the test case. - * @param result The result of the test case. - */ - public TestCase(long parentId, int offset, String name, int result) { - this.parentId = parentId; - this.offset = offset; - this.name = name; - this.result = result; - } - } - - /** - * Create a TestCaseRunEntity. - */ - public TestCaseRunEntity() { - this.results = new ArrayList<>(); - this.testCaseNames = new ArrayList<>(); - this.testCases = new ArrayList<>(); - this.systraceUrl = null; - } - - /** - * Create a TestCaseRunEntity with the specified id. - * @param id The entity id. - */ - public TestCaseRunEntity(long id) { - this.id = id; - this.results = new ArrayList<>(); - this.testCaseNames = new ArrayList<>(); - this.testCases = new ArrayList<>(); - this.systraceUrl = null; - } - - /** - * Determine if the TestCaseRunEntity is full. - * @return True if the entity is full, false otherwise. - */ - public boolean isFull() { - return this.testCases.size() >= SIZE_LIMIT; - } - - /** - * Set the systrace url. - * @param url The systrace url, or null. - */ - private void setSystraceUrl(String url) { - this.systraceUrl = url; - } - - /** - * Get the systrace url. - * returns The systrace url, or null. - */ - public String getSystraceUrl() { - return this.systraceUrl; - } - - /** - * Called after the POJO is populated with data through objecitfy library - */ - @OnLoad - private void onLoad() { - if (testCaseNames.size() == results.size()) { - for (int index = 0; index < testCaseNames.size(); index++) { - String name = testCaseNames.get(index); - int result = results.get(index).intValue(); - this.testCases.add(new TestCase(this.id, this.testCases.size(), name, result)); - } - } - } - - /** - * Add a test case to the test case run entity. - * @param name The name of the test case. - * @param result The result of the test case. - * @return true if added, false otherwise. - */ - public boolean addTestCase(String name, int result) { - if (this.isFull()) { - return false; - } else { - this.testCaseNames.add(name); - this.results.add(result); - return true; - } - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<TestCaseRunEntity> save() { - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity testCaseRunEntity; - if (this.id >= 0) { - testCaseRunEntity = new Entity(KeyFactory.createKey(KIND, id)); - } else { - testCaseRunEntity = new Entity(KIND); - } - - if (this.testCases.size() > 0) { - List<String> testCaseNames = new ArrayList<>(); - List<Integer> results = new ArrayList<>(); - for (TestCase testCase : this.testCases) { - testCaseNames.add(testCase.name); - results.add(testCase.result); - } - testCaseRunEntity.setUnindexedProperty(TEST_CASE_NAMES, testCaseNames); - testCaseRunEntity.setUnindexedProperty(RESULTS, results); - } - if (systraceUrl != null) { - testCaseRunEntity.setUnindexedProperty(SYSTRACE_URL, this.systraceUrl); - } - - return testCaseRunEntity; - } - - /** - * Convert an Entity object to a TestCaseRunEntity. - * - * @param e The entity to process. - * @return TestCaseRunEntity object with the properties from e, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static TestCaseRunEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND)) { - log.warn("Wrong kind: " + e.getKey()); - return null; - } - try { - TestCaseRunEntity testCaseRun = new TestCaseRunEntity(e.getKey().getId()); - if (e.hasProperty(TEST_CASE_NAMES) && e.hasProperty(RESULTS)) { - List<String> testCaseNames = (List<String>) e.getProperty(TEST_CASE_NAMES); - List<Long> results = (List<Long>) e.getProperty(RESULTS); - if (testCaseNames.size() == results.size()) { - for (int i = 0; i < testCaseNames.size(); i++) { - testCaseRun.addTestCase(testCaseNames.get(i), results.get(i).intValue()); - } - } - } - if (e.hasProperty(TEST_CASE_NAME) && e.hasProperty(RESULT)) { - testCaseRun.addTestCase( - (String) e.getProperty(TEST_CASE_NAME), (int) (long) e.getProperty(RESULT)); - } - if (e.hasProperty(SYSTRACE_URL)) { - String systraceUrl = (String) e.getProperty(SYSTRACE_URL); - testCaseRun.setSystraceUrl(systraceUrl); - } - return testCaseRun; - } catch (ClassCastException exception) { - // Invalid cast - log.warn("Error parsing test case run entity.", exception); - } - return null; - } -} diff --git a/src/main/java/com/android/vts/entity/TestCoverageStatusEntity.java b/src/main/java/com/android/vts/entity/TestCoverageStatusEntity.java deleted file mode 100644 index 1156cc7..0000000 --- a/src/main/java/com/android/vts/entity/TestCoverageStatusEntity.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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 static com.googlecode.objectify.ObjectifyService.ofy; - -import com.google.appengine.api.datastore.Entity; -import com.googlecode.objectify.Key; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Index; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@com.googlecode.objectify.annotation.Entity(name = "TestCoverageStatus") -@EqualsAndHashCode(of = "testName") -@Cache -@NoArgsConstructor -/** Entity describing test coverage status. */ -public class TestCoverageStatusEntity implements DashboardEntity { - - protected static final Logger logger = - Logger.getLogger(TestCoverageStatusEntity.class.getName()); - - public static final String KIND = "TestCoverageStatus"; - - // Property keys - public static final String TOTAL_LINE_COUNT = "totalLineCount"; - public static final String COVERED_LINE_COUNT = "coveredLineCount"; - public static final String UPDATED_TIMESTAMP = "updatedTimestamp"; - public static final String DEVICE_INFO_ID = "deviceInfoId"; - - /** TestCoverageStatusEntity name field */ - @Id @Getter @Setter String testName; - - /** TestCoverageStatusEntity coveredLineCount field */ - @Index @Getter @Setter long coveredLineCount; - - /** TestCoverageStatusEntity totalLineCount field */ - @Index @Getter @Setter long totalLineCount; - - /** TestCoverageStatusEntity updatedTimestamp field */ - @Index @Getter @Setter long updatedTimestamp; - - /** TestCoverageStatusEntity DeviceInfo Entity ID reference field */ - @Index @Getter @Setter long deviceInfoId; - - /** TestCoverageStatusEntity updatedCoveredLineCount field */ - @Index @Getter @Setter long updatedCoveredLineCount; - - /** TestCoverageStatusEntity updatedTotalLineCount field */ - @Index @Getter @Setter long updatedTotalLineCount; - - /** TestCoverageStatusEntity updatedDate field */ - @Index @Getter @Setter Date updatedDate; - - /** - * Create a TestCoverageStatusEntity object with status metadata. - * - * @param testName The name of the test. - * @param timestamp The timestamp indicating the most recent test run event in the test state. - * @param coveredLineCount The number of lines covered. - * @param totalLineCount The total number of lines. - */ - public TestCoverageStatusEntity( - String testName, - long timestamp, - long coveredLineCount, - long totalLineCount, - long deviceInfoId) { - this.testName = testName; - this.updatedTimestamp = timestamp; - this.coveredLineCount = coveredLineCount; - this.totalLineCount = totalLineCount; - this.deviceInfoId = deviceInfoId; - } - - /** find TestCoverageStatus entity by ID */ - public static TestCoverageStatusEntity findById(String testName) { - return ofy().load().type(TestCoverageStatusEntity.class).id(testName).now(); - } - - /** Get all TestCoverageStatusEntity List */ - public static Map<String, TestCoverageStatusEntity> getTestCoverageStatusMap() { - List<TestCoverageStatusEntity> testCoverageStatusEntityList = getAllTestCoverage(); - - Map<String, TestCoverageStatusEntity> testCoverageStatusMap = - testCoverageStatusEntityList.stream() - .collect(Collectors.toMap(t -> t.getTestName(), t -> t)); - return testCoverageStatusMap; - } - - /** Get all DeviceInfoEntity List by TestCoverageStatusEntities' key list */ - public static List<Key<DeviceInfoEntity>> getDeviceInfoEntityKeyList( - List<TestCoverageStatusEntity> testCoverageStatusEntityList) { - return testCoverageStatusEntityList - .stream() - .map( - testCoverageStatusEntity -> { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create( - TestEntity.class, - testCoverageStatusEntity.getTestName()); - com.googlecode.objectify.Key testRunKey = - com.googlecode.objectify.Key.create( - testKey, - TestRunEntity.class, - testCoverageStatusEntity.getUpdatedTimestamp()); - return com.googlecode.objectify.Key.create( - testRunKey, - DeviceInfoEntity.class, - testCoverageStatusEntity.getDeviceInfoId()); - }) - .collect(Collectors.toList()); - } - - /** Get all TestCoverageStatusEntity List */ - public static List<TestCoverageStatusEntity> getAllTestCoverage() { - return ofy().load().type(TestCoverageStatusEntity.class).list(); - } - - /** Get all TestCoverageStatusEntities' Branch List */ - public static Set<String> getBranchSet( - List<TestCoverageStatusEntity> testCoverageStatusEntityList) { - List<com.googlecode.objectify.Key<DeviceInfoEntity>> deviceInfoEntityKeyList = - getDeviceInfoEntityKeyList(testCoverageStatusEntityList); - - Collection<DeviceInfoEntity> deviceInfoEntityList = - ofy().load().keys(() -> deviceInfoEntityKeyList.iterator()).values(); - - Set<String> branchSet = - deviceInfoEntityList - .stream() - .map(deviceInfoEntity -> deviceInfoEntity.getBranch()) - .collect(Collectors.toSet()); - return branchSet; - } - - /** Get all TestCoverageStatusEntities' Device List */ - public static Set<String> getDeviceSet( - List<TestCoverageStatusEntity> testCoverageStatusEntityList) { - List<com.googlecode.objectify.Key<DeviceInfoEntity>> deviceInfoEntityKeyList = - getDeviceInfoEntityKeyList(testCoverageStatusEntityList); - - Collection<DeviceInfoEntity> deviceInfoEntityList = - ofy().load().keys(() -> deviceInfoEntityKeyList.iterator()).values(); - - Set<String> deviceSet = - deviceInfoEntityList - .stream() - .map(deviceInfoEntity -> deviceInfoEntity.getBuildFlavor()) - .collect(Collectors.toSet()); - return deviceSet; - } - - /** TestRunEntity function to get the related TestRunEntity from id value */ - public TestRunEntity getTestRunEntity() { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create(TestEntity.class, this.testName); - return ofy().load() - .type(TestRunEntity.class) - .parent(testKey) - .id(this.updatedTimestamp) - .now(); - } - - /** Saving function for the instance of this class */ - @Override - public Key<TestCoverageStatusEntity> save() { - this.updatedDate = new Date(); - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity testEntity = new Entity(KIND, this.testName); - testEntity.setProperty(UPDATED_TIMESTAMP, this.updatedTimestamp); - testEntity.setProperty(COVERED_LINE_COUNT, this.coveredLineCount); - testEntity.setProperty(TOTAL_LINE_COUNT, this.totalLineCount); - return testEntity; - } - - /** - * Convert an Entity object to a TestCoverageStatusEntity. - * - * @param e The entity to process. - * @return TestCoverageStatusEntity object with the properties from e processed, or null if - * incompatible. - */ - @SuppressWarnings("unchecked") - public static TestCoverageStatusEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) - || e.getKey().getName() == null - || !e.hasProperty(UPDATED_TIMESTAMP) - || !e.hasProperty(COVERED_LINE_COUNT) - || !e.hasProperty(TOTAL_LINE_COUNT) - || !e.hasProperty(DEVICE_INFO_ID)) { - logger.log(Level.WARNING, "Missing test attributes in entity: " + e.toString()); - return null; - } - String testName = e.getKey().getName(); - long timestamp = 0; - long coveredLineCount = -1; - long totalLineCount = -1; - long deviceInfoId = 0; - try { - timestamp = (long) e.getProperty(UPDATED_TIMESTAMP); - coveredLineCount = (Long) e.getProperty(COVERED_LINE_COUNT); - totalLineCount = (Long) e.getProperty(TOTAL_LINE_COUNT); - deviceInfoId = (Long) e.getProperty(DEVICE_INFO_ID); - } catch (ClassCastException exception) { - // Invalid contents or null values - logger.log(Level.WARNING, "Error parsing test entity.", exception); - return null; - } - return new TestCoverageStatusEntity( - testName, timestamp, coveredLineCount, totalLineCount, deviceInfoId); - } -} diff --git a/src/main/java/com/android/vts/entity/TestEntity.java b/src/main/java/com/android/vts/entity/TestEntity.java deleted file mode 100644 index 4df7fb0..0000000 --- a/src/main/java/com/android/vts/entity/TestEntity.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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 static com.googlecode.objectify.ObjectifyService.ofy; - -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -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 java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; -import lombok.Data; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Entity(name = "Test") -@Cache -@Data -@NoArgsConstructor -/** Entity describing test metadata. */ -public class TestEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(TestEntity.class.getName()); - - public static final String KIND = "Test"; - public static final String HAS_PROFILING_DATA = "hasProfilingData"; - - @Id - @Getter - @Setter - private String testName; - - @Index - @Getter - @Setter - private boolean hasProfilingData; - - /** - * Create a TestEntity object. - * - * @param testName The name of the test. - * @param hasProfilingData True if the test includes profiling data. - */ - public TestEntity(String testName, boolean hasProfilingData) { - this.testName = testName; - this.hasProfilingData = hasProfilingData; - } - - /** - * Create a TestEntity object. - * - * @param testName The name of the test. - */ - public TestEntity(String testName) { - this(testName, false); - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<TestEntity> save() { - return ofy().save().entity(this).now(); - } - - public com.google.appengine.api.datastore.Entity toEntity() { - com.google.appengine.api.datastore.Entity testEntity = new com.google.appengine.api.datastore.Entity(this.getOldKey()); - testEntity.setProperty(HAS_PROFILING_DATA, this.hasProfilingData); - return testEntity; - } - - /** - * Get objectify TestRun Entity's key. - * - * @param startTimestamp test start timestamp - */ - public com.googlecode.objectify.Key getTestRunKey(long startTimestamp) { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create(TestEntity.class, this.getTestName()); - com.googlecode.objectify.Key testRunKey = - com.googlecode.objectify.Key.create(testKey, TestRunEntity.class, startTimestamp); - return testRunKey; - } - - /** - * Get key info from appengine based library. - */ - public Key getOldKey() { - return KeyFactory.createKey(KIND, testName); - } - - public static List<String> getAllTestNames() { - List<TestEntity> testEntityList = getAllTest(); - - List<String> allTestNames = testEntityList.stream() - .map(te -> te.getTestName()).collect(Collectors.toList()); - return allTestNames; - } - - public static List<TestEntity> getAllTest() { - return ofy().load().type(TestEntity.class).list(); - } - - @Override - public boolean equals(Object obj) { - if (obj == null || !TestEntity.class.isAssignableFrom(obj.getClass())) { - return false; - } - TestEntity test2 = (TestEntity) obj; - return ( - this.testName.equals(test2.testName) && - this.hasProfilingData == test2.hasProfilingData); - } - - /** - * Convert an Entity object to a TestEntity. - * - * @param e The entity to process. - * @return TestEntity object with the properties from e processed, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static TestEntity fromEntity(com.google.appengine.api.datastore.Entity e) { - if (!e.getKind().equals(KIND) || e.getKey().getName() == null) { - logger.log(Level.WARNING, "Missing test attributes in entity: " + e.toString()); - return null; - } - String testName = e.getKey().getName(); - boolean hasProfilingData = false; - if (e.hasProperty(HAS_PROFILING_DATA)) { - hasProfilingData = (boolean) e.getProperty(HAS_PROFILING_DATA); - } - return new TestEntity(testName, hasProfilingData); - } -} diff --git a/src/main/java/com/android/vts/entity/TestPlanEntity.java b/src/main/java/com/android/vts/entity/TestPlanEntity.java deleted file mode 100644 index 590db46..0000000 --- a/src/main/java/com/android/vts/entity/TestPlanEntity.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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 static com.googlecode.objectify.ObjectifyService.ofy; - -import com.google.appengine.api.datastore.Entity; -import com.googlecode.objectify.Key; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import java.util.logging.Level; -import java.util.logging.Logger; -import lombok.Data; -import lombok.NoArgsConstructor; - -@com.googlecode.objectify.annotation.Entity(name = "TestPlan") -@Cache -@Data -@NoArgsConstructor -/** Entity describing test plan metadata. */ -public class TestPlanEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(TestPlanEntity.class.getName()); - - public static final String KIND = "TestPlan"; - - // Property keys - public static final String TEST_PLAN_NAME = "testPlanName"; - - @Id - public String testPlanName; - - /** - * Create a TestPlanEntity object. - * - * @param testPlanName The name of the test plan. - */ - public TestPlanEntity(String testPlanName) { - this.testPlanName = testPlanName; - } - - public Entity toEntity() { - Entity planEntity = new Entity(KIND, this.testPlanName); - return planEntity; - } - - public Key getKey() { - Key key = Key.create(TestPlanEntity.class, this.testPlanName); - return key; - } - - /** - * Convert an Entity object to a TestEntity. - * - * @param e The entity to process. - * @return TestEntity object with the properties from e processed, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static TestPlanEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) || e.getKey().getName() == null - || !e.hasProperty(TEST_PLAN_NAME)) { - logger.log(Level.WARNING, "Missing test plan attributes in entity: " + e.toString()); - return null; - } - String testPlanName = e.getKey().getName(); - return new TestPlanEntity(testPlanName); - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<TestPlanEntity> save() { - return ofy().save().entity(this).now(); - } -} diff --git a/src/main/java/com/android/vts/entity/TestPlanRunEntity.java b/src/main/java/com/android/vts/entity/TestPlanRunEntity.java deleted file mode 100644 index de2e505..0000000 --- a/src/main/java/com/android/vts/entity/TestPlanRunEntity.java +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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 static com.googlecode.objectify.ObjectifyService.ofy; - -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.taskqueue.Queue; -import com.google.appengine.api.taskqueue.QueueFactory; -import com.google.appengine.api.taskqueue.TaskOptions; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import com.googlecode.objectify.annotation.Parent; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; -import lombok.Data; -import lombok.NoArgsConstructor; - -@com.googlecode.objectify.annotation.Entity(name = "TestPlanRun") -@Cache -@Data -@NoArgsConstructor -/** Entity describing test plan run information. */ -public class TestPlanRunEntity implements DashboardEntity { - - protected static final Logger logger = Logger.getLogger(TestPlanRunEntity.class.getName()); - - private final String QUEUE_NAME = "coverageApiQueue"; - - public static final String KIND = "TestPlanRun"; - - private static final String COVERAGE_API_URL = "/api/coverage/api/sum"; - - // Property keys - public static final String TEST_PLAN_NAME = "testPlanName"; - public static final String TYPE = "type"; - public static final String START_TIMESTAMP = "startTimestamp"; - public static final String END_TIMESTAMP = "endTimestamp"; - public static final String TEST_BUILD_ID = "testBuildId"; - public static final String PASS_COUNT = "passCount"; - public static final String FAIL_COUNT = "failCount"; - public static final String TOTAL_API_COUNT = "totalApiCount"; - public static final String TOTAL_COVERED_API_COUNT = "coveredApiCount"; - public static final String TEST_RUNS = "testRuns"; - - @Ignore public Key key; - - @Id private Long id; - - @Parent private com.googlecode.objectify.Key<TestPlanEntity> parent; - - @Index private String testPlanName; - - @Index private long type; - - @Index private long startTimestamp; - - @Index private long endTimestamp; - - @Index private String testBuildId; - - @Index private long passCount; - - @Index private long failCount; - - @Index private long totalApiCount; - - @Index private long coveredApiCount; - - @Ignore private List<Key> oldTestRuns; - - private List<com.googlecode.objectify.Key<TestRunEntity>> testRuns; - - /** When this record was created or updated */ - @Index Date updated; - - /** - * Create a TestPlanRunEntity object describing a test plan run. - * - * @param testPlanKey The key for the parent entity in the database. - * @param type The test run type (e.g. presubmit, postsubmit, other) - * @param startTimestamp The time in microseconds when the test plan run started. - * @param endTimestamp The time in microseconds when the test plan run ended. - * @param testBuildId The build ID of the VTS test build. - * @param passCount The number of passing test cases in the run. - * @param failCount The number of failing test cases in the run. - * @param testRuns A list of keys to the TestRunEntity objects for the plan run run. - */ - public TestPlanRunEntity( - Key testPlanKey, - String testPlanName, - long type, - long startTimestamp, - long endTimestamp, - String testBuildId, - long passCount, - long failCount, - long totalApiCount, - long coveredApiCount, - List<Key> testRuns) { - this.id = startTimestamp; - this.key = KeyFactory.createKey(testPlanKey, KIND, startTimestamp); - this.testPlanName = testPlanName; - this.type = type; - this.startTimestamp = startTimestamp; - this.endTimestamp = endTimestamp; - this.testBuildId = testBuildId; - this.passCount = passCount; - this.failCount = failCount; - this.totalApiCount = totalApiCount; - this.coveredApiCount = coveredApiCount; - this.oldTestRuns = testRuns; - this.testRuns = - testRuns.stream() - .map( - testRun -> { - com.googlecode.objectify.Key testParentKey = - com.googlecode.objectify.Key.create( - TestEntity.class, - testRun.getParent().getName()); - return com.googlecode.objectify.Key.create( - testParentKey, TestRunEntity.class, testRun.getId()); - }) - .collect(Collectors.toList()); - } - - /** - * Create a TestPlanRunEntity object describing a test plan run. - * - * @param testPlanKey The key for the parent entity in the database. - * @param type The test run type (e.g. presubmit, postsubmit, other) - * @param startTimestamp The time in microseconds when the test plan run started. - * @param endTimestamp The time in microseconds when the test plan run ended. - * @param testBuildId The build ID of the VTS test build. - * @param passCount The number of passing test cases in the run. - * @param failCount The number of failing test cases in the run. - * @param testRuns A list of keys to the TestRunEntity objects for the plan run run. - */ - public TestPlanRunEntity( - com.googlecode.objectify.Key<TestPlanEntity> testPlanKey, - String testPlanName, - long type, - long startTimestamp, - long endTimestamp, - String testBuildId, - long passCount, - long failCount, - long totalApiCount, - long coveredApiCount, - List<com.googlecode.objectify.Key<TestRunEntity>> testRuns) { - this.id = startTimestamp; - this.parent = testPlanKey; - this.testPlanName = testPlanName; - this.type = type; - this.startTimestamp = startTimestamp; - this.endTimestamp = endTimestamp; - this.testBuildId = testBuildId; - this.passCount = passCount; - this.failCount = failCount; - this.totalApiCount = totalApiCount; - this.coveredApiCount = coveredApiCount; - this.testRuns = testRuns; - } - - public Entity toEntity() { - Entity planRun = new Entity(this.key); - planRun.setProperty(TEST_PLAN_NAME, this.testPlanName); - planRun.setProperty(TYPE, this.type); - planRun.setProperty(START_TIMESTAMP, this.startTimestamp); - planRun.setProperty(END_TIMESTAMP, this.endTimestamp); - planRun.setProperty(TEST_BUILD_ID, this.testBuildId.toLowerCase()); - planRun.setProperty(PASS_COUNT, this.passCount); - planRun.setProperty(FAIL_COUNT, this.failCount); - if (this.oldTestRuns != null && this.oldTestRuns.size() > 0) { - planRun.setUnindexedProperty(TEST_RUNS, this.oldTestRuns); - } - return planRun; - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<TestPlanRunEntity> save() { - this.updated = new Date(); - return ofy().save().entity(this).now(); - } - - /** Get UrlSafeKey from this class */ - public String getUrlSafeKey() { - return this.getOfyKey().toUrlSafe(); - } - - /** Add a task to calculate the total number of coverage API */ - public void addCoverageApiTask() { - if (Objects.isNull(this.testRuns)) { - logger.log(Level.WARNING, "testRuns is null so adding task to the queue is skipped!"); - } else { - Queue queue = QueueFactory.getQueue(QUEUE_NAME); - queue.add( - TaskOptions.Builder.withUrl(COVERAGE_API_URL) - .param("urlSafeKey", this.getUrlSafeKey()) - .method(TaskOptions.Method.POST)); - } - } - - /** - * Get key info from appengine based library. - * - * @param parentKey parent key. - */ - public Key getOldKey(Key parentKey) { - return KeyFactory.createKey(parentKey, KIND, startTimestamp); - } - - /** Get key info from objecitfy library. */ - public com.googlecode.objectify.Key getOfyKey() { - return com.googlecode.objectify.Key.create( - this.parent, TestPlanRunEntity.class, this.startTimestamp); - } - - /** - * Convert an Entity object to a TestPlanRunEntity. - * - * @param e The entity to process. - * @return TestPlanRunEntity object with the properties from e processed, or null if - * incompatible. - */ - @SuppressWarnings("unchecked") - public static TestPlanRunEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) - || !e.hasProperty(TEST_PLAN_NAME) - || !e.hasProperty(TYPE) - || !e.hasProperty(START_TIMESTAMP) - || !e.hasProperty(END_TIMESTAMP) - || !e.hasProperty(TEST_BUILD_ID) - || !e.hasProperty(PASS_COUNT) - || !e.hasProperty(FAIL_COUNT) - || !e.hasProperty(TEST_RUNS)) { - logger.log(Level.WARNING, "Missing test run attributes in entity: " + e.toString()); - return null; - } - try { - String testPlanName = (String) e.getProperty(TEST_PLAN_NAME); - long type = (long) e.getProperty(TYPE); - long startTimestamp = (long) e.getProperty(START_TIMESTAMP); - long endTimestamp = (long) e.getProperty(END_TIMESTAMP); - String testBuildId = (String) e.getProperty(TEST_BUILD_ID); - long passCount = (long) e.getProperty(PASS_COUNT); - long failCount = (long) e.getProperty(FAIL_COUNT); - - long totalApiCount = - e.hasProperty(TOTAL_API_COUNT) ? (long) e.getProperty(TOTAL_API_COUNT) : 0L; - long coveredApiCount = - e.hasProperty(TOTAL_COVERED_API_COUNT) - ? (long) e.getProperty(TOTAL_COVERED_API_COUNT) - : 0L; - List<Key> oldTestRuns = (List<Key>) e.getProperty(TEST_RUNS); - return new TestPlanRunEntity( - e.getKey().getParent(), - testPlanName, - type, - startTimestamp, - endTimestamp, - testBuildId, - passCount, - failCount, - totalApiCount, - coveredApiCount, - oldTestRuns); - } catch (ClassCastException exception) { - // Invalid cast - logger.log(Level.WARNING, "Error parsing test plan run entity.", exception); - } - return null; - } - - public JsonObject toJson() { - JsonObject json = new JsonObject(); - json.add(TEST_PLAN_NAME, new JsonPrimitive(this.testPlanName)); - json.add(TEST_BUILD_ID, new JsonPrimitive(this.testBuildId)); - json.add(PASS_COUNT, new JsonPrimitive(this.passCount)); - json.add(FAIL_COUNT, new JsonPrimitive(this.failCount)); - json.add(START_TIMESTAMP, new JsonPrimitive(this.startTimestamp)); - json.add(END_TIMESTAMP, new JsonPrimitive(this.endTimestamp)); - return json; - } -} diff --git a/src/main/java/com/android/vts/entity/TestRunEntity.java b/src/main/java/com/android/vts/entity/TestRunEntity.java deleted file mode 100644 index 0d5f1ec..0000000 --- a/src/main/java/com/android/vts/entity/TestRunEntity.java +++ /dev/null @@ -1,497 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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 static com.googlecode.objectify.ObjectifyService.ofy; - -import com.android.vts.util.TimeUtil; -import com.android.vts.util.UrlUtil; -import com.android.vts.util.UrlUtil.LinkDisplay; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import com.googlecode.objectify.annotation.OnLoad; -import com.googlecode.objectify.annotation.Parent; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Supplier; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Stream; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.apache.commons.lang3.math.NumberUtils; - -@com.googlecode.objectify.annotation.Entity(name = "TestRun") -@Cache -@NoArgsConstructor -/** Entity describing test run information. */ -public class TestRunEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(TestRunEntity.class.getName()); - - /** Enum for classifying test run types. */ - public enum TestRunType { - OTHER(0), - PRESUBMIT(1), - POSTSUBMIT(2); - - private final int value; - - private TestRunType(int value) { - this.value = value; - } - - /** - * Get the ordinal representation of the type. - * - * @return The value associated with the test run type. - */ - public int getNumber() { - return value; - } - - /** - * Convert an ordinal value to a TestRunType. - * - * @param value The orginal value to parse. - * @return a TestRunType value. - */ - public static TestRunType fromNumber(int value) { - if (value == 1) { - return TestRunType.PRESUBMIT; - } else if (value == 2) { - return TestRunType.POSTSUBMIT; - } else { - return TestRunType.OTHER; - } - } - - /** - * Determine the test run type based on the build ID. - * - * <p>Postsubmit runs are expected to have integer build IDs, while presubmit runs are - * integers prefixed by the character P. All other runs (e.g. local builds) are classified - * as OTHER. - * - * @param buildId The build ID. - * @return the TestRunType. - */ - public static TestRunType fromBuildId(String buildId) { - if (buildId.toLowerCase().startsWith("p")) { - if (NumberUtils.isParsable(buildId.substring(1))) { - return TestRunType.PRESUBMIT; - } else { - return TestRunType.OTHER; - } - } else if (NumberUtils.isParsable(buildId)) { - return TestRunType.POSTSUBMIT; - } else { - return TestRunType.OTHER; - } - } - } - - public static final String KIND = "TestRun"; - - // Property keys - public static final String TEST_NAME = "testName"; - public static final String TYPE = "type"; - public static final String START_TIMESTAMP = "startTimestamp"; - public static final String END_TIMESTAMP = "endTimestamp"; - public static final String TEST_BUILD_ID = "testBuildId"; - public static final String HOST_NAME = "hostName"; - public static final String PASS_COUNT = "passCount"; - public static final String FAIL_COUNT = "failCount"; - public static final String HAS_CODE_COVERAGE = "hasCodeCoverage"; - public static final String HAS_COVERAGE = "hasCoverage"; - public static final String TEST_CASE_IDS = "testCaseIds"; - public static final String LOG_LINKS = "logLinks"; - public static final String API_COVERAGE_KEY_LIST = "apiCoverageKeyList"; - public static final String TOTAL_API_COUNT = "totalApiCount"; - public static final String COVERED_API_COUNT = "coveredApiCount"; - - @Ignore private Key key; - - @Id @Getter @Setter private Long id; - - @Parent @Getter @Setter private com.googlecode.objectify.Key<?> testRunParent; - - @Index @Getter @Setter private long type; - - @Index @Getter @Setter private long startTimestamp; - - @Index @Getter @Setter private long endTimestamp; - - @Index @Getter @Setter private String testBuildId; - - @Index @Getter @Setter private String testName; - - @Index @Getter @Setter private String hostName; - - @Index @Getter @Setter private long passCount; - - @Index @Getter @Setter private long failCount; - - @Index private boolean hasCoverage; - - @Index @Getter @Setter private boolean hasCodeCoverage; - - @Ignore private com.googlecode.objectify.Key<CodeCoverageEntity> codeCoverageEntityKey; - - @Index @Getter @Setter private long coveredLineCount; - - @Index @Getter @Setter private long totalLineCount; - - @Getter @Setter private List<Long> testCaseIds; - - @Getter @Setter private List<String> logLinks; - - /** - * Create a TestRunEntity object describing a test run. - * - * @param parentKey The key to the parent TestEntity. - * @param type The test run type (e.g. presubmit, postsubmit, other) - * @param startTimestamp The time in microseconds when the test run started. - * @param endTimestamp The time in microseconds when the test run ended. - * @param testBuildId The build ID of the VTS test build. - * @param hostName The name of host machine. - * @param passCount The number of passing test cases in the run. - * @param failCount The number of failing test cases in the run. - */ - public TestRunEntity( - Key parentKey, - long type, - long startTimestamp, - long endTimestamp, - String testBuildId, - String hostName, - long passCount, - long failCount, - boolean hasCodeCoverage, - List<Long> testCaseIds, - List<String> logLinks) { - this.id = startTimestamp; - this.key = KeyFactory.createKey(parentKey, KIND, startTimestamp); - this.type = type; - this.startTimestamp = startTimestamp; - this.endTimestamp = endTimestamp; - this.testBuildId = testBuildId; - this.hostName = hostName; - this.passCount = passCount; - this.failCount = failCount; - this.hasCodeCoverage = hasCodeCoverage; - this.testName = parentKey.getName(); - this.testCaseIds = testCaseIds; - this.logLinks = logLinks; - - this.testRunParent = com.googlecode.objectify.Key.create(TestEntity.class, testName); - this.codeCoverageEntityKey = getCodeCoverageEntityKey(); - } - - /** - * Called after the POJO is populated with data through objecitfy library - */ - @OnLoad - private void onLoad() { - if (Objects.isNull(this.hasCodeCoverage)) { - this.hasCodeCoverage = this.hasCoverage; - this.save(); - } - } - - public Entity toEntity() { - Entity testRunEntity = new Entity(this.key); - testRunEntity.setProperty(TEST_NAME, this.testName); - testRunEntity.setProperty(TYPE, this.type); - testRunEntity.setProperty(START_TIMESTAMP, this.startTimestamp); - testRunEntity.setUnindexedProperty(END_TIMESTAMP, this.endTimestamp); - testRunEntity.setProperty(TEST_BUILD_ID, this.testBuildId.toLowerCase()); - testRunEntity.setProperty(HOST_NAME, this.hostName.toLowerCase()); - testRunEntity.setProperty(PASS_COUNT, this.passCount); - testRunEntity.setProperty(FAIL_COUNT, this.failCount); - testRunEntity.setProperty(HAS_CODE_COVERAGE, this.hasCodeCoverage); - testRunEntity.setUnindexedProperty(TEST_CASE_IDS, this.testCaseIds); - if (this.logLinks != null && this.logLinks.size() > 0) { - testRunEntity.setUnindexedProperty(LOG_LINKS, this.logLinks); - } - return testRunEntity; - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<TestRunEntity> save() { - return ofy().save().entity(this).now(); - } - - /** - * Get key info from appengine based library. - */ - public Key getKey() { - Key parentKey = KeyFactory.createKey(TestEntity.KIND, testName); - return KeyFactory.createKey(parentKey, KIND, startTimestamp); - } - - /** Getter hasCodeCoverage value */ - public boolean getHasCodeCoverage() { - return this.hasCodeCoverage; - } - - /** Getter DateTime string from startTimestamp */ - public String getStartDateTime() { - return TimeUtil.getDateTimeString(this.startTimestamp); - } - - /** Getter DateTime string from startTimestamp */ - public String getEndDateTime() { - return TimeUtil.getDateTimeString(this.endTimestamp); - } - - /** find TestRun entity by ID and test name */ - public static TestRunEntity getByTestNameId(String testName, long id) { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create(TestEntity.class, testName); - return ofy().load().type(TestRunEntity.class).parent(testKey).id(id).now(); - } - - /** Get CodeCoverageEntity Key to generate Key by combining key info */ - private com.googlecode.objectify.Key getCodeCoverageEntityKey() { - com.googlecode.objectify.Key testRunKey = this.getOfyKey(); - return com.googlecode.objectify.Key.create( - testRunKey, CodeCoverageEntity.class, this.startTimestamp); - } - - /** Get ApiCoverageEntity Key from the parent key */ - public com.googlecode.objectify.Key getOfyKey() { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create( - TestEntity.class, this.testName); - com.googlecode.objectify.Key testRunKey = - com.googlecode.objectify.Key.create( - testKey, TestRunEntity.class, this.startTimestamp); - return testRunKey; - } - - /** Get ApiCoverageEntity from key info */ - public Optional<List<ApiCoverageEntity>> getApiCoverageEntityList() { - com.googlecode.objectify.Key testRunKey = this.getOfyKey(); - List<ApiCoverageEntity> apiCoverageEntityList = - ofy().load().type(ApiCoverageEntity.class).ancestor(testRunKey).list(); - return Optional.ofNullable(apiCoverageEntityList); - } - - /** - * Get CodeCoverageEntity instance from codeCoverageEntityKey value. - */ - public CodeCoverageEntity getCodeCoverageEntity() { - if (this.hasCodeCoverage) { - CodeCoverageEntity codeCoverageEntity = - ofy().load() - .type(CodeCoverageEntity.class) - .filterKey(this.codeCoverageEntityKey) - .first() - .now(); - if (Objects.isNull(codeCoverageEntity)) { - codeCoverageEntity = - new CodeCoverageEntity( - this.getKey(), coveredLineCount, totalLineCount); - codeCoverageEntity.save(); - return codeCoverageEntity; - } else { - return codeCoverageEntity; - } - } else { - logger.log( - Level.WARNING, - "The hasCodeCoverage value is false. Please check the code coverage entity key"); - return null; - } - } - - /** - * Convert an Entity object to a TestRunEntity. - * - * @param e The entity to process. - * @return TestRunEntity object with the properties from e processed, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static TestRunEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) - || !e.hasProperty(TYPE) - || !e.hasProperty(START_TIMESTAMP) - || !e.hasProperty(END_TIMESTAMP) - || !e.hasProperty(TEST_BUILD_ID) - || !e.hasProperty(HOST_NAME) - || !e.hasProperty(PASS_COUNT) - || !e.hasProperty(FAIL_COUNT)) { - logger.log(Level.WARNING, "Missing test run attributes in entity: " + e.toString()); - return null; - } - try { - long type = (long) e.getProperty(TYPE); - long startTimestamp = (long) e.getProperty(START_TIMESTAMP); - long endTimestamp = (long) e.getProperty(END_TIMESTAMP); - String testBuildId = (String) e.getProperty(TEST_BUILD_ID); - String hostName = (String) e.getProperty(HOST_NAME); - long passCount = (long) e.getProperty(PASS_COUNT); - long failCount = (long) e.getProperty(FAIL_COUNT); - boolean hasCodeCoverage = false; - if (e.hasProperty(HAS_CODE_COVERAGE)) { - hasCodeCoverage = (boolean) e.getProperty(HAS_CODE_COVERAGE); - } else { - hasCodeCoverage = (boolean) e.getProperty(HAS_COVERAGE); - } - List<Long> testCaseIds = (List<Long>) e.getProperty(TEST_CASE_IDS); - if (Objects.isNull(testCaseIds)) { - testCaseIds = new ArrayList<>(); - } - List<String> links = new ArrayList<>(); - if (e.hasProperty(LOG_LINKS)) { - links = (List<String>) e.getProperty(LOG_LINKS); - } - return new TestRunEntity( - e.getKey().getParent(), - type, - startTimestamp, - endTimestamp, - testBuildId, - hostName, - passCount, - failCount, - hasCodeCoverage, - testCaseIds, - links); - } catch (ClassCastException exception) { - // Invalid cast - logger.log(Level.WARNING, "Error parsing test run entity.", exception); - } - return null; - } - - /** Get JsonFormat logLinks */ - public JsonElement getJsonLogLinks() { - List<String> logLinks = this.getLogLinks(); - List<JsonElement> links = new ArrayList<>(); - if (logLinks != null && logLinks.size() > 0) { - for (String rawUrl : logLinks) { - UrlUtil.LinkDisplay validatedLink = UrlUtil.processUrl(rawUrl); - if (validatedLink == null) { - logger.log(Level.WARNING, "Invalid logging URL : " + rawUrl); - continue; - } - String[] logInfo = new String[] {validatedLink.name, validatedLink.url}; - links.add(new Gson().toJsonTree(logInfo)); - } - } - return new Gson().toJsonTree(links); - } - - public JsonObject toJson() { - Map<String, TestCoverageStatusEntity> testCoverageStatusMap = TestCoverageStatusEntity - .getTestCoverageStatusMap(); - - JsonObject json = new JsonObject(); - json.add(TEST_NAME, new JsonPrimitive(this.testName)); - json.add(TEST_BUILD_ID, new JsonPrimitive(this.testBuildId)); - json.add(HOST_NAME, new JsonPrimitive(this.hostName)); - json.add(PASS_COUNT, new JsonPrimitive(this.passCount)); - json.add(FAIL_COUNT, new JsonPrimitive(this.failCount)); - json.add(START_TIMESTAMP, new JsonPrimitive(this.startTimestamp)); - json.add(END_TIMESTAMP, new JsonPrimitive(this.endTimestamp)); - - // Overwrite the coverage value with newly update value from user decision - if (this.hasCodeCoverage) { - CodeCoverageEntity codeCoverageEntity = this.getCodeCoverageEntity(); - if (testCoverageStatusMap.containsKey(this.testName)) { - TestCoverageStatusEntity testCoverageStatusEntity = - testCoverageStatusMap.get(this.testName); - - if (testCoverageStatusEntity.getUpdatedCoveredLineCount() > 0) { - codeCoverageEntity.setCoveredLineCount( - testCoverageStatusEntity.getUpdatedCoveredLineCount()); - } - if (testCoverageStatusEntity.getUpdatedTotalLineCount() > 0) { - codeCoverageEntity.setTotalLineCount( - testCoverageStatusEntity.getUpdatedTotalLineCount()); - } - } - - long totalLineCount = codeCoverageEntity.getTotalLineCount(); - long coveredLineCount = codeCoverageEntity.getCoveredLineCount(); - if (totalLineCount > 0 && coveredLineCount >= 0) { - json.add(CodeCoverageEntity.COVERED_LINE_COUNT, new JsonPrimitive(coveredLineCount)); - json.add(CodeCoverageEntity.TOTAL_LINE_COUNT, new JsonPrimitive(totalLineCount)); - } - } - - Optional<List<ApiCoverageEntity>> apiCoverageEntityOptionList = - this.getApiCoverageEntityList(); - if (apiCoverageEntityOptionList.isPresent()) { - List<ApiCoverageEntity> apiCoverageEntityList = apiCoverageEntityOptionList.get(); - Supplier<Stream<ApiCoverageEntity>> apiCoverageStreamSupplier = - () -> apiCoverageEntityList.stream(); - int totalHalApi = - apiCoverageStreamSupplier.get().mapToInt(data -> data.getHalApi().size()).sum(); - if (totalHalApi > 0) { - int coveredHalApi = - apiCoverageStreamSupplier - .get() - .mapToInt(data -> data.getCoveredHalApi().size()) - .sum(); - JsonArray apiCoverageKeyArray = - apiCoverageStreamSupplier - .get() - .map(data -> new JsonPrimitive(data.getUrlSafeKey())) - .collect(JsonArray::new, JsonArray::add, JsonArray::addAll); - - json.add(API_COVERAGE_KEY_LIST, apiCoverageKeyArray); - json.add(COVERED_API_COUNT, new JsonPrimitive(coveredHalApi)); - json.add(TOTAL_API_COUNT, new JsonPrimitive(totalHalApi)); - } - } - - List<String> logLinks = this.getLogLinks(); - if (logLinks != null && logLinks.size() > 0) { - List<JsonElement> links = new ArrayList<>(); - for (String rawUrl : logLinks) { - LinkDisplay validatedLink = UrlUtil.processUrl(rawUrl); - if (validatedLink == null) { - logger.log(Level.WARNING, "Invalid logging URL : " + rawUrl); - continue; - } - String[] logInfo = new String[] {validatedLink.name, validatedLink.url}; - links.add(new Gson().toJsonTree(logInfo)); - } - if (links.size() > 0) { - json.add(this.LOG_LINKS, new Gson().toJsonTree(links)); - } - } - return json; - } -} diff --git a/src/main/java/com/android/vts/entity/TestStatusEntity.java b/src/main/java/com/android/vts/entity/TestStatusEntity.java deleted file mode 100644 index b703c64..0000000 --- a/src/main/java/com/android/vts/entity/TestStatusEntity.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.android.vts.entity.TestCaseRunEntity.TestCase; -import com.google.appengine.api.datastore.Entity; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import lombok.Data; -import lombok.NoArgsConstructor; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@com.googlecode.objectify.annotation.Entity(name = "TestStatus") -@Cache -@Data -@NoArgsConstructor -/** Entity describing test status. */ -public class TestStatusEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(TestStatusEntity.class.getName()); - - public static final String KIND = "TestStatus"; - - // Property keys - public static final String PASS_COUNT = "passCount"; - public static final String FAIL_COUNT = "failCount"; - public static final String UPDATED_TIMESTAMP = "updatedTimestamp"; - - protected static final String FAILING_IDS = "failingTestcaseIds"; - protected static final String FAILING_OFFSETS = "failingTestcaseOffsets"; - - /** ID field */ - @Id private String testName; - - /** Failing Testcase ID List field */ - private List<Long> failingTestcaseIds; - - /** Failing Testcase Offsets List field */ - private List<Integer> failingTestcaseOffsets; - - /** pass count field */ - @Index private int passCount; - - /** fail count field */ - @Index private int failCount; - - /** updated timestamp field */ - @Index private long updatedTimestamp; - - @Ignore private List<TestCaseReference> failingTestCases; - - /** Object representing a reference to a test case. */ - public static class TestCaseReference { - public final long parentId; - public final int offset; - - /** - * Create a test case reference. - * - * @param parentId The ID of the TestCaseRunEntity containing the test case. - * @param offset The offset of the test case into the TestCaseRunEntity. - */ - public TestCaseReference(long parentId, int offset) { - this.parentId = parentId; - this.offset = offset; - } - - /** - * Create a test case reference. - * - * @param testCase The TestCase to reference. - */ - public TestCaseReference(TestCase testCase) { - this(testCase.parentId, testCase.offset); - } - } - - /** - * Create a TestEntity object with status metadata. - * - * @param testName The name of the test. - * @param timestamp The timestamp indicating the most recent test run event in the test state. - * @param passCount The number of tests passing up to the timestamp specified. - * @param failCount The number of tests failing up to the timestamp specified. - * @param failingTestCases The TestCaseReferences of the last observed failing test cases. - */ - public TestStatusEntity( - String testName, - long timestamp, - int passCount, - int failCount, - List<TestCaseReference> failingTestCases) { - this.testName = testName; - this.updatedTimestamp = timestamp; - this.passCount = passCount; - this.failCount = failCount; - this.failingTestCases = failingTestCases; - } - - /** - * Create a TestEntity object without metadata. - * - * @param testName The name of the test. - */ - public TestStatusEntity(String testName) { - this(testName, 0, -1, -1, new ArrayList<TestCaseReference>()); - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<TestStatusEntity> save() { - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity testEntity = new Entity(KIND, this.testName); - if (this.updatedTimestamp >= 0 && this.passCount >= 0 && this.failCount >= 0) { - testEntity.setProperty(UPDATED_TIMESTAMP, this.updatedTimestamp); - testEntity.setProperty(PASS_COUNT, this.passCount); - testEntity.setProperty(FAIL_COUNT, this.failCount); - if (this.failingTestCases.size() > 0) { - List<Long> failingTestcaseIds = new ArrayList<>(); - List<Integer> failingTestcaseOffsets = new ArrayList<>(); - for (TestCaseReference testCase : this.failingTestCases) { - failingTestcaseIds.add(testCase.parentId); - failingTestcaseOffsets.add(testCase.offset); - } - testEntity.setUnindexedProperty(FAILING_IDS, failingTestcaseIds); - testEntity.setUnindexedProperty(FAILING_OFFSETS, failingTestcaseOffsets); - } - } - return testEntity; - } - - /** - * Convert an Entity object to a TestEntity. - * - * @param e The entity to process. - * @return TestEntity object with the properties from e processed, or null if incompatible. - */ - @SuppressWarnings("unchecked") - public static TestStatusEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) || e.getKey().getName() == null) { - logger.log(Level.WARNING, "Missing test attributes in entity: " + e.toString()); - return null; - } - String testName = e.getKey().getName(); - long timestamp = 0; - int passCount = -1; - int failCount = -1; - List<TestCaseReference> failingTestCases = new ArrayList<>(); - try { - if (e.hasProperty(UPDATED_TIMESTAMP)) { - timestamp = (long) e.getProperty(UPDATED_TIMESTAMP); - } - if (e.hasProperty(PASS_COUNT)) { - passCount = ((Long) e.getProperty(PASS_COUNT)).intValue(); - } - if (e.hasProperty(FAIL_COUNT)) { - failCount = ((Long) e.getProperty(FAIL_COUNT)).intValue(); - } - if (e.hasProperty(FAILING_IDS) && e.hasProperty(FAILING_OFFSETS)) { - List<Long> ids = (List<Long>) e.getProperty(FAILING_IDS); - List<Long> offsets = (List<Long>) e.getProperty(FAILING_OFFSETS); - if (ids.size() == offsets.size()) { - for (int i = 0; i < ids.size(); i++) { - failingTestCases.add( - new TestCaseReference(ids.get(i), offsets.get(i).intValue())); - } - } - } - } catch (ClassCastException exception) { - // Invalid contents or null values - logger.log(Level.WARNING, "Error parsing test entity.", exception); - } - return new TestStatusEntity(testName, timestamp, passCount, failCount, failingTestCases); - } -} diff --git a/src/main/java/com/android/vts/entity/TestSuiteFileEntity.java b/src/main/java/com/android/vts/entity/TestSuiteFileEntity.java deleted file mode 100644 index c68f2ec..0000000 --- a/src/main/java/com/android/vts/entity/TestSuiteFileEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.Key; -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.nio.file.Path; -import java.nio.file.Paths; -import java.util.Date; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Entity Class for Suite Test File Info */ -@Cache -@Entity -@EqualsAndHashCode(of = "id") -@NoArgsConstructor -public class TestSuiteFileEntity implements DashboardEntity { - - /** Test Suite full file path field */ - @Id @Getter @Setter String filePath; - - /** Test Suite year field in the filePath */ - @Index @Getter @Setter int year; - - /** Test Suite month field in the filePath */ - @Index @Getter @Setter int month; - - /** Test Suite day field in the filePath */ - @Index @Getter @Setter int day; - - /** Test Suite file name field */ - @Index @Getter @Setter String fileName; - - /** When this record was created or updated */ - @Index @Getter Date updated; - - /** Construction function for TestSuiteResultEntity Class */ - public TestSuiteFileEntity(String filePath) { - this.filePath = filePath; - Path pathInfo = Paths.get(filePath); - if (pathInfo.getNameCount() > 3) { - this.year = Integer.valueOf(pathInfo.getName(1).toString()); - this.month = Integer.valueOf(pathInfo.getName(2).toString()); - this.day = Integer.valueOf(pathInfo.getName(3).toString()); - this.fileName = pathInfo.getFileName().toString(); - } - } - - /** Saving function for the instance of this class */ - @Override - public Key<TestSuiteFileEntity> save() { - this.updated = new Date(); - return ofy().save().entity(this).now(); - } -} diff --git a/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java b/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java deleted file mode 100644 index 95ba5c8..0000000 --- a/src/main/java/com/android/vts/entity/TestSuiteResultEntity.java +++ /dev/null @@ -1,555 +0,0 @@ -/* - * 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.google.common.base.Strings; -import com.googlecode.objectify.Key; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Entity; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Ignore; -import com.googlecode.objectify.annotation.Index; -import com.googlecode.objectify.annotation.Parent; -import java.util.logging.Level; -import java.util.logging.Logger; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.text.StrSubstitutor; -import org.apache.http.NameValuePair; -import org.apache.http.ParseException; -import org.apache.http.client.utils.URIUtils; -import org.apache.http.client.utils.URLEncodedUtils; -import org.apache.http.message.BasicNameValuePair; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.math.BigDecimal; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Embeded TestType Class for determining testType and search function */ -@Index -@NoArgsConstructor -class TestTypeIndex { - - /** Embeded TOT field, search field name "testTypeIndex.TOT" */ - private Boolean TOT; - - /** Embeded OTA field, search field name "testTypeIndex.OTA" */ - private Boolean OTA; - - /** Embeded SIGNED field, search field name "testTypeIndex.SIGNED" */ - private Boolean SIGNED; - - /** Maximum bit size */ - @Ignore private int bitSize = 6; - - @Ignore - private List<Integer> totTypeList = this.getTypeList(TestSuiteResultEntity.TestType.TOT.value); - - @Ignore - private List<Integer> otaTypeList = this.getTypeList(TestSuiteResultEntity.TestType.OTA.value); - - @Ignore - private List<Integer> signedTypeList = - this.getTypeList(TestSuiteResultEntity.TestType.SIGNED.value); - - /** Retrieving the list of integers for each category type */ - private List<Integer> getTypeList(int typeNum) { - return IntStream.range(0, (1 << (bitSize - 1))) - .filter(i -> (i & typeNum) > 0) - .boxed() - .collect(Collectors.toList()); - } - - public TestTypeIndex(int testType) { - if (totTypeList.contains(testType)) { - this.TOT = true; - } else { - this.TOT = false; - } - - if (otaTypeList.contains(testType)) { - this.OTA = true; - } else { - this.OTA = false; - } - - if (signedTypeList.contains(testType)) { - this.SIGNED = true; - } else { - this.SIGNED = false; - } - } -} - -/** Entity Class for saving Test Log Summary */ -@Cache -@Entity -@EqualsAndHashCode(of = "id") -@NoArgsConstructor -public class TestSuiteResultEntity implements DashboardEntity { - - private static final Logger logger = Logger.getLogger(TestSuiteResultEntity.class.getName()); - - /** Bug Tracking System Property class */ - private static Properties bugTrackingSystemProp = new Properties(); - - /** System Configuration Property class */ - private static Properties systemConfigProp = new Properties(); - - public enum TestType { - UNKNOWN(0), - TOT(1), - OTA(1 << 1), - SIGNED(1 << 2), - PRESUBMIT(1 << 3), - MANUAL(1 << 5); - - public int value; - - TestType(int value) { - this.value = value; - } - - public int value() { - return value; - } - } - - @Parent @Getter Key<TestSuiteFileEntity> testSuiteFileEntityKey; - - /** Test Suite start time field */ - @Id @Getter @Setter Long startTime; - - /** Test Suite end time field */ - @Getter @Setter Long endTime; - - /** Test Suite test type field */ - @Getter @Setter int testType; - - /** Embeded test type field */ - @Index @Getter @Setter TestTypeIndex testTypeIndex; - - /** Test Suite bootup error field */ - @Getter @Setter Boolean bootSuccess; - - /** Test Suite result path field */ - @Getter @Setter String resultPath; - - /** Test Suite infra log path field */ - @Getter @Setter String infraLogPath; - - /** Test Suite device name field */ - @Index @Getter @Setter String deviceName; - - /** Test Suite host name field */ - @Index @Getter @Setter String hostName; - - /** Test Suite plan field */ - @Index @Getter @Setter String suitePlan; - - /** Test Suite version field */ - @Getter @Setter String suiteVersion; - - /** Test Suite name field */ - @Getter @Setter String suiteName; - - /** Test Suite build number field */ - @Getter @Setter String suiteBuildNumber; - - /** Test Suite test finished module count field */ - @Getter @Setter int modulesDone; - - /** Test Suite total number of module field */ - @Getter @Setter int modulesTotal; - - /** Test Suite branch field */ - @Index @Getter @Setter String branch; - - /** Test Suite build target field */ - @Index @Getter @Setter String target; - - /** Test Suite build ID field */ - @Index @Getter @Setter String buildId; - - /** Test Suite system fingerprint field */ - @Getter @Setter String buildSystemFingerprint; - - /** Test Suite vendor fingerprint field */ - @Getter @Setter String buildVendorFingerprint; - - /** Test Suite test count for success field */ - @Index @Getter @Setter int passedTestCaseCount; - - /** Test Suite test count for failure field */ - @Index @Getter @Setter int failedTestCaseCount; - - /** Test Suite ratio of success to find candidate build */ - @Index @Getter @Setter float passedTestCaseRatio; - - /** When this record was created or updated */ - @Index @Getter Date updated; - - /** Construction function for TestSuiteResultEntity Class */ - public TestSuiteResultEntity( - Key<TestSuiteFileEntity> testSuiteFileEntityKey, - Long startTime, - Long endTime, - int testType, - Boolean bootSuccess, - String resultPath, - String infraLogPath, - String hostName, - String suitePlan, - String suiteVersion, - String suiteName, - String suiteBuildNumber, - int modulesDone, - int modulesTotal, - String branch, - String target, - String buildId, - String buildSystemFingerprint, - String buildVendorFingerprint, - int passedTestCaseCount, - int failedTestCaseCount) { - this.testSuiteFileEntityKey = testSuiteFileEntityKey; - this.startTime = startTime; - this.endTime = endTime; - this.bootSuccess = bootSuccess; - this.resultPath = resultPath; - this.infraLogPath = infraLogPath; - this.hostName = hostName; - this.suitePlan = suitePlan; - this.suiteVersion = suiteVersion; - this.suiteName = suiteName; - this.suiteBuildNumber = suiteBuildNumber; - this.modulesDone = modulesDone; - this.modulesTotal = modulesTotal; - this.branch = branch; - this.target = target; - this.buildId = buildId; - this.buildSystemFingerprint = buildSystemFingerprint; - this.buildVendorFingerprint = buildVendorFingerprint; - this.passedTestCaseCount = passedTestCaseCount; - this.failedTestCaseCount = failedTestCaseCount; - - BigDecimal totalTestCaseCount = new BigDecimal(passedTestCaseCount + failedTestCaseCount); - if (totalTestCaseCount.intValue() <= 0) { - this.passedTestCaseRatio = 0; - } else { - BigDecimal passedTestCaseCountDecimal = new BigDecimal(passedTestCaseCount); - BigDecimal result = - passedTestCaseCountDecimal.divide( - totalTestCaseCount, 10, BigDecimal.ROUND_FLOOR); - this.passedTestCaseRatio = result.floatValue() * 100; - } - - if (!this.buildVendorFingerprint.isEmpty()) { - this.deviceName = this.getDeviceNameFromVendorFpt(); - } - - this.testType = this.getSuiteResultTestType(testType); - this.testTypeIndex = new TestTypeIndex(this.testType); - } - - /** Saving function for the instance of this class */ - public void save(TestSuiteFileEntity newTestSuiteFileEntity) { - List<String> checkList = - Arrays.asList( - this.hostName, - this.suitePlan, - this.suiteName, - this.suiteBuildNumber, - this.branch, - this.target, - this.buildId); - boolean isAllTrue = checkList.stream().allMatch(val -> Strings.isNullOrEmpty(val)); - - if (isAllTrue) { - logger.log(Level.WARNING, "There is null or empty string among required fields!"); - } else { - this.updated = new Date(); - ofy().transact(() -> { - newTestSuiteFileEntity.save(); - ofy().save().entity(this).now(); - }); - } - } - - /** Saving function for the instance of this class */ - @Override - public Key<TestSuiteResultEntity> save() { - return ofy().save().entity(this).now(); - } - - public static void setPropertyValues(Properties newSystemConfigProp) { - systemConfigProp = newSystemConfigProp; - bugTrackingSystemProp = getBugTrackingSystemProp(newSystemConfigProp); - } - - private static Properties getBugTrackingSystemProp(Properties newSystemConfigProp) { - Properties newBugTrackingSystemProp = new Properties(); - try { - String bugTrackingSystem = newSystemConfigProp.getProperty("bug.tracking.system"); - - if (!bugTrackingSystem.isEmpty()) { - InputStream btsInputStream = - TestSuiteResultEntity.class - .getClassLoader() - .getResourceAsStream( - "bug_tracking_system/" - + bugTrackingSystem - + "/config.properties"); - newBugTrackingSystemProp.load(btsInputStream); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - return newBugTrackingSystemProp; - } - } - - public static List<TestSuiteResultEntity> getTestSuitePlans() { - return ofy().load() - .type(TestSuiteResultEntity.class) - .project("suitePlan") - .distinct(true) - .list(); - } - - public static List<TestSuiteResultEntity> getBranchDistinctList() { - return ofy().load() - .type(TestSuiteResultEntity.class) - .project("branch") - .distinct(true) - .list(); - } - - public static List<TestSuiteResultEntity> getBuildIdDistinctList() { - return ofy().load() - .type(TestSuiteResultEntity.class) - .project("buildId") - .distinct(true) - .list(); - } - - public static List<TestSuiteResultEntity> getTargetDistinctList() { - return ofy().load() - .type(TestSuiteResultEntity.class) - .project("target") - .distinct(true) - .list(); - } - - public static List<TestSuiteResultEntity> getHostNameDistinctList() { - return ofy().load() - .type(TestSuiteResultEntity.class) - .project("hostName") - .distinct(true) - .list(); - } - - public String getDeviceNameFromVendorFpt() { - String deviceName = - Stream.of(this.buildVendorFingerprint.split("/")).skip(1).findFirst().orElse(""); - return deviceName; - } - - public String getScreenResultLogPath() { - String gcsBucketName = systemConfigProp.getProperty("gcs.bucketName"); - return resultPath.replace("gs://" + gcsBucketName + "/", ""); - } - - public String getScreenInfraLogPath() { - String gcsInfraLogBucketName = systemConfigProp.getProperty("gcs.infraLogBucketName"); - return infraLogPath.replace("gs://" + gcsInfraLogBucketName + "/", ""); - } - - private String getNormalizedVersion(String fingerprint) { - Map<String, Pattern> partternMap = - new HashMap<String, Pattern>() { - { - put( - "9", - Pattern.compile( - "(:9(\\.\\d\\.\\d|\\.\\d|)|:P\\w*/)", - Pattern.CASE_INSENSITIVE)); - put( - "8.1", - Pattern.compile( - "(:8\\.1\\.\\d\\/|:O\\w+-MR1/)", Pattern.CASE_INSENSITIVE)); - put( - "8", - Pattern.compile( - "(:8\\.0\\.\\d\\/|:O\\w*/)", Pattern.CASE_INSENSITIVE)); - } - }; - - for (Map.Entry<String, Pattern> entry : partternMap.entrySet()) { - Matcher systemMatcher = entry.getValue().matcher(fingerprint); - if (systemMatcher.find()) { - return entry.getKey(); - } - } - return "unknown-version"; - } - - public int getSuiteResultTestType(int testType) { - if (testType == TestType.UNKNOWN.value()) { - if (this.getNormalizedVersion(this.buildSystemFingerprint) - != this.getNormalizedVersion(this.buildVendorFingerprint)) { - return TestType.OTA.value(); - } else if (this.buildVendorFingerprint.endsWith("release-keys")) { - return TestType.SIGNED.value(); - } else { - return TestType.TOT.value(); - } - } else { - return testType; - } - } - - private String getLabInfraIssueDescription() throws IOException { - - String bugTrackingSystem = systemConfigProp.getProperty("bug.tracking.system"); - - String templateName = - bugTrackingSystemProp.getProperty( - bugTrackingSystem + ".labInfraIssue.template.name"); - - InputStream inputStream = - this.getClass() - .getClassLoader() - .getResourceAsStream( - "bug_tracking_system/" + bugTrackingSystem + "/" + templateName); - - String templateDescription = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name()); - - Map<String, String> valuesMap = new HashMap<>(); - valuesMap.put("suiteBuildNumber", suiteBuildNumber); - valuesMap.put("buildId", buildId); - valuesMap.put("modulesDone", Integer.toString(modulesDone)); - valuesMap.put("modulesTotal", Integer.toString(modulesTotal)); - valuesMap.put("hostName", hostName); - valuesMap.put("resultPath", resultPath); - valuesMap.put("buildVendorFingerprint", buildVendorFingerprint); - valuesMap.put("buildSystemFingerprint", buildSystemFingerprint); - - StrSubstitutor sub = new StrSubstitutor(valuesMap); - String resolvedDescription = sub.replace(templateDescription); - - return resolvedDescription; - } - - private String getCrashSecurityDescription() throws IOException { - - String bugTrackingSystem = systemConfigProp.getProperty("bug.tracking.system"); - - String templateName = - bugTrackingSystemProp.getProperty( - bugTrackingSystem + ".crashSecurity.template.name"); - - InputStream inputStream = - this.getClass() - .getClassLoader() - .getResourceAsStream( - "bug_tracking_system/" + bugTrackingSystem + "/" + templateName); - - String templateDescription = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name()); - - Map<String, String> valuesMap = new HashMap<>(); - valuesMap.put("suiteBuildNumber", suiteBuildNumber); - valuesMap.put("branch", branch); - valuesMap.put("target", target); - valuesMap.put("deviceName", deviceName); - valuesMap.put("buildId", buildId); - valuesMap.put("suiteName", suiteName); - valuesMap.put("suitePlan", suitePlan); - valuesMap.put("hostName", hostName); - valuesMap.put("resultPath", resultPath); - - StrSubstitutor sub = new StrSubstitutor(valuesMap); - String resolvedDescription = sub.replace(templateDescription); - - return resolvedDescription; - } - - public String getBuganizerLink() throws IOException, ParseException, URISyntaxException { - - String bugTrackingSystem = systemConfigProp.getProperty("bug.tracking.system"); - - List<NameValuePair> qparams = new ArrayList<NameValuePair>(); - if (!this.bootSuccess || (this.passedTestCaseCount == 0 && this.failedTestCaseCount == 0)) { - qparams.add( - new BasicNameValuePair( - "component", - this.bugTrackingSystemProp.getProperty( - bugTrackingSystem + ".labInfraIssue.component.id"))); - qparams.add( - new BasicNameValuePair( - "template", - this.bugTrackingSystemProp.getProperty( - bugTrackingSystem + ".labInfraIssue.template.id"))); - qparams.add(new BasicNameValuePair("description", this.getLabInfraIssueDescription())); - } else { - qparams.add( - new BasicNameValuePair( - "component", - this.bugTrackingSystemProp.getProperty( - bugTrackingSystem + ".crashSecurity.component.id"))); - qparams.add( - new BasicNameValuePair( - "template", - this.bugTrackingSystemProp.getProperty( - bugTrackingSystem + ".crashSecurity.template.id"))); - qparams.add(new BasicNameValuePair("description", this.getCrashSecurityDescription())); - } - - URI uri = - URIUtils.createURI( - this.bugTrackingSystemProp.getProperty(bugTrackingSystem + ".uri.scheme"), - this.bugTrackingSystemProp.getProperty(bugTrackingSystem + ".uri.host"), - -1, - this.bugTrackingSystemProp.getProperty(bugTrackingSystem + ".uri.path"), - URLEncodedUtils.format(qparams, StandardCharsets.UTF_8.name()), - null); - return uri.toString(); - } -} diff --git a/src/main/java/com/android/vts/entity/UserEntity.java b/src/main/java/com/android/vts/entity/UserEntity.java deleted file mode 100644 index 43b5edd..0000000 --- a/src/main/java/com/android/vts/entity/UserEntity.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * 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.Key; -import com.googlecode.objectify.Ref; -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 com.googlecode.objectify.annotation.Load; -import java.util.ArrayList; -import java.util.List; -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 User */ -@Cache -@Entity -@EqualsAndHashCode(of = "email") -@NoArgsConstructor -public class UserEntity implements DashboardEntity { - - /** User email field */ - @Id @Getter @Setter String email; - - /** User name field */ - @Getter @Setter String name; - - /** User name field */ - @Getter @Setter String company; - - /** User enable or disable field */ - @Index @Getter @Setter Boolean enable; - - /** User admin flag field */ - @Index @Getter @Setter Boolean isAdmin; - - /** When this record was created or updated */ - @Index @Getter Date updated; - - @Load - @Getter - List<Ref<RoleEntity>> roles = new ArrayList<>(); - - /** Constructor function for UserEntity Class */ - public UserEntity( - String email, - String name, - String company, - String roleName) { - - this.email = email; - this.name = name; - this.enable = true; - this.isAdmin = false; - this.company = company; - RoleEntity roleEntity = RoleEntity.getRole(roleName); - this.roles.add(Ref.create(roleEntity)); - } - - /** Saving function for the instance of this class */ - @Override - public Key<UserEntity> save() { - this.updated = new Date(); - return ofy().save().entity(this).now(); - } - - /** Get admin user list by admin email */ - public static UserEntity getAdminUser(String adminEmail) { - Key key = Key.create(UserEntity.class, adminEmail); - return ofy().load() - .type(UserEntity.class) - .filterKey(key) - .filter("enable", true) - .filter("isAdmin", true) - .first() - .now(); - } - - /** Get all admin user list */ - public static List<UserEntity> getAdminUserList() { - return ofy().load() - .type(UserEntity.class) - .filter("enable", true) - .filter("isAdmin", true) - .list(); - } - - /** Get normal user list */ - public static List<UserEntity> getUserList() { - return ofy().load() - .type(UserEntity.class) - .filter("enable", true) - .filter("isAdmin", false) - .list(); - } - - /** Get user by email */ - public static UserEntity getUser(String email) { - Key key = Key.create(UserEntity.class, email); - return ofy().load() - .type(UserEntity.class) - .filterKey(key) - .filter("enable", true) - .first() - .now(); - } -} diff --git a/src/main/java/com/android/vts/entity/UserFavoriteEntity.java b/src/main/java/com/android/vts/entity/UserFavoriteEntity.java deleted file mode 100644 index 2548042..0000000 --- a/src/main/java/com/android/vts/entity/UserFavoriteEntity.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.users.User; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Ignore; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.util.logging.Level; -import java.util.logging.Logger; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -@Cache -@com.googlecode.objectify.annotation.Entity(name = "UserFavorite") -@EqualsAndHashCode(of = "email") -@NoArgsConstructor -/** Entity describing subscriptions between a user and a test. */ -public class UserFavoriteEntity implements DashboardEntity { - protected static final Logger logger = Logger.getLogger(UserFavoriteEntity.class.getName()); - - public static final String KIND = "UserFavorite"; - - // Property keys - public static final String USER = "user"; - public static final String TEST_KEY = "testKey"; - public static final String MUTE_NOTIFICATIONS = "muteNotifications"; - - @Ignore private Key key = null; - - @Ignore public User user = null; - - @Ignore public Key testKey = null; - - @Getter @Setter private com.googlecode.objectify.Key<TestEntity> test; - - @Getter @Setter private String userEmail; - - @Getter @Setter public boolean muteNotifications; - - /** - * Create a user favorite relationship. - * - * @param key The key of the entity in the database. - * @param user The User object for the subscribing user. - * @param testKey The key of the TestEntity object describing the test. - * @param muteNotifications True if the subscriber has muted notifications, false otherwise. - */ - private UserFavoriteEntity(Key key, User user, Key testKey, boolean muteNotifications) { - this.key = key; - this.user = user; - this.testKey = testKey; - this.muteNotifications = muteNotifications; - } - - /** - * Create a user favorite relationship. - * - * @param user The User object for the subscribing user. - * @param testKey The key of the TestEntity object describing the test. - * @param muteNotifications True if the subscriber has muted notifications, false otherwise. - */ - public UserFavoriteEntity(User user, Key testKey, boolean muteNotifications) { - this(null, user, testKey, muteNotifications); - } - - /** Saving function for the instance of this class */ - @Override - public com.googlecode.objectify.Key<UserFavoriteEntity> save() { - return ofy().save().entity(this).now(); - } - - public Entity toEntity() { - Entity favoriteEntity; - if (this.key != null) { - favoriteEntity = new Entity(key); - } else { - favoriteEntity = new Entity(KIND); - } - favoriteEntity.setProperty(USER, this.user); - favoriteEntity.setProperty(TEST_KEY, this.testKey); - favoriteEntity.setProperty(MUTE_NOTIFICATIONS, this.muteNotifications); - return favoriteEntity; - } - - /** - * Convert an Entity object to a UserFavoriteEntity. - * - * @param e The entity to process. - * @return UserFavoriteEntity object with the properties from e, or null if incompatible. - */ - public static UserFavoriteEntity fromEntity(Entity e) { - if (!e.getKind().equals(KIND) || !e.hasProperty(USER) || !e.hasProperty(TEST_KEY)) { - logger.log( - Level.WARNING, "Missing user favorite attributes in entity: " + e.toString()); - return null; - } - try { - User user = (User) e.getProperty(USER); - Key testKey = (Key) e.getProperty(TEST_KEY); - boolean muteNotifications = false; - if (e.hasProperty(MUTE_NOTIFICATIONS)) { - muteNotifications = (boolean) e.getProperty(MUTE_NOTIFICATIONS); - } - return new UserFavoriteEntity(e.getKey(), user, testKey, muteNotifications); - } catch (ClassCastException exception) { - // Invalid cast - logger.log(Level.WARNING, "Error parsing user favorite entity.", exception); - } - return null; - } -} diff --git a/src/main/java/com/android/vts/job/BaseJobServlet.java b/src/main/java/com/android/vts/job/BaseJobServlet.java deleted file mode 100644 index 18a1d24..0000000 --- a/src/main/java/com/android/vts/job/BaseJobServlet.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.job; - - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import java.util.Properties; - -/** - * An abstract class to be subclassed to create Job Servlet - */ -public abstract class BaseJobServlet extends HttpServlet { - - /** - * System Configuration Property class - */ - protected static Properties systemConfigProp = new Properties(); - - /** - * This variable is for maximum number of entities per transaction You can find the detail here - * (https://cloud.google.com/datastore/docs/concepts/limits) - */ - protected int MAX_ENTITY_SIZE_PER_TRANSACTION = 300; - - @Override - public void init(ServletConfig cfg) throws ServletException { - super.init(cfg); - - systemConfigProp = - Properties.class.cast(cfg.getServletContext().getAttribute("systemConfigProp")); - - this.MAX_ENTITY_SIZE_PER_TRANSACTION = - Integer.parseInt(systemConfigProp.getProperty("datastore.maxEntitySize")); - } -} diff --git a/src/main/java/com/android/vts/job/VtsAlertJobServlet.java b/src/main/java/com/android/vts/job/VtsAlertJobServlet.java deleted file mode 100644 index be23982..0000000 --- a/src/main/java/com/android/vts/job/VtsAlertJobServlet.java +++ /dev/null @@ -1,582 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.job; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestAcknowledgmentEntity; -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestCaseRunEntity.TestCase; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.entity.TestStatusEntity; -import com.android.vts.entity.TestStatusEntity.TestCaseReference; -import com.android.vts.proto.VtsReportMessage.TestCaseResult; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.EmailHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.TimeUtil; -import com.google.appengine.api.datastore.DatastoreFailureException; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.DatastoreTimeoutException; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.FetchOptions; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.SortDirection; -import com.google.appengine.api.datastore.Transaction; -import com.google.appengine.api.taskqueue.Queue; -import com.google.appengine.api.taskqueue.QueueFactory; -import com.google.appengine.api.taskqueue.TaskOptions; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.ConcurrentModificationException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.apache.commons.lang.StringUtils; - -/** Represents the notifications service which is automatically called on a fixed schedule. */ -public class VtsAlertJobServlet extends BaseJobServlet { - private static final String ALERT_JOB_URL = "/task/vts_alert_job"; - protected static final Logger logger = Logger.getLogger(VtsAlertJobServlet.class.getName()); - protected static final int MAX_RUN_COUNT = 1000; // maximum number of runs to query for - - /** - * Process the current test case failures for a test. - * - * @param status The TestStatusEntity object for the test. - * @returns a map from test case name to the test case run ID for which the test case failed. - */ - private static Map<String, TestCase> getCurrentFailures(TestStatusEntity status) { - if (status.getFailingTestCases() == null || status.getFailingTestCases().size() == 0) { - return new HashMap<>(); - } - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Map<String, TestCase> failingTestcases = new HashMap<>(); - Set<Key> gets = new HashSet<>(); - for (TestCaseReference testCaseRef : status.getFailingTestCases()) { - gets.add(KeyFactory.createKey(TestCaseRunEntity.KIND, testCaseRef.parentId)); - } - if (gets.size() == 0) { - return failingTestcases; - } - Map<Key, Entity> testCaseMap = datastore.get(gets); - - for (TestCaseReference testCaseRef : status.getFailingTestCases()) { - Key key = KeyFactory.createKey(TestCaseRunEntity.KIND, testCaseRef.parentId); - if (!testCaseMap.containsKey(key)) { - continue; - } - Entity testCaseRun = testCaseMap.get(key); - TestCaseRunEntity testCaseRunEntity = TestCaseRunEntity.fromEntity(testCaseRun); - if (testCaseRunEntity.testCases.size() <= testCaseRef.offset) { - continue; - } - TestCase testCase = testCaseRunEntity.testCases.get(testCaseRef.offset); - failingTestcases.put(testCase.name, testCase); - } - return failingTestcases; - } - - /** - * Get the test acknowledgments for a test key. - * - * @param testKey The key to the test whose acknowledgments to fetch. - * @return A list of test acknowledgments. - */ - private static List<TestAcknowledgmentEntity> getTestCaseAcknowledgments(Key testKey) { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - List<TestAcknowledgmentEntity> acks = new ArrayList<>(); - Filter testFilter = - new Query.FilterPredicate( - TestAcknowledgmentEntity.TEST_KEY, Query.FilterOperator.EQUAL, testKey); - Query q = new Query(TestAcknowledgmentEntity.KIND).setFilter(testFilter); - - for (Entity ackEntity : datastore.prepare(q).asIterable()) { - TestAcknowledgmentEntity ack = TestAcknowledgmentEntity.fromEntity(ackEntity); - if (ack == null) continue; - acks.add(ack); - } - return acks; - } - - /** - * Get the test runs for the test in the specified time window. - * - * <p>If the start and end time delta is greater than one day, the query will be truncated. - * - * @param testKey The key to the test whose runs to query. - * @param startTime The start time for the query. - * @param endTime The end time for the query. - * @return A list of test runs in the specified time window. - */ - private static List<TestRunEntity> getTestRuns(Key testKey, long startTime, long endTime) { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Filter testTypeFilter = FilterUtil.getTestTypeFilter(false, true, false); - long delta = endTime - startTime; - delta = Math.min(delta, TimeUnit.DAYS.toMicros(1)); - Filter runFilter = - FilterUtil.getTimeFilter( - testKey, TestRunEntity.KIND, endTime - delta + 1, endTime, testTypeFilter); - - Query q = - new Query(TestRunEntity.KIND) - .setAncestor(testKey) - .setFilter(runFilter) - .addSort(Entity.KEY_RESERVED_PROPERTY, SortDirection.DESCENDING); - - List<TestRunEntity> testRuns = new ArrayList<>(); - for (Entity testRunEntity : - datastore.prepare(q).asIterable(FetchOptions.Builder.withLimit(MAX_RUN_COUNT))) { - TestRunEntity testRun = TestRunEntity.fromEntity(testRunEntity); - if (testRun == null) continue; - testRuns.add(testRun); - } - return testRuns; - } - - /** - * Separate the test cases which are acknowledged by the provided acknowledgments. - * - * @param testCases The list of test case names. - * @param devices The list of devices for a test run. - * @param acks The list of acknowledgments for the test. - * @return A list of acknowledged test case names that have been removed from the input test - * cases. - */ - public static Set<String> separateAcknowledged( - Set<String> testCases, - List<DeviceInfoEntity> devices, - List<TestAcknowledgmentEntity> acks) { - Set<String> acknowledged = new HashSet<>(); - for (TestAcknowledgmentEntity ack : acks) { - boolean allDevices = ack.getDevices() == null || ack.getDevices().size() == 0; - boolean allBranches = ack.getBranches() == null || ack.getBranches().size() == 0; - boolean isRelevant = allDevices && allBranches; - - // Determine if the acknowledgment is relevant to the devices. - if (!isRelevant) { - for (DeviceInfoEntity device : devices) { - boolean deviceAcknowledged = - allDevices || ack.getDevices().contains(device.getBuildFlavor()); - boolean branchAcknowledged = - allBranches || ack.getBranches().contains(device.getBranch()); - if (deviceAcknowledged && branchAcknowledged) isRelevant = true; - } - } - - if (isRelevant) { - // Separate the test cases - boolean allTestCases = - ack.getTestCaseNames() == null || ack.getTestCaseNames().size() == 0; - if (allTestCases) { - acknowledged.addAll(testCases); - testCases.removeAll(acknowledged); - } else { - for (String testCase : ack.getTestCaseNames()) { - if (testCases.contains(testCase)) { - acknowledged.add(testCase); - testCases.remove(testCase); - } - } - } - } - } - return acknowledged; - } - - /** - * Checks whether any new failures have occurred beginning since (and including) startTime. - * - * @param testRuns The list of test runs for which to update the status. - * @param link The string URL linking to the test's status table. - * @param failedTestCaseMap The map of test case names to TestCase for those failing in the last - * status update. - * @param emailAddresses The list of email addresses to send notifications to. - * @param messages The email Message queue. - * @returns latest TestStatusMessage or null if no update is available. - * @throws IOException - */ - public TestStatusEntity getTestStatus( - List<TestRunEntity> testRuns, - String link, - Map<String, TestCase> failedTestCaseMap, - List<TestAcknowledgmentEntity> testAcks, - List<String> emailAddresses, - List<Message> messages) - throws IOException { - if (testRuns.size() == 0) return null; - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - TestRunEntity mostRecentRun = null; - Map<String, TestCaseResult> mostRecentTestCaseResults = new HashMap<>(); - Map<String, TestCase> testCaseBreakageMap = new HashMap<>(); - int passingTestcaseCount = 0; - List<TestCaseReference> failingTestCases = new ArrayList<>(); - Set<String> fixedTestcases = new HashSet<>(); - Set<String> newTestcaseFailures = new HashSet<>(); - Set<String> continuedTestcaseFailures = new HashSet<>(); - Set<String> skippedTestcaseFailures = new HashSet<>(); - Set<String> transientTestcaseFailures = new HashSet<>(); - - for (TestRunEntity testRun : testRuns) { - if (mostRecentRun == null) { - mostRecentRun = testRun; - } - List<Key> testCaseKeys = new ArrayList<>(); - for (long testCaseId : testRun.getTestCaseIds()) { - testCaseKeys.add(KeyFactory.createKey(TestCaseRunEntity.KIND, testCaseId)); - } - Map<Key, Entity> entityMap = datastore.get(testCaseKeys); - for (Key testCaseKey : testCaseKeys) { - if (!entityMap.containsKey(testCaseKey)) { - logger.log(Level.WARNING, "Test case entity missing: " + testCaseKey); - continue; - } - Entity testCaseRun = entityMap.get(testCaseKey); - TestCaseRunEntity testCaseRunEntity = TestCaseRunEntity.fromEntity(testCaseRun); - if (testCaseRunEntity == null) { - logger.log(Level.WARNING, "Invalid test case run: " + testCaseRun.getKey()); - continue; - } - for (TestCase testCase : testCaseRunEntity.testCases) { - String testCaseName = testCase.name; - TestCaseResult result = TestCaseResult.valueOf(testCase.result); - - if (mostRecentRun == testRun) { - mostRecentTestCaseResults.put(testCaseName, result); - } else { - if (!mostRecentTestCaseResults.containsKey(testCaseName)) { - // Deprecate notifications for tests that are not present on newer runs - continue; - } - TestCaseResult mostRecentRes = mostRecentTestCaseResults.get(testCaseName); - if (mostRecentRes == TestCaseResult.TEST_CASE_RESULT_SKIP) { - mostRecentTestCaseResults.put(testCaseName, result); - } else if (mostRecentRes == TestCaseResult.TEST_CASE_RESULT_PASS) { - // Test is passing now, witnessed a transient failure - if (result != TestCaseResult.TEST_CASE_RESULT_PASS - && result != TestCaseResult.TEST_CASE_RESULT_SKIP) { - transientTestcaseFailures.add(testCaseName); - } - } - } - - // Record test case breakages - if (result != TestCaseResult.TEST_CASE_RESULT_PASS - && result != TestCaseResult.TEST_CASE_RESULT_SKIP) { - testCaseBreakageMap.put(testCaseName, testCase); - } - } - } - } - - Set<String> buildIdList = new HashSet<>(); - List<DeviceInfoEntity> devices = new ArrayList<>(); - Query deviceQuery = new Query(DeviceInfoEntity.KIND).setAncestor(mostRecentRun.getKey()); - for (Entity device : datastore.prepare(deviceQuery).asIterable()) { - DeviceInfoEntity deviceEntity = DeviceInfoEntity.fromEntity(device); - if (deviceEntity == null) { - continue; - } - buildIdList.add(deviceEntity.getBuildId()); - devices.add(deviceEntity); - } - String footer = EmailHelper.getEmailFooter(mostRecentRun, devices, link); - String buildId = StringUtils.join(buildIdList, ","); - - for (String testCaseName : mostRecentTestCaseResults.keySet()) { - TestCaseResult mostRecentResult = mostRecentTestCaseResults.get(testCaseName); - boolean previouslyFailed = failedTestCaseMap.containsKey(testCaseName); - if (mostRecentResult == TestCaseResult.TEST_CASE_RESULT_SKIP) { - // persist previous status - if (previouslyFailed) { - skippedTestcaseFailures.add(testCaseName); - failingTestCases.add( - new TestCaseReference(failedTestCaseMap.get(testCaseName))); - } else { - ++passingTestcaseCount; - } - } else if (mostRecentResult == TestCaseResult.TEST_CASE_RESULT_PASS) { - ++passingTestcaseCount; - if (previouslyFailed && !transientTestcaseFailures.contains(testCaseName)) { - fixedTestcases.add(testCaseName); - } - } else { - if (!previouslyFailed) { - newTestcaseFailures.add(testCaseName); - failingTestCases.add( - new TestCaseReference(testCaseBreakageMap.get(testCaseName))); - } else { - continuedTestcaseFailures.add(testCaseName); - failingTestCases.add( - new TestCaseReference(failedTestCaseMap.get(testCaseName))); - } - } - } - - Set<String> acknowledgedFailures = - separateAcknowledged(newTestcaseFailures, devices, testAcks); - acknowledgedFailures.addAll( - separateAcknowledged(transientTestcaseFailures, devices, testAcks)); - acknowledgedFailures.addAll( - separateAcknowledged(continuedTestcaseFailures, devices, testAcks)); - - String summary = new String(); - if (newTestcaseFailures.size() + continuedTestcaseFailures.size() > 0) { - summary += "The following test cases failed in the latest test run:<br>"; - - // Add new test case failures to top of summary in bold font. - List<String> sortedNewTestcaseFailures = new ArrayList<>(newTestcaseFailures); - sortedNewTestcaseFailures.sort(Comparator.naturalOrder()); - for (String testcaseName : sortedNewTestcaseFailures) { - summary += "- " + "<b>" + testcaseName + "</b><br>"; - } - - // Add continued test case failures to summary. - List<String> sortedContinuedTestcaseFailures = - new ArrayList<>(continuedTestcaseFailures); - sortedContinuedTestcaseFailures.sort(Comparator.naturalOrder()); - for (String testcaseName : sortedContinuedTestcaseFailures) { - summary += "- " + testcaseName + "<br>"; - } - } - if (fixedTestcases.size() > 0) { - // Add fixed test cases to summary. - summary += "<br><br>The following test cases were fixed in the latest test run:<br>"; - List<String> sortedFixedTestcases = new ArrayList<>(fixedTestcases); - sortedFixedTestcases.sort(Comparator.naturalOrder()); - for (String testcaseName : sortedFixedTestcases) { - summary += "- <i>" + testcaseName + "</i><br>"; - } - } - if (transientTestcaseFailures.size() > 0) { - // Add transient test case failures to summary. - summary += "<br><br>The following transient test case failures occured:<br>"; - List<String> sortedTransientTestcaseFailures = - new ArrayList<>(transientTestcaseFailures); - sortedTransientTestcaseFailures.sort(Comparator.naturalOrder()); - for (String testcaseName : sortedTransientTestcaseFailures) { - summary += "- " + testcaseName + "<br>"; - } - } - if (skippedTestcaseFailures.size() > 0) { - // Add skipped test case failures to summary. - summary += "<br><br>The following test cases have not been run since failing:<br>"; - List<String> sortedSkippedTestcaseFailures = new ArrayList<>(skippedTestcaseFailures); - sortedSkippedTestcaseFailures.sort(Comparator.naturalOrder()); - for (String testcaseName : sortedSkippedTestcaseFailures) { - summary += "- " + testcaseName + "<br>"; - } - } - if (acknowledgedFailures.size() > 0) { - // Add acknowledged test case failures to summary. - List<String> sortedAcknowledgedFailures = new ArrayList<>(acknowledgedFailures); - sortedAcknowledgedFailures.sort(Comparator.naturalOrder()); - if (acknowledgedFailures.size() > 0) { - summary += - "<br><br>The following acknowledged test case failures continued to fail:<br>"; - for (String testcaseName : sortedAcknowledgedFailures) { - summary += "- " + testcaseName + "<br>"; - } - } - } - - String testName = mostRecentRun.getKey().getParent().getName(); - String uploadDateString = TimeUtil.getDateString(mostRecentRun.getStartTimestamp()); - String subject = "VTS Test Alert: " + testName + " @ " + uploadDateString; - if (newTestcaseFailures.size() > 0) { - String body = - "Hello,<br><br>New test case failure(s) in " - + testName - + " for device build ID(s): " - + buildId - + ".<br><br>" - + summary - + footer; - try { - messages.add(EmailHelper.composeEmail(emailAddresses, subject, body)); - } catch (MessagingException | UnsupportedEncodingException e) { - logger.log(Level.WARNING, "Error composing email : ", e); - } - } else if (continuedTestcaseFailures.size() > 0) { - String body = - "Hello,<br><br>Continuous test case failure(s) in " - + testName - + " for device build ID(s): " - + buildId - + ".<br><br>" - + summary - + footer; - try { - messages.add(EmailHelper.composeEmail(emailAddresses, subject, body)); - } catch (MessagingException | UnsupportedEncodingException e) { - logger.log(Level.WARNING, "Error composing email : ", e); - } - } else if (transientTestcaseFailures.size() > 0) { - String body = - "Hello,<br><br>Transient test case failure(s) in " - + testName - + " but tests all " - + "are passing in the latest device build(s): " - + buildId - + ".<br><br>" - + summary - + footer; - try { - messages.add(EmailHelper.composeEmail(emailAddresses, subject, body)); - } catch (MessagingException | UnsupportedEncodingException e) { - logger.log(Level.WARNING, "Error composing email : ", e); - } - } else if (fixedTestcases.size() > 0) { - String body = - "Hello,<br><br>All test cases passed in " - + testName - + " for device build ID(s): " - + buildId - + "!<br><br>" - + summary - + footer; - try { - messages.add(EmailHelper.composeEmail(emailAddresses, subject, body)); - } catch (MessagingException | UnsupportedEncodingException e) { - logger.log(Level.WARNING, "Error composing email : ", e); - } - } - return new TestStatusEntity( - testName, - mostRecentRun.getStartTimestamp(), - passingTestcaseCount, - failingTestCases.size(), - failingTestCases); - } - - /** - * Add a task to process test run data - * - * @param testRunKey The key of the test run whose data process. - */ - public static void addTask(Key testRunKey) { - Queue queue = QueueFactory.getDefaultQueue(); - String keyString = KeyFactory.keyToString(testRunKey); - queue.add( - TaskOptions.Builder.withUrl(ALERT_JOB_URL) - .param("runKey", keyString) - .method(TaskOptions.Method.POST)); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - String runKeyString = request.getParameter("runKey"); - - Key testRunKey; - try { - testRunKey = KeyFactory.stringToKey(runKeyString); - } catch (IllegalArgumentException e) { - logger.log(Level.WARNING, "Invalid key specified: " + runKeyString); - return; - } - String testName = testRunKey.getParent().getName(); - - TestStatusEntity status = null; - Key statusKey = KeyFactory.createKey(TestStatusEntity.KIND, testName); - try { - status = TestStatusEntity.fromEntity(datastore.get(statusKey)); - } catch (EntityNotFoundException e) { - // no existing status - } - if (status == null) { - status = new TestStatusEntity(testName); - } - if (status.getUpdatedTimestamp() >= testRunKey.getId()) { - // Another job has already updated the status first - return; - } - List<String> emails = EmailHelper.getSubscriberEmails(testRunKey.getParent()); - - StringBuffer fullUrl = request.getRequestURL(); - String baseUrl = fullUrl.substring(0, fullUrl.indexOf(request.getRequestURI())); - String link = - baseUrl + "/show_tree?testName=" + testName + "&endTime=" + testRunKey.getId(); - - List<Message> messageQueue = new ArrayList<>(); - Map<String, TestCase> failedTestcaseMap = getCurrentFailures(status); - List<TestAcknowledgmentEntity> testAcks = - getTestCaseAcknowledgments(testRunKey.getParent()); - List<TestRunEntity> testRuns = - getTestRuns( - testRunKey.getParent(), status.getUpdatedTimestamp(), testRunKey.getId()); - if (testRuns.size() == 0) return; - - TestStatusEntity newStatus = - getTestStatus(testRuns, link, failedTestcaseMap, testAcks, emails, messageQueue); - if (newStatus == null) { - // No changes to status - return; - } - - int retries = 0; - while (true) { - Transaction txn = datastore.beginTransaction(); - try { - try { - status = TestStatusEntity.fromEntity(datastore.get(statusKey)); - } catch (EntityNotFoundException e) { - // no status left - } - if (status == null - || status.getUpdatedTimestamp() >= newStatus.getUpdatedTimestamp()) { - txn.rollback(); - } else { // This update is most recent. - datastore.put(newStatus.toEntity()); - txn.commit(); - EmailHelper.sendAll(messageQueue); - } - break; - } catch (ConcurrentModificationException - | DatastoreFailureException - | DatastoreTimeoutException e) { - logger.log(Level.WARNING, "Retrying alert job insert: " + statusKey); - if (retries++ >= DatastoreHelper.MAX_WRITE_RETRIES) { - logger.log(Level.SEVERE, "Exceeded alert job retries: " + statusKey); - throw e; - } - } finally { - if (txn.isActive()) { - txn.rollback(); - } - } - } - } -} diff --git a/src/main/java/com/android/vts/job/VtsCoverageAlertJobServlet.java b/src/main/java/com/android/vts/job/VtsCoverageAlertJobServlet.java deleted file mode 100644 index b5453b7..0000000 --- a/src/main/java/com/android/vts/job/VtsCoverageAlertJobServlet.java +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.job; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -import com.android.vts.entity.CodeCoverageEntity; -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestCoverageStatusEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.util.EmailHelper; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.taskqueue.Queue; -import com.google.appengine.api.taskqueue.QueueFactory; -import com.google.appengine.api.taskqueue.TaskOptions; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.math.RoundingMode; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.apache.commons.lang.StringUtils; - -/** - * Coverage notification job. - */ -public class VtsCoverageAlertJobServlet extends BaseJobServlet { - - private static final String COVERAGE_ALERT_URL = "/task/vts_coverage_job"; - protected static final Logger logger = - Logger.getLogger(VtsCoverageAlertJobServlet.class.getName()); - protected static final double CHANGE_ALERT_THRESHOLD = 0.05; - protected static final double GOOD_THRESHOLD = 0.7; - protected static final double BAD_THRESHOLD = 0.3; - - protected static final DecimalFormat FORMATTER; - - /** Initialize the decimal formatter. */ - static { - FORMATTER = new DecimalFormat("#.#"); - FORMATTER.setRoundingMode(RoundingMode.HALF_UP); - } - - /** - * Gets a new coverage status and adds notification emails to the messages list. - * - * Send an email to notify subscribers in the event that a test goes up or down by more than 5%, - * becomes higher or lower than 70%, or becomes higher or lower than 30%. - * - * @param status The TestCoverageStatusEntity object for the test. - * @param testRunKey The key for TestRunEntity whose data to process and reflect in the state. - * @param link The string URL linking to the test's status table. - * @param emailAddresses The list of email addresses to send notifications to. - * @param messages The email Message queue. - * @returns TestCoverageStatusEntity or null if no update is available. - */ - public static TestCoverageStatusEntity getTestCoverageStatus( - TestCoverageStatusEntity status, - Key testRunKey, - String link, - List<String> emailAddresses, - List<Message> messages) - throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - String testName = status.getTestName(); - - double previousPct; - double coveragePct; - if (status == null || status.getTotalLineCount() <= 0 || status.getCoveredLineCount() < 0) { - previousPct = 0; - } else { - previousPct = ((double) status.getCoveredLineCount()) / status.getTotalLineCount(); - } - - Entity testRun; - try { - testRun = datastore.get(testRunKey); - } catch (EntityNotFoundException e) { - logger.log(Level.WARNING, "Test run not found: " + testRunKey); - return null; - } - - TestRunEntity testRunEntity = TestRunEntity.fromEntity(testRun); - if (testRunEntity == null || !testRunEntity.getHasCodeCoverage()) { - return null; - } - CodeCoverageEntity codeCoverageEntity = testRunEntity.getCodeCoverageEntity(); - - if (codeCoverageEntity.getTotalLineCount() <= 0 - || codeCoverageEntity.getCoveredLineCount() < 0) { - coveragePct = 0; - } else { - coveragePct = - ((double) codeCoverageEntity.getCoveredLineCount()) - / codeCoverageEntity.getTotalLineCount(); - } - - Set<String> buildIdList = new HashSet<>(); - Query deviceQuery = new Query(DeviceInfoEntity.KIND).setAncestor(testRun.getKey()); - List<DeviceInfoEntity> devices = new ArrayList<>(); - for (Entity device : datastore.prepare(deviceQuery).asIterable()) { - DeviceInfoEntity deviceEntity = DeviceInfoEntity.fromEntity(device); - if (deviceEntity == null) { - continue; - } - devices.add(deviceEntity); - buildIdList.add(deviceEntity.getBuildId()); - } - String deviceBuild = StringUtils.join(buildIdList, ", "); - String footer = EmailHelper.getEmailFooter(testRunEntity, devices, link); - - String subject = null; - String body = null; - String subjectSuffix = " @ " + deviceBuild; - if (coveragePct >= GOOD_THRESHOLD && previousPct < GOOD_THRESHOLD) { - // Coverage entered the good zone - subject = - "Congratulations! " - + testName - + " has exceeded " - + FORMATTER.format(GOOD_THRESHOLD * 100) - + "% coverage" - + subjectSuffix; - body = - "Hello,<br><br>The " - + testName - + " has achieved " - + FORMATTER.format(coveragePct * 100) - + "% code coverage on device build ID(s): " - + deviceBuild - + "." - + footer; - } else if (coveragePct < GOOD_THRESHOLD && previousPct >= GOOD_THRESHOLD) { - // Coverage dropped out of the good zone - subject = - "Warning! " - + testName - + " has dropped below " - + FORMATTER.format(GOOD_THRESHOLD * 100) - + "% coverage" - + subjectSuffix; - ; - body = - "Hello,<br><br>The test " - + testName - + " has dropped to " - + FORMATTER.format(coveragePct * 100) - + "% code coverage on device build ID(s): " - + deviceBuild - + "." - + footer; - } else if (coveragePct <= BAD_THRESHOLD && previousPct > BAD_THRESHOLD) { - // Coverage entered into the bad zone - subject = - "Warning! " - + testName - + " has dropped below " - + FORMATTER.format(BAD_THRESHOLD * 100) - + "% coverage" - + subjectSuffix; - body = - "Hello,<br><br>The test " - + testName - + " has dropped to " - + FORMATTER.format(coveragePct * 100) - + "% code coverage on device build ID(s): " - + deviceBuild - + "." - + footer; - } else if (coveragePct > BAD_THRESHOLD && previousPct <= BAD_THRESHOLD) { - // Coverage emerged from the bad zone - subject = - "Congratulations! " - + testName - + " has exceeded " - + FORMATTER.format(BAD_THRESHOLD * 100) - + "% coverage" - + subjectSuffix; - body = - "Hello,<br><br>The test " - + testName - + " has achived " - + FORMATTER.format(coveragePct * 100) - + "% code coverage on device build ID(s): " - + deviceBuild - + "." - + footer; - } else if (coveragePct - previousPct < -CHANGE_ALERT_THRESHOLD) { - // Send a coverage drop alert - subject = - "Warning! " - + testName - + "'s code coverage has decreased by more than " - + FORMATTER.format(CHANGE_ALERT_THRESHOLD * 100) - + "%" - + subjectSuffix; - body = - "Hello,<br><br>The test " - + testName - + " has dropped from " - + FORMATTER.format(previousPct * 100) - + "% code coverage to " - + FORMATTER.format(coveragePct * 100) - + "% code coverage on device build ID(s): " - + deviceBuild - + "." - + footer; - } else if (coveragePct - previousPct > CHANGE_ALERT_THRESHOLD) { - // Send a coverage improvement alert - subject = - testName - + "'s code coverage has increased by more than " - + FORMATTER.format(CHANGE_ALERT_THRESHOLD * 100) - + "%" - + subjectSuffix; - body = - "Hello,<br><br>The test " - + testName - + " has increased from " - + FORMATTER.format(previousPct * 100) - + "% code coverage to " - + FORMATTER.format(coveragePct * 100) - + "% code coverage on device build ID(s): " - + deviceBuild - + "." - + footer; - } - if (subject != null && body != null) { - try { - messages.add(EmailHelper.composeEmail(emailAddresses, subject, body)); - } catch (MessagingException | UnsupportedEncodingException e) { - logger.log(Level.WARNING, "Error composing email : ", e); - } - } - return new TestCoverageStatusEntity( - testName, - testRunEntity.getStartTimestamp(), - codeCoverageEntity.getCoveredLineCount(), - codeCoverageEntity.getTotalLineCount(), - devices.size() > 0 ? devices.get(0).getId() : 0); - } - - /** - * Add a task to process coverage data - * - * @param testRunKey The key of the test run whose data process. - */ - public static void addTask(Key testRunKey) { - Queue queue = QueueFactory.getDefaultQueue(); - String keyString = KeyFactory.keyToString(testRunKey); - queue.add( - TaskOptions.Builder.withUrl(COVERAGE_ALERT_URL) - .param("runKey", keyString) - .method(TaskOptions.Method.POST)); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - String runKeyString = request.getParameter("runKey"); - - Key testRunKey; - try { - testRunKey = KeyFactory.stringToKey(runKeyString); - } catch (IllegalArgumentException e) { - logger.log(Level.WARNING, "Invalid key specified: " + runKeyString); - return; - } - String testName = testRunKey.getParent().getName(); - - TestCoverageStatusEntity status = ofy().load().type(TestCoverageStatusEntity.class).id(testName) - .now(); - if (status == null) { - status = new TestCoverageStatusEntity(testName, 0, -1, -1, 0); - } - - StringBuffer fullUrl = request.getRequestURL(); - String baseUrl = fullUrl.substring(0, fullUrl.indexOf(request.getRequestURI())); - String link = baseUrl + "/show_tree?testName=" + testName; - TestCoverageStatusEntity newStatus; - List<Message> messageQueue = new ArrayList<>(); - try { - List<String> emails = EmailHelper.getSubscriberEmails(testRunKey.getParent()); - newStatus = getTestCoverageStatus(status, testRunKey, link, emails, messageQueue); - } catch (IOException e) { - logger.log(Level.SEVERE, e.toString()); - return; - } - - if (newStatus == null) { - return; - } else { - if (status == null || status.getUpdatedTimestamp() < newStatus.getUpdatedTimestamp()) { - newStatus.save(); - EmailHelper.sendAll(messageQueue); - } - } - } -} diff --git a/src/main/java/com/android/vts/job/VtsInactivityJobServlet.java b/src/main/java/com/android/vts/job/VtsInactivityJobServlet.java deleted file mode 100644 index 031cdbb..0000000 --- a/src/main/java/com/android/vts/job/VtsInactivityJobServlet.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.job; - -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.entity.TestStatusEntity; -import com.android.vts.util.EmailHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.TaskQueueHelper; -import com.android.vts.util.TimeUtil; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.FetchOptions; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.SortDirection; -import com.google.appengine.api.taskqueue.Queue; -import com.google.appengine.api.taskqueue.QueueFactory; -import com.google.appengine.api.taskqueue.TaskOptions; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Test inactivity notification job. */ -public class VtsInactivityJobServlet extends BaseJobServlet { - private static final String INACTIVITY_ALERT_URL = "/cron/vts_inactivity_job"; - protected static final Logger logger = - Logger.getLogger(VtsInactivityJobServlet.class.getName()); - - /** - * Compose an email if the test is inactive. - * - * @param test The TestStatusEntity document storing the test status. - * @param lastRunTime The timestamp in microseconds of the last test run for this test. - * @param link Fully specified link to the test's status page. - * @param emails The list of email addresses to send the email. - * @param messages The message list in which to insert the inactivity notification email. - * @return True if the test is inactive, false otherwise. - */ - private static boolean notifyIfInactive( - TestStatusEntity test, - long lastRunTime, - String link, - List<String> emails, - List<Message> messages) { - long now = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - long diff = now - lastRunTime; - // Send an email daily to notify that the test hasn't been running. - // After 7 full days have passed, notifications will no longer be sent (i.e. the - // test is assumed to be deprecated). - if (diff >= TimeUnit.DAYS.toMicros(1) && diff < TimeUnit.DAYS.toMicros(8)) { - String uploadTimeString = TimeUtil.getDateTimeZoneString(lastRunTime); - String subject = "Warning! Inactive test: " + test.getTestName(); - String body = - "Hello,<br><br>Test \"" - + test.getTestName() - + "\" is inactive. " - + "No new data has been uploaded since " - + uploadTimeString - + "." - + EmailHelper.getEmailFooter(null, null, link); - try { - messages.add(EmailHelper.composeEmail(emails, subject, body)); - return true; - } catch (MessagingException | UnsupportedEncodingException e) { - logger.log(Level.WARNING, "Error composing email : ", e); - } - } - return false; - } - - /** - * Get the timestamp for the last test run for the specified test. - * - * @param testKey The parent key of the test runs to query for. - * @return The timestamp in microseconds of the last test run for the test, or -1 if none. - */ - private static long getLastRunTime(Key testKey) { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Filter testTypeFilter = FilterUtil.getTestTypeFilter(false, true, false); - Query q = - new Query(TestRunEntity.KIND) - .setAncestor(testKey) - .setFilter(testTypeFilter) - .addSort(Entity.KEY_RESERVED_PROPERTY, SortDirection.DESCENDING) - .setKeysOnly(); - - long lastTestRun = -1; - for (Entity testRun : datastore.prepare(q).asIterable(FetchOptions.Builder.withLimit(1))) { - lastTestRun = testRun.getKey().getId(); - } - return lastTestRun; - } - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Queue queue = QueueFactory.getDefaultQueue(); - Query q = new Query(TestStatusEntity.KIND).setKeysOnly(); - List<TaskOptions> tasks = new ArrayList<>(); - for (Entity status : datastore.prepare(q).asIterable()) { - TaskOptions task = - TaskOptions.Builder.withUrl(INACTIVITY_ALERT_URL) - .param("statusKey", KeyFactory.keyToString(status.getKey())) - .method(TaskOptions.Method.POST); - tasks.add(task); - } - TaskQueueHelper.addToQueue(queue, tasks); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - String statusKeyString = request.getParameter("statusKey"); - - Key statusKey; - try { - statusKey = KeyFactory.stringToKey(statusKeyString); - } catch (IllegalArgumentException e) { - logger.log(Level.WARNING, "Invalid key specified: " + statusKeyString); - return; - } - - TestStatusEntity status = null; - try { - status = TestStatusEntity.fromEntity(datastore.get(statusKey)); - } catch (EntityNotFoundException e) { - // no existing status - } - if (status == null) { - return; - } - Key testKey = KeyFactory.createKey(TestEntity.KIND, status.getTestName()); - long lastRunTime = getLastRunTime(testKey); - - StringBuffer fullUrl = request.getRequestURL(); - String baseUrl = fullUrl.substring(0, fullUrl.indexOf(request.getRequestURI())); - String link = baseUrl + "/show_tree?testName=" + status.getTestName(); - - List<Message> messageQueue = new ArrayList<>(); - List<String> emails; - try { - emails = EmailHelper.getSubscriberEmails(testKey); - } catch (IOException e) { - logger.log(Level.SEVERE, e.toString()); - return; - } - notifyIfInactive(status, lastRunTime, link, emails, messageQueue); - if (messageQueue.size() > 0) { - EmailHelper.sendAll(messageQueue); - } - } -} diff --git a/src/main/java/com/android/vts/job/VtsPerformanceJobServlet.java b/src/main/java/com/android/vts/job/VtsPerformanceJobServlet.java deleted file mode 100644 index ebd5294..0000000 --- a/src/main/java/com/android/vts/job/VtsPerformanceJobServlet.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.job; - -import com.android.vts.entity.TestEntity; -import com.android.vts.util.EmailHelper; -import com.android.vts.util.PerformanceSummary; -import com.android.vts.util.PerformanceUtil; -import com.android.vts.util.ProfilingPointSummary; -import com.android.vts.util.StatSummary; -import com.android.vts.util.TaskQueueHelper; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.taskqueue.Queue; -import com.google.appengine.api.taskqueue.QueueFactory; -import com.google.appengine.api.taskqueue.TaskOptions; -import java.io.IOException; -import java.math.RoundingMode; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Represents the notifications service which is automatically called on a fixed schedule. */ -public class VtsPerformanceJobServlet extends BaseJobServlet { - protected static final Logger logger = - Logger.getLogger(VtsPerformanceJobServlet.class.getName()); - - private static final String PERFORMANCE_JOB_URL = "/cron/vts_performance_job"; - private static final String MEAN = "Mean"; - private static final String MAX = "Max"; - private static final String MIN = "Min"; - private static final String MIN_DELTA = "ΔMin (%)"; - private static final String MAX_DELTA = "ΔMax (%)"; - private static final String HIGHER_IS_BETTER = - "Note: Higher values are better. Maximum is the best-case performance."; - private static final String LOWER_IS_BETTER = - "Note: Lower values are better. Minimum is the best-case performance."; - private static final String STD = "Std"; - private static final String SUBJECT_PREFIX = "Daily Performance Digest: "; - private static final String LAST_WEEK = "Last Week"; - private static final String LABEL_STYLE = "font-family: arial"; - private static final String SUBTEXT_STYLE = "font-family: arial; font-size: 12px"; - private static final String TABLE_STYLE = - "width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;"; - private static final String SECTION_LABEL_STYLE = - "border: 1px solid black; border-bottom: none; background-color: lightgray;"; - private static final String COL_LABEL_STYLE = - "border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;"; - private static final String HEADER_COL_STYLE = - "border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;"; - private static final String INNER_CELL_STYLE = - "border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;"; - private static final String OUTER_CELL_STYLE = - "border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;"; - - private static final DecimalFormat FORMATTER; - - /** Initialize the decimal formatter. */ - static { - FORMATTER = new DecimalFormat("#.##"); - FORMATTER.setRoundingMode(RoundingMode.HALF_UP); - } - - /** - * Generates an HTML summary of the performance changes for the profiling results in the - * specified table. - * - * <p>Retrieves the past 24 hours of profiling data and compares it to the 24 hours that - * preceded it. Creates a table representation of the mean and standard deviation for each - * profiling point. When performance degrades, the cell is shaded red. - * - * @param testName The name of the test whose profiling data to summarize. - * @param perfSummaries List of PerformanceSummary objects for each profiling run (in reverse - * chronological order). - * @param labels List of string labels for use as the column headers. - * @returns An HTML string containing labeled table summaries. - */ - public static String getPerformanceSummary( - String testName, List<PerformanceSummary> perfSummaries, List<String> labels) { - if (perfSummaries.size() == 0) return ""; - PerformanceSummary now = perfSummaries.get(0); - String tableHTML = "<p style='" + LABEL_STYLE + "'><b>"; - tableHTML += testName + "</b></p>"; - for (String profilingPoint : now.getProfilingPointNames()) { - ProfilingPointSummary summary = now.getProfilingPointSummary(profilingPoint); - tableHTML += "<table cellpadding='2' style='" + TABLE_STYLE + "'>"; - - // Format header rows - String[] headerRows = new String[] {profilingPoint, summary.yLabel}; - int colspan = labels.size() * 4; - for (String content : headerRows) { - tableHTML += "<tr><td colspan='" + colspan + "'>" + content + "</td></tr>"; - } - - // Format section labels - tableHTML += "<tr>"; - for (int i = 0; i < labels.size(); i++) { - String content = labels.get(i); - tableHTML += "<th style='" + SECTION_LABEL_STYLE + "' "; - if (i == 0) tableHTML += "colspan='1'"; - else if (i == 1) tableHTML += "colspan='3'"; - else tableHTML += "colspan='4'"; - tableHTML += ">" + content + "</th>"; - } - tableHTML += "</tr>"; - - String deltaString; - String bestCaseString; - String subtext; - switch (now.getProfilingPointSummary(profilingPoint).getRegressionMode()) { - case VTS_REGRESSION_MODE_DECREASING: - deltaString = MAX_DELTA; - bestCaseString = MAX; - subtext = HIGHER_IS_BETTER; - break; - default: - deltaString = MIN_DELTA; - bestCaseString = MIN; - subtext = LOWER_IS_BETTER; - break; - } - - // Format column labels - tableHTML += "<tr>"; - for (int i = 0; i < labels.size(); i++) { - if (i > 1) { - tableHTML += "<th style='" + COL_LABEL_STYLE + "'>" + deltaString + "</th>"; - } - if (i == 0) { - tableHTML += "<th style='" + COL_LABEL_STYLE + "'>"; - tableHTML += summary.xLabel + "</th>"; - } else if (i > 0) { - tableHTML += "<th style='" + COL_LABEL_STYLE + "'>" + bestCaseString + "</th>"; - tableHTML += "<th style='" + COL_LABEL_STYLE + "'>" + MEAN + "</th>"; - tableHTML += "<th style='" + COL_LABEL_STYLE + "'>" + STD + "</th>"; - } - } - tableHTML += "</tr>"; - - // Populate data cells - for (StatSummary stats : summary) { - String label = stats.getLabel(); - tableHTML += "<tr><td style='" + HEADER_COL_STYLE + "'>" + label; - tableHTML += "</td><td style='" + INNER_CELL_STYLE + "'>"; - tableHTML += FORMATTER.format(stats.getBestCase()) + "</td>"; - tableHTML += "<td style='" + INNER_CELL_STYLE + "'>"; - tableHTML += FORMATTER.format(stats.getMean()) + "</td>"; - tableHTML += "<td style='" + OUTER_CELL_STYLE + "'>"; - if (stats.getCount() < 2) { - tableHTML += " - </td>"; - } else { - tableHTML += FORMATTER.format(stats.getStd()) + "</td>"; - } - for (int i = 1; i < perfSummaries.size(); i++) { - PerformanceSummary oldPerfSummary = perfSummaries.get(i); - if (oldPerfSummary.hasProfilingPoint(profilingPoint)) { - StatSummary baseline = - oldPerfSummary - .getProfilingPointSummary(profilingPoint) - .getStatSummary(label); - tableHTML += - PerformanceUtil.getBestCasePerformanceComparisonHTML( - baseline, - stats, - "", - "", - INNER_CELL_STYLE, - OUTER_CELL_STYLE); - } else tableHTML += "<td></td><td></td><td></td><td></td>"; - } - tableHTML += "</tr>"; - } - tableHTML += "</table>"; - tableHTML += "<i style='" + SUBTEXT_STYLE + "'>" + subtext + "</i><br><br>"; - } - return tableHTML; - } - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Queue queue = QueueFactory.getDefaultQueue(); - Query q = new Query(TestEntity.KIND).setKeysOnly(); - List<TaskOptions> tasks = new ArrayList<>(); - for (Entity test : datastore.prepare(q).asIterable()) { - if (test.getKey().getName() == null) { - continue; - } - TaskOptions task = - TaskOptions.Builder.withUrl(PERFORMANCE_JOB_URL) - .param("testKey", KeyFactory.keyToString(test.getKey())) - .method(TaskOptions.Method.POST); - tasks.add(task); - } - TaskQueueHelper.addToQueue(queue, tasks); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - String testKeyString = request.getParameter("testKey"); - Key testKey; - try { - testKey = KeyFactory.stringToKey(testKeyString); - } catch (IllegalArgumentException e) { - logger.log(Level.WARNING, "Invalid key specified: " + testKeyString); - return; - } - - long nowMicro = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - - // Add today to the list of time intervals to analyze - List<PerformanceSummary> summaries = new ArrayList<>(); - PerformanceSummary today = - new PerformanceSummary(nowMicro - TimeUnit.DAYS.toMicros(1), nowMicro); - summaries.add(today); - - // Add yesterday as a baseline time interval for analysis - long oneDayAgo = nowMicro - TimeUnit.DAYS.toMicros(1); - PerformanceSummary yesterday = - new PerformanceSummary(oneDayAgo - TimeUnit.DAYS.toMicros(1), oneDayAgo); - summaries.add(yesterday); - - // Add last week as a baseline time interval for analysis - long oneWeek = TimeUnit.DAYS.toMicros(7); - long oneWeekAgo = nowMicro - oneWeek; - - String spanString = "<span class='date-label'>"; - String label = - spanString + TimeUnit.MICROSECONDS.toMillis(oneWeekAgo - oneWeek) + "</span>"; - label += " - " + spanString + TimeUnit.MICROSECONDS.toMillis(oneWeekAgo) + "</span>"; - PerformanceSummary lastWeek = - new PerformanceSummary(oneWeekAgo - oneWeek, oneWeekAgo, label); - summaries.add(lastWeek); - PerformanceUtil.updatePerformanceSummary( - testKey.getName(), oneWeekAgo - oneWeek, nowMicro, null, summaries); - - List<PerformanceSummary> nonEmptySummaries = new ArrayList<>(); - List<String> labels = new ArrayList<>(); - labels.add(""); - for (PerformanceSummary perfSummary : summaries) { - if (perfSummary.size() == 0) continue; - nonEmptySummaries.add(perfSummary); - labels.add(perfSummary.label); - } - String body = getPerformanceSummary(testKey.getName(), nonEmptySummaries, labels); - if (body == null || body.equals("")) { - return; - } - List<String> emails = EmailHelper.getSubscriberEmails(testKey); - if (emails.size() == 0) { - return; - } - String subject = SUBJECT_PREFIX + testKey.getName(); - EmailHelper.send(emails, subject, body); - } -} diff --git a/src/main/java/com/android/vts/job/VtsProfilingStatsJobServlet.java b/src/main/java/com/android/vts/job/VtsProfilingStatsJobServlet.java deleted file mode 100644 index 50f72e1..0000000 --- a/src/main/java/com/android/vts/job/VtsProfilingStatsJobServlet.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (C) 2017 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.job; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.PerformanceUtil; -import com.android.vts.util.TaskQueueHelper; -import com.android.vts.util.TimeUtil; -import com.google.appengine.api.datastore.DatastoreFailureException; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.DatastoreTimeoutException; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Transaction; -import com.google.appengine.api.taskqueue.Queue; -import com.google.appengine.api.taskqueue.QueueFactory; -import com.google.appengine.api.taskqueue.TaskOptions; -import java.io.IOException; -import java.time.Instant; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.ConcurrentModificationException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Represents the notifications service which is automatically called on a fixed schedule. */ -public class VtsProfilingStatsJobServlet extends BaseJobServlet { - protected static final Logger logger = - Logger.getLogger(VtsProfilingStatsJobServlet.class.getName()); - private static final String HIDL_HAL_OPTION = "hidl_hal_mode"; - private static final String[] splitKeysArray = new String[] {HIDL_HAL_OPTION}; - private static final Set<String> splitKeySet = new HashSet<>(Arrays.asList(splitKeysArray)); - - public static final String PROFILING_STATS_JOB_URL = "/task/vts_profiling_stats_job"; - public static final String PROFILING_POINT_KEY = "profilingPointKey"; - public static final String QUEUE = "profilingStatsQueue"; - - /** - * Round the date down to the start of the day (PST). - * - * @param time The time in microseconds. - * @return - */ - public static long getCanonicalTime(long time) { - long timeMillis = TimeUnit.MICROSECONDS.toMillis(time); - ZonedDateTime zdt = - ZonedDateTime.ofInstant(Instant.ofEpochMilli(timeMillis), TimeUtil.PT_ZONE); - return TimeUnit.SECONDS.toMicros( - zdt.withHour(0).withMinute(0).withSecond(0).toEpochSecond()); - } - - /** - * Add tasks to process profiling run data - * - * @param profilingPointKeys The list of keys of the profiling point runs whose data process. - */ - public static void addTasks(List<Key> profilingPointKeys) { - Queue queue = QueueFactory.getQueue(QUEUE); - List<TaskOptions> tasks = new ArrayList<>(); - for (Key key : profilingPointKeys) { - String keyString = KeyFactory.keyToString(key); - tasks.add( - TaskOptions.Builder.withUrl(PROFILING_STATS_JOB_URL) - .param(PROFILING_POINT_KEY, keyString) - .method(TaskOptions.Method.POST)); - } - TaskQueueHelper.addToQueue(queue, tasks); - } - - /** - * Update the profiling summaries with the information from a profiling point run. - * - * @param testKey The key to the TestEntity whose profiling data to analyze. - * @param profilingPointRun The profiling data to analyze. - * @param devices The list of devices used in the profiling run. - * @param time The canonical timestamp of the summary to update. - * @return true if the update succeeds, false otherwise. - */ - public static boolean updateSummaries( - Key testKey, - ProfilingPointRunEntity profilingPointRun, - List<DeviceInfoEntity> devices, - long time) { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Transaction tx = datastore.beginTransaction(); - try { - List<Entity> puts = new ArrayList<>(); - - ProfilingPointEntity profilingPoint = - new ProfilingPointEntity( - testKey.getName(), - profilingPointRun.getName(), - profilingPointRun.getType(), - profilingPointRun.getRegressionMode(), - profilingPointRun.getXLabel(), - profilingPointRun.getYLabel()); - puts.add(profilingPoint.toEntity()); - - String option = PerformanceUtil.getOptionAlias(profilingPointRun, splitKeySet); - - Set<String> branches = new HashSet<>(); - Set<String> deviceNames = new HashSet<>(); - - branches.add(ProfilingPointSummaryEntity.ALL); - deviceNames.add(ProfilingPointSummaryEntity.ALL); - - for (DeviceInfoEntity d : devices) { - branches.add(d.getBranch()); - deviceNames.add(d.getBuildFlavor()); - } - - List<Key> summaryGets = new ArrayList<>(); - for (String branch : branches) { - for (String device : deviceNames) { - summaryGets.add( - ProfilingPointSummaryEntity.createKey( - profilingPoint.getKey(), branch, device, option, time)); - } - } - - Map<Key, Entity> summaries = datastore.get(tx, summaryGets); - Map<String, Map<String, ProfilingPointSummaryEntity>> summaryMap = new HashMap<>(); - for (Key key : summaries.keySet()) { - Entity e = summaries.get(key); - ProfilingPointSummaryEntity profilingPointSummary = - ProfilingPointSummaryEntity.fromEntity(e); - if (profilingPointSummary == null) { - logger.log(Level.WARNING, "Invalid profiling point summary: " + e.getKey()); - continue; - } - if (!summaryMap.containsKey(profilingPointSummary.getBranch())) { - summaryMap.put(profilingPointSummary.getBranch(), new HashMap<>()); - } - Map<String, ProfilingPointSummaryEntity> deviceMap = - summaryMap.get(profilingPointSummary.getBranch()); - deviceMap.put(profilingPointSummary.getBuildFlavor(), profilingPointSummary); - } - - Set<ProfilingPointSummaryEntity> modifiedEntities = new HashSet<>(); - - for (String branch : branches) { - if (!summaryMap.containsKey(branch)) { - summaryMap.put(branch, new HashMap<>()); - } - Map<String, ProfilingPointSummaryEntity> deviceMap = summaryMap.get(branch); - - for (String device : deviceNames) { - ProfilingPointSummaryEntity summary; - if (deviceMap.containsKey(device)) { - summary = deviceMap.get(device); - } else { - summary = - new ProfilingPointSummaryEntity( - profilingPoint.getKey(), branch, device, option, time); - deviceMap.put(device, summary); - } - summary.update(profilingPointRun); - modifiedEntities.add(summary); - } - } - - for (ProfilingPointSummaryEntity profilingPointSummary : modifiedEntities) { - puts.add(profilingPointSummary.toEntity()); - } - datastore.put(tx, puts); - tx.commit(); - } catch (ConcurrentModificationException - | DatastoreFailureException - | DatastoreTimeoutException e) { - return false; - } finally { - if (tx.isActive()) { - tx.rollback(); - logger.log( - Level.WARNING, - "Profiling stats job transaction still active: " - + profilingPointRun.getKey()); - return false; - } - } - return true; - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - String profilingPointKeyString = request.getParameter(PROFILING_POINT_KEY); - - Key profilingPointRunKey; - try { - profilingPointRunKey = KeyFactory.stringToKey(profilingPointKeyString); - } catch (IllegalArgumentException e) { - logger.log(Level.WARNING, "Invalid key specified: " + profilingPointKeyString); - return; - } - Key testKey = profilingPointRunKey.getParent().getParent(); - - ProfilingPointRunEntity profilingPointRun = null; - try { - Entity profilingPointRunEntity = datastore.get(profilingPointRunKey); - profilingPointRun = ProfilingPointRunEntity.fromEntity(profilingPointRunEntity); - } catch (EntityNotFoundException e) { - // no run found - } - if (profilingPointRun == null) { - return; - } - - Query deviceQuery = - new Query(DeviceInfoEntity.KIND).setAncestor(profilingPointRunKey.getParent()); - - List<DeviceInfoEntity> devices = new ArrayList<>(); - for (Entity e : datastore.prepare(deviceQuery).asIterable()) { - DeviceInfoEntity deviceInfoEntity = DeviceInfoEntity.fromEntity(e); - if (e == null) continue; - devices.add(deviceInfoEntity); - } - - long canonicalTime = getCanonicalTime(profilingPointRunKey.getParent().getId()); - int retryCount = 0; - while (retryCount++ <= DatastoreHelper.MAX_WRITE_RETRIES) { - boolean result = updateSummaries(testKey, profilingPointRun, devices, canonicalTime); - if (!result) { - logger.log( - Level.WARNING, "Retrying profiling stats update: " + profilingPointRunKey); - continue; - } - break; - } - if (retryCount > DatastoreHelper.MAX_WRITE_RETRIES) { - logger.log(Level.SEVERE, "Could not update profiling stats: " + profilingPointRunKey); - } - } -} diff --git a/src/main/java/com/android/vts/job/VtsSpreadSheetSyncServlet.java b/src/main/java/com/android/vts/job/VtsSpreadSheetSyncServlet.java deleted file mode 100644 index 45726d9..0000000 --- a/src/main/java/com/android/vts/job/VtsSpreadSheetSyncServlet.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * 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.job; - -import com.android.vts.entity.ApiCoverageExcludedEntity; -import com.android.vts.entity.DashboardEntity; -import com.google.api.client.auth.oauth2.Credential; -import com.google.api.client.extensions.appengine.datastore.AppEngineDataStoreFactory; -import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; -import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; -import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; -import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; -import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; -import com.google.api.client.http.javanet.NetHttpTransport; -import com.google.api.client.json.JsonFactory; -import com.google.api.client.json.jackson2.JacksonFactory; -import com.google.api.services.sheets.v4.Sheets; -import com.google.api.services.sheets.v4.model.ValueRange; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.security.GeneralSecurityException; -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** Job to sync excluded API data in google spreadsheet with datastore's entity. */ -public class VtsSpreadSheetSyncServlet extends BaseJobServlet { - - protected static final Logger logger = - Logger.getLogger(VtsSpreadSheetSyncServlet.class.getName()); - - private static final String APPLICATION_NAME = "VTS Dashboard"; - private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); - - private String CREDENTIALS_KEY_FILE = ""; - - /** GoogleClientSecrets for GoogleAuthorizationCodeFlow Builder */ - private GoogleClientSecrets clientSecrets; - - /** This is the ID of google spreadsheet. */ - private String SPREAD_SHEET_ID = ""; - - /** This is the range to read of google spreadsheet. */ - private String SPREAD_SHEET_RANGE = ""; - - @Override - public void init(ServletConfig servletConfig) throws ServletException { - super.init(servletConfig); - - try { - CREDENTIALS_KEY_FILE = systemConfigProp.getProperty("api.coverage.keyFile"); - SPREAD_SHEET_ID = systemConfigProp.getProperty("api.coverage.spreadSheetId"); - SPREAD_SHEET_RANGE = systemConfigProp.getProperty("api.coverage.spreadSheetRange"); - - InputStream keyFileInputStream = - this.getClass() - .getClassLoader() - .getResourceAsStream("keys/" + CREDENTIALS_KEY_FILE); - InputStreamReader keyFileStreamReader = new InputStreamReader(keyFileInputStream); - - this.clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, keyFileStreamReader); - } catch (IOException ioe) { - logger.log(Level.SEVERE, ioe.getMessage()); - } catch (Exception exception) { - logger.log(Level.SEVERE, exception.getMessage()); - } - } - - /** - * Creates an authorized Credential object. - * - * @param HTTP_TRANSPORT The network HTTP Transport. - * @param appEngineDataStoreFactory The credential will be persisted using the Google App Engine - * Data Store API. - * @param SCOPES Scopes are strings that enable access to particular resources, such as user - * data. - * @return An authorized Credential object. - * @throws IOException If the credentials.json file cannot be found. - */ - private Credential getCredentials( - final NetHttpTransport HTTP_TRANSPORT, - final AppEngineDataStoreFactory appEngineDataStoreFactory, - final List<String> SCOPES) - throws IOException { - - // Build flow and trigger user authorization request. - GoogleAuthorizationCodeFlow flow = - new GoogleAuthorizationCodeFlow.Builder( - HTTP_TRANSPORT, JSON_FACTORY, this.clientSecrets, SCOPES) - .setDataStoreFactory(appEngineDataStoreFactory) - .setAccessType("offline") - .build(); - LocalServerReceiver localServerReceiver = new LocalServerReceiver(); - return new AuthorizationCodeInstalledApp(flow, localServerReceiver).authorize("user"); - } - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - - try { - // Build a new authorized API client service. - final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); - final AppEngineDataStoreFactory appEngineDataStoreFactory = - (AppEngineDataStoreFactory) - request.getServletContext().getAttribute("dataStoreFactory"); - final List<String> googleApiScopes = - (List<String>) request.getServletContext().getAttribute("googleApiScopes"); - - Sheets service = - new Sheets.Builder( - HTTP_TRANSPORT, - JSON_FACTORY, - getCredentials( - HTTP_TRANSPORT, - appEngineDataStoreFactory, - googleApiScopes)) - .setApplicationName(APPLICATION_NAME) - .build(); - - ValueRange valueRange = - service.spreadsheets() - .values() - .get(SPREAD_SHEET_ID, SPREAD_SHEET_RANGE) - .execute(); - - List<ApiCoverageExcludedEntity> apiCoverageExcludedEntities = new ArrayList<>(); - List<List<Object>> values = valueRange.getValues(); - if (values == null || values.isEmpty()) { - logger.log(Level.WARNING, "No data found in google spreadsheet."); - } else { - for (List row : values) { - ApiCoverageExcludedEntity apiCoverageExcludedEntity = - new ApiCoverageExcludedEntity( - row.get(0).toString(), - row.get(1).toString(), - row.get(2).toString(), - row.get(3).toString(), - row.get(4).toString()); - apiCoverageExcludedEntities.add(apiCoverageExcludedEntity); - } - } - - DashboardEntity.saveAll(apiCoverageExcludedEntities, MAX_ENTITY_SIZE_PER_TRANSACTION); - - } catch (GeneralSecurityException gse) { - logger.log(Level.SEVERE, gse.getMessage()); - } - } -} diff --git a/src/main/java/com/android/vts/job/VtsSuiteTestJobServlet.java b/src/main/java/com/android/vts/job/VtsSuiteTestJobServlet.java deleted file mode 100644 index 2aa34e4..0000000 --- a/src/main/java/com/android/vts/job/VtsSuiteTestJobServlet.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.job; - -import com.android.vts.entity.TestSuiteFileEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.android.vts.proto.TestSuiteResultMessageProto; -import com.android.vts.util.GcsHelper; -import com.android.vts.util.TaskQueueHelper; -import com.android.vts.util.TimeUtil; -import com.google.appengine.api.memcache.ErrorHandlers; -import com.google.appengine.api.memcache.MemcacheService; -import com.google.appengine.api.memcache.MemcacheServiceFactory; -import com.google.appengine.api.taskqueue.Queue; -import com.google.appengine.api.taskqueue.QueueFactory; -import com.google.appengine.api.taskqueue.TaskOptions; -import com.google.cloud.storage.Blob; -import com.google.cloud.storage.Bucket; -import com.google.cloud.storage.Storage; -import com.googlecode.objectify.Key; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.FileSystems; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Suite Test result file processing job. */ -public class VtsSuiteTestJobServlet extends BaseJobServlet { - - private static final String SUITE_TEST_URL = "/cron/test_suite_report_gcs_monitor"; - - private static final String SERVICE_NAME = "VTS Dashboard"; - - private final Logger logger = Logger.getLogger(this.getClass().getName()); - - /** Google Cloud Storage project's key file to access the storage */ - private static String GCS_KEY_FILE; - /** Google Cloud Storage project's default bucket name for vtslab log files */ - private static String GCS_BUCKET_NAME; - /** Google Cloud Storage project's default directory name for suite test result files */ - private static String GCS_SUITE_TEST_FOLDER_NAME; - - public static final String QUEUE = "suiteTestQueue"; - - /** - * This is the key file to access vtslab-gcs project. It will allow the dashboard to have a full - * control of the bucket. - */ - private InputStream keyFileInputStream; - - /** This is the instance of java google storage library */ - private Storage storage; - - /** This is the instance of App Engine memcache service java library */ - private MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService(); - - @Override - public void init(ServletConfig servletConfig) throws ServletException { - super.init(servletConfig); - - GCS_KEY_FILE = systemConfigProp.getProperty("gcs.keyFile"); - GCS_BUCKET_NAME = systemConfigProp.getProperty("gcs.bucketName"); - GCS_SUITE_TEST_FOLDER_NAME = systemConfigProp.getProperty("gcs.suiteTestFolderName"); - - this.keyFileInputStream = - this.getClass().getClassLoader().getResourceAsStream("keys/" + GCS_KEY_FILE); - - Optional<Storage> optionalStorage = GcsHelper.getStorage(this.keyFileInputStream); - if (optionalStorage.isPresent()) { - this.storage = optionalStorage.get(); - } else { - logger.log(Level.SEVERE, "Error on getting storage instance!"); - throw new ServletException("Creating storage instance exception!"); - } - syncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO)); - } - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - - List<String> dateStringList = new ArrayList<>(); - - long currentMicroSecond = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - - ZonedDateTime checkZonedDateTime = TimeUtil.getZonedDateTime(currentMicroSecond); - String checkDateString = - DateTimeFormatter.ofPattern(TimeUtil.DATE_FORMAT) - .format(checkZonedDateTime.minusMinutes(5)); - String todayDateString = TimeUtil.getDateString(currentMicroSecond); - if (!checkDateString.equals(todayDateString)) { - dateStringList.add(checkDateString); - logger.log(Level.INFO, "Yesterday is added to the process queue and processed!"); - } - dateStringList.add(todayDateString); - - for (String dateString : dateStringList) { - String[] dateArray = dateString.split("-"); - if (dateArray.length == 3) { - - Queue queue = QueueFactory.getQueue(QUEUE); - - List<TaskOptions> tasks = new ArrayList<>(); - - String fileSeparator = FileSystems.getDefault().getSeparator(); - - String year = dateArray[0]; - String month = dateArray[1]; - String day = dateArray[2]; - - List<String> pathList = Arrays.asList(GCS_SUITE_TEST_FOLDER_NAME, year, month, day); - Path pathInfo = Paths.get(String.join(fileSeparator, pathList)); - - List<TestSuiteFileEntity> testSuiteFileEntityList = - ofy().load() - .type(TestSuiteFileEntity.class) - .filter("year", Integer.parseInt(year)) - .filter("month", Integer.parseInt(month)) - .filter("day", Integer.parseInt(day)) - .list(); - - List<String> filePathList = - testSuiteFileEntityList - .stream() - .map(testSuiteFile -> testSuiteFile.getFilePath()) - .collect(Collectors.toList()); - - Bucket vtsReportBucket = this.storage.get(GCS_BUCKET_NAME); - - Storage.BlobListOption[] listOptions = - new Storage.BlobListOption[] { - Storage.BlobListOption.prefix(pathInfo.toString() + fileSeparator) - }; - - Iterable<Blob> blobIterable = vtsReportBucket.list(listOptions).iterateAll(); - Iterator<Blob> blobIterator = blobIterable.iterator(); - while (blobIterator.hasNext()) { - Blob blob = blobIterator.next(); - if (blob.isDirectory()) { - logger.log(Level.INFO, blob.getName() + " directory will be skipped!"); - } else { - if (filePathList.contains(blob.getName())) { - logger.log(Level.INFO, "filePathList contain => " + blob.getName()); - } else if (blob.getName().endsWith(fileSeparator)) { - logger.log(Level.INFO, blob.getName() + " endswith slash!"); - } else { - TaskOptions task = - TaskOptions.Builder.withUrl(SUITE_TEST_URL) - .param("filePath", blob.getName()) - .method(TaskOptions.Method.POST); - tasks.add(task); - } - } - } - TaskQueueHelper.addToQueue(queue, tasks); - } else { - throw new IllegalArgumentException( - todayDateString + " date string not in correct format"); - } - } - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws IOException { - - String filePath = request.getParameter("filePath"); - if (Objects.isNull(filePath)) { - logger.log(Level.WARNING, "filePath parameter is null!"); - } else { - logger.log(Level.INFO, "filePath parameter => " + filePath); - - Key<TestSuiteFileEntity> testSuiteFileEntityKey = - Key.create(TestSuiteFileEntity.class, filePath); - TestSuiteFileEntity testSuiteFileEntity = - ofy().load() - .type(TestSuiteFileEntity.class) - .filterKey(testSuiteFileEntityKey) - .first() - .now(); - - if (Objects.isNull(testSuiteFileEntity)) { - Blob blobFile = (Blob) this.syncCache.get(filePath); - if (Objects.isNull(blobFile)) { - Bucket vtsReportBucket = this.storage.get(GCS_BUCKET_NAME); - blobFile = vtsReportBucket.get(filePath); - this.syncCache.put(filePath, blobFile); - } - - if (blobFile.exists()) { - TestSuiteFileEntity newTestSuiteFileEntity = new TestSuiteFileEntity(filePath); - try { - TestSuiteResultMessageProto.TestSuiteResultMessage testSuiteResultMessage = - TestSuiteResultMessageProto.TestSuiteResultMessage.parseFrom( - blobFile.getContent()); - - TestSuiteResultEntity testSuiteResultEntity = - new TestSuiteResultEntity( - testSuiteFileEntityKey, - testSuiteResultMessage.getStartTime(), - testSuiteResultMessage.getEndTime(), - testSuiteResultMessage.getTestType(), - testSuiteResultMessage.getBootSuccess(), - testSuiteResultMessage.getResultPath(), - testSuiteResultMessage.getInfraLogPath(), - testSuiteResultMessage.getHostName(), - testSuiteResultMessage.getSuitePlan(), - testSuiteResultMessage.getSuiteVersion(), - testSuiteResultMessage.getSuiteName(), - testSuiteResultMessage.getSuiteBuildNumber(), - testSuiteResultMessage.getModulesDone(), - testSuiteResultMessage.getModulesTotal(), - testSuiteResultMessage.getBranch(), - testSuiteResultMessage.getTarget(), - testSuiteResultMessage.getBuildId(), - testSuiteResultMessage.getBuildSystemFingerprint(), - testSuiteResultMessage.getBuildVendorFingerprint(), - testSuiteResultMessage.getPassedTestCaseCount(), - testSuiteResultMessage.getFailedTestCaseCount()); - - testSuiteResultEntity.save(newTestSuiteFileEntity); - } catch (IOException e) { - ofy().delete().type(TestSuiteFileEntity.class).id(filePath).now(); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - logger.log(Level.WARNING, "Invalid proto: " + e.getLocalizedMessage()); - } - } - } else { - logger.log(Level.INFO, "suite test found in datastore!"); - } - } - } -} diff --git a/src/main/java/com/android/vts/proto/TestSuiteResultMessageProto.java b/src/main/java/com/android/vts/proto/TestSuiteResultMessageProto.java deleted file mode 100644 index f152227..0000000 --- a/src/main/java/com/android/vts/proto/TestSuiteResultMessageProto.java +++ /dev/null @@ -1,4512 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: TestSuiteResultMessage.proto - -package com.android.vts.proto; - -public final class TestSuiteResultMessageProto { - private TestSuiteResultMessageProto() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - public interface TestSuiteResultMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.TestSuiteResultMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - boolean hasAccessToken(); - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - java.lang.String getAccessToken(); - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - com.google.protobuf.ByteString - getAccessTokenBytes(); - - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - boolean hasResultPath(); - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - java.lang.String getResultPath(); - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - com.google.protobuf.ByteString - getResultPathBytes(); - - /** - * <pre> - * whether the device(s) booted-up successfully - * </pre> - * - * <code>optional bool boot_success = 3 [default = true];</code> - */ - boolean hasBootSuccess(); - /** - * <pre> - * whether the device(s) booted-up successfully - * </pre> - * - * <code>optional bool boot_success = 3 [default = true];</code> - */ - boolean getBootSuccess(); - - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - boolean hasBranch(); - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - java.lang.String getBranch(); - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - com.google.protobuf.ByteString - getBranchBytes(); - - /** - * <code>required string target = 12;</code> - */ - boolean hasTarget(); - /** - * <code>required string target = 12;</code> - */ - java.lang.String getTarget(); - /** - * <code>required string target = 12;</code> - */ - com.google.protobuf.ByteString - getTargetBytes(); - - /** - * <code>required string build_id = 13;</code> - */ - boolean hasBuildId(); - /** - * <code>required string build_id = 13;</code> - */ - java.lang.String getBuildId(); - /** - * <code>required string build_id = 13;</code> - */ - com.google.protobuf.ByteString - getBuildIdBytes(); - - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - boolean hasSuitePlan(); - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - java.lang.String getSuitePlan(); - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - com.google.protobuf.ByteString - getSuitePlanBytes(); - - /** - * <code>optional string suite_version = 22;</code> - */ - boolean hasSuiteVersion(); - /** - * <code>optional string suite_version = 22;</code> - */ - java.lang.String getSuiteVersion(); - /** - * <code>optional string suite_version = 22;</code> - */ - com.google.protobuf.ByteString - getSuiteVersionBytes(); - - /** - * <code>optional string suite_build_number = 23;</code> - */ - boolean hasSuiteBuildNumber(); - /** - * <code>optional string suite_build_number = 23;</code> - */ - java.lang.String getSuiteBuildNumber(); - /** - * <code>optional string suite_build_number = 23;</code> - */ - com.google.protobuf.ByteString - getSuiteBuildNumberBytes(); - - /** - * <code>optional int64 start_time = 24;</code> - */ - boolean hasStartTime(); - /** - * <code>optional int64 start_time = 24;</code> - */ - long getStartTime(); - - /** - * <code>optional int64 end_time = 25;</code> - */ - boolean hasEndTime(); - /** - * <code>optional int64 end_time = 25;</code> - */ - long getEndTime(); - - /** - * <code>optional string host_name = 26;</code> - */ - boolean hasHostName(); - /** - * <code>optional string host_name = 26;</code> - */ - java.lang.String getHostName(); - /** - * <code>optional string host_name = 26;</code> - */ - com.google.protobuf.ByteString - getHostNameBytes(); - - /** - * <code>optional string suite_name = 27;</code> - */ - boolean hasSuiteName(); - /** - * <code>optional string suite_name = 27;</code> - */ - java.lang.String getSuiteName(); - /** - * <code>optional string suite_name = 27;</code> - */ - com.google.protobuf.ByteString - getSuiteNameBytes(); - - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - boolean hasBuildSystemFingerprint(); - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - java.lang.String getBuildSystemFingerprint(); - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - com.google.protobuf.ByteString - getBuildSystemFingerprintBytes(); - - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - boolean hasBuildVendorFingerprint(); - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - java.lang.String getBuildVendorFingerprint(); - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - com.google.protobuf.ByteString - getBuildVendorFingerprintBytes(); - - /** - * <code>optional int32 test_type = 33 [default = 0];</code> - */ - boolean hasTestType(); - /** - * <code>optional int32 test_type = 33 [default = 0];</code> - */ - int getTestType(); - - /** - * <pre> - * attributes of Summary tag - * </pre> - * - * <code>optional int32 passed_test_case_count = 41;</code> - */ - boolean hasPassedTestCaseCount(); - /** - * <pre> - * attributes of Summary tag - * </pre> - * - * <code>optional int32 passed_test_case_count = 41;</code> - */ - int getPassedTestCaseCount(); - - /** - * <code>optional int32 failed_test_case_count = 42;</code> - */ - boolean hasFailedTestCaseCount(); - /** - * <code>optional int32 failed_test_case_count = 42;</code> - */ - int getFailedTestCaseCount(); - - /** - * <code>optional int32 modules_done = 43;</code> - */ - boolean hasModulesDone(); - /** - * <code>optional int32 modules_done = 43;</code> - */ - int getModulesDone(); - - /** - * <code>optional int32 modules_total = 44;</code> - */ - boolean hasModulesTotal(); - /** - * <code>optional int32 modules_total = 44;</code> - */ - int getModulesTotal(); - - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - boolean hasInfraLogPath(); - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - java.lang.String getInfraLogPath(); - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - com.google.protobuf.ByteString - getInfraLogPathBytes(); - - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - java.util.List<java.lang.String> - getRepackedImagePathList(); - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - int getRepackedImagePathCount(); - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - java.lang.String getRepackedImagePath(int index); - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - com.google.protobuf.ByteString - getRepackedImagePathBytes(int index); - - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - boolean hasVendorBuildId(); - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - java.lang.String getVendorBuildId(); - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - com.google.protobuf.ByteString - getVendorBuildIdBytes(); - - /** - * <code>optional string gsi_build_id = 62;</code> - */ - boolean hasGsiBuildId(); - /** - * <code>optional string gsi_build_id = 62;</code> - */ - java.lang.String getGsiBuildId(); - /** - * <code>optional string gsi_build_id = 62;</code> - */ - com.google.protobuf.ByteString - getGsiBuildIdBytes(); - - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated boolean hasScheduleConfig(); - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage getScheduleConfig(); - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder getScheduleConfigOrBuilder(); - } - /** - * <pre> - * To specify the test results which are uploaded to vts dashboard. - * </pre> - * - * Protobuf type {@code android.vts.TestSuiteResultMessage} - */ - public static final class TestSuiteResultMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.TestSuiteResultMessage) - TestSuiteResultMessageOrBuilder { - // Use TestSuiteResultMessage.newBuilder() to construct. - private TestSuiteResultMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private TestSuiteResultMessage() { - accessToken_ = ""; - resultPath_ = ""; - bootSuccess_ = true; - branch_ = ""; - target_ = ""; - buildId_ = ""; - suitePlan_ = ""; - suiteVersion_ = ""; - suiteBuildNumber_ = ""; - startTime_ = 0L; - endTime_ = 0L; - hostName_ = ""; - suiteName_ = ""; - buildSystemFingerprint_ = ""; - buildVendorFingerprint_ = ""; - testType_ = 0; - passedTestCaseCount_ = 0; - failedTestCaseCount_ = 0; - modulesDone_ = 0; - modulesTotal_ = 0; - infraLogPath_ = ""; - repackedImagePath_ = com.google.protobuf.LazyStringArrayList.EMPTY; - vendorBuildId_ = ""; - gsiBuildId_ = ""; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private TestSuiteResultMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000001; - accessToken_ = bs; - break; - } - case 18: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000002; - resultPath_ = bs; - break; - } - case 24: { - bitField0_ |= 0x00000004; - bootSuccess_ = input.readBool(); - break; - } - case 90: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000008; - branch_ = bs; - break; - } - case 98: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000010; - target_ = bs; - break; - } - case 106: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000020; - buildId_ = bs; - break; - } - case 170: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000040; - suitePlan_ = bs; - break; - } - case 178: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000080; - suiteVersion_ = bs; - break; - } - case 186: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000100; - suiteBuildNumber_ = bs; - break; - } - case 192: { - bitField0_ |= 0x00000200; - startTime_ = input.readInt64(); - break; - } - case 200: { - bitField0_ |= 0x00000400; - endTime_ = input.readInt64(); - break; - } - case 210: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000800; - hostName_ = bs; - break; - } - case 218: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00001000; - suiteName_ = bs; - break; - } - case 250: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00002000; - buildSystemFingerprint_ = bs; - break; - } - case 258: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00004000; - buildVendorFingerprint_ = bs; - break; - } - case 264: { - bitField0_ |= 0x00008000; - testType_ = input.readInt32(); - break; - } - case 328: { - bitField0_ |= 0x00010000; - passedTestCaseCount_ = input.readInt32(); - break; - } - case 336: { - bitField0_ |= 0x00020000; - failedTestCaseCount_ = input.readInt32(); - break; - } - case 344: { - bitField0_ |= 0x00040000; - modulesDone_ = input.readInt32(); - break; - } - case 352: { - bitField0_ |= 0x00080000; - modulesTotal_ = input.readInt32(); - break; - } - case 410: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00100000; - infraLogPath_ = bs; - break; - } - case 418: { - com.google.protobuf.ByteString bs = input.readBytes(); - if (!((mutable_bitField0_ & 0x00200000) == 0x00200000)) { - repackedImagePath_ = new com.google.protobuf.LazyStringArrayList(); - mutable_bitField0_ |= 0x00200000; - } - repackedImagePath_.add(bs); - break; - } - case 490: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00200000; - vendorBuildId_ = bs; - break; - } - case 498: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00400000; - gsiBuildId_ = bs; - break; - } - case 506: { - com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder subBuilder = null; - if (((bitField0_ & 0x00800000) == 0x00800000)) { - subBuilder = scheduleConfig_.toBuilder(); - } - scheduleConfig_ = input.readMessage(com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.PARSER, extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(scheduleConfig_); - scheduleConfig_ = subBuilder.buildPartial(); - } - bitField0_ |= 0x00800000; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00200000) == 0x00200000)) { - repackedImagePath_ = repackedImagePath_.getUnmodifiableView(); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.TestSuiteResultMessageProto.internal_static_android_vts_TestSuiteResultMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.TestSuiteResultMessageProto.internal_static_android_vts_TestSuiteResultMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage.class, com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage.Builder.class); - } - - private int bitField0_; - public static final int ACCESS_TOKEN_FIELD_NUMBER = 1; - private volatile java.lang.Object accessToken_; - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public boolean hasAccessToken() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public java.lang.String getAccessToken() { - java.lang.Object ref = accessToken_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - accessToken_ = s; - } - return s; - } - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public com.google.protobuf.ByteString - getAccessTokenBytes() { - java.lang.Object ref = accessToken_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - accessToken_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int RESULT_PATH_FIELD_NUMBER = 2; - private volatile java.lang.Object resultPath_; - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public boolean hasResultPath() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public java.lang.String getResultPath() { - java.lang.Object ref = resultPath_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - resultPath_ = s; - } - return s; - } - } - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public com.google.protobuf.ByteString - getResultPathBytes() { - java.lang.Object ref = resultPath_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - resultPath_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int BOOT_SUCCESS_FIELD_NUMBER = 3; - private boolean bootSuccess_; - /** - * <pre> - * whether the device(s) booted-up successfully - * </pre> - * - * <code>optional bool boot_success = 3 [default = true];</code> - */ - public boolean hasBootSuccess() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * whether the device(s) booted-up successfully - * </pre> - * - * <code>optional bool boot_success = 3 [default = true];</code> - */ - public boolean getBootSuccess() { - return bootSuccess_; - } - - public static final int BRANCH_FIELD_NUMBER = 11; - private volatile java.lang.Object branch_; - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public boolean hasBranch() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public java.lang.String getBranch() { - java.lang.Object ref = branch_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - branch_ = s; - } - return s; - } - } - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public com.google.protobuf.ByteString - getBranchBytes() { - java.lang.Object ref = branch_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - branch_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TARGET_FIELD_NUMBER = 12; - private volatile java.lang.Object target_; - /** - * <code>required string target = 12;</code> - */ - public boolean hasTarget() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <code>required string target = 12;</code> - */ - public java.lang.String getTarget() { - java.lang.Object ref = target_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - target_ = s; - } - return s; - } - } - /** - * <code>required string target = 12;</code> - */ - public com.google.protobuf.ByteString - getTargetBytes() { - java.lang.Object ref = target_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - target_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int BUILD_ID_FIELD_NUMBER = 13; - private volatile java.lang.Object buildId_; - /** - * <code>required string build_id = 13;</code> - */ - public boolean hasBuildId() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - /** - * <code>required string build_id = 13;</code> - */ - public java.lang.String getBuildId() { - java.lang.Object ref = buildId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - buildId_ = s; - } - return s; - } - } - /** - * <code>required string build_id = 13;</code> - */ - public com.google.protobuf.ByteString - getBuildIdBytes() { - java.lang.Object ref = buildId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - buildId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int SUITE_PLAN_FIELD_NUMBER = 21; - private volatile java.lang.Object suitePlan_; - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public boolean hasSuitePlan() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public java.lang.String getSuitePlan() { - java.lang.Object ref = suitePlan_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - suitePlan_ = s; - } - return s; - } - } - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public com.google.protobuf.ByteString - getSuitePlanBytes() { - java.lang.Object ref = suitePlan_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - suitePlan_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int SUITE_VERSION_FIELD_NUMBER = 22; - private volatile java.lang.Object suiteVersion_; - /** - * <code>optional string suite_version = 22;</code> - */ - public boolean hasSuiteVersion() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - /** - * <code>optional string suite_version = 22;</code> - */ - public java.lang.String getSuiteVersion() { - java.lang.Object ref = suiteVersion_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - suiteVersion_ = s; - } - return s; - } - } - /** - * <code>optional string suite_version = 22;</code> - */ - public com.google.protobuf.ByteString - getSuiteVersionBytes() { - java.lang.Object ref = suiteVersion_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - suiteVersion_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int SUITE_BUILD_NUMBER_FIELD_NUMBER = 23; - private volatile java.lang.Object suiteBuildNumber_; - /** - * <code>optional string suite_build_number = 23;</code> - */ - public boolean hasSuiteBuildNumber() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - /** - * <code>optional string suite_build_number = 23;</code> - */ - public java.lang.String getSuiteBuildNumber() { - java.lang.Object ref = suiteBuildNumber_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - suiteBuildNumber_ = s; - } - return s; - } - } - /** - * <code>optional string suite_build_number = 23;</code> - */ - public com.google.protobuf.ByteString - getSuiteBuildNumberBytes() { - java.lang.Object ref = suiteBuildNumber_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - suiteBuildNumber_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int START_TIME_FIELD_NUMBER = 24; - private long startTime_; - /** - * <code>optional int64 start_time = 24;</code> - */ - public boolean hasStartTime() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - /** - * <code>optional int64 start_time = 24;</code> - */ - public long getStartTime() { - return startTime_; - } - - public static final int END_TIME_FIELD_NUMBER = 25; - private long endTime_; - /** - * <code>optional int64 end_time = 25;</code> - */ - public boolean hasEndTime() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - /** - * <code>optional int64 end_time = 25;</code> - */ - public long getEndTime() { - return endTime_; - } - - public static final int HOST_NAME_FIELD_NUMBER = 26; - private volatile java.lang.Object hostName_; - /** - * <code>optional string host_name = 26;</code> - */ - public boolean hasHostName() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - /** - * <code>optional string host_name = 26;</code> - */ - public java.lang.String getHostName() { - java.lang.Object ref = hostName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - hostName_ = s; - } - return s; - } - } - /** - * <code>optional string host_name = 26;</code> - */ - public com.google.protobuf.ByteString - getHostNameBytes() { - java.lang.Object ref = hostName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - hostName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int SUITE_NAME_FIELD_NUMBER = 27; - private volatile java.lang.Object suiteName_; - /** - * <code>optional string suite_name = 27;</code> - */ - public boolean hasSuiteName() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - /** - * <code>optional string suite_name = 27;</code> - */ - public java.lang.String getSuiteName() { - java.lang.Object ref = suiteName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - suiteName_ = s; - } - return s; - } - } - /** - * <code>optional string suite_name = 27;</code> - */ - public com.google.protobuf.ByteString - getSuiteNameBytes() { - java.lang.Object ref = suiteName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - suiteName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int BUILD_SYSTEM_FINGERPRINT_FIELD_NUMBER = 31; - private volatile java.lang.Object buildSystemFingerprint_; - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public boolean hasBuildSystemFingerprint() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public java.lang.String getBuildSystemFingerprint() { - java.lang.Object ref = buildSystemFingerprint_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - buildSystemFingerprint_ = s; - } - return s; - } - } - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public com.google.protobuf.ByteString - getBuildSystemFingerprintBytes() { - java.lang.Object ref = buildSystemFingerprint_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - buildSystemFingerprint_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int BUILD_VENDOR_FINGERPRINT_FIELD_NUMBER = 32; - private volatile java.lang.Object buildVendorFingerprint_; - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public boolean hasBuildVendorFingerprint() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public java.lang.String getBuildVendorFingerprint() { - java.lang.Object ref = buildVendorFingerprint_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - buildVendorFingerprint_ = s; - } - return s; - } - } - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public com.google.protobuf.ByteString - getBuildVendorFingerprintBytes() { - java.lang.Object ref = buildVendorFingerprint_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - buildVendorFingerprint_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TEST_TYPE_FIELD_NUMBER = 33; - private int testType_; - /** - * <code>optional int32 test_type = 33 [default = 0];</code> - */ - public boolean hasTestType() { - return ((bitField0_ & 0x00008000) == 0x00008000); - } - /** - * <code>optional int32 test_type = 33 [default = 0];</code> - */ - public int getTestType() { - return testType_; - } - - public static final int PASSED_TEST_CASE_COUNT_FIELD_NUMBER = 41; - private int passedTestCaseCount_; - /** - * <pre> - * attributes of Summary tag - * </pre> - * - * <code>optional int32 passed_test_case_count = 41;</code> - */ - public boolean hasPassedTestCaseCount() { - return ((bitField0_ & 0x00010000) == 0x00010000); - } - /** - * <pre> - * attributes of Summary tag - * </pre> - * - * <code>optional int32 passed_test_case_count = 41;</code> - */ - public int getPassedTestCaseCount() { - return passedTestCaseCount_; - } - - public static final int FAILED_TEST_CASE_COUNT_FIELD_NUMBER = 42; - private int failedTestCaseCount_; - /** - * <code>optional int32 failed_test_case_count = 42;</code> - */ - public boolean hasFailedTestCaseCount() { - return ((bitField0_ & 0x00020000) == 0x00020000); - } - /** - * <code>optional int32 failed_test_case_count = 42;</code> - */ - public int getFailedTestCaseCount() { - return failedTestCaseCount_; - } - - public static final int MODULES_DONE_FIELD_NUMBER = 43; - private int modulesDone_; - /** - * <code>optional int32 modules_done = 43;</code> - */ - public boolean hasModulesDone() { - return ((bitField0_ & 0x00040000) == 0x00040000); - } - /** - * <code>optional int32 modules_done = 43;</code> - */ - public int getModulesDone() { - return modulesDone_; - } - - public static final int MODULES_TOTAL_FIELD_NUMBER = 44; - private int modulesTotal_; - /** - * <code>optional int32 modules_total = 44;</code> - */ - public boolean hasModulesTotal() { - return ((bitField0_ & 0x00080000) == 0x00080000); - } - /** - * <code>optional int32 modules_total = 44;</code> - */ - public int getModulesTotal() { - return modulesTotal_; - } - - public static final int INFRA_LOG_PATH_FIELD_NUMBER = 51; - private volatile java.lang.Object infraLogPath_; - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public boolean hasInfraLogPath() { - return ((bitField0_ & 0x00100000) == 0x00100000); - } - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public java.lang.String getInfraLogPath() { - java.lang.Object ref = infraLogPath_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - infraLogPath_ = s; - } - return s; - } - } - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public com.google.protobuf.ByteString - getInfraLogPathBytes() { - java.lang.Object ref = infraLogPath_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - infraLogPath_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int REPACKED_IMAGE_PATH_FIELD_NUMBER = 52; - private com.google.protobuf.LazyStringList repackedImagePath_; - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public com.google.protobuf.ProtocolStringList - getRepackedImagePathList() { - return repackedImagePath_; - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public int getRepackedImagePathCount() { - return repackedImagePath_.size(); - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public java.lang.String getRepackedImagePath(int index) { - return repackedImagePath_.get(index); - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public com.google.protobuf.ByteString - getRepackedImagePathBytes(int index) { - return repackedImagePath_.getByteString(index); - } - - public static final int VENDOR_BUILD_ID_FIELD_NUMBER = 61; - private volatile java.lang.Object vendorBuildId_; - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public boolean hasVendorBuildId() { - return ((bitField0_ & 0x00200000) == 0x00200000); - } - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public java.lang.String getVendorBuildId() { - java.lang.Object ref = vendorBuildId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - vendorBuildId_ = s; - } - return s; - } - } - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public com.google.protobuf.ByteString - getVendorBuildIdBytes() { - java.lang.Object ref = vendorBuildId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - vendorBuildId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int GSI_BUILD_ID_FIELD_NUMBER = 62; - private volatile java.lang.Object gsiBuildId_; - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public boolean hasGsiBuildId() { - return ((bitField0_ & 0x00400000) == 0x00400000); - } - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public java.lang.String getGsiBuildId() { - java.lang.Object ref = gsiBuildId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - gsiBuildId_ = s; - } - return s; - } - } - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public com.google.protobuf.ByteString - getGsiBuildIdBytes() { - java.lang.Object ref = gsiBuildId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - gsiBuildId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int SCHEDULE_CONFIG_FIELD_NUMBER = 63; - private com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage scheduleConfig_; - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasScheduleConfig() { - return ((bitField0_ & 0x00800000) == 0x00800000); - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage getScheduleConfig() { - return scheduleConfig_ == null ? com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_; - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder getScheduleConfigOrBuilder() { - return scheduleConfig_ == null ? com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - if (!hasBranch()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasTarget()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasBuildId()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, accessToken_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resultPath_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBool(3, bootSuccess_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 11, branch_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 12, target_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 13, buildId_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 21, suitePlan_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 22, suiteVersion_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 23, suiteBuildNumber_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeInt64(24, startTime_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - output.writeInt64(25, endTime_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 26, hostName_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 27, suiteName_); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 31, buildSystemFingerprint_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 32, buildVendorFingerprint_); - } - if (((bitField0_ & 0x00008000) == 0x00008000)) { - output.writeInt32(33, testType_); - } - if (((bitField0_ & 0x00010000) == 0x00010000)) { - output.writeInt32(41, passedTestCaseCount_); - } - if (((bitField0_ & 0x00020000) == 0x00020000)) { - output.writeInt32(42, failedTestCaseCount_); - } - if (((bitField0_ & 0x00040000) == 0x00040000)) { - output.writeInt32(43, modulesDone_); - } - if (((bitField0_ & 0x00080000) == 0x00080000)) { - output.writeInt32(44, modulesTotal_); - } - if (((bitField0_ & 0x00100000) == 0x00100000)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 51, infraLogPath_); - } - for (int i = 0; i < repackedImagePath_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 52, repackedImagePath_.getRaw(i)); - } - if (((bitField0_ & 0x00200000) == 0x00200000)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 61, vendorBuildId_); - } - if (((bitField0_ & 0x00400000) == 0x00400000)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 62, gsiBuildId_); - } - if (((bitField0_ & 0x00800000) == 0x00800000)) { - output.writeMessage(63, getScheduleConfig()); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, accessToken_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resultPath_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(3, bootSuccess_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, branch_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, target_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, buildId_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(21, suitePlan_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(22, suiteVersion_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(23, suiteBuildNumber_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(24, startTime_); - } - if (((bitField0_ & 0x00000400) == 0x00000400)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(25, endTime_); - } - if (((bitField0_ & 0x00000800) == 0x00000800)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(26, hostName_); - } - if (((bitField0_ & 0x00001000) == 0x00001000)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(27, suiteName_); - } - if (((bitField0_ & 0x00002000) == 0x00002000)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(31, buildSystemFingerprint_); - } - if (((bitField0_ & 0x00004000) == 0x00004000)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(32, buildVendorFingerprint_); - } - if (((bitField0_ & 0x00008000) == 0x00008000)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(33, testType_); - } - if (((bitField0_ & 0x00010000) == 0x00010000)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(41, passedTestCaseCount_); - } - if (((bitField0_ & 0x00020000) == 0x00020000)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(42, failedTestCaseCount_); - } - if (((bitField0_ & 0x00040000) == 0x00040000)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(43, modulesDone_); - } - if (((bitField0_ & 0x00080000) == 0x00080000)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(44, modulesTotal_); - } - if (((bitField0_ & 0x00100000) == 0x00100000)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(51, infraLogPath_); - } - { - int dataSize = 0; - for (int i = 0; i < repackedImagePath_.size(); i++) { - dataSize += computeStringSizeNoTag(repackedImagePath_.getRaw(i)); - } - size += dataSize; - size += 2 * getRepackedImagePathList().size(); - } - if (((bitField0_ & 0x00200000) == 0x00200000)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(61, vendorBuildId_); - } - if (((bitField0_ & 0x00400000) == 0x00400000)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(62, gsiBuildId_); - } - if (((bitField0_ & 0x00800000) == 0x00800000)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(63, getScheduleConfig()); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage)) { - return super.equals(obj); - } - com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage other = (com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage) obj; - - boolean result = true; - result = result && (hasAccessToken() == other.hasAccessToken()); - if (hasAccessToken()) { - result = result && getAccessToken() - .equals(other.getAccessToken()); - } - result = result && (hasResultPath() == other.hasResultPath()); - if (hasResultPath()) { - result = result && getResultPath() - .equals(other.getResultPath()); - } - result = result && (hasBootSuccess() == other.hasBootSuccess()); - if (hasBootSuccess()) { - result = result && (getBootSuccess() - == other.getBootSuccess()); - } - result = result && (hasBranch() == other.hasBranch()); - if (hasBranch()) { - result = result && getBranch() - .equals(other.getBranch()); - } - result = result && (hasTarget() == other.hasTarget()); - if (hasTarget()) { - result = result && getTarget() - .equals(other.getTarget()); - } - result = result && (hasBuildId() == other.hasBuildId()); - if (hasBuildId()) { - result = result && getBuildId() - .equals(other.getBuildId()); - } - result = result && (hasSuitePlan() == other.hasSuitePlan()); - if (hasSuitePlan()) { - result = result && getSuitePlan() - .equals(other.getSuitePlan()); - } - result = result && (hasSuiteVersion() == other.hasSuiteVersion()); - if (hasSuiteVersion()) { - result = result && getSuiteVersion() - .equals(other.getSuiteVersion()); - } - result = result && (hasSuiteBuildNumber() == other.hasSuiteBuildNumber()); - if (hasSuiteBuildNumber()) { - result = result && getSuiteBuildNumber() - .equals(other.getSuiteBuildNumber()); - } - result = result && (hasStartTime() == other.hasStartTime()); - if (hasStartTime()) { - result = result && (getStartTime() - == other.getStartTime()); - } - result = result && (hasEndTime() == other.hasEndTime()); - if (hasEndTime()) { - result = result && (getEndTime() - == other.getEndTime()); - } - result = result && (hasHostName() == other.hasHostName()); - if (hasHostName()) { - result = result && getHostName() - .equals(other.getHostName()); - } - result = result && (hasSuiteName() == other.hasSuiteName()); - if (hasSuiteName()) { - result = result && getSuiteName() - .equals(other.getSuiteName()); - } - result = result && (hasBuildSystemFingerprint() == other.hasBuildSystemFingerprint()); - if (hasBuildSystemFingerprint()) { - result = result && getBuildSystemFingerprint() - .equals(other.getBuildSystemFingerprint()); - } - result = result && (hasBuildVendorFingerprint() == other.hasBuildVendorFingerprint()); - if (hasBuildVendorFingerprint()) { - result = result && getBuildVendorFingerprint() - .equals(other.getBuildVendorFingerprint()); - } - result = result && (hasTestType() == other.hasTestType()); - if (hasTestType()) { - result = result && (getTestType() - == other.getTestType()); - } - result = result && (hasPassedTestCaseCount() == other.hasPassedTestCaseCount()); - if (hasPassedTestCaseCount()) { - result = result && (getPassedTestCaseCount() - == other.getPassedTestCaseCount()); - } - result = result && (hasFailedTestCaseCount() == other.hasFailedTestCaseCount()); - if (hasFailedTestCaseCount()) { - result = result && (getFailedTestCaseCount() - == other.getFailedTestCaseCount()); - } - result = result && (hasModulesDone() == other.hasModulesDone()); - if (hasModulesDone()) { - result = result && (getModulesDone() - == other.getModulesDone()); - } - result = result && (hasModulesTotal() == other.hasModulesTotal()); - if (hasModulesTotal()) { - result = result && (getModulesTotal() - == other.getModulesTotal()); - } - result = result && (hasInfraLogPath() == other.hasInfraLogPath()); - if (hasInfraLogPath()) { - result = result && getInfraLogPath() - .equals(other.getInfraLogPath()); - } - result = result && getRepackedImagePathList() - .equals(other.getRepackedImagePathList()); - result = result && (hasVendorBuildId() == other.hasVendorBuildId()); - if (hasVendorBuildId()) { - result = result && getVendorBuildId() - .equals(other.getVendorBuildId()); - } - result = result && (hasGsiBuildId() == other.hasGsiBuildId()); - if (hasGsiBuildId()) { - result = result && getGsiBuildId() - .equals(other.getGsiBuildId()); - } - result = result && (hasScheduleConfig() == other.hasScheduleConfig()); - if (hasScheduleConfig()) { - result = result && getScheduleConfig() - .equals(other.getScheduleConfig()); - } - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasAccessToken()) { - hash = (37 * hash) + ACCESS_TOKEN_FIELD_NUMBER; - hash = (53 * hash) + getAccessToken().hashCode(); - } - if (hasResultPath()) { - hash = (37 * hash) + RESULT_PATH_FIELD_NUMBER; - hash = (53 * hash) + getResultPath().hashCode(); - } - if (hasBootSuccess()) { - hash = (37 * hash) + BOOT_SUCCESS_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getBootSuccess()); - } - if (hasBranch()) { - hash = (37 * hash) + BRANCH_FIELD_NUMBER; - hash = (53 * hash) + getBranch().hashCode(); - } - if (hasTarget()) { - hash = (37 * hash) + TARGET_FIELD_NUMBER; - hash = (53 * hash) + getTarget().hashCode(); - } - if (hasBuildId()) { - hash = (37 * hash) + BUILD_ID_FIELD_NUMBER; - hash = (53 * hash) + getBuildId().hashCode(); - } - if (hasSuitePlan()) { - hash = (37 * hash) + SUITE_PLAN_FIELD_NUMBER; - hash = (53 * hash) + getSuitePlan().hashCode(); - } - if (hasSuiteVersion()) { - hash = (37 * hash) + SUITE_VERSION_FIELD_NUMBER; - hash = (53 * hash) + getSuiteVersion().hashCode(); - } - if (hasSuiteBuildNumber()) { - hash = (37 * hash) + SUITE_BUILD_NUMBER_FIELD_NUMBER; - hash = (53 * hash) + getSuiteBuildNumber().hashCode(); - } - if (hasStartTime()) { - hash = (37 * hash) + START_TIME_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getStartTime()); - } - if (hasEndTime()) { - hash = (37 * hash) + END_TIME_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getEndTime()); - } - if (hasHostName()) { - hash = (37 * hash) + HOST_NAME_FIELD_NUMBER; - hash = (53 * hash) + getHostName().hashCode(); - } - if (hasSuiteName()) { - hash = (37 * hash) + SUITE_NAME_FIELD_NUMBER; - hash = (53 * hash) + getSuiteName().hashCode(); - } - if (hasBuildSystemFingerprint()) { - hash = (37 * hash) + BUILD_SYSTEM_FINGERPRINT_FIELD_NUMBER; - hash = (53 * hash) + getBuildSystemFingerprint().hashCode(); - } - if (hasBuildVendorFingerprint()) { - hash = (37 * hash) + BUILD_VENDOR_FINGERPRINT_FIELD_NUMBER; - hash = (53 * hash) + getBuildVendorFingerprint().hashCode(); - } - if (hasTestType()) { - hash = (37 * hash) + TEST_TYPE_FIELD_NUMBER; - hash = (53 * hash) + getTestType(); - } - if (hasPassedTestCaseCount()) { - hash = (37 * hash) + PASSED_TEST_CASE_COUNT_FIELD_NUMBER; - hash = (53 * hash) + getPassedTestCaseCount(); - } - if (hasFailedTestCaseCount()) { - hash = (37 * hash) + FAILED_TEST_CASE_COUNT_FIELD_NUMBER; - hash = (53 * hash) + getFailedTestCaseCount(); - } - if (hasModulesDone()) { - hash = (37 * hash) + MODULES_DONE_FIELD_NUMBER; - hash = (53 * hash) + getModulesDone(); - } - if (hasModulesTotal()) { - hash = (37 * hash) + MODULES_TOTAL_FIELD_NUMBER; - hash = (53 * hash) + getModulesTotal(); - } - if (hasInfraLogPath()) { - hash = (37 * hash) + INFRA_LOG_PATH_FIELD_NUMBER; - hash = (53 * hash) + getInfraLogPath().hashCode(); - } - if (getRepackedImagePathCount() > 0) { - hash = (37 * hash) + REPACKED_IMAGE_PATH_FIELD_NUMBER; - hash = (53 * hash) + getRepackedImagePathList().hashCode(); - } - if (hasVendorBuildId()) { - hash = (37 * hash) + VENDOR_BUILD_ID_FIELD_NUMBER; - hash = (53 * hash) + getVendorBuildId().hashCode(); - } - if (hasGsiBuildId()) { - hash = (37 * hash) + GSI_BUILD_ID_FIELD_NUMBER; - hash = (53 * hash) + getGsiBuildId().hashCode(); - } - if (hasScheduleConfig()) { - hash = (37 * hash) + SCHEDULE_CONFIG_FIELD_NUMBER; - hash = (53 * hash) + getScheduleConfig().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify the test results which are uploaded to vts dashboard. - * </pre> - * - * Protobuf type {@code android.vts.TestSuiteResultMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.TestSuiteResultMessage) - com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.TestSuiteResultMessageProto.internal_static_android_vts_TestSuiteResultMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.TestSuiteResultMessageProto.internal_static_android_vts_TestSuiteResultMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage.class, com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage.Builder.class); - } - - // Construct using com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getScheduleConfigFieldBuilder(); - } - } - public Builder clear() { - super.clear(); - accessToken_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - resultPath_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - bootSuccess_ = true; - bitField0_ = (bitField0_ & ~0x00000004); - branch_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - target_ = ""; - bitField0_ = (bitField0_ & ~0x00000010); - buildId_ = ""; - bitField0_ = (bitField0_ & ~0x00000020); - suitePlan_ = ""; - bitField0_ = (bitField0_ & ~0x00000040); - suiteVersion_ = ""; - bitField0_ = (bitField0_ & ~0x00000080); - suiteBuildNumber_ = ""; - bitField0_ = (bitField0_ & ~0x00000100); - startTime_ = 0L; - bitField0_ = (bitField0_ & ~0x00000200); - endTime_ = 0L; - bitField0_ = (bitField0_ & ~0x00000400); - hostName_ = ""; - bitField0_ = (bitField0_ & ~0x00000800); - suiteName_ = ""; - bitField0_ = (bitField0_ & ~0x00001000); - buildSystemFingerprint_ = ""; - bitField0_ = (bitField0_ & ~0x00002000); - buildVendorFingerprint_ = ""; - bitField0_ = (bitField0_ & ~0x00004000); - testType_ = 0; - bitField0_ = (bitField0_ & ~0x00008000); - passedTestCaseCount_ = 0; - bitField0_ = (bitField0_ & ~0x00010000); - failedTestCaseCount_ = 0; - bitField0_ = (bitField0_ & ~0x00020000); - modulesDone_ = 0; - bitField0_ = (bitField0_ & ~0x00040000); - modulesTotal_ = 0; - bitField0_ = (bitField0_ & ~0x00080000); - infraLogPath_ = ""; - bitField0_ = (bitField0_ & ~0x00100000); - repackedImagePath_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00200000); - vendorBuildId_ = ""; - bitField0_ = (bitField0_ & ~0x00400000); - gsiBuildId_ = ""; - bitField0_ = (bitField0_ & ~0x00800000); - if (scheduleConfigBuilder_ == null) { - scheduleConfig_ = null; - } else { - scheduleConfigBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x01000000); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.TestSuiteResultMessageProto.internal_static_android_vts_TestSuiteResultMessage_descriptor; - } - - public com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage getDefaultInstanceForType() { - return com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage.getDefaultInstance(); - } - - public com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage build() { - com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage buildPartial() { - com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage result = new com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.accessToken_ = accessToken_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.resultPath_ = resultPath_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.bootSuccess_ = bootSuccess_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.branch_ = branch_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.target_ = target_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - result.buildId_ = buildId_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - result.suitePlan_ = suitePlan_; - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000080; - } - result.suiteVersion_ = suiteVersion_; - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000100; - } - result.suiteBuildNumber_ = suiteBuildNumber_; - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000200; - } - result.startTime_ = startTime_; - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000400; - } - result.endTime_ = endTime_; - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000800; - } - result.hostName_ = hostName_; - if (((from_bitField0_ & 0x00001000) == 0x00001000)) { - to_bitField0_ |= 0x00001000; - } - result.suiteName_ = suiteName_; - if (((from_bitField0_ & 0x00002000) == 0x00002000)) { - to_bitField0_ |= 0x00002000; - } - result.buildSystemFingerprint_ = buildSystemFingerprint_; - if (((from_bitField0_ & 0x00004000) == 0x00004000)) { - to_bitField0_ |= 0x00004000; - } - result.buildVendorFingerprint_ = buildVendorFingerprint_; - if (((from_bitField0_ & 0x00008000) == 0x00008000)) { - to_bitField0_ |= 0x00008000; - } - result.testType_ = testType_; - if (((from_bitField0_ & 0x00010000) == 0x00010000)) { - to_bitField0_ |= 0x00010000; - } - result.passedTestCaseCount_ = passedTestCaseCount_; - if (((from_bitField0_ & 0x00020000) == 0x00020000)) { - to_bitField0_ |= 0x00020000; - } - result.failedTestCaseCount_ = failedTestCaseCount_; - if (((from_bitField0_ & 0x00040000) == 0x00040000)) { - to_bitField0_ |= 0x00040000; - } - result.modulesDone_ = modulesDone_; - if (((from_bitField0_ & 0x00080000) == 0x00080000)) { - to_bitField0_ |= 0x00080000; - } - result.modulesTotal_ = modulesTotal_; - if (((from_bitField0_ & 0x00100000) == 0x00100000)) { - to_bitField0_ |= 0x00100000; - } - result.infraLogPath_ = infraLogPath_; - if (((bitField0_ & 0x00200000) == 0x00200000)) { - repackedImagePath_ = repackedImagePath_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00200000); - } - result.repackedImagePath_ = repackedImagePath_; - if (((from_bitField0_ & 0x00400000) == 0x00400000)) { - to_bitField0_ |= 0x00200000; - } - result.vendorBuildId_ = vendorBuildId_; - if (((from_bitField0_ & 0x00800000) == 0x00800000)) { - to_bitField0_ |= 0x00400000; - } - result.gsiBuildId_ = gsiBuildId_; - if (((from_bitField0_ & 0x01000000) == 0x01000000)) { - to_bitField0_ |= 0x00800000; - } - if (scheduleConfigBuilder_ == null) { - result.scheduleConfig_ = scheduleConfig_; - } else { - result.scheduleConfig_ = scheduleConfigBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage) { - return mergeFrom((com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage other) { - if (other == com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage.getDefaultInstance()) return this; - if (other.hasAccessToken()) { - bitField0_ |= 0x00000001; - accessToken_ = other.accessToken_; - onChanged(); - } - if (other.hasResultPath()) { - bitField0_ |= 0x00000002; - resultPath_ = other.resultPath_; - onChanged(); - } - if (other.hasBootSuccess()) { - setBootSuccess(other.getBootSuccess()); - } - if (other.hasBranch()) { - bitField0_ |= 0x00000008; - branch_ = other.branch_; - onChanged(); - } - if (other.hasTarget()) { - bitField0_ |= 0x00000010; - target_ = other.target_; - onChanged(); - } - if (other.hasBuildId()) { - bitField0_ |= 0x00000020; - buildId_ = other.buildId_; - onChanged(); - } - if (other.hasSuitePlan()) { - bitField0_ |= 0x00000040; - suitePlan_ = other.suitePlan_; - onChanged(); - } - if (other.hasSuiteVersion()) { - bitField0_ |= 0x00000080; - suiteVersion_ = other.suiteVersion_; - onChanged(); - } - if (other.hasSuiteBuildNumber()) { - bitField0_ |= 0x00000100; - suiteBuildNumber_ = other.suiteBuildNumber_; - onChanged(); - } - if (other.hasStartTime()) { - setStartTime(other.getStartTime()); - } - if (other.hasEndTime()) { - setEndTime(other.getEndTime()); - } - if (other.hasHostName()) { - bitField0_ |= 0x00000800; - hostName_ = other.hostName_; - onChanged(); - } - if (other.hasSuiteName()) { - bitField0_ |= 0x00001000; - suiteName_ = other.suiteName_; - onChanged(); - } - if (other.hasBuildSystemFingerprint()) { - bitField0_ |= 0x00002000; - buildSystemFingerprint_ = other.buildSystemFingerprint_; - onChanged(); - } - if (other.hasBuildVendorFingerprint()) { - bitField0_ |= 0x00004000; - buildVendorFingerprint_ = other.buildVendorFingerprint_; - onChanged(); - } - if (other.hasTestType()) { - setTestType(other.getTestType()); - } - if (other.hasPassedTestCaseCount()) { - setPassedTestCaseCount(other.getPassedTestCaseCount()); - } - if (other.hasFailedTestCaseCount()) { - setFailedTestCaseCount(other.getFailedTestCaseCount()); - } - if (other.hasModulesDone()) { - setModulesDone(other.getModulesDone()); - } - if (other.hasModulesTotal()) { - setModulesTotal(other.getModulesTotal()); - } - if (other.hasInfraLogPath()) { - bitField0_ |= 0x00100000; - infraLogPath_ = other.infraLogPath_; - onChanged(); - } - if (!other.repackedImagePath_.isEmpty()) { - if (repackedImagePath_.isEmpty()) { - repackedImagePath_ = other.repackedImagePath_; - bitField0_ = (bitField0_ & ~0x00200000); - } else { - ensureRepackedImagePathIsMutable(); - repackedImagePath_.addAll(other.repackedImagePath_); - } - onChanged(); - } - if (other.hasVendorBuildId()) { - bitField0_ |= 0x00400000; - vendorBuildId_ = other.vendorBuildId_; - onChanged(); - } - if (other.hasGsiBuildId()) { - bitField0_ |= 0x00800000; - gsiBuildId_ = other.gsiBuildId_; - onChanged(); - } - if (other.hasScheduleConfig()) { - mergeScheduleConfig(other.getScheduleConfig()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - if (!hasBranch()) { - return false; - } - if (!hasTarget()) { - return false; - } - if (!hasBuildId()) { - return false; - } - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private java.lang.Object accessToken_ = ""; - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public boolean hasAccessToken() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public java.lang.String getAccessToken() { - java.lang.Object ref = accessToken_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - accessToken_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public com.google.protobuf.ByteString - getAccessTokenBytes() { - java.lang.Object ref = accessToken_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - accessToken_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public Builder setAccessToken( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - accessToken_ = value; - onChanged(); - return this; - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public Builder clearAccessToken() { - bitField0_ = (bitField0_ & ~0x00000001); - accessToken_ = getDefaultInstance().getAccessToken(); - onChanged(); - return this; - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public Builder setAccessTokenBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - accessToken_ = value; - onChanged(); - return this; - } - - private java.lang.Object resultPath_ = ""; - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public boolean hasResultPath() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public java.lang.String getResultPath() { - java.lang.Object ref = resultPath_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - resultPath_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public com.google.protobuf.ByteString - getResultPathBytes() { - java.lang.Object ref = resultPath_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - resultPath_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public Builder setResultPath( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - resultPath_ = value; - onChanged(); - return this; - } - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public Builder clearResultPath() { - bitField0_ = (bitField0_ & ~0x00000002); - resultPath_ = getDefaultInstance().getResultPath(); - onChanged(); - return this; - } - /** - * <pre> - * GCS path to the corresponding result directory - * </pre> - * - * <code>optional string result_path = 2;</code> - */ - public Builder setResultPathBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - resultPath_ = value; - onChanged(); - return this; - } - - private boolean bootSuccess_ = true; - /** - * <pre> - * whether the device(s) booted-up successfully - * </pre> - * - * <code>optional bool boot_success = 3 [default = true];</code> - */ - public boolean hasBootSuccess() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * whether the device(s) booted-up successfully - * </pre> - * - * <code>optional bool boot_success = 3 [default = true];</code> - */ - public boolean getBootSuccess() { - return bootSuccess_; - } - /** - * <pre> - * whether the device(s) booted-up successfully - * </pre> - * - * <code>optional bool boot_success = 3 [default = true];</code> - */ - public Builder setBootSuccess(boolean value) { - bitField0_ |= 0x00000004; - bootSuccess_ = value; - onChanged(); - return this; - } - /** - * <pre> - * whether the device(s) booted-up successfully - * </pre> - * - * <code>optional bool boot_success = 3 [default = true];</code> - */ - public Builder clearBootSuccess() { - bitField0_ = (bitField0_ & ~0x00000004); - bootSuccess_ = true; - onChanged(); - return this; - } - - private java.lang.Object branch_ = ""; - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public boolean hasBranch() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public java.lang.String getBranch() { - java.lang.Object ref = branch_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - branch_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public com.google.protobuf.ByteString - getBranchBytes() { - java.lang.Object ref = branch_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - branch_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public Builder setBranch( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - branch_ = value; - onChanged(); - return this; - } - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public Builder clearBranch() { - bitField0_ = (bitField0_ & ~0x00000008); - branch_ = getDefaultInstance().getBranch(); - onChanged(); - return this; - } - /** - * <pre> - * test suite build info - * </pre> - * - * <code>required string branch = 11;</code> - */ - public Builder setBranchBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - branch_ = value; - onChanged(); - return this; - } - - private java.lang.Object target_ = ""; - /** - * <code>required string target = 12;</code> - */ - public boolean hasTarget() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <code>required string target = 12;</code> - */ - public java.lang.String getTarget() { - java.lang.Object ref = target_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - target_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <code>required string target = 12;</code> - */ - public com.google.protobuf.ByteString - getTargetBytes() { - java.lang.Object ref = target_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - target_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>required string target = 12;</code> - */ - public Builder setTarget( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - target_ = value; - onChanged(); - return this; - } - /** - * <code>required string target = 12;</code> - */ - public Builder clearTarget() { - bitField0_ = (bitField0_ & ~0x00000010); - target_ = getDefaultInstance().getTarget(); - onChanged(); - return this; - } - /** - * <code>required string target = 12;</code> - */ - public Builder setTargetBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - target_ = value; - onChanged(); - return this; - } - - private java.lang.Object buildId_ = ""; - /** - * <code>required string build_id = 13;</code> - */ - public boolean hasBuildId() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - /** - * <code>required string build_id = 13;</code> - */ - public java.lang.String getBuildId() { - java.lang.Object ref = buildId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - buildId_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <code>required string build_id = 13;</code> - */ - public com.google.protobuf.ByteString - getBuildIdBytes() { - java.lang.Object ref = buildId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - buildId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>required string build_id = 13;</code> - */ - public Builder setBuildId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - buildId_ = value; - onChanged(); - return this; - } - /** - * <code>required string build_id = 13;</code> - */ - public Builder clearBuildId() { - bitField0_ = (bitField0_ & ~0x00000020); - buildId_ = getDefaultInstance().getBuildId(); - onChanged(); - return this; - } - /** - * <code>required string build_id = 13;</code> - */ - public Builder setBuildIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - buildId_ = value; - onChanged(); - return this; - } - - private java.lang.Object suitePlan_ = ""; - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public boolean hasSuitePlan() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public java.lang.String getSuitePlan() { - java.lang.Object ref = suitePlan_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - suitePlan_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public com.google.protobuf.ByteString - getSuitePlanBytes() { - java.lang.Object ref = suitePlan_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - suitePlan_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public Builder setSuitePlan( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000040; - suitePlan_ = value; - onChanged(); - return this; - } - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public Builder clearSuitePlan() { - bitField0_ = (bitField0_ & ~0x00000040); - suitePlan_ = getDefaultInstance().getSuitePlan(); - onChanged(); - return this; - } - /** - * <pre> - * attributes of Result tag - * </pre> - * - * <code>optional string suite_plan = 21;</code> - */ - public Builder setSuitePlanBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000040; - suitePlan_ = value; - onChanged(); - return this; - } - - private java.lang.Object suiteVersion_ = ""; - /** - * <code>optional string suite_version = 22;</code> - */ - public boolean hasSuiteVersion() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - /** - * <code>optional string suite_version = 22;</code> - */ - public java.lang.String getSuiteVersion() { - java.lang.Object ref = suiteVersion_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - suiteVersion_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <code>optional string suite_version = 22;</code> - */ - public com.google.protobuf.ByteString - getSuiteVersionBytes() { - java.lang.Object ref = suiteVersion_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - suiteVersion_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>optional string suite_version = 22;</code> - */ - public Builder setSuiteVersion( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000080; - suiteVersion_ = value; - onChanged(); - return this; - } - /** - * <code>optional string suite_version = 22;</code> - */ - public Builder clearSuiteVersion() { - bitField0_ = (bitField0_ & ~0x00000080); - suiteVersion_ = getDefaultInstance().getSuiteVersion(); - onChanged(); - return this; - } - /** - * <code>optional string suite_version = 22;</code> - */ - public Builder setSuiteVersionBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000080; - suiteVersion_ = value; - onChanged(); - return this; - } - - private java.lang.Object suiteBuildNumber_ = ""; - /** - * <code>optional string suite_build_number = 23;</code> - */ - public boolean hasSuiteBuildNumber() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - /** - * <code>optional string suite_build_number = 23;</code> - */ - public java.lang.String getSuiteBuildNumber() { - java.lang.Object ref = suiteBuildNumber_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - suiteBuildNumber_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <code>optional string suite_build_number = 23;</code> - */ - public com.google.protobuf.ByteString - getSuiteBuildNumberBytes() { - java.lang.Object ref = suiteBuildNumber_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - suiteBuildNumber_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>optional string suite_build_number = 23;</code> - */ - public Builder setSuiteBuildNumber( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000100; - suiteBuildNumber_ = value; - onChanged(); - return this; - } - /** - * <code>optional string suite_build_number = 23;</code> - */ - public Builder clearSuiteBuildNumber() { - bitField0_ = (bitField0_ & ~0x00000100); - suiteBuildNumber_ = getDefaultInstance().getSuiteBuildNumber(); - onChanged(); - return this; - } - /** - * <code>optional string suite_build_number = 23;</code> - */ - public Builder setSuiteBuildNumberBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000100; - suiteBuildNumber_ = value; - onChanged(); - return this; - } - - private long startTime_ ; - /** - * <code>optional int64 start_time = 24;</code> - */ - public boolean hasStartTime() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - /** - * <code>optional int64 start_time = 24;</code> - */ - public long getStartTime() { - return startTime_; - } - /** - * <code>optional int64 start_time = 24;</code> - */ - public Builder setStartTime(long value) { - bitField0_ |= 0x00000200; - startTime_ = value; - onChanged(); - return this; - } - /** - * <code>optional int64 start_time = 24;</code> - */ - public Builder clearStartTime() { - bitField0_ = (bitField0_ & ~0x00000200); - startTime_ = 0L; - onChanged(); - return this; - } - - private long endTime_ ; - /** - * <code>optional int64 end_time = 25;</code> - */ - public boolean hasEndTime() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - /** - * <code>optional int64 end_time = 25;</code> - */ - public long getEndTime() { - return endTime_; - } - /** - * <code>optional int64 end_time = 25;</code> - */ - public Builder setEndTime(long value) { - bitField0_ |= 0x00000400; - endTime_ = value; - onChanged(); - return this; - } - /** - * <code>optional int64 end_time = 25;</code> - */ - public Builder clearEndTime() { - bitField0_ = (bitField0_ & ~0x00000400); - endTime_ = 0L; - onChanged(); - return this; - } - - private java.lang.Object hostName_ = ""; - /** - * <code>optional string host_name = 26;</code> - */ - public boolean hasHostName() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - /** - * <code>optional string host_name = 26;</code> - */ - public java.lang.String getHostName() { - java.lang.Object ref = hostName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - hostName_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <code>optional string host_name = 26;</code> - */ - public com.google.protobuf.ByteString - getHostNameBytes() { - java.lang.Object ref = hostName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - hostName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>optional string host_name = 26;</code> - */ - public Builder setHostName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000800; - hostName_ = value; - onChanged(); - return this; - } - /** - * <code>optional string host_name = 26;</code> - */ - public Builder clearHostName() { - bitField0_ = (bitField0_ & ~0x00000800); - hostName_ = getDefaultInstance().getHostName(); - onChanged(); - return this; - } - /** - * <code>optional string host_name = 26;</code> - */ - public Builder setHostNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000800; - hostName_ = value; - onChanged(); - return this; - } - - private java.lang.Object suiteName_ = ""; - /** - * <code>optional string suite_name = 27;</code> - */ - public boolean hasSuiteName() { - return ((bitField0_ & 0x00001000) == 0x00001000); - } - /** - * <code>optional string suite_name = 27;</code> - */ - public java.lang.String getSuiteName() { - java.lang.Object ref = suiteName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - suiteName_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <code>optional string suite_name = 27;</code> - */ - public com.google.protobuf.ByteString - getSuiteNameBytes() { - java.lang.Object ref = suiteName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - suiteName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>optional string suite_name = 27;</code> - */ - public Builder setSuiteName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00001000; - suiteName_ = value; - onChanged(); - return this; - } - /** - * <code>optional string suite_name = 27;</code> - */ - public Builder clearSuiteName() { - bitField0_ = (bitField0_ & ~0x00001000); - suiteName_ = getDefaultInstance().getSuiteName(); - onChanged(); - return this; - } - /** - * <code>optional string suite_name = 27;</code> - */ - public Builder setSuiteNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00001000; - suiteName_ = value; - onChanged(); - return this; - } - - private java.lang.Object buildSystemFingerprint_ = ""; - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public boolean hasBuildSystemFingerprint() { - return ((bitField0_ & 0x00002000) == 0x00002000); - } - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public java.lang.String getBuildSystemFingerprint() { - java.lang.Object ref = buildSystemFingerprint_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - buildSystemFingerprint_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public com.google.protobuf.ByteString - getBuildSystemFingerprintBytes() { - java.lang.Object ref = buildSystemFingerprint_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - buildSystemFingerprint_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public Builder setBuildSystemFingerprint( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00002000; - buildSystemFingerprint_ = value; - onChanged(); - return this; - } - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public Builder clearBuildSystemFingerprint() { - bitField0_ = (bitField0_ & ~0x00002000); - buildSystemFingerprint_ = getDefaultInstance().getBuildSystemFingerprint(); - onChanged(); - return this; - } - /** - * <pre> - * attributes of Build tag - * </pre> - * - * <code>optional string build_system_fingerprint = 31;</code> - */ - public Builder setBuildSystemFingerprintBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00002000; - buildSystemFingerprint_ = value; - onChanged(); - return this; - } - - private java.lang.Object buildVendorFingerprint_ = ""; - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public boolean hasBuildVendorFingerprint() { - return ((bitField0_ & 0x00004000) == 0x00004000); - } - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public java.lang.String getBuildVendorFingerprint() { - java.lang.Object ref = buildVendorFingerprint_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - buildVendorFingerprint_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public com.google.protobuf.ByteString - getBuildVendorFingerprintBytes() { - java.lang.Object ref = buildVendorFingerprint_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - buildVendorFingerprint_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public Builder setBuildVendorFingerprint( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00004000; - buildVendorFingerprint_ = value; - onChanged(); - return this; - } - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public Builder clearBuildVendorFingerprint() { - bitField0_ = (bitField0_ & ~0x00004000); - buildVendorFingerprint_ = getDefaultInstance().getBuildVendorFingerprint(); - onChanged(); - return this; - } - /** - * <code>optional string build_vendor_fingerprint = 32;</code> - */ - public Builder setBuildVendorFingerprintBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00004000; - buildVendorFingerprint_ = value; - onChanged(); - return this; - } - - private int testType_ ; - /** - * <code>optional int32 test_type = 33 [default = 0];</code> - */ - public boolean hasTestType() { - return ((bitField0_ & 0x00008000) == 0x00008000); - } - /** - * <code>optional int32 test_type = 33 [default = 0];</code> - */ - public int getTestType() { - return testType_; - } - /** - * <code>optional int32 test_type = 33 [default = 0];</code> - */ - public Builder setTestType(int value) { - bitField0_ |= 0x00008000; - testType_ = value; - onChanged(); - return this; - } - /** - * <code>optional int32 test_type = 33 [default = 0];</code> - */ - public Builder clearTestType() { - bitField0_ = (bitField0_ & ~0x00008000); - testType_ = 0; - onChanged(); - return this; - } - - private int passedTestCaseCount_ ; - /** - * <pre> - * attributes of Summary tag - * </pre> - * - * <code>optional int32 passed_test_case_count = 41;</code> - */ - public boolean hasPassedTestCaseCount() { - return ((bitField0_ & 0x00010000) == 0x00010000); - } - /** - * <pre> - * attributes of Summary tag - * </pre> - * - * <code>optional int32 passed_test_case_count = 41;</code> - */ - public int getPassedTestCaseCount() { - return passedTestCaseCount_; - } - /** - * <pre> - * attributes of Summary tag - * </pre> - * - * <code>optional int32 passed_test_case_count = 41;</code> - */ - public Builder setPassedTestCaseCount(int value) { - bitField0_ |= 0x00010000; - passedTestCaseCount_ = value; - onChanged(); - return this; - } - /** - * <pre> - * attributes of Summary tag - * </pre> - * - * <code>optional int32 passed_test_case_count = 41;</code> - */ - public Builder clearPassedTestCaseCount() { - bitField0_ = (bitField0_ & ~0x00010000); - passedTestCaseCount_ = 0; - onChanged(); - return this; - } - - private int failedTestCaseCount_ ; - /** - * <code>optional int32 failed_test_case_count = 42;</code> - */ - public boolean hasFailedTestCaseCount() { - return ((bitField0_ & 0x00020000) == 0x00020000); - } - /** - * <code>optional int32 failed_test_case_count = 42;</code> - */ - public int getFailedTestCaseCount() { - return failedTestCaseCount_; - } - /** - * <code>optional int32 failed_test_case_count = 42;</code> - */ - public Builder setFailedTestCaseCount(int value) { - bitField0_ |= 0x00020000; - failedTestCaseCount_ = value; - onChanged(); - return this; - } - /** - * <code>optional int32 failed_test_case_count = 42;</code> - */ - public Builder clearFailedTestCaseCount() { - bitField0_ = (bitField0_ & ~0x00020000); - failedTestCaseCount_ = 0; - onChanged(); - return this; - } - - private int modulesDone_ ; - /** - * <code>optional int32 modules_done = 43;</code> - */ - public boolean hasModulesDone() { - return ((bitField0_ & 0x00040000) == 0x00040000); - } - /** - * <code>optional int32 modules_done = 43;</code> - */ - public int getModulesDone() { - return modulesDone_; - } - /** - * <code>optional int32 modules_done = 43;</code> - */ - public Builder setModulesDone(int value) { - bitField0_ |= 0x00040000; - modulesDone_ = value; - onChanged(); - return this; - } - /** - * <code>optional int32 modules_done = 43;</code> - */ - public Builder clearModulesDone() { - bitField0_ = (bitField0_ & ~0x00040000); - modulesDone_ = 0; - onChanged(); - return this; - } - - private int modulesTotal_ ; - /** - * <code>optional int32 modules_total = 44;</code> - */ - public boolean hasModulesTotal() { - return ((bitField0_ & 0x00080000) == 0x00080000); - } - /** - * <code>optional int32 modules_total = 44;</code> - */ - public int getModulesTotal() { - return modulesTotal_; - } - /** - * <code>optional int32 modules_total = 44;</code> - */ - public Builder setModulesTotal(int value) { - bitField0_ |= 0x00080000; - modulesTotal_ = value; - onChanged(); - return this; - } - /** - * <code>optional int32 modules_total = 44;</code> - */ - public Builder clearModulesTotal() { - bitField0_ = (bitField0_ & ~0x00080000); - modulesTotal_ = 0; - onChanged(); - return this; - } - - private java.lang.Object infraLogPath_ = ""; - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public boolean hasInfraLogPath() { - return ((bitField0_ & 0x00100000) == 0x00100000); - } - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public java.lang.String getInfraLogPath() { - java.lang.Object ref = infraLogPath_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - infraLogPath_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public com.google.protobuf.ByteString - getInfraLogPathBytes() { - java.lang.Object ref = infraLogPath_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - infraLogPath_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public Builder setInfraLogPath( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00100000; - infraLogPath_ = value; - onChanged(); - return this; - } - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public Builder clearInfraLogPath() { - bitField0_ = (bitField0_ & ~0x00100000); - infraLogPath_ = getDefaultInstance().getInfraLogPath(); - onChanged(); - return this; - } - /** - * <pre> - * GCS path to the corresponding infra log file. - * </pre> - * - * <code>optional string infra_log_path = 51;</code> - */ - public Builder setInfraLogPathBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00100000; - infraLogPath_ = value; - onChanged(); - return this; - } - - private com.google.protobuf.LazyStringList repackedImagePath_ = com.google.protobuf.LazyStringArrayList.EMPTY; - private void ensureRepackedImagePathIsMutable() { - if (!((bitField0_ & 0x00200000) == 0x00200000)) { - repackedImagePath_ = new com.google.protobuf.LazyStringArrayList(repackedImagePath_); - bitField0_ |= 0x00200000; - } - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public com.google.protobuf.ProtocolStringList - getRepackedImagePathList() { - return repackedImagePath_.getUnmodifiableView(); - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public int getRepackedImagePathCount() { - return repackedImagePath_.size(); - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public java.lang.String getRepackedImagePath(int index) { - return repackedImagePath_.get(index); - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public com.google.protobuf.ByteString - getRepackedImagePathBytes(int index) { - return repackedImagePath_.getByteString(index); - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public Builder setRepackedImagePath( - int index, java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureRepackedImagePathIsMutable(); - repackedImagePath_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public Builder addRepackedImagePath( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureRepackedImagePathIsMutable(); - repackedImagePath_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public Builder addAllRepackedImagePath( - java.lang.Iterable<java.lang.String> values) { - ensureRepackedImagePathIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, repackedImagePath_); - onChanged(); - return this; - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public Builder clearRepackedImagePath() { - repackedImagePath_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00200000); - onChanged(); - return this; - } - /** - * <pre> - * GCS path to the repacked device[+GSI] image set. - * </pre> - * - * <code>repeated string repacked_image_path = 52;</code> - */ - public Builder addRepackedImagePathBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureRepackedImagePathIsMutable(); - repackedImagePath_.add(value); - onChanged(); - return this; - } - - private java.lang.Object vendorBuildId_ = ""; - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public boolean hasVendorBuildId() { - return ((bitField0_ & 0x00400000) == 0x00400000); - } - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public java.lang.String getVendorBuildId() { - java.lang.Object ref = vendorBuildId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - vendorBuildId_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public com.google.protobuf.ByteString - getVendorBuildIdBytes() { - java.lang.Object ref = vendorBuildId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - vendorBuildId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public Builder setVendorBuildId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00400000; - vendorBuildId_ = value; - onChanged(); - return this; - } - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public Builder clearVendorBuildId() { - bitField0_ = (bitField0_ & ~0x00400000); - vendorBuildId_ = getDefaultInstance().getVendorBuildId(); - onChanged(); - return this; - } - /** - * <pre> - * Fetch info used to fetch and flash certain builds for retry_prompt command. - * </pre> - * - * <code>optional string vendor_build_id = 61;</code> - */ - public Builder setVendorBuildIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00400000; - vendorBuildId_ = value; - onChanged(); - return this; - } - - private java.lang.Object gsiBuildId_ = ""; - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public boolean hasGsiBuildId() { - return ((bitField0_ & 0x00800000) == 0x00800000); - } - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public java.lang.String getGsiBuildId() { - java.lang.Object ref = gsiBuildId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - gsiBuildId_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public com.google.protobuf.ByteString - getGsiBuildIdBytes() { - java.lang.Object ref = gsiBuildId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - gsiBuildId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public Builder setGsiBuildId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00800000; - gsiBuildId_ = value; - onChanged(); - return this; - } - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public Builder clearGsiBuildId() { - bitField0_ = (bitField0_ & ~0x00800000); - gsiBuildId_ = getDefaultInstance().getGsiBuildId(); - onChanged(); - return this; - } - /** - * <code>optional string gsi_build_id = 62;</code> - */ - public Builder setGsiBuildIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00800000; - gsiBuildId_ = value; - onChanged(); - return this; - } - - private com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage scheduleConfig_ = null; - private com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage, com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder, com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder> scheduleConfigBuilder_; - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasScheduleConfig() { - return ((bitField0_ & 0x01000000) == 0x01000000); - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage getScheduleConfig() { - if (scheduleConfigBuilder_ == null) { - return scheduleConfig_ == null ? com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_; - } else { - return scheduleConfigBuilder_.getMessage(); - } - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setScheduleConfig(com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage value) { - if (scheduleConfigBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - scheduleConfig_ = value; - onChanged(); - } else { - scheduleConfigBuilder_.setMessage(value); - } - bitField0_ |= 0x01000000; - return this; - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setScheduleConfig( - com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder builderForValue) { - if (scheduleConfigBuilder_ == null) { - scheduleConfig_ = builderForValue.build(); - onChanged(); - } else { - scheduleConfigBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x01000000; - return this; - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder mergeScheduleConfig(com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage value) { - if (scheduleConfigBuilder_ == null) { - if (((bitField0_ & 0x01000000) == 0x01000000) && - scheduleConfig_ != null && - scheduleConfig_ != com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance()) { - scheduleConfig_ = - com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.newBuilder(scheduleConfig_).mergeFrom(value).buildPartial(); - } else { - scheduleConfig_ = value; - } - onChanged(); - } else { - scheduleConfigBuilder_.mergeFrom(value); - } - bitField0_ |= 0x01000000; - return this; - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder clearScheduleConfig() { - if (scheduleConfigBuilder_ == null) { - scheduleConfig_ = null; - onChanged(); - } else { - scheduleConfigBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x01000000); - return this; - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder getScheduleConfigBuilder() { - bitField0_ |= 0x01000000; - onChanged(); - return getScheduleConfigFieldBuilder().getBuilder(); - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder getScheduleConfigOrBuilder() { - if (scheduleConfigBuilder_ != null) { - return scheduleConfigBuilder_.getMessageOrBuilder(); - } else { - return scheduleConfig_ == null ? - com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_; - } - } - /** - * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code> - */ - private com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage, com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder, com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder> - getScheduleConfigFieldBuilder() { - if (scheduleConfigBuilder_ == null) { - scheduleConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage, com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder, com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder>( - getScheduleConfig(), - getParentForChildren(), - isClean()); - scheduleConfig_ = null; - } - return scheduleConfigBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.TestSuiteResultMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.TestSuiteResultMessage) - private static final com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage(); - } - - public static com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<TestSuiteResultMessage> - PARSER = new com.google.protobuf.AbstractParser<TestSuiteResultMessage>() { - public TestSuiteResultMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new TestSuiteResultMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<TestSuiteResultMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<TestSuiteResultMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_TestSuiteResultMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_TestSuiteResultMessage_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\034TestSuiteResultMessage.proto\022\013android." + - "vts\032\037TestScheduleConfigMessage.proto\"\226\005\n" + - "\026TestSuiteResultMessage\022\024\n\014access_token\030" + - "\001 \001(\t\022\023\n\013result_path\030\002 \001(\t\022\032\n\014boot_succe" + - "ss\030\003 \001(\010:\004true\022\016\n\006branch\030\013 \002(\t\022\016\n\006target" + - "\030\014 \002(\t\022\020\n\010build_id\030\r \002(\t\022\022\n\nsuite_plan\030\025" + - " \001(\t\022\025\n\rsuite_version\030\026 \001(\t\022\032\n\022suite_bui" + - "ld_number\030\027 \001(\t\022\022\n\nstart_time\030\030 \001(\003\022\020\n\010e" + - "nd_time\030\031 \001(\003\022\021\n\thost_name\030\032 \001(\t\022\022\n\nsuit" + - "e_name\030\033 \001(\t\022 \n\030build_system_fingerprint", - "\030\037 \001(\t\022 \n\030build_vendor_fingerprint\030 \001(\t" + - "\022\024\n\ttest_type\030! \001(\005:\0010\022\036\n\026passed_test_ca" + - "se_count\030) \001(\005\022\036\n\026failed_test_case_count" + - "\030* \001(\005\022\024\n\014modules_done\030+ \001(\005\022\025\n\rmodules_" + - "total\030, \001(\005\022\026\n\016infra_log_path\0303 \001(\t\022\033\n\023r" + - "epacked_image_path\0304 \003(\t\022\027\n\017vendor_build" + - "_id\030= \001(\t\022\024\n\014gsi_build_id\030> \001(\t\022D\n\017sched" + - "ule_config\030? \001(\0132\'.android.test.lab.Sche" + - "duleConfigMessageB\002\030\001B6\n\025com.android.vts" + - ".protoB\033TestSuiteResultMessageProtoP\000" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - com.android.vts.proto.TestScheduleConfigMessageOuterClass.getDescriptor(), - }, assigner); - internal_static_android_vts_TestSuiteResultMessage_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_android_vts_TestSuiteResultMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_TestSuiteResultMessage_descriptor, - new java.lang.String[] { "AccessToken", "ResultPath", "BootSuccess", "Branch", "Target", "BuildId", "SuitePlan", "SuiteVersion", "SuiteBuildNumber", "StartTime", "EndTime", "HostName", "SuiteName", "BuildSystemFingerprint", "BuildVendorFingerprint", "TestType", "PassedTestCaseCount", "FailedTestCaseCount", "ModulesDone", "ModulesTotal", "InfraLogPath", "RepackedImagePath", "VendorBuildId", "GsiBuildId", "ScheduleConfig", }); - com.android.vts.proto.TestScheduleConfigMessageOuterClass.getDescriptor(); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/src/main/java/com/android/vts/proto/VtsReportMessage.java b/src/main/java/com/android/vts/proto/VtsReportMessage.java deleted file mode 100644 index 84ed9b6..0000000 --- a/src/main/java/com/android/vts/proto/VtsReportMessage.java +++ /dev/null @@ -1,23382 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/VtsReportMessage.proto - -package com.android.vts.proto; - -public final class VtsReportMessage { - private VtsReportMessage() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - /** - * <pre> - * To specify test case execution result. - * </pre> - * - * Protobuf enum {@code android.vts.TestCaseResult} - */ - public enum TestCaseResult - implements com.google.protobuf.ProtocolMessageEnum { - /** - * <code>UNKNOWN_RESULT = 0;</code> - */ - UNKNOWN_RESULT(0), - /** - * <code>TEST_CASE_RESULT_PASS = 1;</code> - */ - TEST_CASE_RESULT_PASS(1), - /** - * <code>TEST_CASE_RESULT_FAIL = 2;</code> - */ - TEST_CASE_RESULT_FAIL(2), - /** - * <code>TEST_CASE_RESULT_SKIP = 3;</code> - */ - TEST_CASE_RESULT_SKIP(3), - /** - * <code>TEST_CASE_RESULT_EXCEPTION = 4;</code> - */ - TEST_CASE_RESULT_EXCEPTION(4), - /** - * <code>TEST_CASE_RESULT_TIMEOUT = 5;</code> - */ - TEST_CASE_RESULT_TIMEOUT(5), - ; - - /** - * <code>UNKNOWN_RESULT = 0;</code> - */ - public static final int UNKNOWN_RESULT_VALUE = 0; - /** - * <code>TEST_CASE_RESULT_PASS = 1;</code> - */ - public static final int TEST_CASE_RESULT_PASS_VALUE = 1; - /** - * <code>TEST_CASE_RESULT_FAIL = 2;</code> - */ - public static final int TEST_CASE_RESULT_FAIL_VALUE = 2; - /** - * <code>TEST_CASE_RESULT_SKIP = 3;</code> - */ - public static final int TEST_CASE_RESULT_SKIP_VALUE = 3; - /** - * <code>TEST_CASE_RESULT_EXCEPTION = 4;</code> - */ - public static final int TEST_CASE_RESULT_EXCEPTION_VALUE = 4; - /** - * <code>TEST_CASE_RESULT_TIMEOUT = 5;</code> - */ - public static final int TEST_CASE_RESULT_TIMEOUT_VALUE = 5; - - - public final int getNumber() { - return value; - } - - /** - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static TestCaseResult valueOf(int value) { - return forNumber(value); - } - - public static TestCaseResult forNumber(int value) { - switch (value) { - case 0: return UNKNOWN_RESULT; - case 1: return TEST_CASE_RESULT_PASS; - case 2: return TEST_CASE_RESULT_FAIL; - case 3: return TEST_CASE_RESULT_SKIP; - case 4: return TEST_CASE_RESULT_EXCEPTION; - case 5: return TEST_CASE_RESULT_TIMEOUT; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap<TestCaseResult> - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - TestCaseResult> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap<TestCaseResult>() { - public TestCaseResult findValueByNumber(int number) { - return TestCaseResult.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.getDescriptor().getEnumTypes().get(0); - } - - private static final TestCaseResult[] VALUES = values(); - - public static TestCaseResult valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private TestCaseResult(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:android.vts.TestCaseResult) - } - - /** - * <pre> - * To specify the VTS test type. - * </pre> - * - * Protobuf enum {@code android.vts.VtsTestType} - */ - public enum VtsTestType - implements com.google.protobuf.ProtocolMessageEnum { - /** - * <code>UNKNOWN_VTS_TESTTYPE = 0;</code> - */ - UNKNOWN_VTS_TESTTYPE(0), - /** - * <code>VTS_HOST_DRIVEN_STRUCTURAL = 1;</code> - */ - VTS_HOST_DRIVEN_STRUCTURAL(1), - /** - * <code>VTS_HOST_DRIVEN_FUZZING = 2;</code> - */ - VTS_HOST_DRIVEN_FUZZING(2), - /** - * <code>VTS_TARGET_SIDE_GTEST = 3;</code> - */ - VTS_TARGET_SIDE_GTEST(3), - /** - * <code>VTS_TARGET_SIDE_FUZZING = 4;</code> - */ - VTS_TARGET_SIDE_FUZZING(4), - ; - - /** - * <code>UNKNOWN_VTS_TESTTYPE = 0;</code> - */ - public static final int UNKNOWN_VTS_TESTTYPE_VALUE = 0; - /** - * <code>VTS_HOST_DRIVEN_STRUCTURAL = 1;</code> - */ - public static final int VTS_HOST_DRIVEN_STRUCTURAL_VALUE = 1; - /** - * <code>VTS_HOST_DRIVEN_FUZZING = 2;</code> - */ - public static final int VTS_HOST_DRIVEN_FUZZING_VALUE = 2; - /** - * <code>VTS_TARGET_SIDE_GTEST = 3;</code> - */ - public static final int VTS_TARGET_SIDE_GTEST_VALUE = 3; - /** - * <code>VTS_TARGET_SIDE_FUZZING = 4;</code> - */ - public static final int VTS_TARGET_SIDE_FUZZING_VALUE = 4; - - - public final int getNumber() { - return value; - } - - /** - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static VtsTestType valueOf(int value) { - return forNumber(value); - } - - public static VtsTestType forNumber(int value) { - switch (value) { - case 0: return UNKNOWN_VTS_TESTTYPE; - case 1: return VTS_HOST_DRIVEN_STRUCTURAL; - case 2: return VTS_HOST_DRIVEN_FUZZING; - case 3: return VTS_TARGET_SIDE_GTEST; - case 4: return VTS_TARGET_SIDE_FUZZING; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap<VtsTestType> - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - VtsTestType> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap<VtsTestType>() { - public VtsTestType findValueByNumber(int number) { - return VtsTestType.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.getDescriptor().getEnumTypes().get(1); - } - - private static final VtsTestType[] VALUES = values(); - - public static VtsTestType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private VtsTestType(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:android.vts.VtsTestType) - } - - /** - * Protobuf enum {@code android.vts.VtsProfilingRegressionMode} - */ - public enum VtsProfilingRegressionMode - implements com.google.protobuf.ProtocolMessageEnum { - /** - * <code>UNKNOWN_REGRESSION_MODE = 0;</code> - */ - UNKNOWN_REGRESSION_MODE(0), - /** - * <pre> - * disable analysis - * </pre> - * - * <code>VTS_REGRESSION_MODE_DISABLED = 1;</code> - */ - VTS_REGRESSION_MODE_DISABLED(1), - /** - * <pre> - * interpret increases in values as regression - * </pre> - * - * <code>VTS_REGRESSION_MODE_INCREASING = 2;</code> - */ - VTS_REGRESSION_MODE_INCREASING(2), - /** - * <pre> - * interpret decreases in values as regression - * </pre> - * - * <code>VTS_REGRESSION_MODE_DECREASING = 3;</code> - */ - VTS_REGRESSION_MODE_DECREASING(3), - ; - - /** - * <code>UNKNOWN_REGRESSION_MODE = 0;</code> - */ - public static final int UNKNOWN_REGRESSION_MODE_VALUE = 0; - /** - * <pre> - * disable analysis - * </pre> - * - * <code>VTS_REGRESSION_MODE_DISABLED = 1;</code> - */ - public static final int VTS_REGRESSION_MODE_DISABLED_VALUE = 1; - /** - * <pre> - * interpret increases in values as regression - * </pre> - * - * <code>VTS_REGRESSION_MODE_INCREASING = 2;</code> - */ - public static final int VTS_REGRESSION_MODE_INCREASING_VALUE = 2; - /** - * <pre> - * interpret decreases in values as regression - * </pre> - * - * <code>VTS_REGRESSION_MODE_DECREASING = 3;</code> - */ - public static final int VTS_REGRESSION_MODE_DECREASING_VALUE = 3; - - - public final int getNumber() { - return value; - } - - /** - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static VtsProfilingRegressionMode valueOf(int value) { - return forNumber(value); - } - - public static VtsProfilingRegressionMode forNumber(int value) { - switch (value) { - case 0: return UNKNOWN_REGRESSION_MODE; - case 1: return VTS_REGRESSION_MODE_DISABLED; - case 2: return VTS_REGRESSION_MODE_INCREASING; - case 3: return VTS_REGRESSION_MODE_DECREASING; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap<VtsProfilingRegressionMode> - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - VtsProfilingRegressionMode> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap<VtsProfilingRegressionMode>() { - public VtsProfilingRegressionMode findValueByNumber(int number) { - return VtsProfilingRegressionMode.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.getDescriptor().getEnumTypes().get(2); - } - - private static final VtsProfilingRegressionMode[] VALUES = values(); - - public static VtsProfilingRegressionMode valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private VtsProfilingRegressionMode(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:android.vts.VtsProfilingRegressionMode) - } - - /** - * Protobuf enum {@code android.vts.VtsProfilingType} - */ - public enum VtsProfilingType - implements com.google.protobuf.ProtocolMessageEnum { - /** - * <code>UNKNOWN_VTS_PROFILING_TYPE = 0;</code> - */ - UNKNOWN_VTS_PROFILING_TYPE(0), - /** - * <pre> - * for one sample which measures the time between two profiling points. - * </pre> - * - * <code>VTS_PROFILING_TYPE_TIMESTAMP = 1;</code> - */ - VTS_PROFILING_TYPE_TIMESTAMP(1), - /** - * <pre> - * for multiple single-type samples with labels. - * </pre> - * - * <code>VTS_PROFILING_TYPE_LABELED_VECTOR = 2;</code> - */ - VTS_PROFILING_TYPE_LABELED_VECTOR(2), - /** - * <pre> - * for multiple single-type samples without labels. - * </pre> - * - * <code>VTS_PROFILING_TYPE_UNLABELED_VECTOR = 3;</code> - */ - VTS_PROFILING_TYPE_UNLABELED_VECTOR(3), - ; - - /** - * <code>UNKNOWN_VTS_PROFILING_TYPE = 0;</code> - */ - public static final int UNKNOWN_VTS_PROFILING_TYPE_VALUE = 0; - /** - * <pre> - * for one sample which measures the time between two profiling points. - * </pre> - * - * <code>VTS_PROFILING_TYPE_TIMESTAMP = 1;</code> - */ - public static final int VTS_PROFILING_TYPE_TIMESTAMP_VALUE = 1; - /** - * <pre> - * for multiple single-type samples with labels. - * </pre> - * - * <code>VTS_PROFILING_TYPE_LABELED_VECTOR = 2;</code> - */ - public static final int VTS_PROFILING_TYPE_LABELED_VECTOR_VALUE = 2; - /** - * <pre> - * for multiple single-type samples without labels. - * </pre> - * - * <code>VTS_PROFILING_TYPE_UNLABELED_VECTOR = 3;</code> - */ - public static final int VTS_PROFILING_TYPE_UNLABELED_VECTOR_VALUE = 3; - - - public final int getNumber() { - return value; - } - - /** - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static VtsProfilingType valueOf(int value) { - return forNumber(value); - } - - public static VtsProfilingType forNumber(int value) { - switch (value) { - case 0: return UNKNOWN_VTS_PROFILING_TYPE; - case 1: return VTS_PROFILING_TYPE_TIMESTAMP; - case 2: return VTS_PROFILING_TYPE_LABELED_VECTOR; - case 3: return VTS_PROFILING_TYPE_UNLABELED_VECTOR; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap<VtsProfilingType> - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - VtsProfilingType> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap<VtsProfilingType>() { - public VtsProfilingType findValueByNumber(int number) { - return VtsProfilingType.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.getDescriptor().getEnumTypes().get(3); - } - - private static final VtsProfilingType[] VALUES = values(); - - public static VtsProfilingType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private VtsProfilingType(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:android.vts.VtsProfilingType) - } - - public interface AndroidDeviceInfoMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.AndroidDeviceInfoMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * product type (e.g., bullhead). - * </pre> - * - * <code>optional bytes product_type = 1;</code> - */ - boolean hasProductType(); - /** - * <pre> - * product type (e.g., bullhead). - * </pre> - * - * <code>optional bytes product_type = 1;</code> - */ - com.google.protobuf.ByteString getProductType(); - - /** - * <pre> - * product type variant (e.g., still bullhead or another name). - * </pre> - * - * <code>optional bytes product_variant = 2;</code> - */ - boolean hasProductVariant(); - /** - * <pre> - * product type variant (e.g., still bullhead or another name). - * </pre> - * - * <code>optional bytes product_variant = 2;</code> - */ - com.google.protobuf.ByteString getProductVariant(); - - /** - * <pre> - * build type (e.g., userdebug). - * </pre> - * - * <code>optional bytes build_flavor = 11;</code> - */ - boolean hasBuildFlavor(); - /** - * <pre> - * build type (e.g., userdebug). - * </pre> - * - * <code>optional bytes build_flavor = 11;</code> - */ - com.google.protobuf.ByteString getBuildFlavor(); - - /** - * <pre> - * Android Build ID. - * </pre> - * - * <code>optional bytes build_id = 12;</code> - */ - boolean hasBuildId(); - /** - * <pre> - * Android Build ID. - * </pre> - * - * <code>optional bytes build_id = 12;</code> - */ - com.google.protobuf.ByteString getBuildId(); - - /** - * <pre> - * branch name (e.g., master or nyc-dev). - * </pre> - * - * <code>optional bytes branch = 21;</code> - */ - boolean hasBranch(); - /** - * <pre> - * branch name (e.g., master or nyc-dev). - * </pre> - * - * <code>optional bytes branch = 21;</code> - */ - com.google.protobuf.ByteString getBranch(); - - /** - * <pre> - * build alias implies the branch name. - * </pre> - * - * <code>optional bytes build_alias = 22;</code> - */ - boolean hasBuildAlias(); - /** - * <pre> - * build alias implies the branch name. - * </pre> - * - * <code>optional bytes build_alias = 22;</code> - */ - com.google.protobuf.ByteString getBuildAlias(); - - /** - * <pre> - * API level - * </pre> - * - * <code>optional bytes api_level = 31;</code> - */ - boolean hasApiLevel(); - /** - * <pre> - * API level - * </pre> - * - * <code>optional bytes api_level = 31;</code> - */ - com.google.protobuf.ByteString getApiLevel(); - - /** - * <pre> - * ABI name that is current in use for the test - * </pre> - * - * <code>optional bytes abi_name = 51;</code> - */ - boolean hasAbiName(); - /** - * <pre> - * ABI name that is current in use for the test - * </pre> - * - * <code>optional bytes abi_name = 51;</code> - */ - com.google.protobuf.ByteString getAbiName(); - - /** - * <pre> - * ABI bitness that is current in use for the test. Example: '32', '64', - * </pre> - * - * <code>optional bytes abi_bitness = 52;</code> - */ - boolean hasAbiBitness(); - /** - * <pre> - * ABI bitness that is current in use for the test. Example: '32', '64', - * </pre> - * - * <code>optional bytes abi_bitness = 52;</code> - */ - com.google.protobuf.ByteString getAbiBitness(); - - /** - * <pre> - * Device USB serial number - * </pre> - * - * <code>optional bytes serial = 101;</code> - */ - boolean hasSerial(); - /** - * <pre> - * Device USB serial number - * </pre> - * - * <code>optional bytes serial = 101;</code> - */ - com.google.protobuf.ByteString getSerial(); - } - /** - * <pre> - * To specify a call flow event. - * </pre> - * - * Protobuf type {@code android.vts.AndroidDeviceInfoMessage} - */ - public static final class AndroidDeviceInfoMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.AndroidDeviceInfoMessage) - AndroidDeviceInfoMessageOrBuilder { - // Use AndroidDeviceInfoMessage.newBuilder() to construct. - private AndroidDeviceInfoMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private AndroidDeviceInfoMessage() { - productType_ = com.google.protobuf.ByteString.EMPTY; - productVariant_ = com.google.protobuf.ByteString.EMPTY; - buildFlavor_ = com.google.protobuf.ByteString.EMPTY; - buildId_ = com.google.protobuf.ByteString.EMPTY; - branch_ = com.google.protobuf.ByteString.EMPTY; - buildAlias_ = com.google.protobuf.ByteString.EMPTY; - apiLevel_ = com.google.protobuf.ByteString.EMPTY; - abiName_ = com.google.protobuf.ByteString.EMPTY; - abiBitness_ = com.google.protobuf.ByteString.EMPTY; - serial_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private AndroidDeviceInfoMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - productType_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - productVariant_ = input.readBytes(); - break; - } - case 90: { - bitField0_ |= 0x00000004; - buildFlavor_ = input.readBytes(); - break; - } - case 98: { - bitField0_ |= 0x00000008; - buildId_ = input.readBytes(); - break; - } - case 170: { - bitField0_ |= 0x00000010; - branch_ = input.readBytes(); - break; - } - case 178: { - bitField0_ |= 0x00000020; - buildAlias_ = input.readBytes(); - break; - } - case 250: { - bitField0_ |= 0x00000040; - apiLevel_ = input.readBytes(); - break; - } - case 410: { - bitField0_ |= 0x00000080; - abiName_ = input.readBytes(); - break; - } - case 418: { - bitField0_ |= 0x00000100; - abiBitness_ = input.readBytes(); - break; - } - case 810: { - bitField0_ |= 0x00000200; - serial_ = input.readBytes(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidDeviceInfoMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidDeviceInfoMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.class, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder.class); - } - - private int bitField0_; - public static final int PRODUCT_TYPE_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString productType_; - /** - * <pre> - * product type (e.g., bullhead). - * </pre> - * - * <code>optional bytes product_type = 1;</code> - */ - public boolean hasProductType() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * product type (e.g., bullhead). - * </pre> - * - * <code>optional bytes product_type = 1;</code> - */ - public com.google.protobuf.ByteString getProductType() { - return productType_; - } - - public static final int PRODUCT_VARIANT_FIELD_NUMBER = 2; - private com.google.protobuf.ByteString productVariant_; - /** - * <pre> - * product type variant (e.g., still bullhead or another name). - * </pre> - * - * <code>optional bytes product_variant = 2;</code> - */ - public boolean hasProductVariant() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * product type variant (e.g., still bullhead or another name). - * </pre> - * - * <code>optional bytes product_variant = 2;</code> - */ - public com.google.protobuf.ByteString getProductVariant() { - return productVariant_; - } - - public static final int BUILD_FLAVOR_FIELD_NUMBER = 11; - private com.google.protobuf.ByteString buildFlavor_; - /** - * <pre> - * build type (e.g., userdebug). - * </pre> - * - * <code>optional bytes build_flavor = 11;</code> - */ - public boolean hasBuildFlavor() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * build type (e.g., userdebug). - * </pre> - * - * <code>optional bytes build_flavor = 11;</code> - */ - public com.google.protobuf.ByteString getBuildFlavor() { - return buildFlavor_; - } - - public static final int BUILD_ID_FIELD_NUMBER = 12; - private com.google.protobuf.ByteString buildId_; - /** - * <pre> - * Android Build ID. - * </pre> - * - * <code>optional bytes build_id = 12;</code> - */ - public boolean hasBuildId() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * Android Build ID. - * </pre> - * - * <code>optional bytes build_id = 12;</code> - */ - public com.google.protobuf.ByteString getBuildId() { - return buildId_; - } - - public static final int BRANCH_FIELD_NUMBER = 21; - private com.google.protobuf.ByteString branch_; - /** - * <pre> - * branch name (e.g., master or nyc-dev). - * </pre> - * - * <code>optional bytes branch = 21;</code> - */ - public boolean hasBranch() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * branch name (e.g., master or nyc-dev). - * </pre> - * - * <code>optional bytes branch = 21;</code> - */ - public com.google.protobuf.ByteString getBranch() { - return branch_; - } - - public static final int BUILD_ALIAS_FIELD_NUMBER = 22; - private com.google.protobuf.ByteString buildAlias_; - /** - * <pre> - * build alias implies the branch name. - * </pre> - * - * <code>optional bytes build_alias = 22;</code> - */ - public boolean hasBuildAlias() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - /** - * <pre> - * build alias implies the branch name. - * </pre> - * - * <code>optional bytes build_alias = 22;</code> - */ - public com.google.protobuf.ByteString getBuildAlias() { - return buildAlias_; - } - - public static final int API_LEVEL_FIELD_NUMBER = 31; - private com.google.protobuf.ByteString apiLevel_; - /** - * <pre> - * API level - * </pre> - * - * <code>optional bytes api_level = 31;</code> - */ - public boolean hasApiLevel() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <pre> - * API level - * </pre> - * - * <code>optional bytes api_level = 31;</code> - */ - public com.google.protobuf.ByteString getApiLevel() { - return apiLevel_; - } - - public static final int ABI_NAME_FIELD_NUMBER = 51; - private com.google.protobuf.ByteString abiName_; - /** - * <pre> - * ABI name that is current in use for the test - * </pre> - * - * <code>optional bytes abi_name = 51;</code> - */ - public boolean hasAbiName() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - /** - * <pre> - * ABI name that is current in use for the test - * </pre> - * - * <code>optional bytes abi_name = 51;</code> - */ - public com.google.protobuf.ByteString getAbiName() { - return abiName_; - } - - public static final int ABI_BITNESS_FIELD_NUMBER = 52; - private com.google.protobuf.ByteString abiBitness_; - /** - * <pre> - * ABI bitness that is current in use for the test. Example: '32', '64', - * </pre> - * - * <code>optional bytes abi_bitness = 52;</code> - */ - public boolean hasAbiBitness() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - /** - * <pre> - * ABI bitness that is current in use for the test. Example: '32', '64', - * </pre> - * - * <code>optional bytes abi_bitness = 52;</code> - */ - public com.google.protobuf.ByteString getAbiBitness() { - return abiBitness_; - } - - public static final int SERIAL_FIELD_NUMBER = 101; - private com.google.protobuf.ByteString serial_; - /** - * <pre> - * Device USB serial number - * </pre> - * - * <code>optional bytes serial = 101;</code> - */ - public boolean hasSerial() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - /** - * <pre> - * Device USB serial number - * </pre> - * - * <code>optional bytes serial = 101;</code> - */ - public com.google.protobuf.ByteString getSerial() { - return serial_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, productType_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, productVariant_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(11, buildFlavor_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(12, buildId_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(21, branch_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBytes(22, buildAlias_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeBytes(31, apiLevel_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeBytes(51, abiName_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - output.writeBytes(52, abiBitness_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - output.writeBytes(101, serial_); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, productType_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, productVariant_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(11, buildFlavor_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(12, buildId_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(21, branch_); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(22, buildAlias_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(31, apiLevel_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(51, abiName_); - } - if (((bitField0_ & 0x00000100) == 0x00000100)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(52, abiBitness_); - } - if (((bitField0_ & 0x00000200) == 0x00000200)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(101, serial_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage other = (com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage) obj; - - boolean result = true; - result = result && (hasProductType() == other.hasProductType()); - if (hasProductType()) { - result = result && getProductType() - .equals(other.getProductType()); - } - result = result && (hasProductVariant() == other.hasProductVariant()); - if (hasProductVariant()) { - result = result && getProductVariant() - .equals(other.getProductVariant()); - } - result = result && (hasBuildFlavor() == other.hasBuildFlavor()); - if (hasBuildFlavor()) { - result = result && getBuildFlavor() - .equals(other.getBuildFlavor()); - } - result = result && (hasBuildId() == other.hasBuildId()); - if (hasBuildId()) { - result = result && getBuildId() - .equals(other.getBuildId()); - } - result = result && (hasBranch() == other.hasBranch()); - if (hasBranch()) { - result = result && getBranch() - .equals(other.getBranch()); - } - result = result && (hasBuildAlias() == other.hasBuildAlias()); - if (hasBuildAlias()) { - result = result && getBuildAlias() - .equals(other.getBuildAlias()); - } - result = result && (hasApiLevel() == other.hasApiLevel()); - if (hasApiLevel()) { - result = result && getApiLevel() - .equals(other.getApiLevel()); - } - result = result && (hasAbiName() == other.hasAbiName()); - if (hasAbiName()) { - result = result && getAbiName() - .equals(other.getAbiName()); - } - result = result && (hasAbiBitness() == other.hasAbiBitness()); - if (hasAbiBitness()) { - result = result && getAbiBitness() - .equals(other.getAbiBitness()); - } - result = result && (hasSerial() == other.hasSerial()); - if (hasSerial()) { - result = result && getSerial() - .equals(other.getSerial()); - } - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasProductType()) { - hash = (37 * hash) + PRODUCT_TYPE_FIELD_NUMBER; - hash = (53 * hash) + getProductType().hashCode(); - } - if (hasProductVariant()) { - hash = (37 * hash) + PRODUCT_VARIANT_FIELD_NUMBER; - hash = (53 * hash) + getProductVariant().hashCode(); - } - if (hasBuildFlavor()) { - hash = (37 * hash) + BUILD_FLAVOR_FIELD_NUMBER; - hash = (53 * hash) + getBuildFlavor().hashCode(); - } - if (hasBuildId()) { - hash = (37 * hash) + BUILD_ID_FIELD_NUMBER; - hash = (53 * hash) + getBuildId().hashCode(); - } - if (hasBranch()) { - hash = (37 * hash) + BRANCH_FIELD_NUMBER; - hash = (53 * hash) + getBranch().hashCode(); - } - if (hasBuildAlias()) { - hash = (37 * hash) + BUILD_ALIAS_FIELD_NUMBER; - hash = (53 * hash) + getBuildAlias().hashCode(); - } - if (hasApiLevel()) { - hash = (37 * hash) + API_LEVEL_FIELD_NUMBER; - hash = (53 * hash) + getApiLevel().hashCode(); - } - if (hasAbiName()) { - hash = (37 * hash) + ABI_NAME_FIELD_NUMBER; - hash = (53 * hash) + getAbiName().hashCode(); - } - if (hasAbiBitness()) { - hash = (37 * hash) + ABI_BITNESS_FIELD_NUMBER; - hash = (53 * hash) + getAbiBitness().hashCode(); - } - if (hasSerial()) { - hash = (37 * hash) + SERIAL_FIELD_NUMBER; - hash = (53 * hash) + getSerial().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a call flow event. - * </pre> - * - * Protobuf type {@code android.vts.AndroidDeviceInfoMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.AndroidDeviceInfoMessage) - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidDeviceInfoMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidDeviceInfoMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.class, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - productType_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - productVariant_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000002); - buildFlavor_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000004); - buildId_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000008); - branch_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000010); - buildAlias_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000020); - apiLevel_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000040); - abiName_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000080); - abiBitness_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000100); - serial_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidDeviceInfoMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage build() { - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage result = new com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.productType_ = productType_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.productVariant_ = productVariant_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.buildFlavor_ = buildFlavor_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.buildId_ = buildId_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.branch_ = branch_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000020; - } - result.buildAlias_ = buildAlias_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000040; - } - result.apiLevel_ = apiLevel_; - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000080; - } - result.abiName_ = abiName_; - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000100; - } - result.abiBitness_ = abiBitness_; - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { - to_bitField0_ |= 0x00000200; - } - result.serial_ = serial_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.getDefaultInstance()) return this; - if (other.hasProductType()) { - setProductType(other.getProductType()); - } - if (other.hasProductVariant()) { - setProductVariant(other.getProductVariant()); - } - if (other.hasBuildFlavor()) { - setBuildFlavor(other.getBuildFlavor()); - } - if (other.hasBuildId()) { - setBuildId(other.getBuildId()); - } - if (other.hasBranch()) { - setBranch(other.getBranch()); - } - if (other.hasBuildAlias()) { - setBuildAlias(other.getBuildAlias()); - } - if (other.hasApiLevel()) { - setApiLevel(other.getApiLevel()); - } - if (other.hasAbiName()) { - setAbiName(other.getAbiName()); - } - if (other.hasAbiBitness()) { - setAbiBitness(other.getAbiBitness()); - } - if (other.hasSerial()) { - setSerial(other.getSerial()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString productType_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * product type (e.g., bullhead). - * </pre> - * - * <code>optional bytes product_type = 1;</code> - */ - public boolean hasProductType() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * product type (e.g., bullhead). - * </pre> - * - * <code>optional bytes product_type = 1;</code> - */ - public com.google.protobuf.ByteString getProductType() { - return productType_; - } - /** - * <pre> - * product type (e.g., bullhead). - * </pre> - * - * <code>optional bytes product_type = 1;</code> - */ - public Builder setProductType(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - productType_ = value; - onChanged(); - return this; - } - /** - * <pre> - * product type (e.g., bullhead). - * </pre> - * - * <code>optional bytes product_type = 1;</code> - */ - public Builder clearProductType() { - bitField0_ = (bitField0_ & ~0x00000001); - productType_ = getDefaultInstance().getProductType(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString productVariant_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * product type variant (e.g., still bullhead or another name). - * </pre> - * - * <code>optional bytes product_variant = 2;</code> - */ - public boolean hasProductVariant() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * product type variant (e.g., still bullhead or another name). - * </pre> - * - * <code>optional bytes product_variant = 2;</code> - */ - public com.google.protobuf.ByteString getProductVariant() { - return productVariant_; - } - /** - * <pre> - * product type variant (e.g., still bullhead or another name). - * </pre> - * - * <code>optional bytes product_variant = 2;</code> - */ - public Builder setProductVariant(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - productVariant_ = value; - onChanged(); - return this; - } - /** - * <pre> - * product type variant (e.g., still bullhead or another name). - * </pre> - * - * <code>optional bytes product_variant = 2;</code> - */ - public Builder clearProductVariant() { - bitField0_ = (bitField0_ & ~0x00000002); - productVariant_ = getDefaultInstance().getProductVariant(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString buildFlavor_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * build type (e.g., userdebug). - * </pre> - * - * <code>optional bytes build_flavor = 11;</code> - */ - public boolean hasBuildFlavor() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * build type (e.g., userdebug). - * </pre> - * - * <code>optional bytes build_flavor = 11;</code> - */ - public com.google.protobuf.ByteString getBuildFlavor() { - return buildFlavor_; - } - /** - * <pre> - * build type (e.g., userdebug). - * </pre> - * - * <code>optional bytes build_flavor = 11;</code> - */ - public Builder setBuildFlavor(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - buildFlavor_ = value; - onChanged(); - return this; - } - /** - * <pre> - * build type (e.g., userdebug). - * </pre> - * - * <code>optional bytes build_flavor = 11;</code> - */ - public Builder clearBuildFlavor() { - bitField0_ = (bitField0_ & ~0x00000004); - buildFlavor_ = getDefaultInstance().getBuildFlavor(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString buildId_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * Android Build ID. - * </pre> - * - * <code>optional bytes build_id = 12;</code> - */ - public boolean hasBuildId() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * Android Build ID. - * </pre> - * - * <code>optional bytes build_id = 12;</code> - */ - public com.google.protobuf.ByteString getBuildId() { - return buildId_; - } - /** - * <pre> - * Android Build ID. - * </pre> - * - * <code>optional bytes build_id = 12;</code> - */ - public Builder setBuildId(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - buildId_ = value; - onChanged(); - return this; - } - /** - * <pre> - * Android Build ID. - * </pre> - * - * <code>optional bytes build_id = 12;</code> - */ - public Builder clearBuildId() { - bitField0_ = (bitField0_ & ~0x00000008); - buildId_ = getDefaultInstance().getBuildId(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString branch_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * branch name (e.g., master or nyc-dev). - * </pre> - * - * <code>optional bytes branch = 21;</code> - */ - public boolean hasBranch() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * branch name (e.g., master or nyc-dev). - * </pre> - * - * <code>optional bytes branch = 21;</code> - */ - public com.google.protobuf.ByteString getBranch() { - return branch_; - } - /** - * <pre> - * branch name (e.g., master or nyc-dev). - * </pre> - * - * <code>optional bytes branch = 21;</code> - */ - public Builder setBranch(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - branch_ = value; - onChanged(); - return this; - } - /** - * <pre> - * branch name (e.g., master or nyc-dev). - * </pre> - * - * <code>optional bytes branch = 21;</code> - */ - public Builder clearBranch() { - bitField0_ = (bitField0_ & ~0x00000010); - branch_ = getDefaultInstance().getBranch(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString buildAlias_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * build alias implies the branch name. - * </pre> - * - * <code>optional bytes build_alias = 22;</code> - */ - public boolean hasBuildAlias() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - /** - * <pre> - * build alias implies the branch name. - * </pre> - * - * <code>optional bytes build_alias = 22;</code> - */ - public com.google.protobuf.ByteString getBuildAlias() { - return buildAlias_; - } - /** - * <pre> - * build alias implies the branch name. - * </pre> - * - * <code>optional bytes build_alias = 22;</code> - */ - public Builder setBuildAlias(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - buildAlias_ = value; - onChanged(); - return this; - } - /** - * <pre> - * build alias implies the branch name. - * </pre> - * - * <code>optional bytes build_alias = 22;</code> - */ - public Builder clearBuildAlias() { - bitField0_ = (bitField0_ & ~0x00000020); - buildAlias_ = getDefaultInstance().getBuildAlias(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString apiLevel_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * API level - * </pre> - * - * <code>optional bytes api_level = 31;</code> - */ - public boolean hasApiLevel() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <pre> - * API level - * </pre> - * - * <code>optional bytes api_level = 31;</code> - */ - public com.google.protobuf.ByteString getApiLevel() { - return apiLevel_; - } - /** - * <pre> - * API level - * </pre> - * - * <code>optional bytes api_level = 31;</code> - */ - public Builder setApiLevel(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000040; - apiLevel_ = value; - onChanged(); - return this; - } - /** - * <pre> - * API level - * </pre> - * - * <code>optional bytes api_level = 31;</code> - */ - public Builder clearApiLevel() { - bitField0_ = (bitField0_ & ~0x00000040); - apiLevel_ = getDefaultInstance().getApiLevel(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString abiName_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * ABI name that is current in use for the test - * </pre> - * - * <code>optional bytes abi_name = 51;</code> - */ - public boolean hasAbiName() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - /** - * <pre> - * ABI name that is current in use for the test - * </pre> - * - * <code>optional bytes abi_name = 51;</code> - */ - public com.google.protobuf.ByteString getAbiName() { - return abiName_; - } - /** - * <pre> - * ABI name that is current in use for the test - * </pre> - * - * <code>optional bytes abi_name = 51;</code> - */ - public Builder setAbiName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000080; - abiName_ = value; - onChanged(); - return this; - } - /** - * <pre> - * ABI name that is current in use for the test - * </pre> - * - * <code>optional bytes abi_name = 51;</code> - */ - public Builder clearAbiName() { - bitField0_ = (bitField0_ & ~0x00000080); - abiName_ = getDefaultInstance().getAbiName(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString abiBitness_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * ABI bitness that is current in use for the test. Example: '32', '64', - * </pre> - * - * <code>optional bytes abi_bitness = 52;</code> - */ - public boolean hasAbiBitness() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - /** - * <pre> - * ABI bitness that is current in use for the test. Example: '32', '64', - * </pre> - * - * <code>optional bytes abi_bitness = 52;</code> - */ - public com.google.protobuf.ByteString getAbiBitness() { - return abiBitness_; - } - /** - * <pre> - * ABI bitness that is current in use for the test. Example: '32', '64', - * </pre> - * - * <code>optional bytes abi_bitness = 52;</code> - */ - public Builder setAbiBitness(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000100; - abiBitness_ = value; - onChanged(); - return this; - } - /** - * <pre> - * ABI bitness that is current in use for the test. Example: '32', '64', - * </pre> - * - * <code>optional bytes abi_bitness = 52;</code> - */ - public Builder clearAbiBitness() { - bitField0_ = (bitField0_ & ~0x00000100); - abiBitness_ = getDefaultInstance().getAbiBitness(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString serial_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * Device USB serial number - * </pre> - * - * <code>optional bytes serial = 101;</code> - */ - public boolean hasSerial() { - return ((bitField0_ & 0x00000200) == 0x00000200); - } - /** - * <pre> - * Device USB serial number - * </pre> - * - * <code>optional bytes serial = 101;</code> - */ - public com.google.protobuf.ByteString getSerial() { - return serial_; - } - /** - * <pre> - * Device USB serial number - * </pre> - * - * <code>optional bytes serial = 101;</code> - */ - public Builder setSerial(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000200; - serial_ = value; - onChanged(); - return this; - } - /** - * <pre> - * Device USB serial number - * </pre> - * - * <code>optional bytes serial = 101;</code> - */ - public Builder clearSerial() { - bitField0_ = (bitField0_ & ~0x00000200); - serial_ = getDefaultInstance().getSerial(); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.AndroidDeviceInfoMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.AndroidDeviceInfoMessage) - private static final com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<AndroidDeviceInfoMessage> - PARSER = new com.google.protobuf.AbstractParser<AndroidDeviceInfoMessage>() { - public AndroidDeviceInfoMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new AndroidDeviceInfoMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<AndroidDeviceInfoMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<AndroidDeviceInfoMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface AndroidBuildInfoOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.AndroidBuildInfo) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * build ID. - * </pre> - * - * <code>optional bytes id = 1;</code> - */ - boolean hasId(); - /** - * <pre> - * build ID. - * </pre> - * - * <code>optional bytes id = 1;</code> - */ - com.google.protobuf.ByteString getId(); - - /** - * <pre> - * device name (e.g., bullhead). - * </pre> - * - * <code>optional bytes name = 11;</code> - */ - boolean hasName(); - /** - * <pre> - * device name (e.g., bullhead). - * </pre> - * - * <code>optional bytes name = 11;</code> - */ - com.google.protobuf.ByteString getName(); - - /** - * <pre> - * build type (e.g., userdebug) - * </pre> - * - * <code>optional bytes build_type = 12;</code> - */ - boolean hasBuildType(); - /** - * <pre> - * build type (e.g., userdebug) - * </pre> - * - * <code>optional bytes build_type = 12;</code> - */ - com.google.protobuf.ByteString getBuildType(); - - /** - * <pre> - * branch name (e.g., master or nyc-dev) - * </pre> - * - * <code>optional bytes branch = 13;</code> - */ - boolean hasBranch(); - /** - * <pre> - * branch name (e.g., master or nyc-dev) - * </pre> - * - * <code>optional bytes branch = 13;</code> - */ - com.google.protobuf.ByteString getBranch(); - - /** - * <pre> - * indicates the latest commit information of each branch (e.g., xml format). - * </pre> - * - * <code>optional bytes build_summary = 21;</code> - */ - boolean hasBuildSummary(); - /** - * <pre> - * indicates the latest commit information of each branch (e.g., xml format). - * </pre> - * - * <code>optional bytes build_summary = 21;</code> - */ - com.google.protobuf.ByteString getBuildSummary(); - } - /** - * <pre> - * To specify build info. - * </pre> - * - * Protobuf type {@code android.vts.AndroidBuildInfo} - */ - public static final class AndroidBuildInfo extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.AndroidBuildInfo) - AndroidBuildInfoOrBuilder { - // Use AndroidBuildInfo.newBuilder() to construct. - private AndroidBuildInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private AndroidBuildInfo() { - id_ = com.google.protobuf.ByteString.EMPTY; - name_ = com.google.protobuf.ByteString.EMPTY; - buildType_ = com.google.protobuf.ByteString.EMPTY; - branch_ = com.google.protobuf.ByteString.EMPTY; - buildSummary_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private AndroidBuildInfo( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - id_ = input.readBytes(); - break; - } - case 90: { - bitField0_ |= 0x00000002; - name_ = input.readBytes(); - break; - } - case 98: { - bitField0_ |= 0x00000004; - buildType_ = input.readBytes(); - break; - } - case 106: { - bitField0_ |= 0x00000008; - branch_ = input.readBytes(); - break; - } - case 170: { - bitField0_ |= 0x00000010; - buildSummary_ = input.readBytes(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidBuildInfo_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidBuildInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.class, com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.Builder.class); - } - - private int bitField0_; - public static final int ID_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString id_; - /** - * <pre> - * build ID. - * </pre> - * - * <code>optional bytes id = 1;</code> - */ - public boolean hasId() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * build ID. - * </pre> - * - * <code>optional bytes id = 1;</code> - */ - public com.google.protobuf.ByteString getId() { - return id_; - } - - public static final int NAME_FIELD_NUMBER = 11; - private com.google.protobuf.ByteString name_; - /** - * <pre> - * device name (e.g., bullhead). - * </pre> - * - * <code>optional bytes name = 11;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * device name (e.g., bullhead). - * </pre> - * - * <code>optional bytes name = 11;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - - public static final int BUILD_TYPE_FIELD_NUMBER = 12; - private com.google.protobuf.ByteString buildType_; - /** - * <pre> - * build type (e.g., userdebug) - * </pre> - * - * <code>optional bytes build_type = 12;</code> - */ - public boolean hasBuildType() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * build type (e.g., userdebug) - * </pre> - * - * <code>optional bytes build_type = 12;</code> - */ - public com.google.protobuf.ByteString getBuildType() { - return buildType_; - } - - public static final int BRANCH_FIELD_NUMBER = 13; - private com.google.protobuf.ByteString branch_; - /** - * <pre> - * branch name (e.g., master or nyc-dev) - * </pre> - * - * <code>optional bytes branch = 13;</code> - */ - public boolean hasBranch() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * branch name (e.g., master or nyc-dev) - * </pre> - * - * <code>optional bytes branch = 13;</code> - */ - public com.google.protobuf.ByteString getBranch() { - return branch_; - } - - public static final int BUILD_SUMMARY_FIELD_NUMBER = 21; - private com.google.protobuf.ByteString buildSummary_; - /** - * <pre> - * indicates the latest commit information of each branch (e.g., xml format). - * </pre> - * - * <code>optional bytes build_summary = 21;</code> - */ - public boolean hasBuildSummary() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * indicates the latest commit information of each branch (e.g., xml format). - * </pre> - * - * <code>optional bytes build_summary = 21;</code> - */ - public com.google.protobuf.ByteString getBuildSummary() { - return buildSummary_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, id_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(11, name_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(12, buildType_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(13, branch_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(21, buildSummary_); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, id_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(11, name_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(12, buildType_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(13, branch_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(21, buildSummary_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.AndroidBuildInfo)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo other = (com.android.vts.proto.VtsReportMessage.AndroidBuildInfo) obj; - - boolean result = true; - result = result && (hasId() == other.hasId()); - if (hasId()) { - result = result && getId() - .equals(other.getId()); - } - result = result && (hasName() == other.hasName()); - if (hasName()) { - result = result && getName() - .equals(other.getName()); - } - result = result && (hasBuildType() == other.hasBuildType()); - if (hasBuildType()) { - result = result && getBuildType() - .equals(other.getBuildType()); - } - result = result && (hasBranch() == other.hasBranch()); - if (hasBranch()) { - result = result && getBranch() - .equals(other.getBranch()); - } - result = result && (hasBuildSummary() == other.hasBuildSummary()); - if (hasBuildSummary()) { - result = result && getBuildSummary() - .equals(other.getBuildSummary()); - } - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasId()) { - hash = (37 * hash) + ID_FIELD_NUMBER; - hash = (53 * hash) + getId().hashCode(); - } - if (hasName()) { - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - } - if (hasBuildType()) { - hash = (37 * hash) + BUILD_TYPE_FIELD_NUMBER; - hash = (53 * hash) + getBuildType().hashCode(); - } - if (hasBranch()) { - hash = (37 * hash) + BRANCH_FIELD_NUMBER; - hash = (53 * hash) + getBranch().hashCode(); - } - if (hasBuildSummary()) { - hash = (37 * hash) + BUILD_SUMMARY_FIELD_NUMBER; - hash = (53 * hash) + getBuildSummary().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.AndroidBuildInfo prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify build info. - * </pre> - * - * Protobuf type {@code android.vts.AndroidBuildInfo} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.AndroidBuildInfo) - com.android.vts.proto.VtsReportMessage.AndroidBuildInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidBuildInfo_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidBuildInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.class, com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - id_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - name_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000002); - buildType_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000004); - branch_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000008); - buildSummary_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_AndroidBuildInfo_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfo getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfo build() { - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfo buildPartial() { - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo result = new com.android.vts.proto.VtsReportMessage.AndroidBuildInfo(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.id_ = id_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.name_ = name_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.buildType_ = buildType_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.branch_ = branch_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.buildSummary_ = buildSummary_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.AndroidBuildInfo) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.AndroidBuildInfo)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.AndroidBuildInfo other) { - if (other == com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.getDefaultInstance()) return this; - if (other.hasId()) { - setId(other.getId()); - } - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasBuildType()) { - setBuildType(other.getBuildType()); - } - if (other.hasBranch()) { - setBranch(other.getBranch()); - } - if (other.hasBuildSummary()) { - setBuildSummary(other.getBuildSummary()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.AndroidBuildInfo) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString id_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * build ID. - * </pre> - * - * <code>optional bytes id = 1;</code> - */ - public boolean hasId() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * build ID. - * </pre> - * - * <code>optional bytes id = 1;</code> - */ - public com.google.protobuf.ByteString getId() { - return id_; - } - /** - * <pre> - * build ID. - * </pre> - * - * <code>optional bytes id = 1;</code> - */ - public Builder setId(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - id_ = value; - onChanged(); - return this; - } - /** - * <pre> - * build ID. - * </pre> - * - * <code>optional bytes id = 1;</code> - */ - public Builder clearId() { - bitField0_ = (bitField0_ & ~0x00000001); - id_ = getDefaultInstance().getId(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString name_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * device name (e.g., bullhead). - * </pre> - * - * <code>optional bytes name = 11;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * device name (e.g., bullhead). - * </pre> - * - * <code>optional bytes name = 11;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - /** - * <pre> - * device name (e.g., bullhead). - * </pre> - * - * <code>optional bytes name = 11;</code> - */ - public Builder setName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - return this; - } - /** - * <pre> - * device name (e.g., bullhead). - * </pre> - * - * <code>optional bytes name = 11;</code> - */ - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000002); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString buildType_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * build type (e.g., userdebug) - * </pre> - * - * <code>optional bytes build_type = 12;</code> - */ - public boolean hasBuildType() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * build type (e.g., userdebug) - * </pre> - * - * <code>optional bytes build_type = 12;</code> - */ - public com.google.protobuf.ByteString getBuildType() { - return buildType_; - } - /** - * <pre> - * build type (e.g., userdebug) - * </pre> - * - * <code>optional bytes build_type = 12;</code> - */ - public Builder setBuildType(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - buildType_ = value; - onChanged(); - return this; - } - /** - * <pre> - * build type (e.g., userdebug) - * </pre> - * - * <code>optional bytes build_type = 12;</code> - */ - public Builder clearBuildType() { - bitField0_ = (bitField0_ & ~0x00000004); - buildType_ = getDefaultInstance().getBuildType(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString branch_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * branch name (e.g., master or nyc-dev) - * </pre> - * - * <code>optional bytes branch = 13;</code> - */ - public boolean hasBranch() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * branch name (e.g., master or nyc-dev) - * </pre> - * - * <code>optional bytes branch = 13;</code> - */ - public com.google.protobuf.ByteString getBranch() { - return branch_; - } - /** - * <pre> - * branch name (e.g., master or nyc-dev) - * </pre> - * - * <code>optional bytes branch = 13;</code> - */ - public Builder setBranch(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - branch_ = value; - onChanged(); - return this; - } - /** - * <pre> - * branch name (e.g., master or nyc-dev) - * </pre> - * - * <code>optional bytes branch = 13;</code> - */ - public Builder clearBranch() { - bitField0_ = (bitField0_ & ~0x00000008); - branch_ = getDefaultInstance().getBranch(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString buildSummary_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * indicates the latest commit information of each branch (e.g., xml format). - * </pre> - * - * <code>optional bytes build_summary = 21;</code> - */ - public boolean hasBuildSummary() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * indicates the latest commit information of each branch (e.g., xml format). - * </pre> - * - * <code>optional bytes build_summary = 21;</code> - */ - public com.google.protobuf.ByteString getBuildSummary() { - return buildSummary_; - } - /** - * <pre> - * indicates the latest commit information of each branch (e.g., xml format). - * </pre> - * - * <code>optional bytes build_summary = 21;</code> - */ - public Builder setBuildSummary(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - buildSummary_ = value; - onChanged(); - return this; - } - /** - * <pre> - * indicates the latest commit information of each branch (e.g., xml format). - * </pre> - * - * <code>optional bytes build_summary = 21;</code> - */ - public Builder clearBuildSummary() { - bitField0_ = (bitField0_ & ~0x00000010); - buildSummary_ = getDefaultInstance().getBuildSummary(); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.AndroidBuildInfo) - } - - // @@protoc_insertion_point(class_scope:android.vts.AndroidBuildInfo) - private static final com.android.vts.proto.VtsReportMessage.AndroidBuildInfo DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.AndroidBuildInfo(); - } - - public static com.android.vts.proto.VtsReportMessage.AndroidBuildInfo getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<AndroidBuildInfo> - PARSER = new com.google.protobuf.AbstractParser<AndroidBuildInfo>() { - public AndroidBuildInfo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new AndroidBuildInfo(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<AndroidBuildInfo> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<AndroidBuildInfo> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfo getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface VtsHostInfoOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.VtsHostInfo) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * the host name (i.e., full domain name). - * </pre> - * - * <code>optional bytes hostname = 1;</code> - */ - boolean hasHostname(); - /** - * <pre> - * the host name (i.e., full domain name). - * </pre> - * - * <code>optional bytes hostname = 1;</code> - */ - com.google.protobuf.ByteString getHostname(); - } - /** - * <pre> - * To specify the information about a host node. - * </pre> - * - * Protobuf type {@code android.vts.VtsHostInfo} - */ - public static final class VtsHostInfo extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.VtsHostInfo) - VtsHostInfoOrBuilder { - // Use VtsHostInfo.newBuilder() to construct. - private VtsHostInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private VtsHostInfo() { - hostname_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private VtsHostInfo( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - hostname_ = input.readBytes(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_VtsHostInfo_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_VtsHostInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.VtsHostInfo.class, com.android.vts.proto.VtsReportMessage.VtsHostInfo.Builder.class); - } - - private int bitField0_; - public static final int HOSTNAME_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString hostname_; - /** - * <pre> - * the host name (i.e., full domain name). - * </pre> - * - * <code>optional bytes hostname = 1;</code> - */ - public boolean hasHostname() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the host name (i.e., full domain name). - * </pre> - * - * <code>optional bytes hostname = 1;</code> - */ - public com.google.protobuf.ByteString getHostname() { - return hostname_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, hostname_); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, hostname_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.VtsHostInfo)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.VtsHostInfo other = (com.android.vts.proto.VtsReportMessage.VtsHostInfo) obj; - - boolean result = true; - result = result && (hasHostname() == other.hasHostname()); - if (hasHostname()) { - result = result && getHostname() - .equals(other.getHostname()); - } - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasHostname()) { - hash = (37 * hash) + HOSTNAME_FIELD_NUMBER; - hash = (53 * hash) + getHostname().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.VtsHostInfo prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify the information about a host node. - * </pre> - * - * Protobuf type {@code android.vts.VtsHostInfo} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.VtsHostInfo) - com.android.vts.proto.VtsReportMessage.VtsHostInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_VtsHostInfo_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_VtsHostInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.VtsHostInfo.class, com.android.vts.proto.VtsReportMessage.VtsHostInfo.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.VtsHostInfo.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - hostname_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_VtsHostInfo_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.VtsHostInfo getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.VtsHostInfo.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.VtsHostInfo build() { - com.android.vts.proto.VtsReportMessage.VtsHostInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.VtsHostInfo buildPartial() { - com.android.vts.proto.VtsReportMessage.VtsHostInfo result = new com.android.vts.proto.VtsReportMessage.VtsHostInfo(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.hostname_ = hostname_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.VtsHostInfo) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.VtsHostInfo)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.VtsHostInfo other) { - if (other == com.android.vts.proto.VtsReportMessage.VtsHostInfo.getDefaultInstance()) return this; - if (other.hasHostname()) { - setHostname(other.getHostname()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.VtsHostInfo parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.VtsHostInfo) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString hostname_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * the host name (i.e., full domain name). - * </pre> - * - * <code>optional bytes hostname = 1;</code> - */ - public boolean hasHostname() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the host name (i.e., full domain name). - * </pre> - * - * <code>optional bytes hostname = 1;</code> - */ - public com.google.protobuf.ByteString getHostname() { - return hostname_; - } - /** - * <pre> - * the host name (i.e., full domain name). - * </pre> - * - * <code>optional bytes hostname = 1;</code> - */ - public Builder setHostname(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - hostname_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the host name (i.e., full domain name). - * </pre> - * - * <code>optional bytes hostname = 1;</code> - */ - public Builder clearHostname() { - bitField0_ = (bitField0_ & ~0x00000001); - hostname_ = getDefaultInstance().getHostname(); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.VtsHostInfo) - } - - // @@protoc_insertion_point(class_scope:android.vts.VtsHostInfo) - private static final com.android.vts.proto.VtsReportMessage.VtsHostInfo DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.VtsHostInfo(); - } - - public static com.android.vts.proto.VtsReportMessage.VtsHostInfo getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<VtsHostInfo> - PARSER = new com.google.protobuf.AbstractParser<VtsHostInfo>() { - public VtsHostInfo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new VtsHostInfo(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<VtsHostInfo> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<VtsHostInfo> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.VtsHostInfo getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface TestCaseReportMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.TestCaseReportMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * the test case name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - boolean hasName(); - /** - * <pre> - * the test case name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - com.google.protobuf.ByteString getName(); - - /** - * <pre> - * the test result. - * </pre> - * - * <code>optional .android.vts.TestCaseResult test_result = 11;</code> - */ - boolean hasTestResult(); - /** - * <pre> - * the test result. - * </pre> - * - * <code>optional .android.vts.TestCaseResult test_result = 11;</code> - */ - com.android.vts.proto.VtsReportMessage.TestCaseResult getTestResult(); - - /** - * <pre> - * execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 21;</code> - */ - boolean hasStartTimestamp(); - /** - * <pre> - * execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 21;</code> - */ - long getStartTimestamp(); - - /** - * <code>optional int64 end_timestamp = 22;</code> - */ - boolean hasEndTimestamp(); - /** - * <code>optional int64 end_timestamp = 22;</code> - */ - long getEndTimestamp(); - - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> - getCoverageList(); - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - com.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index); - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - int getCoverageCount(); - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> - getCoverageOrBuilderList(); - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder( - int index); - - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> - getProfilingList(); - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getProfiling(int index); - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - int getProfilingCount(); - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> - getProfilingOrBuilderList(); - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder getProfilingOrBuilder( - int index); - - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> - getSystraceList(); - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated com.android.vts.proto.VtsReportMessage.SystraceReportMessage getSystrace(int index); - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated int getSystraceCount(); - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated java.util.List<? extends com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> - getSystraceOrBuilderList(); - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder getSystraceOrBuilder( - int index); - - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> - getLogList(); - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - com.android.vts.proto.VtsReportMessage.LogMessage getLog(int index); - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - int getLogCount(); - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> - getLogOrBuilderList(); - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder getLogOrBuilder( - int index); - } - /** - * <pre> - * To specify a test case execution report. - * </pre> - * - * Protobuf type {@code android.vts.TestCaseReportMessage} - */ - public static final class TestCaseReportMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.TestCaseReportMessage) - TestCaseReportMessageOrBuilder { - // Use TestCaseReportMessage.newBuilder() to construct. - private TestCaseReportMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private TestCaseReportMessage() { - name_ = com.google.protobuf.ByteString.EMPTY; - testResult_ = 0; - startTimestamp_ = 0L; - endTimestamp_ = 0L; - coverage_ = java.util.Collections.emptyList(); - profiling_ = java.util.Collections.emptyList(); - systrace_ = java.util.Collections.emptyList(); - log_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private TestCaseReportMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - name_ = input.readBytes(); - break; - } - case 88: { - int rawValue = input.readEnum(); - com.android.vts.proto.VtsReportMessage.TestCaseResult value = com.android.vts.proto.VtsReportMessage.TestCaseResult.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(11, rawValue); - } else { - bitField0_ |= 0x00000002; - testResult_ = rawValue; - } - break; - } - case 168: { - bitField0_ |= 0x00000004; - startTimestamp_ = input.readInt64(); - break; - } - case 176: { - bitField0_ |= 0x00000008; - endTimestamp_ = input.readInt64(); - break; - } - case 250: { - if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) { - coverage_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.CoverageReportMessage>(); - mutable_bitField0_ |= 0x00000010; - } - coverage_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.CoverageReportMessage.PARSER, extensionRegistry)); - break; - } - case 330: { - if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) { - profiling_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage>(); - mutable_bitField0_ |= 0x00000020; - } - profiling_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.PARSER, extensionRegistry)); - break; - } - case 338: { - if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) { - systrace_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.SystraceReportMessage>(); - mutable_bitField0_ |= 0x00000040; - } - systrace_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.SystraceReportMessage.PARSER, extensionRegistry)); - break; - } - case 810: { - if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) { - log_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.LogMessage>(); - mutable_bitField0_ |= 0x00000080; - } - log_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.LogMessage.PARSER, extensionRegistry)); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) { - coverage_ = java.util.Collections.unmodifiableList(coverage_); - } - if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) { - profiling_ = java.util.Collections.unmodifiableList(profiling_); - } - if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) { - systrace_ = java.util.Collections.unmodifiableList(systrace_); - } - if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) { - log_ = java.util.Collections.unmodifiableList(log_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestCaseReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestCaseReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.class, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder.class); - } - - private int bitField0_; - public static final int NAME_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString name_; - /** - * <pre> - * the test case name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the test case name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - - public static final int TEST_RESULT_FIELD_NUMBER = 11; - private int testResult_; - /** - * <pre> - * the test result. - * </pre> - * - * <code>optional .android.vts.TestCaseResult test_result = 11;</code> - */ - public boolean hasTestResult() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * the test result. - * </pre> - * - * <code>optional .android.vts.TestCaseResult test_result = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseResult getTestResult() { - com.android.vts.proto.VtsReportMessage.TestCaseResult result = com.android.vts.proto.VtsReportMessage.TestCaseResult.valueOf(testResult_); - return result == null ? com.android.vts.proto.VtsReportMessage.TestCaseResult.UNKNOWN_RESULT : result; - } - - public static final int START_TIMESTAMP_FIELD_NUMBER = 21; - private long startTimestamp_; - /** - * <pre> - * execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 21;</code> - */ - public boolean hasStartTimestamp() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 21;</code> - */ - public long getStartTimestamp() { - return startTimestamp_; - } - - public static final int END_TIMESTAMP_FIELD_NUMBER = 22; - private long endTimestamp_; - /** - * <code>optional int64 end_timestamp = 22;</code> - */ - public boolean hasEndTimestamp() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <code>optional int64 end_timestamp = 22;</code> - */ - public long getEndTimestamp() { - return endTimestamp_; - } - - public static final int COVERAGE_FIELD_NUMBER = 31; - private java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> coverage_; - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> getCoverageList() { - return coverage_; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> - getCoverageOrBuilderList() { - return coverage_; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public int getCoverageCount() { - return coverage_.size(); - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index) { - return coverage_.get(index); - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder( - int index) { - return coverage_.get(index); - } - - public static final int PROFILING_FIELD_NUMBER = 41; - private java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> profiling_; - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> getProfilingList() { - return profiling_; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> - getProfilingOrBuilderList() { - return profiling_; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public int getProfilingCount() { - return profiling_.size(); - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getProfiling(int index) { - return profiling_.get(index); - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder getProfilingOrBuilder( - int index) { - return profiling_.get(index); - } - - public static final int SYSTRACE_FIELD_NUMBER = 42; - private java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> systrace_; - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> getSystraceList() { - return systrace_; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<? extends com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> - getSystraceOrBuilderList() { - return systrace_; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public int getSystraceCount() { - return systrace_.size(); - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage getSystrace(int index) { - return systrace_.get(index); - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder getSystraceOrBuilder( - int index) { - return systrace_.get(index); - } - - public static final int LOG_FIELD_NUMBER = 101; - private java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> log_; - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> getLogList() { - return log_; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> - getLogOrBuilderList() { - return log_; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public int getLogCount() { - return log_.size(); - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage getLog(int index) { - return log_.get(index); - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder getLogOrBuilder( - int index) { - return log_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, name_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeEnum(11, testResult_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeInt64(21, startTimestamp_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeInt64(22, endTimestamp_); - } - for (int i = 0; i < coverage_.size(); i++) { - output.writeMessage(31, coverage_.get(i)); - } - for (int i = 0; i < profiling_.size(); i++) { - output.writeMessage(41, profiling_.get(i)); - } - for (int i = 0; i < systrace_.size(); i++) { - output.writeMessage(42, systrace_.get(i)); - } - for (int i = 0; i < log_.size(); i++) { - output.writeMessage(101, log_.get(i)); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, name_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(11, testResult_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(21, startTimestamp_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(22, endTimestamp_); - } - for (int i = 0; i < coverage_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(31, coverage_.get(i)); - } - for (int i = 0; i < profiling_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(41, profiling_.get(i)); - } - for (int i = 0; i < systrace_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(42, systrace_.get(i)); - } - for (int i = 0; i < log_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(101, log_.get(i)); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.TestCaseReportMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage other = (com.android.vts.proto.VtsReportMessage.TestCaseReportMessage) obj; - - boolean result = true; - result = result && (hasName() == other.hasName()); - if (hasName()) { - result = result && getName() - .equals(other.getName()); - } - result = result && (hasTestResult() == other.hasTestResult()); - if (hasTestResult()) { - result = result && testResult_ == other.testResult_; - } - result = result && (hasStartTimestamp() == other.hasStartTimestamp()); - if (hasStartTimestamp()) { - result = result && (getStartTimestamp() - == other.getStartTimestamp()); - } - result = result && (hasEndTimestamp() == other.hasEndTimestamp()); - if (hasEndTimestamp()) { - result = result && (getEndTimestamp() - == other.getEndTimestamp()); - } - result = result && getCoverageList() - .equals(other.getCoverageList()); - result = result && getProfilingList() - .equals(other.getProfilingList()); - result = result && getSystraceList() - .equals(other.getSystraceList()); - result = result && getLogList() - .equals(other.getLogList()); - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasName()) { - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - } - if (hasTestResult()) { - hash = (37 * hash) + TEST_RESULT_FIELD_NUMBER; - hash = (53 * hash) + testResult_; - } - if (hasStartTimestamp()) { - hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getStartTimestamp()); - } - if (hasEndTimestamp()) { - hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getEndTimestamp()); - } - if (getCoverageCount() > 0) { - hash = (37 * hash) + COVERAGE_FIELD_NUMBER; - hash = (53 * hash) + getCoverageList().hashCode(); - } - if (getProfilingCount() > 0) { - hash = (37 * hash) + PROFILING_FIELD_NUMBER; - hash = (53 * hash) + getProfilingList().hashCode(); - } - if (getSystraceCount() > 0) { - hash = (37 * hash) + SYSTRACE_FIELD_NUMBER; - hash = (53 * hash) + getSystraceList().hashCode(); - } - if (getLogCount() > 0) { - hash = (37 * hash) + LOG_FIELD_NUMBER; - hash = (53 * hash) + getLogList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.TestCaseReportMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a test case execution report. - * </pre> - * - * Protobuf type {@code android.vts.TestCaseReportMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.TestCaseReportMessage) - com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestCaseReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestCaseReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.class, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getCoverageFieldBuilder(); - getProfilingFieldBuilder(); - getSystraceFieldBuilder(); - getLogFieldBuilder(); - } - } - public Builder clear() { - super.clear(); - name_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - testResult_ = 0; - bitField0_ = (bitField0_ & ~0x00000002); - startTimestamp_ = 0L; - bitField0_ = (bitField0_ & ~0x00000004); - endTimestamp_ = 0L; - bitField0_ = (bitField0_ & ~0x00000008); - if (coverageBuilder_ == null) { - coverage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - } else { - coverageBuilder_.clear(); - } - if (profilingBuilder_ == null) { - profiling_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - } else { - profilingBuilder_.clear(); - } - if (systraceBuilder_ == null) { - systrace_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000040); - } else { - systraceBuilder_.clear(); - } - if (logBuilder_ == null) { - log_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - } else { - logBuilder_.clear(); - } - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestCaseReportMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage build() { - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage result = new com.android.vts.proto.VtsReportMessage.TestCaseReportMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.name_ = name_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.testResult_ = testResult_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.startTimestamp_ = startTimestamp_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.endTimestamp_ = endTimestamp_; - if (coverageBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010)) { - coverage_ = java.util.Collections.unmodifiableList(coverage_); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.coverage_ = coverage_; - } else { - result.coverage_ = coverageBuilder_.build(); - } - if (profilingBuilder_ == null) { - if (((bitField0_ & 0x00000020) == 0x00000020)) { - profiling_ = java.util.Collections.unmodifiableList(profiling_); - bitField0_ = (bitField0_ & ~0x00000020); - } - result.profiling_ = profiling_; - } else { - result.profiling_ = profilingBuilder_.build(); - } - if (systraceBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040)) { - systrace_ = java.util.Collections.unmodifiableList(systrace_); - bitField0_ = (bitField0_ & ~0x00000040); - } - result.systrace_ = systrace_; - } else { - result.systrace_ = systraceBuilder_.build(); - } - if (logBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080)) { - log_ = java.util.Collections.unmodifiableList(log_); - bitField0_ = (bitField0_ & ~0x00000080); - } - result.log_ = log_; - } else { - result.log_ = logBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.TestCaseReportMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.TestCaseReportMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.TestCaseReportMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.getDefaultInstance()) return this; - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasTestResult()) { - setTestResult(other.getTestResult()); - } - if (other.hasStartTimestamp()) { - setStartTimestamp(other.getStartTimestamp()); - } - if (other.hasEndTimestamp()) { - setEndTimestamp(other.getEndTimestamp()); - } - if (coverageBuilder_ == null) { - if (!other.coverage_.isEmpty()) { - if (coverage_.isEmpty()) { - coverage_ = other.coverage_; - bitField0_ = (bitField0_ & ~0x00000010); - } else { - ensureCoverageIsMutable(); - coverage_.addAll(other.coverage_); - } - onChanged(); - } - } else { - if (!other.coverage_.isEmpty()) { - if (coverageBuilder_.isEmpty()) { - coverageBuilder_.dispose(); - coverageBuilder_ = null; - coverage_ = other.coverage_; - bitField0_ = (bitField0_ & ~0x00000010); - coverageBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getCoverageFieldBuilder() : null; - } else { - coverageBuilder_.addAllMessages(other.coverage_); - } - } - } - if (profilingBuilder_ == null) { - if (!other.profiling_.isEmpty()) { - if (profiling_.isEmpty()) { - profiling_ = other.profiling_; - bitField0_ = (bitField0_ & ~0x00000020); - } else { - ensureProfilingIsMutable(); - profiling_.addAll(other.profiling_); - } - onChanged(); - } - } else { - if (!other.profiling_.isEmpty()) { - if (profilingBuilder_.isEmpty()) { - profilingBuilder_.dispose(); - profilingBuilder_ = null; - profiling_ = other.profiling_; - bitField0_ = (bitField0_ & ~0x00000020); - profilingBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getProfilingFieldBuilder() : null; - } else { - profilingBuilder_.addAllMessages(other.profiling_); - } - } - } - if (systraceBuilder_ == null) { - if (!other.systrace_.isEmpty()) { - if (systrace_.isEmpty()) { - systrace_ = other.systrace_; - bitField0_ = (bitField0_ & ~0x00000040); - } else { - ensureSystraceIsMutable(); - systrace_.addAll(other.systrace_); - } - onChanged(); - } - } else { - if (!other.systrace_.isEmpty()) { - if (systraceBuilder_.isEmpty()) { - systraceBuilder_.dispose(); - systraceBuilder_ = null; - systrace_ = other.systrace_; - bitField0_ = (bitField0_ & ~0x00000040); - systraceBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getSystraceFieldBuilder() : null; - } else { - systraceBuilder_.addAllMessages(other.systrace_); - } - } - } - if (logBuilder_ == null) { - if (!other.log_.isEmpty()) { - if (log_.isEmpty()) { - log_ = other.log_; - bitField0_ = (bitField0_ & ~0x00000080); - } else { - ensureLogIsMutable(); - log_.addAll(other.log_); - } - onChanged(); - } - } else { - if (!other.log_.isEmpty()) { - if (logBuilder_.isEmpty()) { - logBuilder_.dispose(); - logBuilder_ = null; - log_ = other.log_; - bitField0_ = (bitField0_ & ~0x00000080); - logBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getLogFieldBuilder() : null; - } else { - logBuilder_.addAllMessages(other.log_); - } - } - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.TestCaseReportMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString name_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * the test case name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the test case name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - /** - * <pre> - * the test case name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public Builder setName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - name_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the test case name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000001); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - - private int testResult_ = 0; - /** - * <pre> - * the test result. - * </pre> - * - * <code>optional .android.vts.TestCaseResult test_result = 11;</code> - */ - public boolean hasTestResult() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * the test result. - * </pre> - * - * <code>optional .android.vts.TestCaseResult test_result = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseResult getTestResult() { - com.android.vts.proto.VtsReportMessage.TestCaseResult result = com.android.vts.proto.VtsReportMessage.TestCaseResult.valueOf(testResult_); - return result == null ? com.android.vts.proto.VtsReportMessage.TestCaseResult.UNKNOWN_RESULT : result; - } - /** - * <pre> - * the test result. - * </pre> - * - * <code>optional .android.vts.TestCaseResult test_result = 11;</code> - */ - public Builder setTestResult(com.android.vts.proto.VtsReportMessage.TestCaseResult value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - testResult_ = value.getNumber(); - onChanged(); - return this; - } - /** - * <pre> - * the test result. - * </pre> - * - * <code>optional .android.vts.TestCaseResult test_result = 11;</code> - */ - public Builder clearTestResult() { - bitField0_ = (bitField0_ & ~0x00000002); - testResult_ = 0; - onChanged(); - return this; - } - - private long startTimestamp_ ; - /** - * <pre> - * execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 21;</code> - */ - public boolean hasStartTimestamp() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 21;</code> - */ - public long getStartTimestamp() { - return startTimestamp_; - } - /** - * <pre> - * execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 21;</code> - */ - public Builder setStartTimestamp(long value) { - bitField0_ |= 0x00000004; - startTimestamp_ = value; - onChanged(); - return this; - } - /** - * <pre> - * execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 21;</code> - */ - public Builder clearStartTimestamp() { - bitField0_ = (bitField0_ & ~0x00000004); - startTimestamp_ = 0L; - onChanged(); - return this; - } - - private long endTimestamp_ ; - /** - * <code>optional int64 end_timestamp = 22;</code> - */ - public boolean hasEndTimestamp() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <code>optional int64 end_timestamp = 22;</code> - */ - public long getEndTimestamp() { - return endTimestamp_; - } - /** - * <code>optional int64 end_timestamp = 22;</code> - */ - public Builder setEndTimestamp(long value) { - bitField0_ |= 0x00000008; - endTimestamp_ = value; - onChanged(); - return this; - } - /** - * <code>optional int64 end_timestamp = 22;</code> - */ - public Builder clearEndTimestamp() { - bitField0_ = (bitField0_ & ~0x00000008); - endTimestamp_ = 0L; - onChanged(); - return this; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> coverage_ = - java.util.Collections.emptyList(); - private void ensureCoverageIsMutable() { - if (!((bitField0_ & 0x00000010) == 0x00000010)) { - coverage_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.CoverageReportMessage>(coverage_); - bitField0_ |= 0x00000010; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.CoverageReportMessage, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> coverageBuilder_; - - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> getCoverageList() { - if (coverageBuilder_ == null) { - return java.util.Collections.unmodifiableList(coverage_); - } else { - return coverageBuilder_.getMessageList(); - } - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public int getCoverageCount() { - if (coverageBuilder_ == null) { - return coverage_.size(); - } else { - return coverageBuilder_.getCount(); - } - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index) { - if (coverageBuilder_ == null) { - return coverage_.get(index); - } else { - return coverageBuilder_.getMessage(index); - } - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder setCoverage( - int index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.set(index, value); - onChanged(); - } else { - coverageBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder setCoverage( - int index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.set(index, builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder addCoverage(com.android.vts.proto.VtsReportMessage.CoverageReportMessage value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.add(value); - onChanged(); - } else { - coverageBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder addCoverage( - int index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.add(index, value); - onChanged(); - } else { - coverageBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder addCoverage( - com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.add(builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder addCoverage( - int index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.add(index, builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder addAllCoverage( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.CoverageReportMessage> values) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, coverage_); - onChanged(); - } else { - coverageBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder clearCoverage() { - if (coverageBuilder_ == null) { - coverage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - onChanged(); - } else { - coverageBuilder_.clear(); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public Builder removeCoverage(int index) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.remove(index); - onChanged(); - } else { - coverageBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder getCoverageBuilder( - int index) { - return getCoverageFieldBuilder().getBuilder(index); - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder( - int index) { - if (coverageBuilder_ == null) { - return coverage_.get(index); } else { - return coverageBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> - getCoverageOrBuilderList() { - if (coverageBuilder_ != null) { - return coverageBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(coverage_); - } - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder addCoverageBuilder() { - return getCoverageFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.CoverageReportMessage.getDefaultInstance()); - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder addCoverageBuilder( - int index) { - return getCoverageFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.getDefaultInstance()); - } - /** - * <pre> - * coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder> - getCoverageBuilderList() { - return getCoverageFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.CoverageReportMessage, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> - getCoverageFieldBuilder() { - if (coverageBuilder_ == null) { - coverageBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.CoverageReportMessage, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder>( - coverage_, - ((bitField0_ & 0x00000010) == 0x00000010), - getParentForChildren(), - isClean()); - coverage_ = null; - } - return coverageBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> profiling_ = - java.util.Collections.emptyList(); - private void ensureProfilingIsMutable() { - if (!((bitField0_ & 0x00000020) == 0x00000020)) { - profiling_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage>(profiling_); - bitField0_ |= 0x00000020; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> profilingBuilder_; - - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> getProfilingList() { - if (profilingBuilder_ == null) { - return java.util.Collections.unmodifiableList(profiling_); - } else { - return profilingBuilder_.getMessageList(); - } - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public int getProfilingCount() { - if (profilingBuilder_ == null) { - return profiling_.size(); - } else { - return profilingBuilder_.getCount(); - } - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getProfiling(int index) { - if (profilingBuilder_ == null) { - return profiling_.get(index); - } else { - return profilingBuilder_.getMessage(index); - } - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder setProfiling( - int index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage value) { - if (profilingBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureProfilingIsMutable(); - profiling_.set(index, value); - onChanged(); - } else { - profilingBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder setProfiling( - int index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder builderForValue) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - profiling_.set(index, builderForValue.build()); - onChanged(); - } else { - profilingBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder addProfiling(com.android.vts.proto.VtsReportMessage.ProfilingReportMessage value) { - if (profilingBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureProfilingIsMutable(); - profiling_.add(value); - onChanged(); - } else { - profilingBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder addProfiling( - int index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage value) { - if (profilingBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureProfilingIsMutable(); - profiling_.add(index, value); - onChanged(); - } else { - profilingBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder addProfiling( - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder builderForValue) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - profiling_.add(builderForValue.build()); - onChanged(); - } else { - profilingBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder addProfiling( - int index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder builderForValue) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - profiling_.add(index, builderForValue.build()); - onChanged(); - } else { - profilingBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder addAllProfiling( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> values) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, profiling_); - onChanged(); - } else { - profilingBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder clearProfiling() { - if (profilingBuilder_ == null) { - profiling_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - onChanged(); - } else { - profilingBuilder_.clear(); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public Builder removeProfiling(int index) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - profiling_.remove(index); - onChanged(); - } else { - profilingBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder getProfilingBuilder( - int index) { - return getProfilingFieldBuilder().getBuilder(index); - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder getProfilingOrBuilder( - int index) { - if (profilingBuilder_ == null) { - return profiling_.get(index); } else { - return profilingBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> - getProfilingOrBuilderList() { - if (profilingBuilder_ != null) { - return profilingBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(profiling_); - } - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder addProfilingBuilder() { - return getProfilingFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.getDefaultInstance()); - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder addProfilingBuilder( - int index) { - return getProfilingFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.getDefaultInstance()); - } - /** - * <pre> - * profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 41;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder> - getProfilingBuilderList() { - return getProfilingFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> - getProfilingFieldBuilder() { - if (profilingBuilder_ == null) { - profilingBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder>( - profiling_, - ((bitField0_ & 0x00000020) == 0x00000020), - getParentForChildren(), - isClean()); - profiling_ = null; - } - return profilingBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> systrace_ = - java.util.Collections.emptyList(); - private void ensureSystraceIsMutable() { - if (!((bitField0_ & 0x00000040) == 0x00000040)) { - systrace_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.SystraceReportMessage>(systrace_); - bitField0_ |= 0x00000040; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.SystraceReportMessage, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder, com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> systraceBuilder_; - - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> getSystraceList() { - if (systraceBuilder_ == null) { - return java.util.Collections.unmodifiableList(systrace_); - } else { - return systraceBuilder_.getMessageList(); - } - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public int getSystraceCount() { - if (systraceBuilder_ == null) { - return systrace_.size(); - } else { - return systraceBuilder_.getCount(); - } - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage getSystrace(int index) { - if (systraceBuilder_ == null) { - return systrace_.get(index); - } else { - return systraceBuilder_.getMessage(index); - } - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setSystrace( - int index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage value) { - if (systraceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSystraceIsMutable(); - systrace_.set(index, value); - onChanged(); - } else { - systraceBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setSystrace( - int index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder builderForValue) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - systrace_.set(index, builderForValue.build()); - onChanged(); - } else { - systraceBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addSystrace(com.android.vts.proto.VtsReportMessage.SystraceReportMessage value) { - if (systraceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSystraceIsMutable(); - systrace_.add(value); - onChanged(); - } else { - systraceBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addSystrace( - int index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage value) { - if (systraceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSystraceIsMutable(); - systrace_.add(index, value); - onChanged(); - } else { - systraceBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addSystrace( - com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder builderForValue) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - systrace_.add(builderForValue.build()); - onChanged(); - } else { - systraceBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addSystrace( - int index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder builderForValue) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - systrace_.add(index, builderForValue.build()); - onChanged(); - } else { - systraceBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addAllSystrace( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.SystraceReportMessage> values) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, systrace_); - onChanged(); - } else { - systraceBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder clearSystrace() { - if (systraceBuilder_ == null) { - systrace_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000040); - onChanged(); - } else { - systraceBuilder_.clear(); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder removeSystrace(int index) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - systrace_.remove(index); - onChanged(); - } else { - systraceBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder getSystraceBuilder( - int index) { - return getSystraceFieldBuilder().getBuilder(index); - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder getSystraceOrBuilder( - int index) { - if (systraceBuilder_ == null) { - return systrace_.get(index); } else { - return systraceBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<? extends com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> - getSystraceOrBuilderList() { - if (systraceBuilder_ != null) { - return systraceBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(systrace_); - } - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder addSystraceBuilder() { - return getSystraceFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.SystraceReportMessage.getDefaultInstance()); - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder addSystraceBuilder( - int index) { - return getSystraceFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.getDefaultInstance()); - } - /** - * <pre> - * systrace report message per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 42 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder> - getSystraceBuilderList() { - return getSystraceFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.SystraceReportMessage, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder, com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> - getSystraceFieldBuilder() { - if (systraceBuilder_ == null) { - systraceBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.SystraceReportMessage, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder, com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder>( - systrace_, - ((bitField0_ & 0x00000040) == 0x00000040), - getParentForChildren(), - isClean()); - systrace_ = null; - } - return systraceBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> log_ = - java.util.Collections.emptyList(); - private void ensureLogIsMutable() { - if (!((bitField0_ & 0x00000080) == 0x00000080)) { - log_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.LogMessage>(log_); - bitField0_ |= 0x00000080; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.LogMessage, com.android.vts.proto.VtsReportMessage.LogMessage.Builder, com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> logBuilder_; - - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> getLogList() { - if (logBuilder_ == null) { - return java.util.Collections.unmodifiableList(log_); - } else { - return logBuilder_.getMessageList(); - } - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public int getLogCount() { - if (logBuilder_ == null) { - return log_.size(); - } else { - return logBuilder_.getCount(); - } - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage getLog(int index) { - if (logBuilder_ == null) { - return log_.get(index); - } else { - return logBuilder_.getMessage(index); - } - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder setLog( - int index, com.android.vts.proto.VtsReportMessage.LogMessage value) { - if (logBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogIsMutable(); - log_.set(index, value); - onChanged(); - } else { - logBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder setLog( - int index, com.android.vts.proto.VtsReportMessage.LogMessage.Builder builderForValue) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - log_.set(index, builderForValue.build()); - onChanged(); - } else { - logBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder addLog(com.android.vts.proto.VtsReportMessage.LogMessage value) { - if (logBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogIsMutable(); - log_.add(value); - onChanged(); - } else { - logBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder addLog( - int index, com.android.vts.proto.VtsReportMessage.LogMessage value) { - if (logBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogIsMutable(); - log_.add(index, value); - onChanged(); - } else { - logBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder addLog( - com.android.vts.proto.VtsReportMessage.LogMessage.Builder builderForValue) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - log_.add(builderForValue.build()); - onChanged(); - } else { - logBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder addLog( - int index, com.android.vts.proto.VtsReportMessage.LogMessage.Builder builderForValue) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - log_.add(index, builderForValue.build()); - onChanged(); - } else { - logBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder addAllLog( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.LogMessage> values) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, log_); - onChanged(); - } else { - logBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder clearLog() { - if (logBuilder_ == null) { - log_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - onChanged(); - } else { - logBuilder_.clear(); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public Builder removeLog(int index) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - log_.remove(index); - onChanged(); - } else { - logBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage.Builder getLogBuilder( - int index) { - return getLogFieldBuilder().getBuilder(index); - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder getLogOrBuilder( - int index) { - if (logBuilder_ == null) { - return log_.get(index); } else { - return logBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> - getLogOrBuilderList() { - if (logBuilder_ != null) { - return logBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(log_); - } - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage.Builder addLogBuilder() { - return getLogFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.LogMessage.getDefaultInstance()); - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage.Builder addLogBuilder( - int index) { - return getLogFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.LogMessage.getDefaultInstance()); - } - /** - * <pre> - * log for each test case. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 101;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage.Builder> - getLogBuilderList() { - return getLogFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.LogMessage, com.android.vts.proto.VtsReportMessage.LogMessage.Builder, com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> - getLogFieldBuilder() { - if (logBuilder_ == null) { - logBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.LogMessage, com.android.vts.proto.VtsReportMessage.LogMessage.Builder, com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder>( - log_, - ((bitField0_ & 0x00000080) == 0x00000080), - getParentForChildren(), - isClean()); - log_ = null; - } - return logBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.TestCaseReportMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.TestCaseReportMessage) - private static final com.android.vts.proto.VtsReportMessage.TestCaseReportMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.TestCaseReportMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.TestCaseReportMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<TestCaseReportMessage> - PARSER = new com.google.protobuf.AbstractParser<TestCaseReportMessage>() { - public TestCaseReportMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new TestCaseReportMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<TestCaseReportMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<TestCaseReportMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface ProfilingReportMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.ProfilingReportMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * the instrumentation point name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - boolean hasName(); - /** - * <pre> - * the instrumentation point name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - com.google.protobuf.ByteString getName(); - - /** - * <code>optional .android.vts.VtsProfilingType type = 2;</code> - */ - boolean hasType(); - /** - * <code>optional .android.vts.VtsProfilingType type = 2;</code> - */ - com.android.vts.proto.VtsReportMessage.VtsProfilingType getType(); - - /** - * <code>optional .android.vts.VtsProfilingRegressionMode regression_mode = 3;</code> - */ - boolean hasRegressionMode(); - /** - * <code>optional .android.vts.VtsProfilingRegressionMode regression_mode = 3;</code> - */ - com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode getRegressionMode(); - - /** - * <pre> - * profiling start and end time stamp (for performance). - * </pre> - * - * <code>optional int64 start_timestamp = 11;</code> - */ - boolean hasStartTimestamp(); - /** - * <pre> - * profiling start and end time stamp (for performance). - * </pre> - * - * <code>optional int64 start_timestamp = 11;</code> - */ - long getStartTimestamp(); - - /** - * <code>optional int64 end_timestamp = 12;</code> - */ - boolean hasEndTimestamp(); - /** - * <code>optional int64 end_timestamp = 12;</code> - */ - long getEndTimestamp(); - - /** - * <code>repeated bytes label = 21;</code> - */ - java.util.List<com.google.protobuf.ByteString> getLabelList(); - /** - * <code>repeated bytes label = 21;</code> - */ - int getLabelCount(); - /** - * <code>repeated bytes label = 21;</code> - */ - com.google.protobuf.ByteString getLabel(int index); - - /** - * <code>repeated int64 value = 22;</code> - */ - java.util.List<java.lang.Long> getValueList(); - /** - * <code>repeated int64 value = 22;</code> - */ - int getValueCount(); - /** - * <code>repeated int64 value = 22;</code> - */ - long getValue(int index); - - /** - * <pre> - * x-axis and y-axis title labels when displaying the data as a graph - * </pre> - * - * <code>optional bytes x_axis_label = 31;</code> - */ - boolean hasXAxisLabel(); - /** - * <pre> - * x-axis and y-axis title labels when displaying the data as a graph - * </pre> - * - * <code>optional bytes x_axis_label = 31;</code> - */ - com.google.protobuf.ByteString getXAxisLabel(); - - /** - * <code>optional bytes y_axis_label = 32;</code> - */ - boolean hasYAxisLabel(); - /** - * <code>optional bytes y_axis_label = 32;</code> - */ - com.google.protobuf.ByteString getYAxisLabel(); - - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - java.util.List<com.google.protobuf.ByteString> getOptionsList(); - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - int getOptionsCount(); - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - com.google.protobuf.ByteString getOptions(int index); - } - /** - * <pre> - * To specify a profiling report. - * </pre> - * - * Protobuf type {@code android.vts.ProfilingReportMessage} - */ - public static final class ProfilingReportMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.ProfilingReportMessage) - ProfilingReportMessageOrBuilder { - // Use ProfilingReportMessage.newBuilder() to construct. - private ProfilingReportMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private ProfilingReportMessage() { - name_ = com.google.protobuf.ByteString.EMPTY; - type_ = 0; - regressionMode_ = 0; - startTimestamp_ = 0L; - endTimestamp_ = 0L; - label_ = java.util.Collections.emptyList(); - value_ = java.util.Collections.emptyList(); - xAxisLabel_ = com.google.protobuf.ByteString.EMPTY; - yAxisLabel_ = com.google.protobuf.ByteString.EMPTY; - options_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private ProfilingReportMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - name_ = input.readBytes(); - break; - } - case 16: { - int rawValue = input.readEnum(); - com.android.vts.proto.VtsReportMessage.VtsProfilingType value = com.android.vts.proto.VtsReportMessage.VtsProfilingType.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(2, rawValue); - } else { - bitField0_ |= 0x00000002; - type_ = rawValue; - } - break; - } - case 24: { - int rawValue = input.readEnum(); - com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode value = com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(3, rawValue); - } else { - bitField0_ |= 0x00000004; - regressionMode_ = rawValue; - } - break; - } - case 88: { - bitField0_ |= 0x00000008; - startTimestamp_ = input.readInt64(); - break; - } - case 96: { - bitField0_ |= 0x00000010; - endTimestamp_ = input.readInt64(); - break; - } - case 170: { - if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) { - label_ = new java.util.ArrayList<com.google.protobuf.ByteString>(); - mutable_bitField0_ |= 0x00000020; - } - label_.add(input.readBytes()); - break; - } - case 176: { - if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) { - value_ = new java.util.ArrayList<java.lang.Long>(); - mutable_bitField0_ |= 0x00000040; - } - value_.add(input.readInt64()); - break; - } - case 178: { - int length = input.readRawVarint32(); - int limit = input.pushLimit(length); - if (!((mutable_bitField0_ & 0x00000040) == 0x00000040) && input.getBytesUntilLimit() > 0) { - value_ = new java.util.ArrayList<java.lang.Long>(); - mutable_bitField0_ |= 0x00000040; - } - while (input.getBytesUntilLimit() > 0) { - value_.add(input.readInt64()); - } - input.popLimit(limit); - break; - } - case 250: { - bitField0_ |= 0x00000020; - xAxisLabel_ = input.readBytes(); - break; - } - case 258: { - bitField0_ |= 0x00000040; - yAxisLabel_ = input.readBytes(); - break; - } - case 330: { - if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) { - options_ = new java.util.ArrayList<com.google.protobuf.ByteString>(); - mutable_bitField0_ |= 0x00000200; - } - options_.add(input.readBytes()); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) { - label_ = java.util.Collections.unmodifiableList(label_); - } - if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) { - value_ = java.util.Collections.unmodifiableList(value_); - } - if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) { - options_ = java.util.Collections.unmodifiableList(options_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ProfilingReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ProfilingReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.class, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder.class); - } - - private int bitField0_; - public static final int NAME_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString name_; - /** - * <pre> - * the instrumentation point name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the instrumentation point name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - - public static final int TYPE_FIELD_NUMBER = 2; - private int type_; - /** - * <code>optional .android.vts.VtsProfilingType type = 2;</code> - */ - public boolean hasType() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <code>optional .android.vts.VtsProfilingType type = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsProfilingType getType() { - com.android.vts.proto.VtsReportMessage.VtsProfilingType result = com.android.vts.proto.VtsReportMessage.VtsProfilingType.valueOf(type_); - return result == null ? com.android.vts.proto.VtsReportMessage.VtsProfilingType.UNKNOWN_VTS_PROFILING_TYPE : result; - } - - public static final int REGRESSION_MODE_FIELD_NUMBER = 3; - private int regressionMode_; - /** - * <code>optional .android.vts.VtsProfilingRegressionMode regression_mode = 3;</code> - */ - public boolean hasRegressionMode() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <code>optional .android.vts.VtsProfilingRegressionMode regression_mode = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode getRegressionMode() { - com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode result = com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode.valueOf(regressionMode_); - return result == null ? com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE : result; - } - - public static final int START_TIMESTAMP_FIELD_NUMBER = 11; - private long startTimestamp_; - /** - * <pre> - * profiling start and end time stamp (for performance). - * </pre> - * - * <code>optional int64 start_timestamp = 11;</code> - */ - public boolean hasStartTimestamp() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * profiling start and end time stamp (for performance). - * </pre> - * - * <code>optional int64 start_timestamp = 11;</code> - */ - public long getStartTimestamp() { - return startTimestamp_; - } - - public static final int END_TIMESTAMP_FIELD_NUMBER = 12; - private long endTimestamp_; - /** - * <code>optional int64 end_timestamp = 12;</code> - */ - public boolean hasEndTimestamp() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <code>optional int64 end_timestamp = 12;</code> - */ - public long getEndTimestamp() { - return endTimestamp_; - } - - public static final int LABEL_FIELD_NUMBER = 21; - private java.util.List<com.google.protobuf.ByteString> label_; - /** - * <code>repeated bytes label = 21;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getLabelList() { - return label_; - } - /** - * <code>repeated bytes label = 21;</code> - */ - public int getLabelCount() { - return label_.size(); - } - /** - * <code>repeated bytes label = 21;</code> - */ - public com.google.protobuf.ByteString getLabel(int index) { - return label_.get(index); - } - - public static final int VALUE_FIELD_NUMBER = 22; - private java.util.List<java.lang.Long> value_; - /** - * <code>repeated int64 value = 22;</code> - */ - public java.util.List<java.lang.Long> - getValueList() { - return value_; - } - /** - * <code>repeated int64 value = 22;</code> - */ - public int getValueCount() { - return value_.size(); - } - /** - * <code>repeated int64 value = 22;</code> - */ - public long getValue(int index) { - return value_.get(index); - } - - public static final int X_AXIS_LABEL_FIELD_NUMBER = 31; - private com.google.protobuf.ByteString xAxisLabel_; - /** - * <pre> - * x-axis and y-axis title labels when displaying the data as a graph - * </pre> - * - * <code>optional bytes x_axis_label = 31;</code> - */ - public boolean hasXAxisLabel() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - /** - * <pre> - * x-axis and y-axis title labels when displaying the data as a graph - * </pre> - * - * <code>optional bytes x_axis_label = 31;</code> - */ - public com.google.protobuf.ByteString getXAxisLabel() { - return xAxisLabel_; - } - - public static final int Y_AXIS_LABEL_FIELD_NUMBER = 32; - private com.google.protobuf.ByteString yAxisLabel_; - /** - * <code>optional bytes y_axis_label = 32;</code> - */ - public boolean hasYAxisLabel() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <code>optional bytes y_axis_label = 32;</code> - */ - public com.google.protobuf.ByteString getYAxisLabel() { - return yAxisLabel_; - } - - public static final int OPTIONS_FIELD_NUMBER = 41; - private java.util.List<com.google.protobuf.ByteString> options_; - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getOptionsList() { - return options_; - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public int getOptionsCount() { - return options_.size(); - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public com.google.protobuf.ByteString getOptions(int index) { - return options_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, name_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeEnum(2, type_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeEnum(3, regressionMode_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeInt64(11, startTimestamp_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeInt64(12, endTimestamp_); - } - for (int i = 0; i < label_.size(); i++) { - output.writeBytes(21, label_.get(i)); - } - for (int i = 0; i < value_.size(); i++) { - output.writeInt64(22, value_.get(i)); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBytes(31, xAxisLabel_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeBytes(32, yAxisLabel_); - } - for (int i = 0; i < options_.size(); i++) { - output.writeBytes(41, options_.get(i)); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, name_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(2, type_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, regressionMode_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(11, startTimestamp_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(12, endTimestamp_); - } - { - int dataSize = 0; - for (int i = 0; i < label_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(label_.get(i)); - } - size += dataSize; - size += 2 * getLabelList().size(); - } - { - int dataSize = 0; - for (int i = 0; i < value_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeInt64SizeNoTag(value_.get(i)); - } - size += dataSize; - size += 2 * getValueList().size(); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(31, xAxisLabel_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(32, yAxisLabel_); - } - { - int dataSize = 0; - for (int i = 0; i < options_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(options_.get(i)); - } - size += dataSize; - size += 2 * getOptionsList().size(); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.ProfilingReportMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage other = (com.android.vts.proto.VtsReportMessage.ProfilingReportMessage) obj; - - boolean result = true; - result = result && (hasName() == other.hasName()); - if (hasName()) { - result = result && getName() - .equals(other.getName()); - } - result = result && (hasType() == other.hasType()); - if (hasType()) { - result = result && type_ == other.type_; - } - result = result && (hasRegressionMode() == other.hasRegressionMode()); - if (hasRegressionMode()) { - result = result && regressionMode_ == other.regressionMode_; - } - result = result && (hasStartTimestamp() == other.hasStartTimestamp()); - if (hasStartTimestamp()) { - result = result && (getStartTimestamp() - == other.getStartTimestamp()); - } - result = result && (hasEndTimestamp() == other.hasEndTimestamp()); - if (hasEndTimestamp()) { - result = result && (getEndTimestamp() - == other.getEndTimestamp()); - } - result = result && getLabelList() - .equals(other.getLabelList()); - result = result && getValueList() - .equals(other.getValueList()); - result = result && (hasXAxisLabel() == other.hasXAxisLabel()); - if (hasXAxisLabel()) { - result = result && getXAxisLabel() - .equals(other.getXAxisLabel()); - } - result = result && (hasYAxisLabel() == other.hasYAxisLabel()); - if (hasYAxisLabel()) { - result = result && getYAxisLabel() - .equals(other.getYAxisLabel()); - } - result = result && getOptionsList() - .equals(other.getOptionsList()); - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasName()) { - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - } - if (hasType()) { - hash = (37 * hash) + TYPE_FIELD_NUMBER; - hash = (53 * hash) + type_; - } - if (hasRegressionMode()) { - hash = (37 * hash) + REGRESSION_MODE_FIELD_NUMBER; - hash = (53 * hash) + regressionMode_; - } - if (hasStartTimestamp()) { - hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getStartTimestamp()); - } - if (hasEndTimestamp()) { - hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getEndTimestamp()); - } - if (getLabelCount() > 0) { - hash = (37 * hash) + LABEL_FIELD_NUMBER; - hash = (53 * hash) + getLabelList().hashCode(); - } - if (getValueCount() > 0) { - hash = (37 * hash) + VALUE_FIELD_NUMBER; - hash = (53 * hash) + getValueList().hashCode(); - } - if (hasXAxisLabel()) { - hash = (37 * hash) + X_AXIS_LABEL_FIELD_NUMBER; - hash = (53 * hash) + getXAxisLabel().hashCode(); - } - if (hasYAxisLabel()) { - hash = (37 * hash) + Y_AXIS_LABEL_FIELD_NUMBER; - hash = (53 * hash) + getYAxisLabel().hashCode(); - } - if (getOptionsCount() > 0) { - hash = (37 * hash) + OPTIONS_FIELD_NUMBER; - hash = (53 * hash) + getOptionsList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.ProfilingReportMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a profiling report. - * </pre> - * - * Protobuf type {@code android.vts.ProfilingReportMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.ProfilingReportMessage) - com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ProfilingReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ProfilingReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.class, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - name_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - type_ = 0; - bitField0_ = (bitField0_ & ~0x00000002); - regressionMode_ = 0; - bitField0_ = (bitField0_ & ~0x00000004); - startTimestamp_ = 0L; - bitField0_ = (bitField0_ & ~0x00000008); - endTimestamp_ = 0L; - bitField0_ = (bitField0_ & ~0x00000010); - label_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - value_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000040); - xAxisLabel_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000080); - yAxisLabel_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000100); - options_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000200); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ProfilingReportMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage build() { - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage result = new com.android.vts.proto.VtsReportMessage.ProfilingReportMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.name_ = name_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.type_ = type_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.regressionMode_ = regressionMode_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.startTimestamp_ = startTimestamp_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.endTimestamp_ = endTimestamp_; - if (((bitField0_ & 0x00000020) == 0x00000020)) { - label_ = java.util.Collections.unmodifiableList(label_); - bitField0_ = (bitField0_ & ~0x00000020); - } - result.label_ = label_; - if (((bitField0_ & 0x00000040) == 0x00000040)) { - value_ = java.util.Collections.unmodifiableList(value_); - bitField0_ = (bitField0_ & ~0x00000040); - } - result.value_ = value_; - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000020; - } - result.xAxisLabel_ = xAxisLabel_; - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000040; - } - result.yAxisLabel_ = yAxisLabel_; - if (((bitField0_ & 0x00000200) == 0x00000200)) { - options_ = java.util.Collections.unmodifiableList(options_); - bitField0_ = (bitField0_ & ~0x00000200); - } - result.options_ = options_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.ProfilingReportMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.ProfilingReportMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.ProfilingReportMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.getDefaultInstance()) return this; - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasType()) { - setType(other.getType()); - } - if (other.hasRegressionMode()) { - setRegressionMode(other.getRegressionMode()); - } - if (other.hasStartTimestamp()) { - setStartTimestamp(other.getStartTimestamp()); - } - if (other.hasEndTimestamp()) { - setEndTimestamp(other.getEndTimestamp()); - } - if (!other.label_.isEmpty()) { - if (label_.isEmpty()) { - label_ = other.label_; - bitField0_ = (bitField0_ & ~0x00000020); - } else { - ensureLabelIsMutable(); - label_.addAll(other.label_); - } - onChanged(); - } - if (!other.value_.isEmpty()) { - if (value_.isEmpty()) { - value_ = other.value_; - bitField0_ = (bitField0_ & ~0x00000040); - } else { - ensureValueIsMutable(); - value_.addAll(other.value_); - } - onChanged(); - } - if (other.hasXAxisLabel()) { - setXAxisLabel(other.getXAxisLabel()); - } - if (other.hasYAxisLabel()) { - setYAxisLabel(other.getYAxisLabel()); - } - if (!other.options_.isEmpty()) { - if (options_.isEmpty()) { - options_ = other.options_; - bitField0_ = (bitField0_ & ~0x00000200); - } else { - ensureOptionsIsMutable(); - options_.addAll(other.options_); - } - onChanged(); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.ProfilingReportMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString name_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * the instrumentation point name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the instrumentation point name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - /** - * <pre> - * the instrumentation point name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public Builder setName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - name_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the instrumentation point name. - * </pre> - * - * <code>optional bytes name = 1;</code> - */ - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000001); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - - private int type_ = 0; - /** - * <code>optional .android.vts.VtsProfilingType type = 2;</code> - */ - public boolean hasType() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <code>optional .android.vts.VtsProfilingType type = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsProfilingType getType() { - com.android.vts.proto.VtsReportMessage.VtsProfilingType result = com.android.vts.proto.VtsReportMessage.VtsProfilingType.valueOf(type_); - return result == null ? com.android.vts.proto.VtsReportMessage.VtsProfilingType.UNKNOWN_VTS_PROFILING_TYPE : result; - } - /** - * <code>optional .android.vts.VtsProfilingType type = 2;</code> - */ - public Builder setType(com.android.vts.proto.VtsReportMessage.VtsProfilingType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - type_ = value.getNumber(); - onChanged(); - return this; - } - /** - * <code>optional .android.vts.VtsProfilingType type = 2;</code> - */ - public Builder clearType() { - bitField0_ = (bitField0_ & ~0x00000002); - type_ = 0; - onChanged(); - return this; - } - - private int regressionMode_ = 0; - /** - * <code>optional .android.vts.VtsProfilingRegressionMode regression_mode = 3;</code> - */ - public boolean hasRegressionMode() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <code>optional .android.vts.VtsProfilingRegressionMode regression_mode = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode getRegressionMode() { - com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode result = com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode.valueOf(regressionMode_); - return result == null ? com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE : result; - } - /** - * <code>optional .android.vts.VtsProfilingRegressionMode regression_mode = 3;</code> - */ - public Builder setRegressionMode(com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - regressionMode_ = value.getNumber(); - onChanged(); - return this; - } - /** - * <code>optional .android.vts.VtsProfilingRegressionMode regression_mode = 3;</code> - */ - public Builder clearRegressionMode() { - bitField0_ = (bitField0_ & ~0x00000004); - regressionMode_ = 0; - onChanged(); - return this; - } - - private long startTimestamp_ ; - /** - * <pre> - * profiling start and end time stamp (for performance). - * </pre> - * - * <code>optional int64 start_timestamp = 11;</code> - */ - public boolean hasStartTimestamp() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * profiling start and end time stamp (for performance). - * </pre> - * - * <code>optional int64 start_timestamp = 11;</code> - */ - public long getStartTimestamp() { - return startTimestamp_; - } - /** - * <pre> - * profiling start and end time stamp (for performance). - * </pre> - * - * <code>optional int64 start_timestamp = 11;</code> - */ - public Builder setStartTimestamp(long value) { - bitField0_ |= 0x00000008; - startTimestamp_ = value; - onChanged(); - return this; - } - /** - * <pre> - * profiling start and end time stamp (for performance). - * </pre> - * - * <code>optional int64 start_timestamp = 11;</code> - */ - public Builder clearStartTimestamp() { - bitField0_ = (bitField0_ & ~0x00000008); - startTimestamp_ = 0L; - onChanged(); - return this; - } - - private long endTimestamp_ ; - /** - * <code>optional int64 end_timestamp = 12;</code> - */ - public boolean hasEndTimestamp() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <code>optional int64 end_timestamp = 12;</code> - */ - public long getEndTimestamp() { - return endTimestamp_; - } - /** - * <code>optional int64 end_timestamp = 12;</code> - */ - public Builder setEndTimestamp(long value) { - bitField0_ |= 0x00000010; - endTimestamp_ = value; - onChanged(); - return this; - } - /** - * <code>optional int64 end_timestamp = 12;</code> - */ - public Builder clearEndTimestamp() { - bitField0_ = (bitField0_ & ~0x00000010); - endTimestamp_ = 0L; - onChanged(); - return this; - } - - private java.util.List<com.google.protobuf.ByteString> label_ = java.util.Collections.emptyList(); - private void ensureLabelIsMutable() { - if (!((bitField0_ & 0x00000020) == 0x00000020)) { - label_ = new java.util.ArrayList<com.google.protobuf.ByteString>(label_); - bitField0_ |= 0x00000020; - } - } - /** - * <code>repeated bytes label = 21;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getLabelList() { - return java.util.Collections.unmodifiableList(label_); - } - /** - * <code>repeated bytes label = 21;</code> - */ - public int getLabelCount() { - return label_.size(); - } - /** - * <code>repeated bytes label = 21;</code> - */ - public com.google.protobuf.ByteString getLabel(int index) { - return label_.get(index); - } - /** - * <code>repeated bytes label = 21;</code> - */ - public Builder setLabel( - int index, com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureLabelIsMutable(); - label_.set(index, value); - onChanged(); - return this; - } - /** - * <code>repeated bytes label = 21;</code> - */ - public Builder addLabel(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureLabelIsMutable(); - label_.add(value); - onChanged(); - return this; - } - /** - * <code>repeated bytes label = 21;</code> - */ - public Builder addAllLabel( - java.lang.Iterable<? extends com.google.protobuf.ByteString> values) { - ensureLabelIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, label_); - onChanged(); - return this; - } - /** - * <code>repeated bytes label = 21;</code> - */ - public Builder clearLabel() { - label_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - onChanged(); - return this; - } - - private java.util.List<java.lang.Long> value_ = java.util.Collections.emptyList(); - private void ensureValueIsMutable() { - if (!((bitField0_ & 0x00000040) == 0x00000040)) { - value_ = new java.util.ArrayList<java.lang.Long>(value_); - bitField0_ |= 0x00000040; - } - } - /** - * <code>repeated int64 value = 22;</code> - */ - public java.util.List<java.lang.Long> - getValueList() { - return java.util.Collections.unmodifiableList(value_); - } - /** - * <code>repeated int64 value = 22;</code> - */ - public int getValueCount() { - return value_.size(); - } - /** - * <code>repeated int64 value = 22;</code> - */ - public long getValue(int index) { - return value_.get(index); - } - /** - * <code>repeated int64 value = 22;</code> - */ - public Builder setValue( - int index, long value) { - ensureValueIsMutable(); - value_.set(index, value); - onChanged(); - return this; - } - /** - * <code>repeated int64 value = 22;</code> - */ - public Builder addValue(long value) { - ensureValueIsMutable(); - value_.add(value); - onChanged(); - return this; - } - /** - * <code>repeated int64 value = 22;</code> - */ - public Builder addAllValue( - java.lang.Iterable<? extends java.lang.Long> values) { - ensureValueIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, value_); - onChanged(); - return this; - } - /** - * <code>repeated int64 value = 22;</code> - */ - public Builder clearValue() { - value_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000040); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString xAxisLabel_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * x-axis and y-axis title labels when displaying the data as a graph - * </pre> - * - * <code>optional bytes x_axis_label = 31;</code> - */ - public boolean hasXAxisLabel() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - /** - * <pre> - * x-axis and y-axis title labels when displaying the data as a graph - * </pre> - * - * <code>optional bytes x_axis_label = 31;</code> - */ - public com.google.protobuf.ByteString getXAxisLabel() { - return xAxisLabel_; - } - /** - * <pre> - * x-axis and y-axis title labels when displaying the data as a graph - * </pre> - * - * <code>optional bytes x_axis_label = 31;</code> - */ - public Builder setXAxisLabel(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000080; - xAxisLabel_ = value; - onChanged(); - return this; - } - /** - * <pre> - * x-axis and y-axis title labels when displaying the data as a graph - * </pre> - * - * <code>optional bytes x_axis_label = 31;</code> - */ - public Builder clearXAxisLabel() { - bitField0_ = (bitField0_ & ~0x00000080); - xAxisLabel_ = getDefaultInstance().getXAxisLabel(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString yAxisLabel_ = com.google.protobuf.ByteString.EMPTY; - /** - * <code>optional bytes y_axis_label = 32;</code> - */ - public boolean hasYAxisLabel() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - /** - * <code>optional bytes y_axis_label = 32;</code> - */ - public com.google.protobuf.ByteString getYAxisLabel() { - return yAxisLabel_; - } - /** - * <code>optional bytes y_axis_label = 32;</code> - */ - public Builder setYAxisLabel(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000100; - yAxisLabel_ = value; - onChanged(); - return this; - } - /** - * <code>optional bytes y_axis_label = 32;</code> - */ - public Builder clearYAxisLabel() { - bitField0_ = (bitField0_ & ~0x00000100); - yAxisLabel_ = getDefaultInstance().getYAxisLabel(); - onChanged(); - return this; - } - - private java.util.List<com.google.protobuf.ByteString> options_ = java.util.Collections.emptyList(); - private void ensureOptionsIsMutable() { - if (!((bitField0_ & 0x00000200) == 0x00000200)) { - options_ = new java.util.ArrayList<com.google.protobuf.ByteString>(options_); - bitField0_ |= 0x00000200; - } - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getOptionsList() { - return java.util.Collections.unmodifiableList(options_); - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public int getOptionsCount() { - return options_.size(); - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public com.google.protobuf.ByteString getOptions(int index) { - return options_.get(index); - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public Builder setOptions( - int index, com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureOptionsIsMutable(); - options_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public Builder addOptions(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureOptionsIsMutable(); - options_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public Builder addAllOptions( - java.lang.Iterable<? extends com.google.protobuf.ByteString> values) { - ensureOptionsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, options_); - onChanged(); - return this; - } - /** - * <pre> - * a list of strings where each string has the form of 'key=value'. - * used to tell certain properties of the data (e.g., passthrough vs. - * binderized). - * </pre> - * - * <code>repeated bytes options = 41;</code> - */ - public Builder clearOptions() { - options_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000200); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.ProfilingReportMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.ProfilingReportMessage) - private static final com.android.vts.proto.VtsReportMessage.ProfilingReportMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.ProfilingReportMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<ProfilingReportMessage> - PARSER = new com.google.protobuf.AbstractParser<ProfilingReportMessage>() { - public ProfilingReportMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ProfilingReportMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<ProfilingReportMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<ProfilingReportMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface SystraceReportMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.SystraceReportMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * the target process name used by systrace - * </pre> - * - * <code>optional bytes process_name = 1;</code> - */ - boolean hasProcessName(); - /** - * <pre> - * the target process name used by systrace - * </pre> - * - * <code>optional bytes process_name = 1;</code> - */ - com.google.protobuf.ByteString getProcessName(); - - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - java.util.List<com.google.protobuf.ByteString> getHtmlList(); - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - int getHtmlCount(); - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - com.google.protobuf.ByteString getHtml(int index); - - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - java.util.List<com.google.protobuf.ByteString> getUrlList(); - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - int getUrlCount(); - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - com.google.protobuf.ByteString getUrl(int index); - } - /** - * <pre> - * To specify a systrace report. - * </pre> - * - * Protobuf type {@code android.vts.SystraceReportMessage} - */ - public static final class SystraceReportMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.SystraceReportMessage) - SystraceReportMessageOrBuilder { - // Use SystraceReportMessage.newBuilder() to construct. - private SystraceReportMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private SystraceReportMessage() { - processName_ = com.google.protobuf.ByteString.EMPTY; - html_ = java.util.Collections.emptyList(); - url_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private SystraceReportMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - processName_ = input.readBytes(); - break; - } - case 90: { - if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) { - html_ = new java.util.ArrayList<com.google.protobuf.ByteString>(); - mutable_bitField0_ |= 0x00000002; - } - html_.add(input.readBytes()); - break; - } - case 170: { - if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { - url_ = new java.util.ArrayList<com.google.protobuf.ByteString>(); - mutable_bitField0_ |= 0x00000004; - } - url_.add(input.readBytes()); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { - html_ = java.util.Collections.unmodifiableList(html_); - } - if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { - url_ = java.util.Collections.unmodifiableList(url_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_SystraceReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_SystraceReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.SystraceReportMessage.class, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder.class); - } - - private int bitField0_; - public static final int PROCESS_NAME_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString processName_; - /** - * <pre> - * the target process name used by systrace - * </pre> - * - * <code>optional bytes process_name = 1;</code> - */ - public boolean hasProcessName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the target process name used by systrace - * </pre> - * - * <code>optional bytes process_name = 1;</code> - */ - public com.google.protobuf.ByteString getProcessName() { - return processName_; - } - - public static final int HTML_FIELD_NUMBER = 11; - private java.util.List<com.google.protobuf.ByteString> html_; - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getHtmlList() { - return html_; - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public int getHtmlCount() { - return html_.size(); - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public com.google.protobuf.ByteString getHtml(int index) { - return html_.get(index); - } - - public static final int URL_FIELD_NUMBER = 21; - private java.util.List<com.google.protobuf.ByteString> url_; - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getUrlList() { - return url_; - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public int getUrlCount() { - return url_.size(); - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public com.google.protobuf.ByteString getUrl(int index) { - return url_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, processName_); - } - for (int i = 0; i < html_.size(); i++) { - output.writeBytes(11, html_.get(i)); - } - for (int i = 0; i < url_.size(); i++) { - output.writeBytes(21, url_.get(i)); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, processName_); - } - { - int dataSize = 0; - for (int i = 0; i < html_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(html_.get(i)); - } - size += dataSize; - size += 1 * getHtmlList().size(); - } - { - int dataSize = 0; - for (int i = 0; i < url_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(url_.get(i)); - } - size += dataSize; - size += 2 * getUrlList().size(); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.SystraceReportMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.SystraceReportMessage other = (com.android.vts.proto.VtsReportMessage.SystraceReportMessage) obj; - - boolean result = true; - result = result && (hasProcessName() == other.hasProcessName()); - if (hasProcessName()) { - result = result && getProcessName() - .equals(other.getProcessName()); - } - result = result && getHtmlList() - .equals(other.getHtmlList()); - result = result && getUrlList() - .equals(other.getUrlList()); - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasProcessName()) { - hash = (37 * hash) + PROCESS_NAME_FIELD_NUMBER; - hash = (53 * hash) + getProcessName().hashCode(); - } - if (getHtmlCount() > 0) { - hash = (37 * hash) + HTML_FIELD_NUMBER; - hash = (53 * hash) + getHtmlList().hashCode(); - } - if (getUrlCount() > 0) { - hash = (37 * hash) + URL_FIELD_NUMBER; - hash = (53 * hash) + getUrlList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.SystraceReportMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a systrace report. - * </pre> - * - * Protobuf type {@code android.vts.SystraceReportMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.SystraceReportMessage) - com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_SystraceReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_SystraceReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.SystraceReportMessage.class, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.SystraceReportMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - processName_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - html_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - url_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_SystraceReportMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.SystraceReportMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.SystraceReportMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.SystraceReportMessage build() { - com.android.vts.proto.VtsReportMessage.SystraceReportMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.SystraceReportMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.SystraceReportMessage result = new com.android.vts.proto.VtsReportMessage.SystraceReportMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.processName_ = processName_; - if (((bitField0_ & 0x00000002) == 0x00000002)) { - html_ = java.util.Collections.unmodifiableList(html_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.html_ = html_; - if (((bitField0_ & 0x00000004) == 0x00000004)) { - url_ = java.util.Collections.unmodifiableList(url_); - bitField0_ = (bitField0_ & ~0x00000004); - } - result.url_ = url_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.SystraceReportMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.SystraceReportMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.SystraceReportMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.SystraceReportMessage.getDefaultInstance()) return this; - if (other.hasProcessName()) { - setProcessName(other.getProcessName()); - } - if (!other.html_.isEmpty()) { - if (html_.isEmpty()) { - html_ = other.html_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureHtmlIsMutable(); - html_.addAll(other.html_); - } - onChanged(); - } - if (!other.url_.isEmpty()) { - if (url_.isEmpty()) { - url_ = other.url_; - bitField0_ = (bitField0_ & ~0x00000004); - } else { - ensureUrlIsMutable(); - url_.addAll(other.url_); - } - onChanged(); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.SystraceReportMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.SystraceReportMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString processName_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * the target process name used by systrace - * </pre> - * - * <code>optional bytes process_name = 1;</code> - */ - public boolean hasProcessName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the target process name used by systrace - * </pre> - * - * <code>optional bytes process_name = 1;</code> - */ - public com.google.protobuf.ByteString getProcessName() { - return processName_; - } - /** - * <pre> - * the target process name used by systrace - * </pre> - * - * <code>optional bytes process_name = 1;</code> - */ - public Builder setProcessName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - processName_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the target process name used by systrace - * </pre> - * - * <code>optional bytes process_name = 1;</code> - */ - public Builder clearProcessName() { - bitField0_ = (bitField0_ & ~0x00000001); - processName_ = getDefaultInstance().getProcessName(); - onChanged(); - return this; - } - - private java.util.List<com.google.protobuf.ByteString> html_ = java.util.Collections.emptyList(); - private void ensureHtmlIsMutable() { - if (!((bitField0_ & 0x00000002) == 0x00000002)) { - html_ = new java.util.ArrayList<com.google.protobuf.ByteString>(html_); - bitField0_ |= 0x00000002; - } - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getHtmlList() { - return java.util.Collections.unmodifiableList(html_); - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public int getHtmlCount() { - return html_.size(); - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public com.google.protobuf.ByteString getHtml(int index) { - return html_.get(index); - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public Builder setHtml( - int index, com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureHtmlIsMutable(); - html_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public Builder addHtml(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureHtmlIsMutable(); - html_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public Builder addAllHtml( - java.lang.Iterable<? extends com.google.protobuf.ByteString> values) { - ensureHtmlIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, html_); - onChanged(); - return this; - } - /** - * <pre> - * the produced html report - * </pre> - * - * <code>repeated bytes html = 11;</code> - */ - public Builder clearHtml() { - html_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - - private java.util.List<com.google.protobuf.ByteString> url_ = java.util.Collections.emptyList(); - private void ensureUrlIsMutable() { - if (!((bitField0_ & 0x00000004) == 0x00000004)) { - url_ = new java.util.ArrayList<com.google.protobuf.ByteString>(url_); - bitField0_ |= 0x00000004; - } - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getUrlList() { - return java.util.Collections.unmodifiableList(url_); - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public int getUrlCount() { - return url_.size(); - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public com.google.protobuf.ByteString getUrl(int index) { - return url_.get(index); - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public Builder setUrl( - int index, com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureUrlIsMutable(); - url_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public Builder addUrl(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureUrlIsMutable(); - url_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public Builder addAllUrl( - java.lang.Iterable<? extends com.google.protobuf.ByteString> values) { - ensureUrlIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, url_); - onChanged(); - return this; - } - /** - * <pre> - * URLs of the produced html reports - * </pre> - * - * <code>repeated bytes url = 21;</code> - */ - public Builder clearUrl() { - url_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.SystraceReportMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.SystraceReportMessage) - private static final com.android.vts.proto.VtsReportMessage.SystraceReportMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.SystraceReportMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.SystraceReportMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<SystraceReportMessage> - PARSER = new com.google.protobuf.AbstractParser<SystraceReportMessage>() { - public SystraceReportMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new SystraceReportMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<SystraceReportMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<SystraceReportMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.SystraceReportMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface CoverageReportMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.CoverageReportMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * the path to the source file from the project root. - * </pre> - * - * <code>optional bytes file_path = 11;</code> - */ - boolean hasFilePath(); - /** - * <pre> - * the path to the source file from the project root. - * </pre> - * - * <code>optional bytes file_path = 11;</code> - */ - com.google.protobuf.ByteString getFilePath(); - - /** - * <pre> - * the name of the project where the file can be found - * </pre> - * - * <code>optional bytes project_name = 12;</code> - */ - boolean hasProjectName(); - /** - * <pre> - * the name of the project where the file can be found - * </pre> - * - * <code>optional bytes project_name = 12;</code> - */ - com.google.protobuf.ByteString getProjectName(); - - /** - * <pre> - * the commit ID identifying the code revision - * </pre> - * - * <code>optional bytes revision = 13;</code> - */ - boolean hasRevision(); - /** - * <pre> - * the commit ID identifying the code revision - * </pre> - * - * <code>optional bytes revision = 13;</code> - */ - com.google.protobuf.ByteString getRevision(); - - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - java.util.List<java.lang.Long> getLineCoverageVectorList(); - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - int getLineCoverageVectorCount(); - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - long getLineCoverageVector(int index); - - /** - * <pre> - * the number of source code lines that are instrumented for code coverage - * measurement. - * </pre> - * - * <code>optional int32 total_line_count = 101;</code> - */ - boolean hasTotalLineCount(); - /** - * <pre> - * the number of source code lines that are instrumented for code coverage - * measurement. - * </pre> - * - * <code>optional int32 total_line_count = 101;</code> - */ - int getTotalLineCount(); - - /** - * <pre> - * the number of source code lines that are executed. - * </pre> - * - * <code>optional int32 covered_line_count = 102;</code> - */ - boolean hasCoveredLineCount(); - /** - * <pre> - * the number of source code lines that are executed. - * </pre> - * - * <code>optional int32 covered_line_count = 102;</code> - */ - int getCoveredLineCount(); - - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the directory path of a source file. - * </pre> - * - * <code>optional bytes dir_path = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated boolean hasDirPath(); - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the directory path of a source file. - * </pre> - * - * <code>optional bytes dir_path = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated com.google.protobuf.ByteString getDirPath(); - - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the name of the source file. - * </pre> - * - * <code>optional bytes file_name = 2 [deprecated = true];</code> - */ - @java.lang.Deprecated boolean hasFileName(); - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the name of the source file. - * </pre> - * - * <code>optional bytes file_name = 2 [deprecated = true];</code> - */ - @java.lang.Deprecated com.google.protobuf.ByteString getFileName(); - - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * produced html report. - * </pre> - * - * <code>optional bytes html = 3 [deprecated = true];</code> - */ - @java.lang.Deprecated boolean hasHtml(); - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * produced html report. - * </pre> - * - * <code>optional bytes html = 3 [deprecated = true];</code> - */ - @java.lang.Deprecated com.google.protobuf.ByteString getHtml(); - } - /** - * <pre> - * To specify a coverage report. - * </pre> - * - * Protobuf type {@code android.vts.CoverageReportMessage} - */ - public static final class CoverageReportMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.CoverageReportMessage) - CoverageReportMessageOrBuilder { - // Use CoverageReportMessage.newBuilder() to construct. - private CoverageReportMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private CoverageReportMessage() { - filePath_ = com.google.protobuf.ByteString.EMPTY; - projectName_ = com.google.protobuf.ByteString.EMPTY; - revision_ = com.google.protobuf.ByteString.EMPTY; - lineCoverageVector_ = java.util.Collections.emptyList(); - totalLineCount_ = 0; - coveredLineCount_ = 0; - dirPath_ = com.google.protobuf.ByteString.EMPTY; - fileName_ = com.google.protobuf.ByteString.EMPTY; - html_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private CoverageReportMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000020; - dirPath_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000040; - fileName_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000080; - html_ = input.readBytes(); - break; - } - case 90: { - bitField0_ |= 0x00000001; - filePath_ = input.readBytes(); - break; - } - case 98: { - bitField0_ |= 0x00000002; - projectName_ = input.readBytes(); - break; - } - case 106: { - bitField0_ |= 0x00000004; - revision_ = input.readBytes(); - break; - } - case 184: { - if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) { - lineCoverageVector_ = new java.util.ArrayList<java.lang.Long>(); - mutable_bitField0_ |= 0x00000008; - } - lineCoverageVector_.add(input.readInt64()); - break; - } - case 186: { - int length = input.readRawVarint32(); - int limit = input.pushLimit(length); - if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) { - lineCoverageVector_ = new java.util.ArrayList<java.lang.Long>(); - mutable_bitField0_ |= 0x00000008; - } - while (input.getBytesUntilLimit() > 0) { - lineCoverageVector_.add(input.readInt64()); - } - input.popLimit(limit); - break; - } - case 808: { - bitField0_ |= 0x00000008; - totalLineCount_ = input.readInt32(); - break; - } - case 816: { - bitField0_ |= 0x00000010; - coveredLineCount_ = input.readInt32(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) { - lineCoverageVector_ = java.util.Collections.unmodifiableList(lineCoverageVector_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_CoverageReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_CoverageReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.CoverageReportMessage.class, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder.class); - } - - private int bitField0_; - public static final int FILE_PATH_FIELD_NUMBER = 11; - private com.google.protobuf.ByteString filePath_; - /** - * <pre> - * the path to the source file from the project root. - * </pre> - * - * <code>optional bytes file_path = 11;</code> - */ - public boolean hasFilePath() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the path to the source file from the project root. - * </pre> - * - * <code>optional bytes file_path = 11;</code> - */ - public com.google.protobuf.ByteString getFilePath() { - return filePath_; - } - - public static final int PROJECT_NAME_FIELD_NUMBER = 12; - private com.google.protobuf.ByteString projectName_; - /** - * <pre> - * the name of the project where the file can be found - * </pre> - * - * <code>optional bytes project_name = 12;</code> - */ - public boolean hasProjectName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * the name of the project where the file can be found - * </pre> - * - * <code>optional bytes project_name = 12;</code> - */ - public com.google.protobuf.ByteString getProjectName() { - return projectName_; - } - - public static final int REVISION_FIELD_NUMBER = 13; - private com.google.protobuf.ByteString revision_; - /** - * <pre> - * the commit ID identifying the code revision - * </pre> - * - * <code>optional bytes revision = 13;</code> - */ - public boolean hasRevision() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * the commit ID identifying the code revision - * </pre> - * - * <code>optional bytes revision = 13;</code> - */ - public com.google.protobuf.ByteString getRevision() { - return revision_; - } - - public static final int LINE_COVERAGE_VECTOR_FIELD_NUMBER = 23; - private java.util.List<java.lang.Long> lineCoverageVector_; - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public java.util.List<java.lang.Long> - getLineCoverageVectorList() { - return lineCoverageVector_; - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public int getLineCoverageVectorCount() { - return lineCoverageVector_.size(); - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public long getLineCoverageVector(int index) { - return lineCoverageVector_.get(index); - } - - public static final int TOTAL_LINE_COUNT_FIELD_NUMBER = 101; - private int totalLineCount_; - /** - * <pre> - * the number of source code lines that are instrumented for code coverage - * measurement. - * </pre> - * - * <code>optional int32 total_line_count = 101;</code> - */ - public boolean hasTotalLineCount() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * the number of source code lines that are instrumented for code coverage - * measurement. - * </pre> - * - * <code>optional int32 total_line_count = 101;</code> - */ - public int getTotalLineCount() { - return totalLineCount_; - } - - public static final int COVERED_LINE_COUNT_FIELD_NUMBER = 102; - private int coveredLineCount_; - /** - * <pre> - * the number of source code lines that are executed. - * </pre> - * - * <code>optional int32 covered_line_count = 102;</code> - */ - public boolean hasCoveredLineCount() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * the number of source code lines that are executed. - * </pre> - * - * <code>optional int32 covered_line_count = 102;</code> - */ - public int getCoveredLineCount() { - return coveredLineCount_; - } - - public static final int DIR_PATH_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString dirPath_; - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the directory path of a source file. - * </pre> - * - * <code>optional bytes dir_path = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasDirPath() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the directory path of a source file. - * </pre> - * - * <code>optional bytes dir_path = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.google.protobuf.ByteString getDirPath() { - return dirPath_; - } - - public static final int FILE_NAME_FIELD_NUMBER = 2; - private com.google.protobuf.ByteString fileName_; - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the name of the source file. - * </pre> - * - * <code>optional bytes file_name = 2 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasFileName() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the name of the source file. - * </pre> - * - * <code>optional bytes file_name = 2 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.google.protobuf.ByteString getFileName() { - return fileName_; - } - - public static final int HTML_FIELD_NUMBER = 3; - private com.google.protobuf.ByteString html_; - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * produced html report. - * </pre> - * - * <code>optional bytes html = 3 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasHtml() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * produced html report. - * </pre> - * - * <code>optional bytes html = 3 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.google.protobuf.ByteString getHtml() { - return html_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBytes(1, dirPath_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeBytes(2, fileName_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - output.writeBytes(3, html_); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(11, filePath_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(12, projectName_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(13, revision_); - } - for (int i = 0; i < lineCoverageVector_.size(); i++) { - output.writeInt64(23, lineCoverageVector_.get(i)); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeInt32(101, totalLineCount_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeInt32(102, coveredLineCount_); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, dirPath_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, fileName_); - } - if (((bitField0_ & 0x00000080) == 0x00000080)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, html_); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(11, filePath_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(12, projectName_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(13, revision_); - } - { - int dataSize = 0; - for (int i = 0; i < lineCoverageVector_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeInt64SizeNoTag(lineCoverageVector_.get(i)); - } - size += dataSize; - size += 2 * getLineCoverageVectorList().size(); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(101, totalLineCount_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(102, coveredLineCount_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.CoverageReportMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.CoverageReportMessage other = (com.android.vts.proto.VtsReportMessage.CoverageReportMessage) obj; - - boolean result = true; - result = result && (hasFilePath() == other.hasFilePath()); - if (hasFilePath()) { - result = result && getFilePath() - .equals(other.getFilePath()); - } - result = result && (hasProjectName() == other.hasProjectName()); - if (hasProjectName()) { - result = result && getProjectName() - .equals(other.getProjectName()); - } - result = result && (hasRevision() == other.hasRevision()); - if (hasRevision()) { - result = result && getRevision() - .equals(other.getRevision()); - } - result = result && getLineCoverageVectorList() - .equals(other.getLineCoverageVectorList()); - result = result && (hasTotalLineCount() == other.hasTotalLineCount()); - if (hasTotalLineCount()) { - result = result && (getTotalLineCount() - == other.getTotalLineCount()); - } - result = result && (hasCoveredLineCount() == other.hasCoveredLineCount()); - if (hasCoveredLineCount()) { - result = result && (getCoveredLineCount() - == other.getCoveredLineCount()); - } - result = result && (hasDirPath() == other.hasDirPath()); - if (hasDirPath()) { - result = result && getDirPath() - .equals(other.getDirPath()); - } - result = result && (hasFileName() == other.hasFileName()); - if (hasFileName()) { - result = result && getFileName() - .equals(other.getFileName()); - } - result = result && (hasHtml() == other.hasHtml()); - if (hasHtml()) { - result = result && getHtml() - .equals(other.getHtml()); - } - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasFilePath()) { - hash = (37 * hash) + FILE_PATH_FIELD_NUMBER; - hash = (53 * hash) + getFilePath().hashCode(); - } - if (hasProjectName()) { - hash = (37 * hash) + PROJECT_NAME_FIELD_NUMBER; - hash = (53 * hash) + getProjectName().hashCode(); - } - if (hasRevision()) { - hash = (37 * hash) + REVISION_FIELD_NUMBER; - hash = (53 * hash) + getRevision().hashCode(); - } - if (getLineCoverageVectorCount() > 0) { - hash = (37 * hash) + LINE_COVERAGE_VECTOR_FIELD_NUMBER; - hash = (53 * hash) + getLineCoverageVectorList().hashCode(); - } - if (hasTotalLineCount()) { - hash = (37 * hash) + TOTAL_LINE_COUNT_FIELD_NUMBER; - hash = (53 * hash) + getTotalLineCount(); - } - if (hasCoveredLineCount()) { - hash = (37 * hash) + COVERED_LINE_COUNT_FIELD_NUMBER; - hash = (53 * hash) + getCoveredLineCount(); - } - if (hasDirPath()) { - hash = (37 * hash) + DIR_PATH_FIELD_NUMBER; - hash = (53 * hash) + getDirPath().hashCode(); - } - if (hasFileName()) { - hash = (37 * hash) + FILE_NAME_FIELD_NUMBER; - hash = (53 * hash) + getFileName().hashCode(); - } - if (hasHtml()) { - hash = (37 * hash) + HTML_FIELD_NUMBER; - hash = (53 * hash) + getHtml().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.CoverageReportMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a coverage report. - * </pre> - * - * Protobuf type {@code android.vts.CoverageReportMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.CoverageReportMessage) - com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_CoverageReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_CoverageReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.CoverageReportMessage.class, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.CoverageReportMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - filePath_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - projectName_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000002); - revision_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000004); - lineCoverageVector_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - totalLineCount_ = 0; - bitField0_ = (bitField0_ & ~0x00000010); - coveredLineCount_ = 0; - bitField0_ = (bitField0_ & ~0x00000020); - dirPath_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000040); - fileName_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000080); - html_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000100); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_CoverageReportMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.CoverageReportMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage build() { - com.android.vts.proto.VtsReportMessage.CoverageReportMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.CoverageReportMessage result = new com.android.vts.proto.VtsReportMessage.CoverageReportMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.filePath_ = filePath_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.projectName_ = projectName_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.revision_ = revision_; - if (((bitField0_ & 0x00000008) == 0x00000008)) { - lineCoverageVector_ = java.util.Collections.unmodifiableList(lineCoverageVector_); - bitField0_ = (bitField0_ & ~0x00000008); - } - result.lineCoverageVector_ = lineCoverageVector_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000008; - } - result.totalLineCount_ = totalLineCount_; - if (((from_bitField0_ & 0x00000020) == 0x00000020)) { - to_bitField0_ |= 0x00000010; - } - result.coveredLineCount_ = coveredLineCount_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000020; - } - result.dirPath_ = dirPath_; - if (((from_bitField0_ & 0x00000080) == 0x00000080)) { - to_bitField0_ |= 0x00000040; - } - result.fileName_ = fileName_; - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { - to_bitField0_ |= 0x00000080; - } - result.html_ = html_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.CoverageReportMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.CoverageReportMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.CoverageReportMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.CoverageReportMessage.getDefaultInstance()) return this; - if (other.hasFilePath()) { - setFilePath(other.getFilePath()); - } - if (other.hasProjectName()) { - setProjectName(other.getProjectName()); - } - if (other.hasRevision()) { - setRevision(other.getRevision()); - } - if (!other.lineCoverageVector_.isEmpty()) { - if (lineCoverageVector_.isEmpty()) { - lineCoverageVector_ = other.lineCoverageVector_; - bitField0_ = (bitField0_ & ~0x00000008); - } else { - ensureLineCoverageVectorIsMutable(); - lineCoverageVector_.addAll(other.lineCoverageVector_); - } - onChanged(); - } - if (other.hasTotalLineCount()) { - setTotalLineCount(other.getTotalLineCount()); - } - if (other.hasCoveredLineCount()) { - setCoveredLineCount(other.getCoveredLineCount()); - } - if (other.hasDirPath()) { - setDirPath(other.getDirPath()); - } - if (other.hasFileName()) { - setFileName(other.getFileName()); - } - if (other.hasHtml()) { - setHtml(other.getHtml()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.CoverageReportMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.CoverageReportMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString filePath_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * the path to the source file from the project root. - * </pre> - * - * <code>optional bytes file_path = 11;</code> - */ - public boolean hasFilePath() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * the path to the source file from the project root. - * </pre> - * - * <code>optional bytes file_path = 11;</code> - */ - public com.google.protobuf.ByteString getFilePath() { - return filePath_; - } - /** - * <pre> - * the path to the source file from the project root. - * </pre> - * - * <code>optional bytes file_path = 11;</code> - */ - public Builder setFilePath(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - filePath_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the path to the source file from the project root. - * </pre> - * - * <code>optional bytes file_path = 11;</code> - */ - public Builder clearFilePath() { - bitField0_ = (bitField0_ & ~0x00000001); - filePath_ = getDefaultInstance().getFilePath(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString projectName_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * the name of the project where the file can be found - * </pre> - * - * <code>optional bytes project_name = 12;</code> - */ - public boolean hasProjectName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * the name of the project where the file can be found - * </pre> - * - * <code>optional bytes project_name = 12;</code> - */ - public com.google.protobuf.ByteString getProjectName() { - return projectName_; - } - /** - * <pre> - * the name of the project where the file can be found - * </pre> - * - * <code>optional bytes project_name = 12;</code> - */ - public Builder setProjectName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - projectName_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the name of the project where the file can be found - * </pre> - * - * <code>optional bytes project_name = 12;</code> - */ - public Builder clearProjectName() { - bitField0_ = (bitField0_ & ~0x00000002); - projectName_ = getDefaultInstance().getProjectName(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString revision_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * the commit ID identifying the code revision - * </pre> - * - * <code>optional bytes revision = 13;</code> - */ - public boolean hasRevision() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * the commit ID identifying the code revision - * </pre> - * - * <code>optional bytes revision = 13;</code> - */ - public com.google.protobuf.ByteString getRevision() { - return revision_; - } - /** - * <pre> - * the commit ID identifying the code revision - * </pre> - * - * <code>optional bytes revision = 13;</code> - */ - public Builder setRevision(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - revision_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the commit ID identifying the code revision - * </pre> - * - * <code>optional bytes revision = 13;</code> - */ - public Builder clearRevision() { - bitField0_ = (bitField0_ & ~0x00000004); - revision_ = getDefaultInstance().getRevision(); - onChanged(); - return this; - } - - private java.util.List<java.lang.Long> lineCoverageVector_ = java.util.Collections.emptyList(); - private void ensureLineCoverageVectorIsMutable() { - if (!((bitField0_ & 0x00000008) == 0x00000008)) { - lineCoverageVector_ = new java.util.ArrayList<java.lang.Long>(lineCoverageVector_); - bitField0_ |= 0x00000008; - } - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public java.util.List<java.lang.Long> - getLineCoverageVectorList() { - return java.util.Collections.unmodifiableList(lineCoverageVector_); - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public int getLineCoverageVectorCount() { - return lineCoverageVector_.size(); - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public long getLineCoverageVector(int index) { - return lineCoverageVector_.get(index); - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public Builder setLineCoverageVector( - int index, long value) { - ensureLineCoverageVectorIsMutable(); - lineCoverageVector_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public Builder addLineCoverageVector(long value) { - ensureLineCoverageVectorIsMutable(); - lineCoverageVector_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public Builder addAllLineCoverageVector( - java.lang.Iterable<? extends java.lang.Long> values) { - ensureLineCoverageVectorIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, lineCoverageVector_); - onChanged(); - return this; - } - /** - * <pre> - * i-th element gives the number of times i-th line is executed. - * </pre> - * - * <code>repeated int64 line_coverage_vector = 23;</code> - */ - public Builder clearLineCoverageVector() { - lineCoverageVector_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - onChanged(); - return this; - } - - private int totalLineCount_ ; - /** - * <pre> - * the number of source code lines that are instrumented for code coverage - * measurement. - * </pre> - * - * <code>optional int32 total_line_count = 101;</code> - */ - public boolean hasTotalLineCount() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * the number of source code lines that are instrumented for code coverage - * measurement. - * </pre> - * - * <code>optional int32 total_line_count = 101;</code> - */ - public int getTotalLineCount() { - return totalLineCount_; - } - /** - * <pre> - * the number of source code lines that are instrumented for code coverage - * measurement. - * </pre> - * - * <code>optional int32 total_line_count = 101;</code> - */ - public Builder setTotalLineCount(int value) { - bitField0_ |= 0x00000010; - totalLineCount_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the number of source code lines that are instrumented for code coverage - * measurement. - * </pre> - * - * <code>optional int32 total_line_count = 101;</code> - */ - public Builder clearTotalLineCount() { - bitField0_ = (bitField0_ & ~0x00000010); - totalLineCount_ = 0; - onChanged(); - return this; - } - - private int coveredLineCount_ ; - /** - * <pre> - * the number of source code lines that are executed. - * </pre> - * - * <code>optional int32 covered_line_count = 102;</code> - */ - public boolean hasCoveredLineCount() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - /** - * <pre> - * the number of source code lines that are executed. - * </pre> - * - * <code>optional int32 covered_line_count = 102;</code> - */ - public int getCoveredLineCount() { - return coveredLineCount_; - } - /** - * <pre> - * the number of source code lines that are executed. - * </pre> - * - * <code>optional int32 covered_line_count = 102;</code> - */ - public Builder setCoveredLineCount(int value) { - bitField0_ |= 0x00000020; - coveredLineCount_ = value; - onChanged(); - return this; - } - /** - * <pre> - * the number of source code lines that are executed. - * </pre> - * - * <code>optional int32 covered_line_count = 102;</code> - */ - public Builder clearCoveredLineCount() { - bitField0_ = (bitField0_ & ~0x00000020); - coveredLineCount_ = 0; - onChanged(); - return this; - } - - private com.google.protobuf.ByteString dirPath_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the directory path of a source file. - * </pre> - * - * <code>optional bytes dir_path = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasDirPath() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the directory path of a source file. - * </pre> - * - * <code>optional bytes dir_path = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.google.protobuf.ByteString getDirPath() { - return dirPath_; - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the directory path of a source file. - * </pre> - * - * <code>optional bytes dir_path = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setDirPath(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000040; - dirPath_ = value; - onChanged(); - return this; - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the directory path of a source file. - * </pre> - * - * <code>optional bytes dir_path = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder clearDirPath() { - bitField0_ = (bitField0_ & ~0x00000040); - dirPath_ = getDefaultInstance().getDirPath(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString fileName_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the name of the source file. - * </pre> - * - * <code>optional bytes file_name = 2 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasFileName() { - return ((bitField0_ & 0x00000080) == 0x00000080); - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the name of the source file. - * </pre> - * - * <code>optional bytes file_name = 2 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.google.protobuf.ByteString getFileName() { - return fileName_; - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the name of the source file. - * </pre> - * - * <code>optional bytes file_name = 2 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setFileName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000080; - fileName_ = value; - onChanged(); - return this; - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * the name of the source file. - * </pre> - * - * <code>optional bytes file_name = 2 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder clearFileName() { - bitField0_ = (bitField0_ & ~0x00000080); - fileName_ = getDefaultInstance().getFileName(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString html_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * produced html report. - * </pre> - * - * <code>optional bytes html = 3 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasHtml() { - return ((bitField0_ & 0x00000100) == 0x00000100); - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * produced html report. - * </pre> - * - * <code>optional bytes html = 3 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.google.protobuf.ByteString getHtml() { - return html_; - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * produced html report. - * </pre> - * - * <code>optional bytes html = 3 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setHtml(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000100; - html_ = value; - onChanged(); - return this; - } - /** - * <pre> - * TODO(ryanjcampbell@) delete deprecated field - * produced html report. - * </pre> - * - * <code>optional bytes html = 3 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder clearHtml() { - bitField0_ = (bitField0_ & ~0x00000100); - html_ = getDefaultInstance().getHtml(); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.CoverageReportMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.CoverageReportMessage) - private static final com.android.vts.proto.VtsReportMessage.CoverageReportMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.CoverageReportMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.CoverageReportMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<CoverageReportMessage> - PARSER = new com.google.protobuf.AbstractParser<CoverageReportMessage>() { - public CoverageReportMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CoverageReportMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<CoverageReportMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<CoverageReportMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface HalInterfaceMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.HalInterfaceMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * HAL package name. e.g. android.hardware.foo. - * </pre> - * - * <code>optional bytes hal_package_name = 1;</code> - */ - boolean hasHalPackageName(); - /** - * <pre> - * HAL package name. e.g. android.hardware.foo. - * </pre> - * - * <code>optional bytes hal_package_name = 1;</code> - */ - com.google.protobuf.ByteString getHalPackageName(); - - /** - * <pre> - * HAL (major) version. e.g. 1. - * </pre> - * - * <code>optional int32 hal_version_major = 2;</code> - */ - boolean hasHalVersionMajor(); - /** - * <pre> - * HAL (major) version. e.g. 1. - * </pre> - * - * <code>optional int32 hal_version_major = 2;</code> - */ - int getHalVersionMajor(); - - /** - * <pre> - * HAL (minor) version. e.g. 0. - * </pre> - * - * <code>optional int32 hal_version_minor = 3;</code> - */ - boolean hasHalVersionMinor(); - /** - * <pre> - * HAL (minor) version. e.g. 0. - * </pre> - * - * <code>optional int32 hal_version_minor = 3;</code> - */ - int getHalVersionMinor(); - - /** - * <pre> - * HAL interface name. e.g. IFoo. - * </pre> - * - * <code>optional bytes hal_interface_name = 4;</code> - */ - boolean hasHalInterfaceName(); - /** - * <pre> - * HAL interface name. e.g. IFoo. - * </pre> - * - * <code>optional bytes hal_interface_name = 4;</code> - */ - com.google.protobuf.ByteString getHalInterfaceName(); - - /** - * <pre> - * HAL release level (e.g. "current", "27", "28") - * </pre> - * - * <code>optional bytes hal_release_level = 5;</code> - */ - boolean hasHalReleaseLevel(); - /** - * <pre> - * HAL release level (e.g. "current", "27", "28") - * </pre> - * - * <code>optional bytes hal_release_level = 5;</code> - */ - com.google.protobuf.ByteString getHalReleaseLevel(); - } - /** - * <pre> - * Information for a HAL interface. - * </pre> - * - * Protobuf type {@code android.vts.HalInterfaceMessage} - */ - public static final class HalInterfaceMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.HalInterfaceMessage) - HalInterfaceMessageOrBuilder { - // Use HalInterfaceMessage.newBuilder() to construct. - private HalInterfaceMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private HalInterfaceMessage() { - halPackageName_ = com.google.protobuf.ByteString.EMPTY; - halVersionMajor_ = 0; - halVersionMinor_ = 0; - halInterfaceName_ = com.google.protobuf.ByteString.EMPTY; - halReleaseLevel_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private HalInterfaceMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - halPackageName_ = input.readBytes(); - break; - } - case 16: { - bitField0_ |= 0x00000002; - halVersionMajor_ = input.readInt32(); - break; - } - case 24: { - bitField0_ |= 0x00000004; - halVersionMinor_ = input.readInt32(); - break; - } - case 34: { - bitField0_ |= 0x00000008; - halInterfaceName_ = input.readBytes(); - break; - } - case 42: { - bitField0_ |= 0x00000010; - halReleaseLevel_ = input.readBytes(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_HalInterfaceMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_HalInterfaceMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.class, com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.Builder.class); - } - - private int bitField0_; - public static final int HAL_PACKAGE_NAME_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString halPackageName_; - /** - * <pre> - * HAL package name. e.g. android.hardware.foo. - * </pre> - * - * <code>optional bytes hal_package_name = 1;</code> - */ - public boolean hasHalPackageName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * HAL package name. e.g. android.hardware.foo. - * </pre> - * - * <code>optional bytes hal_package_name = 1;</code> - */ - public com.google.protobuf.ByteString getHalPackageName() { - return halPackageName_; - } - - public static final int HAL_VERSION_MAJOR_FIELD_NUMBER = 2; - private int halVersionMajor_; - /** - * <pre> - * HAL (major) version. e.g. 1. - * </pre> - * - * <code>optional int32 hal_version_major = 2;</code> - */ - public boolean hasHalVersionMajor() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * HAL (major) version. e.g. 1. - * </pre> - * - * <code>optional int32 hal_version_major = 2;</code> - */ - public int getHalVersionMajor() { - return halVersionMajor_; - } - - public static final int HAL_VERSION_MINOR_FIELD_NUMBER = 3; - private int halVersionMinor_; - /** - * <pre> - * HAL (minor) version. e.g. 0. - * </pre> - * - * <code>optional int32 hal_version_minor = 3;</code> - */ - public boolean hasHalVersionMinor() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * HAL (minor) version. e.g. 0. - * </pre> - * - * <code>optional int32 hal_version_minor = 3;</code> - */ - public int getHalVersionMinor() { - return halVersionMinor_; - } - - public static final int HAL_INTERFACE_NAME_FIELD_NUMBER = 4; - private com.google.protobuf.ByteString halInterfaceName_; - /** - * <pre> - * HAL interface name. e.g. IFoo. - * </pre> - * - * <code>optional bytes hal_interface_name = 4;</code> - */ - public boolean hasHalInterfaceName() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * HAL interface name. e.g. IFoo. - * </pre> - * - * <code>optional bytes hal_interface_name = 4;</code> - */ - public com.google.protobuf.ByteString getHalInterfaceName() { - return halInterfaceName_; - } - - public static final int HAL_RELEASE_LEVEL_FIELD_NUMBER = 5; - private com.google.protobuf.ByteString halReleaseLevel_; - /** - * <pre> - * HAL release level (e.g. "current", "27", "28") - * </pre> - * - * <code>optional bytes hal_release_level = 5;</code> - */ - public boolean hasHalReleaseLevel() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * HAL release level (e.g. "current", "27", "28") - * </pre> - * - * <code>optional bytes hal_release_level = 5;</code> - */ - public com.google.protobuf.ByteString getHalReleaseLevel() { - return halReleaseLevel_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, halPackageName_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeInt32(2, halVersionMajor_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeInt32(3, halVersionMinor_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(4, halInterfaceName_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBytes(5, halReleaseLevel_); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, halPackageName_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(2, halVersionMajor_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(3, halVersionMinor_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, halInterfaceName_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(5, halReleaseLevel_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.HalInterfaceMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage other = (com.android.vts.proto.VtsReportMessage.HalInterfaceMessage) obj; - - boolean result = true; - result = result && (hasHalPackageName() == other.hasHalPackageName()); - if (hasHalPackageName()) { - result = result && getHalPackageName() - .equals(other.getHalPackageName()); - } - result = result && (hasHalVersionMajor() == other.hasHalVersionMajor()); - if (hasHalVersionMajor()) { - result = result && (getHalVersionMajor() - == other.getHalVersionMajor()); - } - result = result && (hasHalVersionMinor() == other.hasHalVersionMinor()); - if (hasHalVersionMinor()) { - result = result && (getHalVersionMinor() - == other.getHalVersionMinor()); - } - result = result && (hasHalInterfaceName() == other.hasHalInterfaceName()); - if (hasHalInterfaceName()) { - result = result && getHalInterfaceName() - .equals(other.getHalInterfaceName()); - } - result = result && (hasHalReleaseLevel() == other.hasHalReleaseLevel()); - if (hasHalReleaseLevel()) { - result = result && getHalReleaseLevel() - .equals(other.getHalReleaseLevel()); - } - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasHalPackageName()) { - hash = (37 * hash) + HAL_PACKAGE_NAME_FIELD_NUMBER; - hash = (53 * hash) + getHalPackageName().hashCode(); - } - if (hasHalVersionMajor()) { - hash = (37 * hash) + HAL_VERSION_MAJOR_FIELD_NUMBER; - hash = (53 * hash) + getHalVersionMajor(); - } - if (hasHalVersionMinor()) { - hash = (37 * hash) + HAL_VERSION_MINOR_FIELD_NUMBER; - hash = (53 * hash) + getHalVersionMinor(); - } - if (hasHalInterfaceName()) { - hash = (37 * hash) + HAL_INTERFACE_NAME_FIELD_NUMBER; - hash = (53 * hash) + getHalInterfaceName().hashCode(); - } - if (hasHalReleaseLevel()) { - hash = (37 * hash) + HAL_RELEASE_LEVEL_FIELD_NUMBER; - hash = (53 * hash) + getHalReleaseLevel().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.HalInterfaceMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * Information for a HAL interface. - * </pre> - * - * Protobuf type {@code android.vts.HalInterfaceMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.HalInterfaceMessage) - com.android.vts.proto.VtsReportMessage.HalInterfaceMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_HalInterfaceMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_HalInterfaceMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.class, com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - halPackageName_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - halVersionMajor_ = 0; - bitField0_ = (bitField0_ & ~0x00000002); - halVersionMinor_ = 0; - bitField0_ = (bitField0_ & ~0x00000004); - halInterfaceName_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000008); - halReleaseLevel_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_HalInterfaceMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessage build() { - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage result = new com.android.vts.proto.VtsReportMessage.HalInterfaceMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.halPackageName_ = halPackageName_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.halVersionMajor_ = halVersionMajor_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.halVersionMinor_ = halVersionMinor_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.halInterfaceName_ = halInterfaceName_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.halReleaseLevel_ = halReleaseLevel_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.HalInterfaceMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.HalInterfaceMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.HalInterfaceMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.getDefaultInstance()) return this; - if (other.hasHalPackageName()) { - setHalPackageName(other.getHalPackageName()); - } - if (other.hasHalVersionMajor()) { - setHalVersionMajor(other.getHalVersionMajor()); - } - if (other.hasHalVersionMinor()) { - setHalVersionMinor(other.getHalVersionMinor()); - } - if (other.hasHalInterfaceName()) { - setHalInterfaceName(other.getHalInterfaceName()); - } - if (other.hasHalReleaseLevel()) { - setHalReleaseLevel(other.getHalReleaseLevel()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.HalInterfaceMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString halPackageName_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * HAL package name. e.g. android.hardware.foo. - * </pre> - * - * <code>optional bytes hal_package_name = 1;</code> - */ - public boolean hasHalPackageName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * HAL package name. e.g. android.hardware.foo. - * </pre> - * - * <code>optional bytes hal_package_name = 1;</code> - */ - public com.google.protobuf.ByteString getHalPackageName() { - return halPackageName_; - } - /** - * <pre> - * HAL package name. e.g. android.hardware.foo. - * </pre> - * - * <code>optional bytes hal_package_name = 1;</code> - */ - public Builder setHalPackageName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - halPackageName_ = value; - onChanged(); - return this; - } - /** - * <pre> - * HAL package name. e.g. android.hardware.foo. - * </pre> - * - * <code>optional bytes hal_package_name = 1;</code> - */ - public Builder clearHalPackageName() { - bitField0_ = (bitField0_ & ~0x00000001); - halPackageName_ = getDefaultInstance().getHalPackageName(); - onChanged(); - return this; - } - - private int halVersionMajor_ ; - /** - * <pre> - * HAL (major) version. e.g. 1. - * </pre> - * - * <code>optional int32 hal_version_major = 2;</code> - */ - public boolean hasHalVersionMajor() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * HAL (major) version. e.g. 1. - * </pre> - * - * <code>optional int32 hal_version_major = 2;</code> - */ - public int getHalVersionMajor() { - return halVersionMajor_; - } - /** - * <pre> - * HAL (major) version. e.g. 1. - * </pre> - * - * <code>optional int32 hal_version_major = 2;</code> - */ - public Builder setHalVersionMajor(int value) { - bitField0_ |= 0x00000002; - halVersionMajor_ = value; - onChanged(); - return this; - } - /** - * <pre> - * HAL (major) version. e.g. 1. - * </pre> - * - * <code>optional int32 hal_version_major = 2;</code> - */ - public Builder clearHalVersionMajor() { - bitField0_ = (bitField0_ & ~0x00000002); - halVersionMajor_ = 0; - onChanged(); - return this; - } - - private int halVersionMinor_ ; - /** - * <pre> - * HAL (minor) version. e.g. 0. - * </pre> - * - * <code>optional int32 hal_version_minor = 3;</code> - */ - public boolean hasHalVersionMinor() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * HAL (minor) version. e.g. 0. - * </pre> - * - * <code>optional int32 hal_version_minor = 3;</code> - */ - public int getHalVersionMinor() { - return halVersionMinor_; - } - /** - * <pre> - * HAL (minor) version. e.g. 0. - * </pre> - * - * <code>optional int32 hal_version_minor = 3;</code> - */ - public Builder setHalVersionMinor(int value) { - bitField0_ |= 0x00000004; - halVersionMinor_ = value; - onChanged(); - return this; - } - /** - * <pre> - * HAL (minor) version. e.g. 0. - * </pre> - * - * <code>optional int32 hal_version_minor = 3;</code> - */ - public Builder clearHalVersionMinor() { - bitField0_ = (bitField0_ & ~0x00000004); - halVersionMinor_ = 0; - onChanged(); - return this; - } - - private com.google.protobuf.ByteString halInterfaceName_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * HAL interface name. e.g. IFoo. - * </pre> - * - * <code>optional bytes hal_interface_name = 4;</code> - */ - public boolean hasHalInterfaceName() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * HAL interface name. e.g. IFoo. - * </pre> - * - * <code>optional bytes hal_interface_name = 4;</code> - */ - public com.google.protobuf.ByteString getHalInterfaceName() { - return halInterfaceName_; - } - /** - * <pre> - * HAL interface name. e.g. IFoo. - * </pre> - * - * <code>optional bytes hal_interface_name = 4;</code> - */ - public Builder setHalInterfaceName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - halInterfaceName_ = value; - onChanged(); - return this; - } - /** - * <pre> - * HAL interface name. e.g. IFoo. - * </pre> - * - * <code>optional bytes hal_interface_name = 4;</code> - */ - public Builder clearHalInterfaceName() { - bitField0_ = (bitField0_ & ~0x00000008); - halInterfaceName_ = getDefaultInstance().getHalInterfaceName(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString halReleaseLevel_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * HAL release level (e.g. "current", "27", "28") - * </pre> - * - * <code>optional bytes hal_release_level = 5;</code> - */ - public boolean hasHalReleaseLevel() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * HAL release level (e.g. "current", "27", "28") - * </pre> - * - * <code>optional bytes hal_release_level = 5;</code> - */ - public com.google.protobuf.ByteString getHalReleaseLevel() { - return halReleaseLevel_; - } - /** - * <pre> - * HAL release level (e.g. "current", "27", "28") - * </pre> - * - * <code>optional bytes hal_release_level = 5;</code> - */ - public Builder setHalReleaseLevel(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - halReleaseLevel_ = value; - onChanged(); - return this; - } - /** - * <pre> - * HAL release level (e.g. "current", "27", "28") - * </pre> - * - * <code>optional bytes hal_release_level = 5;</code> - */ - public Builder clearHalReleaseLevel() { - bitField0_ = (bitField0_ & ~0x00000010); - halReleaseLevel_ = getDefaultInstance().getHalReleaseLevel(); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.HalInterfaceMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.HalInterfaceMessage) - private static final com.android.vts.proto.VtsReportMessage.HalInterfaceMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.HalInterfaceMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.HalInterfaceMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<HalInterfaceMessage> - PARSER = new com.google.protobuf.AbstractParser<HalInterfaceMessage>() { - public HalInterfaceMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new HalInterfaceMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<HalInterfaceMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<HalInterfaceMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface ApiCoverageReportMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.ApiCoverageReportMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - boolean hasHalInterface(); - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage getHalInterface(); - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - com.android.vts.proto.VtsReportMessage.HalInterfaceMessageOrBuilder getHalInterfaceOrBuilder(); - - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - java.util.List<com.google.protobuf.ByteString> getHalApiList(); - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - int getHalApiCount(); - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - com.google.protobuf.ByteString getHalApi(int index); - - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - java.util.List<com.google.protobuf.ByteString> getCoveredHalApiList(); - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - int getCoveredHalApiCount(); - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - com.google.protobuf.ByteString getCoveredHalApi(int index); - } - /** - * <pre> - * To specify a API coverage report. Currently only for HAL API coverage. - * </pre> - * - * Protobuf type {@code android.vts.ApiCoverageReportMessage} - */ - public static final class ApiCoverageReportMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.ApiCoverageReportMessage) - ApiCoverageReportMessageOrBuilder { - // Use ApiCoverageReportMessage.newBuilder() to construct. - private ApiCoverageReportMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private ApiCoverageReportMessage() { - halApi_ = java.util.Collections.emptyList(); - coveredHalApi_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private ApiCoverageReportMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.Builder subBuilder = null; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - subBuilder = halInterface_.toBuilder(); - } - halInterface_ = input.readMessage(com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.PARSER, extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(halInterface_); - halInterface_ = subBuilder.buildPartial(); - } - bitField0_ |= 0x00000001; - break; - } - case 90: { - if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) { - halApi_ = new java.util.ArrayList<com.google.protobuf.ByteString>(); - mutable_bitField0_ |= 0x00000002; - } - halApi_.add(input.readBytes()); - break; - } - case 98: { - if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { - coveredHalApi_ = new java.util.ArrayList<com.google.protobuf.ByteString>(); - mutable_bitField0_ |= 0x00000004; - } - coveredHalApi_.add(input.readBytes()); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { - halApi_ = java.util.Collections.unmodifiableList(halApi_); - } - if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { - coveredHalApi_ = java.util.Collections.unmodifiableList(coveredHalApi_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ApiCoverageReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ApiCoverageReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.class, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder.class); - } - - private int bitField0_; - public static final int HAL_INTERFACE_FIELD_NUMBER = 1; - private com.android.vts.proto.VtsReportMessage.HalInterfaceMessage halInterface_; - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public boolean hasHalInterface() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessage getHalInterface() { - return halInterface_ == null ? com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.getDefaultInstance() : halInterface_; - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessageOrBuilder getHalInterfaceOrBuilder() { - return halInterface_ == null ? com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.getDefaultInstance() : halInterface_; - } - - public static final int HAL_API_FIELD_NUMBER = 11; - private java.util.List<com.google.protobuf.ByteString> halApi_; - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getHalApiList() { - return halApi_; - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public int getHalApiCount() { - return halApi_.size(); - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public com.google.protobuf.ByteString getHalApi(int index) { - return halApi_.get(index); - } - - public static final int COVERED_HAL_API_FIELD_NUMBER = 12; - private java.util.List<com.google.protobuf.ByteString> coveredHalApi_; - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getCoveredHalApiList() { - return coveredHalApi_; - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public int getCoveredHalApiCount() { - return coveredHalApi_.size(); - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public com.google.protobuf.ByteString getCoveredHalApi(int index) { - return coveredHalApi_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeMessage(1, getHalInterface()); - } - for (int i = 0; i < halApi_.size(); i++) { - output.writeBytes(11, halApi_.get(i)); - } - for (int i = 0; i < coveredHalApi_.size(); i++) { - output.writeBytes(12, coveredHalApi_.get(i)); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getHalInterface()); - } - { - int dataSize = 0; - for (int i = 0; i < halApi_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(halApi_.get(i)); - } - size += dataSize; - size += 1 * getHalApiList().size(); - } - { - int dataSize = 0; - for (int i = 0; i < coveredHalApi_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(coveredHalApi_.get(i)); - } - size += dataSize; - size += 1 * getCoveredHalApiList().size(); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage other = (com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage) obj; - - boolean result = true; - result = result && (hasHalInterface() == other.hasHalInterface()); - if (hasHalInterface()) { - result = result && getHalInterface() - .equals(other.getHalInterface()); - } - result = result && getHalApiList() - .equals(other.getHalApiList()); - result = result && getCoveredHalApiList() - .equals(other.getCoveredHalApiList()); - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasHalInterface()) { - hash = (37 * hash) + HAL_INTERFACE_FIELD_NUMBER; - hash = (53 * hash) + getHalInterface().hashCode(); - } - if (getHalApiCount() > 0) { - hash = (37 * hash) + HAL_API_FIELD_NUMBER; - hash = (53 * hash) + getHalApiList().hashCode(); - } - if (getCoveredHalApiCount() > 0) { - hash = (37 * hash) + COVERED_HAL_API_FIELD_NUMBER; - hash = (53 * hash) + getCoveredHalApiList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a API coverage report. Currently only for HAL API coverage. - * </pre> - * - * Protobuf type {@code android.vts.ApiCoverageReportMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.ApiCoverageReportMessage) - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ApiCoverageReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ApiCoverageReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.class, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getHalInterfaceFieldBuilder(); - } - } - public Builder clear() { - super.clear(); - if (halInterfaceBuilder_ == null) { - halInterface_ = null; - } else { - halInterfaceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - halApi_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - coveredHalApi_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_ApiCoverageReportMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage build() { - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage result = new com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - if (halInterfaceBuilder_ == null) { - result.halInterface_ = halInterface_; - } else { - result.halInterface_ = halInterfaceBuilder_.build(); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - halApi_ = java.util.Collections.unmodifiableList(halApi_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.halApi_ = halApi_; - if (((bitField0_ & 0x00000004) == 0x00000004)) { - coveredHalApi_ = java.util.Collections.unmodifiableList(coveredHalApi_); - bitField0_ = (bitField0_ & ~0x00000004); - } - result.coveredHalApi_ = coveredHalApi_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.getDefaultInstance()) return this; - if (other.hasHalInterface()) { - mergeHalInterface(other.getHalInterface()); - } - if (!other.halApi_.isEmpty()) { - if (halApi_.isEmpty()) { - halApi_ = other.halApi_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureHalApiIsMutable(); - halApi_.addAll(other.halApi_); - } - onChanged(); - } - if (!other.coveredHalApi_.isEmpty()) { - if (coveredHalApi_.isEmpty()) { - coveredHalApi_ = other.coveredHalApi_; - bitField0_ = (bitField0_ & ~0x00000004); - } else { - ensureCoveredHalApiIsMutable(); - coveredHalApi_.addAll(other.coveredHalApi_); - } - onChanged(); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.android.vts.proto.VtsReportMessage.HalInterfaceMessage halInterface_ = null; - private com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage, com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.Builder, com.android.vts.proto.VtsReportMessage.HalInterfaceMessageOrBuilder> halInterfaceBuilder_; - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public boolean hasHalInterface() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessage getHalInterface() { - if (halInterfaceBuilder_ == null) { - return halInterface_ == null ? com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.getDefaultInstance() : halInterface_; - } else { - return halInterfaceBuilder_.getMessage(); - } - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public Builder setHalInterface(com.android.vts.proto.VtsReportMessage.HalInterfaceMessage value) { - if (halInterfaceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - halInterface_ = value; - onChanged(); - } else { - halInterfaceBuilder_.setMessage(value); - } - bitField0_ |= 0x00000001; - return this; - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public Builder setHalInterface( - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.Builder builderForValue) { - if (halInterfaceBuilder_ == null) { - halInterface_ = builderForValue.build(); - onChanged(); - } else { - halInterfaceBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000001; - return this; - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public Builder mergeHalInterface(com.android.vts.proto.VtsReportMessage.HalInterfaceMessage value) { - if (halInterfaceBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001) && - halInterface_ != null && - halInterface_ != com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.getDefaultInstance()) { - halInterface_ = - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.newBuilder(halInterface_).mergeFrom(value).buildPartial(); - } else { - halInterface_ = value; - } - onChanged(); - } else { - halInterfaceBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000001; - return this; - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public Builder clearHalInterface() { - if (halInterfaceBuilder_ == null) { - halInterface_ = null; - onChanged(); - } else { - halInterfaceBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.Builder getHalInterfaceBuilder() { - bitField0_ |= 0x00000001; - onChanged(); - return getHalInterfaceFieldBuilder().getBuilder(); - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - public com.android.vts.proto.VtsReportMessage.HalInterfaceMessageOrBuilder getHalInterfaceOrBuilder() { - if (halInterfaceBuilder_ != null) { - return halInterfaceBuilder_.getMessageOrBuilder(); - } else { - return halInterface_ == null ? - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.getDefaultInstance() : halInterface_; - } - } - /** - * <pre> - * Hal interface info. - * </pre> - * - * <code>optional .android.vts.HalInterfaceMessage hal_interface = 1;</code> - */ - private com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage, com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.Builder, com.android.vts.proto.VtsReportMessage.HalInterfaceMessageOrBuilder> - getHalInterfaceFieldBuilder() { - if (halInterfaceBuilder_ == null) { - halInterfaceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.HalInterfaceMessage, com.android.vts.proto.VtsReportMessage.HalInterfaceMessage.Builder, com.android.vts.proto.VtsReportMessage.HalInterfaceMessageOrBuilder>( - getHalInterface(), - getParentForChildren(), - isClean()); - halInterface_ = null; - } - return halInterfaceBuilder_; - } - - private java.util.List<com.google.protobuf.ByteString> halApi_ = java.util.Collections.emptyList(); - private void ensureHalApiIsMutable() { - if (!((bitField0_ & 0x00000002) == 0x00000002)) { - halApi_ = new java.util.ArrayList<com.google.protobuf.ByteString>(halApi_); - bitField0_ |= 0x00000002; - } - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getHalApiList() { - return java.util.Collections.unmodifiableList(halApi_); - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public int getHalApiCount() { - return halApi_.size(); - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public com.google.protobuf.ByteString getHalApi(int index) { - return halApi_.get(index); - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public Builder setHalApi( - int index, com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureHalApiIsMutable(); - halApi_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public Builder addHalApi(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureHalApiIsMutable(); - halApi_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public Builder addAllHalApi( - java.lang.Iterable<? extends com.google.protobuf.ByteString> values) { - ensureHalApiIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, halApi_); - onChanged(); - return this; - } - /** - * <pre> - * APIs provided by the HAL with given package, version and interface name. - * </pre> - * - * <code>repeated bytes hal_api = 11;</code> - */ - public Builder clearHalApi() { - halApi_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - - private java.util.List<com.google.protobuf.ByteString> coveredHalApi_ = java.util.Collections.emptyList(); - private void ensureCoveredHalApiIsMutable() { - if (!((bitField0_ & 0x00000004) == 0x00000004)) { - coveredHalApi_ = new java.util.ArrayList<com.google.protobuf.ByteString>(coveredHalApi_); - bitField0_ |= 0x00000004; - } - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getCoveredHalApiList() { - return java.util.Collections.unmodifiableList(coveredHalApi_); - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public int getCoveredHalApiCount() { - return coveredHalApi_.size(); - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public com.google.protobuf.ByteString getCoveredHalApi(int index) { - return coveredHalApi_.get(index); - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public Builder setCoveredHalApi( - int index, com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoveredHalApiIsMutable(); - coveredHalApi_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public Builder addCoveredHalApi(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoveredHalApiIsMutable(); - coveredHalApi_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public Builder addAllCoveredHalApi( - java.lang.Iterable<? extends com.google.protobuf.ByteString> values) { - ensureCoveredHalApiIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, coveredHalApi_); - onChanged(); - return this; - } - /** - * <pre> - * APIs covered by the test. - * </pre> - * - * <code>repeated bytes covered_hal_api = 12;</code> - */ - public Builder clearCoveredHalApi() { - coveredHalApi_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.ApiCoverageReportMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.ApiCoverageReportMessage) - private static final com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<ApiCoverageReportMessage> - PARSER = new com.google.protobuf.AbstractParser<ApiCoverageReportMessage>() { - public ApiCoverageReportMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ApiCoverageReportMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<ApiCoverageReportMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<ApiCoverageReportMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface LogMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.LogMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * URL of a produced log file (e.g., stdout, stderr). - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - boolean hasUrl(); - /** - * <pre> - * URL of a produced log file (e.g., stdout, stderr). - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - com.google.protobuf.ByteString getUrl(); - - /** - * <pre> - * Name of a log file. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - boolean hasName(); - /** - * <pre> - * Name of a log file. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - com.google.protobuf.ByteString getName(); - - /** - * <pre> - * Content of log. Caution: do not put too much log in protobuf message, - * as BigTable for example recommends < 10 MB for each record cell. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - boolean hasContent(); - /** - * <pre> - * Content of log. Caution: do not put too much log in protobuf message, - * as BigTable for example recommends < 10 MB for each record cell. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - com.google.protobuf.ByteString getContent(); - } - /** - * <pre> - * To specify log report. This can be used either for per-test-module - * log message or per-test-case log message. - * </pre> - * - * Protobuf type {@code android.vts.LogMessage} - */ - public static final class LogMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.LogMessage) - LogMessageOrBuilder { - // Use LogMessage.newBuilder() to construct. - private LogMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private LogMessage() { - url_ = com.google.protobuf.ByteString.EMPTY; - name_ = com.google.protobuf.ByteString.EMPTY; - content_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private LogMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - url_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - name_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - content_ = input.readBytes(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_LogMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_LogMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.LogMessage.class, com.android.vts.proto.VtsReportMessage.LogMessage.Builder.class); - } - - private int bitField0_; - public static final int URL_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString url_; - /** - * <pre> - * URL of a produced log file (e.g., stdout, stderr). - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public boolean hasUrl() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * URL of a produced log file (e.g., stdout, stderr). - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public com.google.protobuf.ByteString getUrl() { - return url_; - } - - public static final int NAME_FIELD_NUMBER = 2; - private com.google.protobuf.ByteString name_; - /** - * <pre> - * Name of a log file. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * Name of a log file. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - - public static final int CONTENT_FIELD_NUMBER = 3; - private com.google.protobuf.ByteString content_; - /** - * <pre> - * Content of log. Caution: do not put too much log in protobuf message, - * as BigTable for example recommends < 10 MB for each record cell. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public boolean hasContent() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * Content of log. Caution: do not put too much log in protobuf message, - * as BigTable for example recommends < 10 MB for each record cell. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public com.google.protobuf.ByteString getContent() { - return content_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, url_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, name_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, content_); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, url_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, name_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, content_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.LogMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.LogMessage other = (com.android.vts.proto.VtsReportMessage.LogMessage) obj; - - boolean result = true; - result = result && (hasUrl() == other.hasUrl()); - if (hasUrl()) { - result = result && getUrl() - .equals(other.getUrl()); - } - result = result && (hasName() == other.hasName()); - if (hasName()) { - result = result && getName() - .equals(other.getName()); - } - result = result && (hasContent() == other.hasContent()); - if (hasContent()) { - result = result && getContent() - .equals(other.getContent()); - } - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasUrl()) { - hash = (37 * hash) + URL_FIELD_NUMBER; - hash = (53 * hash) + getUrl().hashCode(); - } - if (hasName()) { - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - } - if (hasContent()) { - hash = (37 * hash) + CONTENT_FIELD_NUMBER; - hash = (53 * hash) + getContent().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.LogMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.LogMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.LogMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify log report. This can be used either for per-test-module - * log message or per-test-case log message. - * </pre> - * - * Protobuf type {@code android.vts.LogMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.LogMessage) - com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_LogMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_LogMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.LogMessage.class, com.android.vts.proto.VtsReportMessage.LogMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.LogMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - url_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - name_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000002); - content_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_LogMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.LogMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.LogMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.LogMessage build() { - com.android.vts.proto.VtsReportMessage.LogMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.LogMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.LogMessage result = new com.android.vts.proto.VtsReportMessage.LogMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.url_ = url_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.name_ = name_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.content_ = content_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.LogMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.LogMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.LogMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.LogMessage.getDefaultInstance()) return this; - if (other.hasUrl()) { - setUrl(other.getUrl()); - } - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasContent()) { - setContent(other.getContent()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.LogMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.LogMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString url_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * URL of a produced log file (e.g., stdout, stderr). - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public boolean hasUrl() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * URL of a produced log file (e.g., stdout, stderr). - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public com.google.protobuf.ByteString getUrl() { - return url_; - } - /** - * <pre> - * URL of a produced log file (e.g., stdout, stderr). - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public Builder setUrl(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - url_ = value; - onChanged(); - return this; - } - /** - * <pre> - * URL of a produced log file (e.g., stdout, stderr). - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public Builder clearUrl() { - bitField0_ = (bitField0_ & ~0x00000001); - url_ = getDefaultInstance().getUrl(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString name_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * Name of a log file. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * Name of a log file. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - /** - * <pre> - * Name of a log file. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public Builder setName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - return this; - } - /** - * <pre> - * Name of a log file. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000002); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString content_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * Content of log. Caution: do not put too much log in protobuf message, - * as BigTable for example recommends < 10 MB for each record cell. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public boolean hasContent() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * Content of log. Caution: do not put too much log in protobuf message, - * as BigTable for example recommends < 10 MB for each record cell. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public com.google.protobuf.ByteString getContent() { - return content_; - } - /** - * <pre> - * Content of log. Caution: do not put too much log in protobuf message, - * as BigTable for example recommends < 10 MB for each record cell. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public Builder setContent(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - content_ = value; - onChanged(); - return this; - } - /** - * <pre> - * Content of log. Caution: do not put too much log in protobuf message, - * as BigTable for example recommends < 10 MB for each record cell. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public Builder clearContent() { - bitField0_ = (bitField0_ & ~0x00000004); - content_ = getDefaultInstance().getContent(); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.LogMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.LogMessage) - private static final com.android.vts.proto.VtsReportMessage.LogMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.LogMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.LogMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<LogMessage> - PARSER = new com.google.protobuf.AbstractParser<LogMessage>() { - public LogMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new LogMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<LogMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<LogMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.LogMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface UrlResourceMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.UrlResourceMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * URL of a resource file. - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - boolean hasUrl(); - /** - * <pre> - * URL of a resource file. - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - com.google.protobuf.ByteString getUrl(); - - /** - * <pre> - * Name of a resource file representing its type and does not have to be - * the same as the exact file name. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - boolean hasName(); - /** - * <pre> - * Name of a resource file representing its type and does not have to be - * the same as the exact file name. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - com.google.protobuf.ByteString getName(); - - /** - * <pre> - * Raw content of a resource file. Used if the file is small. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - boolean hasContent(); - /** - * <pre> - * Raw content of a resource file. Used if the file is small. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - com.google.protobuf.ByteString getContent(); - } - /** - * <pre> - * To specify a resource object (reachable via a URL or contained in the - * message). This can be used to store a log file or an XML (or HTML) report - * file kept in a Google Cloud Storage (GCS) bucket or partner's network file - * system, or hosted by a HTTP server. - * </pre> - * - * Protobuf type {@code android.vts.UrlResourceMessage} - */ - public static final class UrlResourceMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.UrlResourceMessage) - UrlResourceMessageOrBuilder { - // Use UrlResourceMessage.newBuilder() to construct. - private UrlResourceMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private UrlResourceMessage() { - url_ = com.google.protobuf.ByteString.EMPTY; - name_ = com.google.protobuf.ByteString.EMPTY; - content_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private UrlResourceMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - url_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - name_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - content_ = input.readBytes(); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_UrlResourceMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_UrlResourceMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.UrlResourceMessage.class, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder.class); - } - - private int bitField0_; - public static final int URL_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString url_; - /** - * <pre> - * URL of a resource file. - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public boolean hasUrl() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * URL of a resource file. - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public com.google.protobuf.ByteString getUrl() { - return url_; - } - - public static final int NAME_FIELD_NUMBER = 2; - private com.google.protobuf.ByteString name_; - /** - * <pre> - * Name of a resource file representing its type and does not have to be - * the same as the exact file name. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * Name of a resource file representing its type and does not have to be - * the same as the exact file name. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - - public static final int CONTENT_FIELD_NUMBER = 3; - private com.google.protobuf.ByteString content_; - /** - * <pre> - * Raw content of a resource file. Used if the file is small. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public boolean hasContent() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * Raw content of a resource file. Used if the file is small. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public com.google.protobuf.ByteString getContent() { - return content_; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, url_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, name_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, content_); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, url_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, name_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, content_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.UrlResourceMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.UrlResourceMessage other = (com.android.vts.proto.VtsReportMessage.UrlResourceMessage) obj; - - boolean result = true; - result = result && (hasUrl() == other.hasUrl()); - if (hasUrl()) { - result = result && getUrl() - .equals(other.getUrl()); - } - result = result && (hasName() == other.hasName()); - if (hasName()) { - result = result && getName() - .equals(other.getName()); - } - result = result && (hasContent() == other.hasContent()); - if (hasContent()) { - result = result && getContent() - .equals(other.getContent()); - } - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasUrl()) { - hash = (37 * hash) + URL_FIELD_NUMBER; - hash = (53 * hash) + getUrl().hashCode(); - } - if (hasName()) { - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - } - if (hasContent()) { - hash = (37 * hash) + CONTENT_FIELD_NUMBER; - hash = (53 * hash) + getContent().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.UrlResourceMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a resource object (reachable via a URL or contained in the - * message). This can be used to store a log file or an XML (or HTML) report - * file kept in a Google Cloud Storage (GCS) bucket or partner's network file - * system, or hosted by a HTTP server. - * </pre> - * - * Protobuf type {@code android.vts.UrlResourceMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.UrlResourceMessage) - com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_UrlResourceMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_UrlResourceMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.UrlResourceMessage.class, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.UrlResourceMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - url_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - name_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000002); - content_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000004); - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_UrlResourceMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.UrlResourceMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage build() { - com.android.vts.proto.VtsReportMessage.UrlResourceMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.UrlResourceMessage result = new com.android.vts.proto.VtsReportMessage.UrlResourceMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.url_ = url_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.name_ = name_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.content_ = content_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.UrlResourceMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.UrlResourceMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.UrlResourceMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.UrlResourceMessage.getDefaultInstance()) return this; - if (other.hasUrl()) { - setUrl(other.getUrl()); - } - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasContent()) { - setContent(other.getContent()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.UrlResourceMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.UrlResourceMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString url_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * URL of a resource file. - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public boolean hasUrl() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * URL of a resource file. - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public com.google.protobuf.ByteString getUrl() { - return url_; - } - /** - * <pre> - * URL of a resource file. - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public Builder setUrl(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - url_ = value; - onChanged(); - return this; - } - /** - * <pre> - * URL of a resource file. - * </pre> - * - * <code>optional bytes url = 1;</code> - */ - public Builder clearUrl() { - bitField0_ = (bitField0_ & ~0x00000001); - url_ = getDefaultInstance().getUrl(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString name_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * Name of a resource file representing its type and does not have to be - * the same as the exact file name. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * Name of a resource file representing its type and does not have to be - * the same as the exact file name. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public com.google.protobuf.ByteString getName() { - return name_; - } - /** - * <pre> - * Name of a resource file representing its type and does not have to be - * the same as the exact file name. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public Builder setName(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - return this; - } - /** - * <pre> - * Name of a resource file representing its type and does not have to be - * the same as the exact file name. - * </pre> - * - * <code>optional bytes name = 2;</code> - */ - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000002); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString content_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * Raw content of a resource file. Used if the file is small. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public boolean hasContent() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * Raw content of a resource file. Used if the file is small. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public com.google.protobuf.ByteString getContent() { - return content_; - } - /** - * <pre> - * Raw content of a resource file. Used if the file is small. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public Builder setContent(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - content_ = value; - onChanged(); - return this; - } - /** - * <pre> - * Raw content of a resource file. Used if the file is small. - * </pre> - * - * <code>optional bytes content = 3;</code> - */ - public Builder clearContent() { - bitField0_ = (bitField0_ & ~0x00000004); - content_ = getDefaultInstance().getContent(); - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.UrlResourceMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.UrlResourceMessage) - private static final com.android.vts.proto.VtsReportMessage.UrlResourceMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.UrlResourceMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.UrlResourceMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<UrlResourceMessage> - PARSER = new com.google.protobuf.AbstractParser<UrlResourceMessage>() { - public UrlResourceMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new UrlResourceMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<UrlResourceMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<UrlResourceMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface TestReportMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.TestReportMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * The test suite name. - * </pre> - * - * <code>optional bytes test_suite = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated boolean hasTestSuite(); - /** - * <pre> - * The test suite name. - * </pre> - * - * <code>optional bytes test_suite = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated com.google.protobuf.ByteString getTestSuite(); - - /** - * <pre> - * The test name. - * </pre> - * - * <code>optional bytes test = 2;</code> - */ - boolean hasTest(); - /** - * <pre> - * The test name. - * </pre> - * - * <code>optional bytes test = 2;</code> - */ - com.google.protobuf.ByteString getTest(); - - /** - * <pre> - * The test type - * </pre> - * - * <code>optional .android.vts.VtsTestType test_type = 3;</code> - */ - boolean hasTestType(); - /** - * <pre> - * The test type - * </pre> - * - * <code>optional .android.vts.VtsTestType test_type = 3;</code> - */ - com.android.vts.proto.VtsReportMessage.VtsTestType getTestType(); - - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage> - getDeviceInfoList(); - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage getDeviceInfo(int index); - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - int getDeviceInfoCount(); - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder> - getDeviceInfoOrBuilderList(); - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder getDeviceInfoOrBuilder( - int index); - - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - boolean hasBuildInfo(); - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo getBuildInfo(); - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - com.android.vts.proto.VtsReportMessage.AndroidBuildInfoOrBuilder getBuildInfoOrBuilder(); - - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - java.util.List<com.google.protobuf.ByteString> getSubscriberEmailList(); - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - int getSubscriberEmailCount(); - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - com.google.protobuf.ByteString getSubscriberEmail(int index); - - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - boolean hasHostInfo(); - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - com.android.vts.proto.VtsReportMessage.VtsHostInfo getHostInfo(); - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - com.android.vts.proto.VtsReportMessage.VtsHostInfoOrBuilder getHostInfoOrBuilder(); - - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.TestCaseReportMessage> - getTestCaseList(); - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage getTestCase(int index); - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - int getTestCaseCount(); - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder> - getTestCaseOrBuilderList(); - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder getTestCaseOrBuilder( - int index); - - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> - getProfilingList(); - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getProfiling(int index); - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - int getProfilingCount(); - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> - getProfilingOrBuilderList(); - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder getProfilingOrBuilder( - int index); - - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> - getSystraceList(); - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated com.android.vts.proto.VtsReportMessage.SystraceReportMessage getSystrace(int index); - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated int getSystraceCount(); - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated java.util.List<? extends com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> - getSystraceOrBuilderList(); - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder getSystraceOrBuilder( - int index); - - /** - * <pre> - * Execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 101;</code> - */ - boolean hasStartTimestamp(); - /** - * <pre> - * Execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 101;</code> - */ - long getStartTimestamp(); - - /** - * <code>optional int64 end_timestamp = 102;</code> - */ - boolean hasEndTimestamp(); - /** - * <code>optional int64 end_timestamp = 102;</code> - */ - long getEndTimestamp(); - - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> - getCoverageList(); - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - com.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index); - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - int getCoverageCount(); - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> - getCoverageOrBuilderList(); - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder( - int index); - - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> - getApiCoverageList(); - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getApiCoverage(int index); - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - int getApiCoverageCount(); - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> - getApiCoverageOrBuilderList(); - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder getApiCoverageOrBuilder( - int index); - - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> - getLogList(); - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - com.android.vts.proto.VtsReportMessage.LogMessage getLog(int index); - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - int getLogCount(); - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> - getLogOrBuilderList(); - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder getLogOrBuilder( - int index); - - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> - getLinkResourceList(); - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - com.android.vts.proto.VtsReportMessage.UrlResourceMessage getLinkResource(int index); - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - int getLinkResourceCount(); - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> - getLinkResourceOrBuilderList(); - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder getLinkResourceOrBuilder( - int index); - } - /** - * <pre> - * To specify a test execution report. - * </pre> - * - * Protobuf type {@code android.vts.TestReportMessage} - */ - public static final class TestReportMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.TestReportMessage) - TestReportMessageOrBuilder { - // Use TestReportMessage.newBuilder() to construct. - private TestReportMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private TestReportMessage() { - testSuite_ = com.google.protobuf.ByteString.EMPTY; - test_ = com.google.protobuf.ByteString.EMPTY; - testType_ = 0; - deviceInfo_ = java.util.Collections.emptyList(); - subscriberEmail_ = java.util.Collections.emptyList(); - testCase_ = java.util.Collections.emptyList(); - profiling_ = java.util.Collections.emptyList(); - systrace_ = java.util.Collections.emptyList(); - startTimestamp_ = 0L; - endTimestamp_ = 0L; - coverage_ = java.util.Collections.emptyList(); - apiCoverage_ = java.util.Collections.emptyList(); - log_ = java.util.Collections.emptyList(); - linkResource_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private TestReportMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - testSuite_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - test_ = input.readBytes(); - break; - } - case 24: { - int rawValue = input.readEnum(); - com.android.vts.proto.VtsReportMessage.VtsTestType value = com.android.vts.proto.VtsReportMessage.VtsTestType.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(3, rawValue); - } else { - bitField0_ |= 0x00000004; - testType_ = rawValue; - } - break; - } - case 34: { - if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) { - deviceInfo_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage>(); - mutable_bitField0_ |= 0x00000008; - } - deviceInfo_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.PARSER, extensionRegistry)); - break; - } - case 42: { - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.Builder subBuilder = null; - if (((bitField0_ & 0x00000008) == 0x00000008)) { - subBuilder = buildInfo_.toBuilder(); - } - buildInfo_ = input.readMessage(com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.PARSER, extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(buildInfo_); - buildInfo_ = subBuilder.buildPartial(); - } - bitField0_ |= 0x00000008; - break; - } - case 50: { - if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) { - subscriberEmail_ = new java.util.ArrayList<com.google.protobuf.ByteString>(); - mutable_bitField0_ |= 0x00000020; - } - subscriberEmail_.add(input.readBytes()); - break; - } - case 58: { - com.android.vts.proto.VtsReportMessage.VtsHostInfo.Builder subBuilder = null; - if (((bitField0_ & 0x00000010) == 0x00000010)) { - subBuilder = hostInfo_.toBuilder(); - } - hostInfo_ = input.readMessage(com.android.vts.proto.VtsReportMessage.VtsHostInfo.PARSER, extensionRegistry); - if (subBuilder != null) { - subBuilder.mergeFrom(hostInfo_); - hostInfo_ = subBuilder.buildPartial(); - } - bitField0_ |= 0x00000010; - break; - } - case 90: { - if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) { - testCase_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.TestCaseReportMessage>(); - mutable_bitField0_ |= 0x00000080; - } - testCase_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.PARSER, extensionRegistry)); - break; - } - case 170: { - if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) { - profiling_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage>(); - mutable_bitField0_ |= 0x00000100; - } - profiling_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.PARSER, extensionRegistry)); - break; - } - case 178: { - if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) { - systrace_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.SystraceReportMessage>(); - mutable_bitField0_ |= 0x00000200; - } - systrace_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.SystraceReportMessage.PARSER, extensionRegistry)); - break; - } - case 808: { - bitField0_ |= 0x00000020; - startTimestamp_ = input.readInt64(); - break; - } - case 816: { - bitField0_ |= 0x00000040; - endTimestamp_ = input.readInt64(); - break; - } - case 826: { - if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)) { - coverage_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.CoverageReportMessage>(); - mutable_bitField0_ |= 0x00001000; - } - coverage_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.CoverageReportMessage.PARSER, extensionRegistry)); - break; - } - case 834: { - if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)) { - apiCoverage_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage>(); - mutable_bitField0_ |= 0x00002000; - } - apiCoverage_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.PARSER, extensionRegistry)); - break; - } - case 8010: { - if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) { - log_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.LogMessage>(); - mutable_bitField0_ |= 0x00004000; - } - log_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.LogMessage.PARSER, extensionRegistry)); - break; - } - case 8090: { - if (!((mutable_bitField0_ & 0x00008000) == 0x00008000)) { - linkResource_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.UrlResourceMessage>(); - mutable_bitField0_ |= 0x00008000; - } - linkResource_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.UrlResourceMessage.PARSER, extensionRegistry)); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) { - deviceInfo_ = java.util.Collections.unmodifiableList(deviceInfo_); - } - if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) { - subscriberEmail_ = java.util.Collections.unmodifiableList(subscriberEmail_); - } - if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) { - testCase_ = java.util.Collections.unmodifiableList(testCase_); - } - if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) { - profiling_ = java.util.Collections.unmodifiableList(profiling_); - } - if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) { - systrace_ = java.util.Collections.unmodifiableList(systrace_); - } - if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) { - coverage_ = java.util.Collections.unmodifiableList(coverage_); - } - if (((mutable_bitField0_ & 0x00002000) == 0x00002000)) { - apiCoverage_ = java.util.Collections.unmodifiableList(apiCoverage_); - } - if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) { - log_ = java.util.Collections.unmodifiableList(log_); - } - if (((mutable_bitField0_ & 0x00008000) == 0x00008000)) { - linkResource_ = java.util.Collections.unmodifiableList(linkResource_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.TestReportMessage.class, com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder.class); - } - - private int bitField0_; - public static final int TEST_SUITE_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString testSuite_; - /** - * <pre> - * The test suite name. - * </pre> - * - * <code>optional bytes test_suite = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasTestSuite() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * The test suite name. - * </pre> - * - * <code>optional bytes test_suite = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.google.protobuf.ByteString getTestSuite() { - return testSuite_; - } - - public static final int TEST_FIELD_NUMBER = 2; - private com.google.protobuf.ByteString test_; - /** - * <pre> - * The test name. - * </pre> - * - * <code>optional bytes test = 2;</code> - */ - public boolean hasTest() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * The test name. - * </pre> - * - * <code>optional bytes test = 2;</code> - */ - public com.google.protobuf.ByteString getTest() { - return test_; - } - - public static final int TEST_TYPE_FIELD_NUMBER = 3; - private int testType_; - /** - * <pre> - * The test type - * </pre> - * - * <code>optional .android.vts.VtsTestType test_type = 3;</code> - */ - public boolean hasTestType() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * The test type - * </pre> - * - * <code>optional .android.vts.VtsTestType test_type = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsTestType getTestType() { - com.android.vts.proto.VtsReportMessage.VtsTestType result = com.android.vts.proto.VtsReportMessage.VtsTestType.valueOf(testType_); - return result == null ? com.android.vts.proto.VtsReportMessage.VtsTestType.UNKNOWN_VTS_TESTTYPE : result; - } - - public static final int DEVICE_INFO_FIELD_NUMBER = 4; - private java.util.List<com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage> deviceInfo_; - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage> getDeviceInfoList() { - return deviceInfo_; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder> - getDeviceInfoOrBuilderList() { - return deviceInfo_; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public int getDeviceInfoCount() { - return deviceInfo_.size(); - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage getDeviceInfo(int index) { - return deviceInfo_.get(index); - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder getDeviceInfoOrBuilder( - int index) { - return deviceInfo_.get(index); - } - - public static final int BUILD_INFO_FIELD_NUMBER = 5; - private com.android.vts.proto.VtsReportMessage.AndroidBuildInfo buildInfo_; - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public boolean hasBuildInfo() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfo getBuildInfo() { - return buildInfo_ == null ? com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.getDefaultInstance() : buildInfo_; - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfoOrBuilder getBuildInfoOrBuilder() { - return buildInfo_ == null ? com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.getDefaultInstance() : buildInfo_; - } - - public static final int SUBSCRIBER_EMAIL_FIELD_NUMBER = 6; - private java.util.List<com.google.protobuf.ByteString> subscriberEmail_; - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getSubscriberEmailList() { - return subscriberEmail_; - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public int getSubscriberEmailCount() { - return subscriberEmail_.size(); - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public com.google.protobuf.ByteString getSubscriberEmail(int index) { - return subscriberEmail_.get(index); - } - - public static final int HOST_INFO_FIELD_NUMBER = 7; - private com.android.vts.proto.VtsReportMessage.VtsHostInfo hostInfo_; - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public boolean hasHostInfo() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsHostInfo getHostInfo() { - return hostInfo_ == null ? com.android.vts.proto.VtsReportMessage.VtsHostInfo.getDefaultInstance() : hostInfo_; - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsHostInfoOrBuilder getHostInfoOrBuilder() { - return hostInfo_ == null ? com.android.vts.proto.VtsReportMessage.VtsHostInfo.getDefaultInstance() : hostInfo_; - } - - public static final int TEST_CASE_FIELD_NUMBER = 11; - private java.util.List<com.android.vts.proto.VtsReportMessage.TestCaseReportMessage> testCase_; - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestCaseReportMessage> getTestCaseList() { - return testCase_; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder> - getTestCaseOrBuilderList() { - return testCase_; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public int getTestCaseCount() { - return testCase_.size(); - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage getTestCase(int index) { - return testCase_.get(index); - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder getTestCaseOrBuilder( - int index) { - return testCase_.get(index); - } - - public static final int PROFILING_FIELD_NUMBER = 21; - private java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> profiling_; - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> getProfilingList() { - return profiling_; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> - getProfilingOrBuilderList() { - return profiling_; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public int getProfilingCount() { - return profiling_.size(); - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getProfiling(int index) { - return profiling_.get(index); - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder getProfilingOrBuilder( - int index) { - return profiling_.get(index); - } - - public static final int SYSTRACE_FIELD_NUMBER = 22; - private java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> systrace_; - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> getSystraceList() { - return systrace_; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<? extends com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> - getSystraceOrBuilderList() { - return systrace_; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public int getSystraceCount() { - return systrace_.size(); - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage getSystrace(int index) { - return systrace_.get(index); - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder getSystraceOrBuilder( - int index) { - return systrace_.get(index); - } - - public static final int START_TIMESTAMP_FIELD_NUMBER = 101; - private long startTimestamp_; - /** - * <pre> - * Execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 101;</code> - */ - public boolean hasStartTimestamp() { - return ((bitField0_ & 0x00000020) == 0x00000020); - } - /** - * <pre> - * Execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 101;</code> - */ - public long getStartTimestamp() { - return startTimestamp_; - } - - public static final int END_TIMESTAMP_FIELD_NUMBER = 102; - private long endTimestamp_; - /** - * <code>optional int64 end_timestamp = 102;</code> - */ - public boolean hasEndTimestamp() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <code>optional int64 end_timestamp = 102;</code> - */ - public long getEndTimestamp() { - return endTimestamp_; - } - - public static final int COVERAGE_FIELD_NUMBER = 103; - private java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> coverage_; - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> getCoverageList() { - return coverage_; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> - getCoverageOrBuilderList() { - return coverage_; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public int getCoverageCount() { - return coverage_.size(); - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index) { - return coverage_.get(index); - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder( - int index) { - return coverage_.get(index); - } - - public static final int API_COVERAGE_FIELD_NUMBER = 104; - private java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> apiCoverage_; - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> getApiCoverageList() { - return apiCoverage_; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> - getApiCoverageOrBuilderList() { - return apiCoverage_; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public int getApiCoverageCount() { - return apiCoverage_.size(); - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getApiCoverage(int index) { - return apiCoverage_.get(index); - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder getApiCoverageOrBuilder( - int index) { - return apiCoverage_.get(index); - } - - public static final int LOG_FIELD_NUMBER = 1001; - private java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> log_; - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> getLogList() { - return log_; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> - getLogOrBuilderList() { - return log_; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public int getLogCount() { - return log_.size(); - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage getLog(int index) { - return log_.get(index); - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder getLogOrBuilder( - int index) { - return log_.get(index); - } - - public static final int LINK_RESOURCE_FIELD_NUMBER = 1011; - private java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> linkResource_; - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> getLinkResourceList() { - return linkResource_; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> - getLinkResourceOrBuilderList() { - return linkResource_; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public int getLinkResourceCount() { - return linkResource_.size(); - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage getLinkResource(int index) { - return linkResource_.get(index); - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder getLinkResourceOrBuilder( - int index) { - return linkResource_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, testSuite_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, test_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeEnum(3, testType_); - } - for (int i = 0; i < deviceInfo_.size(); i++) { - output.writeMessage(4, deviceInfo_.get(i)); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeMessage(5, getBuildInfo()); - } - for (int i = 0; i < subscriberEmail_.size(); i++) { - output.writeBytes(6, subscriberEmail_.get(i)); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeMessage(7, getHostInfo()); - } - for (int i = 0; i < testCase_.size(); i++) { - output.writeMessage(11, testCase_.get(i)); - } - for (int i = 0; i < profiling_.size(); i++) { - output.writeMessage(21, profiling_.get(i)); - } - for (int i = 0; i < systrace_.size(); i++) { - output.writeMessage(22, systrace_.get(i)); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeInt64(101, startTimestamp_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeInt64(102, endTimestamp_); - } - for (int i = 0; i < coverage_.size(); i++) { - output.writeMessage(103, coverage_.get(i)); - } - for (int i = 0; i < apiCoverage_.size(); i++) { - output.writeMessage(104, apiCoverage_.get(i)); - } - for (int i = 0; i < log_.size(); i++) { - output.writeMessage(1001, log_.get(i)); - } - for (int i = 0; i < linkResource_.size(); i++) { - output.writeMessage(1011, linkResource_.get(i)); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, testSuite_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, test_); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, testType_); - } - for (int i = 0; i < deviceInfo_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, deviceInfo_.get(i)); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, getBuildInfo()); - } - { - int dataSize = 0; - for (int i = 0; i < subscriberEmail_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeBytesSizeNoTag(subscriberEmail_.get(i)); - } - size += dataSize; - size += 1 * getSubscriberEmailList().size(); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, getHostInfo()); - } - for (int i = 0; i < testCase_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(11, testCase_.get(i)); - } - for (int i = 0; i < profiling_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(21, profiling_.get(i)); - } - for (int i = 0; i < systrace_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(22, systrace_.get(i)); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(101, startTimestamp_); - } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(102, endTimestamp_); - } - for (int i = 0; i < coverage_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(103, coverage_.get(i)); - } - for (int i = 0; i < apiCoverage_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(104, apiCoverage_.get(i)); - } - for (int i = 0; i < log_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1001, log_.get(i)); - } - for (int i = 0; i < linkResource_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1011, linkResource_.get(i)); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.TestReportMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.TestReportMessage other = (com.android.vts.proto.VtsReportMessage.TestReportMessage) obj; - - boolean result = true; - result = result && (hasTestSuite() == other.hasTestSuite()); - if (hasTestSuite()) { - result = result && getTestSuite() - .equals(other.getTestSuite()); - } - result = result && (hasTest() == other.hasTest()); - if (hasTest()) { - result = result && getTest() - .equals(other.getTest()); - } - result = result && (hasTestType() == other.hasTestType()); - if (hasTestType()) { - result = result && testType_ == other.testType_; - } - result = result && getDeviceInfoList() - .equals(other.getDeviceInfoList()); - result = result && (hasBuildInfo() == other.hasBuildInfo()); - if (hasBuildInfo()) { - result = result && getBuildInfo() - .equals(other.getBuildInfo()); - } - result = result && getSubscriberEmailList() - .equals(other.getSubscriberEmailList()); - result = result && (hasHostInfo() == other.hasHostInfo()); - if (hasHostInfo()) { - result = result && getHostInfo() - .equals(other.getHostInfo()); - } - result = result && getTestCaseList() - .equals(other.getTestCaseList()); - result = result && getProfilingList() - .equals(other.getProfilingList()); - result = result && getSystraceList() - .equals(other.getSystraceList()); - result = result && (hasStartTimestamp() == other.hasStartTimestamp()); - if (hasStartTimestamp()) { - result = result && (getStartTimestamp() - == other.getStartTimestamp()); - } - result = result && (hasEndTimestamp() == other.hasEndTimestamp()); - if (hasEndTimestamp()) { - result = result && (getEndTimestamp() - == other.getEndTimestamp()); - } - result = result && getCoverageList() - .equals(other.getCoverageList()); - result = result && getApiCoverageList() - .equals(other.getApiCoverageList()); - result = result && getLogList() - .equals(other.getLogList()); - result = result && getLinkResourceList() - .equals(other.getLinkResourceList()); - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasTestSuite()) { - hash = (37 * hash) + TEST_SUITE_FIELD_NUMBER; - hash = (53 * hash) + getTestSuite().hashCode(); - } - if (hasTest()) { - hash = (37 * hash) + TEST_FIELD_NUMBER; - hash = (53 * hash) + getTest().hashCode(); - } - if (hasTestType()) { - hash = (37 * hash) + TEST_TYPE_FIELD_NUMBER; - hash = (53 * hash) + testType_; - } - if (getDeviceInfoCount() > 0) { - hash = (37 * hash) + DEVICE_INFO_FIELD_NUMBER; - hash = (53 * hash) + getDeviceInfoList().hashCode(); - } - if (hasBuildInfo()) { - hash = (37 * hash) + BUILD_INFO_FIELD_NUMBER; - hash = (53 * hash) + getBuildInfo().hashCode(); - } - if (getSubscriberEmailCount() > 0) { - hash = (37 * hash) + SUBSCRIBER_EMAIL_FIELD_NUMBER; - hash = (53 * hash) + getSubscriberEmailList().hashCode(); - } - if (hasHostInfo()) { - hash = (37 * hash) + HOST_INFO_FIELD_NUMBER; - hash = (53 * hash) + getHostInfo().hashCode(); - } - if (getTestCaseCount() > 0) { - hash = (37 * hash) + TEST_CASE_FIELD_NUMBER; - hash = (53 * hash) + getTestCaseList().hashCode(); - } - if (getProfilingCount() > 0) { - hash = (37 * hash) + PROFILING_FIELD_NUMBER; - hash = (53 * hash) + getProfilingList().hashCode(); - } - if (getSystraceCount() > 0) { - hash = (37 * hash) + SYSTRACE_FIELD_NUMBER; - hash = (53 * hash) + getSystraceList().hashCode(); - } - if (hasStartTimestamp()) { - hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getStartTimestamp()); - } - if (hasEndTimestamp()) { - hash = (37 * hash) + END_TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getEndTimestamp()); - } - if (getCoverageCount() > 0) { - hash = (37 * hash) + COVERAGE_FIELD_NUMBER; - hash = (53 * hash) + getCoverageList().hashCode(); - } - if (getApiCoverageCount() > 0) { - hash = (37 * hash) + API_COVERAGE_FIELD_NUMBER; - hash = (53 * hash) + getApiCoverageList().hashCode(); - } - if (getLogCount() > 0) { - hash = (37 * hash) + LOG_FIELD_NUMBER; - hash = (53 * hash) + getLogList().hashCode(); - } - if (getLinkResourceCount() > 0) { - hash = (37 * hash) + LINK_RESOURCE_FIELD_NUMBER; - hash = (53 * hash) + getLinkResourceList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestReportMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.TestReportMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a test execution report. - * </pre> - * - * Protobuf type {@code android.vts.TestReportMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.TestReportMessage) - com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.TestReportMessage.class, com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.TestReportMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getDeviceInfoFieldBuilder(); - getBuildInfoFieldBuilder(); - getHostInfoFieldBuilder(); - getTestCaseFieldBuilder(); - getProfilingFieldBuilder(); - getSystraceFieldBuilder(); - getCoverageFieldBuilder(); - getApiCoverageFieldBuilder(); - getLogFieldBuilder(); - getLinkResourceFieldBuilder(); - } - } - public Builder clear() { - super.clear(); - testSuite_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - test_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000002); - testType_ = 0; - bitField0_ = (bitField0_ & ~0x00000004); - if (deviceInfoBuilder_ == null) { - deviceInfo_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - } else { - deviceInfoBuilder_.clear(); - } - if (buildInfoBuilder_ == null) { - buildInfo_ = null; - } else { - buildInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - subscriberEmail_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - if (hostInfoBuilder_ == null) { - hostInfo_ = null; - } else { - hostInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - if (testCaseBuilder_ == null) { - testCase_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - } else { - testCaseBuilder_.clear(); - } - if (profilingBuilder_ == null) { - profiling_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000100); - } else { - profilingBuilder_.clear(); - } - if (systraceBuilder_ == null) { - systrace_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000200); - } else { - systraceBuilder_.clear(); - } - startTimestamp_ = 0L; - bitField0_ = (bitField0_ & ~0x00000400); - endTimestamp_ = 0L; - bitField0_ = (bitField0_ & ~0x00000800); - if (coverageBuilder_ == null) { - coverage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); - } else { - coverageBuilder_.clear(); - } - if (apiCoverageBuilder_ == null) { - apiCoverage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00002000); - } else { - apiCoverageBuilder_.clear(); - } - if (logBuilder_ == null) { - log_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00004000); - } else { - logBuilder_.clear(); - } - if (linkResourceBuilder_ == null) { - linkResource_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00008000); - } else { - linkResourceBuilder_.clear(); - } - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestReportMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.TestReportMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.TestReportMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.TestReportMessage build() { - com.android.vts.proto.VtsReportMessage.TestReportMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.TestReportMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.TestReportMessage result = new com.android.vts.proto.VtsReportMessage.TestReportMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.testSuite_ = testSuite_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.test_ = test_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.testType_ = testType_; - if (deviceInfoBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008)) { - deviceInfo_ = java.util.Collections.unmodifiableList(deviceInfo_); - bitField0_ = (bitField0_ & ~0x00000008); - } - result.deviceInfo_ = deviceInfo_; - } else { - result.deviceInfo_ = deviceInfoBuilder_.build(); - } - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000008; - } - if (buildInfoBuilder_ == null) { - result.buildInfo_ = buildInfo_; - } else { - result.buildInfo_ = buildInfoBuilder_.build(); - } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - subscriberEmail_ = java.util.Collections.unmodifiableList(subscriberEmail_); - bitField0_ = (bitField0_ & ~0x00000020); - } - result.subscriberEmail_ = subscriberEmail_; - if (((from_bitField0_ & 0x00000040) == 0x00000040)) { - to_bitField0_ |= 0x00000010; - } - if (hostInfoBuilder_ == null) { - result.hostInfo_ = hostInfo_; - } else { - result.hostInfo_ = hostInfoBuilder_.build(); - } - if (testCaseBuilder_ == null) { - if (((bitField0_ & 0x00000080) == 0x00000080)) { - testCase_ = java.util.Collections.unmodifiableList(testCase_); - bitField0_ = (bitField0_ & ~0x00000080); - } - result.testCase_ = testCase_; - } else { - result.testCase_ = testCaseBuilder_.build(); - } - if (profilingBuilder_ == null) { - if (((bitField0_ & 0x00000100) == 0x00000100)) { - profiling_ = java.util.Collections.unmodifiableList(profiling_); - bitField0_ = (bitField0_ & ~0x00000100); - } - result.profiling_ = profiling_; - } else { - result.profiling_ = profilingBuilder_.build(); - } - if (systraceBuilder_ == null) { - if (((bitField0_ & 0x00000200) == 0x00000200)) { - systrace_ = java.util.Collections.unmodifiableList(systrace_); - bitField0_ = (bitField0_ & ~0x00000200); - } - result.systrace_ = systrace_; - } else { - result.systrace_ = systraceBuilder_.build(); - } - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { - to_bitField0_ |= 0x00000020; - } - result.startTimestamp_ = startTimestamp_; - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { - to_bitField0_ |= 0x00000040; - } - result.endTimestamp_ = endTimestamp_; - if (coverageBuilder_ == null) { - if (((bitField0_ & 0x00001000) == 0x00001000)) { - coverage_ = java.util.Collections.unmodifiableList(coverage_); - bitField0_ = (bitField0_ & ~0x00001000); - } - result.coverage_ = coverage_; - } else { - result.coverage_ = coverageBuilder_.build(); - } - if (apiCoverageBuilder_ == null) { - if (((bitField0_ & 0x00002000) == 0x00002000)) { - apiCoverage_ = java.util.Collections.unmodifiableList(apiCoverage_); - bitField0_ = (bitField0_ & ~0x00002000); - } - result.apiCoverage_ = apiCoverage_; - } else { - result.apiCoverage_ = apiCoverageBuilder_.build(); - } - if (logBuilder_ == null) { - if (((bitField0_ & 0x00004000) == 0x00004000)) { - log_ = java.util.Collections.unmodifiableList(log_); - bitField0_ = (bitField0_ & ~0x00004000); - } - result.log_ = log_; - } else { - result.log_ = logBuilder_.build(); - } - if (linkResourceBuilder_ == null) { - if (((bitField0_ & 0x00008000) == 0x00008000)) { - linkResource_ = java.util.Collections.unmodifiableList(linkResource_); - bitField0_ = (bitField0_ & ~0x00008000); - } - result.linkResource_ = linkResource_; - } else { - result.linkResource_ = linkResourceBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.TestReportMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.TestReportMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.TestReportMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.TestReportMessage.getDefaultInstance()) return this; - if (other.hasTestSuite()) { - setTestSuite(other.getTestSuite()); - } - if (other.hasTest()) { - setTest(other.getTest()); - } - if (other.hasTestType()) { - setTestType(other.getTestType()); - } - if (deviceInfoBuilder_ == null) { - if (!other.deviceInfo_.isEmpty()) { - if (deviceInfo_.isEmpty()) { - deviceInfo_ = other.deviceInfo_; - bitField0_ = (bitField0_ & ~0x00000008); - } else { - ensureDeviceInfoIsMutable(); - deviceInfo_.addAll(other.deviceInfo_); - } - onChanged(); - } - } else { - if (!other.deviceInfo_.isEmpty()) { - if (deviceInfoBuilder_.isEmpty()) { - deviceInfoBuilder_.dispose(); - deviceInfoBuilder_ = null; - deviceInfo_ = other.deviceInfo_; - bitField0_ = (bitField0_ & ~0x00000008); - deviceInfoBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getDeviceInfoFieldBuilder() : null; - } else { - deviceInfoBuilder_.addAllMessages(other.deviceInfo_); - } - } - } - if (other.hasBuildInfo()) { - mergeBuildInfo(other.getBuildInfo()); - } - if (!other.subscriberEmail_.isEmpty()) { - if (subscriberEmail_.isEmpty()) { - subscriberEmail_ = other.subscriberEmail_; - bitField0_ = (bitField0_ & ~0x00000020); - } else { - ensureSubscriberEmailIsMutable(); - subscriberEmail_.addAll(other.subscriberEmail_); - } - onChanged(); - } - if (other.hasHostInfo()) { - mergeHostInfo(other.getHostInfo()); - } - if (testCaseBuilder_ == null) { - if (!other.testCase_.isEmpty()) { - if (testCase_.isEmpty()) { - testCase_ = other.testCase_; - bitField0_ = (bitField0_ & ~0x00000080); - } else { - ensureTestCaseIsMutable(); - testCase_.addAll(other.testCase_); - } - onChanged(); - } - } else { - if (!other.testCase_.isEmpty()) { - if (testCaseBuilder_.isEmpty()) { - testCaseBuilder_.dispose(); - testCaseBuilder_ = null; - testCase_ = other.testCase_; - bitField0_ = (bitField0_ & ~0x00000080); - testCaseBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getTestCaseFieldBuilder() : null; - } else { - testCaseBuilder_.addAllMessages(other.testCase_); - } - } - } - if (profilingBuilder_ == null) { - if (!other.profiling_.isEmpty()) { - if (profiling_.isEmpty()) { - profiling_ = other.profiling_; - bitField0_ = (bitField0_ & ~0x00000100); - } else { - ensureProfilingIsMutable(); - profiling_.addAll(other.profiling_); - } - onChanged(); - } - } else { - if (!other.profiling_.isEmpty()) { - if (profilingBuilder_.isEmpty()) { - profilingBuilder_.dispose(); - profilingBuilder_ = null; - profiling_ = other.profiling_; - bitField0_ = (bitField0_ & ~0x00000100); - profilingBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getProfilingFieldBuilder() : null; - } else { - profilingBuilder_.addAllMessages(other.profiling_); - } - } - } - if (systraceBuilder_ == null) { - if (!other.systrace_.isEmpty()) { - if (systrace_.isEmpty()) { - systrace_ = other.systrace_; - bitField0_ = (bitField0_ & ~0x00000200); - } else { - ensureSystraceIsMutable(); - systrace_.addAll(other.systrace_); - } - onChanged(); - } - } else { - if (!other.systrace_.isEmpty()) { - if (systraceBuilder_.isEmpty()) { - systraceBuilder_.dispose(); - systraceBuilder_ = null; - systrace_ = other.systrace_; - bitField0_ = (bitField0_ & ~0x00000200); - systraceBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getSystraceFieldBuilder() : null; - } else { - systraceBuilder_.addAllMessages(other.systrace_); - } - } - } - if (other.hasStartTimestamp()) { - setStartTimestamp(other.getStartTimestamp()); - } - if (other.hasEndTimestamp()) { - setEndTimestamp(other.getEndTimestamp()); - } - if (coverageBuilder_ == null) { - if (!other.coverage_.isEmpty()) { - if (coverage_.isEmpty()) { - coverage_ = other.coverage_; - bitField0_ = (bitField0_ & ~0x00001000); - } else { - ensureCoverageIsMutable(); - coverage_.addAll(other.coverage_); - } - onChanged(); - } - } else { - if (!other.coverage_.isEmpty()) { - if (coverageBuilder_.isEmpty()) { - coverageBuilder_.dispose(); - coverageBuilder_ = null; - coverage_ = other.coverage_; - bitField0_ = (bitField0_ & ~0x00001000); - coverageBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getCoverageFieldBuilder() : null; - } else { - coverageBuilder_.addAllMessages(other.coverage_); - } - } - } - if (apiCoverageBuilder_ == null) { - if (!other.apiCoverage_.isEmpty()) { - if (apiCoverage_.isEmpty()) { - apiCoverage_ = other.apiCoverage_; - bitField0_ = (bitField0_ & ~0x00002000); - } else { - ensureApiCoverageIsMutable(); - apiCoverage_.addAll(other.apiCoverage_); - } - onChanged(); - } - } else { - if (!other.apiCoverage_.isEmpty()) { - if (apiCoverageBuilder_.isEmpty()) { - apiCoverageBuilder_.dispose(); - apiCoverageBuilder_ = null; - apiCoverage_ = other.apiCoverage_; - bitField0_ = (bitField0_ & ~0x00002000); - apiCoverageBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getApiCoverageFieldBuilder() : null; - } else { - apiCoverageBuilder_.addAllMessages(other.apiCoverage_); - } - } - } - if (logBuilder_ == null) { - if (!other.log_.isEmpty()) { - if (log_.isEmpty()) { - log_ = other.log_; - bitField0_ = (bitField0_ & ~0x00004000); - } else { - ensureLogIsMutable(); - log_.addAll(other.log_); - } - onChanged(); - } - } else { - if (!other.log_.isEmpty()) { - if (logBuilder_.isEmpty()) { - logBuilder_.dispose(); - logBuilder_ = null; - log_ = other.log_; - bitField0_ = (bitField0_ & ~0x00004000); - logBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getLogFieldBuilder() : null; - } else { - logBuilder_.addAllMessages(other.log_); - } - } - } - if (linkResourceBuilder_ == null) { - if (!other.linkResource_.isEmpty()) { - if (linkResource_.isEmpty()) { - linkResource_ = other.linkResource_; - bitField0_ = (bitField0_ & ~0x00008000); - } else { - ensureLinkResourceIsMutable(); - linkResource_.addAll(other.linkResource_); - } - onChanged(); - } - } else { - if (!other.linkResource_.isEmpty()) { - if (linkResourceBuilder_.isEmpty()) { - linkResourceBuilder_.dispose(); - linkResourceBuilder_ = null; - linkResource_ = other.linkResource_; - bitField0_ = (bitField0_ & ~0x00008000); - linkResourceBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getLinkResourceFieldBuilder() : null; - } else { - linkResourceBuilder_.addAllMessages(other.linkResource_); - } - } - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.TestReportMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.TestReportMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.ByteString testSuite_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * The test suite name. - * </pre> - * - * <code>optional bytes test_suite = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public boolean hasTestSuite() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * The test suite name. - * </pre> - * - * <code>optional bytes test_suite = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.google.protobuf.ByteString getTestSuite() { - return testSuite_; - } - /** - * <pre> - * The test suite name. - * </pre> - * - * <code>optional bytes test_suite = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setTestSuite(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - testSuite_ = value; - onChanged(); - return this; - } - /** - * <pre> - * The test suite name. - * </pre> - * - * <code>optional bytes test_suite = 1 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder clearTestSuite() { - bitField0_ = (bitField0_ & ~0x00000001); - testSuite_ = getDefaultInstance().getTestSuite(); - onChanged(); - return this; - } - - private com.google.protobuf.ByteString test_ = com.google.protobuf.ByteString.EMPTY; - /** - * <pre> - * The test name. - * </pre> - * - * <code>optional bytes test = 2;</code> - */ - public boolean hasTest() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * <pre> - * The test name. - * </pre> - * - * <code>optional bytes test = 2;</code> - */ - public com.google.protobuf.ByteString getTest() { - return test_; - } - /** - * <pre> - * The test name. - * </pre> - * - * <code>optional bytes test = 2;</code> - */ - public Builder setTest(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - test_ = value; - onChanged(); - return this; - } - /** - * <pre> - * The test name. - * </pre> - * - * <code>optional bytes test = 2;</code> - */ - public Builder clearTest() { - bitField0_ = (bitField0_ & ~0x00000002); - test_ = getDefaultInstance().getTest(); - onChanged(); - return this; - } - - private int testType_ = 0; - /** - * <pre> - * The test type - * </pre> - * - * <code>optional .android.vts.VtsTestType test_type = 3;</code> - */ - public boolean hasTestType() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * The test type - * </pre> - * - * <code>optional .android.vts.VtsTestType test_type = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsTestType getTestType() { - com.android.vts.proto.VtsReportMessage.VtsTestType result = com.android.vts.proto.VtsReportMessage.VtsTestType.valueOf(testType_); - return result == null ? com.android.vts.proto.VtsReportMessage.VtsTestType.UNKNOWN_VTS_TESTTYPE : result; - } - /** - * <pre> - * The test type - * </pre> - * - * <code>optional .android.vts.VtsTestType test_type = 3;</code> - */ - public Builder setTestType(com.android.vts.proto.VtsReportMessage.VtsTestType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - testType_ = value.getNumber(); - onChanged(); - return this; - } - /** - * <pre> - * The test type - * </pre> - * - * <code>optional .android.vts.VtsTestType test_type = 3;</code> - */ - public Builder clearTestType() { - bitField0_ = (bitField0_ & ~0x00000004); - testType_ = 0; - onChanged(); - return this; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage> deviceInfo_ = - java.util.Collections.emptyList(); - private void ensureDeviceInfoIsMutable() { - if (!((bitField0_ & 0x00000008) == 0x00000008)) { - deviceInfo_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage>(deviceInfo_); - bitField0_ |= 0x00000008; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder> deviceInfoBuilder_; - - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage> getDeviceInfoList() { - if (deviceInfoBuilder_ == null) { - return java.util.Collections.unmodifiableList(deviceInfo_); - } else { - return deviceInfoBuilder_.getMessageList(); - } - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public int getDeviceInfoCount() { - if (deviceInfoBuilder_ == null) { - return deviceInfo_.size(); - } else { - return deviceInfoBuilder_.getCount(); - } - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage getDeviceInfo(int index) { - if (deviceInfoBuilder_ == null) { - return deviceInfo_.get(index); - } else { - return deviceInfoBuilder_.getMessage(index); - } - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder setDeviceInfo( - int index, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage value) { - if (deviceInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDeviceInfoIsMutable(); - deviceInfo_.set(index, value); - onChanged(); - } else { - deviceInfoBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder setDeviceInfo( - int index, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder builderForValue) { - if (deviceInfoBuilder_ == null) { - ensureDeviceInfoIsMutable(); - deviceInfo_.set(index, builderForValue.build()); - onChanged(); - } else { - deviceInfoBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder addDeviceInfo(com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage value) { - if (deviceInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDeviceInfoIsMutable(); - deviceInfo_.add(value); - onChanged(); - } else { - deviceInfoBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder addDeviceInfo( - int index, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage value) { - if (deviceInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureDeviceInfoIsMutable(); - deviceInfo_.add(index, value); - onChanged(); - } else { - deviceInfoBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder addDeviceInfo( - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder builderForValue) { - if (deviceInfoBuilder_ == null) { - ensureDeviceInfoIsMutable(); - deviceInfo_.add(builderForValue.build()); - onChanged(); - } else { - deviceInfoBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder addDeviceInfo( - int index, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder builderForValue) { - if (deviceInfoBuilder_ == null) { - ensureDeviceInfoIsMutable(); - deviceInfo_.add(index, builderForValue.build()); - onChanged(); - } else { - deviceInfoBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder addAllDeviceInfo( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage> values) { - if (deviceInfoBuilder_ == null) { - ensureDeviceInfoIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, deviceInfo_); - onChanged(); - } else { - deviceInfoBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder clearDeviceInfo() { - if (deviceInfoBuilder_ == null) { - deviceInfo_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - onChanged(); - } else { - deviceInfoBuilder_.clear(); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public Builder removeDeviceInfo(int index) { - if (deviceInfoBuilder_ == null) { - ensureDeviceInfoIsMutable(); - deviceInfo_.remove(index); - onChanged(); - } else { - deviceInfoBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder getDeviceInfoBuilder( - int index) { - return getDeviceInfoFieldBuilder().getBuilder(index); - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder getDeviceInfoOrBuilder( - int index) { - if (deviceInfoBuilder_ == null) { - return deviceInfo_.get(index); } else { - return deviceInfoBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder> - getDeviceInfoOrBuilderList() { - if (deviceInfoBuilder_ != null) { - return deviceInfoBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(deviceInfo_); - } - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder addDeviceInfoBuilder() { - return getDeviceInfoFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.getDefaultInstance()); - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder addDeviceInfoBuilder( - int index) { - return getDeviceInfoFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.getDefaultInstance()); - } - /** - * <pre> - * Target device info - * </pre> - * - * <code>repeated .android.vts.AndroidDeviceInfoMessage device_info = 4;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder> - getDeviceInfoBuilderList() { - return getDeviceInfoFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder> - getDeviceInfoFieldBuilder() { - if (deviceInfoBuilder_ == null) { - deviceInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage.Builder, com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessageOrBuilder>( - deviceInfo_, - ((bitField0_ & 0x00000008) == 0x00000008), - getParentForChildren(), - isClean()); - deviceInfo_ = null; - } - return deviceInfoBuilder_; - } - - private com.android.vts.proto.VtsReportMessage.AndroidBuildInfo buildInfo_ = null; - private com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo, com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.Builder, com.android.vts.proto.VtsReportMessage.AndroidBuildInfoOrBuilder> buildInfoBuilder_; - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public boolean hasBuildInfo() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfo getBuildInfo() { - if (buildInfoBuilder_ == null) { - return buildInfo_ == null ? com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.getDefaultInstance() : buildInfo_; - } else { - return buildInfoBuilder_.getMessage(); - } - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public Builder setBuildInfo(com.android.vts.proto.VtsReportMessage.AndroidBuildInfo value) { - if (buildInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - buildInfo_ = value; - onChanged(); - } else { - buildInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000010; - return this; - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public Builder setBuildInfo( - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.Builder builderForValue) { - if (buildInfoBuilder_ == null) { - buildInfo_ = builderForValue.build(); - onChanged(); - } else { - buildInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000010; - return this; - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public Builder mergeBuildInfo(com.android.vts.proto.VtsReportMessage.AndroidBuildInfo value) { - if (buildInfoBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010) && - buildInfo_ != null && - buildInfo_ != com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.getDefaultInstance()) { - buildInfo_ = - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.newBuilder(buildInfo_).mergeFrom(value).buildPartial(); - } else { - buildInfo_ = value; - } - onChanged(); - } else { - buildInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000010; - return this; - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public Builder clearBuildInfo() { - if (buildInfoBuilder_ == null) { - buildInfo_ = null; - onChanged(); - } else { - buildInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.Builder getBuildInfoBuilder() { - bitField0_ |= 0x00000010; - onChanged(); - return getBuildInfoFieldBuilder().getBuilder(); - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - public com.android.vts.proto.VtsReportMessage.AndroidBuildInfoOrBuilder getBuildInfoOrBuilder() { - if (buildInfoBuilder_ != null) { - return buildInfoBuilder_.getMessageOrBuilder(); - } else { - return buildInfo_ == null ? - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.getDefaultInstance() : buildInfo_; - } - } - /** - * <pre> - * Build info - * </pre> - * - * <code>optional .android.vts.AndroidBuildInfo build_info = 5;</code> - */ - private com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo, com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.Builder, com.android.vts.proto.VtsReportMessage.AndroidBuildInfoOrBuilder> - getBuildInfoFieldBuilder() { - if (buildInfoBuilder_ == null) { - buildInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.AndroidBuildInfo, com.android.vts.proto.VtsReportMessage.AndroidBuildInfo.Builder, com.android.vts.proto.VtsReportMessage.AndroidBuildInfoOrBuilder>( - getBuildInfo(), - getParentForChildren(), - isClean()); - buildInfo_ = null; - } - return buildInfoBuilder_; - } - - private java.util.List<com.google.protobuf.ByteString> subscriberEmail_ = java.util.Collections.emptyList(); - private void ensureSubscriberEmailIsMutable() { - if (!((bitField0_ & 0x00000020) == 0x00000020)) { - subscriberEmail_ = new java.util.ArrayList<com.google.protobuf.ByteString>(subscriberEmail_); - bitField0_ |= 0x00000020; - } - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public java.util.List<com.google.protobuf.ByteString> - getSubscriberEmailList() { - return java.util.Collections.unmodifiableList(subscriberEmail_); - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public int getSubscriberEmailCount() { - return subscriberEmail_.size(); - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public com.google.protobuf.ByteString getSubscriberEmail(int index) { - return subscriberEmail_.get(index); - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public Builder setSubscriberEmail( - int index, com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubscriberEmailIsMutable(); - subscriberEmail_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public Builder addSubscriberEmail(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureSubscriberEmailIsMutable(); - subscriberEmail_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public Builder addAllSubscriberEmail( - java.lang.Iterable<? extends com.google.protobuf.ByteString> values) { - ensureSubscriberEmailIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, subscriberEmail_); - onChanged(); - return this; - } - /** - * <pre> - * Email addresses of subscribers to the test results - * </pre> - * - * <code>repeated bytes subscriber_email = 6;</code> - */ - public Builder clearSubscriberEmail() { - subscriberEmail_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - onChanged(); - return this; - } - - private com.android.vts.proto.VtsReportMessage.VtsHostInfo hostInfo_ = null; - private com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.VtsHostInfo, com.android.vts.proto.VtsReportMessage.VtsHostInfo.Builder, com.android.vts.proto.VtsReportMessage.VtsHostInfoOrBuilder> hostInfoBuilder_; - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public boolean hasHostInfo() { - return ((bitField0_ & 0x00000040) == 0x00000040); - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsHostInfo getHostInfo() { - if (hostInfoBuilder_ == null) { - return hostInfo_ == null ? com.android.vts.proto.VtsReportMessage.VtsHostInfo.getDefaultInstance() : hostInfo_; - } else { - return hostInfoBuilder_.getMessage(); - } - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public Builder setHostInfo(com.android.vts.proto.VtsReportMessage.VtsHostInfo value) { - if (hostInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - hostInfo_ = value; - onChanged(); - } else { - hostInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - return this; - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public Builder setHostInfo( - com.android.vts.proto.VtsReportMessage.VtsHostInfo.Builder builderForValue) { - if (hostInfoBuilder_ == null) { - hostInfo_ = builderForValue.build(); - onChanged(); - } else { - hostInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - return this; - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public Builder mergeHostInfo(com.android.vts.proto.VtsReportMessage.VtsHostInfo value) { - if (hostInfoBuilder_ == null) { - if (((bitField0_ & 0x00000040) == 0x00000040) && - hostInfo_ != null && - hostInfo_ != com.android.vts.proto.VtsReportMessage.VtsHostInfo.getDefaultInstance()) { - hostInfo_ = - com.android.vts.proto.VtsReportMessage.VtsHostInfo.newBuilder(hostInfo_).mergeFrom(value).buildPartial(); - } else { - hostInfo_ = value; - } - onChanged(); - } else { - hostInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - return this; - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public Builder clearHostInfo() { - if (hostInfoBuilder_ == null) { - hostInfo_ = null; - onChanged(); - } else { - hostInfoBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000040); - return this; - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsHostInfo.Builder getHostInfoBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getHostInfoFieldBuilder().getBuilder(); - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - public com.android.vts.proto.VtsReportMessage.VtsHostInfoOrBuilder getHostInfoOrBuilder() { - if (hostInfoBuilder_ != null) { - return hostInfoBuilder_.getMessageOrBuilder(); - } else { - return hostInfo_ == null ? - com.android.vts.proto.VtsReportMessage.VtsHostInfo.getDefaultInstance() : hostInfo_; - } - } - /** - * <pre> - * Info about the host computer - * </pre> - * - * <code>optional .android.vts.VtsHostInfo host_info = 7;</code> - */ - private com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.VtsHostInfo, com.android.vts.proto.VtsReportMessage.VtsHostInfo.Builder, com.android.vts.proto.VtsReportMessage.VtsHostInfoOrBuilder> - getHostInfoFieldBuilder() { - if (hostInfoBuilder_ == null) { - hostInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.VtsHostInfo, com.android.vts.proto.VtsReportMessage.VtsHostInfo.Builder, com.android.vts.proto.VtsReportMessage.VtsHostInfoOrBuilder>( - getHostInfo(), - getParentForChildren(), - isClean()); - hostInfo_ = null; - } - return hostInfoBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.TestCaseReportMessage> testCase_ = - java.util.Collections.emptyList(); - private void ensureTestCaseIsMutable() { - if (!((bitField0_ & 0x00000080) == 0x00000080)) { - testCase_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.TestCaseReportMessage>(testCase_); - bitField0_ |= 0x00000080; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder> testCaseBuilder_; - - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestCaseReportMessage> getTestCaseList() { - if (testCaseBuilder_ == null) { - return java.util.Collections.unmodifiableList(testCase_); - } else { - return testCaseBuilder_.getMessageList(); - } - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public int getTestCaseCount() { - if (testCaseBuilder_ == null) { - return testCase_.size(); - } else { - return testCaseBuilder_.getCount(); - } - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage getTestCase(int index) { - if (testCaseBuilder_ == null) { - return testCase_.get(index); - } else { - return testCaseBuilder_.getMessage(index); - } - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder setTestCase( - int index, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage value) { - if (testCaseBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestCaseIsMutable(); - testCase_.set(index, value); - onChanged(); - } else { - testCaseBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder setTestCase( - int index, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder builderForValue) { - if (testCaseBuilder_ == null) { - ensureTestCaseIsMutable(); - testCase_.set(index, builderForValue.build()); - onChanged(); - } else { - testCaseBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder addTestCase(com.android.vts.proto.VtsReportMessage.TestCaseReportMessage value) { - if (testCaseBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestCaseIsMutable(); - testCase_.add(value); - onChanged(); - } else { - testCaseBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder addTestCase( - int index, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage value) { - if (testCaseBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestCaseIsMutable(); - testCase_.add(index, value); - onChanged(); - } else { - testCaseBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder addTestCase( - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder builderForValue) { - if (testCaseBuilder_ == null) { - ensureTestCaseIsMutable(); - testCase_.add(builderForValue.build()); - onChanged(); - } else { - testCaseBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder addTestCase( - int index, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder builderForValue) { - if (testCaseBuilder_ == null) { - ensureTestCaseIsMutable(); - testCase_.add(index, builderForValue.build()); - onChanged(); - } else { - testCaseBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder addAllTestCase( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.TestCaseReportMessage> values) { - if (testCaseBuilder_ == null) { - ensureTestCaseIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, testCase_); - onChanged(); - } else { - testCaseBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder clearTestCase() { - if (testCaseBuilder_ == null) { - testCase_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - onChanged(); - } else { - testCaseBuilder_.clear(); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public Builder removeTestCase(int index) { - if (testCaseBuilder_ == null) { - ensureTestCaseIsMutable(); - testCase_.remove(index); - onChanged(); - } else { - testCaseBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder getTestCaseBuilder( - int index) { - return getTestCaseFieldBuilder().getBuilder(index); - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder getTestCaseOrBuilder( - int index) { - if (testCaseBuilder_ == null) { - return testCase_.get(index); } else { - return testCaseBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder> - getTestCaseOrBuilderList() { - if (testCaseBuilder_ != null) { - return testCaseBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(testCase_); - } - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder addTestCaseBuilder() { - return getTestCaseFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder addTestCaseBuilder( - int index) { - return getTestCaseFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Test case reports - * </pre> - * - * <code>repeated .android.vts.TestCaseReportMessage test_case = 11;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder> - getTestCaseBuilderList() { - return getTestCaseFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder> - getTestCaseFieldBuilder() { - if (testCaseBuilder_ == null) { - testCaseBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestCaseReportMessage, com.android.vts.proto.VtsReportMessage.TestCaseReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestCaseReportMessageOrBuilder>( - testCase_, - ((bitField0_ & 0x00000080) == 0x00000080), - getParentForChildren(), - isClean()); - testCase_ = null; - } - return testCaseBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> profiling_ = - java.util.Collections.emptyList(); - private void ensureProfilingIsMutable() { - if (!((bitField0_ & 0x00000100) == 0x00000100)) { - profiling_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage>(profiling_); - bitField0_ |= 0x00000100; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> profilingBuilder_; - - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> getProfilingList() { - if (profilingBuilder_ == null) { - return java.util.Collections.unmodifiableList(profiling_); - } else { - return profilingBuilder_.getMessageList(); - } - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public int getProfilingCount() { - if (profilingBuilder_ == null) { - return profiling_.size(); - } else { - return profilingBuilder_.getCount(); - } - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage getProfiling(int index) { - if (profilingBuilder_ == null) { - return profiling_.get(index); - } else { - return profilingBuilder_.getMessage(index); - } - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder setProfiling( - int index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage value) { - if (profilingBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureProfilingIsMutable(); - profiling_.set(index, value); - onChanged(); - } else { - profilingBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder setProfiling( - int index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder builderForValue) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - profiling_.set(index, builderForValue.build()); - onChanged(); - } else { - profilingBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder addProfiling(com.android.vts.proto.VtsReportMessage.ProfilingReportMessage value) { - if (profilingBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureProfilingIsMutable(); - profiling_.add(value); - onChanged(); - } else { - profilingBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder addProfiling( - int index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage value) { - if (profilingBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureProfilingIsMutable(); - profiling_.add(index, value); - onChanged(); - } else { - profilingBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder addProfiling( - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder builderForValue) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - profiling_.add(builderForValue.build()); - onChanged(); - } else { - profilingBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder addProfiling( - int index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder builderForValue) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - profiling_.add(index, builderForValue.build()); - onChanged(); - } else { - profilingBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder addAllProfiling( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.ProfilingReportMessage> values) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, profiling_); - onChanged(); - } else { - profilingBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder clearProfiling() { - if (profilingBuilder_ == null) { - profiling_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000100); - onChanged(); - } else { - profilingBuilder_.clear(); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public Builder removeProfiling(int index) { - if (profilingBuilder_ == null) { - ensureProfilingIsMutable(); - profiling_.remove(index); - onChanged(); - } else { - profilingBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder getProfilingBuilder( - int index) { - return getProfilingFieldBuilder().getBuilder(index); - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder getProfilingOrBuilder( - int index) { - if (profilingBuilder_ == null) { - return profiling_.get(index); } else { - return profilingBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> - getProfilingOrBuilderList() { - if (profilingBuilder_ != null) { - return profilingBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(profiling_); - } - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder addProfilingBuilder() { - return getProfilingFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder addProfilingBuilder( - int index) { - return getProfilingFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Profiling reports - * </pre> - * - * <code>repeated .android.vts.ProfilingReportMessage profiling = 21;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder> - getProfilingBuilderList() { - return getProfilingFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder> - getProfilingFieldBuilder() { - if (profilingBuilder_ == null) { - profilingBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ProfilingReportMessage, com.android.vts.proto.VtsReportMessage.ProfilingReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ProfilingReportMessageOrBuilder>( - profiling_, - ((bitField0_ & 0x00000100) == 0x00000100), - getParentForChildren(), - isClean()); - profiling_ = null; - } - return profilingBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> systrace_ = - java.util.Collections.emptyList(); - private void ensureSystraceIsMutable() { - if (!((bitField0_ & 0x00000200) == 0x00000200)) { - systrace_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.SystraceReportMessage>(systrace_); - bitField0_ |= 0x00000200; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.SystraceReportMessage, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder, com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> systraceBuilder_; - - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage> getSystraceList() { - if (systraceBuilder_ == null) { - return java.util.Collections.unmodifiableList(systrace_); - } else { - return systraceBuilder_.getMessageList(); - } - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public int getSystraceCount() { - if (systraceBuilder_ == null) { - return systrace_.size(); - } else { - return systraceBuilder_.getCount(); - } - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage getSystrace(int index) { - if (systraceBuilder_ == null) { - return systrace_.get(index); - } else { - return systraceBuilder_.getMessage(index); - } - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setSystrace( - int index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage value) { - if (systraceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSystraceIsMutable(); - systrace_.set(index, value); - onChanged(); - } else { - systraceBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder setSystrace( - int index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder builderForValue) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - systrace_.set(index, builderForValue.build()); - onChanged(); - } else { - systraceBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addSystrace(com.android.vts.proto.VtsReportMessage.SystraceReportMessage value) { - if (systraceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSystraceIsMutable(); - systrace_.add(value); - onChanged(); - } else { - systraceBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addSystrace( - int index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage value) { - if (systraceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureSystraceIsMutable(); - systrace_.add(index, value); - onChanged(); - } else { - systraceBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addSystrace( - com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder builderForValue) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - systrace_.add(builderForValue.build()); - onChanged(); - } else { - systraceBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addSystrace( - int index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder builderForValue) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - systrace_.add(index, builderForValue.build()); - onChanged(); - } else { - systraceBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder addAllSystrace( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.SystraceReportMessage> values) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, systrace_); - onChanged(); - } else { - systraceBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder clearSystrace() { - if (systraceBuilder_ == null) { - systrace_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000200); - onChanged(); - } else { - systraceBuilder_.clear(); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public Builder removeSystrace(int index) { - if (systraceBuilder_ == null) { - ensureSystraceIsMutable(); - systrace_.remove(index); - onChanged(); - } else { - systraceBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder getSystraceBuilder( - int index) { - return getSystraceFieldBuilder().getBuilder(index); - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder getSystraceOrBuilder( - int index) { - if (systraceBuilder_ == null) { - return systrace_.get(index); } else { - return systraceBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<? extends com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> - getSystraceOrBuilderList() { - if (systraceBuilder_ != null) { - return systraceBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(systrace_); - } - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder addSystraceBuilder() { - return getSystraceFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.SystraceReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder addSystraceBuilder( - int index) { - return getSystraceFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Systrace report per file - * </pre> - * - * <code>repeated .android.vts.SystraceReportMessage systrace = 22 [deprecated = true];</code> - */ - @java.lang.Deprecated public java.util.List<com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder> - getSystraceBuilderList() { - return getSystraceFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.SystraceReportMessage, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder, com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder> - getSystraceFieldBuilder() { - if (systraceBuilder_ == null) { - systraceBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.SystraceReportMessage, com.android.vts.proto.VtsReportMessage.SystraceReportMessage.Builder, com.android.vts.proto.VtsReportMessage.SystraceReportMessageOrBuilder>( - systrace_, - ((bitField0_ & 0x00000200) == 0x00000200), - getParentForChildren(), - isClean()); - systrace_ = null; - } - return systraceBuilder_; - } - - private long startTimestamp_ ; - /** - * <pre> - * Execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 101;</code> - */ - public boolean hasStartTimestamp() { - return ((bitField0_ & 0x00000400) == 0x00000400); - } - /** - * <pre> - * Execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 101;</code> - */ - public long getStartTimestamp() { - return startTimestamp_; - } - /** - * <pre> - * Execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 101;</code> - */ - public Builder setStartTimestamp(long value) { - bitField0_ |= 0x00000400; - startTimestamp_ = value; - onChanged(); - return this; - } - /** - * <pre> - * Execution start and end time stamp. - * </pre> - * - * <code>optional int64 start_timestamp = 101;</code> - */ - public Builder clearStartTimestamp() { - bitField0_ = (bitField0_ & ~0x00000400); - startTimestamp_ = 0L; - onChanged(); - return this; - } - - private long endTimestamp_ ; - /** - * <code>optional int64 end_timestamp = 102;</code> - */ - public boolean hasEndTimestamp() { - return ((bitField0_ & 0x00000800) == 0x00000800); - } - /** - * <code>optional int64 end_timestamp = 102;</code> - */ - public long getEndTimestamp() { - return endTimestamp_; - } - /** - * <code>optional int64 end_timestamp = 102;</code> - */ - public Builder setEndTimestamp(long value) { - bitField0_ |= 0x00000800; - endTimestamp_ = value; - onChanged(); - return this; - } - /** - * <code>optional int64 end_timestamp = 102;</code> - */ - public Builder clearEndTimestamp() { - bitField0_ = (bitField0_ & ~0x00000800); - endTimestamp_ = 0L; - onChanged(); - return this; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> coverage_ = - java.util.Collections.emptyList(); - private void ensureCoverageIsMutable() { - if (!((bitField0_ & 0x00001000) == 0x00001000)) { - coverage_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.CoverageReportMessage>(coverage_); - bitField0_ |= 0x00001000; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.CoverageReportMessage, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> coverageBuilder_; - - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage> getCoverageList() { - if (coverageBuilder_ == null) { - return java.util.Collections.unmodifiableList(coverage_); - } else { - return coverageBuilder_.getMessageList(); - } - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public int getCoverageCount() { - if (coverageBuilder_ == null) { - return coverage_.size(); - } else { - return coverageBuilder_.getCount(); - } - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index) { - if (coverageBuilder_ == null) { - return coverage_.get(index); - } else { - return coverageBuilder_.getMessage(index); - } - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder setCoverage( - int index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.set(index, value); - onChanged(); - } else { - coverageBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder setCoverage( - int index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.set(index, builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder addCoverage(com.android.vts.proto.VtsReportMessage.CoverageReportMessage value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.add(value); - onChanged(); - } else { - coverageBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder addCoverage( - int index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage value) { - if (coverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCoverageIsMutable(); - coverage_.add(index, value); - onChanged(); - } else { - coverageBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder addCoverage( - com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.add(builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder addCoverage( - int index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder builderForValue) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.add(index, builderForValue.build()); - onChanged(); - } else { - coverageBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder addAllCoverage( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.CoverageReportMessage> values) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, coverage_); - onChanged(); - } else { - coverageBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder clearCoverage() { - if (coverageBuilder_ == null) { - coverage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); - onChanged(); - } else { - coverageBuilder_.clear(); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public Builder removeCoverage(int index) { - if (coverageBuilder_ == null) { - ensureCoverageIsMutable(); - coverage_.remove(index); - onChanged(); - } else { - coverageBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder getCoverageBuilder( - int index) { - return getCoverageFieldBuilder().getBuilder(index); - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder( - int index) { - if (coverageBuilder_ == null) { - return coverage_.get(index); } else { - return coverageBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> - getCoverageOrBuilderList() { - if (coverageBuilder_ != null) { - return coverageBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(coverage_); - } - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder addCoverageBuilder() { - return getCoverageFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.CoverageReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder addCoverageBuilder( - int index) { - return getCoverageFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Coverage report per file - * </pre> - * - * <code>repeated .android.vts.CoverageReportMessage coverage = 103;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder> - getCoverageBuilderList() { - return getCoverageFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.CoverageReportMessage, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> - getCoverageFieldBuilder() { - if (coverageBuilder_ == null) { - coverageBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.CoverageReportMessage, com.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder>( - coverage_, - ((bitField0_ & 0x00001000) == 0x00001000), - getParentForChildren(), - isClean()); - coverage_ = null; - } - return coverageBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> apiCoverage_ = - java.util.Collections.emptyList(); - private void ensureApiCoverageIsMutable() { - if (!((bitField0_ & 0x00002000) == 0x00002000)) { - apiCoverage_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage>(apiCoverage_); - bitField0_ |= 0x00002000; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> apiCoverageBuilder_; - - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> getApiCoverageList() { - if (apiCoverageBuilder_ == null) { - return java.util.Collections.unmodifiableList(apiCoverage_); - } else { - return apiCoverageBuilder_.getMessageList(); - } - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public int getApiCoverageCount() { - if (apiCoverageBuilder_ == null) { - return apiCoverage_.size(); - } else { - return apiCoverageBuilder_.getCount(); - } - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getApiCoverage(int index) { - if (apiCoverageBuilder_ == null) { - return apiCoverage_.get(index); - } else { - return apiCoverageBuilder_.getMessage(index); - } - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder setApiCoverage( - int index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage value) { - if (apiCoverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureApiCoverageIsMutable(); - apiCoverage_.set(index, value); - onChanged(); - } else { - apiCoverageBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder setApiCoverage( - int index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder builderForValue) { - if (apiCoverageBuilder_ == null) { - ensureApiCoverageIsMutable(); - apiCoverage_.set(index, builderForValue.build()); - onChanged(); - } else { - apiCoverageBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder addApiCoverage(com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage value) { - if (apiCoverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureApiCoverageIsMutable(); - apiCoverage_.add(value); - onChanged(); - } else { - apiCoverageBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder addApiCoverage( - int index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage value) { - if (apiCoverageBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureApiCoverageIsMutable(); - apiCoverage_.add(index, value); - onChanged(); - } else { - apiCoverageBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder addApiCoverage( - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder builderForValue) { - if (apiCoverageBuilder_ == null) { - ensureApiCoverageIsMutable(); - apiCoverage_.add(builderForValue.build()); - onChanged(); - } else { - apiCoverageBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder addApiCoverage( - int index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder builderForValue) { - if (apiCoverageBuilder_ == null) { - ensureApiCoverageIsMutable(); - apiCoverage_.add(index, builderForValue.build()); - onChanged(); - } else { - apiCoverageBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder addAllApiCoverage( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> values) { - if (apiCoverageBuilder_ == null) { - ensureApiCoverageIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, apiCoverage_); - onChanged(); - } else { - apiCoverageBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder clearApiCoverage() { - if (apiCoverageBuilder_ == null) { - apiCoverage_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00002000); - onChanged(); - } else { - apiCoverageBuilder_.clear(); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public Builder removeApiCoverage(int index) { - if (apiCoverageBuilder_ == null) { - ensureApiCoverageIsMutable(); - apiCoverage_.remove(index); - onChanged(); - } else { - apiCoverageBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder getApiCoverageBuilder( - int index) { - return getApiCoverageFieldBuilder().getBuilder(index); - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder getApiCoverageOrBuilder( - int index) { - if (apiCoverageBuilder_ == null) { - return apiCoverage_.get(index); } else { - return apiCoverageBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> - getApiCoverageOrBuilderList() { - if (apiCoverageBuilder_ != null) { - return apiCoverageBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(apiCoverage_); - } - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder addApiCoverageBuilder() { - return getApiCoverageFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.getDefaultInstance()); - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder addApiCoverageBuilder( - int index) { - return getApiCoverageFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.getDefaultInstance()); - } - /** - * <pre> - * API coverage report for each HAL interface. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage api_coverage = 104;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder> - getApiCoverageBuilderList() { - return getApiCoverageFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> - getApiCoverageFieldBuilder() { - if (apiCoverageBuilder_ == null) { - apiCoverageBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder>( - apiCoverage_, - ((bitField0_ & 0x00002000) == 0x00002000), - getParentForChildren(), - isClean()); - apiCoverage_ = null; - } - return apiCoverageBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> log_ = - java.util.Collections.emptyList(); - private void ensureLogIsMutable() { - if (!((bitField0_ & 0x00004000) == 0x00004000)) { - log_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.LogMessage>(log_); - bitField0_ |= 0x00004000; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.LogMessage, com.android.vts.proto.VtsReportMessage.LogMessage.Builder, com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> logBuilder_; - - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage> getLogList() { - if (logBuilder_ == null) { - return java.util.Collections.unmodifiableList(log_); - } else { - return logBuilder_.getMessageList(); - } - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public int getLogCount() { - if (logBuilder_ == null) { - return log_.size(); - } else { - return logBuilder_.getCount(); - } - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage getLog(int index) { - if (logBuilder_ == null) { - return log_.get(index); - } else { - return logBuilder_.getMessage(index); - } - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder setLog( - int index, com.android.vts.proto.VtsReportMessage.LogMessage value) { - if (logBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogIsMutable(); - log_.set(index, value); - onChanged(); - } else { - logBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder setLog( - int index, com.android.vts.proto.VtsReportMessage.LogMessage.Builder builderForValue) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - log_.set(index, builderForValue.build()); - onChanged(); - } else { - logBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder addLog(com.android.vts.proto.VtsReportMessage.LogMessage value) { - if (logBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogIsMutable(); - log_.add(value); - onChanged(); - } else { - logBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder addLog( - int index, com.android.vts.proto.VtsReportMessage.LogMessage value) { - if (logBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLogIsMutable(); - log_.add(index, value); - onChanged(); - } else { - logBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder addLog( - com.android.vts.proto.VtsReportMessage.LogMessage.Builder builderForValue) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - log_.add(builderForValue.build()); - onChanged(); - } else { - logBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder addLog( - int index, com.android.vts.proto.VtsReportMessage.LogMessage.Builder builderForValue) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - log_.add(index, builderForValue.build()); - onChanged(); - } else { - logBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder addAllLog( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.LogMessage> values) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, log_); - onChanged(); - } else { - logBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder clearLog() { - if (logBuilder_ == null) { - log_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00004000); - onChanged(); - } else { - logBuilder_.clear(); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public Builder removeLog(int index) { - if (logBuilder_ == null) { - ensureLogIsMutable(); - log_.remove(index); - onChanged(); - } else { - logBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage.Builder getLogBuilder( - int index) { - return getLogFieldBuilder().getBuilder(index); - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder getLogOrBuilder( - int index) { - if (logBuilder_ == null) { - return log_.get(index); } else { - return logBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> - getLogOrBuilderList() { - if (logBuilder_ != null) { - return logBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(log_); - } - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage.Builder addLogBuilder() { - return getLogFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.LogMessage.getDefaultInstance()); - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public com.android.vts.proto.VtsReportMessage.LogMessage.Builder addLogBuilder( - int index) { - return getLogFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.LogMessage.getDefaultInstance()); - } - /** - * <pre> - * Log for a test module. May contain multiple logs such as logcat, host log, - * etc. - * </pre> - * - * <code>repeated .android.vts.LogMessage log = 1001;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.LogMessage.Builder> - getLogBuilderList() { - return getLogFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.LogMessage, com.android.vts.proto.VtsReportMessage.LogMessage.Builder, com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder> - getLogFieldBuilder() { - if (logBuilder_ == null) { - logBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.LogMessage, com.android.vts.proto.VtsReportMessage.LogMessage.Builder, com.android.vts.proto.VtsReportMessage.LogMessageOrBuilder>( - log_, - ((bitField0_ & 0x00004000) == 0x00004000), - getParentForChildren(), - isClean()); - log_ = null; - } - return logBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> linkResource_ = - java.util.Collections.emptyList(); - private void ensureLinkResourceIsMutable() { - if (!((bitField0_ & 0x00008000) == 0x00008000)) { - linkResource_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.UrlResourceMessage>(linkResource_); - bitField0_ |= 0x00008000; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.UrlResourceMessage, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder, com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> linkResourceBuilder_; - - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> getLinkResourceList() { - if (linkResourceBuilder_ == null) { - return java.util.Collections.unmodifiableList(linkResource_); - } else { - return linkResourceBuilder_.getMessageList(); - } - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public int getLinkResourceCount() { - if (linkResourceBuilder_ == null) { - return linkResource_.size(); - } else { - return linkResourceBuilder_.getCount(); - } - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage getLinkResource(int index) { - if (linkResourceBuilder_ == null) { - return linkResource_.get(index); - } else { - return linkResourceBuilder_.getMessage(index); - } - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder setLinkResource( - int index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage value) { - if (linkResourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLinkResourceIsMutable(); - linkResource_.set(index, value); - onChanged(); - } else { - linkResourceBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder setLinkResource( - int index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder builderForValue) { - if (linkResourceBuilder_ == null) { - ensureLinkResourceIsMutable(); - linkResource_.set(index, builderForValue.build()); - onChanged(); - } else { - linkResourceBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder addLinkResource(com.android.vts.proto.VtsReportMessage.UrlResourceMessage value) { - if (linkResourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLinkResourceIsMutable(); - linkResource_.add(value); - onChanged(); - } else { - linkResourceBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder addLinkResource( - int index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage value) { - if (linkResourceBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureLinkResourceIsMutable(); - linkResource_.add(index, value); - onChanged(); - } else { - linkResourceBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder addLinkResource( - com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder builderForValue) { - if (linkResourceBuilder_ == null) { - ensureLinkResourceIsMutable(); - linkResource_.add(builderForValue.build()); - onChanged(); - } else { - linkResourceBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder addLinkResource( - int index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder builderForValue) { - if (linkResourceBuilder_ == null) { - ensureLinkResourceIsMutable(); - linkResource_.add(index, builderForValue.build()); - onChanged(); - } else { - linkResourceBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder addAllLinkResource( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.UrlResourceMessage> values) { - if (linkResourceBuilder_ == null) { - ensureLinkResourceIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, linkResource_); - onChanged(); - } else { - linkResourceBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder clearLinkResource() { - if (linkResourceBuilder_ == null) { - linkResource_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00008000); - onChanged(); - } else { - linkResourceBuilder_.clear(); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public Builder removeLinkResource(int index) { - if (linkResourceBuilder_ == null) { - ensureLinkResourceIsMutable(); - linkResource_.remove(index); - onChanged(); - } else { - linkResourceBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder getLinkResourceBuilder( - int index) { - return getLinkResourceFieldBuilder().getBuilder(index); - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder getLinkResourceOrBuilder( - int index) { - if (linkResourceBuilder_ == null) { - return linkResource_.get(index); } else { - return linkResourceBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> - getLinkResourceOrBuilderList() { - if (linkResourceBuilder_ != null) { - return linkResourceBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(linkResource_); - } - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder addLinkResourceBuilder() { - return getLinkResourceFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.UrlResourceMessage.getDefaultInstance()); - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder addLinkResourceBuilder( - int index) { - return getLinkResourceFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.getDefaultInstance()); - } - /** - * <pre> - * URL links for the test run. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage link_resource = 1011;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder> - getLinkResourceBuilderList() { - return getLinkResourceFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.UrlResourceMessage, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder, com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> - getLinkResourceFieldBuilder() { - if (linkResourceBuilder_ == null) { - linkResourceBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.UrlResourceMessage, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder, com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder>( - linkResource_, - ((bitField0_ & 0x00008000) == 0x00008000), - getParentForChildren(), - isClean()); - linkResource_ = null; - } - return linkResourceBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.TestReportMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.TestReportMessage) - private static final com.android.vts.proto.VtsReportMessage.TestReportMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.TestReportMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.TestReportMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<TestReportMessage> - PARSER = new com.google.protobuf.AbstractParser<TestReportMessage>() { - public TestReportMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new TestReportMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<TestReportMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<TestReportMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.TestReportMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface TestPlanReportMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.TestPlanReportMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - java.util.List<java.lang.String> - getTestModuleNameList(); - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - int getTestModuleNameCount(); - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - java.lang.String getTestModuleName(int index); - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - com.google.protobuf.ByteString - getTestModuleNameBytes(int index); - - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - java.util.List<java.lang.Long> getTestModuleStartTimestampList(); - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - int getTestModuleStartTimestampCount(); - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - long getTestModuleStartTimestamp(int index); - - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - boolean hasTestPlanName(); - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - java.lang.String getTestPlanName(); - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - com.google.protobuf.ByteString - getTestPlanNameBytes(); - - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> - getPartnerReportList(); - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - com.android.vts.proto.VtsReportMessage.UrlResourceMessage getPartnerReport(int index); - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - int getPartnerReportCount(); - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> - getPartnerReportOrBuilderList(); - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder getPartnerReportOrBuilder( - int index); - - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> - getHalApiReportList(); - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getHalApiReport(int index); - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - int getHalApiReportCount(); - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> - getHalApiReportOrBuilderList(); - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder getHalApiReportOrBuilder( - int index); - } - /** - * <pre> - * To specify a test execution report. - * </pre> - * - * Protobuf type {@code android.vts.TestPlanReportMessage} - */ - public static final class TestPlanReportMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.TestPlanReportMessage) - TestPlanReportMessageOrBuilder { - // Use TestPlanReportMessage.newBuilder() to construct. - private TestPlanReportMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private TestPlanReportMessage() { - testModuleName_ = com.google.protobuf.LazyStringArrayList.EMPTY; - testModuleStartTimestamp_ = java.util.Collections.emptyList(); - testPlanName_ = ""; - partnerReport_ = java.util.Collections.emptyList(); - halApiReport_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private TestPlanReportMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 90: { - com.google.protobuf.ByteString bs = input.readBytes(); - if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) { - testModuleName_ = new com.google.protobuf.LazyStringArrayList(); - mutable_bitField0_ |= 0x00000001; - } - testModuleName_.add(bs); - break; - } - case 96: { - if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) { - testModuleStartTimestamp_ = new java.util.ArrayList<java.lang.Long>(); - mutable_bitField0_ |= 0x00000002; - } - testModuleStartTimestamp_.add(input.readInt64()); - break; - } - case 98: { - int length = input.readRawVarint32(); - int limit = input.pushLimit(length); - if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) { - testModuleStartTimestamp_ = new java.util.ArrayList<java.lang.Long>(); - mutable_bitField0_ |= 0x00000002; - } - while (input.getBytesUntilLimit() > 0) { - testModuleStartTimestamp_.add(input.readInt64()); - } - input.popLimit(limit); - break; - } - case 170: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000001; - testPlanName_ = bs; - break; - } - case 250: { - if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) { - partnerReport_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.UrlResourceMessage>(); - mutable_bitField0_ |= 0x00000008; - } - partnerReport_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.UrlResourceMessage.PARSER, extensionRegistry)); - break; - } - case 330: { - if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) { - halApiReport_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage>(); - mutable_bitField0_ |= 0x00000010; - } - halApiReport_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.PARSER, extensionRegistry)); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) { - testModuleName_ = testModuleName_.getUnmodifiableView(); - } - if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { - testModuleStartTimestamp_ = java.util.Collections.unmodifiableList(testModuleStartTimestamp_); - } - if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) { - partnerReport_ = java.util.Collections.unmodifiableList(partnerReport_); - } - if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) { - halApiReport_ = java.util.Collections.unmodifiableList(halApiReport_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestPlanReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestPlanReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.class, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder.class); - } - - private int bitField0_; - public static final int TEST_MODULE_NAME_FIELD_NUMBER = 11; - private com.google.protobuf.LazyStringList testModuleName_; - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public com.google.protobuf.ProtocolStringList - getTestModuleNameList() { - return testModuleName_; - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public int getTestModuleNameCount() { - return testModuleName_.size(); - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public java.lang.String getTestModuleName(int index) { - return testModuleName_.get(index); - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public com.google.protobuf.ByteString - getTestModuleNameBytes(int index) { - return testModuleName_.getByteString(index); - } - - public static final int TEST_MODULE_START_TIMESTAMP_FIELD_NUMBER = 12; - private java.util.List<java.lang.Long> testModuleStartTimestamp_; - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public java.util.List<java.lang.Long> - getTestModuleStartTimestampList() { - return testModuleStartTimestamp_; - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public int getTestModuleStartTimestampCount() { - return testModuleStartTimestamp_.size(); - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public long getTestModuleStartTimestamp(int index) { - return testModuleStartTimestamp_.get(index); - } - - public static final int TEST_PLAN_NAME_FIELD_NUMBER = 21; - private volatile java.lang.Object testPlanName_; - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public boolean hasTestPlanName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public java.lang.String getTestPlanName() { - java.lang.Object ref = testPlanName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - testPlanName_ = s; - } - return s; - } - } - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public com.google.protobuf.ByteString - getTestPlanNameBytes() { - java.lang.Object ref = testPlanName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - testPlanName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PARTNER_REPORT_FIELD_NUMBER = 31; - private java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> partnerReport_; - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> getPartnerReportList() { - return partnerReport_; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> - getPartnerReportOrBuilderList() { - return partnerReport_; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public int getPartnerReportCount() { - return partnerReport_.size(); - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage getPartnerReport(int index) { - return partnerReport_.get(index); - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder getPartnerReportOrBuilder( - int index) { - return partnerReport_.get(index); - } - - public static final int HAL_API_REPORT_FIELD_NUMBER = 41; - private java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> halApiReport_; - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> getHalApiReportList() { - return halApiReport_; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> - getHalApiReportOrBuilderList() { - return halApiReport_; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public int getHalApiReportCount() { - return halApiReport_.size(); - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getHalApiReport(int index) { - return halApiReport_.get(index); - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder getHalApiReportOrBuilder( - int index) { - return halApiReport_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < testModuleName_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 11, testModuleName_.getRaw(i)); - } - for (int i = 0; i < testModuleStartTimestamp_.size(); i++) { - output.writeInt64(12, testModuleStartTimestamp_.get(i)); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 21, testPlanName_); - } - for (int i = 0; i < partnerReport_.size(); i++) { - output.writeMessage(31, partnerReport_.get(i)); - } - for (int i = 0; i < halApiReport_.size(); i++) { - output.writeMessage(41, halApiReport_.get(i)); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - { - int dataSize = 0; - for (int i = 0; i < testModuleName_.size(); i++) { - dataSize += computeStringSizeNoTag(testModuleName_.getRaw(i)); - } - size += dataSize; - size += 1 * getTestModuleNameList().size(); - } - { - int dataSize = 0; - for (int i = 0; i < testModuleStartTimestamp_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeInt64SizeNoTag(testModuleStartTimestamp_.get(i)); - } - size += dataSize; - size += 1 * getTestModuleStartTimestampList().size(); - } - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(21, testPlanName_); - } - for (int i = 0; i < partnerReport_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(31, partnerReport_.get(i)); - } - for (int i = 0; i < halApiReport_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(41, halApiReport_.get(i)); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.TestPlanReportMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage other = (com.android.vts.proto.VtsReportMessage.TestPlanReportMessage) obj; - - boolean result = true; - result = result && getTestModuleNameList() - .equals(other.getTestModuleNameList()); - result = result && getTestModuleStartTimestampList() - .equals(other.getTestModuleStartTimestampList()); - result = result && (hasTestPlanName() == other.hasTestPlanName()); - if (hasTestPlanName()) { - result = result && getTestPlanName() - .equals(other.getTestPlanName()); - } - result = result && getPartnerReportList() - .equals(other.getPartnerReportList()); - result = result && getHalApiReportList() - .equals(other.getHalApiReportList()); - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (getTestModuleNameCount() > 0) { - hash = (37 * hash) + TEST_MODULE_NAME_FIELD_NUMBER; - hash = (53 * hash) + getTestModuleNameList().hashCode(); - } - if (getTestModuleStartTimestampCount() > 0) { - hash = (37 * hash) + TEST_MODULE_START_TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + getTestModuleStartTimestampList().hashCode(); - } - if (hasTestPlanName()) { - hash = (37 * hash) + TEST_PLAN_NAME_FIELD_NUMBER; - hash = (53 * hash) + getTestPlanName().hashCode(); - } - if (getPartnerReportCount() > 0) { - hash = (37 * hash) + PARTNER_REPORT_FIELD_NUMBER; - hash = (53 * hash) + getPartnerReportList().hashCode(); - } - if (getHalApiReportCount() > 0) { - hash = (37 * hash) + HAL_API_REPORT_FIELD_NUMBER; - hash = (53 * hash) + getHalApiReportList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.TestPlanReportMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * To specify a test execution report. - * </pre> - * - * Protobuf type {@code android.vts.TestPlanReportMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.TestPlanReportMessage) - com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestPlanReportMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestPlanReportMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.class, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getPartnerReportFieldBuilder(); - getHalApiReportFieldBuilder(); - } - } - public Builder clear() { - super.clear(); - testModuleName_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - testModuleStartTimestamp_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - testPlanName_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); - if (partnerReportBuilder_ == null) { - partnerReport_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - } else { - partnerReportBuilder_.clear(); - } - if (halApiReportBuilder_ == null) { - halApiReport_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - } else { - halApiReportBuilder_.clear(); - } - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_TestPlanReportMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage build() { - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage result = new com.android.vts.proto.VtsReportMessage.TestPlanReportMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - testModuleName_ = testModuleName_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.testModuleName_ = testModuleName_; - if (((bitField0_ & 0x00000002) == 0x00000002)) { - testModuleStartTimestamp_ = java.util.Collections.unmodifiableList(testModuleStartTimestamp_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.testModuleStartTimestamp_ = testModuleStartTimestamp_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000001; - } - result.testPlanName_ = testPlanName_; - if (partnerReportBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008)) { - partnerReport_ = java.util.Collections.unmodifiableList(partnerReport_); - bitField0_ = (bitField0_ & ~0x00000008); - } - result.partnerReport_ = partnerReport_; - } else { - result.partnerReport_ = partnerReportBuilder_.build(); - } - if (halApiReportBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010)) { - halApiReport_ = java.util.Collections.unmodifiableList(halApiReport_); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.halApiReport_ = halApiReport_; - } else { - result.halApiReport_ = halApiReportBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.TestPlanReportMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.TestPlanReportMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.TestPlanReportMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.getDefaultInstance()) return this; - if (!other.testModuleName_.isEmpty()) { - if (testModuleName_.isEmpty()) { - testModuleName_ = other.testModuleName_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureTestModuleNameIsMutable(); - testModuleName_.addAll(other.testModuleName_); - } - onChanged(); - } - if (!other.testModuleStartTimestamp_.isEmpty()) { - if (testModuleStartTimestamp_.isEmpty()) { - testModuleStartTimestamp_ = other.testModuleStartTimestamp_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureTestModuleStartTimestampIsMutable(); - testModuleStartTimestamp_.addAll(other.testModuleStartTimestamp_); - } - onChanged(); - } - if (other.hasTestPlanName()) { - bitField0_ |= 0x00000004; - testPlanName_ = other.testPlanName_; - onChanged(); - } - if (partnerReportBuilder_ == null) { - if (!other.partnerReport_.isEmpty()) { - if (partnerReport_.isEmpty()) { - partnerReport_ = other.partnerReport_; - bitField0_ = (bitField0_ & ~0x00000008); - } else { - ensurePartnerReportIsMutable(); - partnerReport_.addAll(other.partnerReport_); - } - onChanged(); - } - } else { - if (!other.partnerReport_.isEmpty()) { - if (partnerReportBuilder_.isEmpty()) { - partnerReportBuilder_.dispose(); - partnerReportBuilder_ = null; - partnerReport_ = other.partnerReport_; - bitField0_ = (bitField0_ & ~0x00000008); - partnerReportBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getPartnerReportFieldBuilder() : null; - } else { - partnerReportBuilder_.addAllMessages(other.partnerReport_); - } - } - } - if (halApiReportBuilder_ == null) { - if (!other.halApiReport_.isEmpty()) { - if (halApiReport_.isEmpty()) { - halApiReport_ = other.halApiReport_; - bitField0_ = (bitField0_ & ~0x00000010); - } else { - ensureHalApiReportIsMutable(); - halApiReport_.addAll(other.halApiReport_); - } - onChanged(); - } - } else { - if (!other.halApiReport_.isEmpty()) { - if (halApiReportBuilder_.isEmpty()) { - halApiReportBuilder_.dispose(); - halApiReportBuilder_ = null; - halApiReport_ = other.halApiReport_; - bitField0_ = (bitField0_ & ~0x00000010); - halApiReportBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getHalApiReportFieldBuilder() : null; - } else { - halApiReportBuilder_.addAllMessages(other.halApiReport_); - } - } - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.TestPlanReportMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private com.google.protobuf.LazyStringList testModuleName_ = com.google.protobuf.LazyStringArrayList.EMPTY; - private void ensureTestModuleNameIsMutable() { - if (!((bitField0_ & 0x00000001) == 0x00000001)) { - testModuleName_ = new com.google.protobuf.LazyStringArrayList(testModuleName_); - bitField0_ |= 0x00000001; - } - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public com.google.protobuf.ProtocolStringList - getTestModuleNameList() { - return testModuleName_.getUnmodifiableView(); - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public int getTestModuleNameCount() { - return testModuleName_.size(); - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public java.lang.String getTestModuleName(int index) { - return testModuleName_.get(index); - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public com.google.protobuf.ByteString - getTestModuleNameBytes(int index) { - return testModuleName_.getByteString(index); - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public Builder setTestModuleName( - int index, java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestModuleNameIsMutable(); - testModuleName_.set(index, value); - onChanged(); - return this; - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public Builder addTestModuleName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestModuleNameIsMutable(); - testModuleName_.add(value); - onChanged(); - return this; - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public Builder addAllTestModuleName( - java.lang.Iterable<java.lang.String> values) { - ensureTestModuleNameIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, testModuleName_); - onChanged(); - return this; - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public Builder clearTestModuleName() { - testModuleName_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - /** - * <pre> - * Keys used to find all TestReportMessage messages of test modules in - * this plan. - * </pre> - * - * <code>repeated string test_module_name = 11;</code> - */ - public Builder addTestModuleNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestModuleNameIsMutable(); - testModuleName_.add(value); - onChanged(); - return this; - } - - private java.util.List<java.lang.Long> testModuleStartTimestamp_ = java.util.Collections.emptyList(); - private void ensureTestModuleStartTimestampIsMutable() { - if (!((bitField0_ & 0x00000002) == 0x00000002)) { - testModuleStartTimestamp_ = new java.util.ArrayList<java.lang.Long>(testModuleStartTimestamp_); - bitField0_ |= 0x00000002; - } - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public java.util.List<java.lang.Long> - getTestModuleStartTimestampList() { - return java.util.Collections.unmodifiableList(testModuleStartTimestamp_); - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public int getTestModuleStartTimestampCount() { - return testModuleStartTimestamp_.size(); - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public long getTestModuleStartTimestamp(int index) { - return testModuleStartTimestamp_.get(index); - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public Builder setTestModuleStartTimestamp( - int index, long value) { - ensureTestModuleStartTimestampIsMutable(); - testModuleStartTimestamp_.set(index, value); - onChanged(); - return this; - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public Builder addTestModuleStartTimestamp(long value) { - ensureTestModuleStartTimestampIsMutable(); - testModuleStartTimestamp_.add(value); - onChanged(); - return this; - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public Builder addAllTestModuleStartTimestamp( - java.lang.Iterable<? extends java.lang.Long> values) { - ensureTestModuleStartTimestampIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, testModuleStartTimestamp_); - onChanged(); - return this; - } - /** - * <code>repeated int64 test_module_start_timestamp = 12;</code> - */ - public Builder clearTestModuleStartTimestamp() { - testModuleStartTimestamp_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - - private java.lang.Object testPlanName_ = ""; - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public boolean hasTestPlanName() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public java.lang.String getTestPlanName() { - java.lang.Object ref = testPlanName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - testPlanName_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public com.google.protobuf.ByteString - getTestPlanNameBytes() { - java.lang.Object ref = testPlanName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - testPlanName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public Builder setTestPlanName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - testPlanName_ = value; - onChanged(); - return this; - } - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public Builder clearTestPlanName() { - bitField0_ = (bitField0_ & ~0x00000004); - testPlanName_ = getDefaultInstance().getTestPlanName(); - onChanged(); - return this; - } - /** - * <pre> - * The test plan name. - * </pre> - * - * <code>optional string test_plan_name = 21;</code> - */ - public Builder setTestPlanNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - testPlanName_ = value; - onChanged(); - return this; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> partnerReport_ = - java.util.Collections.emptyList(); - private void ensurePartnerReportIsMutable() { - if (!((bitField0_ & 0x00000008) == 0x00000008)) { - partnerReport_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.UrlResourceMessage>(partnerReport_); - bitField0_ |= 0x00000008; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.UrlResourceMessage, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder, com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> partnerReportBuilder_; - - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage> getPartnerReportList() { - if (partnerReportBuilder_ == null) { - return java.util.Collections.unmodifiableList(partnerReport_); - } else { - return partnerReportBuilder_.getMessageList(); - } - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public int getPartnerReportCount() { - if (partnerReportBuilder_ == null) { - return partnerReport_.size(); - } else { - return partnerReportBuilder_.getCount(); - } - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage getPartnerReport(int index) { - if (partnerReportBuilder_ == null) { - return partnerReport_.get(index); - } else { - return partnerReportBuilder_.getMessage(index); - } - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder setPartnerReport( - int index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage value) { - if (partnerReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePartnerReportIsMutable(); - partnerReport_.set(index, value); - onChanged(); - } else { - partnerReportBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder setPartnerReport( - int index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder builderForValue) { - if (partnerReportBuilder_ == null) { - ensurePartnerReportIsMutable(); - partnerReport_.set(index, builderForValue.build()); - onChanged(); - } else { - partnerReportBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder addPartnerReport(com.android.vts.proto.VtsReportMessage.UrlResourceMessage value) { - if (partnerReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePartnerReportIsMutable(); - partnerReport_.add(value); - onChanged(); - } else { - partnerReportBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder addPartnerReport( - int index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage value) { - if (partnerReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePartnerReportIsMutable(); - partnerReport_.add(index, value); - onChanged(); - } else { - partnerReportBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder addPartnerReport( - com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder builderForValue) { - if (partnerReportBuilder_ == null) { - ensurePartnerReportIsMutable(); - partnerReport_.add(builderForValue.build()); - onChanged(); - } else { - partnerReportBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder addPartnerReport( - int index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder builderForValue) { - if (partnerReportBuilder_ == null) { - ensurePartnerReportIsMutable(); - partnerReport_.add(index, builderForValue.build()); - onChanged(); - } else { - partnerReportBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder addAllPartnerReport( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.UrlResourceMessage> values) { - if (partnerReportBuilder_ == null) { - ensurePartnerReportIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, partnerReport_); - onChanged(); - } else { - partnerReportBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder clearPartnerReport() { - if (partnerReportBuilder_ == null) { - partnerReport_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - onChanged(); - } else { - partnerReportBuilder_.clear(); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public Builder removePartnerReport(int index) { - if (partnerReportBuilder_ == null) { - ensurePartnerReportIsMutable(); - partnerReport_.remove(index); - onChanged(); - } else { - partnerReportBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder getPartnerReportBuilder( - int index) { - return getPartnerReportFieldBuilder().getBuilder(index); - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder getPartnerReportOrBuilder( - int index) { - if (partnerReportBuilder_ == null) { - return partnerReport_.get(index); } else { - return partnerReportBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> - getPartnerReportOrBuilderList() { - if (partnerReportBuilder_ != null) { - return partnerReportBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(partnerReport_); - } - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder addPartnerReportBuilder() { - return getPartnerReportFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.UrlResourceMessage.getDefaultInstance()); - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder addPartnerReportBuilder( - int index) { - return getPartnerReportFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.getDefaultInstance()); - } - /** - * <pre> - * Report resource flies. - * </pre> - * - * <code>repeated .android.vts.UrlResourceMessage partner_report = 31;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder> - getPartnerReportBuilderList() { - return getPartnerReportFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.UrlResourceMessage, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder, com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder> - getPartnerReportFieldBuilder() { - if (partnerReportBuilder_ == null) { - partnerReportBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.UrlResourceMessage, com.android.vts.proto.VtsReportMessage.UrlResourceMessage.Builder, com.android.vts.proto.VtsReportMessage.UrlResourceMessageOrBuilder>( - partnerReport_, - ((bitField0_ & 0x00000008) == 0x00000008), - getParentForChildren(), - isClean()); - partnerReport_ = null; - } - return partnerReportBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> halApiReport_ = - java.util.Collections.emptyList(); - private void ensureHalApiReportIsMutable() { - if (!((bitField0_ & 0x00000010) == 0x00000010)) { - halApiReport_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage>(halApiReport_); - bitField0_ |= 0x00000010; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> halApiReportBuilder_; - - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> getHalApiReportList() { - if (halApiReportBuilder_ == null) { - return java.util.Collections.unmodifiableList(halApiReport_); - } else { - return halApiReportBuilder_.getMessageList(); - } - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public int getHalApiReportCount() { - if (halApiReportBuilder_ == null) { - return halApiReport_.size(); - } else { - return halApiReportBuilder_.getCount(); - } - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage getHalApiReport(int index) { - if (halApiReportBuilder_ == null) { - return halApiReport_.get(index); - } else { - return halApiReportBuilder_.getMessage(index); - } - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder setHalApiReport( - int index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage value) { - if (halApiReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureHalApiReportIsMutable(); - halApiReport_.set(index, value); - onChanged(); - } else { - halApiReportBuilder_.setMessage(index, value); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder setHalApiReport( - int index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder builderForValue) { - if (halApiReportBuilder_ == null) { - ensureHalApiReportIsMutable(); - halApiReport_.set(index, builderForValue.build()); - onChanged(); - } else { - halApiReportBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder addHalApiReport(com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage value) { - if (halApiReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureHalApiReportIsMutable(); - halApiReport_.add(value); - onChanged(); - } else { - halApiReportBuilder_.addMessage(value); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder addHalApiReport( - int index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage value) { - if (halApiReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureHalApiReportIsMutable(); - halApiReport_.add(index, value); - onChanged(); - } else { - halApiReportBuilder_.addMessage(index, value); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder addHalApiReport( - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder builderForValue) { - if (halApiReportBuilder_ == null) { - ensureHalApiReportIsMutable(); - halApiReport_.add(builderForValue.build()); - onChanged(); - } else { - halApiReportBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder addHalApiReport( - int index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder builderForValue) { - if (halApiReportBuilder_ == null) { - ensureHalApiReportIsMutable(); - halApiReport_.add(index, builderForValue.build()); - onChanged(); - } else { - halApiReportBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder addAllHalApiReport( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage> values) { - if (halApiReportBuilder_ == null) { - ensureHalApiReportIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, halApiReport_); - onChanged(); - } else { - halApiReportBuilder_.addAllMessages(values); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder clearHalApiReport() { - if (halApiReportBuilder_ == null) { - halApiReport_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - onChanged(); - } else { - halApiReportBuilder_.clear(); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public Builder removeHalApiReport(int index) { - if (halApiReportBuilder_ == null) { - ensureHalApiReportIsMutable(); - halApiReport_.remove(index); - onChanged(); - } else { - halApiReportBuilder_.remove(index); - } - return this; - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder getHalApiReportBuilder( - int index) { - return getHalApiReportFieldBuilder().getBuilder(index); - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder getHalApiReportOrBuilder( - int index) { - if (halApiReportBuilder_ == null) { - return halApiReport_.get(index); } else { - return halApiReportBuilder_.getMessageOrBuilder(index); - } - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> - getHalApiReportOrBuilderList() { - if (halApiReportBuilder_ != null) { - return halApiReportBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(halApiReport_); - } - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder addHalApiReportBuilder() { - return getHalApiReportFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder addHalApiReportBuilder( - int index) { - return getHalApiReportFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.getDefaultInstance()); - } - /** - * <pre> - * Available HAL APIs for coverage measurement. - * Only used for profiling test plan. - * </pre> - * - * <code>repeated .android.vts.ApiCoverageReportMessage hal_api_report = 41;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder> - getHalApiReportBuilderList() { - return getHalApiReportFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder> - getHalApiReportFieldBuilder() { - if (halApiReportBuilder_ == null) { - halApiReportBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage.Builder, com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessageOrBuilder>( - halApiReport_, - ((bitField0_ & 0x00000010) == 0x00000010), - getParentForChildren(), - isClean()); - halApiReport_ = null; - } - return halApiReportBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.TestPlanReportMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.TestPlanReportMessage) - private static final com.android.vts.proto.VtsReportMessage.TestPlanReportMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.TestPlanReportMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.TestPlanReportMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<TestPlanReportMessage> - PARSER = new com.google.protobuf.AbstractParser<TestPlanReportMessage>() { - public TestPlanReportMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new TestPlanReportMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<TestPlanReportMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<TestPlanReportMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface DashboardPostMessageOrBuilder extends - // @@protoc_insertion_point(interface_extends:android.vts.DashboardPostMessage) - com.google.protobuf.MessageOrBuilder { - - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - boolean hasAccessToken(); - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - java.lang.String getAccessToken(); - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - com.google.protobuf.ByteString - getAccessTokenBytes(); - - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.TestReportMessage> - getTestReportList(); - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - com.android.vts.proto.VtsReportMessage.TestReportMessage getTestReport(int index); - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - int getTestReportCount(); - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder> - getTestReportOrBuilderList(); - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder getTestReportOrBuilder( - int index); - - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - java.util.List<com.android.vts.proto.VtsReportMessage.TestPlanReportMessage> - getTestPlanReportList(); - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage getTestPlanReport(int index); - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - int getTestPlanReportCount(); - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder> - getTestPlanReportOrBuilderList(); - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder getTestPlanReportOrBuilder( - int index); - } - /** - * <pre> - * Proto wrapper for posting data to the VTS Dashboard - * </pre> - * - * Protobuf type {@code android.vts.DashboardPostMessage} - */ - public static final class DashboardPostMessage extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:android.vts.DashboardPostMessage) - DashboardPostMessageOrBuilder { - // Use DashboardPostMessage.newBuilder() to construct. - private DashboardPostMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) { - super(builder); - } - private DashboardPostMessage() { - accessToken_ = ""; - testReport_ = java.util.Collections.emptyList(); - testPlanReport_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private DashboardPostMessage( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 10: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000001; - accessToken_ = bs; - break; - } - case 18: { - if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) { - testReport_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.TestReportMessage>(); - mutable_bitField0_ |= 0x00000002; - } - testReport_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.TestReportMessage.PARSER, extensionRegistry)); - break; - } - case 26: { - if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { - testPlanReport_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.TestPlanReportMessage>(); - mutable_bitField0_ |= 0x00000004; - } - testPlanReport_.add( - input.readMessage(com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.PARSER, extensionRegistry)); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) { - testReport_ = java.util.Collections.unmodifiableList(testReport_); - } - if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { - testPlanReport_ = java.util.Collections.unmodifiableList(testPlanReport_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_DashboardPostMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_DashboardPostMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.DashboardPostMessage.class, com.android.vts.proto.VtsReportMessage.DashboardPostMessage.Builder.class); - } - - private int bitField0_; - public static final int ACCESS_TOKEN_FIELD_NUMBER = 1; - private volatile java.lang.Object accessToken_; - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public boolean hasAccessToken() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public java.lang.String getAccessToken() { - java.lang.Object ref = accessToken_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - accessToken_ = s; - } - return s; - } - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public com.google.protobuf.ByteString - getAccessTokenBytes() { - java.lang.Object ref = accessToken_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - accessToken_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TEST_REPORT_FIELD_NUMBER = 2; - private java.util.List<com.android.vts.proto.VtsReportMessage.TestReportMessage> testReport_; - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestReportMessage> getTestReportList() { - return testReport_; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder> - getTestReportOrBuilderList() { - return testReport_; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public int getTestReportCount() { - return testReport_.size(); - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestReportMessage getTestReport(int index) { - return testReport_.get(index); - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder getTestReportOrBuilder( - int index) { - return testReport_.get(index); - } - - public static final int TEST_PLAN_REPORT_FIELD_NUMBER = 3; - private java.util.List<com.android.vts.proto.VtsReportMessage.TestPlanReportMessage> testPlanReport_; - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestPlanReportMessage> getTestPlanReportList() { - return testPlanReport_; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder> - getTestPlanReportOrBuilderList() { - return testPlanReport_; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public int getTestPlanReportCount() { - return testPlanReport_.size(); - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage getTestPlanReport(int index) { - return testPlanReport_.get(index); - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder getTestPlanReportOrBuilder( - int index) { - return testPlanReport_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, accessToken_); - } - for (int i = 0; i < testReport_.size(); i++) { - output.writeMessage(2, testReport_.get(i)); - } - for (int i = 0; i < testPlanReport_.size(); i++) { - output.writeMessage(3, testPlanReport_.get(i)); - } - unknownFields.writeTo(output); - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, accessToken_); - } - for (int i = 0; i < testReport_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, testReport_.get(i)); - } - for (int i = 0; i < testPlanReport_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, testPlanReport_.get(i)); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.android.vts.proto.VtsReportMessage.DashboardPostMessage)) { - return super.equals(obj); - } - com.android.vts.proto.VtsReportMessage.DashboardPostMessage other = (com.android.vts.proto.VtsReportMessage.DashboardPostMessage) obj; - - boolean result = true; - result = result && (hasAccessToken() == other.hasAccessToken()); - if (hasAccessToken()) { - result = result && getAccessToken() - .equals(other.getAccessToken()); - } - result = result && getTestReportList() - .equals(other.getTestReportList()); - result = result && getTestPlanReportList() - .equals(other.getTestPlanReportList()); - result = result && unknownFields.equals(other.unknownFields); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptorForType().hashCode(); - if (hasAccessToken()) { - hash = (37 * hash) + ACCESS_TOKEN_FIELD_NUMBER; - hash = (53 * hash) + getAccessToken().hashCode(); - } - if (getTestReportCount() > 0) { - hash = (37 * hash) + TEST_REPORT_FIELD_NUMBER; - hash = (53 * hash) + getTestReportList().hashCode(); - } - if (getTestPlanReportCount() > 0) { - hash = (37 * hash) + TEST_PLAN_REPORT_FIELD_NUMBER; - hash = (53 * hash) + getTestPlanReportList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.android.vts.proto.VtsReportMessage.DashboardPostMessage prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * <pre> - * Proto wrapper for posting data to the VTS Dashboard - * </pre> - * - * Protobuf type {@code android.vts.DashboardPostMessage} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements - // @@protoc_insertion_point(builder_implements:android.vts.DashboardPostMessage) - com.android.vts.proto.VtsReportMessage.DashboardPostMessageOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_DashboardPostMessage_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_DashboardPostMessage_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.android.vts.proto.VtsReportMessage.DashboardPostMessage.class, com.android.vts.proto.VtsReportMessage.DashboardPostMessage.Builder.class); - } - - // Construct using com.android.vts.proto.VtsReportMessage.DashboardPostMessage.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getTestReportFieldBuilder(); - getTestPlanReportFieldBuilder(); - } - } - public Builder clear() { - super.clear(); - accessToken_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - if (testReportBuilder_ == null) { - testReport_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - } else { - testReportBuilder_.clear(); - } - if (testPlanReportBuilder_ == null) { - testPlanReport_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - } else { - testPlanReportBuilder_.clear(); - } - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.android.vts.proto.VtsReportMessage.internal_static_android_vts_DashboardPostMessage_descriptor; - } - - public com.android.vts.proto.VtsReportMessage.DashboardPostMessage getDefaultInstanceForType() { - return com.android.vts.proto.VtsReportMessage.DashboardPostMessage.getDefaultInstance(); - } - - public com.android.vts.proto.VtsReportMessage.DashboardPostMessage build() { - com.android.vts.proto.VtsReportMessage.DashboardPostMessage result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.android.vts.proto.VtsReportMessage.DashboardPostMessage buildPartial() { - com.android.vts.proto.VtsReportMessage.DashboardPostMessage result = new com.android.vts.proto.VtsReportMessage.DashboardPostMessage(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.accessToken_ = accessToken_; - if (testReportBuilder_ == null) { - if (((bitField0_ & 0x00000002) == 0x00000002)) { - testReport_ = java.util.Collections.unmodifiableList(testReport_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.testReport_ = testReport_; - } else { - result.testReport_ = testReportBuilder_.build(); - } - if (testPlanReportBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004)) { - testPlanReport_ = java.util.Collections.unmodifiableList(testPlanReport_); - bitField0_ = (bitField0_ & ~0x00000004); - } - result.testPlanReport_ = testPlanReport_; - } else { - result.testPlanReport_ = testPlanReportBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.android.vts.proto.VtsReportMessage.DashboardPostMessage) { - return mergeFrom((com.android.vts.proto.VtsReportMessage.DashboardPostMessage)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.android.vts.proto.VtsReportMessage.DashboardPostMessage other) { - if (other == com.android.vts.proto.VtsReportMessage.DashboardPostMessage.getDefaultInstance()) return this; - if (other.hasAccessToken()) { - bitField0_ |= 0x00000001; - accessToken_ = other.accessToken_; - onChanged(); - } - if (testReportBuilder_ == null) { - if (!other.testReport_.isEmpty()) { - if (testReport_.isEmpty()) { - testReport_ = other.testReport_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureTestReportIsMutable(); - testReport_.addAll(other.testReport_); - } - onChanged(); - } - } else { - if (!other.testReport_.isEmpty()) { - if (testReportBuilder_.isEmpty()) { - testReportBuilder_.dispose(); - testReportBuilder_ = null; - testReport_ = other.testReport_; - bitField0_ = (bitField0_ & ~0x00000002); - testReportBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getTestReportFieldBuilder() : null; - } else { - testReportBuilder_.addAllMessages(other.testReport_); - } - } - } - if (testPlanReportBuilder_ == null) { - if (!other.testPlanReport_.isEmpty()) { - if (testPlanReport_.isEmpty()) { - testPlanReport_ = other.testPlanReport_; - bitField0_ = (bitField0_ & ~0x00000004); - } else { - ensureTestPlanReportIsMutable(); - testPlanReport_.addAll(other.testPlanReport_); - } - onChanged(); - } - } else { - if (!other.testPlanReport_.isEmpty()) { - if (testPlanReportBuilder_.isEmpty()) { - testPlanReportBuilder_.dispose(); - testPlanReportBuilder_ = null; - testPlanReport_ = other.testPlanReport_; - bitField0_ = (bitField0_ & ~0x00000004); - testPlanReportBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getTestPlanReportFieldBuilder() : null; - } else { - testPlanReportBuilder_.addAllMessages(other.testPlanReport_); - } - } - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.android.vts.proto.VtsReportMessage.DashboardPostMessage parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.android.vts.proto.VtsReportMessage.DashboardPostMessage) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private java.lang.Object accessToken_ = ""; - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public boolean hasAccessToken() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public java.lang.String getAccessToken() { - java.lang.Object ref = accessToken_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - accessToken_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public com.google.protobuf.ByteString - getAccessTokenBytes() { - java.lang.Object ref = accessToken_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - accessToken_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public Builder setAccessToken( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - accessToken_ = value; - onChanged(); - return this; - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public Builder clearAccessToken() { - bitField0_ = (bitField0_ & ~0x00000001); - accessToken_ = getDefaultInstance().getAccessToken(); - onChanged(); - return this; - } - /** - * <pre> - * oauth2.0 access token - * </pre> - * - * <code>optional string access_token = 1;</code> - */ - public Builder setAccessTokenBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - accessToken_ = value; - onChanged(); - return this; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.TestReportMessage> testReport_ = - java.util.Collections.emptyList(); - private void ensureTestReportIsMutable() { - if (!((bitField0_ & 0x00000002) == 0x00000002)) { - testReport_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.TestReportMessage>(testReport_); - bitField0_ |= 0x00000002; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestReportMessage, com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder> testReportBuilder_; - - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestReportMessage> getTestReportList() { - if (testReportBuilder_ == null) { - return java.util.Collections.unmodifiableList(testReport_); - } else { - return testReportBuilder_.getMessageList(); - } - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public int getTestReportCount() { - if (testReportBuilder_ == null) { - return testReport_.size(); - } else { - return testReportBuilder_.getCount(); - } - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestReportMessage getTestReport(int index) { - if (testReportBuilder_ == null) { - return testReport_.get(index); - } else { - return testReportBuilder_.getMessage(index); - } - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder setTestReport( - int index, com.android.vts.proto.VtsReportMessage.TestReportMessage value) { - if (testReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestReportIsMutable(); - testReport_.set(index, value); - onChanged(); - } else { - testReportBuilder_.setMessage(index, value); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder setTestReport( - int index, com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder builderForValue) { - if (testReportBuilder_ == null) { - ensureTestReportIsMutable(); - testReport_.set(index, builderForValue.build()); - onChanged(); - } else { - testReportBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder addTestReport(com.android.vts.proto.VtsReportMessage.TestReportMessage value) { - if (testReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestReportIsMutable(); - testReport_.add(value); - onChanged(); - } else { - testReportBuilder_.addMessage(value); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder addTestReport( - int index, com.android.vts.proto.VtsReportMessage.TestReportMessage value) { - if (testReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestReportIsMutable(); - testReport_.add(index, value); - onChanged(); - } else { - testReportBuilder_.addMessage(index, value); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder addTestReport( - com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder builderForValue) { - if (testReportBuilder_ == null) { - ensureTestReportIsMutable(); - testReport_.add(builderForValue.build()); - onChanged(); - } else { - testReportBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder addTestReport( - int index, com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder builderForValue) { - if (testReportBuilder_ == null) { - ensureTestReportIsMutable(); - testReport_.add(index, builderForValue.build()); - onChanged(); - } else { - testReportBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder addAllTestReport( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.TestReportMessage> values) { - if (testReportBuilder_ == null) { - ensureTestReportIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, testReport_); - onChanged(); - } else { - testReportBuilder_.addAllMessages(values); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder clearTestReport() { - if (testReportBuilder_ == null) { - testReport_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - } else { - testReportBuilder_.clear(); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public Builder removeTestReport(int index) { - if (testReportBuilder_ == null) { - ensureTestReportIsMutable(); - testReport_.remove(index); - onChanged(); - } else { - testReportBuilder_.remove(index); - } - return this; - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder getTestReportBuilder( - int index) { - return getTestReportFieldBuilder().getBuilder(index); - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder getTestReportOrBuilder( - int index) { - if (testReportBuilder_ == null) { - return testReport_.get(index); } else { - return testReportBuilder_.getMessageOrBuilder(index); - } - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder> - getTestReportOrBuilderList() { - if (testReportBuilder_ != null) { - return testReportBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(testReport_); - } - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder addTestReportBuilder() { - return getTestReportFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.TestReportMessage.getDefaultInstance()); - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder addTestReportBuilder( - int index) { - return getTestReportFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.TestReportMessage.getDefaultInstance()); - } - /** - * <code>repeated .android.vts.TestReportMessage test_report = 2;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder> - getTestReportBuilderList() { - return getTestReportFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestReportMessage, com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder> - getTestReportFieldBuilder() { - if (testReportBuilder_ == null) { - testReportBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestReportMessage, com.android.vts.proto.VtsReportMessage.TestReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestReportMessageOrBuilder>( - testReport_, - ((bitField0_ & 0x00000002) == 0x00000002), - getParentForChildren(), - isClean()); - testReport_ = null; - } - return testReportBuilder_; - } - - private java.util.List<com.android.vts.proto.VtsReportMessage.TestPlanReportMessage> testPlanReport_ = - java.util.Collections.emptyList(); - private void ensureTestPlanReportIsMutable() { - if (!((bitField0_ & 0x00000004) == 0x00000004)) { - testPlanReport_ = new java.util.ArrayList<com.android.vts.proto.VtsReportMessage.TestPlanReportMessage>(testPlanReport_); - bitField0_ |= 0x00000004; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder> testPlanReportBuilder_; - - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestPlanReportMessage> getTestPlanReportList() { - if (testPlanReportBuilder_ == null) { - return java.util.Collections.unmodifiableList(testPlanReport_); - } else { - return testPlanReportBuilder_.getMessageList(); - } - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public int getTestPlanReportCount() { - if (testPlanReportBuilder_ == null) { - return testPlanReport_.size(); - } else { - return testPlanReportBuilder_.getCount(); - } - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage getTestPlanReport(int index) { - if (testPlanReportBuilder_ == null) { - return testPlanReport_.get(index); - } else { - return testPlanReportBuilder_.getMessage(index); - } - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder setTestPlanReport( - int index, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage value) { - if (testPlanReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestPlanReportIsMutable(); - testPlanReport_.set(index, value); - onChanged(); - } else { - testPlanReportBuilder_.setMessage(index, value); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder setTestPlanReport( - int index, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder builderForValue) { - if (testPlanReportBuilder_ == null) { - ensureTestPlanReportIsMutable(); - testPlanReport_.set(index, builderForValue.build()); - onChanged(); - } else { - testPlanReportBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder addTestPlanReport(com.android.vts.proto.VtsReportMessage.TestPlanReportMessage value) { - if (testPlanReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestPlanReportIsMutable(); - testPlanReport_.add(value); - onChanged(); - } else { - testPlanReportBuilder_.addMessage(value); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder addTestPlanReport( - int index, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage value) { - if (testPlanReportBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureTestPlanReportIsMutable(); - testPlanReport_.add(index, value); - onChanged(); - } else { - testPlanReportBuilder_.addMessage(index, value); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder addTestPlanReport( - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder builderForValue) { - if (testPlanReportBuilder_ == null) { - ensureTestPlanReportIsMutable(); - testPlanReport_.add(builderForValue.build()); - onChanged(); - } else { - testPlanReportBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder addTestPlanReport( - int index, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder builderForValue) { - if (testPlanReportBuilder_ == null) { - ensureTestPlanReportIsMutable(); - testPlanReport_.add(index, builderForValue.build()); - onChanged(); - } else { - testPlanReportBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder addAllTestPlanReport( - java.lang.Iterable<? extends com.android.vts.proto.VtsReportMessage.TestPlanReportMessage> values) { - if (testPlanReportBuilder_ == null) { - ensureTestPlanReportIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, testPlanReport_); - onChanged(); - } else { - testPlanReportBuilder_.addAllMessages(values); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder clearTestPlanReport() { - if (testPlanReportBuilder_ == null) { - testPlanReport_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - onChanged(); - } else { - testPlanReportBuilder_.clear(); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public Builder removeTestPlanReport(int index) { - if (testPlanReportBuilder_ == null) { - ensureTestPlanReportIsMutable(); - testPlanReport_.remove(index); - onChanged(); - } else { - testPlanReportBuilder_.remove(index); - } - return this; - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder getTestPlanReportBuilder( - int index) { - return getTestPlanReportFieldBuilder().getBuilder(index); - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder getTestPlanReportOrBuilder( - int index) { - if (testPlanReportBuilder_ == null) { - return testPlanReport_.get(index); } else { - return testPlanReportBuilder_.getMessageOrBuilder(index); - } - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public java.util.List<? extends com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder> - getTestPlanReportOrBuilderList() { - if (testPlanReportBuilder_ != null) { - return testPlanReportBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(testPlanReport_); - } - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder addTestPlanReportBuilder() { - return getTestPlanReportFieldBuilder().addBuilder( - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.getDefaultInstance()); - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder addTestPlanReportBuilder( - int index) { - return getTestPlanReportFieldBuilder().addBuilder( - index, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.getDefaultInstance()); - } - /** - * <code>repeated .android.vts.TestPlanReportMessage test_plan_report = 3;</code> - */ - public java.util.List<com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder> - getTestPlanReportBuilderList() { - return getTestPlanReportFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder> - getTestPlanReportFieldBuilder() { - if (testPlanReportBuilder_ == null) { - testPlanReportBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.android.vts.proto.VtsReportMessage.TestPlanReportMessage, com.android.vts.proto.VtsReportMessage.TestPlanReportMessage.Builder, com.android.vts.proto.VtsReportMessage.TestPlanReportMessageOrBuilder>( - testPlanReport_, - ((bitField0_ & 0x00000004) == 0x00000004), - getParentForChildren(), - isClean()); - testPlanReport_ = null; - } - return testPlanReportBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:android.vts.DashboardPostMessage) - } - - // @@protoc_insertion_point(class_scope:android.vts.DashboardPostMessage) - private static final com.android.vts.proto.VtsReportMessage.DashboardPostMessage DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.android.vts.proto.VtsReportMessage.DashboardPostMessage(); - } - - public static com.android.vts.proto.VtsReportMessage.DashboardPostMessage getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - @java.lang.Deprecated public static final com.google.protobuf.Parser<DashboardPostMessage> - PARSER = new com.google.protobuf.AbstractParser<DashboardPostMessage>() { - public DashboardPostMessage parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new DashboardPostMessage(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser<DashboardPostMessage> parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser<DashboardPostMessage> getParserForType() { - return PARSER; - } - - public com.android.vts.proto.VtsReportMessage.DashboardPostMessage getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_AndroidDeviceInfoMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_AndroidDeviceInfoMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_AndroidBuildInfo_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_AndroidBuildInfo_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_VtsHostInfo_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_VtsHostInfo_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_TestCaseReportMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_TestCaseReportMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_ProfilingReportMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_ProfilingReportMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_SystraceReportMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_SystraceReportMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_CoverageReportMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_CoverageReportMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_HalInterfaceMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_HalInterfaceMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_ApiCoverageReportMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_ApiCoverageReportMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_LogMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_LogMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_UrlResourceMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_UrlResourceMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_TestReportMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_TestReportMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_TestPlanReportMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_TestPlanReportMessage_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_android_vts_DashboardPostMessage_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_android_vts_DashboardPostMessage_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\034proto/VtsReportMessage.proto\022\013android." + - "vts\"\340\001\n\030AndroidDeviceInfoMessage\022\024\n\014prod" + - "uct_type\030\001 \001(\014\022\027\n\017product_variant\030\002 \001(\014\022" + - "\024\n\014build_flavor\030\013 \001(\014\022\020\n\010build_id\030\014 \001(\014\022" + - "\016\n\006branch\030\025 \001(\014\022\023\n\013build_alias\030\026 \001(\014\022\021\n\t" + - "api_level\030\037 \001(\014\022\020\n\010abi_name\0303 \001(\014\022\023\n\013abi" + - "_bitness\0304 \001(\014\022\016\n\006serial\030e \001(\014\"g\n\020Androi" + - "dBuildInfo\022\n\n\002id\030\001 \001(\014\022\014\n\004name\030\013 \001(\014\022\022\n\n" + - "build_type\030\014 \001(\014\022\016\n\006branch\030\r \001(\014\022\025\n\rbuil" + - "d_summary\030\025 \001(\014\"\037\n\013VtsHostInfo\022\020\n\010hostna", - "me\030\001 \001(\014\"\325\002\n\025TestCaseReportMessage\022\014\n\004na" + - "me\030\001 \001(\014\0220\n\013test_result\030\013 \001(\0162\033.android." + - "vts.TestCaseResult\022\027\n\017start_timestamp\030\025 " + - "\001(\003\022\025\n\rend_timestamp\030\026 \001(\003\0224\n\010coverage\030\037" + - " \003(\0132\".android.vts.CoverageReportMessage" + - "\0226\n\tprofiling\030) \003(\0132#.android.vts.Profil" + - "ingReportMessage\0228\n\010systrace\030* \003(\0132\".and" + - "roid.vts.SystraceReportMessageB\002\030\001\022$\n\003lo" + - "g\030e \003(\0132\027.android.vts.LogMessage\"\240\002\n\026Pro" + - "filingReportMessage\022\014\n\004name\030\001 \001(\014\022+\n\004typ", - "e\030\002 \001(\0162\035.android.vts.VtsProfilingType\022@" + - "\n\017regression_mode\030\003 \001(\0162\'.android.vts.Vt" + - "sProfilingRegressionMode\022\027\n\017start_timest" + - "amp\030\013 \001(\003\022\025\n\rend_timestamp\030\014 \001(\003\022\r\n\005labe" + - "l\030\025 \003(\014\022\r\n\005value\030\026 \003(\003\022\024\n\014x_axis_label\030\037" + - " \001(\014\022\024\n\014y_axis_label\030 \001(\014\022\017\n\007options\030) " + - "\003(\014\"H\n\025SystraceReportMessage\022\024\n\014process_" + - "name\030\001 \001(\014\022\014\n\004html\030\013 \003(\014\022\013\n\003url\030\025 \003(\014\"\345\001" + - "\n\025CoverageReportMessage\022\021\n\tfile_path\030\013 \001" + - "(\014\022\024\n\014project_name\030\014 \001(\014\022\020\n\010revision\030\r \001", - "(\014\022\034\n\024line_coverage_vector\030\027 \003(\003\022\030\n\020tota" + - "l_line_count\030e \001(\005\022\032\n\022covered_line_count" + - "\030f \001(\005\022\024\n\010dir_path\030\001 \001(\014B\002\030\001\022\025\n\tfile_nam" + - "e\030\002 \001(\014B\002\030\001\022\020\n\004html\030\003 \001(\014B\002\030\001\"\234\001\n\023HalInt" + - "erfaceMessage\022\030\n\020hal_package_name\030\001 \001(\014\022" + - "\031\n\021hal_version_major\030\002 \001(\005\022\031\n\021hal_versio" + - "n_minor\030\003 \001(\005\022\032\n\022hal_interface_name\030\004 \001(" + - "\014\022\031\n\021hal_release_level\030\005 \001(\014\"}\n\030ApiCover" + - "ageReportMessage\0227\n\rhal_interface\030\001 \001(\0132" + - " .android.vts.HalInterfaceMessage\022\017\n\007hal", - "_api\030\013 \003(\014\022\027\n\017covered_hal_api\030\014 \003(\014\"8\n\nL" + - "ogMessage\022\013\n\003url\030\001 \001(\014\022\014\n\004name\030\002 \001(\014\022\017\n\007" + - "content\030\003 \001(\014\"@\n\022UrlResourceMessage\022\013\n\003u" + - "rl\030\001 \001(\014\022\014\n\004name\030\002 \001(\014\022\017\n\007content\030\003 \001(\014\"" + - "\310\005\n\021TestReportMessage\022\026\n\ntest_suite\030\001 \001(" + - "\014B\002\030\001\022\014\n\004test\030\002 \001(\014\022+\n\ttest_type\030\003 \001(\0162\030" + - ".android.vts.VtsTestType\022:\n\013device_info\030" + - "\004 \003(\0132%.android.vts.AndroidDeviceInfoMes" + - "sage\0221\n\nbuild_info\030\005 \001(\0132\035.android.vts.A" + - "ndroidBuildInfo\022\030\n\020subscriber_email\030\006 \003(", - "\014\022+\n\thost_info\030\007 \001(\0132\030.android.vts.VtsHo" + - "stInfo\0225\n\ttest_case\030\013 \003(\0132\".android.vts." + - "TestCaseReportMessage\0226\n\tprofiling\030\025 \003(\013" + - "2#.android.vts.ProfilingReportMessage\0228\n" + - "\010systrace\030\026 \003(\0132\".android.vts.SystraceRe" + - "portMessageB\002\030\001\022\027\n\017start_timestamp\030e \001(\003" + - "\022\025\n\rend_timestamp\030f \001(\003\0224\n\010coverage\030g \003(" + - "\0132\".android.vts.CoverageReportMessage\022;\n" + - "\014api_coverage\030h \003(\0132%.android.vts.ApiCov" + - "erageReportMessage\022%\n\003log\030\351\007 \003(\0132\027.andro", - "id.vts.LogMessage\0227\n\rlink_resource\030\363\007 \003(" + - "\0132\037.android.vts.UrlResourceMessage\"\346\001\n\025T" + - "estPlanReportMessage\022\030\n\020test_module_name" + - "\030\013 \003(\t\022#\n\033test_module_start_timestamp\030\014 " + - "\003(\003\022\026\n\016test_plan_name\030\025 \001(\t\0227\n\016partner_r" + - "eport\030\037 \003(\0132\037.android.vts.UrlResourceMes" + - "sage\022=\n\016hal_api_report\030) \003(\0132%.android.v" + - "ts.ApiCoverageReportMessage\"\237\001\n\024Dashboar" + - "dPostMessage\022\024\n\014access_token\030\001 \001(\t\0223\n\013te" + - "st_report\030\002 \003(\0132\036.android.vts.TestReport", - "Message\022<\n\020test_plan_report\030\003 \003(\0132\".andr" + - "oid.vts.TestPlanReportMessage*\263\001\n\016TestCa" + - "seResult\022\022\n\016UNKNOWN_RESULT\020\000\022\031\n\025TEST_CAS" + - "E_RESULT_PASS\020\001\022\031\n\025TEST_CASE_RESULT_FAIL" + - "\020\002\022\031\n\025TEST_CASE_RESULT_SKIP\020\003\022\036\n\032TEST_CA" + - "SE_RESULT_EXCEPTION\020\004\022\034\n\030TEST_CASE_RESUL" + - "T_TIMEOUT\020\005*\234\001\n\013VtsTestType\022\030\n\024UNKNOWN_V" + - "TS_TESTTYPE\020\000\022\036\n\032VTS_HOST_DRIVEN_STRUCTU" + - "RAL\020\001\022\033\n\027VTS_HOST_DRIVEN_FUZZING\020\002\022\031\n\025VT" + - "S_TARGET_SIDE_GTEST\020\003\022\033\n\027VTS_TARGET_SIDE", - "_FUZZING\020\004*\243\001\n\032VtsProfilingRegressionMod" + - "e\022\033\n\027UNKNOWN_REGRESSION_MODE\020\000\022 \n\034VTS_RE" + - "GRESSION_MODE_DISABLED\020\001\022\"\n\036VTS_REGRESSI" + - "ON_MODE_INCREASING\020\002\022\"\n\036VTS_REGRESSION_M" + - "ODE_DECREASING\020\003*\244\001\n\020VtsProfilingType\022\036\n" + - "\032UNKNOWN_VTS_PROFILING_TYPE\020\000\022 \n\034VTS_PRO" + - "FILING_TYPE_TIMESTAMP\020\001\022%\n!VTS_PROFILING" + - "_TYPE_LABELED_VECTOR\020\002\022\'\n#VTS_PROFILING_" + - "TYPE_UNLABELED_VECTOR\020\003B+\n\025com.android.v" + - "ts.protoB\020VtsReportMessageP\000" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - internal_static_android_vts_AndroidDeviceInfoMessage_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_android_vts_AndroidDeviceInfoMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_AndroidDeviceInfoMessage_descriptor, - new java.lang.String[] { "ProductType", "ProductVariant", "BuildFlavor", "BuildId", "Branch", "BuildAlias", "ApiLevel", "AbiName", "AbiBitness", "Serial", }); - internal_static_android_vts_AndroidBuildInfo_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_android_vts_AndroidBuildInfo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_AndroidBuildInfo_descriptor, - new java.lang.String[] { "Id", "Name", "BuildType", "Branch", "BuildSummary", }); - internal_static_android_vts_VtsHostInfo_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_android_vts_VtsHostInfo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_VtsHostInfo_descriptor, - new java.lang.String[] { "Hostname", }); - internal_static_android_vts_TestCaseReportMessage_descriptor = - getDescriptor().getMessageTypes().get(3); - internal_static_android_vts_TestCaseReportMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_TestCaseReportMessage_descriptor, - new java.lang.String[] { "Name", "TestResult", "StartTimestamp", "EndTimestamp", "Coverage", "Profiling", "Systrace", "Log", }); - internal_static_android_vts_ProfilingReportMessage_descriptor = - getDescriptor().getMessageTypes().get(4); - internal_static_android_vts_ProfilingReportMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_ProfilingReportMessage_descriptor, - new java.lang.String[] { "Name", "Type", "RegressionMode", "StartTimestamp", "EndTimestamp", "Label", "Value", "XAxisLabel", "YAxisLabel", "Options", }); - internal_static_android_vts_SystraceReportMessage_descriptor = - getDescriptor().getMessageTypes().get(5); - internal_static_android_vts_SystraceReportMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_SystraceReportMessage_descriptor, - new java.lang.String[] { "ProcessName", "Html", "Url", }); - internal_static_android_vts_CoverageReportMessage_descriptor = - getDescriptor().getMessageTypes().get(6); - internal_static_android_vts_CoverageReportMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_CoverageReportMessage_descriptor, - new java.lang.String[] { "FilePath", "ProjectName", "Revision", "LineCoverageVector", "TotalLineCount", "CoveredLineCount", "DirPath", "FileName", "Html", }); - internal_static_android_vts_HalInterfaceMessage_descriptor = - getDescriptor().getMessageTypes().get(7); - internal_static_android_vts_HalInterfaceMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_HalInterfaceMessage_descriptor, - new java.lang.String[] { "HalPackageName", "HalVersionMajor", "HalVersionMinor", "HalInterfaceName", "HalReleaseLevel", }); - internal_static_android_vts_ApiCoverageReportMessage_descriptor = - getDescriptor().getMessageTypes().get(8); - internal_static_android_vts_ApiCoverageReportMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_ApiCoverageReportMessage_descriptor, - new java.lang.String[] { "HalInterface", "HalApi", "CoveredHalApi", }); - internal_static_android_vts_LogMessage_descriptor = - getDescriptor().getMessageTypes().get(9); - internal_static_android_vts_LogMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_LogMessage_descriptor, - new java.lang.String[] { "Url", "Name", "Content", }); - internal_static_android_vts_UrlResourceMessage_descriptor = - getDescriptor().getMessageTypes().get(10); - internal_static_android_vts_UrlResourceMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_UrlResourceMessage_descriptor, - new java.lang.String[] { "Url", "Name", "Content", }); - internal_static_android_vts_TestReportMessage_descriptor = - getDescriptor().getMessageTypes().get(11); - internal_static_android_vts_TestReportMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_TestReportMessage_descriptor, - new java.lang.String[] { "TestSuite", "Test", "TestType", "DeviceInfo", "BuildInfo", "SubscriberEmail", "HostInfo", "TestCase", "Profiling", "Systrace", "StartTimestamp", "EndTimestamp", "Coverage", "ApiCoverage", "Log", "LinkResource", }); - internal_static_android_vts_TestPlanReportMessage_descriptor = - getDescriptor().getMessageTypes().get(12); - internal_static_android_vts_TestPlanReportMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_TestPlanReportMessage_descriptor, - new java.lang.String[] { "TestModuleName", "TestModuleStartTimestamp", "TestPlanName", "PartnerReport", "HalApiReport", }); - internal_static_android_vts_DashboardPostMessage_descriptor = - getDescriptor().getMessageTypes().get(13); - internal_static_android_vts_DashboardPostMessage_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_android_vts_DashboardPostMessage_descriptor, - new java.lang.String[] { "AccessToken", "TestReport", "TestPlanReport", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/src/main/java/com/android/vts/servlet/BaseServlet.java b/src/main/java/com/android/vts/servlet/BaseServlet.java deleted file mode 100644 index 5319ee1..0000000 --- a/src/main/java/com/android/vts/servlet/BaseServlet.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.CoverageEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.android.vts.entity.UserEntity; -import com.android.vts.util.EmailHelper; -import com.android.vts.util.GcsHelper; -import com.google.appengine.api.users.User; -import com.google.appengine.api.users.UserService; -import com.google.appengine.api.users.UserServiceFactory; -import com.google.gson.Gson; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletConfig; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -public abstract class BaseServlet extends HttpServlet { - - protected final Logger logger = Logger.getLogger(getClass().getName()); - - protected String ERROR_MESSAGE_JSP = "WEB-INF/jsp/error_msg.jsp"; - - // Environment variables - protected static String GERRIT_URI; - protected static String GERRIT_SCOPE; - protected static String CLIENT_ID; - protected static String ANALYTICS_ID; - - protected static final String TREE_DEFAULT_PARAM = "treeDefault"; - - public enum PageType { - TOT("Test", "/"), - RELEASE("Release", "/show_release"), - COVERAGE_OVERVIEW("Coverage", "/show_coverage_overview"), - PROFILING_LIST("Profiling", "/show_profiling_list"), - TABLE("", "/show_table"), - TREE("", "/show_tree"), - GRAPH("Profiling", "/show_graph"), - COVERAGE("Coverage", "/show_coverage"), - PERFORMANCE_DIGEST("Performance Digest", "/show_performance_digest"), - PLAN_RELEASE("", "/show_plan_release"), - PLAN_RUN("Plan Run", "/show_plan_run"), - PROFILING_OVERVIEW("", "/show_profiling_overview"); - - public final String defaultName; - public final String defaultUrl; - - PageType(String defaultName, String defaultUrl) { - this.defaultName = defaultName; - this.defaultUrl = defaultUrl; - } - } - - public static class Page { - - private final PageType type; - private final String name; - private final String url; - - public Page(PageType type) { - this.type = type; - this.name = type.defaultName; - this.url = type.defaultUrl; - } - - public Page(PageType type, String name, String url) { - this.type = type; - this.name = type.defaultName + name; - this.url = type.defaultUrl + url; - } - - public Page(PageType type, String name, String url, Boolean withoutDefault) { - this.type = type; - this.name = name; - this.url = type.defaultUrl + url; - } - - public Page(PageType type, String url) { - this.type = type; - this.name = type.defaultName; - this.url = type.defaultUrl + url; - } - - public String getName() { - return name; - } - - public String getUrl() { - return url; - } - } - - public static final List<Page> navbarLinks; - - static { - List<Page> links = new ArrayList<>(); - links.add(new Page(PageType.TOT)); - links.add(new Page(PageType.RELEASE)); - links.add(new Page(PageType.COVERAGE_OVERVIEW)); - links.add(new Page(PageType.PROFILING_LIST)); - navbarLinks = links; - } - - public abstract PageType getNavParentType(); - - /** - * Get a list of URL/Display name pairs for the breadcrumb hierarchy. - * - * @param request The HttpServletRequest object for the page request. - * @return a list of Page entries. - */ - public abstract List<Page> getBreadcrumbLinks(HttpServletRequest request); - - /** System Configuration Property class */ - protected static Properties systemConfigProp = new Properties(); - - @Override - public void init(ServletConfig cfg) throws ServletException { - super.init(cfg); - - systemConfigProp = - Properties.class.cast(cfg.getServletContext().getAttribute("systemConfigProp")); - - GERRIT_URI = systemConfigProp.getProperty("gerrit.uri"); - GERRIT_SCOPE = systemConfigProp.getProperty("gerrit.scope"); - CLIENT_ID = systemConfigProp.getProperty("appengine.clientID"); - ANALYTICS_ID = systemConfigProp.getProperty("analytics.id"); - - CoverageEntity.setPropertyValues(systemConfigProp); - TestSuiteResultEntity.setPropertyValues(systemConfigProp); - EmailHelper.setPropertyValues(systemConfigProp); - GcsHelper.setGcsProjectId(systemConfigProp.getProperty("gcs.projectID")); - } - - @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - // If the user is logged out, allow them to log back in and return to the page. - // Set the logout URL to direct back to a login page that directs to the current request. - UserService userService = UserServiceFactory.getUserService(); - Optional<User> currentUser = Optional.ofNullable(userService.getCurrentUser()); - String currentUserEmail = - currentUser.isPresent() - ? currentUser.map(user -> user.getEmail().trim()).orElse("") - : ""; - String requestUri = request.getRequestURI(); - String requestArgs = request.getQueryString(); - String loginURI = userService.createLoginURL(requestUri + '?' + requestArgs); - String logoutURI = userService.createLogoutURL(loginURI); - if (currentUserEmail != "") { - - int activeIndex; - switch (getNavParentType()) { - case PROFILING_LIST: - activeIndex = 3; - break; - case COVERAGE_OVERVIEW: - activeIndex = 2; - break; - case RELEASE: - activeIndex = 1; - break; - default: - activeIndex = 0; - break; - } - if (request.getParameter(TREE_DEFAULT_PARAM) != null) { - HttpSession session = request.getSession(true); - boolean treeDefault = request.getParameter(TREE_DEFAULT_PARAM).equals("true"); - session.setAttribute(TREE_DEFAULT_PARAM, treeDefault); - } - - request.setAttribute("serverName", request.getServerName()); - request.setAttribute("logoutURL", logoutURI); - request.setAttribute("email", currentUserEmail); - request.setAttribute("analyticsID", new Gson().toJson(ANALYTICS_ID)); - request.setAttribute("breadcrumbLinks", getBreadcrumbLinks(request)); - request.setAttribute("navbarLinks", navbarLinks); - request.setAttribute("activeIndex", activeIndex); - response.setContentType("text/html"); - - if (currentUserEmail.endsWith("@google.com") - || UserEntity.getUserList().contains(currentUserEmail)) { - doGetHandler(request, response); - } else { - RequestDispatcher dispatcher = - request.getRequestDispatcher("WEB-INF/jsp/auth_error.jsp"); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : ", e); - } - } - } else { - response.sendRedirect(loginURI); - } - } - - /** - * Implementation of the doGet method to be executed by servlet subclasses. - * - * @param request The HttpServletRequest object. - * @param response The HttpServletResponse object. - */ - public abstract void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException; -} diff --git a/src/main/java/com/android/vts/servlet/DashboardMainServlet.java b/src/main/java/com/android/vts/servlet/DashboardMainServlet.java deleted file mode 100644 index 73a7287..0000000 --- a/src/main/java/com/android/vts/servlet/DashboardMainServlet.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestStatusEntity; -import com.android.vts.entity.UserFavoriteEntity; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.PropertyProjection; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.FilterOperator; -import com.google.appengine.api.datastore.Query.FilterPredicate; -import com.google.appengine.api.users.User; -import com.google.appengine.api.users.UserService; -import com.google.appengine.api.users.UserServiceFactory; -import com.google.gson.Gson; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.stream.Collectors; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Represents the servlet that is invoked on loading the first page of dashboard. */ -public class DashboardMainServlet extends BaseServlet { - private static final String DASHBOARD_MAIN_JSP = "WEB-INF/jsp/dashboard_main.jsp"; - private static final String NO_TESTS_ERROR = "No test results available."; - - @Override - public PageType getNavParentType() { - return PageType.TOT; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - return null; - } - - /** Helper class for displaying test entries on the main dashboard. */ - public class TestDisplay implements Comparable<TestDisplay> { - private final Key testKey; - private final int passCount; - private final int failCount; - private boolean muteNotifications; - private boolean isFavorite; - - /** - * Test display constructor. - * - * @param testKey The key of the test. - * @param passCount The number of tests passing. - * @param failCount The number of tests failing. - * @param muteNotifications The flag for user notification in case of test failure. - * @param isFavorite The flag for showing favorite mark on All Tests Tab page. - */ - public TestDisplay( - Key testKey, - int passCount, - int failCount, - boolean muteNotifications, - boolean isFavorite) { - this.testKey = testKey; - this.passCount = passCount; - this.failCount = failCount; - this.muteNotifications = muteNotifications; - this.isFavorite = isFavorite; - } - - /** - * Get the key of the test. - * - * @return The key of the test. - */ - public String getName() { - return this.testKey.getName(); - } - - /** - * Get the number of passing test cases. - * - * @return The number of passing test cases. - */ - public int getPassCount() { - return this.passCount; - } - - /** - * Get the number of failing test cases. - * - * @return The number of failing test cases. - */ - public int getFailCount() { - return this.failCount; - } - - /** - * Get the notification mute status. - * - * @return True if the subscriber has muted notifications, false otherwise. - */ - public boolean getMuteNotifications() { - return this.muteNotifications; - } - - /** Set the notification mute status. */ - public void setMuteNotifications(boolean muteNotifications) { - this.muteNotifications = muteNotifications; - } - - /** - * Get the favorate status. - * - * @return True if an user set favorate for the test, false otherwise. - */ - public boolean getIsFavorite() { - return this.isFavorite; - } - - /** Set the favorite status. */ - public void setIsFavorite(boolean isFavorite) { - this.isFavorite = isFavorite; - } - - @Override - public int compareTo(TestDisplay test) { - return this.testKey.getName().compareTo(test.getName()); - } - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - UserService userService = UserServiceFactory.getUserService(); - User currentUser = userService.getCurrentUser(); - RequestDispatcher dispatcher = null; - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - HttpSession session = request.getSession(true); - PageType referTo = PageType.TREE; - if (session.getAttribute("treeDefault") != null) { - boolean treeDefault = (boolean) session.getAttribute("treeDefault"); - if (!treeDefault) { - referTo = PageType.TABLE; - } - } - - List<TestDisplay> displayedTests = new ArrayList<>(); - List<Key> unprocessedTestKeys = new ArrayList<>(); - - Map<Key, TestDisplay> testMap = new HashMap<>(); // map from table key to TestDisplay - Map<String, String> subscriptionMap = new HashMap<>(); - - boolean showAll = request.getParameter("showAll") != null; - String error = null; - - List<String> allTestNames = TestEntity.getAllTestNames(); - - List<Key> favoriteKeyList = new ArrayList<Key>(); - Filter userFilter = - new FilterPredicate(UserFavoriteEntity.USER, FilterOperator.EQUAL, currentUser); - Query filterQuery = new Query(UserFavoriteEntity.KIND).setFilter(userFilter); - Iterable<Entity> favoriteIter = datastore.prepare(filterQuery).asIterable(); - favoriteIter.forEach( - fe -> { - Key testKey = UserFavoriteEntity.fromEntity(fe).testKey; - favoriteKeyList.add(testKey); - subscriptionMap.put(testKey.getName(), KeyFactory.keyToString(fe.getKey())); - }); - - Query query = - new Query(TestStatusEntity.KIND) - .addProjection( - new PropertyProjection(TestStatusEntity.PASS_COUNT, Long.class)) - .addProjection( - new PropertyProjection(TestStatusEntity.FAIL_COUNT, Long.class)); - for (Entity status : datastore.prepare(query).asIterable()) { - TestStatusEntity statusEntity = TestStatusEntity.fromEntity(status); - if (statusEntity == null) continue; - Key testKey = KeyFactory.createKey(TestEntity.KIND, statusEntity.getTestName()); - boolean isFavorite = favoriteKeyList.contains(testKey); - TestDisplay display = new TestDisplay(testKey, -1, -1, false, isFavorite); - if (!unprocessedTestKeys.contains(testKey)) { - display = - new TestDisplay( - testKey, - statusEntity.getPassCount(), - statusEntity.getFailCount(), - false, - isFavorite); - } - testMap.put(testKey, display); - } - - if (testMap.size() == 0) { - error = NO_TESTS_ERROR; - } - - if (showAll) { - for (Key testKey : testMap.keySet()) { - displayedTests.add(testMap.get(testKey)); - } - } else { - if (testMap.size() > 0) { - for (Entity favoriteEntity : favoriteIter) { - UserFavoriteEntity favorite = UserFavoriteEntity.fromEntity(favoriteEntity); - Key testKey = favorite.testKey; - if (!testMap.containsKey(testKey)) { - continue; - } - TestDisplay display = testMap.get(testKey); - display.setMuteNotifications(favorite.muteNotifications); - displayedTests.add(display); - } - } - } - displayedTests.sort(Comparator.naturalOrder()); - - response.setStatus(HttpServletResponse.SC_OK); - request.setAttribute("allTestsJson", new Gson().toJson(allTestNames)); - request.setAttribute("subscriptionMapJson", new Gson().toJson(subscriptionMap)); - request.setAttribute("testNames", displayedTests); - request.setAttribute("showAll", showAll); - request.setAttribute("error", error); - request.setAttribute("resultsUrl", referTo.defaultUrl); - dispatcher = request.getRequestDispatcher(DASHBOARD_MAIN_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java b/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java deleted file mode 100644 index 210c980..0000000 --- a/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java +++ /dev/null @@ -1,432 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.CodeCoverageEntity; -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestCoverageStatusEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; - -import com.android.vts.proto.VtsReportMessage; -import com.android.vts.util.FilterUtil; -import com.google.cloud.datastore.Datastore; -import com.google.cloud.datastore.DatastoreOptions; -import com.google.cloud.datastore.PathElement; -import com.google.cloud.datastore.StructuredQuery.CompositeFilter; -import com.google.cloud.datastore.StructuredQuery.Filter; -import com.google.cloud.datastore.StructuredQuery.PropertyFilter; -import com.google.gson.Gson; -import com.google.visualization.datasource.DataSourceHelper; -import com.google.visualization.datasource.DataSourceRequest; -import com.google.visualization.datasource.base.DataSourceException; -import com.google.visualization.datasource.base.ReasonType; -import com.google.visualization.datasource.base.ResponseStatus; -import com.google.visualization.datasource.base.StatusType; -import com.google.visualization.datasource.base.TypeMismatchException; -import com.google.visualization.datasource.datatable.ColumnDescription; -import com.google.visualization.datasource.datatable.DataTable; -import com.google.visualization.datasource.datatable.TableRow; -import com.google.visualization.datasource.datatable.value.DateTimeValue; -import com.google.visualization.datasource.datatable.value.NumberValue; -import com.google.visualization.datasource.datatable.value.ValueType; -import com.googlecode.objectify.Key; -import com.ibm.icu.util.GregorianCalendar; -import com.ibm.icu.util.TimeZone; -import java.io.IOException; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.Predicate; -import java.util.logging.Level; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** Represents the servlet that is invoked on loading the coverage overview page. */ -public class ShowCoverageOverviewServlet extends BaseServlet { - - @Override - public PageType getNavParentType() { - return PageType.COVERAGE_OVERVIEW; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - return null; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - - String pageType = - request.getParameter("pageType") == null - ? "html" - : request.getParameter("pageType"); - - RequestDispatcher dispatcher; - if (pageType.equalsIgnoreCase("html")) { - dispatcher = this.getCoverageDispatcher(request, response); - try { - request.setAttribute("pageType", pageType); - response.setStatus(HttpServletResponse.SC_OK); - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : ", e); - } - } else { - - String testName = request.getParameter("testName"); - - DataTable data = getCoverageDataTable(testName); - DataSourceRequest dsRequest = null; - - try { - // Extract the datasource request parameters. - dsRequest = new DataSourceRequest(request); - - // NOTE: If you want to work in restricted mode, which means that only - // requests from the same domain can access the data source, uncomment the following - // call. - // - // DataSourceHelper.verifyAccessApproved(dsRequest); - - // Apply the query to the data table. - DataTable newData = - DataSourceHelper.applyQuery( - dsRequest.getQuery(), data, dsRequest.getUserLocale()); - - // Set the response. - DataSourceHelper.setServletResponse(newData, dsRequest, response); - } catch (RuntimeException rte) { - logger.log(Level.SEVERE, "A runtime exception has occured", rte); - ResponseStatus status = - new ResponseStatus( - StatusType.ERROR, ReasonType.INTERNAL_ERROR, rte.getMessage()); - if (dsRequest == null) { - dsRequest = DataSourceRequest.getDefaultDataSourceRequest(request); - } - DataSourceHelper.setServletErrorResponse(status, dsRequest, response); - } catch (DataSourceException e) { - if (dsRequest != null) { - DataSourceHelper.setServletErrorResponse(e, dsRequest, response); - } else { - DataSourceHelper.setServletErrorResponse(e, request, response); - } - } - } - } - - private List<Key<TestRunEntity>> getTestRunEntityKeyList( - List<TestCoverageStatusEntity> testCoverageStatusEntityList) { - return testCoverageStatusEntityList.stream() - .map( - testCoverageStatusEntity -> { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create( - TestEntity.class, - testCoverageStatusEntity.getTestName()); - return com.googlecode.objectify.Key.create( - testKey, - TestRunEntity.class, - testCoverageStatusEntity.getUpdatedTimestamp()); - }) - .collect(Collectors.toList()); - } - - private Predicate<DeviceInfoEntity> isBranchAndDevice(String branch, String device) { - return d -> d.getBranch().equals(branch) && d.getBuildFlavor().equals(device); - } - - private Predicate<DeviceInfoEntity> isBranch(String branch) { - return d -> d.getBranch().equals(branch); - } - - private Predicate<DeviceInfoEntity> isDevice(String device) { - return d -> d.getBuildFlavor().equals(device); - } - - private RequestDispatcher getCoverageDispatcher( - HttpServletRequest request, HttpServletResponse response) { - - String COVERAGE_OVERVIEW_JSP = "WEB-INF/jsp/show_coverage_overview.jsp"; - - RequestDispatcher dispatcher = null; - boolean unfiltered = request.getParameter("unfiltered") != null; - boolean showPresubmit = request.getParameter("showPresubmit") != null; - boolean showPostsubmit = request.getParameter("showPostsubmit") != null; - - // If no params are specified, set to default of postsubmit-only. - if (!(showPresubmit || showPostsubmit)) { - showPostsubmit = true; - } - - // If unfiltered, set showPre- and Post-submit to true for accurate UI. - if (unfiltered) { - showPostsubmit = true; - showPresubmit = true; - } - - // Add test names to list - List<String> resultNames = - Arrays.stream(VtsReportMessage.TestCaseResult.values()) - .map(testCaseResult -> testCaseResult.name()) - .collect(Collectors.toList()); - - Map<String, String[]> parameterMap = request.getParameterMap(); - - List<TestCoverageStatusEntity> testCoverageStatusEntityList = - TestCoverageStatusEntity.getAllTestCoverage(); - - List<com.googlecode.objectify.Key<TestRunEntity>> testRunEntityKeyList = new ArrayList<>(); - - if (Objects.nonNull(parameterMap.get("branch")) - || Objects.nonNull(parameterMap.get("device"))) { - List<com.googlecode.objectify.Key<DeviceInfoEntity>> deviceInfoEntityKeyList = - TestCoverageStatusEntity.getDeviceInfoEntityKeyList( - testCoverageStatusEntityList); - - Collection<DeviceInfoEntity> deviceInfoEntityMap = - ofy().load().keys(() -> deviceInfoEntityKeyList.iterator()).values(); - - Stream<DeviceInfoEntity> deviceInfoEntityStream = Stream.empty(); - if (Objects.nonNull(parameterMap.get("branch")) - && Objects.nonNull(parameterMap.get("device"))) { - String branch = parameterMap.get("branch")[0]; - String device = parameterMap.get("device")[0]; - deviceInfoEntityStream = - deviceInfoEntityMap.stream().filter(isBranchAndDevice(branch, device)); - } else if (Objects.nonNull(parameterMap.get("branch"))) { - String branch = parameterMap.get("branch")[0]; - deviceInfoEntityStream = deviceInfoEntityMap.stream().filter(isBranch(branch)); - } else if (Objects.nonNull(parameterMap.get("device"))) { - String device = parameterMap.get("device")[0]; - deviceInfoEntityStream = deviceInfoEntityMap.stream().filter(isDevice(device)); - } else { - logger.log(Level.WARNING, "unmet search condition!"); - } - testRunEntityKeyList = - deviceInfoEntityStream - .map( - deviceInfoEntity -> { - com.googlecode.objectify.Key testKey = - com.googlecode.objectify.Key.create( - TestEntity.class, - deviceInfoEntity - .getParent() - .getParent() - .getName()); - return com.googlecode.objectify.Key.create( - testKey, - TestRunEntity.class, - deviceInfoEntity.getParent().getId()); - }) - .collect(Collectors.toList()); - logger.log(Level.INFO, "testRunEntityKeyList size => " + testRunEntityKeyList.size()); - } else { - testRunEntityKeyList = this.getTestRunEntityKeyList(testCoverageStatusEntityList); - } - Iterator<Key<TestRunEntity>> testRunEntityKeyIterator = testRunEntityKeyList.iterator(); - - Map<Key<TestRunEntity>, TestRunEntity> keyTestRunEntityMap = - ofy().load().keys(() -> testRunEntityKeyIterator); - - List<com.googlecode.objectify.Key<CodeCoverageEntity>> codeCoverageEntityKeyList = - new ArrayList<>(); - Map<Long, TestRunEntity> testRunEntityMap = new HashMap<>(); - for (Map.Entry<com.googlecode.objectify.Key<TestRunEntity>, TestRunEntity> entry : - keyTestRunEntityMap.entrySet()) { - com.googlecode.objectify.Key codeCoverageEntityKey = - com.googlecode.objectify.Key.create( - entry.getKey(), CodeCoverageEntity.class, entry.getValue().getId()); - codeCoverageEntityKeyList.add(codeCoverageEntityKey); - testRunEntityMap.put(entry.getValue().getId(), entry.getValue()); - } - - Map<com.googlecode.objectify.Key<CodeCoverageEntity>, CodeCoverageEntity> - keyCodeCoverageEntityMap = - ofy().load().keys(() -> codeCoverageEntityKeyList.iterator()); - - Map<Long, CodeCoverageEntity> codeCoverageEntityMap = new HashMap<>(); - for (Map.Entry<com.googlecode.objectify.Key<CodeCoverageEntity>, CodeCoverageEntity> entry : - keyCodeCoverageEntityMap.entrySet()) { - codeCoverageEntityMap.put(entry.getValue().getId(), entry.getValue()); - } - - int coveredLines = 0; - int uncoveredLines = 0; - int passCount = 0; - int failCount = 0; - for (Map.Entry<Long, CodeCoverageEntity> entry : codeCoverageEntityMap.entrySet()) { - TestRunEntity testRunEntity = testRunEntityMap.get(entry.getKey()); - - CodeCoverageEntity codeCoverageEntity = entry.getValue(); - - coveredLines += codeCoverageEntity.getCoveredLineCount(); - uncoveredLines += - codeCoverageEntity.getTotalLineCount() - - codeCoverageEntity.getCoveredLineCount(); - passCount += testRunEntity.getPassCount(); - failCount += testRunEntity.getFailCount(); - } - - FilterUtil.setAttributes(request, parameterMap); - - int[] testStats = new int[VtsReportMessage.TestCaseResult.values().length]; - testStats[VtsReportMessage.TestCaseResult.TEST_CASE_RESULT_PASS.getNumber()] = passCount; - testStats[VtsReportMessage.TestCaseResult.TEST_CASE_RESULT_FAIL.getNumber()] = failCount; - - response.setStatus(HttpServletResponse.SC_OK); - request.setAttribute("resultNames", resultNames); - request.setAttribute("resultNamesJson", new Gson().toJson(resultNames)); - request.setAttribute("testRunEntityList", testRunEntityMap.values()); - request.setAttribute("codeCoverageEntityMap", codeCoverageEntityMap); - request.setAttribute("coveredLines", new Gson().toJson(coveredLines)); - request.setAttribute("uncoveredLines", new Gson().toJson(uncoveredLines)); - request.setAttribute("testStats", new Gson().toJson(testStats)); - - request.setAttribute("unfiltered", unfiltered); - request.setAttribute("showPresubmit", showPresubmit); - request.setAttribute("showPostsubmit", showPostsubmit); - - request.setAttribute( - "deviceOptions", - TestCoverageStatusEntity.getDeviceSet(testCoverageStatusEntityList)); - request.setAttribute( - "branchOptions", - TestCoverageStatusEntity.getBranchSet(testCoverageStatusEntityList)); - dispatcher = request.getRequestDispatcher(COVERAGE_OVERVIEW_JSP); - return dispatcher; - } - - private DataTable getCoverageDataTable(String testName) { - - Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); - - DataTable dataTable = new DataTable(); - ArrayList<ColumnDescription> cd = new ArrayList<>(); - ColumnDescription startDate = - new ColumnDescription("startDate", ValueType.DATETIME, "Date"); - startDate.setPattern("yyyy-MM-dd"); - cd.add(startDate); - cd.add( - new ColumnDescription( - "coveredLineCount", ValueType.NUMBER, "Covered Source Code Line Count")); - cd.add( - new ColumnDescription( - "totalLineCount", ValueType.NUMBER, "Total Source Code Line Count")); - cd.add(new ColumnDescription("percentage", ValueType.NUMBER, "Coverage Ratio (%)")); - - dataTable.addColumns(cd); - - Calendar cal = Calendar.getInstance(); - cal.add(Calendar.MONTH, -6); - Long startTime = cal.getTime().getTime() * 1000; - Long endTime = Calendar.getInstance().getTime().getTime() * 1000; - - com.google.cloud.datastore.Key startKey = - datastore - .newKeyFactory() - .setKind(TestRunEntity.KIND) - .addAncestors( - PathElement.of(TestEntity.KIND, testName), - PathElement.of(TestRunEntity.KIND, startTime)) - .newKey(startTime); - - com.google.cloud.datastore.Key endKey = - datastore - .newKeyFactory() - .setKind(TestRunEntity.KIND) - .addAncestors( - PathElement.of(TestEntity.KIND, testName), - PathElement.of(TestRunEntity.KIND, endTime)) - .newKey(endTime); - - Filter codeCoverageFilter = - CompositeFilter.and( - PropertyFilter.lt("__key__", endKey), - PropertyFilter.gt("__key__", startKey)); - - List<CodeCoverageEntity> codeCoverageEntityList = - ofy().load() - .type(CodeCoverageEntity.class) - .filter(codeCoverageFilter) - .limit(10) - .list(); - - DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd"); - Map<String, List<CodeCoverageEntity>> codeCoverageEntityListMap = - codeCoverageEntityList - .stream() - .collect( - Collectors.groupingBy( - v -> dateTimeFormatter.print(v.getId() / 1000))); - - codeCoverageEntityListMap.forEach( - (key, entityList) -> { - GregorianCalendar gCal = new GregorianCalendar(); - gCal.setTimeZone(TimeZone.getTimeZone("GMT")); - gCal.setTimeInMillis(entityList.get(0).getId() / 1000); - - Long sumCoveredLine = - entityList.stream().mapToLong(val -> val.getCoveredLineCount()).sum(); - Long sumTotalLine = - entityList.stream().mapToLong(val -> val.getTotalLineCount()).sum(); - float percentage = 0; - if (sumTotalLine > 0) { - BigDecimal coveredLineNum = new BigDecimal(sumCoveredLine); - BigDecimal totalLineNum = new BigDecimal(sumTotalLine); - BigDecimal totalPercent = new BigDecimal(100); - percentage = - coveredLineNum - .multiply(totalPercent) - .divide(totalLineNum, 2, RoundingMode.HALF_DOWN) - .floatValue(); - } - - TableRow tableRow = new TableRow(); - tableRow.addCell(new DateTimeValue(gCal)); - tableRow.addCell(new NumberValue(sumCoveredLine)); - tableRow.addCell(new NumberValue(sumTotalLine)); - tableRow.addCell(new NumberValue(percentage)); - try { - dataTable.addRow(tableRow); - } catch (TypeMismatchException e) { - logger.log(Level.WARNING, "Invalid type! "); - } - }); - - return dataTable; - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowCoverageServlet.java b/src/main/java/com/android/vts/servlet/ShowCoverageServlet.java deleted file mode 100644 index 08e5db6..0000000 --- a/src/main/java/com/android/vts/servlet/ShowCoverageServlet.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -import com.android.vts.entity.CoverageEntity; -import com.android.vts.entity.RoleEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.entity.UserEntity; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.gson.Gson; -import com.googlecode.objectify.Ref; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.logging.Level; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Servlet for handling requests to show code coverage. - */ -public class ShowCoverageServlet extends BaseServlet { - - private static final String COVERAGE_JSP = "WEB-INF/jsp/show_coverage.jsp"; - private static final String TREE_JSP = "WEB-INF/jsp/show_tree.jsp"; - - @Override - public PageType getNavParentType() { - return PageType.TOT; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String testName = request.getParameter("testName"); - links.add(new Page(PageType.TABLE, testName, "?testName=" + testName)); - - String startTime = request.getParameter("startTime"); - links.add(new Page(PageType.COVERAGE, "?testName=" + testName + "&startTime=" + startTime)); - return links; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - RequestDispatcher dispatcher = null; - - String test = request.getParameter("testName"); - String timeString = request.getParameter("startTime"); - - Boolean isModerator = false; - String currentUserEmail = request.getAttribute("email").toString(); - Optional<UserEntity> userEntityOptional = Optional - .ofNullable(UserEntity.getUser(currentUserEmail)); - if (userEntityOptional.isPresent()) { - Ref refRole = Ref.create(RoleEntity.getRole("coverage-moderator")); - isModerator = userEntityOptional.get().getRoles().contains(refRole); - } - - // Process the time key requested - long time = -1; - try { - time = Long.parseLong(timeString); - } catch (NumberFormatException e) { - request.setAttribute("testName", test); - dispatcher = request.getRequestDispatcher(TREE_JSP); - return; - } - - com.googlecode.objectify.Key testKey = com.googlecode.objectify.Key - .create(TestEntity.class, test); - com.googlecode.objectify.Key testRunKey = com.googlecode.objectify.Key - .create(testKey, TestRunEntity.class, time); - - List<CoverageEntity> coverageEntityList = ofy().load().type(CoverageEntity.class) - .ancestor(testRunKey).list(); - - Collections.sort(coverageEntityList, CoverageEntity.isIgnoredComparator); - - request.setAttribute("isModerator", isModerator); - request.setAttribute("testName", request.getParameter("testName")); - request.setAttribute("gerritURI", new Gson().toJson(GERRIT_URI)); - request.setAttribute("gerritScope", new Gson().toJson(GERRIT_SCOPE)); - request.setAttribute("clientId", new Gson().toJson(CLIENT_ID)); - request.setAttribute("startTime", request.getParameter("startTime")); - request.setAttribute("coverageEntityList", coverageEntityList); - - dispatcher = request.getRequestDispatcher(COVERAGE_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : ", e); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java b/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java deleted file mode 100644 index ad5e871..0000000 --- a/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.util.GcsHelper; -import com.google.appengine.api.memcache.ErrorHandlers; -import com.google.appengine.api.memcache.MemcacheService; -import com.google.appengine.api.memcache.MemcacheServiceFactory; -import com.google.auth.oauth2.ServiceAccountCredentials; -import com.google.cloud.storage.Blob; -import com.google.cloud.storage.Bucket; -import com.google.cloud.storage.Storage; -import com.google.cloud.storage.Storage.BlobListOption; -import com.google.cloud.storage.StorageOptions; -import com.google.gson.Gson; -import org.apache.commons.io.IOUtils; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.nio.file.Path; -import java.nio.file.Paths; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.logging.Level; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - -/** - * A GCS log servlet read log zip file from Google Cloud Storage bucket and show the content in it - * from the zip file by unarchiving it - */ -@SuppressWarnings("serial") -public class ShowGcsLogServlet extends BaseServlet { - - private static final String GCS_LOG_JSP = "WEB-INF/jsp/show_gcs_log.jsp"; - - /** Google Cloud Storage project's key file to access the storage */ - private static String GCS_KEY_FILE; - /** Google Cloud Storage project's default bucket name for vtslab test result files */ - private static String GCS_BUCKET_NAME; - /** Google Cloud Storage project's default bucket name for vtslab infra log files */ - private static String GCS_INFRA_LOG_BUCKET_NAME; - - /** - * This is the key file to access vtslab-gcs project. It will allow the dashboard to have a full - * control of the bucket. - */ - private InputStream keyFileInputStream; - - /** This is the instance of java google storage library */ - private Storage storage; - - /** This is the instance of App Engine memcache service java library */ - private MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService(); - - /** GCS Test Report Bucket instance */ - private Bucket vtsReportBucket; - - /** GCS Infra Log Bucket instance */ - private Bucket vtsInfraLogBucket; - - @Override - public void init(ServletConfig cfg) throws ServletException { - super.init(cfg); - - GCS_KEY_FILE = systemConfigProp.getProperty("gcs.keyFile"); - GCS_BUCKET_NAME = systemConfigProp.getProperty("gcs.bucketName"); - GCS_INFRA_LOG_BUCKET_NAME = systemConfigProp.getProperty("gcs.infraLogBucketName"); - - String keyFilePath = "keys/" + GCS_KEY_FILE; - - byte[] keyFileByteArray = new byte[0]; - try { - keyFileByteArray = - IOUtils.toByteArray( - this.getClass().getClassLoader().getResourceAsStream(keyFilePath)); - } catch (IOException e) { - e.printStackTrace(); - } - this.keyFileInputStream = new ByteArrayInputStream(keyFileByteArray); - InputStream vtsReportInputStream = new ByteArrayInputStream(keyFileByteArray); - InputStream vtsInfraInputStream = new ByteArrayInputStream(keyFileByteArray); - - Optional<Storage> optionalVtsReportStorage = GcsHelper.getStorage(vtsReportInputStream); - if (optionalVtsReportStorage.isPresent()) { - this.storage = optionalVtsReportStorage.get(); - this.vtsReportBucket = storage.get(GCS_BUCKET_NAME); - } else { - logger.log(Level.SEVERE, "Error on getting storage instance!"); - throw new ServletException("Creating storage instance exception!"); - } - - Optional<Storage> optionalVtsInfraStorage = GcsHelper.getStorage(vtsInfraInputStream); - if (optionalVtsInfraStorage.isPresent()) { - this.storage = optionalVtsInfraStorage.get(); - this.vtsInfraLogBucket = storage.get(GCS_INFRA_LOG_BUCKET_NAME); - } else { - logger.log(Level.SEVERE, "Error on getting storage instance!"); - throw new ServletException("Creating storage instance exception!"); - } - syncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO)); - } - - @Override - public PageType getNavParentType() { - return PageType.TOT; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - return null; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - if (keyFileInputStream == null) { - request.setAttribute("error_title", "GCS Key file Error"); - request.setAttribute("error_message", "The GCS Key file is not existed!"); - RequestDispatcher dispatcher = request.getRequestDispatcher(ERROR_MESSAGE_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } else { - String pathInfo = request.getPathInfo(); - if (Objects.nonNull(pathInfo)) { - if (pathInfo.equalsIgnoreCase("/download")) { - downloadHandler(request, response); - } else { - logger.log(Level.INFO, "Path Info => " + pathInfo); - logger.log(Level.WARNING, "Unknown path access!"); - } - } else { - defaultHandler(request, response); - } - } - } - - private void downloadHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - String file = request.getParameter("file") == null ? "/" : request.getParameter("file"); - Path filePathInfo = Paths.get(file); - - Blob blobFile = vtsInfraLogBucket.get(filePathInfo.toString()); - - if (blobFile.exists()) { - response.setContentType("application/octet-stream"); - response.setContentLength(blobFile.getSize().intValue()); - response.setHeader( - "Content-Disposition", - "attachment; filename=\"" + filePathInfo.getFileName() + "\""); - - response.getOutputStream().write(blobFile.getContent()); - } else { - request.setAttribute("error_title", "Infra Log File Not Found"); - request.setAttribute("error_message", "Please contact the administrator!"); - RequestDispatcher dispatcher = request.getRequestDispatcher(ERROR_MESSAGE_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } - } - - private void defaultHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - - String action = - request.getParameter("action") == null ? "read" : request.getParameter("action"); - String path = request.getParameter("path") == null ? "/" : request.getParameter("path"); - String entry = request.getParameter("entry") == null ? "" : request.getParameter("entry"); - Path pathInfo = Paths.get(path); - - List<String> dirList = new ArrayList<>(); - List<String> fileList = new ArrayList<>(); - List<String> entryList = new ArrayList<>(); - Map<String, Object> resultMap = new HashMap<>(); - String entryContent = ""; - - if (pathInfo.toString().endsWith(".zip")) { - - Blob blobFile = (Blob) this.syncCache.get(path.toString()); - if (blobFile == null) { - blobFile = vtsReportBucket.get(path); - this.syncCache.put(path.toString(), blobFile); - } - - if (action.equalsIgnoreCase("read")) { - InputStream blobInputStream = new ByteArrayInputStream(blobFile.getContent()); - ZipInputStream zipInputStream = new ZipInputStream(blobInputStream); - - ZipEntry zipEntry; - while ((zipEntry = zipInputStream.getNextEntry()) != null) { - if (zipEntry.isDirectory()) { - - } else { - if (entry.length() > 0) { - logger.log(Level.INFO, "param entry => " + entry); - if (zipEntry.getName().equals(entry)) { - logger.log(Level.INFO, "matched !!!! " + zipEntry.getName()); - entryContent = - IOUtils.toString( - zipInputStream, StandardCharsets.UTF_8.name()); - } - } else { - entryList.add(zipEntry.getName()); - } - } - } - resultMap.put("entryList", entryList); - resultMap.put("entryContent", entryContent); - - String json = new Gson().toJson(resultMap); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(json); - } else { - response.setContentType("application/octet-stream"); - response.setContentLength(blobFile.getSize().intValue()); - response.setHeader( - "Content-Disposition", - "attachment; filename=\"" + pathInfo.getFileName() + "\""); - - response.getOutputStream().write(blobFile.getContent()); - } - - } else { - - logger.log(Level.INFO, "path info => " + pathInfo); - logger.log(Level.INFO, "path name count => " + pathInfo.getNameCount()); - - BlobListOption[] listOptions; - if (pathInfo.getNameCount() == 0) { - listOptions = new BlobListOption[] {BlobListOption.currentDirectory()}; - } else { - String prefixPathString = path.endsWith("/") ? path : path.concat("/"); - if (pathInfo.getNameCount() <= 1) { - dirList.add("/"); - } else { - dirList.add(getParentDirPath(prefixPathString)); - } - - listOptions = - new BlobListOption[] { - BlobListOption.currentDirectory(), - BlobListOption.prefix(prefixPathString) - }; - } - - 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); - if (blob.isDirectory()) { - logger.log(Level.INFO, "directory name => " + blob.getName()); - dirList.add(blob.getName()); - } else { - logger.log(Level.INFO, "file name => " + blob.getName()); - fileList.add(Paths.get(blob.getName()).getFileName().toString()); - } - } - - response.setStatus(HttpServletResponse.SC_OK); - request.setAttribute("entryList", entryList); - request.setAttribute("dirList", dirList); - request.setAttribute("fileList", fileList); - request.setAttribute("path", path); - RequestDispatcher dispatcher = request.getRequestDispatcher(GCS_LOG_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } - } - - private String getParentDirPath(String fileOrDirPath) { - boolean endsWithSlashCheck = fileOrDirPath.endsWith(File.separator); - return fileOrDirPath.substring( - 0, - fileOrDirPath.lastIndexOf( - File.separatorChar, - endsWithSlashCheck - ? fileOrDirPath.length() - 2 - : fileOrDirPath.length() - 1)); - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowGraphServlet.java b/src/main/java/com/android/vts/servlet/ShowGraphServlet.java deleted file mode 100644 index 22b7098..0000000 --- a/src/main/java/com/android/vts/servlet/ShowGraphServlet.java +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.Graph; -import com.android.vts.util.GraphSerializer; -import com.android.vts.util.Histogram; -import com.android.vts.util.LineGraph; -import com.android.vts.util.PerformanceUtil; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.apache.commons.lang.StringUtils; - -/** Servlet for handling requests to load graphs. */ -public class ShowGraphServlet extends BaseServlet { - private static final String GRAPH_JSP = "WEB-INF/jsp/show_graph.jsp"; - private static final long DEFAULT_FILTER_OPTION = -1; - - private static final String HIDL_HAL_OPTION = "hidl_hal_mode"; - private static final String[] splitKeysArray = new String[] {HIDL_HAL_OPTION}; - private static final Set<String> splitKeySet = new HashSet<>(Arrays.asList(splitKeysArray)); - private static final String PROFILING_DATA_ALERT = "No profiling data was found."; - - @Override - public PageType getNavParentType() { - return PageType.TOT; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String testName = request.getParameter("testName"); - links.add(new Page(PageType.TABLE, testName, "?testName=" + testName)); - - String profilingPointName = request.getParameter("profilingPoint"); - links.add( - new Page( - PageType.GRAPH, - "?testName=" + testName + "&profilingPoint=" + profilingPointName)); - return links; - } - - /** - * Process a profiling report message and add it to the map of graphs. - * - * @param profilingRun The Entity of a profiling point run to process. - * @param idString The ID derived from the test run to identify the profiling report. - * @param graphMap A map from graph name to Graph object. - */ - private static void processProfilingRun( - Entity profilingRun, String idString, Map<String, Graph> graphMap) { - ProfilingPointRunEntity pt = ProfilingPointRunEntity.fromEntity(profilingRun); - if (pt == null) return; - String name = PerformanceUtil.getOptionAlias(pt, splitKeySet); - Graph g = null; - if (pt.getLabels() != null && pt.getLabels().size() == pt.getValues().size()) { - g = new LineGraph(name); - } else if (pt.getLabels() == null && pt.getValues().size() > 0) { - g = new Histogram(name); - } else { - return; - } - if (!graphMap.containsKey(name)) { - graphMap.put(name, g); - } - graphMap.get(name).addData(idString, pt); - } - - /** - * Get a summary string describing the devices in the test run. - * - * @param devices The list of device descriptors for a particular test run. - * @return A string describing the devices in the test run. - */ - private static String getDeviceSummary(List<DeviceInfoEntity> devices) { - if (devices == null) return null; - List<String> buildInfos = new ArrayList<>(); - for (DeviceInfoEntity device : devices) { - buildInfos.add(device.getProduct() + " (" + device.getBuildId() + ")"); - } - return StringUtils.join(buildInfos, ", "); - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - RequestDispatcher dispatcher = null; - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - String testName = request.getParameter("testName"); - String profilingPointName = request.getParameter("profilingPoint"); - String selectedDevice = request.getParameter("device"); - Long endTime = null; - if (request.getParameter("endTime") != null) { - String time = request.getParameter("endTime"); - try { - endTime = Long.parseLong(time); - } catch (NumberFormatException e) { - } - } - if (endTime == null) { - endTime = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - } - Long startTime = endTime - TimeUnit.DAYS.toMicros(1); - - // Set of device names - List<String> devices = DatastoreHelper.getAllBuildFlavors(); - if (!devices.contains(selectedDevice)) selectedDevice = null; - - Map<String, Graph> graphMap = new HashMap<>(); - - // Create a query for test runs matching the time window filter - Key parentKey = KeyFactory.createKey(TestEntity.KIND, testName); - Filter timeFilter = - FilterUtil.getTimeFilter(parentKey, TestRunEntity.KIND, startTime, endTime); - Query testRunQuery = - new Query(TestRunEntity.KIND) - .setAncestor(parentKey) - .setFilter(timeFilter) - .setKeysOnly(); - - // Process the test runs in the query - List<Key> gets = new ArrayList<>(); - for (Entity testRun : - datastore - .prepare(testRunQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())) { - gets.add( - KeyFactory.createKey( - testRun.getKey(), ProfilingPointRunEntity.KIND, profilingPointName)); - } - Map<Key, Entity> profilingPoints = datastore.get(gets); - Map<Key, Entity> testRunProfiling = new HashMap<>(); - for (Key key : profilingPoints.keySet()) { - testRunProfiling.put(key.getParent(), profilingPoints.get(key)); - } - - Filter deviceFilter = - FilterUtil.getDeviceTimeFilter(parentKey, TestRunEntity.KIND, startTime, endTime); - if (selectedDevice != null) { - deviceFilter = - Query.CompositeFilterOperator.and( - deviceFilter, - new Query.FilterPredicate( - DeviceInfoEntity.BUILD_FLAVOR, - Query.FilterOperator.EQUAL, - selectedDevice)); - } - Query deviceQuery = - new Query(DeviceInfoEntity.KIND) - .setAncestor(parentKey) - .setFilter(deviceFilter) - .setKeysOnly(); - gets = new ArrayList<>(); - for (Entity device : - datastore.prepare(deviceQuery).asIterable(DatastoreHelper.getLargeBatchOptions())) { - if (testRunProfiling.containsKey(device.getParent())) { - gets.add(device.getKey()); - } - } - - Map<Key, Entity> deviceInfos = datastore.get(gets); - Map<Key, List<DeviceInfoEntity>> testRunDevices = new HashMap<>(); - for (Key deviceKey : deviceInfos.keySet()) { - if (!testRunDevices.containsKey(deviceKey.getParent())) { - testRunDevices.put(deviceKey.getParent(), new ArrayList<DeviceInfoEntity>()); - } - DeviceInfoEntity device = DeviceInfoEntity.fromEntity(deviceInfos.get(deviceKey)); - if (device == null) continue; - testRunDevices.get(deviceKey.getParent()).add(device); - } - - for (Key runKey : testRunProfiling.keySet()) { - String idString = getDeviceSummary(testRunDevices.get(runKey)); - if (idString != null) { - processProfilingRun(testRunProfiling.get(runKey), idString, graphMap); - } - } - - // Get the names of the graphs to render - String[] names = graphMap.keySet().toArray(new String[graphMap.size()]); - Arrays.sort(names); - - List<Graph> graphList = new ArrayList<>(); - boolean hasHistogram = false; - for (String name : names) { - Graph g = graphMap.get(name); - if (g.size() > 0) { - graphList.add(g); - if (g instanceof Histogram) hasHistogram = true; - } - } - - String filterVal = request.getParameter("filterVal"); - try { - Long.parseLong(filterVal); - } catch (NumberFormatException e) { - filterVal = Long.toString(DEFAULT_FILTER_OPTION); - } - request.setAttribute("testName", request.getParameter("testName")); - request.setAttribute("filterVal", filterVal); - request.setAttribute("endTime", new Gson().toJson(endTime)); - request.setAttribute("devices", devices); - request.setAttribute("selectedDevice", selectedDevice); - request.setAttribute("showFilterDropdown", hasHistogram); - if (graphList.size() == 0) request.setAttribute("error", PROFILING_DATA_ALERT); - - Gson gson = - new GsonBuilder() - .registerTypeHierarchyAdapter(Graph.class, new GraphSerializer()) - .create(); - request.setAttribute("graphs", gson.toJson(graphList)); - - request.setAttribute("profilingPointName", profilingPointName); - dispatcher = request.getRequestDispatcher(GRAPH_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java deleted file mode 100644 index 7fad9a2..0000000 --- a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java +++ /dev/null @@ -1,502 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.android.vts.util.FilterUtil; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.PropertyProjection; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.SortDirection; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -import java.util.Arrays; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; - -import java.util.logging.Level; -import java.util.stream.Collectors; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -public class ShowGreenReleaseServlet extends BaseServlet { - private static final int MAX_RUNS_PER_PAGE = 9999; - - /** Helper class for displaying each device build info on the green build page. */ - public class DeviceBuildInfo implements Comparable<DeviceBuildInfo>, Cloneable { - - /** Device model name ex) marlin, walleye */ - private String deviceBuildTarget; - /** Candidate Build ID */ - private String candidateBuildId; - /** Candidate Build ID Timestamp for url parameter */ - private Long candidateBuildIdTimestamp; - /** Green Build ID */ - private String greenBuildId; - /** Green Build ID Timestamp for url parameter */ - private Long greenBuildIdTimestamp; - - /** - * Device Build Info constructor. - * - * @param deviceBuildTarget The key of the test. - * @param candidateBuildId The number of tests failing. - */ - public DeviceBuildInfo(String deviceBuildTarget, String candidateBuildId) { - this.deviceBuildTarget = deviceBuildTarget; - this.candidateBuildId = candidateBuildId; - this.candidateBuildIdTimestamp = 0L; - this.greenBuildId = "N/A"; - this.greenBuildIdTimestamp = 0L; - } - - /** - * Get the device name. - * - * @return The device name. - */ - public String getDeviceBuildTarget() { - return this.deviceBuildTarget; - } - - /** - * Get the candidate build ID. - * - * @return The candidate build ID. - */ - public String getCandidateBuildId() { - return this.candidateBuildId; - } - - /** Set the candidate build ID. */ - public void setCandidateBuildId(String candidateBuildId) { - this.candidateBuildId = candidateBuildId; - } - - /** - * Get the candidate build ID timestamp. - * - * @return The candidate build ID timestamp. - */ - public Long getCandidateBuildIdTimestamp() { - return this.candidateBuildIdTimestamp; - } - - /** Set the candidate build ID timestamp. */ - public void setCandidateBuildIdTimestamp(Long candidateBuildIdTimestamp) { - this.candidateBuildIdTimestamp = candidateBuildIdTimestamp; - } - - /** - * Get the green build ID. - * - * @return The green build ID. - */ - public String getGreenBuildId() { - return this.greenBuildId; - } - - /** Set the green build ID. */ - public void setGreenBuildId(String greenBuildId) { - this.greenBuildId = greenBuildId; - } - - /** - * Get the candidate build ID timestamp. - * - * @return The candidate build ID timestamp. - */ - public Long getGreenBuildIdTimestamp() { - return this.greenBuildIdTimestamp; - } - - /** Set the candidate build ID timestamp. */ - public void setGreenBuildIdTimestamp(Long greenBuildIdTimestamp) { - this.greenBuildIdTimestamp = greenBuildIdTimestamp; - } - - @Override - public int compareTo(DeviceBuildInfo deviceBuildInfo) { - return this.deviceBuildTarget.compareTo(deviceBuildInfo.getDeviceBuildTarget()); - } - - @Override - protected Object clone() throws CloneNotSupportedException { - return super.clone(); - } - } - - @Override - public PageType getNavParentType() { - return PageType.RELEASE; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String planName = request.getParameter("plan"); - links.add(new Page(PageType.PLAN_RELEASE, planName, "?plan=" + planName)); - return links; - } - - // This function will build and return basic parameter HashMap based on parameter information - // and - // this value will also be used on green build page to show the basic structure. - private Map<String, List<DeviceBuildInfo>> getBasicParamMap(Map<String, List<String>> param) { - Map<String, List<DeviceBuildInfo>> basicParamMap = new HashMap<>(); - param.forEach( - (branch, buildTargetList) -> { - List<DeviceBuildInfo> deviceBuildTargetList = new ArrayList<>(); - buildTargetList.forEach( - buildTargetName -> { - deviceBuildTargetList.add( - new DeviceBuildInfo(buildTargetName, "N/A")); - }); - basicParamMap.put(branch, deviceBuildTargetList); - }); - return basicParamMap; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - - String testType = - request.getParameter("type") == null ? "plan" : request.getParameter("type"); - - RequestDispatcher dispatcher; - if (testType.equalsIgnoreCase("plan")) { - dispatcher = this.getTestPlanDispatcher(request, response); - } else { - dispatcher = this.getTestSuiteDispatcher(request, response); - } - - try { - request.setAttribute("testType", testType); - response.setStatus(HttpServletResponse.SC_OK); - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : ", e); - } - } - - private RequestDispatcher getTestPlanDispatcher( - HttpServletRequest request, HttpServletResponse response) { - String GREEN_RELEASE_JSP = "WEB-INF/jsp/show_green_plan_release.jsp"; - - String testPlan = request.getParameter("plan"); - - Calendar cal = Calendar.getInstance(); - cal.add(Calendar.DATE, -7); - Long startTime = cal.getTime().getTime() * 1000; - Long endTime = Calendar.getInstance().getTime().getTime() * 1000; - - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - Query deviceInfoQuery = - new Query(DeviceInfoEntity.KIND) - .setAncestor(KeyFactory.createKey(TestPlanEntity.KIND, testPlan)) - .addProjection( - new PropertyProjection(DeviceInfoEntity.BRANCH, String.class)) - .addProjection( - new PropertyProjection(DeviceInfoEntity.BUILD_FLAVOR, String.class)) - .setDistinct(true); - - Map<String, List<String>> paramInfoMap = new HashMap<>(); - for (Entity entity : datastore.prepare(deviceInfoQuery).asIterable()) { - String branch = entity.getProperty(DeviceInfoEntity.BRANCH).toString(); - String target = entity.getProperty(DeviceInfoEntity.BUILD_FLAVOR).toString(); - if (paramInfoMap.containsKey(branch)) { - paramInfoMap.get(branch).add(target); - } else { - paramInfoMap.put(branch, new LinkedList<>(Arrays.asList(target))); - } - } - - Map<String, List<DeviceBuildInfo>> baseParamMap = getBasicParamMap(paramInfoMap); - baseParamMap.forEach( - (branchKey, deviceBuildInfoList) -> { - List<List<String>> allPassIdLists = new ArrayList<>(); - Map<String, List<TestPlanRunEntity>> allTestPlanRunEntityMap = new HashMap<>(); - deviceBuildInfoList.forEach( - deviceBuildInfo -> { - Map<String, String[]> paramMap = - new HashMap<String, String[]>() { - { - put("branch", new String[] {branchKey}); - put( - "device", - new String[] { - deviceBuildInfo.getDeviceBuildTarget() - }); - } - }; - - SortDirection dir = SortDirection.DESCENDING; - - boolean unfiltered = false; - boolean showPresubmit = false; - boolean showPostsubmit = true; - Filter typeFilter = - FilterUtil.getTestTypeFilter( - showPresubmit, showPostsubmit, unfiltered); - Key testPlanKey = - KeyFactory.createKey(TestPlanEntity.KIND, testPlan); - Filter testPlanRunFilter = - FilterUtil.getTimeFilter( - testPlanKey, - TestPlanRunEntity.KIND, - startTime, - endTime, - typeFilter); - - List<Filter> userTestFilters = - FilterUtil.getUserTestFilters(paramMap); - userTestFilters.add(0, testPlanRunFilter); - Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(paramMap); - - List<Key> matchingKeyList = - FilterUtil.getMatchingKeys( - testPlanKey, - TestPlanRunEntity.KIND, - userTestFilters, - userDeviceFilter, - dir, - MAX_RUNS_PER_PAGE); - - logger.log( - Level.INFO, - "the number of matching key => " + matchingKeyList.size()); - if (matchingKeyList.size() > 0) { - Map<Key, Entity> entityMap = datastore.get(matchingKeyList); - - List<TestPlanRunEntity> testPlanRunEntityList = - entityMap - .values() - .stream() - .map( - entity -> - TestPlanRunEntity.fromEntity( - entity)) - .collect(Collectors.toList()); - - allTestPlanRunEntityMap.put( - branchKey - + "-" - + deviceBuildInfo.getDeviceBuildTarget(), - testPlanRunEntityList); - - // The passBuildIdList containing all passed buildId List for - // device - List<String> passBuildIdList = - testPlanRunEntityList - .stream() - .filter(entity -> entity.getFailCount() == 0L) - .map(entity -> entity.getTestBuildId()) - .collect(Collectors.toList()); - allPassIdLists.add(passBuildIdList); - logger.log(Level.INFO, "passBuildIdList => " + passBuildIdList); - - // The logic for candidate build ID is starting from here - Comparator<TestPlanRunEntity> byPassing = - Comparator.comparingLong( - elemFirst -> elemFirst.getPassCount()); - - Comparator<TestPlanRunEntity> byNonPassing = - Comparator.comparingLong( - elemFirst -> elemFirst.getFailCount()); - - // This will get the TestPlanRunEntity having maximum number of - // passing and minimum number of fail - Optional<TestPlanRunEntity> testPlanRunEntity = - testPlanRunEntityList - .stream() - .sorted( - byPassing - .reversed() - .thenComparing(byNonPassing)) - .findFirst(); - - String buildId = - testPlanRunEntity - .map(entity -> entity.getTestBuildId()) - .orElse(""); - deviceBuildInfo.setCandidateBuildId(buildId); - Long buildIdTimestamp = - testPlanRunEntity - .map( - entity -> { - return entity.getStartTimestamp(); - }) - .orElse(0L); - deviceBuildInfo.setCandidateBuildIdTimestamp(buildIdTimestamp); - } else { - allPassIdLists.add(new ArrayList<>()); - deviceBuildInfo.setCandidateBuildId("No Test Results"); - } - }); - Set<String> greenBuildIdList = FilterUtil.getCommonElements(allPassIdLists); - if (greenBuildIdList.size() > 0) { - String greenBuildId = greenBuildIdList.iterator().next(); - deviceBuildInfoList.forEach( - deviceBuildInfo -> { - // This is to get the timestamp for greenBuildId - Optional<TestPlanRunEntity> testPlanRunEntity = - allTestPlanRunEntityMap - .get( - branchKey - + "-" - + deviceBuildInfo - .getDeviceBuildTarget()) - .stream() - .filter( - entity -> - entity.getFailCount() == 0L - && entity.getTestBuildId() - .equalsIgnoreCase( - greenBuildId)) - .findFirst(); - // Setting the greenBuildId value and timestamp to - // deviceBuildInfo object - deviceBuildInfo.setGreenBuildId(greenBuildId); - Long buildIdTimestamp = - testPlanRunEntity - .map(entity -> entity.getStartTimestamp()) - .orElse(0L); - deviceBuildInfo.setGreenBuildIdTimestamp(buildIdTimestamp); - }); - } - }); - - request.setAttribute("plan", request.getParameter("plan")); - request.setAttribute("greenBuildInfo", baseParamMap); - RequestDispatcher dispatcher = request.getRequestDispatcher(GREEN_RELEASE_JSP); - return dispatcher; - } - - private RequestDispatcher getTestSuiteDispatcher( - HttpServletRequest request, HttpServletResponse response) { - String GREEN_RELEASE_JSP = "WEB-INF/jsp/show_green_suite_release.jsp"; - - String testPlan = request.getParameter("plan"); - - List<TestSuiteResultEntity> branchTargetInfoList = - ofy().load() - .type(TestSuiteResultEntity.class) - .filter("suitePlan", testPlan) - .project("branch") - .distinct(true) - .project("target") - .distinct(true) - .list(); - - Map<String, List<String>> paramInfoMap = new HashMap<>(); - for (TestSuiteResultEntity testSuiteResultEntity : branchTargetInfoList) { - String branch = testSuiteResultEntity.getBranch(); - String target = testSuiteResultEntity.getTarget(); - if (paramInfoMap.containsKey(branch)) { - paramInfoMap.get(branch).add(target); - } else { - paramInfoMap.put(branch, new LinkedList<>(Arrays.asList(target))); - } - } - - Calendar cal = Calendar.getInstance(); - cal.add(Calendar.DATE, -7); - Long oneWeekAgoTimestamp = cal.getTime().getTime() * 1000; - - Map<String, List<DeviceBuildInfo>> baseParamMap = getBasicParamMap(paramInfoMap); - baseParamMap.forEach( - (branchKey, deviceBuildInfoList) -> { - List<List<String>> allPassIdLists = new ArrayList<>(); - - deviceBuildInfoList.forEach( - deviceBuildInfo -> { - List<String> passBuildIdList = - ofy().load() - .type(TestSuiteResultEntity.class) - .filter("suitePlan", testPlan) - .filter("branch", branchKey) - .filter( - "target", - deviceBuildInfo.getDeviceBuildTarget()) - .filter("failedTestCaseCount", 0) - .filterKey( - ">=", - com.googlecode.objectify.Key.create( - TestSuiteResultEntity.class, - oneWeekAgoTimestamp)) - .project("buildId") - .list() - .stream() - .map(entity -> entity.getBuildId()) - .collect(Collectors.toList()); - allPassIdLists.add(passBuildIdList); - - TestSuiteResultEntity candidateIdEntity = - ofy().load() - .type(TestSuiteResultEntity.class) - .filter("suitePlan", testPlan) - .filter("branch", branchKey) - .filter( - "target", - deviceBuildInfo.getDeviceBuildTarget()) - .filterKey( - ">=", - com.googlecode.objectify.Key.create( - TestSuiteResultEntity.class, - oneWeekAgoTimestamp)) - .project("buildId") - .order("__key__") - .order("-passedTestCaseRatio") - .first() - .now(); - if (candidateIdEntity == null) { - deviceBuildInfo.setCandidateBuildId("N/A"); - } else { - deviceBuildInfo.setCandidateBuildId( - candidateIdEntity.getBuildId()); - } - }); - }); - - request.setAttribute("plan", request.getParameter("plan")); - request.setAttribute("greenBuildInfo", baseParamMap); - RequestDispatcher dispatcher = request.getRequestDispatcher(GREEN_RELEASE_JSP); - return dispatcher; - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowPerformanceDigestServlet.java b/src/main/java/com/android/vts/servlet/ShowPerformanceDigestServlet.java deleted file mode 100644 index 5a70738..0000000 --- a/src/main/java/com/android/vts/servlet/ShowPerformanceDigestServlet.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.PerformanceSummary; -import com.android.vts.util.PerformanceUtil; -import com.android.vts.util.ProfilingPointSummary; -import com.android.vts.util.StatSummary; -import java.io.IOException; -import java.math.RoundingMode; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Servlet for producing tabular performance summaries. */ -public class ShowPerformanceDigestServlet extends BaseServlet { - private static final String PERF_DIGEST_JSP = "WEB-INF/jsp/show_performance_digest.jsp"; - - private static final String MEAN = "Mean"; - private static final String MIN = "Min"; - private static final String MAX = "Max"; - private static final String MEAN_DELTA = "ΔMean (%)"; - private static final String HIGHER_IS_BETTER = - "Note: Higher values are better. Maximum is the best-case performance."; - private static final String LOWER_IS_BETTER = - "Note: Lower values are better. Minimum is the best-case performance."; - private static final String STD = "Std"; - - private static final DecimalFormat FORMATTER; - - /** Initialize the decimal formatter. */ - static { - FORMATTER = new DecimalFormat("#.##"); - FORMATTER.setRoundingMode(RoundingMode.HALF_UP); - } - - @Override - public PageType getNavParentType() { - return PageType.TOT; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String testName = request.getParameter("testName"); - links.add(new Page(PageType.TABLE, testName, "?testName=" + testName)); - links.add(new Page(PageType.PERFORMANCE_DIGEST, "?testName=" + testName)); - return links; - } - - /** - * Generates an HTML summary of the performance changes for the profiling results in the - * specified table. - * - * <p>Retrieves the past 24 hours of profiling data and compares it to the 24 hours that - * preceded it. Creates a table representation of the mean and standard deviation for each - * profiling point. When performance degrades, the cell is shaded red. - * - * @param profilingPoint The name of the profiling point to summarize. - * @param testSummary The ProfilingPointSummary object to compare against. - * @param perfSummaries List of PerformanceSummary objects for each profiling run (in reverse - * chronological order). - * @param sectionLabels HTML string for the section labels (i.e. for each time interval). - * @returns An HTML string for a table comparing the profiling point results across time - * intervals. - */ - public static String getPerformanceSummary( - String profilingPoint, - ProfilingPointSummary testSummary, - List<PerformanceSummary> perfSummaries, - String sectionLabels) { - String tableHTML = "<table>"; - - // Format section labels - tableHTML += "<tr>"; - tableHTML += "<th class='section-label grey lighten-2'>"; - tableHTML += testSummary.yLabel + "</th>"; - tableHTML += sectionLabels; - tableHTML += "</tr>"; - - String bestCaseString; - switch (testSummary.getRegressionMode()) { - case VTS_REGRESSION_MODE_DECREASING: - bestCaseString = MAX; - break; - default: - bestCaseString = MIN; - break; - } - - // Format column labels - tableHTML += "<tr>"; - for (int i = 0; i <= perfSummaries.size() + 1; i++) { - if (i > 1) { - tableHTML += "<th class='section-label grey lighten-2'>" + MEAN_DELTA + "</th>"; - } - if (i == 0) { - tableHTML += "<th class='section-label grey lighten-2'>"; - tableHTML += testSummary.xLabel + "</th>"; - } else if (i > 0) { - tableHTML += "<th class='section-label grey lighten-2'>" + bestCaseString + "</th>"; - tableHTML += "<th class='section-label grey lighten-2'>" + MEAN + "</th>"; - tableHTML += "<th class='section-label grey lighten-2'>" + STD + "</th>"; - } - } - tableHTML += "</tr>"; - - // Populate data cells - for (StatSummary stats : testSummary) { - String label = stats.getLabel(); - tableHTML += "<tr><td class='axis-label grey lighten-2'>" + label; - tableHTML += "</td><td class='cell inner-cell'>"; - tableHTML += FORMATTER.format(stats.getBestCase()) + "</td>"; - tableHTML += "<td class='cell inner-cell'>"; - tableHTML += FORMATTER.format(stats.getMean()) + "</td>"; - tableHTML += "<td class='cell outer-cell'>"; - if (stats.getCount() < 2) { - tableHTML += " - </td>"; - } else { - tableHTML += FORMATTER.format(stats.getStd()) + "</td>"; - } - for (PerformanceSummary prevPerformance : perfSummaries) { - if (prevPerformance.hasProfilingPoint(profilingPoint)) { - StatSummary baseline = - prevPerformance - .getProfilingPointSummary(profilingPoint) - .getStatSummary(label); - tableHTML += - PerformanceUtil.getAvgCasePerformanceComparisonHTML( - baseline, stats, "cell inner-cell", "cell outer-cell", "", ""); - } else { - tableHTML += "<td></td><td></td><td></td><td></td>"; - } - } - tableHTML += "</tr>"; - } - tableHTML += "</table>"; - return tableHTML; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - RequestDispatcher dispatcher = null; - String testName = request.getParameter("testName"); - String selectedDevice = request.getParameter("device"); - Long startTime = null; - if (request.getParameter("startTime") != null) { - String time = request.getParameter("startTime"); - try { - startTime = Long.parseLong(time); - } catch (NumberFormatException e) { - logger.log(Level.WARNING, "Invalid start time passed to digest servlet: " + time); - } - } - if (startTime == null) { - startTime = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - } - - // Add today to the list of time intervals to analyze - List<PerformanceSummary> summaries = new ArrayList<>(); - PerformanceSummary today = - new PerformanceSummary(startTime - TimeUnit.DAYS.toMicros(1), startTime); - summaries.add(today); - - // Add yesterday as a baseline time interval for analysis - long oneDayAgo = startTime - TimeUnit.DAYS.toMicros(1); - PerformanceSummary yesterday = - new PerformanceSummary(oneDayAgo - TimeUnit.DAYS.toMicros(1), oneDayAgo); - summaries.add(yesterday); - - // Add last week as a baseline time interval for analysis - long oneWeek = TimeUnit.DAYS.toMicros(7); - long oneWeekAgo = startTime - oneWeek; - String spanString = "<span class='date-label'>"; - String label = - spanString + TimeUnit.MICROSECONDS.toMillis(oneWeekAgo - oneWeek) + "</span>"; - label += " - " + spanString + TimeUnit.MICROSECONDS.toMillis(oneWeekAgo) + "</span>"; - PerformanceSummary lastWeek = - new PerformanceSummary(oneWeekAgo - oneWeek, oneWeekAgo, label); - summaries.add(lastWeek); - PerformanceUtil.updatePerformanceSummary( - testName, oneWeekAgo - oneWeek, startTime, selectedDevice, summaries); - - int colCount = 0; - String sectionLabels = ""; - List<PerformanceSummary> nonEmptySummaries = new ArrayList<>(); - for (PerformanceSummary perfSummary : summaries) { - if (perfSummary.size() == 0) continue; - - nonEmptySummaries.add(perfSummary); - String content = perfSummary.label; - sectionLabels += "<th class='section-label grey lighten-2 center' "; - if (colCount++ == 0) sectionLabels += "colspan='3'"; - else sectionLabels += "colspan='4'"; - sectionLabels += ">" + content + "</th>"; - } - - List<String> tables = new ArrayList<>(); - List<String> tableTitles = new ArrayList<>(); - List<String> tableSubtitles = new ArrayList<>(); - if (nonEmptySummaries.size() != 0) { - PerformanceSummary todayPerformance = nonEmptySummaries.remove(0); - String[] profilingNames = todayPerformance.getProfilingPointNames(); - - for (String profilingPointName : profilingNames) { - ProfilingPointSummary baselinePerformance = - todayPerformance.getProfilingPointSummary(profilingPointName); - String table = - getPerformanceSummary( - profilingPointName, - baselinePerformance, - nonEmptySummaries, - sectionLabels); - if (table != null) { - tables.add(table); - tableTitles.add(profilingPointName); - switch (baselinePerformance.getRegressionMode()) { - case VTS_REGRESSION_MODE_DECREASING: - tableSubtitles.add(HIGHER_IS_BETTER); - break; - default: - tableSubtitles.add(LOWER_IS_BETTER); - break; - } - } - } - } - - request.setAttribute("testName", testName); - request.setAttribute("tables", tables); - request.setAttribute("tableTitles", tableTitles); - request.setAttribute("tableSubtitles", tableSubtitles); - request.setAttribute("startTime", Long.toString(startTime)); - request.setAttribute("selectedDevice", selectedDevice); - request.setAttribute("devices", DatastoreHelper.getAllBuildFlavors()); - - dispatcher = request.getRequestDispatcher(PERF_DIGEST_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : " + e.toString()); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java deleted file mode 100644 index 0fa28f2..0000000 --- a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java +++ /dev/null @@ -1,415 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.Pagination; - -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.SortDirection; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import org.apache.commons.lang.StringUtils; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.logging.Level; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -public class ShowPlanReleaseServlet extends BaseServlet { - private static final int MAX_RUNS_PER_PAGE = 90; - - /** the previous cursor string token list where to start */ - private static final LinkedHashSet<String> pageCountTokenSet = new LinkedHashSet<>(); - - @Override - public PageType getNavParentType() { - return PageType.RELEASE; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - String testType = - request.getParameter("type") == null ? "plan" : request.getParameter("type"); - List<Page> links = new ArrayList<>(); - String planName = request.getParameter("plan"); - if (testType.equals("plan")) { - links.add(new Page(PageType.RELEASE, "TEST PLANS", "?type=" + testType, true)); - links.add(new Page(PageType.PLAN_RELEASE, planName, "?plan=" + planName)); - } else { - links.add(new Page(PageType.RELEASE, "TEST SUITES", "?type=" + testType, true)); - links.add( - new Page( - PageType.PLAN_RELEASE, - planName, - "?plan=" + planName + "&type=" + testType)); - } - return links; - } - - /** Model to describe each test plan run . */ - private class TestPlanRunMetadata implements Comparable<TestPlanRunMetadata> { - public final TestPlanRunEntity testPlanRun; - public final List<String> devices; - public final Set<DeviceInfoEntity> deviceSet; - - public TestPlanRunMetadata(TestPlanRunEntity testPlanRun) { - this.testPlanRun = testPlanRun; - this.devices = new ArrayList<>(); - this.deviceSet = new HashSet<>(); - } - - public void addDevice(DeviceInfoEntity device) { - if (device == null || deviceSet.contains(device)) return; - devices.add( - device.getBranch() - + "/" - + device.getBuildFlavor() - + " (" - + device.getBuildId() - + ")"); - deviceSet.add(device); - } - - public JsonObject toJson() { - JsonObject obj = new JsonObject(); - obj.add("testPlanRun", testPlanRun.toJson()); - obj.add("deviceInfo", new JsonPrimitive(StringUtils.join(devices, ", "))); - return obj; - } - - @Override - public int compareTo(TestPlanRunMetadata o) { - return new Long(o.testPlanRun.getStartTimestamp()) - .compareTo(this.testPlanRun.getStartTimestamp()); - } - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - String testType = - request.getParameter("type") == null ? "plan" : request.getParameter("type"); - - RequestDispatcher dispatcher; - if (testType.equalsIgnoreCase("plan")) { - dispatcher = this.getTestPlanDispatcher(request, response); - } else { - dispatcher = this.getTestSuiteDispatcher(request, response); - } - - try { - request.setAttribute("testType", testType); - response.setStatus(HttpServletResponse.SC_OK); - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } - - private RequestDispatcher getTestPlanDispatcher( - HttpServletRequest request, HttpServletResponse response) { - String PLAN_RELEASE_JSP = "WEB-INF/jsp/show_plan_release.jsp"; - - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - Long startTime = null; // time in microseconds - Long endTime = null; // time in microseconds - if (request.getParameter("startTime") != null) { - String time = request.getParameter("startTime"); - try { - startTime = Long.parseLong(time); - startTime = startTime > 0 ? startTime : null; - } catch (NumberFormatException e) { - startTime = null; - } - } - if (request.getParameter("endTime") != null) { - String time = request.getParameter("endTime"); - try { - endTime = Long.parseLong(time); - endTime = endTime > 0 ? endTime : null; - } catch (NumberFormatException e) { - endTime = null; - } - } - SortDirection dir = SortDirection.DESCENDING; - if (startTime != null && endTime == null) { - dir = SortDirection.ASCENDING; - } - boolean unfiltered = request.getParameter("unfiltered") != null; - boolean showPresubmit = request.getParameter("showPresubmit") != null; - boolean showPostsubmit = request.getParameter("showPostsubmit") != null; - // If no params are specified, set to default of postsubmit-only. - if (!(showPresubmit || showPostsubmit)) { - showPostsubmit = true; - } - - // If unfiltered, set showPre- and Post-submit to true for accurate UI. - if (unfiltered) { - showPostsubmit = true; - showPresubmit = true; - } - Filter typeFilter = FilterUtil.getTestTypeFilter(showPresubmit, showPostsubmit, unfiltered); - String testPlan = request.getParameter("plan"); - Key testPlanKey = KeyFactory.createKey(TestPlanEntity.KIND, testPlan); - Filter testPlanRunFilter = - FilterUtil.getTimeFilter( - testPlanKey, TestPlanRunEntity.KIND, startTime, endTime, typeFilter); - Map<String, String[]> parameterMap = request.getParameterMap(); - List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap); - userTestFilters.add(0, testPlanRunFilter); - Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap); - - List<TestPlanRunMetadata> testPlanRuns = new ArrayList<>(); - Map<Key, TestPlanRunMetadata> testPlanMap = new HashMap<>(); - Key minKey = null; - Key maxKey = null; - List<Key> gets = - FilterUtil.getMatchingKeys( - testPlanKey, - TestPlanRunEntity.KIND, - userTestFilters, - userDeviceFilter, - dir, - MAX_RUNS_PER_PAGE); - Map<Key, Entity> entityMap = datastore.get(gets); - logger.log(Level.INFO, "entityMap => " + entityMap); - for (Key key : gets) { - if (!entityMap.containsKey(key)) { - continue; - } - TestPlanRunEntity testPlanRun = TestPlanRunEntity.fromEntity(entityMap.get(key)); - if (testPlanRun == null) { - continue; - } - TestPlanRunMetadata metadata = new TestPlanRunMetadata(testPlanRun); - testPlanRuns.add(metadata); - testPlanMap.put(key, metadata); - if (minKey == null || key.compareTo(minKey) < 0) { - minKey = key; - } - if (maxKey == null || key.compareTo(maxKey) > 0) { - maxKey = key; - } - } - if (minKey != null && maxKey != null) { - Filter deviceFilter = - FilterUtil.getDeviceTimeFilter( - testPlanKey, TestPlanRunEntity.KIND, minKey.getId(), maxKey.getId()); - Query deviceQuery = - new Query(DeviceInfoEntity.KIND) - .setAncestor(testPlanKey) - .setFilter(deviceFilter) - .setKeysOnly(); - List<Key> deviceGets = new ArrayList<>(); - for (Entity device : - datastore - .prepare(deviceQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())) { - if (testPlanMap.containsKey(device.getParent())) { - deviceGets.add(device.getKey()); - } - } - logger.log(Level.INFO, "deviceGets => " + deviceGets); - Map<Key, Entity> devices = datastore.get(deviceGets); - for (Key key : devices.keySet()) { - if (!testPlanMap.containsKey(key.getParent())) continue; - DeviceInfoEntity device = DeviceInfoEntity.fromEntity(devices.get(key)); - if (device == null) continue; - TestPlanRunMetadata metadata = testPlanMap.get(key.getParent()); - metadata.addDevice(device); - } - } - - testPlanRuns.sort(Comparator.naturalOrder()); - logger.log(Level.INFO, "testPlanRuns => " + testPlanRuns); - - if (testPlanRuns.size() > 0) { - TestPlanRunMetadata firstRun = testPlanRuns.get(0); - endTime = firstRun.testPlanRun.getStartTimestamp(); - - TestPlanRunMetadata lastRun = testPlanRuns.get(testPlanRuns.size() - 1); - startTime = lastRun.testPlanRun.getStartTimestamp(); - } - - List<JsonObject> testPlanRunObjects = new ArrayList<>(); - for (TestPlanRunMetadata metadata : testPlanRuns) { - testPlanRunObjects.add(metadata.toJson()); - } - - FilterUtil.setAttributes(request, parameterMap); - - request.setAttribute("plan", request.getParameter("plan")); - request.setAttribute( - "hasNewer", - new Gson() - .toJson( - DatastoreHelper.hasNewer( - testPlanKey, TestPlanRunEntity.KIND, endTime))); - request.setAttribute( - "hasOlder", - new Gson() - .toJson( - DatastoreHelper.hasOlder( - testPlanKey, TestPlanRunEntity.KIND, startTime))); - request.setAttribute("planRuns", new Gson().toJson(testPlanRunObjects)); - - request.setAttribute("unfiltered", unfiltered); - request.setAttribute("showPresubmit", showPresubmit); - request.setAttribute("showPostsubmit", showPostsubmit); - request.setAttribute("startTime", new Gson().toJson(startTime)); - request.setAttribute("endTime", new Gson().toJson(endTime)); - request.setAttribute("branches", new Gson().toJson(DatastoreHelper.getAllBranches())); - request.setAttribute("devices", new Gson().toJson(DatastoreHelper.getAllBuildFlavors())); - - RequestDispatcher dispatcher = request.getRequestDispatcher(PLAN_RELEASE_JSP); - return dispatcher; - } - - private RequestDispatcher getTestSuiteDispatcher( - HttpServletRequest request, HttpServletResponse response) { - String PLAN_RELEASE_JSP = "WEB-INF/jsp/show_suite_release.jsp"; - - String testPlan = request.getParameter("plan"); - String testCategoryType = - Objects.isNull(request.getParameter("testCategoryType")) - ? "1" - : request.getParameter("testCategoryType"); - int page = - Objects.isNull(request.getParameter("page")) - ? 1 - : Integer.valueOf(request.getParameter("page")); - String nextPageToken = - Objects.isNull(request.getParameter("nextPageToken")) - ? "" - : request.getParameter("nextPageToken"); - - com.googlecode.objectify.cmd.Query<TestSuiteResultEntity> testSuiteResultEntityQuery = - ofy().load() - .type(TestSuiteResultEntity.class) - .filter("suitePlan", testPlan) - .filter(this.getTestTypeFieldName(testCategoryType), true); - - if (Objects.nonNull(request.getParameter("branch"))) { - request.setAttribute("branch", request.getParameter("branch")); - testSuiteResultEntityQuery = - testSuiteResultEntityQuery.filter("branch", request.getParameter("branch")); - } - if (Objects.nonNull(request.getParameter("hostName"))) { - request.setAttribute("hostName", request.getParameter("hostName")); - testSuiteResultEntityQuery = - testSuiteResultEntityQuery.filter("hostName", request.getParameter("hostName")); - } - if (Objects.nonNull(request.getParameter("buildId"))) { - request.setAttribute("buildId", request.getParameter("buildId")); - testSuiteResultEntityQuery = - testSuiteResultEntityQuery.filter("buildId", request.getParameter("buildId")); - } - if (Objects.nonNull(request.getParameter("deviceName"))) { - request.setAttribute("deviceName", request.getParameter("deviceName")); - testSuiteResultEntityQuery = - testSuiteResultEntityQuery.filter( - "deviceName", request.getParameter("deviceName")); - } - testSuiteResultEntityQuery = testSuiteResultEntityQuery.orderKey(true); - - Pagination<TestSuiteResultEntity> testSuiteResultEntityPagination = - new Pagination( - testSuiteResultEntityQuery, - page, - Pagination.DEFAULT_PAGE_SIZE, - nextPageToken, - pageCountTokenSet); - - String nextPageTokenPagination = testSuiteResultEntityPagination.getNextPageCountToken(); - if (!nextPageTokenPagination.trim().isEmpty()) { - this.pageCountTokenSet.add(nextPageTokenPagination); - } - - logger.log(Level.INFO, "pageCountTokenSet => " + pageCountTokenSet); - - logger.log(Level.INFO, "list => " + testSuiteResultEntityPagination.getList()); - logger.log( - Level.INFO, - "next page count token => " - + testSuiteResultEntityPagination.getNextPageCountToken()); - logger.log( - Level.INFO, - "page min range => " + testSuiteResultEntityPagination.getMinPageRange()); - logger.log( - Level.INFO, - "page max range => " + testSuiteResultEntityPagination.getMaxPageRange()); - logger.log(Level.INFO, "page size => " + testSuiteResultEntityPagination.getPageSize()); - logger.log(Level.INFO, "total count => " + testSuiteResultEntityPagination.getTotalCount()); - - request.setAttribute("plan", testPlan); - request.setAttribute("page", page); - request.setAttribute("testType", "suite"); - request.setAttribute("testCategoryType", testCategoryType); - request.setAttribute("testSuiteResultEntityPagination", testSuiteResultEntityPagination); - RequestDispatcher dispatcher = request.getRequestDispatcher(PLAN_RELEASE_JSP); - return dispatcher; - } - - private String getTestTypeFieldName(String testCategoryType) { - String fieldName; - switch (testCategoryType) { - case "1": // TOT - fieldName = "testTypeIndex.TOT"; - break; - case "2": // OTA - fieldName = "testTypeIndex.OTA"; - break; - case "4": // SIGNED - fieldName = "testTypeIndex.SIGNED"; - break; - default: - fieldName = "testTypeIndex.TOT"; - break; - } - return fieldName; - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowPlanRunServlet.java b/src/main/java/com/android/vts/servlet/ShowPlanRunServlet.java deleted file mode 100644 index 9138a90..0000000 --- a/src/main/java/com/android/vts/servlet/ShowPlanRunServlet.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.proto.VtsReportMessage.TestCaseResult; -import com.android.vts.util.TestRunMetadata; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Servlet for handling requests to load individual plan runs. */ -public class ShowPlanRunServlet extends BaseServlet { - private static final String PLAN_RUN_JSP = "WEB-INF/jsp/show_plan_run.jsp"; - - @Override - public PageType getNavParentType() { - return PageType.RELEASE; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String planName = request.getParameter("plan"); - links.add(new Page(PageType.PLAN_RELEASE, planName, "?plan=" + planName)); - - String time = request.getParameter("time"); - links.add(new Page(PageType.PLAN_RUN, "?plan=" + planName + "&time=" + time)); - return links; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - Long time = null; // time in microseconds - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - RequestDispatcher dispatcher = null; - - String plan = request.getParameter("plan"); - - if (request.getParameter("time") != null) { - String timeString = request.getParameter("time"); - try { - time = Long.parseLong(timeString); - time = time > 0 ? time : null; - } catch (NumberFormatException e) { - time = null; - } - } - - // Add result names to list - List<String> resultNames = new ArrayList<>(); - for (TestCaseResult r : TestCaseResult.values()) { - resultNames.add(r.name()); - } - - List<JsonObject> passingTestObjects = new ArrayList<>(); - List<JsonObject> failingTestObjects = new ArrayList<>(); - List<JsonObject> testRunObjects = new ArrayList<>(); - - Key planKey = KeyFactory.createKey(TestPlanEntity.KIND, plan); - Key planRunKey = KeyFactory.createKey(planKey, TestPlanRunEntity.KIND, time); - String testBuildId = ""; - int passCount = 0; - int failCount = 0; - long startTime = 0; - long endTime = 0; - long moduleCount = 0; - long totalApiCount = 0L; - long totalCoveredApiCount = 0L; - try { - Entity testPlanRunEntity = datastore.get(planRunKey); - TestPlanRunEntity testPlanRun = TestPlanRunEntity.fromEntity(testPlanRunEntity); - Map<Key, Entity> testRuns = datastore.get(testPlanRun.getOldTestRuns()); - testBuildId = testPlanRun.getTestBuildId(); - passCount = (int) testPlanRun.getPassCount(); - failCount = (int) testPlanRun.getFailCount(); - totalApiCount = testPlanRun.getTotalApiCount(); - logger.log(Level.INFO, "totalApiCount => " + totalApiCount); - totalCoveredApiCount = testPlanRun.getCoveredApiCount(); - logger.log(Level.INFO, "totalCoveredApiCount => " + totalCoveredApiCount); - startTime = testPlanRun.getStartTimestamp(); - endTime = testPlanRun.getEndTimestamp(); - moduleCount = testPlanRun.getTestRuns().size(); - - for (Key key : testPlanRun.getOldTestRuns()) { - if (!testRuns.containsKey(key)) continue; - TestRunEntity testRunEntity = TestRunEntity.fromEntity(testRuns.get(key)); - if (testRunEntity == null) continue; - Query deviceInfoQuery = new Query(DeviceInfoEntity.KIND).setAncestor(key); - List<DeviceInfoEntity> devices = new ArrayList<>(); - for (Entity device : datastore.prepare(deviceInfoQuery).asIterable()) { - DeviceInfoEntity deviceEntity = DeviceInfoEntity.fromEntity(device); - if (deviceEntity == null) continue; - devices.add(deviceEntity); - } - TestRunMetadata metadata = - new TestRunMetadata(key.getParent().getName(), testRunEntity, devices); - if (metadata.testRun.getFailCount() > 0) { - failingTestObjects.add(metadata.toJson()); - } else { - passingTestObjects.add(metadata.toJson()); - } - } - } catch (EntityNotFoundException e) { - // Invalid parameters - } - testRunObjects.addAll(failingTestObjects); - testRunObjects.addAll(passingTestObjects); - - int[] topBuildResultCounts = new int[TestCaseResult.values().length]; - topBuildResultCounts[TestCaseResult.TEST_CASE_RESULT_PASS.getNumber()] = passCount; - topBuildResultCounts[TestCaseResult.TEST_CASE_RESULT_FAIL.getNumber()] = failCount; - - request.setAttribute("plan", request.getParameter("plan")); - request.setAttribute("time", request.getParameter("time")); - - request.setAttribute("resultNames", resultNames); - request.setAttribute("resultNamesJson", new Gson().toJson(resultNames)); - request.setAttribute("testRuns", new Gson().toJson(testRunObjects)); - request.setAttribute("testBuildId", new Gson().toJson(testBuildId)); - request.setAttribute("startTime", new Gson().toJson(startTime)); - request.setAttribute("endTime", new Gson().toJson(endTime)); - request.setAttribute("moduleCount", new Gson().toJson(moduleCount)); - request.setAttribute("passingTestCaseCount", new Gson().toJson(passCount)); - request.setAttribute("failingTestCaseCount", new Gson().toJson(failCount)); - request.setAttribute("totalApiCount", totalApiCount); - request.setAttribute("totalCoveredApiCount", totalCoveredApiCount); - - // data for pie chart - request.setAttribute("topBuildResultCounts", new Gson().toJson(topBuildResultCounts)); - - dispatcher = request.getRequestDispatcher(PLAN_RUN_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : " + e.toString()); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowProfilingListServlet.java b/src/main/java/com/android/vts/servlet/ShowProfilingListServlet.java deleted file mode 100644 index ce138cc..0000000 --- a/src/main/java/com/android/vts/servlet/ShowProfilingListServlet.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2017 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.servlet; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -import com.android.vts.entity.TestEntity; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Query; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.logging.Level; -import java.util.stream.Collectors; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Servlet for handling requests to display profiling tests. - */ -public class ShowProfilingListServlet extends BaseServlet { - - private static final String PROFILING_LIST_JSP = "WEB-INF/jsp/show_profiling_list.jsp"; - - @Override - public PageType getNavParentType() { - return PageType.PROFILING_LIST; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - return null; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - List<String> tests = ofy().load().type(TestEntity.class) - .filter(TestEntity.HAS_PROFILING_DATA, true).list().stream() - .sorted(Comparator.comparing(TestEntity::getTestName)).map(t -> t.getTestName()) - .collect(Collectors.toList()); - - response.setStatus(HttpServletResponse.SC_OK); - request.setAttribute("testNames", tests); - RequestDispatcher dispatcher = request.getRequestDispatcher(PROFILING_LIST_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java b/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java deleted file mode 100644 index 5dc8c6e..0000000 --- a/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (C) 2017 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.servlet; - -import com.android.vts.entity.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.util.BoxPlot; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.GraphSerializer; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.stream.Collectors; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Servlet for handling requests to load graphs. */ -public class ShowProfilingOverviewServlet extends BaseServlet { - private static final String PROFILING_OVERVIEW_JSP = "WEB-INF/jsp/show_profiling_overview.jsp"; - - @Override - public PageType getNavParentType() { - return PageType.PROFILING_LIST; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String testName = request.getParameter("testName"); - links.add(new Page(PageType.PROFILING_OVERVIEW, testName, "?testName=" + testName)); - return links; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - RequestDispatcher dispatcher = null; - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - String testName = request.getParameter("testName"); - long endTime = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - long startTime = endTime - TimeUnit.DAYS.toMicros(30); - - // Create a query for test runs matching the time window filter - - Map<String, String[]> parameterMap = request.getParameterMap(); - boolean hasBranchFilter = parameterMap.containsKey(FilterUtil.FilterKey.BRANCH.getValue()); - Filter deviceFilter; - if (hasBranchFilter) { - deviceFilter = - FilterUtil.FilterKey.BRANCH.getFilterForString( - FilterUtil.getFirstParameter( - parameterMap, FilterUtil.FilterKey.BRANCH.getValue())); - } else { - deviceFilter = - FilterUtil.FilterKey.BRANCH.getFilterForString(ProfilingPointSummaryEntity.ALL); - } - - boolean hasTargetFilter = parameterMap.containsKey(FilterUtil.FilterKey.TARGET.getValue()); - if (hasTargetFilter) { - deviceFilter = - Query.CompositeFilterOperator.and( - deviceFilter, - FilterUtil.FilterKey.TARGET.getFilterForString( - FilterUtil.getFirstParameter( - parameterMap, FilterUtil.FilterKey.TARGET.getValue()))); - } else { - deviceFilter = - Query.CompositeFilterOperator.and( - deviceFilter, - FilterUtil.FilterKey.TARGET.getFilterForString( - ProfilingPointSummaryEntity.ALL)); - } - - Filter startFilter = - new Query.FilterPredicate( - ProfilingPointSummaryEntity.START_TIME, - Query.FilterOperator.GREATER_THAN_OR_EQUAL, - startTime); - Filter endFilter = - new Query.FilterPredicate( - ProfilingPointSummaryEntity.START_TIME, - Query.FilterOperator.LESS_THAN_OR_EQUAL, - endTime); - Filter timeFilter = Query.CompositeFilterOperator.and(startFilter, endFilter); - - Filter filter = Query.CompositeFilterOperator.and(timeFilter, deviceFilter); - - Query profilingPointQuery = - new Query(ProfilingPointEntity.KIND) - .setFilter( - new Query.FilterPredicate( - ProfilingPointEntity.TEST_NAME, - Query.FilterOperator.EQUAL, - testName)); - - List<ProfilingPointEntity> profilingPoints = new ArrayList<>(); - for (Entity e : - datastore - .prepare(profilingPointQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())) { - ProfilingPointEntity pp = ProfilingPointEntity.fromEntity(e); - if (pp == null) continue; - profilingPoints.add(pp); - } - - Map<ProfilingPointEntity, Iterable<Entity>> asyncEntities = new HashMap<>(); - for (ProfilingPointEntity pp : profilingPoints) { - Query profilingQuery = - new Query(ProfilingPointSummaryEntity.KIND) - .setAncestor(pp.getKey()) - .setFilter(filter); - asyncEntities.put( - pp, - datastore - .prepare(profilingQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())); - } - - Map<String, BoxPlot> plotMap = new HashMap<>(); - for (ProfilingPointEntity pp : profilingPoints) { - if (!plotMap.containsKey(pp.getProfilingPointName())) { - plotMap.put( - pp.getProfilingPointName(), new BoxPlot(pp.getProfilingPointName(), null, pp.getXLabel())); - } - BoxPlot plot = plotMap.get(pp.getProfilingPointName()); - Set<Long> timestamps = new HashSet<>(); - for (Entity e : asyncEntities.get(pp)) { - ProfilingPointSummaryEntity pps = ProfilingPointSummaryEntity.fromEntity(e); - if (pps == null) continue; - plot.addSeriesData(Long.toString(pps.getStartTime()), pps.getSeries(), pps.getGlobalStats()); - timestamps.add(pps.getStartTime()); - } - List<Long> timestampList = new ArrayList<>(timestamps); - timestampList.sort(Comparator.reverseOrder()); - List<String> timestampStrings = - timestampList.stream().map(Object::toString).collect(Collectors.toList()); - plot.setLabels(timestampStrings); - } - - List<BoxPlot> plots = new ArrayList<>(); - for (String key : plotMap.keySet()) { - BoxPlot plot = plotMap.get(key); - if (plot.size() == 0) continue; - plots.add(plot); - } - plots.sort((b1, b2) -> b1.getName().compareTo(b2.getName())); - - Gson gson = - new GsonBuilder() - .registerTypeHierarchyAdapter(BoxPlot.class, new GraphSerializer()) - .create(); - - FilterUtil.setAttributes(request, parameterMap); - request.setAttribute("plots", gson.toJson(plots)); - request.setAttribute("testName", request.getParameter("testName")); - request.setAttribute("branches", new Gson().toJson(DatastoreHelper.getAllBranches())); - request.setAttribute("devices", new Gson().toJson(DatastoreHelper.getAllBuildFlavors())); - dispatcher = request.getRequestDispatcher(PROFILING_OVERVIEW_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : ", e); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java deleted file mode 100644 index ae175ae..0000000 --- a/src/main/java/com/android/vts/servlet/ShowReleaseServlet.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.users.UserServiceFactory; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.logging.Level; -import java.util.stream.Collectors; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** - * Represents the servlet that is invoked on loading the release page. - */ -public class ShowReleaseServlet extends BaseServlet { - - @Override - public PageType getNavParentType() { - return PageType.RELEASE; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - return null; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - String testType = - request.getParameter("type") == null ? "plan" : request.getParameter("type"); - - RequestDispatcher dispatcher; - if (testType.equalsIgnoreCase("plan")) { - dispatcher = this.getTestPlanDispatcher(request, response); - } else { - dispatcher = this.getTestSuiteDispatcher(request, response); - } - - try { - request.setAttribute("testType", testType); - response.setStatus(HttpServletResponse.SC_OK); - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } - - private RequestDispatcher getTestPlanDispatcher( - HttpServletRequest request, HttpServletResponse response) { - String RELEASE_JSP = "WEB-INF/jsp/show_release.jsp"; - - List<TestPlanEntity> testPlanEntityList = ofy().load().type(TestPlanEntity.class).list(); - - List<String> plans = testPlanEntityList.stream() - .sorted(Comparator.comparing(TestPlanEntity::getTestPlanName)) - .map(te -> te.getTestPlanName()).collect(Collectors.toList()); - - request.setAttribute("isAdmin", UserServiceFactory.getUserService().isUserAdmin()); - request.setAttribute("planNames", plans); - RequestDispatcher dispatcher = request.getRequestDispatcher(RELEASE_JSP); - return dispatcher; - } - - private RequestDispatcher getTestSuiteDispatcher( - HttpServletRequest request, HttpServletResponse response) { - String RELEASE_JSP = "WEB-INF/jsp/show_release.jsp"; - - List<TestSuiteResultEntity> suiteResultEntityList = TestSuiteResultEntity.getTestSuitePlans(); - - List<String> plans = - suiteResultEntityList - .stream() - .map(suiteEntity -> suiteEntity.getSuitePlan()) - .collect(Collectors.toList()); - request.setAttribute("isAdmin", UserServiceFactory.getUserService().isUserAdmin()); - request.setAttribute("planNames", plans); - RequestDispatcher dispatcher = request.getRequestDispatcher(RELEASE_JSP); - return dispatcher; - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowTableServlet.java b/src/main/java/com/android/vts/servlet/ShowTableServlet.java deleted file mode 100644 index b56ce9c..0000000 --- a/src/main/java/com/android/vts/servlet/ShowTableServlet.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.CodeCoverageEntity; -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.proto.VtsReportMessage.TestCaseResult; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.TestResults; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.SortDirection; -import com.google.gson.Gson; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Servlet for handling requests to load individual tables. */ -public class ShowTableServlet extends BaseServlet { - private static final String TABLE_JSP = "WEB-INF/jsp/show_table.jsp"; - // Error message displayed on the webpage is tableName passed is null. - private static final String TABLE_NAME_ERROR = "Error : Table name must be passed!"; - private static final String PROFILING_DATA_ALERT = "No profiling data was found."; - private static final int MAX_BUILD_IDS_PER_PAGE = 10; - - @Override - public PageType getNavParentType() { - return PageType.TOT; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String testName = request.getParameter("testName"); - links.add(new Page(PageType.TABLE, testName, "?testName=" + testName)); - return links; - } - - public static void processTestRun(TestResults testResults, Entity testRun) { - TestRunEntity testRunEntity = TestRunEntity.fromEntity(testRun); - if (testRunEntity == null) { - return; - } - - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - List<Key> gets = new ArrayList<>(); - for (long testCaseId : testRunEntity.getTestCaseIds()) { - gets.add(KeyFactory.createKey(TestCaseRunEntity.KIND, testCaseId)); - } - - List<Entity> testCases = new ArrayList<>(); - Map<Key, Entity> entityMap = datastore.get(gets); - for (Key key : gets) { - if (entityMap.containsKey(key)) { - testCases.add(entityMap.get(key)); - } - } - - testResults.addTestRun(testRun, testCases); - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - boolean unfiltered = request.getParameter("unfiltered") != null; - boolean showPresubmit = request.getParameter("showPresubmit") != null; - boolean showPostsubmit = request.getParameter("showPostsubmit") != null; - - Long startTime = null; // time in microseconds - Long endTime = null; // time in microseconds - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - RequestDispatcher dispatcher = null; - - // message to display if profiling point data is not available - String profilingDataAlert = ""; - - if (request.getParameter("testName") == null) { - request.setAttribute("testName", TABLE_NAME_ERROR); - return; - } - String testName = request.getParameter("testName"); - - if (request.getParameter("startTime") != null) { - String time = request.getParameter("startTime"); - try { - startTime = Long.parseLong(time); - startTime = startTime > 0 ? startTime : null; - } catch (NumberFormatException e) { - startTime = null; - } - } - if (request.getParameter("endTime") != null) { - String time = request.getParameter("endTime"); - try { - endTime = Long.parseLong(time); - endTime = endTime > 0 ? endTime : null; - } catch (NumberFormatException e) { - endTime = null; - } - } - - // If no params are specified, set to default of postsubmit-only. - if (!(showPresubmit || showPostsubmit)) { - showPostsubmit = true; - } - - // If unfiltered, set showPre- and Post-submit to true for accurate UI. - if (unfiltered) { - showPostsubmit = true; - showPresubmit = true; - } - - // Add result names to list - List<String> resultNames = new ArrayList<>(); - for (TestCaseResult r : TestCaseResult.values()) { - resultNames.add(r.name()); - } - - TestResults testResults = new TestResults(testName); - - SortDirection dir = SortDirection.DESCENDING; - if (startTime != null && endTime == null) { - dir = SortDirection.ASCENDING; - } - Key testKey = KeyFactory.createKey(TestEntity.KIND, testName); - - Filter typeFilter = FilterUtil.getTestTypeFilter(showPresubmit, showPostsubmit, unfiltered); - Filter testFilter = - FilterUtil.getTimeFilter( - testKey, TestRunEntity.KIND, startTime, endTime, typeFilter); - - Map<String, String[]> parameterMap = request.getParameterMap(); - List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap); - userTestFilters.add(0, testFilter); - Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap); - - List<Key> gets = - FilterUtil.getMatchingKeys( - testKey, - TestRunEntity.KIND, - userTestFilters, - userDeviceFilter, - dir, - MAX_BUILD_IDS_PER_PAGE); - Map<Key, Entity> entityMap = datastore.get(gets); - for (Key key : gets) { - if (!entityMap.containsKey(key)) { - continue; - } - processTestRun(testResults, entityMap.get(key)); - } - testResults.processReport(); - - if (testResults.profilingPointNames.length == 0) { - profilingDataAlert = PROFILING_DATA_ALERT; - } - - FilterUtil.setAttributes(request, parameterMap); - - request.setAttribute("testName", request.getParameter("testName")); - - request.setAttribute("error", profilingDataAlert); - - // pass values by converting to JSON - request.setAttribute("headerRow", new Gson().toJson(testResults.headerRow)); - request.setAttribute("timeGrid", new Gson().toJson(testResults.timeGrid)); - request.setAttribute("durationGrid", new Gson().toJson(testResults.durationGrid)); - request.setAttribute("summaryGrid", new Gson().toJson(testResults.summaryGrid)); - request.setAttribute("resultsGrid", new Gson().toJson(testResults.resultsGrid)); - request.setAttribute("profilingPointNames", testResults.profilingPointNames); - request.setAttribute("resultNames", resultNames); - request.setAttribute("resultNamesJson", new Gson().toJson(resultNames)); - request.setAttribute("logInfoMap", new Gson().toJson(testResults.logInfoMap)); - - // data for pie chart - request.setAttribute( - "topBuildResultCounts", new Gson().toJson(testResults.totResultCounts)); - request.setAttribute("topBuildId", testResults.totBuildId); - request.setAttribute("startTime", new Gson().toJson(testResults.startTime)); - request.setAttribute("endTime", new Gson().toJson(testResults.endTime)); - request.setAttribute( - "hasNewer", - new Gson() - .toJson( - DatastoreHelper.hasNewer( - testKey, TestRunEntity.KIND, testResults.endTime))); - request.setAttribute( - "hasOlder", - new Gson() - .toJson( - DatastoreHelper.hasOlder( - testKey, TestRunEntity.KIND, testResults.startTime))); - request.setAttribute("unfiltered", unfiltered); - request.setAttribute("showPresubmit", showPresubmit); - request.setAttribute("showPostsubmit", showPostsubmit); - - request.setAttribute("branches", new Gson().toJson(DatastoreHelper.getAllBranches())); - request.setAttribute("devices", new Gson().toJson(DatastoreHelper.getAllBuildFlavors())); - - dispatcher = request.getRequestDispatcher(TABLE_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : " + e.toString()); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowTestAcknowledgmentServlet.java b/src/main/java/com/android/vts/servlet/ShowTestAcknowledgmentServlet.java deleted file mode 100644 index c75352c..0000000 --- a/src/main/java/com/android/vts/servlet/ShowTestAcknowledgmentServlet.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2017 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.servlet; - -import com.android.vts.entity.TestAcknowledgmentEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.util.DatastoreHelper; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.users.UserServiceFactory; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class ShowTestAcknowledgmentServlet extends BaseServlet { - private static final String TEST_ACK_JSP = "WEB-INF/jsp/show_test_acknowledgments.jsp"; - - @Override - public PageType getNavParentType() { - return PageType.TOT; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - return links; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Query ackQuery = new Query(TestAcknowledgmentEntity.KIND); - List<JsonObject> testAcks = new ArrayList<>(); - for (Entity ackEntity : - datastore.prepare(ackQuery).asIterable(DatastoreHelper.getLargeBatchOptions())) { - TestAcknowledgmentEntity ack = TestAcknowledgmentEntity.fromEntity(ackEntity); - if (ack == null) continue; - testAcks.add(ack.toJson()); - } - - List<String> allTestNames = TestEntity.getAllTestNames(); - - request.setAttribute("testAcknowledgments", new Gson().toJson(testAcks)); - request.setAttribute("allTests", new Gson().toJson(allTestNames)); - request.setAttribute("branches", new Gson().toJson(DatastoreHelper.getAllBranches())); - request.setAttribute("devices", new Gson().toJson(DatastoreHelper.getAllBuildFlavors())); - request.setAttribute("readOnly", new Gson().toJson(!UserServiceFactory.getUserService().isUserAdmin())); - - RequestDispatcher dispatcher = request.getRequestDispatcher(TEST_ACK_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : ", e); - } - } -} diff --git a/src/main/java/com/android/vts/servlet/ShowTreeServlet.java b/src/main/java/com/android/vts/servlet/ShowTreeServlet.java deleted file mode 100644 index e087807..0000000 --- a/src/main/java/com/android/vts/servlet/ShowTreeServlet.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.servlet; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.proto.VtsReportMessage.TestCaseResult; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.TestRunDetails; -import com.android.vts.util.TestRunMetadata; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.SortDirection; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Servlet for handling requests to load individual tables. - */ -public class ShowTreeServlet extends BaseServlet { - - private static final String TABLE_JSP = "WEB-INF/jsp/show_tree.jsp"; - // Error message displayed on the webpage is tableName passed is null. - private static final String TABLE_NAME_ERROR = "Error : Table name must be passed!"; - private static final String PROFILING_DATA_ALERT = "No profiling data was found."; - private static final int MAX_RESULT_COUNT = 60; - private static final int MAX_PREFETCH_COUNT = 10; - - @Override - public PageType getNavParentType() { - return PageType.TOT; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String testName = request.getParameter("testName"); - links.add(new Page(PageType.TREE, testName, "?testName=" + testName)); - return links; - } - - /** - * Get the test run details for a test run. - * - * @param metadata The metadata for the test run whose details will be fetched. - * @return The TestRunDetails object for the provided test run. - */ - public static TestRunDetails processTestDetails(TestRunMetadata metadata) { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - TestRunDetails details = new TestRunDetails(); - List<Key> gets = new ArrayList<>(); - for (long testCaseId : metadata.testRun.getTestCaseIds()) { - gets.add(KeyFactory.createKey(TestCaseRunEntity.KIND, testCaseId)); - } - Map<Key, Entity> entityMap = datastore.get(gets); - for (int i = 0; i < 1; i++) { - for (Key key : entityMap.keySet()) { - TestCaseRunEntity testCaseRun = TestCaseRunEntity.fromEntity(entityMap.get(key)); - if (testCaseRun == null) { - continue; - } - details.addTestCase(testCaseRun); - } - } - return details; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - boolean unfiltered = request.getParameter("unfiltered") != null; - boolean showPresubmit = request.getParameter("showPresubmit") != null; - boolean showPostsubmit = request.getParameter("showPostsubmit") != null; - Long startTime = null; // time in microseconds - Long endTime = null; // time in microseconds - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - RequestDispatcher dispatcher = null; - - // message to display if profiling point data is not available - String profilingDataAlert = ""; - - if (request.getParameter("testName") == null) { - request.setAttribute("testName", TABLE_NAME_ERROR); - return; - } - String testName = request.getParameter("testName"); - - if (request.getParameter("startTime") != null) { - String time = request.getParameter("startTime"); - try { - startTime = Long.parseLong(time); - startTime = startTime > 0 ? startTime : null; - } catch (NumberFormatException e) { - startTime = null; - } - } - if (request.getParameter("endTime") != null) { - String time = request.getParameter("endTime"); - try { - endTime = Long.parseLong(time); - endTime = endTime > 0 ? endTime : null; - } catch (NumberFormatException e) { - endTime = null; - } - } - - // If no params are specified, set to default of postsubmit-only. - if (!(showPresubmit || showPostsubmit)) { - showPostsubmit = true; - } - - // If unfiltered, set showPre- and Post-submit to true for accurate UI. - if (unfiltered) { - showPostsubmit = true; - showPresubmit = true; - } - - // Add result names to list - List<String> resultNames = new ArrayList<>(); - for (TestCaseResult r : TestCaseResult.values()) { - resultNames.add(r.name()); - } - - SortDirection dir = SortDirection.DESCENDING; - if (startTime != null && endTime == null) { - dir = SortDirection.ASCENDING; - } - Key testKey = KeyFactory.createKey(TestEntity.KIND, testName); - - Filter typeFilter = FilterUtil.getTestTypeFilter(showPresubmit, showPostsubmit, unfiltered); - Filter testFilter = - FilterUtil.getTimeFilter( - testKey, TestRunEntity.KIND, startTime, endTime, typeFilter); - - Map<String, String[]> parameterMap = request.getParameterMap(); - List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap); - userTestFilters.add(0, testFilter); - Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap); - - List<TestRunMetadata> testRunMetadata = new ArrayList<>(); - Map<Key, TestRunMetadata> metadataMap = new HashMap<>(); - Key minKey = null; - Key maxKey = null; - List<Key> gets = - FilterUtil.getMatchingKeys( - testKey, - TestRunEntity.KIND, - userTestFilters, - userDeviceFilter, - dir, - MAX_RESULT_COUNT); - Map<Key, Entity> entityMap = datastore.get(gets); - for (Key key : gets) { - if (!entityMap.containsKey(key)) { - continue; - } - TestRunEntity testRunEntity = TestRunEntity.fromEntity(entityMap.get(key)); - if (testRunEntity == null) { - continue; - } - if (minKey == null || key.compareTo(minKey) < 0) { - minKey = key; - } - if (maxKey == null || key.compareTo(maxKey) > 0) { - maxKey = key; - } - TestRunMetadata metadata = new TestRunMetadata(testName, testRunEntity); - testRunMetadata.add(metadata); - metadataMap.put(key, metadata); - } - - List<String> profilingPointNames = new ArrayList<>(); - if (minKey != null && maxKey != null) { - Filter deviceFilter = - FilterUtil.getDeviceTimeFilter( - testKey, TestRunEntity.KIND, minKey.getId(), maxKey.getId()); - Query deviceQuery = - new Query(DeviceInfoEntity.KIND) - .setAncestor(testKey) - .setFilter(deviceFilter) - .setKeysOnly(); - List<Key> deviceGets = new ArrayList<>(); - for (Entity device : - datastore - .prepare(deviceQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())) { - if (metadataMap.containsKey(device.getParent())) { - deviceGets.add(device.getKey()); - } - } - Map<Key, Entity> devices = datastore.get(deviceGets); - for (Key key : devices.keySet()) { - if (!metadataMap.containsKey(key.getParent())) { - continue; - } - DeviceInfoEntity device = DeviceInfoEntity.fromEntity(devices.get(key)); - if (device == null) { - continue; - } - TestRunMetadata metadata = metadataMap.get(key.getParent()); - metadata.addDevice(device); - } - - Filter profilingFilter = - FilterUtil.getProfilingTimeFilter( - testKey, TestRunEntity.KIND, minKey.getId(), maxKey.getId()); - - Set<String> profilingPoints = new HashSet<>(); - Query profilingPointQuery = - new Query(ProfilingPointRunEntity.KIND) - .setAncestor(testKey) - .setFilter(profilingFilter) - .setKeysOnly(); - for (Entity e : datastore.prepare(profilingPointQuery).asIterable()) { - profilingPoints.add(e.getKey().getName()); - } - - if (profilingPoints.size() == 0) { - profilingDataAlert = PROFILING_DATA_ALERT; - } - profilingPointNames.addAll(profilingPoints); - profilingPointNames.sort(Comparator.naturalOrder()); - } - - testRunMetadata.sort( - (t1, t2) -> - new Long(t2.testRun.getStartTimestamp()).compareTo(t1.testRun.getStartTimestamp())); - List<JsonObject> testRunObjects = new ArrayList<>(); - - int prefetchCount = 0; - for (TestRunMetadata metadata : testRunMetadata) { - if (metadata.testRun.getFailCount() > 0 && prefetchCount < MAX_PREFETCH_COUNT) { - // process - metadata.addDetails(processTestDetails(metadata)); - ++prefetchCount; - } - testRunObjects.add(metadata.toJson()); - } - - int[] topBuildResultCounts = null; - String topBuild = ""; - if (testRunMetadata.size() > 0) { - TestRunMetadata firstRun = testRunMetadata.get(0); - topBuild = firstRun.getDeviceInfo(); - endTime = firstRun.testRun.getStartTimestamp(); - TestRunDetails topDetails = firstRun.getDetails(); - if (topDetails == null) { - topDetails = processTestDetails(firstRun); - } - topBuildResultCounts = topDetails.resultCounts; - - TestRunMetadata lastRun = testRunMetadata.get(testRunMetadata.size() - 1); - startTime = lastRun.testRun.getStartTimestamp(); - } - - FilterUtil.setAttributes(request, parameterMap); - - request.setAttribute("testName", request.getParameter("testName")); - - request.setAttribute("error", profilingDataAlert); - - request.setAttribute("profilingPointNames", profilingPointNames); - request.setAttribute("resultNames", resultNames); - request.setAttribute("resultNamesJson", new Gson().toJson(resultNames)); - request.setAttribute("testRuns", new Gson().toJson(testRunObjects)); - - // data for pie chart - request.setAttribute("topBuildResultCounts", new Gson().toJson(topBuildResultCounts)); - request.setAttribute("topBuildId", topBuild); - request.setAttribute("startTime", new Gson().toJson(startTime)); - request.setAttribute("endTime", new Gson().toJson(endTime)); - request.setAttribute( - "hasNewer", - new Gson().toJson(DatastoreHelper.hasNewer(testKey, TestRunEntity.KIND, endTime))); - request.setAttribute( - "hasOlder", - new Gson() - .toJson(DatastoreHelper.hasOlder(testKey, TestRunEntity.KIND, startTime))); - request.setAttribute("unfiltered", unfiltered); - request.setAttribute("showPresubmit", showPresubmit); - request.setAttribute("showPostsubmit", showPostsubmit); - - request.setAttribute("branches", new Gson().toJson(DatastoreHelper.getAllBranches())); - request.setAttribute("devices", new Gson().toJson(DatastoreHelper.getAllBuildFlavors())); - - dispatcher = request.getRequestDispatcher(TABLE_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : " + e.toString()); - } - } -} diff --git a/src/main/java/com/android/vts/util/BoxPlot.java b/src/main/java/com/android/vts/util/BoxPlot.java deleted file mode 100644 index 455d778..0000000 --- a/src/main/java/com/android/vts/util/BoxPlot.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.proto.VtsReportMessage; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** Helper object for describing time-series box plot data. */ -public class BoxPlot extends Graph { - private static final String LABEL_KEY = "label"; - private static final String SERIES_KEY = "seriesList"; - private static final String MEAN_KEY = "mean"; - private static final String STD_KEY = "std"; - private static final String COUNT_KEY = "count"; - - private static final String DAY = "Day"; - - private final GraphType type = GraphType.BOX_PLOT; - private final String name; - private final String xLabel; - private final String yLabel; - private final Map<String, Map<String, StatSummary>> labelSeriesMap; - private final Set<String> seriesSet; - - private int count; - private List<String> labels; - - public BoxPlot(String name, String xLabel, String yLabel) { - this.name = name; - this.xLabel = xLabel == null ? DAY : xLabel; - this.yLabel = yLabel; - this.count = 0; - this.labelSeriesMap = new HashMap<>(); - this.seriesSet = new HashSet<>(); - this.labels = new ArrayList<>(); - } - - /** - * Get the x axis label. - * - * @return The x axis label. - */ - @Override - public String getXLabel() { - return xLabel; - } - - /** - * Get the graph type. - * - * @return The graph type. - */ - @Override - public GraphType getType() { - return type; - } - - /** - * Get the name of the graph. - * - * @return The name of the graph. - */ - @Override - public String getName() { - return name; - } - - /** - * Get the y axis label. - * - * @return The y axis label. - */ - @Override - public String getYLabel() { - return yLabel; - } - - /** - * Get the number of data points stored in the graph. - * - * @return The number of data points stored in the graph. - */ - @Override - public int size() { - return this.count; - } - - /** - * Add data to the graph. - * - * @param label The name of the category. - * @param profilingPoint The ProfilingPointRunEntity containing data to add. - */ - @Override - public void addData(String label, ProfilingPointRunEntity profilingPoint) { - StatSummary stat = - new StatSummary( - label, VtsReportMessage.VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE); - for (long value : profilingPoint.getValues()) { - stat.updateStats(value); - } - addSeriesData(label, "", stat); - } - - public void addSeriesData(String label, String series, StatSummary stats) { - if (!labelSeriesMap.containsKey(label)) { - labelSeriesMap.put(label, new HashMap<>()); - } - Map<String, StatSummary> seriesMap = labelSeriesMap.get(label); - seriesMap.put(series, stats); - seriesSet.add(series); - count += stats.getCount(); - } - - public void setLabels(List<String> labels) { - this.labels = labels; - } - - /** - * Serializes the graph to json format. - * - * @return A JsonElement object representing the graph object. - */ - @Override - public JsonObject toJson() { - JsonObject json = super.toJson(); - List<JsonObject> stats = new ArrayList<>(); - List<String> seriesList = new ArrayList<>(seriesSet); - seriesList.sort(Comparator.naturalOrder()); - for (String label : labels) { - JsonObject statJson = new JsonObject(); - String boxLabel = label; - List<JsonObject> statList = new ArrayList<>(seriesList.size()); - Map<String, StatSummary> seriesMap = labelSeriesMap.get(label); - for (String series : seriesList) { - JsonObject statSummary = new JsonObject(); - Double mean = null; - Double std = null; - Integer count = null; - if (seriesMap.containsKey(series) && seriesMap.get(series).getCount() > 0) { - StatSummary stat = seriesMap.get(series); - mean = stat.getMean(); - std = 0.; - if (stat.getCount() > 1) { - std = stat.getStd(); - } - count = stat.getCount(); - } - statSummary.addProperty(MEAN_KEY, mean); - statSummary.addProperty(STD_KEY, std); - statSummary.addProperty(COUNT_KEY, count); - statList.add(statSummary); - } - statJson.addProperty(LABEL_KEY, boxLabel); - statJson.add(VALUE_KEY, new Gson().toJsonTree(statList)); - stats.add(statJson); - } - json.add(VALUE_KEY, new Gson().toJsonTree(stats)); - json.add(SERIES_KEY, new Gson().toJsonTree(seriesList)); - return json; - } -} diff --git a/src/main/java/com/android/vts/util/DatastoreHelper.java b/src/main/java/com/android/vts/util/DatastoreHelper.java deleted file mode 100644 index 782887b..0000000 --- a/src/main/java/com/android/vts/util/DatastoreHelper.java +++ /dev/null @@ -1,246 +0,0 @@ -/** - * Copyright 2016 Google Inc. All Rights Reserved. - * - * <p>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 - * - * <p>http://www.apache.org/licenses/LICENSE-2.0 - * - * <p>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.util; - - -import com.android.vts.entity.ApiCoverageEntity; -import com.android.vts.entity.BranchEntity; -import com.android.vts.entity.BuildTargetEntity; -import com.android.vts.entity.CodeCoverageEntity; -import com.android.vts.entity.CoverageEntity; -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.entity.TestRunEntity.TestRunType; -import com.android.vts.job.VtsAlertJobServlet; -import com.android.vts.job.VtsCoverageAlertJobServlet; -import com.android.vts.job.VtsProfilingStatsJobServlet; -import com.android.vts.proto.VtsReportMessage.AndroidDeviceInfoMessage; -import com.android.vts.proto.VtsReportMessage.ApiCoverageReportMessage; -import com.android.vts.proto.VtsReportMessage.CoverageReportMessage; -import com.android.vts.proto.VtsReportMessage.HalInterfaceMessage; -import com.android.vts.proto.VtsReportMessage.LogMessage; -import com.android.vts.proto.VtsReportMessage.ProfilingReportMessage; -import com.android.vts.proto.VtsReportMessage.TestCaseReportMessage; -import com.android.vts.proto.VtsReportMessage.TestCaseResult; -import com.android.vts.proto.VtsReportMessage.TestPlanReportMessage; -import com.android.vts.proto.VtsReportMessage.TestReportMessage; -import com.android.vts.proto.VtsReportMessage.UrlResourceMessage; -import com.google.appengine.api.datastore.DatastoreFailureException; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.DatastoreTimeoutException; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.FetchOptions; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.FilterOperator; -import com.google.appengine.api.datastore.Query.FilterPredicate; -import com.google.appengine.api.datastore.Transaction; -import com.google.appengine.api.datastore.TransactionOptions; -import com.google.common.collect.Lists; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.ConcurrentModificationException; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -/** - * DatastoreHelper, a helper class for interacting with Cloud Datastore. - */ -public class DatastoreHelper { - - /** - * The default kind name for datastore - */ - public static final String NULL_ENTITY_KIND = "nullEntity"; - - public static final int MAX_WRITE_RETRIES = 5; - /** - * This variable is for maximum number of entities per transaction You can find the detail here - * (https://cloud.google.com/datastore/docs/concepts/limits) - */ - public static final int MAX_ENTITY_SIZE_PER_TRANSACTION = 300; - - protected static final Logger logger = Logger.getLogger(DatastoreHelper.class.getName()); - private static final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - /** - * Get query fetch options for large batches of entities. - * - * @return FetchOptions with a large chunk and prefetch size. - */ - public static FetchOptions getLargeBatchOptions() { - return FetchOptions.Builder.withChunkSize(1000).prefetchSize(1000); - } - - /** - * Returns true if there are data points newer than lowerBound in the results table. - * - * @param parentKey The parent key to use in the query. - * @param kind The query entity kind. - * @param lowerBound The (exclusive) lower time bound, long, microseconds. - * @return boolean True if there are newer data points. - */ - public static boolean hasNewer(Key parentKey, String kind, Long lowerBound) { - if (lowerBound == null || lowerBound <= 0) { - return false; - } - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Key startKey = KeyFactory.createKey(parentKey, kind, lowerBound); - Filter startFilter = - new FilterPredicate( - Entity.KEY_RESERVED_PROPERTY, FilterOperator.GREATER_THAN, startKey); - Query q = new Query(kind).setAncestor(parentKey).setFilter(startFilter).setKeysOnly(); - return datastore.prepare(q).countEntities(FetchOptions.Builder.withLimit(1)) > 0; - } - - /** - * Returns true if there are data points older than upperBound in the table. - * - * @param parentKey The parent key to use in the query. - * @param kind The query entity kind. - * @param upperBound The (exclusive) upper time bound, long, microseconds. - * @return boolean True if there are older data points. - */ - public static boolean hasOlder(Key parentKey, String kind, Long upperBound) { - if (upperBound == null || upperBound <= 0) { - return false; - } - Key endKey = KeyFactory.createKey(parentKey, kind, upperBound); - Filter endFilter = - new FilterPredicate(Entity.KEY_RESERVED_PROPERTY, FilterOperator.LESS_THAN, endKey); - Query q = new Query(kind).setAncestor(parentKey).setFilter(endFilter).setKeysOnly(); - return datastore.prepare(q).countEntities(FetchOptions.Builder.withLimit(1)) > 0; - } - - /** - * Get all of the devices branches. - * - * @return a list of all branches. - */ - public static List<String> getAllBranches() { - Query query = new Query(BranchEntity.KIND).setKeysOnly(); - List<String> branches = new ArrayList<>(); - for (Entity e : datastore.prepare(query).asIterable(getLargeBatchOptions())) { - branches.add(e.getKey().getName()); - } - return branches; - } - - /** - * Get all of the device build flavors. - * - * @return a list of all device build flavors. - */ - public static List<String> getAllBuildFlavors() { - Query query = new Query(BuildTargetEntity.KIND).setKeysOnly(); - List<String> devices = new ArrayList<>(); - for (Entity e : datastore.prepare(query).asIterable(getLargeBatchOptions())) { - devices.add(e.getKey().getName()); - } - return devices; - } - - /** - * Datastore Transactional process for data insertion with MAX_WRITE_RETRIES times and withXG of - * false value - * - * @param entity The entity that you want to insert to datastore. - * @param entityList The list of entity for using datastore put method. - */ - private static boolean datastoreTransactionalRetry(Entity entity, List<Entity> entityList) { - return datastoreTransactionalRetryWithXG(entity, entityList, false); - } - - /** - * Datastore Transactional process for data insertion with MAX_WRITE_RETRIES times - * - * @param entity The entity that you want to insert to datastore. - * @param entityList The list of entity for using datastore put method. - */ - private static boolean datastoreTransactionalRetryWithXG( - Entity entity, List<Entity> entityList, boolean withXG) { - int retries = 0; - while (true) { - Transaction txn; - if (withXG) { - TransactionOptions options = TransactionOptions.Builder.withXG(withXG); - txn = datastore.beginTransaction(options); - } else { - txn = datastore.beginTransaction(); - } - - try { - // Check if test already exists in the database - if (!entity.getKind().equalsIgnoreCase(NULL_ENTITY_KIND)) { - try { - if (entity.getKind().equalsIgnoreCase("Test")) { - Entity datastoreEntity = datastore.get(entity.getKey()); - TestEntity datastoreTestEntity = TestEntity.fromEntity(datastoreEntity); - if (datastoreTestEntity == null - || !datastoreTestEntity.equals(entity)) { - entityList.add(entity); - } - } else if (entity.getKind().equalsIgnoreCase("TestPlan")) { - datastore.get(entity.getKey()); - } else { - datastore.get(entity.getKey()); - } - } catch (EntityNotFoundException e) { - entityList.add(entity); - } - } - datastore.put(txn, entityList); - txn.commit(); - break; - } catch (ConcurrentModificationException - | DatastoreFailureException - | DatastoreTimeoutException e) { - entityList.remove(entity); - logger.log( - Level.WARNING, - "Retrying insert kind: " + entity.getKind() + " key: " + entity.getKey()); - if (retries++ >= MAX_WRITE_RETRIES) { - logger.log( - Level.SEVERE, - "Exceeded maximum retries kind: " - + entity.getKind() - + " key: " - + entity.getKey()); - return false; - } - } finally { - if (txn.isActive()) { - logger.log( - Level.WARNING, "Transaction rollback forced for : " + entity.getKind()); - txn.rollback(); - } - } - } - return true; - } -} diff --git a/src/main/java/com/android/vts/util/EmailHelper.java b/src/main/java/com/android/vts/util/EmailHelper.java deleted file mode 100644 index de1d6e9..0000000 --- a/src/main/java/com/android/vts/util/EmailHelper.java +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Copyright 2016 Google Inc. All Rights Reserved. - * - * <p>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 - * - * <p>http://www.apache.org/licenses/LICENSE-2.0 - * - * <p>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.util; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.entity.UserFavoriteEntity; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.FilterOperator; -import com.google.appengine.api.datastore.Query.FilterPredicate; -import java.io.IOException; -import java.io.UnsupportedEncodingException; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Properties; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; -import org.apache.commons.lang.StringUtils; - -/** EmailHelper, a helper class for building and sending emails. */ -public class EmailHelper { - protected static final Logger logger = Logger.getLogger(EmailHelper.class.getName()); - protected static String DEFAULT_EMAIL; - protected static String EMAIL_DOMAIN; - protected static String SENDER_EMAIL; - private static final String VTS_EMAIL_NAME = "VTS Alert Bot"; - - public static void setPropertyValues(Properties systemConfigProp) { - DEFAULT_EMAIL = systemConfigProp.getProperty("appengine.defaultEmail"); - EMAIL_DOMAIN = systemConfigProp.getProperty("appengine.emailDomain"); - SENDER_EMAIL = systemConfigProp.getProperty("appengine.senderEmail"); - } - - /** - * Create an email footer with the information from the test run. - * - * @param testRun The TestRunEntity containing test run metadata, or null. - * @param devices The list of devices whose fingerprints to include in the email, or null. - * @param link A link to the Dashboard page containing more information. - * @return The String email footer. - */ - public static String getEmailFooter( - TestRunEntity testRun, List<DeviceInfoEntity> devices, String link) { - StringBuilder sb = new StringBuilder(); - sb.append("<br><br>"); - if (devices != null) { - for (DeviceInfoEntity device : devices) { - sb.append("Device: " + device.getFingerprint() + "<br>"); - } - } - - if (testRun != null) { - sb.append("VTS Build ID: " + testRun.getTestBuildId() + "<br>"); - sb.append("Start Time: " + TimeUtil.getDateTimeZoneString(testRun.getStartTimestamp())); - sb.append("<br>End Time: " + TimeUtil.getDateTimeZoneString(testRun.getEndTimestamp())); - } - sb.append( - "<br><br>For details, visit the" - + " <a href='" - + link - + "'>" - + "VTS dashboard.</a>"); - return sb.toString(); - } - - /** - * Fetches the list of subscriber email addresses for a test. - * - * @param testKey The key for the test for which to fetch the email addresses. - * @returns List of email addresses (String). - * @throws IOException - */ - public static List<String> getSubscriberEmails(Key testKey) throws IOException { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Filter testFilter = - new FilterPredicate(UserFavoriteEntity.TEST_KEY, FilterOperator.EQUAL, testKey); - Query favoritesQuery = new Query(UserFavoriteEntity.KIND).setFilter(testFilter); - Set<String> emailSet = new HashSet<>(); - if (!StringUtils.isBlank(DEFAULT_EMAIL)) { - emailSet.add(DEFAULT_EMAIL); - } - for (Entity favorite : datastore.prepare(favoritesQuery).asIterable()) { - UserFavoriteEntity favoriteEntity = UserFavoriteEntity.fromEntity(favorite); - // TODO this logic need to be reexamined thoroughly and improved - if (favoriteEntity != null - && favoriteEntity.user != null - && !favoriteEntity.muteNotifications) { - Optional<String> userEmail = Optional.of(favoriteEntity.user.getEmail()); - if (userEmail.isPresent() && - userEmail.orElse("").endsWith(EMAIL_DOMAIN)) { - emailSet.add(favoriteEntity.user.getEmail()); - } - } - } - return new ArrayList<>(emailSet); - } - - /** - * Sends an email to the specified email address to notify of a test status change. - * - * @param emails List of subscriber email addresses (byte[]) to which the email should be sent. - * @param subject The email subject field, string. - * @param body The html (string) body to send in the email. - * @returns The Message object to be sent. - * @throws MessagingException, UnsupportedEncodingException - */ - public static Message composeEmail(List<String> emails, String subject, String body) - throws MessagingException, UnsupportedEncodingException { - if (emails.size() == 0) { - throw new MessagingException("No subscriber email addresses provided"); - } - Properties props = new Properties(); - Session session = Session.getDefaultInstance(props, null); - - Message msg = new MimeMessage(session); - for (String email : emails) { - try { - msg.addRecipient(Message.RecipientType.TO, new InternetAddress(email, email)); - } catch (MessagingException | UnsupportedEncodingException e) { - // Gracefully continue when a subscriber email is invalid. - logger.log(Level.WARNING, "Error sending email to recipient " + email + " : ", e); - } - } - msg.setFrom(new InternetAddress(SENDER_EMAIL, VTS_EMAIL_NAME)); - msg.setSubject(subject); - msg.setContent(body, "text/html; charset=utf-8"); - return msg; - } - - /** - * Sends an email. - * - * @param msg Message object to send. - * @returns true if the message sends successfully, false otherwise - */ - public static boolean send(Message msg) { - try { - Transport.send(msg); - } catch (MessagingException e) { - logger.log(Level.WARNING, "Error sending email : ", e); - return false; - } - return true; - } - - /** - * Sends a list of emails and logs any failures. - * - * @param messages List of Message objects to be sent. - */ - public static void sendAll(List<Message> messages) { - for (Message msg : messages) { - send(msg); - } - } - - /** - * Sends an email. - * - * @param recipients List of email address strings to which an email will be sent. - * @param subject The subject of the email. - * @param body The body of the email. - * @returns true if the message sends successfully, false otherwise - */ - public static boolean send(List<String> recipients, String subject, String body) { - try { - Message msg = composeEmail(recipients, subject, body); - return send(msg); - } catch (MessagingException | UnsupportedEncodingException e) { - logger.log(Level.WARNING, "Error composing email : ", e); - return false; - } - } -} diff --git a/src/main/java/com/android/vts/util/FilterUtil.java b/src/main/java/com/android/vts/util/FilterUtil.java deleted file mode 100644 index 5a567e5..0000000 --- a/src/main/java/com/android/vts/util/FilterUtil.java +++ /dev/null @@ -1,537 +0,0 @@ -/** - * Copyright 2016 Google Inc. All Rights Reserved. - * - * <p>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 - * - * <p>http://www.apache.org/licenses/LICENSE-2.0 - * - * <p>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.util; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.TestRunEntity; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.FetchOptions; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.CompositeFilterOperator; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.FilterOperator; -import com.google.appengine.api.datastore.Query.FilterPredicate; -import com.google.common.collect.Sets; -import com.google.gson.Gson; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; - -/** FilterUtil, a helper class for parsing and matching search queries to data. */ -public class FilterUtil { - protected static final Logger logger = Logger.getLogger(FilterUtil.class.getName()); - private static final String INEQUALITY_REGEX = "(<=|>=|<|>|=)"; - - /** Key class to represent a filter token. */ - public enum FilterKey { - DEVICE_BUILD_ID("deviceBuildId", DeviceInfoEntity.BUILD_ID, true), - BRANCH("branch", DeviceInfoEntity.BRANCH, true), - TARGET("device", DeviceInfoEntity.BUILD_FLAVOR, true), - VTS_BUILD_ID("testBuildId", TestRunEntity.TEST_BUILD_ID, false), - HOSTNAME("hostname", TestRunEntity.HOST_NAME, false), - PASSING("passing", TestRunEntity.PASS_COUNT, false), - NONPASSING("nonpassing", TestRunEntity.FAIL_COUNT, false); - - private static final Map<String, FilterKey> keyMap; - - static { - keyMap = new HashMap<>(); - for (FilterKey k : EnumSet.allOf(FilterKey.class)) { - keyMap.put(k.keyString, k); - } - } - - /** - * Test if a string is a valid device key. - * - * @param keyString The key string. - * @return True if they key string matches a key and the key is a device filter. - */ - public static boolean isDeviceKey(String keyString) { - return keyMap.containsKey(keyString) && keyMap.get(keyString).isDevice; - } - - /** - * Test if a string is a valid test key. - * - * @param keyString The key string. - * @return True if they key string matches a key and the key is a test filter. - */ - public static boolean isTestKey(String keyString) { - return keyMap.containsKey(keyString) && !keyMap.get(keyString).isDevice; - } - - /** - * Parses a key string into a key. - * - * @param keyString The key string. - * @return The key matching the key string. - */ - public static FilterKey parse(String keyString) { - return keyMap.get(keyString); - } - - private final String keyString; - private final String property; - private final boolean isDevice; - - /** - * Constructs a key with the specified key string. - * - * @param keyString The identifying key string. - * @param propertyName The name of the property to match. - */ - private FilterKey(String keyString, String propertyName, boolean isDevice) { - this.keyString = keyString; - this.property = propertyName; - this.isDevice = isDevice; - } - - /** - * Return a filter predicate for string equality. - * - * @param matchString The string to match. - * @return A filter predicate enforcing equality on the property. - */ - public FilterPredicate getFilterForString(String matchString) { - return new FilterPredicate(this.property, FilterOperator.EQUAL, matchString); - } - - /** - * Return a filter predicate for number inequality or equality. - * - * @param matchNumber A string, either a number or an inequality symbol followed by a - * number. - * @return A filter predicate enforcing equality on the property, or null if invalid. - */ - public FilterPredicate getFilterForNumber(String matchNumber) { - String numberString = matchNumber.trim(); - Pattern p = Pattern.compile(INEQUALITY_REGEX); - Matcher m = p.matcher(numberString); - - // Default operator is equality. - FilterOperator op = FilterOperator.EQUAL; - - // Determine if there is an inequality operator. - if (m.find() && m.start() == 0 && m.end() != numberString.length()) { - String opString = m.group(); - - // Inequality operator can be <=, <, >, >=, or =. - if (opString.equals("<=")) { - op = FilterOperator.LESS_THAN_OR_EQUAL; - } else if (opString.equals("<")) { - op = FilterOperator.LESS_THAN; - } else if (opString.equals(">")) { - op = FilterOperator.GREATER_THAN; - } else if (opString.equals(">=")) { - op = FilterOperator.GREATER_THAN_OR_EQUAL; - } else if (!opString.equals("=")) { // unrecognized inequality. - return null; - } - numberString = matchNumber.substring(m.end()).trim(); - } - try { - long number = Long.parseLong(numberString); - return new FilterPredicate(this.property, op, number); - } catch (NumberFormatException e) { - // invalid number - return null; - } - } - - /** - * Get the enum value - * - * @return The string value associated with the key. - */ - public String getValue() { - return this.keyString; - } - } - - /** - * Get the common elements among multiple collections. - * - * @param collections The collections containing all sub collections to find common element. - * @return The common elements set found from the collections param. - */ - public static <T> Set<T> getCommonElements(Collection<? extends Collection<T>> collections) { - - Set<T> common = new LinkedHashSet<T>(); - if (!collections.isEmpty()) { - Iterator<? extends Collection<T>> iterator = collections.iterator(); - common.addAll(iterator.next()); - while (iterator.hasNext()) { - common.retainAll(iterator.next()); - } - } - return common; - } - - /** - * Get the first value associated with the key in the parameter map. - * - * @param parameterMap The parameter map with string keys and (Object) String[] values. - * @param key The key whose value to get. - * @return The first value associated with the provided 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]; - } - - /** - * Get a filter on devices from a user search query. - * - * @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, String[]> parameterMap) { - Filter deviceFilter = null; - for (String key : parameterMap.keySet()) { - if (!FilterKey.isDeviceKey(key)) continue; - String value = getFirstParameter(parameterMap, key); - if (value == null) continue; - FilterKey filterKey = FilterKey.parse(key); - Filter f = filterKey.getFilterForString(value); - if (deviceFilter == null) { - deviceFilter = f; - } else { - deviceFilter = CompositeFilterOperator.and(deviceFilter, f); - } - } - return deviceFilter; - } - - /** - * Get a list of test filters given the user parameters. - * - * @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, String[]> parameterMap) { - List<Filter> userFilters = new ArrayList<>(); - for (String key : parameterMap.keySet()) { - if (!FilterKey.isTestKey(key)) continue; - String stringValue = getFirstParameter(parameterMap, key); - if (stringValue == null) continue; - FilterKey filterKey = FilterKey.parse(key); - switch (filterKey) { - case NONPASSING: - case PASSING: - userFilters.add(filterKey.getFilterForNumber(stringValue)); - break; - case HOSTNAME: - case VTS_BUILD_ID: - userFilters.add(filterKey.getFilterForString(stringValue.toLowerCase())); - break; - default: - continue; - } - } - return userFilters; - } - - /** - * Get a filter on the test run type. - * - * @param showPresubmit True to display presubmit tests. - * @param showPostsubmit True to display postsubmit tests. - * @param unfiltered True if no filtering should be applied. - * @return A filter on the test type. - */ - public static Filter getTestTypeFilter( - boolean showPresubmit, boolean showPostsubmit, boolean unfiltered) { - if (unfiltered) { - return null; - } else if (showPresubmit && !showPostsubmit) { - return new FilterPredicate( - TestRunEntity.TYPE, - FilterOperator.EQUAL, - TestRunEntity.TestRunType.PRESUBMIT.getNumber()); - } else if (showPostsubmit && !showPresubmit) { - return new FilterPredicate( - TestRunEntity.TYPE, - FilterOperator.EQUAL, - TestRunEntity.TestRunType.POSTSUBMIT.getNumber()); - } else { - List<Integer> types = new ArrayList<>(); - types.add(TestRunEntity.TestRunType.PRESUBMIT.getNumber()); - types.add(TestRunEntity.TestRunType.POSTSUBMIT.getNumber()); - return new FilterPredicate(TestRunEntity.TYPE, FilterOperator.IN, types); - } - } - - /** - * Get a filter for profiling points between a specified time window. - * - * @param grandparentKey The key of the profiling point grandparent entity. - * @param parentKind The kind of the profiling point parent. - * @param startTime The start time of the window, or null if unbounded. - * @param endTime The end time of the window, or null if unbounded. - * @return A filter to query for profiling points in the time window. - */ - public static Filter getProfilingTimeFilter( - Key grandparentKey, String parentKind, Long startTime, Long endTime) { - if (startTime == null && endTime == null) { - endTime = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - } - Filter startFilter = null; - Filter endFilter = null; - Filter filter = null; - if (startTime != null) { - Key minRunKey = KeyFactory.createKey(grandparentKey, parentKind, startTime); - Key startKey = - KeyFactory.createKey( - minRunKey, ProfilingPointRunEntity.KIND, String.valueOf((char) 0x0)); - startFilter = - new FilterPredicate( - Entity.KEY_RESERVED_PROPERTY, - FilterOperator.GREATER_THAN_OR_EQUAL, - startKey); - filter = startFilter; - } - if (endTime != null) { - Key maxRunKey = KeyFactory.createKey(grandparentKey, parentKind, endTime); - Key endKey = - KeyFactory.createKey( - maxRunKey, ProfilingPointRunEntity.KIND, String.valueOf((char) 0xff)); - endFilter = - new FilterPredicate( - Entity.KEY_RESERVED_PROPERTY, - FilterOperator.LESS_THAN_OR_EQUAL, - endKey); - filter = endFilter; - } - if (startFilter != null && endFilter != null) { - filter = CompositeFilterOperator.and(startFilter, endFilter); - } - return filter; - } - - /** - * Get a filter for device information between a specified time window. - * - * @param grandparentKey The key of the device's grandparent entity. - * @param parentKind The kind of the device's parent. - * @param startTime The start time of the window, or null if unbounded. - * @param endTime The end time of the window, or null if unbounded. - * @return A filter to query for devices in the time window. - */ - public static Filter getDeviceTimeFilter( - Key grandparentKey, String parentKind, Long startTime, Long endTime) { - if (startTime == null && endTime == null) { - endTime = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - } - Filter startFilter = null; - Filter endFilter = null; - Filter filter = null; - if (startTime != null) { - Key minRunKey = KeyFactory.createKey(grandparentKey, parentKind, startTime); - Key startKey = KeyFactory.createKey(minRunKey, DeviceInfoEntity.KIND, 1); - startFilter = - new FilterPredicate( - Entity.KEY_RESERVED_PROPERTY, - FilterOperator.GREATER_THAN_OR_EQUAL, - startKey); - filter = startFilter; - } - if (endTime != null) { - Key maxRunKey = KeyFactory.createKey(grandparentKey, parentKind, endTime); - Key endKey = KeyFactory.createKey(maxRunKey, DeviceInfoEntity.KIND, Long.MAX_VALUE); - endFilter = - new FilterPredicate( - Entity.KEY_RESERVED_PROPERTY, - FilterOperator.LESS_THAN_OR_EQUAL, - endKey); - filter = endFilter; - } - if (startFilter != null && endFilter != null) { - filter = CompositeFilterOperator.and(startFilter, endFilter); - } - return filter; - } - - /** - * Get the time range filter to apply to a query. - * - * @param testKey The key of the parent TestEntity object. - * @param kind The kind to use for the filters. - * @param startTime The start time in microseconds, or null if unbounded. - * @param endTime The end time in microseconds, or null if unbounded. - * @param testRunFilter The existing filter on test runs to apply, or null. - * @return A filter to apply on test runs. - */ - public static Filter getTimeFilter( - Key testKey, String kind, Long startTime, Long endTime, Filter testRunFilter) { - if (startTime == null && endTime == null) { - endTime = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - } - - Filter startFilter = null; - Filter endFilter = null; - Filter filter = null; - if (startTime != null) { - Key startKey = KeyFactory.createKey(testKey, kind, startTime); - startFilter = - new FilterPredicate( - Entity.KEY_RESERVED_PROPERTY, - FilterOperator.GREATER_THAN_OR_EQUAL, - startKey); - filter = startFilter; - } - if (endTime != null) { - Key endKey = KeyFactory.createKey(testKey, kind, endTime); - endFilter = - new FilterPredicate( - Entity.KEY_RESERVED_PROPERTY, - FilterOperator.LESS_THAN_OR_EQUAL, - endKey); - filter = endFilter; - } - if (startFilter != null && endFilter != null) { - filter = CompositeFilterOperator.and(startFilter, endFilter); - } - if (testRunFilter != null) { - filter = CompositeFilterOperator.and(filter, testRunFilter); - } - return filter; - } - - public static Filter getTimeFilter(Key testKey, String kind, Long startTime, Long endTime) { - return getTimeFilter(testKey, kind, startTime, endTime, null); - } - - /** - * Get the list of keys matching the provided test filter and device filter. - * - * @param ancestorKey The ancestor key to use in the query. - * @param kind The entity kind to use in the test query. - * @param testFilters The filter list to apply to test runs (each having <=1 inequality filter). - * @param deviceFilter The filter to apply to associated devices. - * @param dir The sort direction of the returned list. - * @param maxSize The maximum number of entities to return. - * @return a list of keys matching the provided test and device filters. - */ - public static List<Key> getMatchingKeys( - Key ancestorKey, - String kind, - List<Filter> testFilters, - Filter deviceFilter, - Query.SortDirection dir, - int maxSize) { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Set<Key> matchingTestKeys = null; - Key minKey = null; - Key maxKey = null; - for (Filter testFilter : testFilters) { - Query testQuery = - new Query(kind).setAncestor(ancestorKey).setFilter(testFilter).setKeysOnly(); - Set<Key> filterMatches = new HashSet<>(); - FetchOptions ops = DatastoreHelper.getLargeBatchOptions(); - if (deviceFilter == null && testFilters.size() == 1) { - ops.limit(maxSize); - testQuery.addSort(Entity.KEY_RESERVED_PROPERTY, dir); - } - logger.log(Level.INFO, "testQuery => " + testQuery); - for (Entity testRunKey : datastore.prepare(testQuery).asIterable(ops)) { - filterMatches.add(testRunKey.getKey()); - if (maxKey == null || testRunKey.getKey().compareTo(maxKey) > 0) - maxKey = testRunKey.getKey(); - if (minKey == null || testRunKey.getKey().compareTo(minKey) < 0) - minKey = testRunKey.getKey(); - } - if (matchingTestKeys == null) { - matchingTestKeys = filterMatches; - } else { - matchingTestKeys = Sets.intersection(matchingTestKeys, filterMatches); - } - } - logger.log(Level.INFO, "matchingTestKeys => " + matchingTestKeys); - - Set<Key> allMatchingKeys; - if (deviceFilter == null || matchingTestKeys.size() == 0) { - allMatchingKeys = matchingTestKeys; - } else { - deviceFilter = - CompositeFilterOperator.and( - deviceFilter, - getDeviceTimeFilter( - minKey.getParent(), - minKey.getKind(), - minKey.getId(), - maxKey.getId())); - allMatchingKeys = new HashSet<>(); - Query deviceQuery = - new Query(DeviceInfoEntity.KIND) - .setAncestor(ancestorKey) - .setFilter(deviceFilter) - .setKeysOnly(); - for (Entity device : - datastore - .prepare(deviceQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())) { - if (matchingTestKeys.contains(device.getKey().getParent())) { - allMatchingKeys.add(device.getKey().getParent()); - } - } - } - logger.log(Level.INFO, "allMatchingKeys => " + allMatchingKeys); - List<Key> gets = new ArrayList<>(allMatchingKeys); - if (dir == Query.SortDirection.DESCENDING) { - gets.sort(Comparator.reverseOrder()); - } else { - gets.sort(Comparator.naturalOrder()); - } - gets = gets.subList(0, Math.min(gets.size(), maxSize)); - return gets; - } - - /** - * Set the request with the provided key/value attribute map. - * - * @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, String[]> parameterMap) { - for (String key : parameterMap.keySet()) { - if (!FilterKey.isDeviceKey(key) && !FilterKey.isTestKey(key)) continue; - FilterKey filterKey = FilterKey.parse(key); - String[] values = parameterMap.get(key); - if (values.length == 0) continue; - String stringValue = values[0]; - request.setAttribute(filterKey.keyString, new Gson().toJson(stringValue)); - } - } -} diff --git a/src/main/java/com/android/vts/util/GcsHelper.java b/src/main/java/com/android/vts/util/GcsHelper.java deleted file mode 100644 index b2c6aac..0000000 --- a/src/main/java/com/android/vts/util/GcsHelper.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.android.vts.util; - -import com.google.auth.oauth2.ServiceAccountCredentials; -import com.google.cloud.storage.Storage; -import com.google.cloud.storage.StorageOptions; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Optional; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** GcsHelper, a helper class for interacting with Google Cloud Storage. */ -public class GcsHelper { - private static final Logger logger = Logger.getLogger(GcsHelper.class.getName()); - - /** Google Cloud Storage project ID */ - private static String GCS_PROJECT_ID; - - public static void setGcsProjectId(String gcsProjectId) { - GCS_PROJECT_ID = gcsProjectId; - } - - /** - * Get GCS storage from Key file input stream parameter. - */ - public static Optional<Storage> getStorage(InputStream keyFileInputStream) { - - if (keyFileInputStream == null) { - logger.log(Level.SEVERE, "Error GCS key file is not exiting. Check key file!"); - return Optional.empty(); - } else { - try { - Storage storage = - StorageOptions.newBuilder() - .setProjectId(GCS_PROJECT_ID) - .setCredentials( - ServiceAccountCredentials.fromStream(keyFileInputStream)) - .build() - .getService(); - return Optional.of(storage); - } catch (IOException e) { - logger.log(Level.SEVERE, "Error on creating storage instance!"); - return Optional.empty(); - } - } - } -} diff --git a/src/main/java/com/android/vts/util/Graph.java b/src/main/java/com/android/vts/util/Graph.java deleted file mode 100644 index 00c2a3d..0000000 --- a/src/main/java/com/android/vts/util/Graph.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.android.vts.entity.ProfilingPointRunEntity; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; - -/** Helper object for describing graph data. */ -public abstract class Graph { - public static final String VALUE_KEY = "values"; - public static final String X_LABEL_KEY = "x_label"; - public static final String Y_LABEL_KEY = "y_label"; - public static final String IDS_KEY = "ids"; - public static final String NAME_KEY = "name"; - public static final String TYPE_KEY = "type"; - - public static enum GraphType { LINE_GRAPH, HISTOGRAM, BOX_PLOT } - - /** - * Get the graph type. - * - * @return The graph type. - */ - public abstract GraphType getType(); - - /** - * Get the x axis label. - * - * @return The x axis label. - */ - public abstract String getXLabel(); - - /** - * Get the y axis label. - * - * @return The y axis label. - */ - public abstract String getYLabel(); - - /** - * Get the name of the graph. - * - * @return The name of the graph. - */ - public abstract String getName(); - - /** - * Get the number of data points stored in the graph. - * - * @return The number of data points stored in the graph. - */ - public abstract int size(); - - /** - * Add data to the graph. - * - * @param id The name of the graph. - * @param profilingPoint The ProfilingPointEntity containing data to add. - */ - public abstract void addData(String id, ProfilingPointRunEntity profilingPoint); - - /** - * Serializes the graph to json format. - * - * @return A JsonElement object representing the graph object. - */ - public JsonObject toJson() { - JsonObject json = new JsonObject(); - json.add(X_LABEL_KEY, new JsonPrimitive(getXLabel())); - json.add(Y_LABEL_KEY, new JsonPrimitive(getYLabel())); - json.add(NAME_KEY, new JsonPrimitive(getName())); - json.add(TYPE_KEY, new JsonPrimitive(getType().toString())); - return json; - } -} diff --git a/src/main/java/com/android/vts/util/GraphSerializer.java b/src/main/java/com/android/vts/util/GraphSerializer.java deleted file mode 100644 index 722b511..0000000 --- a/src/main/java/com/android/vts/util/GraphSerializer.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.google.gson.JsonElement; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import java.lang.reflect.Type; - -/** Serializer class for Graph objects. */ -public class GraphSerializer implements JsonSerializer<Graph> { - @Override - public JsonElement serialize(Graph src, Type typeOfSrc, JsonSerializationContext context) { - return src.toJson(); - } -} diff --git a/src/main/java/com/android/vts/util/Histogram.java b/src/main/java/com/android/vts/util/Histogram.java deleted file mode 100644 index 2f62a57..0000000 --- a/src/main/java/com/android/vts/util/Histogram.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.android.vts.entity.ProfilingPointRunEntity; -import com.google.common.primitives.Doubles; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import java.util.ArrayList; -import java.util.List; -import org.apache.commons.math3.stat.descriptive.rank.Percentile; - -/** Helper object for describing graph data. */ -public class Histogram extends Graph { - public static final String PERCENTILES_KEY = "percentiles"; - public static final String PERCENTILE_VALUES_KEY = "percentile_values"; - public static final String MIN_KEY = "min"; - public static final String MAX_KEY = "max"; - - private List<Double> values; - private List<String> ids; - private String xLabel; - private String yLabel; - private String name; - private GraphType type = GraphType.HISTOGRAM; - private Double min = null; - private Double max = null; - - public Histogram(String name) { - this.name = name; - this.values = new ArrayList<>(); - this.ids = new ArrayList<>(); - } - - /** - * Get the x axis label. - * - * @return The x axis label. - */ - @Override - public String getXLabel() { - return xLabel; - } - - /** - * Get the graph type. - * - * @return The graph type. - */ - @Override - public GraphType getType() { - return type; - } - - /** - * Get the name of the graph. - * - * @return The name of the graph. - */ - @Override - public String getName() { - return name; - } - - /** - * Get the y axis label. - * - * @return The y axis label. - */ - @Override - public String getYLabel() { - return yLabel; - } - - /** - * Get the number of data points stored in the graph. - * - * @return The number of data points stored in the graph. - */ - @Override - public int size() { - return values.size(); - } - - /** - * Get the minimum value. - * - * @return The minimum value. - */ - public Double getMin() { - return min; - } - - /** - * Get the maximum value. - * - * @return The maximum value. - */ - public Double getMax() { - return max; - } - - /** - * Add data to the graph. - * - * @param id The name of the graph. - * @param profilingPoint The ProfilingPointRunEntity containing data to add. - */ - @Override - public void addData(String id, ProfilingPointRunEntity profilingPoint) { - if (profilingPoint.getValues().size() == 0) - return; - xLabel = profilingPoint.getXLabel(); - yLabel = profilingPoint.getYLabel(); - for (long v : profilingPoint.getValues()) { - double value = v; - values.add(value); - ids.add(id); - if (max == null || value > max) - max = value; - if (min == null || value < min) - min = value; - } - } - - /** - * Serializes the graph to json format. - * - * @return A JsonElement object representing the graph object. - */ - @Override - public JsonObject toJson() { - int[] percentiles = {1, 2, 5, 10, 25, 50, 75, 90, 95, 98, 99}; - double[] percentileValues = new double[percentiles.length]; - double[] valueList = Doubles.toArray(values); - for (int i = 0; i < percentiles.length; i++) { - percentileValues[i] = - Math.round(new Percentile().evaluate(valueList, percentiles[i]) * 1000d) - / 1000d; - } - JsonObject json = super.toJson(); - json.add(VALUE_KEY, new Gson().toJsonTree(values).getAsJsonArray()); - json.add(PERCENTILES_KEY, new Gson().toJsonTree(percentiles).getAsJsonArray()); - json.add(PERCENTILE_VALUES_KEY, new Gson().toJsonTree(percentileValues).getAsJsonArray()); - json.add(IDS_KEY, new Gson().toJsonTree(ids).getAsJsonArray()); - json.add(MIN_KEY, new JsonPrimitive(min)); - json.add(MAX_KEY, new JsonPrimitive(max)); - return json; - } -} diff --git a/src/main/java/com/android/vts/util/LineGraph.java b/src/main/java/com/android/vts/util/LineGraph.java deleted file mode 100644 index 4788961..0000000 --- a/src/main/java/com/android/vts/util/LineGraph.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.android.vts.entity.ProfilingPointRunEntity; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** Helper object for describing graph data. */ -public class LineGraph extends Graph { - public static final String TICKS_KEY = "ticks"; - - private List<ProfilingPointRunEntity> profilingRuns; - private List<String> ids; - private String xLabel; - private String yLabel; - private String name; - private GraphType type = GraphType.LINE_GRAPH; - - public LineGraph(String name) { - this.name = name; - profilingRuns = new ArrayList<>(); - ids = new ArrayList<>(); - } - - /** - * Get the x axis label. - * - * @return The x axis label. - */ - @Override - public String getXLabel() { - return xLabel; - } - - /** - * Get the graph type. - * - * @return The graph type. - */ - @Override - public GraphType getType() { - return type; - } - - /** - * Get the name of the graph. - * - * @return The name of the graph. - */ - @Override - public String getName() { - return name; - } - - /** - * Get the y axis label. - * - * @return The y axis label. - */ - @Override - public String getYLabel() { - return yLabel; - } - - /** - * Get the number of data points stored in the graph. - * - * @return The number of data points stored in the graph. - */ - @Override - public int size() { - return profilingRuns.size(); - } - - /** - * Add data to the graph. - * - * @param id The name of the graph. - * @param profilingPoint The ProfilingPointRunEntity containing data to add. - */ - @Override - public void addData(String id, ProfilingPointRunEntity profilingPoint) { - if (profilingPoint.getValues().size() == 0 - || profilingPoint.getValues().size() != profilingPoint.getLabels().size()) - return; - ids.add(id); - profilingRuns.add(profilingPoint); - xLabel = profilingPoint.getXLabel(); - yLabel = profilingPoint.getYLabel(); - } - - /** - * Serializes the graph to json format. - * - * @return A JsonElement object representing the graph object. - */ - @Override - public JsonObject toJson() { - JsonObject json = super.toJson(); - // Use the most recent profiling vector to generate the labels - ProfilingPointRunEntity profilingRun = profilingRuns.get(profilingRuns.size() - 1); - - List<String> axisTicks = new ArrayList<>(); - Map<String, Integer> tickIndexMap = new HashMap<>(); - for (int i = 0; i < profilingRun.getLabels().size(); i++) { - String label = profilingRun.getLabels().get(i); - axisTicks.add(label); - tickIndexMap.put(label, i); - } - - long[][] lineGraphValues = new long[axisTicks.size()][profilingRuns.size()]; - for (int reportIndex = 0; reportIndex < profilingRuns.size(); reportIndex++) { - ProfilingPointRunEntity pt = profilingRuns.get(reportIndex); - for (int i = 0; i < pt.getLabels().size(); i++) { - String label = pt.getLabels().get(i); - - // Skip value if its label is not present - if (!tickIndexMap.containsKey(label)) - continue; - int labelIndex = tickIndexMap.get(label); - - lineGraphValues[labelIndex][reportIndex] = pt.getValues().get(i); - } - } - json.add(VALUE_KEY, new Gson().toJsonTree(lineGraphValues).getAsJsonArray()); - json.add(IDS_KEY, new Gson().toJsonTree(ids).getAsJsonArray()); - json.add(TICKS_KEY, new Gson().toJsonTree(axisTicks)); - return json; - } -} diff --git a/src/main/java/com/android/vts/util/Pagination.java b/src/main/java/com/android/vts/util/Pagination.java deleted file mode 100644 index 4a0d652..0000000 --- a/src/main/java/com/android/vts/util/Pagination.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.google.cloud.datastore.Cursor; -import com.google.cloud.datastore.QueryResults; -import com.googlecode.objectify.cmd.Query; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -/** Helper class for pagination. */ -public class Pagination<T> implements Iterable<T> { - - /** the default page size */ - public static final int DEFAULT_PAGE_SIZE = 10; - /** the default page window size */ - private static final int DEFAULT_PAGE_WINDOW = 10; - - /** the current page */ - private int page; - - /** the page window size */ - private int pageSize = DEFAULT_PAGE_SIZE; - - /** the total number of found entities */ - private int totalCount; - - /** the previous cursor string token where to start */ - private String previousPageCountToken = ""; - - /** the previous cursor string token where to start */ - private String currentPageCountToken = ""; - - /** the next cursor string token where to start */ - private String nextPageCountToken = ""; - - /** the previous cursor string token list where to start */ - private LinkedHashSet<String> pageCountTokenSet; - - /** the maximum number of pages */ - private int maxPages; - - /** the list of object on the page */ - private List<T> list = new ArrayList<>(); - - public Pagination(List<T> list, int page, int pageSize, int totalCount) { - this.list = list; - this.page = page; - this.pageSize = pageSize; - this.totalCount = totalCount; - } - - public Pagination( - Query<T> query, - int page, - int pageSize, - String startPageToken, - LinkedHashSet<String> pageCountTokenSet) { - this.page = page; - this.pageSize = pageSize; - this.pageCountTokenSet = pageCountTokenSet; - this.currentPageCountToken = startPageToken; - - List<String> pageCountTokenList = - this.pageCountTokenSet.stream().collect(Collectors.toList()); - if (pageCountTokenList.size() > 0) { - int foundIndex = pageCountTokenList.indexOf(startPageToken); - if (foundIndex <= 0) { - this.previousPageCountToken = ""; - } else { - this.previousPageCountToken = pageCountTokenList.get(foundIndex - 1); - } - } - - int limitValue = pageSize * DEFAULT_PAGE_WINDOW + pageSize / 2; - query = query.limit(limitValue); - if (startPageToken.equals("")) { - this.totalCount = query.count(); - } else { - query = query.startAt(Cursor.fromUrlSafe(startPageToken)); - this.totalCount = query.count(); - } - - this.maxPages = - this.totalCount / this.pageSize + (this.totalCount % this.pageSize == 0 ? 0 : 1); - - int iteratorIndex = 0; - int startIndex = (page % pageSize == 0 ? 9 : page % pageSize - 1) * pageSize; - - QueryResults<T> resultIterator = query.iterator(); - while (resultIterator.hasNext()) { - if (startIndex <= iteratorIndex && iteratorIndex < startIndex + this.pageSize) - this.list.add(resultIterator.next()); - else resultIterator.next(); - if (iteratorIndex == DEFAULT_PAGE_WINDOW * this.pageSize) { - if ( Objects.nonNull(resultIterator) && Objects.nonNull(resultIterator.getCursorAfter()) ) { - this.nextPageCountToken = resultIterator.getCursorAfter().toUrlSafe(); - } - } - iteratorIndex++; - } - } - - public Iterator<T> iterator() { - return list.iterator(); - } - - /** - * Gets the total number of objects. - * - * @return the total number of objects as an int - */ - public int getTotalCount() { - return totalCount; - } - - /** - * Gets the number of page window. - * - * @return the number of page window as an int - */ - public int getPageSize() { - return pageSize; - } - - /** - * Gets the maximum number of pages. - * - * @return the maximum number of pages as an int - */ - public int getMaxPages() { - return this.maxPages; - } - - /** - * Gets the page. - * - * @return the page as an int - */ - public int getPage() { - return page; - } - - /** - * Gets the minimum page in the window. - * - * @return the page number - */ - public int getMinPageRange() { - if (this.getPage() <= this.getPageSize()) { - return 1; - } else { - if ((this.getPage() % this.getPageSize()) == 0) { - return (this.getPage() / this.getPageSize() - 1) * this.getPageSize() + 1; - } else { - return this.getPage() / this.getPageSize() * this.getPageSize() + 1; - } - } - } - - /** - * Gets the maximum page in the window. - * - * @return the page number - */ - public int getMaxPageRange() { - if (this.getMaxPages() > this.getPageSize()) { - return getMinPageRange() + this.getPageSize() - 1; - } else { - return this.getMinPageRange() + this.getMaxPages() - 1; - } - } - - /** - * Gets the subset of the list for the current page. - * - * @return a List - */ - public List<T> getList() { - return this.list; - } - - /** - * Gets the cursor token for the previous page starting point. - * - * @return a string of cursor of previous starting point - */ - public String getPreviousPageCountToken() { - return this.previousPageCountToken; - } - - /** - * Gets the cursor token for the current page starting point. - * - * @return a string of cursor of current starting point - */ - public String getCurrentPageCountToken() { - return this.currentPageCountToken; - } - - /** - * Gets the cursor token for the next page starting point. - * - * @return a string of cursor of next starting point - */ - public String getNextPageCountToken() { - return this.nextPageCountToken; - } -} diff --git a/src/main/java/com/android/vts/util/PerformanceSummary.java b/src/main/java/com/android/vts/util/PerformanceSummary.java deleted file mode 100644 index a9ce0b4..0000000 --- a/src/main/java/com/android/vts/util/PerformanceSummary.java +++ /dev/null @@ -1,155 +0,0 @@ -/** - * Copyright 2016 Google Inc. All Rights Reserved. - * - * <p>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 - * - * <p>http://www.apache.org/licenses/LICENSE-2.0 - * - * <p>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.util; - -import com.android.vts.entity.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.google.appengine.api.datastore.Entity; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; -import java.util.logging.Logger; - -/** PerformanceSummary, an object summarizing performance across profiling points for a test run. */ -public class PerformanceSummary { - protected static Logger logger = Logger.getLogger(PerformanceSummary.class.getName()); - private Map<String, ProfilingPointSummary> summaryMap; - - public final long startTime; - public final long endTime; - public final String label; - - /** Creates a performance summary object. */ - public PerformanceSummary(long startTime, long endTime, String label) { - this.summaryMap = new HashMap<>(); - this.startTime = startTime; - this.endTime = endTime; - this.label = label; - } - - /** Creates a performance summary object. */ - public PerformanceSummary(long startTime, long endTime) { - this( - startTime, - endTime, - "<span class='date-label'>" - + Long.toString(TimeUnit.MICROSECONDS.toMillis(endTime)) - + "</span>"); - } - - /** - * Determine if the performance summary contains the provided time. - * - * @param time The time (unix timestamp, microseconds) to check. - * @return True if the time is within the performance summary window, false otherwise. - */ - public boolean contains(long time) { - return time >= startTime && time <= endTime; - } - - /** - * Add the profiling data from a ProfilingPointRunEntity to the performance summary. - * - * @param profilingRun The Entity object whose data to add. - */ - public void addData(ProfilingPointEntity profilingPoint, Entity profilingRun) { - ProfilingPointSummaryEntity ppSummary = - ProfilingPointSummaryEntity.fromEntity(profilingRun); - if (ppSummary == null) return; - - String name = profilingPoint.getProfilingPointName(); - if (ppSummary.getLabels() != null && ppSummary.getLabels().size() > 0) { - if (!ppSummary.getSeries().equals("")) { - name += " (" + ppSummary.getSeries() + ")"; - } - if (!summaryMap.containsKey(name)) { - summaryMap.put( - name, - new ProfilingPointSummary( - profilingPoint.getXLabel(), - profilingPoint.getYLabel(), - profilingPoint.getVtsProfilingRegressionMode(profilingPoint.getRegressionMode()))); - } - summaryMap.get(name).update(ppSummary); - } else { - // Use the option suffix as the table name. - // Group all profiling points together into one table - if (!summaryMap.containsKey(ppSummary.getSeries())) { - summaryMap.put( - ppSummary.getSeries(), - new ProfilingPointSummary( - profilingPoint.getXLabel(), - profilingPoint.getYLabel(), - profilingPoint.getVtsProfilingRegressionMode(profilingPoint.getRegressionMode()))); - } - summaryMap.get(ppSummary.getSeries()).updateLabel(ppSummary, name); - } - } - - /** - * Adds a ProfilingPointSummary object into the summary map only if the key doesn't exist. - * - * @param key The name of the profiling point. - * @param summary The ProfilingPointSummary object to add into the summary map. - * @return True if the data was inserted into the performance summary, false otherwise. - */ - public boolean insertProfilingPointSummary(String key, ProfilingPointSummary summary) { - if (!summaryMap.containsKey(key)) { - summaryMap.put(key, summary); - return true; - } - return false; - } - - /** - * Gets the number of profiling points. - * - * @return The number of profiling points in the performance summary. - */ - public int size() { - return summaryMap.size(); - } - - /** - * Gets the names of the profiling points. - * - * @return A string array of profiling point names. - */ - public String[] getProfilingPointNames() { - String[] profilingNames = summaryMap.keySet().toArray(new String[summaryMap.size()]); - Arrays.sort(profilingNames); - return profilingNames; - } - - /** - * Determines if a profiling point is described by the performance summary. - * - * @param profilingPointName The name of the profiling point. - * @return True if the profiling point is contained in the performance summary, else false. - */ - public boolean hasProfilingPoint(String profilingPointName) { - return summaryMap.containsKey(profilingPointName); - } - - /** - * Gets the profiling point summary by name. - * - * @param profilingPointName The name of the profiling point to fetch. - * @return The ProfilingPointSummary object describing the specified profiling point. - */ - public ProfilingPointSummary getProfilingPointSummary(String profilingPointName) { - return summaryMap.get(profilingPointName); - } -} diff --git a/src/main/java/com/android/vts/util/PerformanceUtil.java b/src/main/java/com/android/vts/util/PerformanceUtil.java deleted file mode 100644 index 000f4e0..0000000 --- a/src/main/java/com/android/vts/util/PerformanceUtil.java +++ /dev/null @@ -1,304 +0,0 @@ -/** - * Copyright 2016 Google Inc. All Rights Reserved. - * - * <p>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 - * - * <p>http://www.apache.org/licenses/LICENSE-2.0 - * - * <p>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.util; - -import com.android.vts.entity.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Query; -import java.io.IOException; -import java.math.RoundingMode; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.logging.Logger; -import org.apache.commons.lang.StringUtils; - -/** PerformanceUtil, a helper class for analyzing profiling and performance data. */ -public class PerformanceUtil { - protected static Logger logger = Logger.getLogger(PerformanceUtil.class.getName()); - - private static final int MAX_BATCH_SIZE = 2000; - private static final DecimalFormat FORMATTER; - private static final String NAME_DELIMITER = ", "; - private static final String OPTION_DELIMITER = "="; - - /** Initialize the decimal formatter. */ - static { - FORMATTER = new DecimalFormat("#.##"); - FORMATTER.setRoundingMode(RoundingMode.HALF_UP); - } - - /** - * Creates the HTML for a table cell representing the percent change between two numbers. - * - * <p>Computes the percent change (after - before)/before * 100 and inserts it into a table cell - * with the specified style. The color of the cell is white if 'after' is less than before. - * Otherwise, the cell is colored red with opacity according to the percent change (100%+ delta - * means 100% opacity). If the before value is 0 and the after value is positive, then the color - * of the cell is 100% red to indicate an increase of undefined magnitude. - * - * @param baseline The baseline value observed. - * @param test The value to compare against the baseline. - * @param classNames A string containing HTML classes to apply to the table cell. - * @param style A string containing additional CSS styles. - * @returns An HTML string for a colored table cell containing the percent change. - */ - public static String getPercentChangeHTML( - double baseline, - double test, - String classNames, - String style, - VtsProfilingRegressionMode mode) { - String pctChangeString = "0 %"; - double alpha = 0; - double delta = test - baseline; - if (baseline != 0) { - double pctChange = delta / baseline; - alpha = pctChange * 2; - pctChangeString = FORMATTER.format(pctChange * 100) + " %"; - } else if (delta != 0) { - // If the percent change is undefined, the cell will be solid red or white - alpha = (int) Math.signum(delta); // get the sign of the delta (+1, 0, -1) - pctChangeString = ""; - } - if (mode == VtsProfilingRegressionMode.VTS_REGRESSION_MODE_DECREASING) { - alpha = -alpha; - } - String color = "background-color: rgba(255, 0, 0, " + alpha + "); "; - String html = "<td class='" + classNames + "' style='" + color + style + "'>"; - html += pctChangeString + "</td>"; - return html; - } - - /** - * Compares a test StatSummary to a baseline StatSummary using best-case performance. - * - * @param baseline The StatSummary object containing initial values to compare against - * @param test The StatSummary object containing test values to be compared against the baseline - * @param innerClasses Class names to apply to cells on the inside of the grid - * @param outerClasses Class names to apply to cells on the outside of the grid - * @param innerStyles CSS styles to apply to cells on the inside of the grid - * @param outerStyles CSS styles to apply to cells on the outside of the grid - * @return HTML string representing the performance of the test versus the baseline - */ - public static String getBestCasePerformanceComparisonHTML( - StatSummary baseline, - StatSummary test, - String innerClasses, - String outerClasses, - String innerStyles, - String outerStyles) { - if (test == null || baseline == null) { - return "<td></td><td></td><td></td><td></td>"; - } - String row = ""; - // Intensity of red color is a function of the relative (percent) change - // in the new value compared to the previous day's. Intensity is a linear function - // of percentage change, reaching a ceiling at 100% change (e.g. a doubling). - row += - getPercentChangeHTML( - baseline.getBestCase(), - test.getBestCase(), - innerClasses, - innerStyles, - test.getRegressionMode()); - row += "<td class='" + innerClasses + "' style='" + innerStyles + "'>"; - row += FORMATTER.format(baseline.getBestCase()); - row += "<td class='" + innerClasses + "' style='" + innerStyles + "'>"; - row += FORMATTER.format(baseline.getMean()); - row += "<td class='" + outerClasses + "' style='" + outerStyles + "'>"; - row += FORMATTER.format(baseline.getStd()) + "</td>"; - return row; - } - - /** - * Updates a PerformanceSummary object with data in the specified window. - * - * @param testName The name of the table whose profiling vectors to retrieve. - * @param startTime The (inclusive) start time in microseconds to scan from. - * @param endTime The (inclusive) end time in microseconds at which to stop scanning. - * @param selectedDevice The name of the device whose data to query for, or null for unfiltered. - * @param summaries The list of PerformanceSummary objects to populate with data. - * @throws IOException - */ - public static void updatePerformanceSummary( - String testName, - long startTime, - long endTime, - String selectedDevice, - List<PerformanceSummary> summaries) { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Query profilingPointQuery = - new Query(ProfilingPointEntity.KIND) - .setFilter( - new Query.FilterPredicate( - ProfilingPointEntity.TEST_NAME, - Query.FilterOperator.EQUAL, - testName)); - - List<ProfilingPointEntity> profilingPoints = new ArrayList<>(); - for (Entity e : - datastore - .prepare(profilingPointQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())) { - ProfilingPointEntity pp = ProfilingPointEntity.fromEntity(e); - if (pp == null) continue; - profilingPoints.add(pp); - } - - Query.Filter startFilter = - new Query.FilterPredicate( - ProfilingPointSummaryEntity.START_TIME, - Query.FilterOperator.GREATER_THAN_OR_EQUAL, - startTime); - Query.Filter endFilter = - new Query.FilterPredicate( - ProfilingPointSummaryEntity.START_TIME, - Query.FilterOperator.LESS_THAN_OR_EQUAL, - endTime); - Query.Filter timeFilter = Query.CompositeFilterOperator.and(startFilter, endFilter); - - Query.Filter deviceFilter; - if (selectedDevice != null) { - deviceFilter = FilterUtil.FilterKey.TARGET.getFilterForString(selectedDevice); - } else { - deviceFilter = - FilterUtil.FilterKey.TARGET.getFilterForString(ProfilingPointSummaryEntity.ALL); - } - deviceFilter = - Query.CompositeFilterOperator.and( - deviceFilter, - FilterUtil.FilterKey.BRANCH.getFilterForString( - ProfilingPointSummaryEntity.ALL)); - Query.Filter filter = Query.CompositeFilterOperator.and(timeFilter, deviceFilter); - - Map<ProfilingPointEntity, Iterable<Entity>> asyncEntities = new HashMap<>(); - for (ProfilingPointEntity pp : profilingPoints) { - Query profilingQuery = - new Query(ProfilingPointSummaryEntity.KIND) - .setAncestor(pp.getKey()) - .setFilter(filter); - asyncEntities.put( - pp, - datastore - .prepare(profilingQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())); - } - - for (ProfilingPointEntity pp : asyncEntities.keySet()) { - for (Entity ppSummaryEntity : asyncEntities.get(pp)) { - ProfilingPointSummaryEntity ppSummary = - ProfilingPointSummaryEntity.fromEntity(ppSummaryEntity); - if (ppSummary == null) continue; - for (PerformanceSummary perfSummary : summaries) { - if (perfSummary.contains(ppSummary.getStartTime())) { - perfSummary.addData(pp, ppSummaryEntity); - } - } - } - } - } - - /** - * Compares a test StatSummary to a baseline StatSummary using average-case performance. - * - * @param baseline The StatSummary object containing initial values to compare against - * @param test The StatSummary object containing test values to be compared against the baseline - * @param innerClasses Class names to apply to cells on the inside of the grid - * @param outerClasses Class names to apply to cells on the outside of the grid - * @param innerStyles CSS styles to apply to cells on the inside of the grid - * @param outerStyles CSS styles to apply to cells on the outside of the grid - * @return HTML string representing the performance of the test versus the baseline - */ - public static String getAvgCasePerformanceComparisonHTML( - StatSummary baseline, - StatSummary test, - String innerClasses, - String outerClasses, - String innerStyles, - String outerStyles) { - if (test == null || baseline == null) { - return "<td></td><td></td><td></td><td></td>"; - } - String row = ""; - // Intensity of red color is a function of the relative (percent) change - // in the new value compared to the previous day's. Intensity is a linear function - // of percentage change, reaching a ceiling at 100% change (e.g. a doubling). - row += - getPercentChangeHTML( - baseline.getMean(), - test.getMean(), - innerClasses, - innerStyles, - test.getRegressionMode()); - row += "<td class='" + innerClasses + "' style='" + innerStyles + "'>"; - row += FORMATTER.format(baseline.getBestCase()); - row += "<td class='" + innerClasses + "' style='" + innerStyles + "'>"; - row += FORMATTER.format(baseline.getMean()); - row += "<td class='" + outerClasses + "' style='" + outerStyles + "'>"; - row += FORMATTER.format(baseline.getStd()) + "</td>"; - return row; - } - - /** - * Generates a string of the values in optionsList which have matches in the profiling entity. - * - * @param profilingRun The entity for a profiling point run. - * @param optionKeys A list of keys to match against the optionsList key value pairs. - * @return The values in optionsList whose key match a key in optionKeys. - */ - public static String getOptionAlias( - ProfilingPointRunEntity profilingRun, Set<String> optionKeys) { - String name = ""; - if (profilingRun.getOptions() != null) { - name = getOptionAlias(profilingRun.getOptions(), optionKeys); - } - return name; - } - - /** - * Generates a string of the values in optionsList which have matches in the profiling entity. - * - * @param optionList The list of key=value option pair strings. - * @param optionKeys A list of keys to match against the optionsList key value pairs. - * @return The values in optionsList whose key match a key in optionKeys. - */ - public static String getOptionAlias(List<String> optionList, Set<String> optionKeys) { - String name = ""; - List<String> nameSuffixes = new ArrayList<>(); - for (String optionString : optionList) { - String[] optionParts = optionString.split(OPTION_DELIMITER); - if (optionParts.length != 2) { - continue; - } - if (optionKeys.contains(optionParts[0].trim().toLowerCase())) { - nameSuffixes.add(optionParts[1].trim().toLowerCase()); - } - } - if (nameSuffixes.size() > 0) { - StringUtils.join(nameSuffixes, NAME_DELIMITER); - name += StringUtils.join(nameSuffixes, NAME_DELIMITER); - } - return name; - } -} diff --git a/src/main/java/com/android/vts/util/ProfilingPointSummary.java b/src/main/java/com/android/vts/util/ProfilingPointSummary.java deleted file mode 100644 index b08615a..0000000 --- a/src/main/java/com/android/vts/util/ProfilingPointSummary.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (C) 2017 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.util; - -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** Represents statistical summaries of each profiling point. */ -public class ProfilingPointSummary implements Iterable<StatSummary> { - private List<StatSummary> statSummaries; - private Map<String, Integer> labelIndices; - private List<String> labels; - private VtsProfilingRegressionMode regressionMode; - public String xLabel; - public String yLabel; - - /** Initializes the summary with empty arrays. */ - public ProfilingPointSummary( - String xLabel, String yLabel, VtsProfilingRegressionMode regressionMode) { - statSummaries = new ArrayList<>(); - labelIndices = new HashMap<>(); - labels = new ArrayList<>(); - this.regressionMode = regressionMode; - this.xLabel = xLabel; - this.yLabel = yLabel; - } - - /** - * Determines if a data label is present in the profiling point. - * - * @param label The name of the label. - * @return true if the label is present, false otherwise. - */ - public boolean hasLabel(String label) { - return labelIndices.containsKey(label); - } - - /** - * Gets the statistical summary for a specified data label. - * - * @param label The name of the label. - * @return The StatSummary object if it exists, or null otherwise. - */ - public StatSummary getStatSummary(String label) { - if (!hasLabel(label)) return null; - return statSummaries.get(labelIndices.get(label)); - } - - /** - * Gets the last-seen regression mode. - * - * @return The VtsProfilingRegressionMode value. - */ - public VtsProfilingRegressionMode getRegressionMode() { - return regressionMode; - } - - /** - * Updates the profiling summary with the data from a new profiling report. - * - * @param ppSummary The profiling point run entity object containing profiling data. - */ - public void update(ProfilingPointSummaryEntity ppSummary) { - for (String label : ppSummary.getLabels()) { - if (!ppSummary.getLabelStats().containsKey(label)) continue; - if (!labelIndices.containsKey(label)) { - labelIndices.put(label, statSummaries.size()); - labels.add(label); - statSummaries.add(ppSummary.getLabelStats().get(label)); - } else { - StatSummary summary = getStatSummary(label); - summary.merge(ppSummary.getLabelStats().get(label)); - } - } - } - - /** - * Updates the profiling summary at a label with the data from a new profiling report. - * - * <p>Updates the summary specified by the label with all values provided in the report. If - * labels are provided in the report, they will be ignored -- all values are updated only to the - * provided label. - * - * @param ppSummary The ProfilingPointSummaryEntity object containing profiling data. - * @param label The String label for which all values in the report will be updated. - */ - public void updateLabel(ProfilingPointSummaryEntity ppSummary, String label) { - if (!labelIndices.containsKey(label)) { - labelIndices.put(label, labels.size()); - labels.add(label); - StatSummary stat = - new StatSummary( - label, - ppSummary.getGlobalStats().getMin(), - ppSummary.getGlobalStats().getMax(), - ppSummary.getGlobalStats().getMean(), - ppSummary.getGlobalStats().getSumSq(), - ppSummary.getGlobalStats().getCount(), - ppSummary.getGlobalStats().getRegressionMode()); - statSummaries.add(stat); - } else { - StatSummary summary = getStatSummary(label); - summary.merge(ppSummary.getGlobalStats()); - } - } - - /** - * Gets an iterator that returns stat summaries in the ordered the labels were specified in the - * ProfilingReportMessage objects. - */ - @Override - public Iterator<StatSummary> iterator() { - Iterator<StatSummary> it = - new Iterator<StatSummary>() { - private int currentIndex = 0; - - @Override - public boolean hasNext() { - return labels != null && currentIndex < labels.size(); - } - - @Override - public StatSummary next() { - String label = labels.get(currentIndex++); - return statSummaries.get(labelIndices.get(label)); - } - - @Override - public void remove() { - // Not supported - throw new UnsupportedOperationException(); - } - }; - return it; - } -} diff --git a/src/main/java/com/android/vts/util/StatSummary.java b/src/main/java/com/android/vts/util/StatSummary.java deleted file mode 100644 index 3b4713c..0000000 --- a/src/main/java/com/android/vts/util/StatSummary.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; - -/** Helper object for storing statistics. */ -public class StatSummary { - private String label; - private double min; - private double max; - private double mean; - private double sumSq; - private int n; - private VtsProfilingRegressionMode regression_mode; - - /** - * Create a statistical summary. - * - * <p>Sets the label, min, max, mean, sum of squared error, n, and mode as provided. - * - * @param label The (String) label to assign to the summary. - * @param min The minimum observed value. - * @param max The maximum observed value. - * @param mean The average observed value. - * @param sumSq The sum of squared error. - * @param n The number of values observed. - * @param mode The VtsProfilingRegressionMode to use when analyzing performance. - */ - public StatSummary( - String label, - double min, - double max, - double mean, - double sumSq, - int n, - VtsProfilingRegressionMode mode) { - this.label = label; - this.min = min; - this.max = max; - this.mean = mean; - this.sumSq = sumSq; - this.n = n; - this.regression_mode = mode; - } - - /** - * Initializes the statistical summary. - * - * <p>Sets the label as provided. Initializes the mean, variance, and n (number of values seen) - * to 0. - * - * @param label The (String) label to assign to the summary. - * @param mode The VtsProfilingRegressionMode to use when analyzing performance. - */ - public StatSummary(String label, VtsProfilingRegressionMode mode) { - this(label, Double.MAX_VALUE, Double.MIN_VALUE, 0, 0, 0, mode); - } - - /** - * Update the mean and variance using Welford's single-pass method. - * - * @param value The observed value in the stream. - */ - public void updateStats(double value) { - n += 1; - double oldMean = mean; - mean = oldMean + (value - oldMean) / n; - sumSq = sumSq + (value - mean) * (value - oldMean); - if (value < min) min = value; - if (value > max) max = value; - } - - /** - * Combine the mean and variance with another StatSummary. - * - * @param stat The StatSummary to combine with. - */ - public void merge(StatSummary stat) { - double delta = stat.getMean() - mean; - int newN = n + stat.getCount(); - sumSq = sumSq + stat.getSumSq() + delta / newN * delta * n * stat.getCount(); - double recipN = 1.0 / newN; - mean = n * recipN * mean + stat.getCount() * recipN * stat.getMean(); - n = newN; - } - - /** - * Gets the best case of the stream. - * - * @return The min or max. - */ - public double getBestCase() { - switch (regression_mode) { - case VTS_REGRESSION_MODE_DECREASING: - return getMax(); - default: - return getMin(); - } - } - - /** - * Gets the calculated min of the stream. - * - * @return The min. - */ - public double getMin() { - return min; - } - - /** - * Gets the calculated max of the stream. - * - * @return The max. - */ - public double getMax() { - return max; - } - - /** - * Gets the calculated mean of the stream. - * - * @return The mean. - */ - public double getMean() { - return mean; - } - - /** - * Gets the calculated sum of squared error of the stream. - * - * @return The sum of squared error. - */ - public double getSumSq() { - return sumSq; - } - - /** - * Gets the calculated standard deviation of the stream. - * - * @return The standard deviation. - */ - public double getStd() { - return Math.sqrt(sumSq / (n - 1)); - } - - /** - * Gets the number of elements that have passed through the stream. - * - * @return Number of elements. - */ - public int getCount() { - return n; - } - - /** - * Gets the label for the summarized statistics. - * - * @return The (string) label. - */ - public String getLabel() { - return label; - } - - /** - * Gets the regression mode. - * - * @return The VtsProfilingRegressionMode value. - */ - public VtsProfilingRegressionMode getRegressionMode() { - return regression_mode; - } -} diff --git a/src/main/java/com/android/vts/util/TaskQueueHelper.java b/src/main/java/com/android/vts/util/TaskQueueHelper.java deleted file mode 100644 index 3d5df53..0000000 --- a/src/main/java/com/android/vts/util/TaskQueueHelper.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright 2017 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.google.appengine.api.taskqueue.Queue; -import com.google.appengine.api.taskqueue.TaskOptions; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** TaskQueueHelper, a helper class for interacting with App Engine Task Queue API. */ -public class TaskQueueHelper { - protected static final Logger logger = Logger.getLogger(TaskQueueHelper.class.getName()); - public static final int MAX_BATCH_ADD_SIZE = 100; - - /** - * Add the list of tasks to the provided queue. - * - * @param queue The task queue in which to insert the tasks. - * @param tasks The list of tasks to add. - */ - public static void addToQueue(Queue queue, List<TaskOptions> tasks) { - List<TaskOptions> puts = new ArrayList<>(); - for (TaskOptions task : tasks) { - puts.add(task); - if (puts.size() == MAX_BATCH_ADD_SIZE) { - queue.addAsync(puts); - puts = new ArrayList<>(); - } else if (puts.size() > MAX_BATCH_ADD_SIZE) { - logger.log(Level.SEVERE, "Too many tasks batched in the task queue API."); - return; - } - } - if (puts.size() > 0) { - queue.addAsync(puts); - } - } -} diff --git a/src/main/java/com/android/vts/util/TestResults.java b/src/main/java/com/android/vts/util/TestResults.java deleted file mode 100644 index adb2a5a..0000000 --- a/src/main/java/com/android/vts/util/TestResults.java +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.android.vts.entity.CodeCoverageEntity; -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestCaseRunEntity.TestCase; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.proto.VtsReportMessage.TestCaseResult; -import com.android.vts.util.UrlUtil.LinkDisplay; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.apache.commons.lang.StringUtils; - -/** Helper object for describing test results data. */ -public class TestResults { - private final Logger logger = Logger.getLogger(getClass().getName()); - - private List<TestRunEntity> testRuns; // list of all test runs - private Map<Key, List<TestCaseRunEntity>> - testCaseRunMap; // map from test run key to the test run information - private Map<Key, List<DeviceInfoEntity>> deviceInfoMap; // map from test run key to device info - private Map<String, Integer> testCaseNameMap; // map from test case name to its order - private Set<String> profilingPointNameSet; // set of profiling point names - - public String testName; - public String[] headerRow; // row to display above the test results table - public String[][] timeGrid; // grid of data storing timestamps to render as dates - public String[][] durationGrid; // grid of data storing timestamps to render as time intervals - public String[][] summaryGrid; // grid of data displaying a summary of the test run - public String[][] resultsGrid; // grid of data displaying test case results - public String[] profilingPointNames; // list of profiling point names in the test run - public Map<String, List<String[]>> logInfoMap; // map from test run index to url/display pairs - public int[] totResultCounts; // array of test result counts for the tip-of-tree runs - public String totBuildId = ""; // build ID of tip-of-tree run - public long startTime = Long.MAX_VALUE; // oldest timestamp displayed in the results table - public long endTime = Long.MIN_VALUE; // newest timestamp displayed in the results table - - // Row labels for the test time-formatted information. - private static final String[] TIME_INFO_NAMES = {"Test Start", "Test End"}; - - // Row labels for the test duration information. - private static final String[] DURATION_INFO_NAMES = {"<b>Test Duration</b>"}; - - // Row labels for the test summary grid. - private static final String[] SUMMARY_NAMES = { - "Total", "Passing #", "Non-Passing #", "Passing %", "Covered Lines", "Coverage %", "Links" - }; - - // Row labels for the device summary information in the table header. - private static final String[] HEADER_NAMES = { - "<b>Stats Type \\ Device Build ID</b>", - "Branch", - "Build Target", - "Device", - "ABI Target", - "VTS Build ID", - "Hostname" - }; - - /** - * Create a test results object. - * - * @param testName The name of the test. - */ - public TestResults(String testName) { - this.testName = testName; - this.testRuns = new ArrayList<>(); - this.deviceInfoMap = new HashMap<>(); - this.testCaseRunMap = new HashMap<>(); - this.testCaseNameMap = new HashMap<>(); - this.logInfoMap = new HashMap<>(); - this.profilingPointNameSet = new HashSet<>(); - } - - /** - * Add a test run to the test results. - * - * @param testRun The Entity containing the test run information. - * @param testCaseRuns The collection of test case executions within the test run. - */ - public void addTestRun(Entity testRun, Iterable<Entity> testCaseRuns) { - TestRunEntity testRunEntity = TestRunEntity.fromEntity(testRun); - if (testRunEntity == null) return; - if (testRunEntity.getStartTimestamp() < startTime) { - startTime = testRunEntity.getStartTimestamp(); - } - if (testRunEntity.getStartTimestamp() > endTime) { - endTime = testRunEntity.getStartTimestamp(); - } - testRuns.add(testRunEntity); - testCaseRunMap.put(testRun.getKey(), new ArrayList<TestCaseRunEntity>()); - - // Process the test cases in the test run - for (Entity e : testCaseRuns) { - TestCaseRunEntity testCaseRunEntity = TestCaseRunEntity.fromEntity(e); - if (testCaseRunEntity == null) continue; - testCaseRunMap.get(testRun.getKey()).add(testCaseRunEntity); - for (TestCase testCase : testCaseRunEntity.testCases) { - if (!testCaseNameMap.containsKey(testCase.name)) { - testCaseNameMap.put(testCase.name, testCaseNameMap.size()); - } - } - } - } - - /** Creates a test case breakdown of the most recent test run. */ - private void generateToTBreakdown() { - totResultCounts = new int[TestCaseResult.values().length]; - if (testRuns.size() == 0) return; - - TestRunEntity mostRecentRun = testRuns.get(0); - List<TestCaseRunEntity> testCaseResults = testCaseRunMap.get(mostRecentRun.getKey()); - List<DeviceInfoEntity> deviceInfos = deviceInfoMap.get(mostRecentRun.getKey()); - if (deviceInfos.size() > 0) { - DeviceInfoEntity totDevice = deviceInfos.get(0); - totBuildId = totDevice.getBuildId(); - } - // Count array for each test result - for (TestCaseRunEntity testCaseRunEntity : testCaseResults) { - for (TestCase testCase : testCaseRunEntity.testCases) { - totResultCounts[testCase.result]++; - } - } - } - - /** - * Get the number of test runs observed. - * - * @return The number of test runs observed. - */ - public int getSize() { - return testRuns.size(); - } - - /** Fetch and process profiling point names for the set of test runs. */ - private void processProfilingPoints() { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Key testKey = KeyFactory.createKey(TestEntity.KIND, this.testName); - Query.Filter profilingFilter = - FilterUtil.getProfilingTimeFilter( - testKey, TestRunEntity.KIND, this.startTime, this.endTime); - Query profilingPointQuery = - new Query(ProfilingPointRunEntity.KIND) - .setAncestor(testKey) - .setFilter(profilingFilter) - .setKeysOnly(); - Iterable<Entity> profilingPoints = datastore.prepare(profilingPointQuery).asIterable(); - // Process the profiling point observations in the test run - for (Entity e : profilingPoints) { - if (e.getKey().getName() != null) { - profilingPointNameSet.add(e.getKey().getName()); - } - } - } - - /** Fetch and process device information for the set of test runs. */ - private void processDeviceInfos() { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - Key testKey = KeyFactory.createKey(TestEntity.KIND, this.testName); - Query.Filter deviceFilter = - FilterUtil.getDeviceTimeFilter( - testKey, TestRunEntity.KIND, this.startTime, this.endTime); - Query deviceQuery = - new Query(DeviceInfoEntity.KIND) - .setAncestor(testKey) - .setFilter(deviceFilter) - .setKeysOnly(); - List<Key> deviceGets = new ArrayList<>(); - for (Entity device : - datastore.prepare(deviceQuery).asIterable(DatastoreHelper.getLargeBatchOptions())) { - if (testCaseRunMap.containsKey(device.getParent())) { - deviceGets.add(device.getKey()); - } - } - Map<Key, Entity> devices = datastore.get(deviceGets); - for (Key key : devices.keySet()) { - Entity device = devices.get(key); - if (!testCaseRunMap.containsKey(device.getParent())) return; - DeviceInfoEntity deviceEntity = DeviceInfoEntity.fromEntity(device); - if (deviceEntity == null) return; - if (!deviceInfoMap.containsKey(device.getParent())) { - deviceInfoMap.put(device.getParent(), new ArrayList<DeviceInfoEntity>()); - } - deviceInfoMap.get(device.getParent()).add(deviceEntity); - } - } - - /** Post-process the test runs to generate reports of the results. */ - public void processReport() { - if (getSize() > 0) { - processDeviceInfos(); - processProfilingPoints(); - } - testRuns.sort((t1, t2) -> new Long(t2.getStartTimestamp()).compareTo(t1.getStartTimestamp())); - generateToTBreakdown(); - - headerRow = new String[testRuns.size() + 1]; - headerRow[0] = StringUtils.join(HEADER_NAMES, "<br>"); - - summaryGrid = new String[SUMMARY_NAMES.length][testRuns.size() + 1]; - for (int i = 0; i < SUMMARY_NAMES.length; i++) { - summaryGrid[i][0] = "<b>" + SUMMARY_NAMES[i] + "</b>"; - } - - timeGrid = new String[TIME_INFO_NAMES.length][testRuns.size() + 1]; - for (int i = 0; i < TIME_INFO_NAMES.length; i++) { - timeGrid[i][0] = "<b>" + TIME_INFO_NAMES[i] + "</b>"; - } - - durationGrid = new String[DURATION_INFO_NAMES.length][testRuns.size() + 1]; - for (int i = 0; i < DURATION_INFO_NAMES.length; i++) { - durationGrid[i][0] = "<b>" + DURATION_INFO_NAMES[i] + "</b>"; - } - - resultsGrid = new String[testCaseNameMap.size()][testRuns.size() + 1]; - // first column for results grid - for (String testCaseName : testCaseNameMap.keySet()) { - resultsGrid[testCaseNameMap.get(testCaseName)][0] = testCaseName; - } - - // Iterate through the test runs - for (int col = 0; col < testRuns.size(); col++) { - TestRunEntity testRun = testRuns.get(col); - CodeCoverageEntity codeCoverageEntity = testRun.getCodeCoverageEntity(); - - // Process the device information - List<DeviceInfoEntity> devices = deviceInfoMap.get(testRun.getKey()); - List<String> buildIdList = new ArrayList<>(); - List<String> buildAliasList = new ArrayList<>(); - List<String> buildFlavorList = new ArrayList<>(); - List<String> productVariantList = new ArrayList<>(); - List<String> abiInfoList = new ArrayList<>(); - for (DeviceInfoEntity deviceInfoEntity : devices) { - buildAliasList.add(deviceInfoEntity.getBranch()); - buildFlavorList.add(deviceInfoEntity.getBuildFlavor()); - productVariantList.add(deviceInfoEntity.getProduct()); - buildIdList.add(deviceInfoEntity.getBuildId()); - String abi = ""; - String abiName = deviceInfoEntity.getAbiName(); - String abiBitness = deviceInfoEntity.getAbiBitness(); - if (abiName.length() > 0) { - abi += abiName; - if (abiBitness.length() > 0) { - abi += " (" + abiBitness + " bit)"; - } - } - abiInfoList.add(abi); - } - - String buildAlias = StringUtils.join(buildAliasList, ","); - String buildFlavor = StringUtils.join(buildFlavorList, ","); - String productVariant = StringUtils.join(productVariantList, ","); - String buildIds = StringUtils.join(buildIdList, ","); - String abiInfo = StringUtils.join(abiInfoList, ","); - String vtsBuildId = testRun.getTestBuildId(); - - int totalCount = 0; - int passCount = (int) testRun.getPassCount(); - int nonpassCount = (int) testRun.getFailCount(); - TestCaseResult aggregateStatus = TestCaseResult.UNKNOWN_RESULT; - - long totalLineCount = 0; - long coveredLineCount = 0; - if (testRun.getHasCodeCoverage()) { - totalLineCount = codeCoverageEntity.getTotalLineCount(); - coveredLineCount = codeCoverageEntity.getCoveredLineCount(); - } - - // Process test case results - for (TestCaseRunEntity testCaseEntity : testCaseRunMap.get(testRun.getKey())) { - // Update the aggregated test run status - totalCount += testCaseEntity.testCases.size(); - for (TestCase testCase : testCaseEntity.testCases) { - int result = testCase.result; - String name = testCase.name; - if (result == TestCaseResult.TEST_CASE_RESULT_PASS.getNumber()) { - if (aggregateStatus == TestCaseResult.UNKNOWN_RESULT) { - aggregateStatus = TestCaseResult.TEST_CASE_RESULT_PASS; - } - } else if (result != TestCaseResult.TEST_CASE_RESULT_SKIP.getNumber()) { - aggregateStatus = TestCaseResult.TEST_CASE_RESULT_FAIL; - } - - String systraceUrl = null; - - if (testCaseEntity.getSystraceUrl() != null) { - String url = testCaseEntity.getSystraceUrl(); - LinkDisplay validatedLink = UrlUtil.processUrl(url); - if (validatedLink != null) { - systraceUrl = validatedLink.url; - } else { - logger.log(Level.WARNING, "Invalid systrace URL : " + url); - } - } - - int index = testCaseNameMap.get(name); - String classNames = "test-case-status "; - String glyph = ""; - TestCaseResult testCaseResult = TestCaseResult.valueOf(result); - if (testCaseResult != null) classNames += testCaseResult.toString(); - else classNames += TestCaseResult.UNKNOWN_RESULT.toString(); - - if (systraceUrl != null) { - classNames += " width-1"; - glyph += - "<a href=\"" - + systraceUrl - + "\" " - + "class=\"waves-effect waves-light btn red right inline-btn\">" - + "<i class=\"material-icons inline-icon\">info_outline</i></a>"; - } - resultsGrid[index][col + 1] = - "<div class=\"" + classNames + "\"> </div>" + glyph; - } - } - String passInfo; - try { - double passPct = - Math.round((100 * passCount / (passCount + nonpassCount)) * 100f) / 100f; - passInfo = Double.toString(passPct) + "%"; - } catch (ArithmeticException e) { - passInfo = " - "; - } - - // Process coverage metadata - String coverageInfo; - String coveragePctInfo; - try { - double coveragePct = - Math.round((100 * coveredLineCount / totalLineCount) * 100f) / 100f; - coveragePctInfo = - Double.toString(coveragePct) - + "%" - + "<a href=\"/show_coverage?testName=" - + testName - + "&startTime=" - + testRun.getStartTimestamp() - + "\" class=\"waves-effect waves-light btn red right inline-btn\">" - + "<i class=\"material-icons inline-icon\">menu</i></a>"; - coverageInfo = coveredLineCount + "/" + totalLineCount; - } catch (ArithmeticException e) { - coveragePctInfo = " - "; - coverageInfo = " - "; - } - - // Process log information - String linkSummary = " - "; - List<String[]> linkEntries = new ArrayList<>(); - logInfoMap.put(Integer.toString(col), linkEntries); - - if (testRun.getLogLinks() != null) { - for (String rawUrl : testRun.getLogLinks()) { - LinkDisplay validatedLink = UrlUtil.processUrl(rawUrl); - if (validatedLink == null) { - logger.log(Level.WARNING, "Invalid logging URL : " + rawUrl); - continue; - } - String[] logInfo = - new String[] { - validatedLink.name, - validatedLink.url // TODO: process the name from the URL - }; - linkEntries.add(logInfo); - } - } - if (linkEntries.size() > 0) { - linkSummary = Integer.toString(linkEntries.size()); - linkSummary += - "<i class=\"waves-effect waves-light btn red right inline-btn" - + " info-btn material-icons inline-icon\"" - + " data-col=\"" - + Integer.toString(col) - + "\"" - + ">launch</i>"; - } - - String icon = "<div class='status-icon " + aggregateStatus.toString() + "'> </div>"; - String hostname = testRun.getHostName(); - - // Populate the header row - headerRow[col + 1] = - "<span class='valign-wrapper'><b>" - + buildIds - + "</b>" - + icon - + "</span>" - + buildAlias - + "<br>" - + buildFlavor - + "<br>" - + productVariant - + "<br>" - + abiInfo - + "<br>" - + vtsBuildId - + "<br>" - + hostname; - - // Populate the test summary grid - summaryGrid[0][col + 1] = Integer.toString(totalCount); - summaryGrid[1][col + 1] = Integer.toString(passCount); - summaryGrid[2][col + 1] = Integer.toString(nonpassCount); - summaryGrid[3][col + 1] = passInfo; - summaryGrid[4][col + 1] = coverageInfo; - summaryGrid[5][col + 1] = coveragePctInfo; - summaryGrid[6][col + 1] = linkSummary; - - // Populate the test time info grid - timeGrid[0][col + 1] = Long.toString(testRun.getStartTimestamp()); - timeGrid[1][col + 1] = Long.toString(testRun.getEndTimestamp()); - - // Populate the test duration info grid - durationGrid[0][col + 1] = Long.toString(testRun.getEndTimestamp() - testRun.getStartTimestamp()); - } - - profilingPointNames = - profilingPointNameSet.toArray(new String[profilingPointNameSet.size()]); - Arrays.sort(profilingPointNames); - } -} diff --git a/src/main/java/com/android/vts/util/TestRunDetails.java b/src/main/java/com/android/vts/util/TestRunDetails.java deleted file mode 100644 index 584abaf..0000000 --- a/src/main/java/com/android/vts/util/TestRunDetails.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.android.vts.entity.TestCaseRunEntity; -import com.android.vts.entity.TestCaseRunEntity.TestCase; -import com.android.vts.proto.VtsReportMessage.TestCaseResult; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; - -/** Helper object for describing test results data. */ -public class TestRunDetails { - private static final String NAME_KEY = "name"; - private static final String DATA_KEY = "data"; - - private class ResultColumn { - private final String name; - private final List<String> testCases; - - public ResultColumn(String name) { - this.name = name; - this.testCases = new ArrayList<>(); - } - - public void add(String testCase) { - this.testCases.add(testCase); - } - - public int size() { - return this.testCases.size(); - } - - public JsonObject toJson() { - testCases.sort(Comparator.naturalOrder()); - JsonObject json = new JsonObject(); - json.add(NAME_KEY, new JsonPrimitive(name)); - json.add(DATA_KEY, new Gson().toJsonTree(testCases)); - return json; - } - } - - private final ResultColumn[] columns; - public final int[] resultCounts = new int[TestCaseResult.values().length]; - - public TestRunDetails() { - columns = new ResultColumn[TestCaseResult.values().length]; - for (TestCaseResult r : TestCaseResult.values()) { - columns[r.getNumber()] = new ResultColumn(r.name()); - } - } - - /** - * Add a test case entity to the details object. - * @param testCaseEntity The TestCaseRunEntity object storing test case results. - */ - public void addTestCase(TestCaseRunEntity testCaseEntity) { - for (TestCase testCase : testCaseEntity.getTestCases()) { - int result = testCase.result; - if (result > resultCounts.length) - continue; - ++resultCounts[result]; - ResultColumn column = columns[result]; - column.add(testCase.name); - } - } - - /** - * Serializes the test run details to json format. - * - * @return A JsonObject object representing the details object. - */ - public JsonElement toJson() { - List<JsonObject> jsonColumns = new ArrayList<>(); - for (ResultColumn column : columns) { - if (column.size() > 0) { - jsonColumns.add(column.toJson()); - } - } - return new Gson().toJsonTree(jsonColumns); - } -} diff --git a/src/main/java/com/android/vts/util/TestRunMetadata.java b/src/main/java/com/android/vts/util/TestRunMetadata.java deleted file mode 100644 index bf4bd24..0000000 --- a/src/main/java/com/android/vts/util/TestRunMetadata.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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.util; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestRunEntity; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import java.util.ArrayList; -import java.util.List; -import org.apache.commons.lang.StringUtils; - -/** Helper object for describing test results data. */ -public class TestRunMetadata { - private static final String TEST_RUN = "testRun"; - private static final String TEST_DETAILS = "testDetails"; - private static final String DEVICE_INFO = "deviceInfo"; - private static final String ABI_INFO = "abiInfo"; - public final TestRunEntity testRun; - - private final List<DeviceInfoEntity> devices; - private String deviceInfo; - private String abiInfo; - private TestRunDetails details; - - /** - * Create a test metadata object. - * - * @param testName The name of the test. - * @param testRun The test run entity storing run information. - * @param devices The list of device entities describing the test run. - */ - public TestRunMetadata(String testName, TestRunEntity testRun, List<DeviceInfoEntity> devices) { - this.testRun = testRun; - this.deviceInfo = ""; - this.abiInfo = ""; - this.details = null; - this.devices = devices; - } - - /** - * Create a test metadata object. - * - * @param testName The name of the test. - * @param testRun The test run entity storing run information. - */ - public TestRunMetadata(String testName, TestRunEntity testRun) { - this(testName, testRun, new ArrayList<DeviceInfoEntity>()); - } - - /** - * Add a device info to the test run metadata. - * - * @param device The entity to add. - */ - public void addDevice(DeviceInfoEntity device) { - this.devices.add(device); - } - - /** Get device information for the test run and add it to the metadata message. */ - private void processDeviceInfo() { - List<String> deviceInfoList = new ArrayList<>(); - List<String> abiInfoList = new ArrayList<>(); - - for (DeviceInfoEntity device : this.devices) { - String abi = ""; - String abiName = device.getAbiName(); - String abiBitness = device.getAbiBitness(); - if (abiName.length() > 0) { - abi += abiName; - if (abiBitness.length() > 0) { - abi += " (" + abiBitness + " bit)"; - } - } - abiInfoList.add(abi); - deviceInfoList.add(device.getFingerprint()); - } - this.abiInfo = StringUtils.join(abiInfoList, ", "); - this.deviceInfo = StringUtils.join(deviceInfoList, ", "); - } - - /** - * Get the device info string in the test metadata. - * - * @return The string descriptor of the devices used in the test run. - */ - public String getDeviceInfo() { - return this.deviceInfo; - } - - /** - * Get the test run details (e.g. test case information) for the test run. - * - * @return The TestRunDetails object stored in the metadata, or null if not set. - */ - public TestRunDetails getDetails() { - return this.details; - } - - /** - * Add test case details to the metadata object. - * - * <p>Used for prefetching details on initial page load. - * - * @param details The TestRunDetails object storing test case results for the test run. - */ - public void addDetails(TestRunDetails details) { - this.details = details; - } - - /** - * Serializes the test run metadata to json format. - * - * @return A JsonElement object representing the details object. - */ - public JsonObject toJson() { - processDeviceInfo(); - JsonObject json = new JsonObject(); - json.add(DEVICE_INFO, new JsonPrimitive(this.deviceInfo)); - json.add(ABI_INFO, new JsonPrimitive(this.abiInfo)); - json.add(TEST_RUN, this.testRun.toJson()); - if (this.details != null) { - json.add(TEST_DETAILS, this.details.toJson()); - } - return json; - } -} diff --git a/src/main/java/com/android/vts/util/TimeUtil.java b/src/main/java/com/android/vts/util/TimeUtil.java deleted file mode 100644 index 7e9be26..0000000 --- a/src/main/java/com/android/vts/util/TimeUtil.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2017 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.util; - -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.concurrent.TimeUnit; -import java.util.logging.Logger; - -/** TimeUtil, a helper class for formatting times. */ -public class TimeUtil { - protected static final Logger logger = Logger.getLogger(TimeUtil.class.getName()); - - public static final String DATE_FORMAT = "yyyy-MM-dd"; - public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; - public static final String DATE_TIME_ZONE_FORMAT = "yyyy-MM-dd HH:mm:ss (z)"; - public static final ZoneId PT_ZONE = ZoneId.of("America/Los_Angeles"); - - /** - * Create a date time string with zone info from the provided timestamp. - * - * @param timeMicroseconds The time in microseconds - * @return A formatted date time string. - */ - public static String getDateTimeZoneString(long timeMicroseconds) { - long timeMillis = TimeUnit.MICROSECONDS.toMillis(timeMicroseconds); - ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(timeMillis), PT_ZONE); - return DateTimeFormatter.ofPattern(DATE_TIME_ZONE_FORMAT).format(zdt); - } - - /** - * Create a date string from the provided timestamp. - * - * @param timeMicroseconds The time in microseconds - * @return A formatted date string. - */ - public static String getDateString(long timeMicroseconds) { - long timeMillis = TimeUnit.MICROSECONDS.toMillis(timeMicroseconds); - ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(timeMillis), PT_ZONE); - return DateTimeFormatter.ofPattern(DATE_FORMAT).format(zdt); - } - - /** - * Create a date string from the provided timestamp. - * - * @param timeMicroseconds The time in microseconds - * @return A formatted date string. - */ - public static String getDateTimeString(long timeMicroseconds) { - long timeMillis = TimeUnit.MICROSECONDS.toMillis(timeMicroseconds); - ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(timeMillis), PT_ZONE); - return DateTimeFormatter.ofPattern(DATE_TIME_FORMAT).format(zdt); - } - - /** - * Create a ZonedDateTime object from the provided timestamp. - * - * @param timeMicroseconds The time in microseconds - * @return A ZonedDateTime object. - */ - public static ZonedDateTime getZonedDateTime(long timeMicroseconds) { - long timeMillis = TimeUnit.MICROSECONDS.toMillis(timeMicroseconds); - return ZonedDateTime.ofInstant(Instant.ofEpochMilli(timeMillis), PT_ZONE); - } -} diff --git a/src/main/java/com/android/vts/util/UrlUtil.java b/src/main/java/com/android/vts/util/UrlUtil.java deleted file mode 100644 index 03c23eb..0000000 --- a/src/main/java/com/android/vts/util/UrlUtil.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright 2017 Google Inc. All Rights Reserved. - * - * <p>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 - * - * <p>http://www.apache.org/licenses/LICENSE-2.0 - * - * <p>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.util; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; - -/** UrlUtil, a helper class for formatting and validating URLs. */ -public class UrlUtil { - private static final String HTTPS = "https"; - - public static class LinkDisplay { - public final String name; - public final String url; - - /** - * Create a link display object. - * - * @param uri The hyperlink URI. - */ - public LinkDisplay(URI uri) { - this.url = uri.toString(); - - // Parse the name from the URI path - int lastSeparator = uri.getPath().lastIndexOf('/'); - if (lastSeparator < 0) { - this.name = uri.toString(); - } else { - this.name = uri.getPath().substring(lastSeparator + 1); - } - } - } - - /** - * Validates and formats a URL. - * - * <p>Ensures that the protocol is HTTPs and the URL is properly formatted. This avoids link - * issues in the UI and possible vulnerabilities due to embedded JS in URLs. - * - * @param urlString The url string to validate. - * @returns The validated LinkDisplay object. - */ - public static LinkDisplay processUrl(String urlString) { - try { - URL url = new URL(urlString); - String scheme = url.getProtocol(); - String userInfo = url.getUserInfo(); - String host = url.getHost(); - int port = url.getPort(); - String path = url.getPath(); - String query = url.getQuery(); - String fragment = url.getRef(); - if (!url.getProtocol().equals(HTTPS)) - throw new MalformedURLException(); - URI uri = new URI(scheme, userInfo, host, port, path, query, fragment); - return new LinkDisplay(uri); - } catch (MalformedURLException | URISyntaxException e) { - return null; - } - } -} diff --git a/src/main/proto/TestSuiteResultMessage.proto b/src/main/proto/TestSuiteResultMessage.proto deleted file mode 100644 index be447e9..0000000 --- a/src/main/proto/TestSuiteResultMessage.proto +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 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. - -syntax = "proto2"; - -package android.vts; -import "TestScheduleConfigMessage.proto"; -option java_package = "com.android.vts.proto"; -option java_outer_classname = "TestSuiteResultMessageProto"; -option java_multiple_files = false; - -// To specify the test results which are uploaded to vts dashboard. -message TestSuiteResultMessage { - // oauth2.0 access token - optional string access_token = 1; - - // GCS path to the corresponding result directory - optional string result_path = 2; - - // whether the device(s) booted-up successfully - optional bool boot_success = 3 [default = true]; - - // test suite build info - required string branch = 11; - required string target = 12; - required string build_id = 13; - - // attributes of Result tag - optional string suite_plan = 21; - optional string suite_version = 22; - optional string suite_build_number = 23; - optional int64 start_time = 24; - optional int64 end_time = 25; - optional string host_name = 26; - optional string suite_name = 27; - - // attributes of Build tag - optional string build_system_fingerprint = 31; - optional string build_vendor_fingerprint = 32; - optional int32 test_type = 33 [default = 0]; - - // attributes of Summary tag - optional int32 passed_test_case_count = 41; - optional int32 failed_test_case_count = 42; - optional int32 modules_done = 43; - optional int32 modules_total = 44; - - // GCS path to the corresponding infra log file. - optional string infra_log_path = 51; - - // GCS path to the repacked device[+GSI] image set. - repeated string repacked_image_path = 52; - - // Fetch info used to fetch and flash certain builds for retry_prompt command. - optional string vendor_build_id = 61; - optional string gsi_build_id = 62; - - optional android.test.lab.ScheduleConfigMessage schedule_config = 63 [ deprecated = true ]; -}
\ No newline at end of file diff --git a/src/main/resources/bug_tracking_system/buganizer/config.properties b/src/main/resources/bug_tracking_system/buganizer/config.properties deleted file mode 100644 index d83ad57..0000000 --- a/src/main/resources/bug_tracking_system/buganizer/config.properties +++ /dev/null @@ -1,12 +0,0 @@ - -buganizer.uri.scheme= -buganizer.uri.host= -buganizer.uri.path= - -buganizer.labInfraIssue.template.name= -buganizer.labInfraIssue.component.id= -buganizer.labInfraIssue.template.id= - -buganizer.crashSecurity.template.name= -buganizer.crashSecurity.component.id= -buganizer.crashSecurity.template.id= diff --git a/src/main/resources/config.properties b/src/main/resources/config.properties deleted file mode 100644 index 5d56f08..0000000 --- a/src/main/resources/config.properties +++ /dev/null @@ -1,28 +0,0 @@ - -appengine.version= -appengine.clientID= -appengine.serviceClientID= -appengine.senderEmail= -appengine.emailDomain= -appengine.defaultEmail= - -gerrit.uri= -gerrit.scope= - -analytics.id= - -gcs.projectID= -gcs.keyFile= -gcs.bucketName= -gcs.infraLogBucketName= -gcs.suiteTestFolderName= - -api.coverage.keyFile= -api.coverage.spreadSheetId= -api.coverage.spreadSheetRange= - -bug.tracking.system= - -user.adminEmail= -user.adminName= -user.adminCompany= diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml deleted file mode 100644 index 0300f9e..0000000 --- a/src/main/resources/log4j2.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Configuration status="WARN"> - <Appenders> - <Console name="Console" target="SYSTEM_OUT"> - <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> - </Console> - </Appenders> - <Loggers> - <Root level="trace"> - <AppenderRef ref="Console"/> - </Root> - </Loggers> -</Configuration>
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/appengine-web.xml b/src/main/webapp/WEB-INF/appengine-web.xml deleted file mode 100644 index 714aa54..0000000 --- a/src/main/webapp/WEB-INF/appengine-web.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright 2016 Google Inc. - 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. ---> - -<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> - <threadsafe>true</threadsafe> - <sessions-enabled>true</sessions-enabled> - <runtime>java8</runtime> - <instance-class>F4_1G</instance-class> - - <system-properties> - </system-properties> - -</appengine-web-app>
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/cron.xml b/src/main/webapp/WEB-INF/cron.xml deleted file mode 100644 index 78beefb..0000000 --- a/src/main/webapp/WEB-INF/cron.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -Copyright 2016 Google Inc. All Rights Reserved. - - 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. ---> -<cronentries> - <cron> - <url>/cron/vts_performance_job</url> - <description>Send daily performance digests.</description> - <schedule>every day 07:30</schedule> - <timezone>America/Los_Angeles</timezone> - </cron> - <cron> - <url>/cron/vts_inactivity_job</url> - <description>Send daily inactivity warnings.</description> - <schedule>every day 07:30</schedule> - <timezone>America/Los_Angeles</timezone> - </cron> - <cron> - <url>/cron/test_suite_report_gcs_monitor</url> - <description>Process suite test report from gcs.</description> - <schedule>every 5 mins</schedule> - <timezone>America/Los_Angeles</timezone> - </cron> - <cron> - <url>/cron/vts_spreadsheet_sync_job</url> - <description>Sync google spreadsheet data with datastore entity.</description> - <schedule>every day 00:30</schedule> - <timezone>America/Los_Angeles</timezone> - </cron> -</cronentries>
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/datastore-indexes.xml b/src/main/webapp/WEB-INF/datastore-indexes.xml deleted file mode 100644 index e4f4a10..0000000 --- a/src/main/webapp/WEB-INF/datastore-indexes.xml +++ /dev/null @@ -1,176 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright 2017 Google Inc. - 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. ---> - -<datastore-indexes autoGenerate="true"> - - <datastore-index kind="TestPlanRun" ancestor="true" source="manual"> - <property name="type" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestPlanRun" ancestor="true" source="manual"> - <property name="type" direction="asc"/> - <property name="__key__" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestPlanRun" ancestor="true" source="manual"> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestPlanRun" ancestor="true" source="manual"> - <property name="passCount" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestPlanRun" ancestor="true" source="manual"> - <property name="failCount" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestStatus" ancestor="false" source="manual"> - <property name="failCount" direction="asc"/> - <property name="passCount" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="true" source="manual"> - <property name="type" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="true" source="manual"> - <property name="type" direction="asc"/> - <property name="__key__" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="true" source="manual"> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="true" source="manual"> - <property name="hasCoverage" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="true" source="manual"> - <property name="passCount" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="true" source="manual"> - <property name="failCount" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="false" source="manual"> - <property name="testName" direction="asc"/> - <property name="startTimestamp" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="false" source="manual"> - <property name="testName" direction="asc"/> - <property name="startTimestamp" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="false" source="manual"> - <property name="testName" direction="asc"/> - <property name="type" direction="asc"/> - <property name="startTimestamp" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestRun" ancestor="false" source="manual"> - <property name="testName" direction="asc"/> - <property name="type" direction="asc"/> - <property name="startTimestamp" direction="desc"/> - </datastore-index> - - <datastore-index kind="ProfilingPointSummary" ancestor="true" source="manual"> - <property name="branch" direction="asc"/> - <property name="buildFlavor" direction="asc"/> - <property name="startTime" direction="asc"/> - </datastore-index> - - <datastore-index kind="DeviceInfo" ancestor="true" source="manual"> - <property name="branch" direction="asc"/> - <property name="buildFlavor" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestSuiteFileEntity" ancestor="false" source="manual"> - <property name="day" direction="asc"/> - <property name="month" direction="asc"/> - <property name="year" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="branch" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="hostName" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="buildId" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="deviceName" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="testType" direction="asc"/> - <property name="suitePlan" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="suitePlan" direction="asc"/> - <property name="testTypeIndex.TOT" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="suitePlan" direction="asc"/> - <property name="testTypeIndex.OTA" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="suitePlan" direction="asc"/> - <property name="testTypeIndex.SIGNED" direction="asc"/> - <property name="__key__" direction="desc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="suitePlan" direction="asc"/> - <property name="branch" direction="asc"/> - <property name="target" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="branch" direction="asc"/> - <property name="failedTestCaseCount" direction="asc"/> - <property name="suitePlan" direction="asc"/> - <property name="target" direction="asc"/> - <property name="__key__" direction="asc"/> - <property name="buildId" direction="asc"/> - </datastore-index> - - <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual"> - <property name="branch" direction="asc"/> - <property name="suitePlan" direction="asc"/> - <property name="target" direction="asc"/> - <property name="__key__" direction="asc"/> - <property name="buildId" direction="asc"/> - </datastore-index> -</datastore-indexes> diff --git a/src/main/webapp/WEB-INF/jsp/auth_error.jsp b/src/main/webapp/WEB-INF/jsp/auth_error.jsp deleted file mode 100644 index 43bd9f3..0000000 --- a/src/main/webapp/WEB-INF/jsp/auth_error.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%-- - ~ Copyright (c) 2018 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <link rel='stylesheet' href='/css/dashboard_main.css'> - <%@ include file='header.jsp' %> - <body> - - <div class='container wide'> - - <div class="card-panel"> - <span class="red-text text-darken-2"> - <h3> Sorry! you got a wrong email account. </h3> - <br/> - You have to register an account to access dashboard. - </span> - </div> - - </div> - <%@ include file='footer.jsp' %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/dashboard_main.jsp b/src/main/webapp/WEB-INF/jsp/dashboard_main.jsp deleted file mode 100644 index 71f6679..0000000 --- a/src/main/webapp/WEB-INF/jsp/dashboard_main.jsp +++ /dev/null @@ -1,351 +0,0 @@ -<%-- - ~ Copyright (c) 2016 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <link rel='stylesheet' href='/css/dashboard_main.css'> - <%@ include file='header.jsp' %> - <body> - <script> - var allTests = ${allTestsJson}; - var testSet = new Set(allTests); - var subscriptionMap = ${subscriptionMapJson}; - - var addFavorite = function() { - if ($(this).hasClass('disabled')) { - return; - } - var test = $('#input-box').val(); - if (!testSet.has(test) || test in subscriptionMap) { - return; - } - $('#add-button').addClass('disabled'); - $.post('/api/favorites', { testName: test}).then(function(data) { - if (!data.key) { - return; - } - subscriptionMap[test] = data.key; - var wrapper = $('<div></div>'); - var a = $('<a></a>') - .attr('href', '${resultsUrl}?testName=' + test); - var div = $('<div class="col s11 card hoverable option"></div>'); - div.addClass('valign-wrapper waves-effect'); - div.appendTo(a); - var span = $('<span class="entry valign"></span>').text(test); - span.appendTo(div); - a.appendTo(wrapper); - - var btnContainer = $('<div class="col s1 center btn-container"></div>'); - var silence = $('<a class="col s6 btn-flat notification-button active"></a>'); - silence.append('<i class="material-icons">notifications_active</i>'); - silence.attr('test', test); - silence.attr('title', 'Disable notifications'); - silence.appendTo(btnContainer); - silence.click(toggleNotifications); - - var clear = $('<a class="col s6 btn-flat remove-button"></a>'); - clear.append('<i class="material-icons">clear</i>'); - clear.attr('test', test); - clear.attr('title', 'Remove favorite'); - clear.appendTo(btnContainer); - clear.click(removeFavorite); - - btnContainer.appendTo(wrapper); - - wrapper.prependTo('#options').hide() - .slideDown(150); - $('#input-box').val(null); - Materialize.updateTextFields(); - }).always(function() { - $('#add-button').removeClass('disabled'); - }); - } - - var toggleNotifications = function() { - var self = $(this); - if (self.hasClass('disabled')) { - return; - } - self.addClass('disabled'); - var test = self.attr('test'); - if (!(test in subscriptionMap)) { - return; - } - var muteStatus = self.hasClass('active'); - var element = self; - $.post('/api/favorites', { userFavoritesKey: subscriptionMap[test], muteNotifications: muteStatus}).then(function(data) { - element = self.clone(); - if (element.hasClass('active')) { - element.find('i').text('notifications_off') - element.removeClass('active'); - element.addClass('inactive'); - element.attr('title', 'Enable notifications'); - } else { - element.find('i').text('notifications_active') - element.removeClass('inactive'); - element.addClass('active'); - element.attr('title', 'Disable notifications'); - } - element.click(toggleNotifications); - self.replaceWith(function() { - return element; - }); - }).always(function() { - element.removeClass('disabled'); - }); - } - - var removeFavorite = function() { - var self = $(this); - if (self.hasClass('disabled')) { - return; - } - var test = self.attr('test'); - if (!(test in subscriptionMap)) { - return; - } - self.addClass('disabled'); - $.ajax({ - url: '/api/favorites/' + subscriptionMap[test], - type: 'DELETE' - }).always(function() { - self.removeClass('disabled'); - }).then(function() { - delete subscriptionMap[test]; - self.parent().parent().slideUp(150, function() { - self.remove(); - }); - }); - } - - var addFavoriteButton = function() { - var self = $(this); - var test = self.attr('test'); - - $.post('/api/favorites', { testName: test}).then(function(data) { - if (data.key) { - subscriptionMap[test] = data.key; - - self.children().text("star"); - self.switchClass("add-fav-button", "min-fav-button", 0); - - self.off('click', addFavoriteButton); - self.on('click', removeFavoriteButton); - } - }) - .fail(function() { - alert( "Error occurred on registering your favorite test case!" ); - }); - } - - var removeFavoriteButton = function() { - var self = $(this); - var test = self.attr('test'); - - $.ajax({ - url: '/api/favorites/' + subscriptionMap[test], - type: 'DELETE' - }).then(function() { - delete subscriptionMap[test]; - - self.children().text("star_border"); - self.switchClass("min-fav-button", "add-fav-button", 0); - - self.off('click', removeFavoriteButton); - self.on('click', addFavoriteButton); - }); - } - - $.widget('custom.sizedAutocomplete', $.ui.autocomplete, { - _resizeMenu: function() { - this.menu.element.outerWidth($('#input-box').width()); - } - }); - - $(function() { - $('#input-box').sizedAutocomplete({ - source: allTests, - classes: { - 'ui-autocomplete': 'card' - } - }); - - $('#input-box').keyup(function(event) { - if (event.keyCode == 13) { // return button - $('#add-button').click(); - } - }); - - $('.remove-button').click(removeFavorite); - $('.notification-button').click(toggleNotifications); - $('#add-button').click(addFavorite); - - $('.add-fav-button').click(addFavoriteButton); - - $('.min-fav-button').click(removeFavoriteButton); - - $('#favoritesLink').click(function() { - window.open('/', '_self'); - }); - $('#allLink').click(function() { - window.open('/?showAll=true', '_self'); - }); - $('#acksLink').click(function() { - window.open('/show_test_acknowledgments', '_self'); - }); - }); - </script> - <div class='container wide'> - - <c:if test="${!showAll}"> - <ul id="guide_collapsible" class="collapsible" data-collapsible="accordion"> - <li> - <div class="collapsible-header"> - <i class="material-icons">library_books</i> - Notice - <span class="new badge right" style="position: inherit;">1</span> - </div> - <div class="collapsible-body"> - <div class='row'> - <div class='col s12' style="margin: 15px 0px 0px 30px;"> - <c:choose> - <c:when test="${fn:endsWith(serverName, 'googleplex.com')}"> - <c:set var="dataVersion" scope="page" value="new"/> - <c:choose> - <c:when test="${fn:startsWith(serverName, 'android-vts-internal')}"> - <c:set var="dataLink" scope="page" value="https://android-vts.appspot.com"/> - </c:when> - <c:when test="${fn:startsWith(serverName, 'android-vts-staging')}"> - <c:set var="dataLink" scope="page" value="https://android-vts-staging.appspot.com"/> - </c:when> - <c:otherwise> - <c:set var="dataLink" scope="page" value="https://android-vts-staging.appspot.com"/> - </c:otherwise> - </c:choose> - </c:when> - <c:when test="${fn:endsWith(serverName, 'appspot.com')}"> - <c:set var="dataVersion" scope="page" value="previous"/> - <c:choose> - <c:when test="${fn:startsWith(serverName, 'android-vts-staging')}"> - <c:set var="dataLink" scope="page" value="https://android-vts-staging.googleplex.com"/> - </c:when> - <c:when test="${fn:startsWith(serverName, 'android-vts')}"> - <c:set var="dataLink" scope="page" value="https://android-vts-internal.googleplex.com"/> - </c:when> - <c:otherwise> - <c:set var="dataLink" scope="page" value="https://android-vts-staging.googleplex.com"/> - </c:otherwise> - </c:choose> - </c:when> - <c:otherwise> - <c:set var="dataVersion" scope="page" value="local dev"/> - <c:set var="dataLink" scope="page" value="http://localhost"/> - </c:otherwise> - </c:choose> - Recently, we launched new appspot servers for dashboard. Thus you will have two diffrent versions of server for each staging and production data. - <br/> - If you want to find the <c:out value = "${dataVersion}"/> test data, please visit the next url <a href="<c:out value = "${dataLink}"/>"><c:out value = "${dataLink}"/></a>. - </div> - </div> - </div> - </li> - </ul> - </c:if> - - <c:choose> - <c:when test='${not empty error}'> - <div id='error-container' class='row card'> - <div class='col s12 center-align'> - <h5>${error}</h5> - </div> - </div> - </c:when> - <c:otherwise> - <div class='row home-tabs-row'> - <div class='col s12'> - <ul class='tabs'> - <li class='tab col s4' id='favoritesLink'><a class='${showAll ? "inactive" : "active"}'>Favorites</a></li> - <li class='tab col s4' id='allLink'><a class='${showAll ? "active" : "inactive"}'>All Tests</a></li> - <li class='tab col s4' id='acksLink'><a>Test Acknowledgements</a></li> - </ul> - </div> - </div> - <c:set var='width' value='${showAll ? 11 : 11}' /> - <c:if test='${not showAll}'> - <div class='row'> - <div class='input-field col s8'> - <input type='text' id='input-box'></input> - <label for='input-box'>Search for tests to add to favorites</label> - </div> - <div id='add-button-wrapper' class='col s1 valign-wrapper'> - <a id='add-button' class='btn-floating btn waves-effect waves-light red valign'><i class='material-icons'>add</i></a> - </div> - </div> - </c:if> - <div class='row' id='options'> - <c:forEach items='${testNames}' var='test'> - <div> - <a href='${resultsUrl}?testName=${test.name}'> - <div class='col s${width} card hoverable option valign-wrapper waves-effect'> - <span class='entry valign'>${test.name} - <c:if test='${test.failCount >= 0 && test.passCount >= 0}'> - <c:set var='color' value='${test.failCount > 0 ? "red" : (test.passCount > 0 ? "green" : "grey")}' /> - <span class='indicator right center ${color}'> - ${test.passCount} / ${test.passCount + test.failCount} - </span> - </c:if> - </span> - </div> - </a> - <c:choose> - <c:when test="${showAll}"> - <div class="col s1 center btn-container"> - <c:choose> - <c:when test="${test.isFavorite}"> - <a class="col s6 btn-flat min-fav-button" test="${test.name}" title="Remove favorite"> - <i class="material-icons">star</i> - </a> - </c:when> - <c:otherwise> - <a class="col s6 btn-flat add-fav-button" test="${test.name}" title="Add favorite"> - <i class="material-icons">star_border</i> - </a> - </c:otherwise> - </c:choose> - </div> - </c:when> - <c:otherwise> - <div class='col s1 center btn-container'> - <a class='col s6 btn-flat notification-button ${test.muteNotifications ? "inactive" : "active"}' test='${test.name}' title='${test.muteNotifications ? "Enable" : "Disable"} notifications'> - <i class='material-icons'>notifications_${test.muteNotifications ? "off" : "active"}</i> - </a> - <a class='col s6 btn-flat remove-button' test='${test.name}' title='Remove favorite'> - <i class='material-icons'>clear</i> - </a> - </div> - </c:otherwise> - </c:choose> - </div> - </c:forEach> - </div> - </c:otherwise> - </c:choose> - </div> - <%@ include file='footer.jsp' %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/error_msg.jsp b/src/main/webapp/WEB-INF/jsp/error_msg.jsp deleted file mode 100644 index 13e6657..0000000 --- a/src/main/webapp/WEB-INF/jsp/error_msg.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%-- - ~ Copyright (c) 2018 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> -<link rel='stylesheet' href='/css/dashboard_main.css'> -<%@ include file='header.jsp' %> -<body> - -<div class='container wide'> - - <div class="card-panel"> - <span class="red-text text-darken-2"> - <h3> <c:out value="${error_title}"></c:out> </h3> - <br/> - <c:out value="${error_message}"></c:out> - </span> - </div> - -</div> -<%@ include file='footer.jsp' %> -</body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/footer.jsp b/src/main/webapp/WEB-INF/jsp/footer.jsp deleted file mode 100644 index b804a21..0000000 --- a/src/main/webapp/WEB-INF/jsp/footer.jsp +++ /dev/null @@ -1,25 +0,0 @@ -<%-- - ~ Copyright (c) 2017 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - -<footer class="page-footer" style="height: 70px;"> - <div class="footer-copyright"> - <div class="container"> - © 2017 - The Android Open Source Project - </div> - </div> -</footer> diff --git a/src/main/webapp/WEB-INF/jsp/header.jsp b/src/main/webapp/WEB-INF/jsp/header.jsp deleted file mode 100644 index 1d7de87..0000000 --- a/src/main/webapp/WEB-INF/jsp/header.jsp +++ /dev/null @@ -1,70 +0,0 @@ -<%-- - ~ Copyright (c) 2017 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<head> - <link rel='stylesheet' href='https://www.gstatic.com/external_hosted/materialize/all_styles-bundle.css'> - <link rel='icon' href='https://www.gstatic.com/images/branding/googleg/1x/googleg_standard_color_32dp.png' sizes='32x32'> - <link rel='stylesheet' href='https://fonts.googleapis.com/icon?family=Material+Icons'> - <link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700'> - <link rel='stylesheet' href='/css/navbar.css'> - <link rel='stylesheet' href='/css/common.css'> - <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script> - <script src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js'></script> - <script src='https://www.gstatic.com/external_hosted/materialize/materialize.min.js'></script> - <script type='text/javascript'> - if (${analyticsID}) { - // Autogenerated from Google Analytics - (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); - ga('create', ${analyticsID}, 'auto'); - ga('send', 'pageview'); - } - </script> - <title>VTS Dashboard</title> -</head> -<body> - <nav id='navbar'> - <div class='nav-wrapper'> - <a href='#' class='brand-logo center'>VTS Dashboard</a> - <ul class='nav-list'> - <c:forEach items='${navbarLinks}' var='link' varStatus='loop'> - <li class='${loop.index == activeIndex ? "active" : ""}'> - <a class='nav-list-item' href='${link.url}'>${link.name}</a> - </li> - </c:forEach> - </ul> - <ul class='right'><li> - <a id='dropdown-button' class='dropdown-button btn red lighten-3' href='#' data-activates='dropdown'> - ${email} - </a> - </li></ul> - <ul id='dropdown' class='dropdown-content'> - <li><a href='${logoutURL}'>Log out</a></li> - </ul> - <c:if test='${breadcrumbLinks != null}'> - <div id='nav-sublist'> - <c:forEach items='${breadcrumbLinks}' var='link'> - <a href='${link.url}' class='nav-sublist-item breadcrumb'>${link.name}</a> - </c:forEach> - </div> - </c:if> - </div> - </nav> -</body> diff --git a/src/main/webapp/WEB-INF/jsp/show_coverage.jsp b/src/main/webapp/WEB-INF/jsp/show_coverage.jsp deleted file mode 100644 index ee68588..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_coverage.jsp +++ /dev/null @@ -1,210 +0,0 @@ -<%-- - ~ Copyright (c) 2016 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link rel="stylesheet" href="/css/show_coverage.css"> - <script async defer src="https://apis.google.com/js/api.js" - onload="this.onload=function(){};handleClientLoad()" - onreadystatechange="if (this.readyState === 'complete') this.onload()"> - </script> - <body> - <script type="text/javascript"> - $(document).ready(function() { - // Initialize AJAX for CORS - $.ajaxSetup({ - xhrFields : { - withCredentials: true - } - }); - - $('.collapsible.popout').collapsible({ - accordion : true - }).find('.collapsible-header').click(onClick); - - - $("div.collapsible-header > span.indicator.waves-effect").click(function(evt) { - evt.preventDefault(); - - $("#loader-indicator").show(); - - var cmd = $(evt.target).text(); - var testRunId = $(evt.target).data("id"); - var postData = { coverageId: testRunId, testName: "${testName}", testRunId: "${startTime}", cmd: cmd}; - $.post("/api/coverage/data", postData, function() { - // success - console.log("success"); - var detachedLi = $(evt.target).parent().parent().detach(); - if (cmd == "enable") { - $(evt.target).text("disable"); - $(evt.target).parent().removeClass("grey"); - $('ul.collapsible.popout').prepend(detachedLi); - } else { - $(evt.target).text("enable"); - $(evt.target).parent().addClass("grey"); - $('ul.collapsible.popout').append(detachedLi); - } - }) - .done(function() { - // Done - $("#loader-indicator").fadeOut("slow"); - }) - .fail(function() { - alert( "Error occurred during changing the status" ); - }); - }); - }); - - function handleClientLoad() { - // Load the API client and auth2 library - gapi.load('client:auth2', initClient); - } - - function initClient() { - gapi.client.init({ - client_id: ${clientId}, - scope: ${gerritScope} - }).then(function () { - // displayEntries(); - }); - } - - /* Open a window to Gerrit so that user can login. - Minimize the previously clicked entry. - */ - var gerritLogin = function(element) { - window.open(${gerritURI}, "Ratting", "toolbar=0,status=0"); - element.click(); - } - - /* Loads source code for a particular entry and displays it with - coverage information as the accordion entry expands. - */ - var onClick = function() { - // Remove source code from the accordion entry that was open before - var self = $(this); - var prev = self.parent().siblings('li.active'); - if (prev.length > 0) { - prev.find('.table-container').empty(); - } - var url = self.parent().data('url'); - var container = self.parent().find('.table-container'); - container.html('<div class="center-align">Loading...</div>'); - var coverageVectors = self.parent().data('coverage'); - if (self.parent().hasClass('active')) { - // Remove the code from display - container.empty(); - } else { - /* Fetch and display the code. - Note: a coverageVector may be shorter than sourceContents due - to non-executable (i.e. comments or language-specific syntax) - lines in the code. Trailing source lines that have no - coverage information are assumed to be non-executable. - */ - $.ajax({ - url: url, - dataType: 'text' - }).promise().done(function(src) { - src = atob(src); - if (!src) return; - srcLines = src.split('\n'); - covered = 0; - total = 0; - var table = $('<table class="table"></table>'); - var rows = srcLines.forEach(function(line, j) { - var count = coverageVectors[j]; - var row = $('<tr></tr>'); - if (typeof count == 'undefined' || count < 0) { - count = "--"; - } else if (count == 0) { - row.addClass('uncovered'); - total += 1; - } else { - row.addClass('covered'); - total += 1; - } - row.append('<td class="count">' + String(count) + '</td>'); - row.append('<td class="line_no">' + String(j+1) + '</td>'); - code = $('<td class="code"></td>'); - code.text(String(line)); - code.appendTo(row); - row.appendTo(table); - }); - container.empty(); - container.append(table); - }).fail(function(error) { - if (error.status == 0) { // origin error, refresh cookie - container.empty(); - container.html('<div class="center-align">' + - '<span class="login-button">' + - 'Click to authorize Gerrit access' + - '</span></div>'); - container.find('.login-button').click(function() { - gerritLogin(self); - }); - } else { - container.html('<div class="center-align">' + - 'Not found.</div>'); - } - }); - } - } - </script> - <div id='coverage-container' class='wide container'> - <h4 class="section-title"><b>Coverage:</b> </h4> - <ul class="collapsible popout" data-collapsible="accordion"> - <c:forEach var="coverageEntity" items="${coverageEntityList}" varStatus="loop"> - <li data-url="<c:url value="${coverageEntity.gerritUrl}"/>" data-index="${loop.index}" data-coverage="${coverageEntity.lineCoverage}"> - <div class="collapsible-header <c:out value='${coverageEntity.isIgnored ? "grey" : ""}'/>"> - <i class="material-icons">library_books</i> - <div class="truncate"><b>${coverageEntity.projectName}</b>/${coverageEntity.filePath}</div> - <div class="right total-count">${coverageEntity.coveredCount}/${coverageEntity.totalCount}</div> - <div class="indicator ${coverageEntity.percentage >= 70 ? "green" : "red"}">${coverageEntity.percentage}%</div> - <c:if test="${isModerator}"> - <span data-id="${coverageEntity.id}" class="indicator waves-effect blue lighten-1" style="margin-left: 5px;"><c:out value='${coverageEntity.isIgnored ? "enable" : "disable"}'/></span> - </c:if> - </div> - <div class="collapsible-body row"> - <div class="html-container"> - <div class="table-container"></div> - </div> - </div> - </li> - </c:forEach> - </ul> - </div> - - <div id="loader-indicator" class="loader-background" style="display: none"> - <div class="preloader-wrapper big active"> - <div class="spinner-layer spinner-blue-only"> - <div class="circle-clipper left"> - <div class="circle"></div> - </div> - <div class="gap-patch"> - <div class="circle"></div> - </div> - <div class="circle-clipper right"> - <div class="circle"></div> - </div> - </div> - </div> - </div> - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_coverage_overview.jsp b/src/main/webapp/WEB-INF/jsp/show_coverage_overview.jsp deleted file mode 100644 index 0516c9d..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_coverage_overview.jsp +++ /dev/null @@ -1,505 +0,0 @@ -<%-- - ~ Copyright (c) 2017 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %> -<%@ taglib prefix='fmt' uri='http://java.sun.com/jsp/jstl/fmt' %> - -<html> - <!-- <link rel='stylesheet' href='/css/dashboard_main.css'> --> - <%@ include file='header.jsp' %> - <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'> - <link type='text/css' href='/css/test_results.css' rel='stylesheet'> - <link rel='stylesheet' href='/css/search_header.css'> - <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/common.js'></script> - <script src='js/time.js'></script> - <script type='text/javascript'> - google.charts.load('current', {'packages':['table', 'corechart']}); - google.charts.setOnLoadCallback(drawStatsChart); - google.charts.setOnLoadCallback(drawCoverageCharts); - - $(document).ready(function() { - - $('select').material_select(); - - $(".search-icon-wrapper").click(function() { - $(".search-wrapper").toggle(); - }); - - var inputIdList = ["device", "branch"]; - - $("#schBtn").click(function (evt) { - if($(this).hasClass('disabled')) return; - var queryParam = "?"; - $.each(inputIdList, function( index, value ) { - var selectId = value.charAt(0).toUpperCase() + value.slice(1) - var result = $("#search" + selectId).val(); - if ( !$.isEmptyObject(result) ) { - queryParam += value + "=" + result.trim() + "&"; - } - }); - var link = '${pageContext.request.contextPath}' + '/show_coverage_overview' + queryParam; - window.open(link, '_self'); - }); - - var no_data_msg = "NO DATA"; - - $('#coverageModalGraph').modal({ - width: '75%', - dismissible: true, // Modal can be dismissed by clicking outside of the modal - opacity: .5, // Opacity of modal background - inDuration: 300, // Transition in duration - outDuration: 200, // Transition out duration - startingTop: '4%', // Starting top style attribute - endingTop: '10%', // Ending top style attribute - ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available. - var testname = modal.data('testname'); - $('#coverageModalTitle').text("Code Coverage Chart : " + testname); - var query = new google.visualization.Query('show_coverage_overview?pageType=datatable&testName=' + testname); - // Send the query with a callback function. - query.send(handleQueryResponse); - }, - complete: function() { - $('#coverage_combo_chart_div').empty(); - $('#coverage_line_chart_div').empty(); - $('#coverage_table_chart_div').empty(); - - $("div.valign-wrapper > h2.center-align:contains('" + no_data_msg + "')").each(function(index){ - $(this).parent().remove(); - }); - $("span.indicator.badge.blue:contains('Graph')").each(function( index ) { - $(this).removeClass('blue'); - $(this).addClass('grey'); - }); - - $('#dataTableLoading').show("slow"); - } // Callback for Modal close - }); - - // Handle the query response. - function handleQueryResponse(response) { - $('#dataTableLoading').hide("slow"); - if (response.isError()) { - alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); - return; - } - // Draw the visualization. - var data = response.getDataTable(); - if (data.getNumberOfRows() == 0) { - var blankData = '<div class="valign-wrapper" style="height: 90%;">' - + '<h2 class="center-align" style="width: 100%;">' + no_data_msg + '</h2>' - + '</div>'; - $('#coverageModalTitle').after(blankData); - return; - } - data.sort([{column: 0}]); - - var date_formatter = new google.visualization.DateFormat({ pattern: "yyyy-MM-dd" }); - date_formatter.format(data, 0); - - var dataView = new google.visualization.DataView(data); - - // Disable coveredLine and totalLine - dataView.hideColumns([1,2]); - - var lineOptions = { - title: 'Source Code Line Coverage', - width: '100%', - height: 450, - curveType: 'function', - intervals: { 'color' : 'series-color' }, - interval: { - 'fill': { - 'style': 'area', - 'curveType': 'function', - 'fillOpacity': 0.2 - }, - 'bar': { - 'style': 'bars', - 'barWidth': 0, - 'lineWidth': 1, - 'pointSize': 3, - 'fillOpacity': 1 - }}, - legend: { position: 'bottom' }, - tooltip: { isHtml: true }, - fontName: 'Roboto', - titleTextStyle: { - color: '#757575', - fontSize: 16, - bold: false - }, - pointsVisible: true, - vAxis:{ - title: 'Code Coverage Ratio (%)', - titleTextStyle: { - color: '#424242', - fontSize: 12, - italic: false - }, - textStyle: { - fontSize: 12, - color: '#757575' - }, - }, - hAxis: { - title: 'Date', - format: 'yyyy-MM-dd', - minTextSpacing: 0, - showTextEvery: 1, - slantedText: true, - slantedTextAngle: 45, - textStyle: { - fontSize: 12, - color: '#757575' - }, - titleTextStyle: { - color: '#424242', - fontSize: 12, - italic: false - } - }, - }; - var lineChart = new google.visualization.LineChart(document.getElementById('coverage_line_chart_div')); - lineChart.draw(dataView, lineOptions); - - var tableOptions = { - title: 'Covered/Total Source Code Line Count (SLOC)', - width: '95%', - // height: 350, - is3D: true - }; - var tableChart = new google.visualization.Table(document.getElementById('coverage_table_chart_div')); - tableChart.draw(data, tableOptions); - } - - $('.collapsible').collapsible({ - accordion: false, - onOpen: function(el) { - var header = $( el[0].children[0] ); - var body = $( el[0].children[1] ); - var icon = header.children('.material-icons.expand-arrow'); - var testName = header.data('test'); - var timestamp = header.data('time'); - var url = '/api/test_run?test=' + testName + '×tamp=' + timestamp; - $.get(url).done(function(data) { - displayTestDetails(body, data, 16); - }).fail(function() { - icon.removeClass('rotate'); - }).always(function() { - header.removeClass('disabled'); - }); - }, // Callback for Collapsible open - onClose: function(el) { - console.log(el); - var body = $( el[0].children[1] ); - body.empty(); - } // Callback for Collapsible close - }); - - $( "span.indicator.badge:contains('Coverage')" ).click(function (evt) { - var header = $(evt.currentTarget.parentElement); - var testName = header.data('test'); - var startTime = header.data('time'); - var url = '/show_coverage?testName=' + testName + '&startTime=' + startTime; - window.location.href = url; - return false; - }); - - $( "span.indicator.badge:contains('Links')" ).click(function (evt) { - var header = $(evt.currentTarget.parentElement); - var logLinks = header.data('links'); - showLinks($('body'), logLinks); - return false; - }); - - $( "span.indicator.badge:contains('Graph')" ).click(function (evt) { - var header = $(evt.currentTarget.parentElement); - var testname = header.data('test'); - $('#coverageModalGraph').data("testname", testname); - $('#coverageModalGraph').modal('open'); - $(evt.target).removeClass("grey"); - $(evt.target).addClass("blue"); - return false; - }); - }); - - // draw test statistics chart - function drawStatsChart() { - var testStats = ${testStats}; - if (testStats.length < 1) { - return; - } - var resultNames = ${resultNamesJson}; - var rows = resultNames.map(function(res, i) { - nickname = res.replace('TEST_CASE_RESULT_', '').replace('_', ' ') - .trim().toLowerCase(); - return [nickname, parseInt(testStats[i])]; - }); - rows.unshift(['Result', 'Count']); - - // Get CSS color definitions (or default to white) - var colors = resultNames.map(function(res) { - return $('.' + res).css('background-color') || 'white'; - }); - - var data = google.visualization.arrayToDataTable(rows); - var options = { - is3D: false, - colors: colors, - fontName: 'Roboto', - fontSize: '14px', - legend: {position: 'labeled'}, - tooltip: {showColorCode: true, ignoreBounds: false}, - chartArea: {height: '80%', width: '90%'}, - pieHole: 0.4 - }; - - var chart = new google.visualization.PieChart(document.getElementById('pie-chart-stats')); - chart.draw(data, options); - } - - // draw the coverage pie charts - function drawCoverageCharts() { - var coveredLines = ${coveredLines}; - var uncoveredLines = ${uncoveredLines}; - var rows = [ - ["Result", "Count"], - ["Covered Lines", coveredLines], - ["Uncovered Lines", uncoveredLines] - ]; - - // Get CSS color definitions (or default to white) - var colors = [ - $('.TEST_CASE_RESULT_PASS').css('background-color') || 'white', - $('.TEST_CASE_RESULT_FAIL').css('background-color') || 'white' - ] - - var data = google.visualization.arrayToDataTable(rows); - - var optionsRaw = { - is3D: false, - colors: colors, - fontName: 'Roboto', - fontSize: '14px', - pieSliceText: 'value', - legend: {position: 'bottom'}, - chartArea: {height: '80%', width: '90%'}, - tooltip: {showColorCode: true, ignoreBounds: false, text: 'value'}, - pieHole: 0.4 - }; - - var optionsNormalized = { - is3D: false, - colors: colors, - fontName: 'Roboto', - fontSize: '14px', - legend: {position: 'bottom'}, - tooltip: {showColorCode: true, ignoreBounds: false, text: 'percentage'}, - chartArea: {height: '80%', width: '90%'}, - pieHole: 0.4 - }; - - var chart = new google.visualization.PieChart(document.getElementById('pie-chart-coverage-raw')); - chart.draw(data, optionsRaw); - - chart = new google.visualization.PieChart(document.getElementById('pie-chart-coverage-normalized')); - chart.draw(data, optionsNormalized); - } - - // refresh the page to see the runs matching the specified filter - function refresh() { - var link = '${pageContext.request.contextPath}' + - '/show_coverage_overview?' + search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - </script> - - <body> - <div class='wide container'> - <div id="filter-bar"> - <div class="row card search-bar expanded"> - <div class="header-wrapper"> - <h5 class="section-header"> - <b>Code Coverage</b> - </h5> - <div class="search-icon-wrapper"> - <i class="material-icons">search</i> - </div> - </div> - <div class="search-wrapper" ${empty branch and empty device ? 'style="display: none"' : ''}> - <div class="row"> - <div class="col s9"> - <div class="input-field col s4"> - <c:set var="branchVal" value='${fn:replace(branch, "\\\"", "")}'></c:set> - <select id="searchBranch"> - <option value="" <c:if test="${empty branch}">disabled selected</c:if> >Choose your branch</option> - <c:forEach items='${branchOptions}' var='branchOption'> - <option value="${branchOption}" ${branchVal == branchOption ? 'selected' : ''}>${branchOption}</option> - </c:forEach> - </select> - <label>Branch Select</label> - </div> - <div class="input-field col s4"> - <c:set var="deviceVal" value='${fn:replace(device, "\\\"", "")}'></c:set> - <select id="searchDevice"> - <option value="" <c:if test="${empty device}">disabled selected</c:if> >Choose your device</option> - <c:forEach items='${deviceOptions}' var='deviceOption'> - <option value="${deviceOption}" ${deviceVal == deviceOption ? 'selected' : ''}>${deviceOption}</option> - </c:forEach> - </select> - <label>Device Select</label> - </div> - <div class="col s4"></div> - </div> - <div class="refresh-wrapper col s3"> - <a id="schBtn" class="btn-floating btn-medium red waves-effect waves-light" style="margin-right: 30px;"> - <i class="medium material-icons">cached</i> - </a> - </div> - </div> - </div> - </div> - </div> - <div class='row'> - <div class='col s12'> - <div class='col s12 card center-align'> - <div id='legend-wrapper'> - <c:forEach items='${resultNames}' var='res'> - <div class='center-align legend-entry'> - <c:set var='trimmed' value='${fn:replace(res, "TEST_CASE_RESULT_", "")}'/> - <c:set var='nickname' value='${fn:replace(trimmed, "_", " ")}'/> - <label for='${res}'>${nickname}</label> - <div id='${res}' class='${res} legend-bubble'></div> - </div> - </c:forEach> - </div> - </div> - </div> - <div class='col s4 valign-wrapper'> - <!-- pie chart --> - <div class='pie-chart-wrapper col s12 valign center-align card'> - <h6 class='pie-chart-title'>Test Statistics</h6> - <div id='pie-chart-stats' class='pie-chart-div'></div> - </div> - </div> - <div class='col s4 valign-wrapper'> - <!-- pie chart --> - <div class='pie-chart-wrapper col s12 valign center-align card'> - <h6 class='pie-chart-title'>Line Coverage (Raw)</h6> - <div id='pie-chart-coverage-raw' class='pie-chart-div'></div> - </div> - </div> - <div class='col s4 valign-wrapper'> - <!-- pie chart --> - <div class='pie-chart-wrapper col s12 valign center-align card'> - <h6 class='pie-chart-title'>Line Coverage (Normalized)</h6> - <div id='pie-chart-coverage-normalized' class='pie-chart-div'></div> - </div> - </div> - </div> - <div class='col s12' id='test-results-container'> - <ul class="collapsible popout test-runs" data-collapsible="expandable"> - <c:forEach var="testRunEntity" items="${testRunEntityList}" varStatus="loop"> - <li class="test-run-container"> - <div data-test="<c:out value="${testRunEntity.testName}" />" data-time="<c:out value="${testRunEntity.startTimestamp}" />" data-links='${testRunEntity.jsonLogLinks}' class="collapsible-header test-run"> - <span class="test-run-metadata"> - <span class="test-run-label"> - <c:out value="${testRunEntity.testName}" /> - </span> - <br /> - <b>VTS Build: </b><c:out value="${testRunEntity.testBuildId}" /> - <br /> - <b>Host: </b><c:out value="${testRunEntity.hostName}" /> - <br /> - <c:out value="${testRunEntity.startDateTime}" /> - <c:out value="${testRunEntity.endDateTime}" />+0900 (<c:out value="${(testRunEntity.endTimestamp - testRunEntity.startTimestamp) / 1000}" />s) - </span> - <span class="indicator badge green" style="color: white;"> - <c:out value="${testRunEntity.passCount}" />/<c:out value="${testRunEntity.passCount + testRunEntity.passCount}" /> - </span> - - <c:set var="coveredLineCnt" value="${codeCoverageEntityMap[testRunEntity.id].coveredLineCount}" /> - <c:set var="totalLineCnt" value="${codeCoverageEntityMap[testRunEntity.id].totalLineCount}" /> - <c:set var="covPct" - value="${(coveredLineCnt / totalLineCnt * 1000) / 10}"/> - - <c:choose> - <c:when test = "${covPct <= 20}"> - <c:set var="badgeColor" value="red" /> - </c:when> - <c:when test = "${covPct >= 70}"> - <c:set var="badgeColor" value="green" /> - </c:when> - <c:otherwise> - <c:set var="badgeColor" value="orange" /> - </c:otherwise> - </c:choose> - - <span class="indicator badge padded hoverable waves-effect <c:out value="${badgeColor}" />" style="color: white; margin-left: 1px;"> - Coverage: <c:out value="${coveredLineCnt}" />/<c:out value="${totalLineCnt}" /> - (<fmt:formatNumber value="${(coveredLineCnt / totalLineCnt * 1000) / 10}" type="number" pattern="#.##"/>%) - </span> - <span class="indicator badge padded hoverable waves-effect grey lighten-1" style="color: white; margin-left: 1px;">Links</span> - <span class="indicator badge padded hoverable waves-effect grey lighten-1" style="color: white; margin-left: 1px;">Graph</span> - <i class="material-icons expand-arrow">expand_more</i> - </div> - <div class="collapsible-body test-results row"></div> - </li> - </c:forEach> - </ul> - - </div> - </div> - - <!-- Coverage Graph Modal Structure --> - <div id="coverageModalGraph" class="modal modal-fixed-footer" style="width: 75%;"> - <div class="modal-content"> - <h4 id="coverageModalTitle">Code Coverage Chart</h4> - - <div class="preloader-wrapper big active loaders"> - <div id="dataTableLoading" class="spinner-layer spinner-blue-only"> - <div class="circle-clipper left"> - <div class="circle"></div> - </div> - <div class="gap-patch"> - <div class="circle"></div> - </div> - <div class="circle-clipper right"> - <div class="circle"></div> - </div> - </div> - </div> - - <!--Div that will hold the visualization graph --> - <div id="coverage_line_chart_div"></div> - <p></p> - <p></p> - <div id="coverage_table_chart_div" class="center-align"></div> - </div> - <div class="modal-footer"> - <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat ">Close</a> - </div> - </div> - - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_gcs_log.jsp b/src/main/webapp/WEB-INF/jsp/show_gcs_log.jsp deleted file mode 100644 index 8d73d34..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_gcs_log.jsp +++ /dev/null @@ -1,188 +0,0 @@ -<%-- - ~ Copyright (c) 2018 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link rel='stylesheet' href='/css/show_gcs_log.css'> - <link rel='stylesheet' href='/css/search_header.css'> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/time.js'></script> - <script src='js/plan_runs.js'></script> - <script src='js/search_header.js'></script> - <script type='text/javascript'> - $(document).ready(function() { - var paraMap = {'path': '', 'entry': ''}; - $('.modal').modal({ - dismissible: true, // Modal can be dismissed by clicking outside of the modal - opacity: .5, // Opacity of modal background - inDuration: 300, // Transition in duration - outDuration: 200, // Transition out duration - startingTop: '4%', // Starting top style attribute - endingTop: '10%', // Ending top style attribute - ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available. - $('.loading-overlay').show(); - if ($(modal).attr("id") == "logEntryListModal") { - console.log($(trigger)); - $(trigger).addClass("active"); - paraMap['path'] = "${path}" + trigger.text().trim(); - var fileName = paraMap['path'].substring(paraMap['path'].lastIndexOf('/')+1); // Getting filename - $(modal).find('#entry-list-modal-title').text(fileName); // Set file name for modal window - var url = "${requestScope['javax.servlet.forward.servlet_path']}?path=" + paraMap['path']; - $(modal).find('#downloadLink').prop('href', url + "&action=download"); - $.get( url, function(data) { - var entryList = $(modal).find('#modal-entry-list'); - $(data.entryList).each(function( index, element ) { - entryList.append("<li class='collection-item'><a href='#logEntryViewModal' class='modal-trigger'>" + element + "</a></li>"); - }); - }).done(function() { - $('.loading-overlay').hide(); - }); - } else { - paraMap['entry'] = trigger.text().trim(); - $(modal).find('#entry-view-modal-title').text(paraMap['entry']); - var entryUrl = "${requestScope['javax.servlet.forward.servlet_path']}?path=" + paraMap['path'] + "&entry=" + paraMap['entry']; - $.get( entryUrl, function(data) { - $(modal).find('#entry-view-modal-content').text(data.entryContent); - }).done(function() { - $('.loading-overlay').hide(); - }); - } - }, - complete: function(modal) { - if ($(modal).attr("id") == "logEntryListModal") { - $(modal).find('#modal-entry-list').find("li").remove(); - $("div.collection > a.collection-item.active").removeClass('active') - } else { - $(modal).find('#entry-view-modal-content').text(''); - } - } // Callback for Modal close - }); - }); - </script> - - <body> - <div class='wide container'> - <div class='row' id='release-container'> - <h5>Current Directory Path : ${path}</h5> - <hr/> - <div class="row"> - <div class="col s7"> - <h4>Directory List</h4> - <ul class="collection"> - <c:forEach varStatus="dirLoop" var="dirName" items="${dirList}"> - <li class="collection-item"> - <a href="${requestScope['javax.servlet.forward.servlet_path']}?path=${dirName}"> - <c:out value="${dirName}"></c:out> - <c:if test="${dirLoop.first && path ne '/'}"> - (Move to Parent) - </c:if> - </a> - </li> - <c:if test="${!dirLoop.last}"> - </c:if> - </c:forEach> - </ul> - </div> - <div class="col s5"> - <h4>File List</h4> - <div class="collection"> - <c:forEach varStatus="fileLoop" var="fileName" items="${fileList}"> - <a href="#logEntryListModal" class="collection-item modal-trigger"> - <c:out value="${fileName}"></c:out> - </a> - <c:if test="${!fileLoop.last}"> - </c:if> - </c:forEach> - </div> - </div> - </div> - - </div> - </div> - - <%@ include file="footer.jsp" %> - - <!-- Modal For Zip file entries --> - <div id="logEntryListModal" class="modal"> - <div class="modal-content"> - <h4 id="entry-list-modal-title" class="truncate"></h4> - <div id="entry-list-modal-content"> - <ul id="modal-entry-list" class="collection"></ul> - </div> - </div> - <div class="modal-footer"> - <div class="row"> - <div class="col s3 offset-s6"> - <a href="#!" id="downloadLink" class="modal-action modal-close waves-effect waves-green btn">Download</a> - </div> - <div class="col s3"> - <a href="#!" class="modal-action modal-close waves-effect waves-green btn">Close</a> - </div> - </div> - </div> - - <div class="loading-overlay"> - <div class="preloader-wrapper big active" style="top: 25%; left: 45%;"> - <div class="spinner-layer spinner-blue-only"> - <div class="circle-clipper left"> - <div class="circle"></div> - </div> - <div class="gap-patch"> - <div class="circle"></div> - </div> - <div class="circle-clipper right"> - <div class="circle"></div> - </div> - </div> - </div> - </div> - - </div> - - <!-- Modal For Zip file entry's content --> - <div id="logEntryViewModal" class="modal modal-fixed-footer"> - <div class="modal-content"> - <h4 id="entry-view-modal-title" class="truncate"></h4> - <div id="entry-view-modal-content"> - - </div> - </div> - <div class="modal-footer"> - <a href="#!" class="modal-action modal-close waves-effect waves-green btn">Close</a> - </div> - - <div class="loading-overlay"> - <div class="preloader-wrapper big active" style="top: 25%; left: 45%;"> - <div class="spinner-layer spinner-blue-only"> - <div class="circle-clipper left"> - <div class="circle"></div> - </div> - <div class="gap-patch"> - <div class="circle"></div> - </div> - <div class="circle-clipper right"> - <div class="circle"></div> - </div> - </div> - </div> - </div> - - </div> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_graph.jsp b/src/main/webapp/WEB-INF/jsp/show_graph.jsp deleted file mode 100644 index 7111f58..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_graph.jsp +++ /dev/null @@ -1,292 +0,0 @@ -<%-- - ~ Copyright (c) 2016 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link type='text/css' href='/css/datepicker.css' rel='stylesheet'> - <link type='text/css' href='/css/show_graph.css' rel='stylesheet'> - <link rel='stylesheet' href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.css'> - <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script> - <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js'></script> - <body> - <script type='text/javascript'> - google.charts.load('current', {packages:['corechart', 'table', 'line']}); - google.charts.setOnLoadCallback(drawAllGraphs); - - ONE_DAY = 86400000000; - MICRO_PER_MILLI = 1000; - N_BUCKETS = 200; - - var graphs = ${graphs}; - - $(function() { - $('select').material_select(); - var date = $('#date').datepicker({ - showAnim: 'slideDown', - maxDate: new Date() - }); - date.datepicker('setDate', new Date(${endTime} / MICRO_PER_MILLI)); - $('#load').click(load); - $('#outlier-select').change(drawAllGraphs); - }); - - // Draw all graphs. - function drawAllGraphs() { - $('#profiling-container').empty(); - var percentileIndex = Number($('#outlier-select').val()); - - // Get histogram extrema - var histMin = null; - var histMax = null; - graphs.forEach(function(g) { - if (g.type != 'HISTOGRAM') return; - var minVal; - var maxVal; - if (percentileIndex == -1) { - minVal = g.min; - maxVal = g.max; - } else { - minVal = g.percentile_values[percentileIndex]; - var endIndex = g.percentiles.length - percentileIndex - 1 - maxVal = g.percentile_values[endIndex]; - } - if (!histMin || minVal < histMin) histMin = minVal; - if (!histMax || maxVal > histMax) histMax = maxVal; - }); - - graphs.forEach(function(graph) { - if (graph.type == 'LINE_GRAPH') drawLineGraph(graph); - else if (graph.type == 'HISTOGRAM') - drawHistogram(graph, histMin, histMax); - }); - } - - /** - * Draw a line graph. - * - * Args: - * lineGraph: a JSON object containing the following fields: - * - name: the name of the graph - * - values: an array of numbers - * - ticks: an array of strings to use as x-axis labels - * - ids: an array of string labels for each point (e.g. the - * build info for the run that produced the point) - * - x_label: the string label for the x axis - * - y_label: the string label for the y axis - */ - function drawLineGraph(lineGraph) { - if (!lineGraph.ticks || lineGraph.ticks.length < 1) { - return; - } - var title = 'Performance'; - if (lineGraph.name) title += ' (' + lineGraph.name + ')'; - lineGraph.ticks.forEach(function (label, i) { - lineGraph.values[i].unshift(label); - }); - var data = new google.visualization.DataTable(); - data.addColumn('string', lineGraph.x_label); - lineGraph.ids.forEach(function(id) { - data.addColumn('number', id); - }); - data.addRows(lineGraph.values); - var options = { - chart: { - title: title, - subtitle: lineGraph.y_label - }, - legend: { position: 'none' } - }; - var container = $('<div class="row card center-align col s12 graph-wrapper"></div>'); - container.appendTo('#profiling-container'); - var chartDiv = $('<div class="col s12 graph"></div>'); - chartDiv.appendTo(container); - var chart = new google.charts.Line(chartDiv[0]); - chart.draw(data, options); - } - - /** - * Draw a histogram. - * - * Args: - * hist: a JSON object containing the following fields: - * - name: the name of the graph - * - values: an array of numbers - * - ids: an array of string labels for each point (e.g. the - * build info for the run that produced the point) - * - x_label: the string label for the x axis - * - y_label: the string label for the y axis - * min: the minimum value to display - * max: the maximum value to display - */ - function drawHistogram(hist, min, max) { - if (!hist.values || hist.values.length == 0) return; - var title = 'Performance'; - if (hist.name) title += ' (' + hist.name + ')'; - var values = hist.values; - var histogramData = values.reduce(function(result, d, i) { - if (d <= max && d >= min) result.push([hist.ids[i], d]); - return result; - }, []); - - var data = google.visualization.arrayToDataTable(histogramData, true); - var bucketSize = (max - min) / N_BUCKETS; - - var options = { - title: title, - titleTextStyle: { - color: '#757575', - fontSize: 16, - bold: false - }, - legend: { position: 'none' }, - colors: ['#4285F4'], - fontName: 'Roboto', - vAxis:{ - title: hist.y_label, - titleTextStyle: { - color: '#424242', - fontSize: 12, - italic: false - }, - textStyle: { - fontSize: 12, - color: '#757575' - }, - }, - hAxis: { - title: hist.x_label, - textStyle: { - fontSize: 12, - color: '#757575' - }, - titleTextStyle: { - color: '#424242', - fontSize: 12, - italic: false - } - }, - bar: { gap: 0 }, - histogram: { - minValue: min, - maxValue: max, - maxNumBuckets: N_BUCKETS, - bucketSize: bucketSize - }, - chartArea: { - width: '100%', - top: 40, - left: 60, - height: 375 - } - }; - var container = $('<div class="row card col s12 graph-wrapper"></div>'); - container.appendTo('#profiling-container'); - - var chartDiv = $('<div class="col s12 graph"></div>'); - chartDiv.appendTo(container); - var chart = new google.visualization.Histogram(chartDiv[0]); - chart.draw(data, options); - - var tableDiv = $('<div class="col s12"></div>'); - tableDiv.appendTo(container); - - var tableHtml = '<table class="percentile-table"><thead><tr>'; - hist.percentiles.forEach(function(p) { - tableHtml += '<th data-field="id">' + p + '%</th>'; - }); - tableHtml += '</tr></thead><tbody><tr>'; - hist.percentile_values.forEach(function(v) { - tableHtml += '<td>' + v + '</td>'; - }); - tableHtml += '</tbody></table>'; - $(tableHtml).appendTo(tableDiv); - } - - // Reload the page. - function load() { - var endTime = $('#date').datepicker('getDate').getTime(); - endTime = endTime + (ONE_DAY / MICRO_PER_MILLI) - 1; - var filterVal = $('#outlier-select').val(); - var ctx = '${pageContext.request.contextPath}'; - var link = ctx + '/show_graph?profilingPoint=${profilingPointName}' + - '&testName=${testName}' + - '&endTime=' + (endTime * MICRO_PER_MILLI) + - '&filterVal=' + filterVal; - if ($('#device-select').prop('selectedIndex') > 1) { - link += '&device=' + $('#device-select').val(); - } - window.open(link,'_self'); - } - </script> - <div id='download' class='fixed-action-btn'> - <a id='b' class='btn-floating btn-large red waves-effect waves-light'> - <i class='large material-icons'>file_download</i> - </a> - </div> - <div class='container wide'> - <div class='row card'> - <div id='header-container' class='valign-wrapper col s12'> - <div class='col s3 valign'> - <h5>Profiling Point:</h5> - </div> - <div class='col s9 right-align valign'> - <h5 class='profiling-name truncate'>${profilingPointName}</h5> - </div> - </div> - <div id='date-container' class='col s12'> - <c:set var='offset' value='${showFilterDropdown ? 0 : 2}' /> - <c:if test='${showFilterDropdown}'> - <div id='outlier-select-wrapper' class='col s2'> - <select id='outlier-select'> - <option value='-1' ${filterVal eq -1 ? 'selected' : ''}>Show outliers</option> - <option value='0' ${filterVal eq 0 ? 'selected' : ''}>Filter outliers (1%)</option> - <option value='1' ${filterVal eq 1 ? 'selected' : ''}>Filter outliers (2%)</option> - <option value='2' ${filterVal eq 2 ? 'selected' : ''}>Filter outliers (5%)</option> - </select> - </div> - </c:if> - <div id='device-select-wrapper' class='input-field col s5 m3 offset-m${offset + 4} offset-s${offset}'> - <select id='device-select'> - <option value='' disabled>Select device</option> - <option value='0' ${empty selectedDevice ? 'selected' : ''}>All Devices</option> - <c:forEach items='${devices}' var='device' varStatus='loop'> - <option value=${device} ${selectedDevice eq device ? 'selected' : ''}>${device}</option> - </c:forEach> - </select> - </div> - <input type='text' id='date' name='date' class='col s4 m2'> - <a id='load' class='btn-floating btn-medium red right waves-effect waves-light'> - <i class='medium material-icons'>cached</i> - </a> - </div> - </div> - <div id='profiling-container'> - </div> - <c:if test='${not empty error}'> - <div id='error-container' class='row card'> - <div class='col s10 offset-s1 center-align'> - <!-- Error in case of profiling data is missing --> - <h5>${error}</h5> - </div> - </div> - </c:if> - </div> - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_green_plan_release.jsp b/src/main/webapp/WEB-INF/jsp/show_green_plan_release.jsp deleted file mode 100644 index 1bb00dd..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_green_plan_release.jsp +++ /dev/null @@ -1,104 +0,0 @@ -<%-- - ~ Copyright (c) 2017 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link rel='stylesheet' href='/css/show_plan_release.css'> - <link rel='stylesheet' href='/css/plan_runs.css'> - <link rel='stylesheet' href='/css/search_header.css'> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/time.js'></script> - <script src='js/plan_runs.js'></script> - <script src='js/search_header.js'></script> - <script type='text/javascript'> - $(document).ready(function() { - - }); - </script> - - <body> - <div class='wide container'> - <div class="row"> - <div class="col s12"> - <h4 id="test-plan-section-header">Test Plans</h4> - </div> - </div> - <div class='row' id='test-plan-green-release-container'> - <table class="bordered highlight"> - <thead> - <tr> - <th>Branch</th> - <th>Last Finished Build</th> - <th>Last Green Build</th> - </tr> - </thead> - - <tbody> - <c:forEach var="branchList" items="${greenBuildInfo}"> - <tr> - <td> <c:out value="${branchList.key}"></c:out> </td> - <td> - <c:forEach varStatus="deviceLoop" var="deviceBuildInfo" items="${branchList.value}"> - <p> - <c:out value="${deviceBuildInfo.deviceBuildTarget}"></c:out> : - <c:choose> - <c:when test="${deviceBuildInfo.candidateBuildId eq 'No Test Results'}"> - <c:out value="${deviceBuildInfo.candidateBuildId}"></c:out> - </c:when> - <c:otherwise> - <a href="/show_plan_run?plan=${plan}&time=${deviceBuildInfo.candidateBuildIdTimestamp}"> - <c:out value="${deviceBuildInfo.candidateBuildId}"></c:out> - </a> - </c:otherwise> - </c:choose> - </p> - <c:if test="${!deviceLoop.last}"> - <hr/> - </c:if> - </c:forEach> - </td> - <td> - <c:forEach varStatus="deviceLoop" var="deviceBuildInfo" items="${branchList.value}"> - <p> - <c:choose> - <c:when test="${deviceBuildInfo.greenBuildId eq 'N/A'}"> - <c:out value="${deviceBuildInfo.greenBuildId}"></c:out> - </c:when> - <c:otherwise> - <a href="/show_plan_run?plan=${plan}&time=${deviceBuildInfo.greenBuildIdTimestamp}"> - <c:out value="${deviceBuildInfo.greenBuildId}"></c:out> - </a> - </c:otherwise> - </c:choose> - </p> - <c:if test="${!deviceLoop.last}"> - <hr/> - </c:if> - </c:forEach> - </td> - </tr> - </c:forEach> - </tbody> - </table> - </div> - - </div> - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp b/src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp deleted file mode 100644 index c883ee2..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp +++ /dev/null @@ -1,101 +0,0 @@ -<%-- - ~ Copyright (c) 2018 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link rel='stylesheet' href='/css/show_plan_release.css'> - <link rel='stylesheet' href='/css/plan_runs.css'> - <link rel='stylesheet' href='/css/search_header.css'> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/time.js'></script> - <script src='js/plan_runs.js'></script> - <script src='js/search_header.js'></script> - <script type='text/javascript'> - $(document).ready(function() { - - }); - </script> - - <body> - <div class='wide container'> - <div class="row"> - <div class="col s12"> - <h4 id="test-suite-section-header">Test Suites</h4> - </div> - </div> - - <div class='row' id='test-plan-green-release-container'> - <table class="bordered highlight"> - <thead> - <tr> - <th>Branch</th> - <th>Last Finished Build</th> - <th>Last Green Build</th> - </tr> - </thead> - - <tbody> - <c:forEach var="branchList" items="${greenBuildInfo}"> - <tr> - <td> <c:out value="${branchList.key}"></c:out> </td> - <td> - <c:forEach varStatus="deviceLoop" var="deviceBuildInfo" items="${branchList.value}"> - <p> - <c:out value="${deviceBuildInfo.deviceBuildTarget}"></c:out> : - <c:choose> - <c:when test="${deviceBuildInfo.candidateBuildId eq 'No Test Results'}"> - <c:out value="${deviceBuildInfo.candidateBuildId}"></c:out> - </c:when> - <c:otherwise> - <c:out value="${deviceBuildInfo.candidateBuildId}"></c:out> - </c:otherwise> - </c:choose> - </p> - <c:if test="${!deviceLoop.last}"> - <hr/> - </c:if> - </c:forEach> - </td> - <td> - <c:forEach varStatus="deviceLoop" var="deviceBuildInfo" items="${branchList.value}"> - <p> - <c:choose> - <c:when test="${deviceBuildInfo.greenBuildId eq 'N/A'}"> - <c:out value="${deviceBuildInfo.greenBuildId}"></c:out> - </c:when> - <c:otherwise> - <c:out value="${deviceBuildInfo.greenBuildId}"></c:out> - </c:otherwise> - </c:choose> - </p> - <c:if test="${!deviceLoop.last}"> - <hr/> - </c:if> - </c:forEach> - </td> - </tr> - </c:forEach> - </tbody> - </table> - </div> - - </div> - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_performance_digest.jsp b/src/main/webapp/WEB-INF/jsp/show_performance_digest.jsp deleted file mode 100644 index 224d847..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_performance_digest.jsp +++ /dev/null @@ -1,100 +0,0 @@ -<%-- - ~ Copyright (c) 2016 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link type='text/css' href='/css/datepicker.css' rel='stylesheet'> - <link type='text/css' href='/css/show_performance_digest.css' rel='stylesheet'> - <link rel='stylesheet' href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.css'> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> - <body> - <script type='text/javascript'> - ONE_DAY = 86400000000; - MICRO_PER_MILLI = 1000; - - function load() { - var time = $('#date').datepicker('getDate').getTime() - 1; - time = time * MICRO_PER_MILLI + ONE_DAY; // end of day - var ctx = '${pageContext.request.contextPath}'; - var link = ctx + '/show_performance_digest?profilingPoint=${profilingPointName}' + - '&testName=${testName}' + - '&startTime=' + time; - if ($('#device-select').prop('selectedIndex') > 1) { - link += '&device=' + $('#device-select').val(); - } - window.open(link,'_self'); - } - - $(function() { - var date = $('#date').datepicker({ - showAnim: "slideDown", - maxDate: new Date() - }); - date.datepicker('setDate', new Date(${startTime} / MICRO_PER_MILLI)); - $('#load').click(load); - - $('.date-label').each(function(i) { - var label = $(this); - label.html(moment(parseInt(label.html())).format('M/D/YY')); - }); - $('select').material_select(); - }); - </script> - <div class='wide container'> - <div class='row card'> - <div id='header-container' class='col s12'> - <div class='col s12'> - <h4>Daily Performance Digest</h4> - </div> - <div id='device-select-wrapper' class='input-field col s6 m3 offset-m6'> - <select id='device-select'> - <option value='' disabled>Select device</option> - <option value='0' ${empty selectedDevice ? 'selected' : ''}>All Devices</option> - <c:forEach items='${devices}' var='device' varStatus='loop'> - <option value=${device} ${selectedDevice eq device ? 'selected' : ''}>${device}</option> - </c:forEach> - </select> - </div> - <input type='text' id='date' name='date' class='col s5 m2'> - <a id='load' class='btn-floating btn-medium red right waves-effect waves-light'> - <i class='medium material-icons'>cached</i> - </a> - </div> - </div> - <div class='row'> - <c:forEach items='${tables}' var='table' varStatus='loop'> - <div class='col s12 card summary'> - <div class='col s3 valign'> - <h5>Profiling Point:</h5> - </div> - <div class='col s9 right-align valign'> - <h5 class="profiling-name truncate">${tableTitles[loop.index]}</h5> - </div> - ${table} - <span class='profiling-subtitle'> - ${tableSubtitles[loop.index]} - </span> - </div> - </c:forEach> - </div> - </div> - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_plan_release.jsp b/src/main/webapp/WEB-INF/jsp/show_plan_release.jsp deleted file mode 100644 index 9a312e9..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_plan_release.jsp +++ /dev/null @@ -1,119 +0,0 @@ -<%-- - ~ Copyright (c) 2017 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link rel='stylesheet' href='/css/show_plan_release.css'> - <link rel='stylesheet' href='/css/plan_runs.css'> - <link rel='stylesheet' href='/css/search_header.css'> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/time.js'></script> - <script src='js/plan_runs.js'></script> - <script src='js/search_header.js'></script> - <script type='text/javascript'> - var search; - $(document).ready(function() { - // disable buttons on load - if (!${hasNewer}) { - $('#newer-button').toggleClass('disabled'); - } - if (!${hasOlder}) { - $('#older-button').toggleClass('disabled'); - } - - $('#newer-button').click(prev); - $('#older-button').click(next); - search = $('#filter-bar').createSearchHeader('Plan: ', '${plan}', refresh); - search.addFilter('Branch', 'branch', { - corpus: ${branches} - }, ${branch}); - search.addFilter('Device', 'device', { - corpus: ${devices} - }, ${device}); - search.addFilter('Device Build ID', 'deviceBuildId', {}, ${deviceBuildId}); - search.addFilter('Test Build ID', 'testBuildId', {}, ${testBuildId}); - search.addFilter('Host', 'hostname', {}, ${hostname}); - search.addFilter('Passing Count', 'passing', { - validate: 'inequality', - width: 's2' - }, ${passing}); - search.addFilter('Non-Passing Count', 'nonpassing', { - validate: 'inequality', - width: 's2' - }, ${nonpassing}); - search.addRunTypeCheckboxes(${showPresubmit}, ${showPostsubmit}); - search.display(); - $('#release-container').showPlanRuns(${planRuns}); - }); - - // view older data - function next() { - if($(this).hasClass('disabled')) return; - var endTime = ${startTime}; - var link = '${pageContext.request.contextPath}' + - '/show_plan_release?plan=${plan}&endTime=' + endTime + - search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - // view newer data - function prev() { - if($(this).hasClass('disabled')) return; - var startTime = ${endTime}; - var link = '${pageContext.request.contextPath}' + - '/show_plan_release?plan=${plan}&startTime=' + startTime + - search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - // refresh the page to see the runs matching the specified filter - function refresh() { - var link = '${pageContext.request.contextPath}' + - '/show_plan_release?plan=${plan}' + search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - </script> - - <body> - <div class='wide container'> - <div id='filter-bar'></div> - <div class='row' id='release-container'></div> - <div id='newer-wrapper' class='page-button-wrapper fixed-action-btn'> - <a id='newer-button' class='btn-floating btn red waves-effect'> - <i class='large material-icons'>keyboard_arrow_left</i> - </a> - </div> - <div id='older-wrapper' class='page-button-wrapper fixed-action-btn'> - <a id='older-button' class='btn-floating btn red waves-effect'> - <i class='large material-icons'>keyboard_arrow_right</i> - </a> - </div> - </div> - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_plan_run.jsp b/src/main/webapp/WEB-INF/jsp/show_plan_run.jsp deleted file mode 100644 index bec4c76..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_plan_run.jsp +++ /dev/null @@ -1,236 +0,0 @@ -<%-- - ~ Copyright (c) 2017 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'> - <link type='text/css' href='/css/test_results.css' rel='stylesheet'> - <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/time.js'></script> - <script src='js/test_results.js'></script> - <script type='text/javascript'> - google.charts.load('current', {'packages':['table', 'corechart']}); - google.charts.setOnLoadCallback(drawPieChart); - - $(document).ready(function() { - $('#test-results-container').showTests(${testRuns}, true); - drawSummary(); - - $('#apiCoverageModal').modal({ - width: '75%', - dismissible: true, // Modal can be dismissed by clicking outside of the modal - opacity: .5, // Opacity of modal background - inDuration: 300, // Transition in duration - outDuration: 200, // Transition out duration - startingTop: '4%', // Starting top style attribute - endingTop: '10%', // Ending top style attribute - ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available. - var urlSafeKeyList = modal.data('urlSafeKeyList'); - var halApiInfoList = []; - var getAjaxList = $.map( urlSafeKeyList, function( urlSafeKey ) { - return $.get( "/api/coverage/api/data?key=" + urlSafeKey, function(data) { - halApiInfoList.push(data); - }) - .fail(function() { - alert( "Error : can't bring API coverage data from the server" ); - }); - }); - - $.when.apply($, getAjaxList).then(function() { - $.each(halApiInfoList, function( index, data ) { - $("#halApiList").append(halApiListTemplate()); - var version = data.halMajorVersion + '.' + data.halMinorVersion; - var defaultInfo = data.halPackageName + '@' + version + '::' + data.halInterfaceName; - $("#halApiList > li:last > div.collapsible-header").html( - '<i class="material-icons">report</i> HAL API Information : ' + defaultInfo - ); - /* - $("#halApiList > li:last > div.collapsible-body > ul.collection.with-header").append( - '<li class="collection-header">' + - '</li>' - ); - */ - - $("#halApiList > li:last > div.collapsible-body > ul.collection.with-header").append( - $.map( data.halApi, function( apiName, idx ) { - var colorClass = data.coveredHalApi.indexOf(apiName) > -1 ? "green" : "red" - return '<li class="collection-item ' + colorClass + ' lighten-1">' + apiName + '</li>'; - }).join("") - ); - $("#halApiList").collapsible('open', index); - }); - $('#dataTableLoading').hide("slow"); - }); - }, - complete: function() { - $("#halApiList").empty(); - $('#dataTableLoading').show("slow"); - } // Callback for Modal close - } - ); - }); - - function halApiListTemplate() { - return '<li>' + - '<div class="collapsible-header">' + - '<i class="material-icons">report</i> API Information' + - '</div>' + - '<div class="collapsible-body">' + - '<ul class="collection with-header">' + - '</ul>' + - '</div>' + - '</li>'; - } - - // to draw pie chart - function drawPieChart() { - var topBuildResultCounts = ${topBuildResultCounts}; - if (topBuildResultCounts.length < 1) { - return; - } - var resultNames = ${resultNamesJson}; - var rows = resultNames.map(function(res, i) { - nickname = res.replace('TEST_CASE_RESULT_', '').replace('_', ' ') - .trim().toLowerCase(); - return [nickname, parseInt(topBuildResultCounts[i])]; - }); - rows.unshift(['Result', 'Count']); - - // Get CSS color definitions (or default to white) - var colors = resultNames.map(function(res) { - return $('.' + res).css('background-color') || 'white'; - }); - - var data = google.visualization.arrayToDataTable(rows); - var options = { - is3D: false, - colors: colors, - fontName: 'Roboto', - fontSize: '14px', - legend: {position: 'bottom'}, - tooltip: {showColorCode: true, ignoreBounds: false}, - chartArea: {height: '80%', width: '90%'}, - pieHole: 0.4 - }; - - var chart = new google.visualization.PieChart(document.getElementById('pie-chart-div')); - chart.draw(data, options); - } - - // Draw a test plan run summary box. - function drawSummary() { - var testBuildId = ${testBuildId}; - var startTime = ${startTime}; - var endTime = ${endTime}; - var moduleCount = ${moduleCount}; - var passingTestCaseCount = ${passingTestCaseCount}; - var failingTestCaseCount = ${failingTestCaseCount}; - var div = $('<div></div>'); - var details = $('<span></span>').appendTo(div); - details.append('<b>VTS Build: </b>' + testBuildId + '<br>'); - details.append('<b>Start Time: </b>' + moment().renderTime(startTime, true) + '<br>'); - details.append('<b>End Time: </b>' + moment().renderTime(endTime, true) + '<br>'); - details.append('<b>Duration: </b>' + moment().renderDuration(endTime - startTime) + '<br>'); - details.append('<b>Modules: </b>' + moduleCount + '<br>'); - details.append('<b>Passing Test Cases: </b>' + passingTestCaseCount + '<br>'); - details.append('<b>Non-Passing Test Cases: </b>' + failingTestCaseCount + '<br>'); - - <c:if test="${totalApiCount > 0 && totalCoveredApiCount >= 0}"> - details.append('<b>Total API : </b><c:out value="${totalApiCount}"/><br>'); - details.append('<b>Total Covered API : </b><c:out value="${totalCoveredApiCount}"/><br>'); - </c:if> - - div.appendTo($('#summary-container')); - } - </script> - - <body> - <div class='wide container'> - <div class='row'> - <div class='col s7'> - <div class='col s12 card center-align'> - <div id='legend-wrapper'> - <c:forEach items='${resultNames}' var='res'> - <div class='center-align legend-entry'> - <c:set var='trimmed' value='${fn:replace(res, "TEST_CASE_RESULT_", "")}'/> - <c:set var='nickname' value='${fn:replace(trimmed, "_", " ")}'/> - <label for='${res}'>${nickname}</label> - <div id='${res}' class='${res} legend-bubble'></div> - </div> - </c:forEach> - </div> - </div> - <div id='summary-container' class='col s12 card'> - <span class='summary-header valign-wrapper'> - <i class='material-icons'>info_outline</i>Run Details - </span> - </div> - </div> - <div class='col s5 valign-wrapper'> - <!-- pie chart --> - <div id='pie-chart-wrapper' class='col s12 valign center-align card'> - <div id='pie-chart-div'></div> - </div> - </div> - </div> - - <div class='col s12' id='test-results-container'></div> - </div> - - <!-- Modal Structure --> - <div id="apiCoverageModal" class="modal modal-fixed-footer" style="width: 75%;"> - <div class="modal-content"> - <h4 id="coverageModalTitle">API Coverage</h4> - - <div class="preloader-wrapper big active loaders"> - <div id="dataTableLoading" class="spinner-layer spinner-blue-only"> - <div class="circle-clipper left"> - <div class="circle"></div> - </div> - <div class="gap-patch"> - <div class="circle"></div> - </div> - <div class="circle-clipper right"> - <div class="circle"></div> - </div> - </div> - </div> - - <div class="row"> - <div class="col s12"> - <ul class="collection with-header"> - <li class="collection-header"> - <h4>Total HAL API List</h4> - <ul id="halApiList" class="collapsible popout" data-collapsible="expandable"> - - </ul> - </li> - </ul> - </div> - </div> - </div> - <div class="modal-footer"> - <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat ">Close</a> - </div> - </div> - - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_profiling_list.jsp b/src/main/webapp/WEB-INF/jsp/show_profiling_list.jsp deleted file mode 100644 index f1615d7..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_profiling_list.jsp +++ /dev/null @@ -1,44 +0,0 @@ -<%-- - ~ Copyright (c) 2017 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <link rel='stylesheet' href='/css/show_release.css'> - <%@ include file='header.jsp' %> - <body> - <div class='container'> - <div class='row'> - <div class='col s12'> - <h4 id='section-header'>Profiling Tests</h4> - </div> - </div> - <div class='row' id='options'> - <c:forEach items='${testNames}' var='test'> - <div> - <a href='/show_profiling_overview?testName=${test}'> - <div class='col s12 card hoverable option valign-wrapper waves-effect'> - <span class='entry valign'>${test}</span> - </div> - </a> - </div> - </c:forEach> - </div> - </div> - <%@ include file='footer.jsp' %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_profiling_overview.jsp b/src/main/webapp/WEB-INF/jsp/show_profiling_overview.jsp deleted file mode 100644 index 62bd8de..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_profiling_overview.jsp +++ /dev/null @@ -1,172 +0,0 @@ -<%-- - ~ Copyright (C) 2017 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link type='text/css' href='/css/datepicker.css' rel='stylesheet'> - <link type='text/css' href='/css/show_profiling_overview.css' rel='stylesheet'> - <link rel='stylesheet' href='/css/search_header.css'> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/search_header.js'></script> - <script src='js/time.js'></script> - <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script> - <body> - <script type='text/javascript'> - google.charts.load('current', {'packages':['corechart']}); - google.charts.setOnLoadCallback(drawAllPlots); - - var plots = ${plots}; - var search; - - $(document).ready(function() { - search = $('#filter-bar').createSearchHeader( - 'Profiling Analysis', '', refresh); - search.addFilter('Branch', 'branch', { - corpus: ${branches} - }, ${branch}); - search.addFilter('Device', 'device', { - corpus: ${devices} - }, ${device}); - search.display(); - }); - - /** - * Draw a box plot. - * - * Args: - * container: the jquery selector in which to draw the graph. - * lineGraph: a JSON-serialized BoxPlot. - */ - function drawBoxPlot(container, plot) { - var data = new google.visualization.DataTable(); - data.addColumn('string', 'x'); - plot.seriesList.forEach(function(series) { - data.addColumn('number', series); - data.addColumn({id:'fill', type:'number', role:'interval'}); - data.addColumn({id:'fill', type:'number', role:'interval'}); - data.addColumn({id:'bar', type:'number', role:'interval'}); - data.addColumn({id:'bar', type:'number', role:'interval'}); - data.addColumn({type:'string', role:'tooltip', p: {'html': true}}); - }); - var rows = plot.values.map(function(day) { - var dateString = new moment().renderDate(1 * day.label); - var statArray = day.values.map(function(stat) { - var tooltip = ( - dateString + - '</br><b>Mean:</b> ' + - stat.mean.toFixed(2) + - '</br><b>Std:</b> ' + - stat.std.toFixed(2) + - '</br><b>Count:</b> ' + - stat.count.toFixed(0)); - return [ - stat.mean, - stat.mean + stat.std, - stat.mean - stat.std, - stat.mean + stat.std, - stat.mean - stat.std, - tooltip]; - }); - return [].concat.apply( - [dateString], statArray); - }); - data.addRows(rows); - - var options = { - title: plot.name, - curveType: 'function', - intervals: { 'color' : 'series-color' }, - interval: { - 'fill': { - 'style': 'area', - 'curveType': 'function', - 'fillOpacity': 0.2 - }, - 'bar': { - 'style': 'bars', - 'barWidth': 0, - 'lineWidth': 1, - 'pointSize': 3, - 'fillOpacity': 1 - }}, - legend: { position: 'bottom' }, - tooltip: { isHtml: true }, - fontName: 'Roboto', - titleTextStyle: { - color: '#757575', - fontSize: 16, - bold: false - }, - pointsVisible: true, - vAxis:{ - title: plot.y_label, - titleTextStyle: { - color: '#424242', - fontSize: 12, - italic: false - }, - textStyle: { - fontSize: 12, - color: '#757575' - }, - }, - hAxis: { - textStyle: { - fontSize: 12, - color: '#757575' - }, - titleTextStyle: { - color: '#424242', - fontSize: 12, - italic: false - } - }, - }; - var plot = new google.visualization.LineChart(container[0]); - plot.draw(data, options); - } - - // Draw all graphs. - function drawAllPlots() { - var container = $('#profiling-container'); - container.empty(); - - plots.forEach(function(g) { - var plot = $('<div class="box-plot row card"></div>'); - plot.appendTo(container); - drawBoxPlot(plot.append('<div></div>'), g); - }); - } - - // refresh the page to see the runs matching the specified filter - function refresh() { - if($(this).hasClass('disabled')) return; - var link = '${pageContext.request.contextPath}' + - '/show_profiling_overview?testName=${testName}' + search.args(); - window.open(link,'_self'); - } - </script> - <div class='container wide'> - <div id='filter-bar' class='row'></div> - <div id='profiling-container'> - </div> - </div> - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_release.jsp b/src/main/webapp/WEB-INF/jsp/show_release.jsp deleted file mode 100644 index 9e8c2eb..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_release.jsp +++ /dev/null @@ -1,80 +0,0 @@ -<%-- - ~ Copyright (c) 2017 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <link rel='stylesheet' href='/css/show_release.css'> - <%@ include file='header.jsp' %> - <script type='text/javascript'> - $(document).ready(function() { - $("li.tab").each(function( index ) { - $(this).click(function() { - window.open($(this).children().attr("href"), '_self'); - }); - }); - }); - </script> - <body> - <div class='container'> - <div class='row'> - <div class='col s12'> - - <ul class="tabs z-depth-1"> - <li class="tab col s6" id="planTabLink"> - <a class="${testType == 'plan' ? 'active' : 'inactive'}" href="${requestScope['javax.servlet.forward.servlet_path']}?type=plan">Test Plans</a> - </li> - <li class="tab col s6" id="suiteTabLink"> - <a class="${testType == 'suite' ? 'active' : 'inactive'}" href="${requestScope['javax.servlet.forward.servlet_path']}?type=suite">Test Suite Plans</a> - </li> - </ul> - - </div> - </div> - <div class='row' id='options'> - <c:set var="typeParam" scope="session" value="${testType == 'suite' ? '&type=suite' : '&type=plan'}"/> - - <c:forEach items='${planNames}' var='plan'> - <c:choose> - <c:when test="${isAdmin}"> - <div class="col s10 center"> - <a href='/show_plan_release?plan=${plan}${typeParam}'> - <div class='col s12 card hoverable option valign-wrapper waves-effect'> - <span class='entry valign'>${plan}</span> - </div> - </a> - </div> - <div class="col s2 center btn-container" style="margin-top: 9px;"> - <a href='/show_green_release?plan=${plan}${typeParam}' class="waves-effect waves-light btn">Green</a> - </div> - </c:when> - <c:otherwise> - <div class="col s12 center"> - <a href='/show_plan_release?plan=${plan}${typeParam}'> - <div class='col s12 card hoverable option valign-wrapper waves-effect'> - <span class='entry valign'>${plan}</span> - </div> - </a> - </div> - </c:otherwise> - </c:choose> - </c:forEach> - </div> - </div> - <%@ include file='footer.jsp' %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp b/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp deleted file mode 100644 index 523291a..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp +++ /dev/null @@ -1,362 +0,0 @@ -<%-- - ~ Copyright (c) 2018 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> -<%@ taglib prefix='fmt' uri='http://java.sun.com/jsp/jstl/fmt'%> -<jsp:useBean id="startDateObject" class="java.util.Date"/> -<jsp:useBean id="endDateObject" class="java.util.Date"/> -<c:set var="timeZone" value="America/Los_Angeles"/> - -<html> - <%@ include file='header.jsp' %> - <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'> - <link type='text/css' href='/css/test_results.css' rel='stylesheet'> - <link rel='stylesheet' href='/css/search_header.css'> - <script type='text/javascript'> - $(document).ready(function() { - - $.deparam = $.deparam || function(uri){ - if(uri === undefined){ - uri = window.location.search; - } - var queryString = {}; - uri.replace( - new RegExp( - "([^?=&]+)(=([^&#]*))?", "g"), - function($0, $1, $2, $3) { queryString[$1] = $3; } - ); - return queryString; - }; - - $("li.tab").each(function( index ) { - $(this).click(function() { - window.open($(this).children().attr("href"), '_self'); - }); - }); - - $(".search-icon-wrapper").click(function() { - $(".search-wrapper").slideToggle("fast", function() { - // Animation complete. - }); - }); - - <c:if test="${not empty branch or not empty hostName or not empty buildId or not empty deviceName}"> - $(".search-wrapper").slideToggle("fast"); - </c:if> - - $("#searchBtn").click(function(event) { - event.preventDefault(); - - var url = '<c:out value="${requestScope['javax.servlet.forward.servlet_path']}" escapeXml="false"></c:out>'; - var params = $.deparam('<c:out value="${requestScope['javax.servlet.forward.query_string']}" escapeXml="false"></c:out>'); - - var branch = $("#deviceBranch").val().trim(); - if ( branch.length > 0 ) { - params['branch'] = branch; - } else { - delete params['branch']; - } - var host = $("#host").val().trim(); - if ( host.length > 0 ) { - params['hostName'] = host; - } else { - delete params['hostName']; - } - var buildId = $("#deviceBuildId").val().trim(); - if ( buildId.length > 0 ) { - params['buildId'] = buildId; - } else { - delete params['buildId']; - } - var deviceName = $("#deviceName").val().trim(); - if ( deviceName.length > 0 ) { - params['deviceName'] = deviceName; - } else { - delete params['deviceName']; - } - - $(location).prop('href', url + "?" + decodeURIComponent($.param(params))); - $(this).prop('href', url); - }); - - $("#deviceBranch").autocomplete({ - source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ], - open: function( event, ui ) { - alert("open") - }, - close: function( event, ui ) { - alert("close") - } - }); - - $( "div.test-case-container > div.input-field > a.btn" ).each(function() { - $( this ).click(function() { - $(this).parent().prev().children().select(); - document.execCommand('copy'); - alert("Reproduce Command copied to clipboard."); - }); - }); - }); - </script> - <body> - <div class='wide container'> - - <div class="row card search-bar expanded"> - <div class="header-wrapper"> - <h5 class="section-header"> - <b>Plan: </b><span><c:out value="${plan}"></c:out></span> - </h5> - <div class="search-icon-wrapper"> - <i class="material-icons">search</i> - </div> - </div> - <div class="search-wrapper" style="display: none"> - <div class="col s12"> - <div class="input-field col s4"> - <input id="deviceBranch" type="text" value="<c:out value="${branch}"></c:out>" autocomplete="off" /> - <label>Device Branch</label> - </div> - <div class="input-field col s4"> - <input id="host" type="text" value="<c:out value="${hostName}"></c:out>" autocomplete="off" /> - <label>Host</label> - </div> - <div class="input-field col s4"> - <input id="deviceBuildId" type="text" value="<c:out value="${buildId}"></c:out>" autocomplete="off" /> - <label>Device Build ID</label> - </div> - </div> - <div class="col s12"> - <div class="input-field col s4"> - <input id="deviceName" type="text" value="<c:out value="${deviceName}"></c:out>" autocomplete="off" /> - <label>Device Name</label> - </div> - <div class="input-field col s4"> - - </div> - <div class="run-type-wrapper col s4 right-align"> - <a class="waves-effect waves-light btn" id="searchBtn"> - <i class="material-icons left">search</i>Apply - </a> - </div> - </div> - </div> - </div> - - <div class='row'> - <div class='col s12'> - - <ul class="tabs z-depth-1"> - <li class="tab col s4" id="totTabLink"> - <a class="<c:out value="${testCategoryType == '1' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=1">TOT</a> - </li> - <li class="tab col s4" id="signedTabLink"> - <a class="<c:out value="${testCategoryType == '4' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=4">SIGNED</a> - </li> - <li class="tab col s4" id="otaTabLink"> - <a class="<c:out value="${testCategoryType == '2' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=2">OTA</a> - </li> - </ul> - - </div> - </div> - - <div class='row' id='test-suite-green-release-container'> - <div class="col s12"> - - <ul class="collapsible popout test-runs"> - <c:forEach var="testSuiteResultEntity" items="${testSuiteResultEntityPagination.list}"> - <li class="test-run-container"> - <div class="collapsible-header test-run"> - <div class="row" style="margin-bottom: 0px; line-height: 30px;"> - <div class="col s9"> - <b><c:out value="${testSuiteResultEntity.branch}"></c:out>/<c:out value="${testSuiteResultEntity.target}"></c:out> (<c:out value="${testSuiteResultEntity.buildId}"></c:out>)</b> - </div> - <div class="col s3"> - <span class="indicator right center - <c:choose> - <c:when test="${testSuiteResultEntity.passedTestCaseCount eq 0 and testSuiteResultEntity.failedTestCaseCount eq 0}"> - black - </c:when> - <c:otherwise> - green - </c:otherwise> - </c:choose> - "> - <c:out value="${testSuiteResultEntity.passedTestCaseCount}"></c:out>/<c:out value="${testSuiteResultEntity.passedTestCaseCount + testSuiteResultEntity.failedTestCaseCount}"></c:out> - ( - <c:set var="integerVal" value="${fn:substringBefore(testSuiteResultEntity.passedTestCaseRatio, '.')}" /> - <c:choose> - <c:when test="${integerVal eq '100'}"> - 100% - </c:when> - <c:otherwise> - <c:set var="decimalVal" value="${fn:substring(fn:substringAfter(testSuiteResultEntity.passedTestCaseRatio, '.'), 0, 2)}" /> - <c:choose> - <c:when test="${decimalVal eq '00'}"> - <c:out value="${integerVal}"></c:out>% - </c:when> - <c:otherwise> - <c:out value="${integerVal}"></c:out>.<c:out value="${decimalVal}"></c:out>% - </c:otherwise> - </c:choose> - </c:otherwise> - </c:choose> - ) - </span> - <c:if test="${!testSuiteResultEntity.bootSuccess}"> - <span class="indicator right center" style="min-width: 0px; padding: 0 2px;"></span> - <span class="indicator right center red">Boot Error</span> - </c:if> - </div> - <div class="col s5"> - <span class="suite-test-run-metadata"> - <b>Suite Build Number: </b><c:out value="${testSuiteResultEntity.suiteBuildNumber}"></c:out><br> - <b>Device Name: </b><c:out value="${testSuiteResultEntity.deviceName}"></c:out><br> - </span> - </div> - <div class="col s5"> - <span class="suite-test-run-metadata"> - <b>Host: </b><c:out value="${testSuiteResultEntity.hostName}"></c:out><br> - <b>Modules: </b><c:out value="${testSuiteResultEntity.modulesDone}"></c:out>/<c:out value="${testSuiteResultEntity.modulesTotal}"></c:out><br> - </span> - </div> - <div class="col s2" style="padding: 5px 12px;"> - <a href="<c:out value="${testSuiteResultEntity.buganizerLink}"></c:out>" class="waves-effect waves-light btn right blue-grey" style="padding: 0 15px;" target="_blank"> - Buganizer - </a> - </div> - <div class="col s12"> - <span class="suite-test-run-metadata"> - <b>Result Log Path: </b> - <a href="show_gcs_log?path=${testSuiteResultEntity.screenResultLogPath}"> - <c:out value="${testSuiteResultEntity.screenResultLogPath}"></c:out> - </a> - <br> - <b>Infra Log Path: </b> - <a href="show_gcs_log/download?file=${testSuiteResultEntity.screenInfraLogPath}"> - <c:out value="${testSuiteResultEntity.screenInfraLogPath}"></c:out> - </a> - <br> - </span> - </div> - <div class="col s10"> - <span style="font-size: 13px;"> - <jsp:setProperty name="startDateObject" property="time" value="${testSuiteResultEntity.startTime}"/> - <jsp:setProperty name="endDateObject" property="time" value="${testSuiteResultEntity.endTime}"/> - <fmt:formatDate value="${startDateObject}" pattern="yyyy-MM-dd HH:mm:ss" timeZone="${timeZone}" /> - <fmt:formatDate value="${endDateObject}" pattern="yyyy-MM-dd HH:mm:ss z" timeZone="${timeZone}" /> - <c:set var="executionTime" scope="page" value="${(testSuiteResultEntity.endTime - testSuiteResultEntity.startTime) / 1000}"/> - (<c:out value="${executionTime}"></c:out>s) - </span> - </div> - <div class="col s2"> - <i class="material-icons expand-arrow">expand_more</i> - </div> - </div> - </div> - <div class="collapsible-body test-results row" style="display: none;"> - <div class="col test-col grey lighten-5 s12 left-most right-most"> - <h5 class="test-result-label white" style="text-transform: capitalize;"> - Vendor Fingerprint - </h5> - <div class="test-case-container"> - <c:out value="${testSuiteResultEntity.buildVendorFingerprint}"></c:out> - </div> - </div> - <div class="col test-col grey lighten-5 s12 left-most right-most"> - <h5 class="test-result-label white" style="text-transform: capitalize;"> - System Fingerprint - </h5> - <div class="test-case-container"> - <c:out value="${testSuiteResultEntity.buildSystemFingerprint}"></c:out> - </div> - </div> - <div class="col test-col grey lighten-5 s12 left-most right-most"> - <h5 class="test-result-label white" style="text-transform: capitalize;"> - Reproduce Command - </h5> - <div class="row test-case-container"> - <div class="input-field col s9"> - <input type="text" class="validate" readonly="true" onclick="this.select()" value="reproduce --report_path=gs://vts-report/<c:out value="${testSuiteResultEntity.getTestSuiteFileEntityKey().getName()}"></c:out> --suite=<c:out value="${fn:toLowerCase(testSuiteResultEntity.getSuiteName())}"></c:out>" /> - </div> - <div class="input-field col s3"> - <a class="waves-effect waves-light btn right"><i class="material-icons left">content_copy</i>Copy</a> - </div> - </div> - </div> - </div> - </li> - </c:forEach> - </ul> - - </div> - </div> - - <div class="row"> - <c:set var="searchQueryString" value="" /> - <c:if test="${not empty branch}"> - <c:set var="searchQueryString" value="${searchQueryString}&branch=${branch}" /> - </c:if> - <c:if test="${not empty hostName}"> - <c:set var="searchQueryString" value="${searchQueryString}&hostName=${hostName}" /> - </c:if> - <c:if test="${not empty buildId}"> - <c:set var="searchQueryString" value="${searchQueryString}&buildId=${buildId}" /> - </c:if> - <c:if test="${not empty deviceName}"> - <c:set var="searchQueryString" value="${searchQueryString}&deviceName=${deviceName}" /> - </c:if> - <div class="col s12 center-align"> - <ul class="pagination"> - <c:choose> - <c:when test="${testSuiteResultEntityPagination.minPageRange gt testSuiteResultEntityPagination.pageSize}"> - <li class="waves-effect"> - <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${testSuiteResultEntityPagination.minPageRange - 1}&nextPageToken=${testSuiteResultEntityPagination.previousPageCountToken}${searchQueryString}"> - <i class="material-icons">chevron_left</i> - </a> - </li> - </c:when> - <c:otherwise> - - </c:otherwise> - </c:choose> - <c:forEach var="pageLoop" begin="${testSuiteResultEntityPagination.minPageRange}" end="${testSuiteResultEntityPagination.maxPageRange}"> - <li class="waves-effect<c:if test="${pageLoop eq page}"> active</c:if>"> - <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${pageLoop}<c:if test="${testSuiteResultEntityPagination.currentPageCountToken ne ''}">&nextPageToken=${testSuiteResultEntityPagination.currentPageCountToken}</c:if>${searchQueryString}"> - <c:out value="${pageLoop}" /> - </a> - </li> - </c:forEach> - <c:choose> - <c:when test="${testSuiteResultEntityPagination.maxPages gt testSuiteResultEntityPagination.pageSize}"> - <li class="waves-effect"> - <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${testSuiteResultEntityPagination.maxPageRange + 1}&nextPageToken=${testSuiteResultEntityPagination.nextPageCountToken}${searchQueryString}"> - <i class="material-icons">chevron_right</i> - </a> - </li> - </c:when> - <c:otherwise> - - </c:otherwise> - </c:choose> - </ul> - </div> - </div> - - </div> - <%@ include file='footer.jsp' %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_table.jsp b/src/main/webapp/WEB-INF/jsp/show_table.jsp deleted file mode 100644 index ec4597c..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_table.jsp +++ /dev/null @@ -1,338 +0,0 @@ -<%-- - ~ Copyright (c) 2016 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link type='text/css' href='/css/show_table.css' rel='stylesheet'> - <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'> - <link type='text/css' href='/css/search_header.css' rel='stylesheet'> - <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/search_header.js'></script> - <script src='js/time.js'></script> - <script type='text/javascript'> - google.charts.load('current', {'packages':['table', 'corechart']}); - google.charts.setOnLoadCallback(drawGridTable); - google.charts.setOnLoadCallback(activateLogLinks); - google.charts.setOnLoadCallback(drawPieChart); - google.charts.setOnLoadCallback(function() { - $('.gradient').removeClass('gradient'); - }); - - var search; - - $(document).ready(function() { - search = $('#filter-bar').createSearchHeader('Module: ', '${testName}', refresh); - search.addFilter('Branch', 'branch', { - corpus: ${branches} - }, ${branch}); - search.addFilter('Device', 'device', { - corpus: ${devices} - }, ${device}); - search.addFilter('Device Build ID', 'deviceBuildId', {}, ${deviceBuildId}); - search.addFilter('Test Build ID', 'testBuildId', {}, ${testBuildId}); - search.addFilter('Host', 'hostname', {}, ${hostname}); - search.addFilter('Passing Count', 'passing', { - validate: 'inequality', - width: 's2' - }, ${passing}); - search.addFilter('Non-Passing Count', 'nonpassing', { - validate: 'inequality', - width: 's2' - }, ${nonpassing}); - search.addRunTypeCheckboxes(${showPresubmit}, ${showPostsubmit}); - search.display(); - - // disable buttons on load - if (!${hasNewer}) { - $('#newer-button').toggleClass('disabled'); - } - if (!${hasOlder}) { - $('#older-button').toggleClass('disabled'); - } - $('#treeLink').click(function() { - window.open('/show_tree?testName=${testName}&treeDefault=true', '_self'); - }); - $('#newer-button').click(prev); - $('#older-button').click(next); - }); - - // Actives the log links to display the log info modal when clicked. - function activateLogLinks() { - $('.info-btn').click(function(e) { - showLog(${logInfoMap}[$(this).data('col')]); - }); - } - - /** Displays a modal window with the specified log entries. - * - * @param logEntries Array of string arrays. Each entry in the outer array - * must contain (1) name string, and (2) url string. - */ - function showLog(logEntries) { - if (!logEntries || logEntries.length == 0) return; - - var logList = $('<ul class="collection"></ul>'); - var entries = logEntries.reduce(function(acc, entry) { - if (!entry || entry.length == 0) return acc; - var link = '<a href="' + entry[1] + '"'; - link += 'class="collection-item">' + entry[0] + '</li>'; - return acc + link; - }, ''); - logList.html(entries); - var infoContainer = $('#info-modal>.modal-content>.info-container'); - infoContainer.empty(); - logList.appendTo(infoContainer); - var modal = $('#info-modal'); - modal.modal(); - modal.modal('open'); - } - - // refresh the page to see the selected test types (pre-/post-submit) - function refresh() { - if($(this).hasClass('disabled')) return; - var link = '${pageContext.request.contextPath}' + - '/show_table?testName=${testName}' + search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - // view older data - function next() { - if($(this).hasClass('disabled')) return; - var endTime = ${startTime}; - var link = '${pageContext.request.contextPath}' + - '/show_table?testName=${testName}&endTime=' + endTime + - search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - // view newer data - function prev() { - if($(this).hasClass('disabled')) return; - var startTime = ${endTime}; - var link = '${pageContext.request.contextPath}' + - '/show_table?testName=${testName}&startTime=' + startTime + - search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - // to draw pie chart - function drawPieChart() { - var topBuildResultCounts = ${topBuildResultCounts}; - if (topBuildResultCounts.length < 1) { - return; - } - var resultNames = ${resultNamesJson}; - var rows = resultNames.map(function(res, i) { - nickname = res.replace('TEST_CASE_RESULT_', '').replace('_', ' ') - .trim().toLowerCase(); - return [nickname, parseInt(topBuildResultCounts[i])]; - }); - rows.unshift(['Result', 'Count']); - - // Get CSS color definitions (or default to white) - var colors = resultNames.map(function(res) { - return $('.' + res).css('background-color') || 'white'; - }); - - var data = google.visualization.arrayToDataTable(rows); - var options = { - is3D: false, - colors: colors, - fontName: 'Roboto', - fontSize: '14px', - legend: {position: 'bottom'}, - tooltip: {showColorCode: true, ignoreBounds: false}, - chartArea: {height: '80%', width: '90%'}, - pieHole: 0.4 - }; - - var chart = new google.visualization.PieChart(document.getElementById('pie-chart-div')); - chart.draw(data, options); - } - - // table for grid data - function drawGridTable() { - var data = new google.visualization.DataTable(); - - // Add column headers. - headerRow = ${headerRow}; - headerRow.forEach(function(d, i) { - var classNames = 'table-header-content'; - if (i == 0) classNames += ' table-header-legend'; - data.addColumn('string', '<span class="' + classNames + '">' + - d + '</span>'); - }); - - var timeGrid = ${timeGrid}; - var durationGrid = ${durationGrid}; - var summaryGrid = ${summaryGrid}; - var resultsGrid = ${resultsGrid}; - - // Format time grid to a formatted date - timeGrid = timeGrid.map(function(row) { - return row.map(function(cell, j) { - if (j == 0) return cell; - return moment().renderTime(cell); - }); - }); - - // Format duration grid to HH:mm:ss.SSS - durationGrid = durationGrid.map(function(row) { - return row.map(function(cell, j) { - if (j == 0) return cell; - return moment().renderDuration(cell); - }); - }); - - // add rows to the data. - data.addRows(timeGrid); - data.addRows(durationGrid); - data.addRows(summaryGrid); - data.addRows(resultsGrid); - - var table = new google.visualization.Table(document.getElementById('grid-table-div')); - var classNames = { - headerRow : 'table-header', - headerCell : 'table-header-cell' - }; - var options = { - showRowNumber: false, - alternatingRowStyle: true, - allowHtml: true, - frozenColumns: 1, - cssClassNames: classNames, - sort: 'disable' - }; - table.draw(data, options); - } - </script> - - <body> - <div class='wide container'> - <div class='row'> - <div class='col s12'> - <div class='card'> - <ul class='tabs'> - <li class='tab col s6' id='treeLink'><a>Tree</a></li> - <li class='tab col s6'><a class='active'>Table</a></li> - </ul> - </div> - <div id='filter-bar'></div> - </div> - <div class='col s7'> - <div class='col s12 card center-align'> - <div id='legend-wrapper'> - <c:forEach items='${resultNames}' var='res'> - <div class='center-align legend-entry'> - <c:set var='trimmed' value='${fn:replace(res, "TEST_CASE_RESULT_", "")}'/> - <c:set var='nickname' value='${fn:replace(trimmed, "_", " ")}'/> - <label for='${res}'>${nickname}</label> - <div id='${res}' class='${res} legend-bubble'></div> - </div> - </c:forEach> - </div> - </div> - <div id='profiling-container' class='col s12'> - <c:choose> - <c:when test='${empty profilingPointNames}'> - <div id='error-div' class='center-align card'><h5>${error}</h5></div> - </c:when> - <c:otherwise> - <ul id='profiling-body' class='collapsible' data-collapsible='accordion'> - <li> - <div class='collapsible-header'><i class='material-icons'>timeline</i>Profiling Graphs</div> - <div class='collapsible-body'> - <ul id='profiling-list' class='collection'> - <c:forEach items='${profilingPointNames}' var='pt'> - <c:set var='profPointArgs' value='testName=${testName}&profilingPoint=${pt}'/> - <c:set var='timeArgs' value='endTime=${endTime}'/> - <a href='/show_graph?${profPointArgs}&${timeArgs}' - class='collection-item profiling-point-name'>${pt} - </a> - </c:forEach> - </ul> - </div> - </li> - <li> - <a class='collapsible-link' href='/show_performance_digest?testName=${testName}'> - <div class='collapsible-header'><i class='material-icons'>toc</i>Performance Digest</div> - </a> - </li> - </ul> - </c:otherwise> - </c:choose> - </div> - </div> - <div class='col s5 valign-wrapper'> - <!-- pie chart --> - <div id='pie-chart-wrapper' class='col s12 valign center-align card'> - <h6 class='pie-chart-title'>Test Status for Device Build ID: ${topBuildId}</h6> - <div id='pie-chart-div'></div> - </div> - </div> - </div> - - <div class='col s12'> - <div id='chart-holder' class='col s12 card'> - <!-- Grid tables--> - <div id='grid-table-div'></div> - </div> - </div> - <div id='newer-wrapper' class='page-button-wrapper fixed-action-btn'> - <a id='newer-button' class='btn-floating btn red waves-effect'> - <i class='large material-icons'>keyboard_arrow_left</i> - </a> - </div> - <div id='older-wrapper' class='page-button-wrapper fixed-action-btn'> - <a id='older-button' class='btn-floating btn red waves-effect'> - <i class='large material-icons'>keyboard_arrow_right</i> - </a> - </div> - </div> - <div id="help-modal" class="modal"> - <div class="modal-content"> - <h4>${searchHelpHeader}</h4> - <p>${searchHelpBody}</p> - </div> - <div class="modal-footer"> - <a href="#!" class="modal-action modal-close waves-effect btn-flat">Close</a> - </div> - </div> - <div id="info-modal" class="modal"> - <div class="modal-content"> - <h4>Logs</h4> - <div class="info-container"></div> - </div> - <div class="modal-footer"> - <a href="#!" class="modal-action modal-close waves-effect btn-flat">Close</a> - </div> - </div> - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_test_acknowledgments.jsp b/src/main/webapp/WEB-INF/jsp/show_test_acknowledgments.jsp deleted file mode 100644 index 84ece88..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_test_acknowledgments.jsp +++ /dev/null @@ -1,52 +0,0 @@ -<%-- - ~ Copyright (c) 2017 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <link rel='stylesheet' href='/css/show_test_acknowledgments.css'> - <link rel='stylesheet' href='/css/test_acknowledgments.css'> - <%@ include file='header.jsp' %> - <script src='js/test_acknowledgments.js'></script> - <script> - $(document).ready(function() { - $('#favoritesLink').click(function() { - window.open('/', '_self'); - }); - $('#allLink').click(function() { - window.open('/?showAll=true', '_self'); - }); - var acks = $('#acknowledgments').testAcknowledgments( - ${allTests}, ${branches}, ${devices}, ${testAcknowledgments}, ${readOnly}); - }); - </script> - <body> - <div class='container wide'> - <div class='row home-tabs-row'> - <div class='col s12'> - <ul class='tabs'> - <li class='tab col s4' id='favoritesLink'><a>Favorites</a></li> - <li class='tab col s4' id='allLink'><a>All Tests</a></li> - <li class='tab col s4'><a class='active'>Test Acknowledgements</a></li> - </ul> - </div> - </div> - <div class='row' id='acknowledgments'></div> - </div> - <%@ include file='footer.jsp' %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/jsp/show_tree.jsp b/src/main/webapp/WEB-INF/jsp/show_tree.jsp deleted file mode 100644 index aa9b311..0000000 --- a/src/main/webapp/WEB-INF/jsp/show_tree.jsp +++ /dev/null @@ -1,323 +0,0 @@ -<%-- - ~ Copyright (c) 2016 Google Inc. All Rights Reserved. - ~ - ~ 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. - --%> -<%@ page contentType='text/html;charset=UTF-8' language='java' %> -<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %> -<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%> - -<html> - <%@ include file="header.jsp" %> - <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'> - <link type='text/css' href='/css/test_results.css' rel='stylesheet'> - <link rel='stylesheet' href='/css/search_header.css'> - <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script> - <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script> - <script src='js/search_header.js'></script> - <script src='js/time.js'></script> - <script src='js/test_results.js'></script> - <script type='text/javascript'> - google.charts.load('current', {'packages':['table', 'corechart']}); - google.charts.setOnLoadCallback(drawPieChart); - - var search; - - $(document).ready(function() { - search = $('#filter-bar').createSearchHeader('Module: ', '${testName}', refresh); - search.addFilter('Branch', 'branch', { - corpus: ${branches} - }, ${branch}); - search.addFilter('Device', 'device', { - corpus: ${devices} - }, ${device}); - search.addFilter('Device Build ID', 'deviceBuildId', {}, ${deviceBuildId}); - search.addFilter('Test Build ID', 'testBuildId', {}, ${testBuildId}); - search.addFilter('Host', 'hostname', {}, ${hostname}); - search.addFilter('Passing Count', 'passing', { - validate: 'inequality', - width: 's2' - }, ${passing}); - search.addFilter('Non-Passing Count', 'nonpassing', { - validate: 'inequality', - width: 's2' - }, ${nonpassing}); - search.addRunTypeCheckboxes(${showPresubmit}, ${showPostsubmit}); - search.display(); - - // disable buttons on load - if (!${hasNewer}) { - $('#newer-button').toggleClass('disabled'); - } - if (!${hasOlder}) { - $('#older-button').toggleClass('disabled'); - } - $('#tableLink').click(function() { - window.open('/show_table?testName=${testName}&treeDefault=false', '_self'); - }); - $('#newer-button').click(prev); - $('#older-button').click(next); - $('#test-results-container').showTests(${testRuns}); - - $('#apiCoverageModal').modal({ - width: '75%', - dismissible: true, // Modal can be dismissed by clicking outside of the modal - opacity: .5, // Opacity of modal background - inDuration: 300, // Transition in duration - outDuration: 200, // Transition out duration - startingTop: '4%', // Starting top style attribute - endingTop: '10%', // Ending top style attribute - ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available. - var urlSafeKeyList = modal.data('urlSafeKeyList'); - var halApiInfoList = []; - var getAjaxList = $.map( urlSafeKeyList, function( urlSafeKey ) { - return $.get( "/api/coverage/api/data?key=" + urlSafeKey, function(data) { - halApiInfoList.push(data); - }) - .fail(function() { - alert( "Error : can't bring API coverage data from the server" ); - }); - }); - - $.when.apply($, getAjaxList).then(function() { - $.each(halApiInfoList, function( index, data ) { - $("#halApiList").append(halApiListTemplate()); - var version = data.halMajorVersion + '.' + data.halMinorVersion; - var defaultInfo = data.halPackageName + '@' + version + '::' + data.halInterfaceName; - $("#halApiList > li:last > div.collapsible-header").html( - '<i class="material-icons">report</i> HAL API Information : ' + defaultInfo - ); - - $("#halApiList > li:last > div.collapsible-body > ul.collection.with-header").append( - $.map( data.halApi, function( apiName, idx ) { - var colorClass = data.coveredHalApi.indexOf(apiName) > -1 ? "green" : "red" - return '<li class="collection-item ' + colorClass + ' lighten-1">' + apiName + '</li>'; - }).join("") - ); - $("#halApiList").collapsible('open', index); - }); - $('#dataTableLoading').hide("slow"); - }); - }, - complete: function() { - $("#halApiList").empty(); - $('#dataTableLoading').show("slow"); - } // Callback for Modal close - } - ); - }); - - function halApiListTemplate() { - return '<li>' + - '<div class="collapsible-header">' + - '<i class="material-icons">report</i> API Information' + - '</div>' + - '<div class="collapsible-body">' + - '<ul class="collection with-header">' + - '</ul>' + - '</div>' + - '</li>'; - } - - // refresh the page to see the selected test types (pre-/post-submit) - function refresh() { - if($(this).hasClass('disabled')) return; - var link = '${pageContext.request.contextPath}' + - '/show_tree?testName=${testName}' + search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - // view older data - function next() { - if($(this).hasClass('disabled')) return; - var endTime = ${startTime}; - var link = '${pageContext.request.contextPath}' + - '/show_tree?testName=${testName}&endTime=' + endTime + - search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - // view newer data - function prev() { - if($(this).hasClass('disabled')) return; - var startTime = ${endTime}; - var link = '${pageContext.request.contextPath}' + - '/show_tree?testName=${testName}&startTime=' + startTime + - search.args(); - if (${unfiltered}) { - link += '&unfiltered='; - } - window.open(link,'_self'); - } - - // to draw pie chart - function drawPieChart() { - var topBuildResultCounts = ${topBuildResultCounts}; - if (topBuildResultCounts.length < 1) { - return; - } - var resultNames = ${resultNamesJson}; - var rows = resultNames.map(function(res, i) { - nickname = res.replace('TEST_CASE_RESULT_', '').replace('_', ' ') - .trim().toLowerCase(); - return [nickname, parseInt(topBuildResultCounts[i])]; - }); - rows.unshift(['Result', 'Count']); - - // Get CSS color definitions (or default to white) - var colors = resultNames.map(function(res) { - return $('.' + res).css('background-color') || 'white'; - }); - - var data = google.visualization.arrayToDataTable(rows); - var options = { - is3D: false, - colors: colors, - fontName: 'Roboto', - fontSize: '14px', - legend: {position: 'bottom'}, - tooltip: {showColorCode: true, ignoreBounds: false}, - chartArea: {height: '80%', width: '90%'}, - pieHole: 0.4 - }; - - var chart = new google.visualization.PieChart(document.getElementById('pie-chart-div')); - chart.draw(data, options); - } - </script> - - <body> - <div class='wide container'> - <div class='row'> - <div class='col s12'> - <div class='card'> - <ul class='tabs'> - <li class='tab col s6'><a class='active'>Tree</a></li> - <li class='tab col s6' id='tableLink'><a>Table</a></li> - </ul> - </div> - <div id='filter-bar'></div> - </div> - <div class='col s7'> - <div class='col s12 card center-align'> - <div id='legend-wrapper'> - <c:forEach items='${resultNames}' var='res'> - <div class='center-align legend-entry'> - <c:set var='trimmed' value='${fn:replace(res, "TEST_CASE_RESULT_", "")}'/> - <c:set var='nickname' value='${fn:replace(trimmed, "_", " ")}'/> - <label for='${res}'>${nickname}</label> - <div id='${res}' class='${res} legend-bubble'></div> - </div> - </c:forEach> - </div> - </div> - <div id='profiling-container' class='col s12'> - <c:choose> - <c:when test='${empty profilingPointNames}'> - <div id='error-div' class='center-align card'><h5>${error}</h5></div> - </c:when> - <c:otherwise> - <ul id='profiling-body' class='collapsible' data-collapsible='accordion'> - <li> - <div class='collapsible-header'><i class='material-icons'>timeline</i>Profiling Graphs</div> - <div class='collapsible-body'> - <ul id='profiling-list' class='collection'> - <c:forEach items='${profilingPointNames}' var='pt'> - <c:set var='profPointArgs' value='testName=${testName}&profilingPoint=${pt}'/> - <c:set var='timeArgs' value='endTime=${endTime}'/> - <a href='/show_graph?${profPointArgs}&${timeArgs}' - class='collection-item profiling-point-name'>${pt} - </a> - </c:forEach> - </ul> - </div> - </li> - <li> - <a class='collapsible-link' href='/show_performance_digest?testName=${testName}'> - <div class='collapsible-header'><i class='material-icons'>toc</i>Performance Digest</div> - </a> - </li> - </ul> - </c:otherwise> - </c:choose> - </div> - </div> - <div class='col s5 valign-wrapper'> - <!-- pie chart --> - <div id='pie-chart-wrapper' class='col s12 valign center-align card'> - <h6 class='pie-chart-title'>${topBuildId}</h6> - <div id='pie-chart-div'></div> - </div> - </div> - </div> - - <div class='col s12' id='test-results-container'> - </div> - <div id='newer-wrapper' class='page-button-wrapper fixed-action-btn'> - <a id='newer-button' class='btn-floating btn red waves-effect'> - <i class='large material-icons'>keyboard_arrow_left</i> - </a> - </div> - <div id='older-wrapper' class='page-button-wrapper fixed-action-btn'> - <a id='older-button' class='btn-floating btn red waves-effect'> - <i class='large material-icons'>keyboard_arrow_right</i> - </a> - </div> - </div> - - <!-- Modal Structure --> - <div id="apiCoverageModal" class="modal modal-fixed-footer" style="width: 75%;"> - <div class="modal-content"> - <h4 id="coverageModalTitle">API Coverage</h4> - - <div class="preloader-wrapper big active loaders"> - <div id="dataTableLoading" class="spinner-layer spinner-blue-only"> - <div class="circle-clipper left"> - <div class="circle"></div> - </div> - <div class="gap-patch"> - <div class="circle"></div> - </div> - <div class="circle-clipper right"> - <div class="circle"></div> - </div> - </div> - </div> - - <div class="row"> - <div class="col s12"> - <ul class="collection with-header"> - <li class="collection-header"> - <h4>Total HAL API List</h4> - <ul id="halApiList" class="collapsible popout" data-collapsible="expandable"> - - </ul> - </li> - </ul> - </div> - </div> - </div> - <div class="modal-footer"> - <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat ">Close</a> - </div> - </div> - - <%@ include file="footer.jsp" %> - </body> -</html> diff --git a/src/main/webapp/WEB-INF/queue.xml b/src/main/webapp/WEB-INF/queue.xml deleted file mode 100644 index 3a116f2..0000000 --- a/src/main/webapp/WEB-INF/queue.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -Copyright (C) 2017 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. ---> -<queue-entries> - <queue> - <name>profilingStatsQueue</name> - <rate>200/s</rate> - <bucket-size>40</bucket-size> - </queue> - <queue> - <name>suiteTestQueue</name> - <rate>20/s</rate> - <bucket-size>40</bucket-size> - <max-concurrent-requests>10</max-concurrent-requests> - </queue> - <queue> - <name>coverageApiQueue</name> - <rate>20/s</rate> - <bucket-size>100</bucket-size> - <max-concurrent-requests>10</max-concurrent-requests> - </queue> -</queue-entries>
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index a683f48..0000000 --- a/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,363 +0,0 @@ -<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> -<!-- -Copyright 2016 Google Inc. All Rights Reserved. - - 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. ---> - -<listener> - <listener-class> - com.android.vts.config.ObjectifyListener - </listener-class> -</listener> - -<filter> - <filter-name>ObjectifyFilter</filter-name> - <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class> -</filter> -<filter-mapping> - <filter-name>ObjectifyFilter</filter-name> - <url-pattern>/*</url-pattern> -</filter-mapping> - -<servlet> - <servlet-name>dashboard_main</servlet-name> - <servlet-class>com.android.vts.servlet.DashboardMainServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_release</servlet-name> - <servlet-class>com.android.vts.servlet.ShowReleaseServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_green_release</servlet-name> - <servlet-class>com.android.vts.servlet.ShowGreenReleaseServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_coverage_overview</servlet-name> - <servlet-class>com.android.vts.servlet.ShowCoverageOverviewServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_tree</servlet-name> - <servlet-class>com.android.vts.servlet.ShowTreeServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_table</servlet-name> - <servlet-class>com.android.vts.servlet.ShowTableServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_graph</servlet-name> - <servlet-class>com.android.vts.servlet.ShowGraphServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_profiling_list</servlet-name> - <servlet-class>com.android.vts.servlet.ShowProfilingListServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_profiling_overview</servlet-name> - <servlet-class>com.android.vts.servlet.ShowProfilingOverviewServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_plan_release</servlet-name> - <servlet-class>com.android.vts.servlet.ShowPlanReleaseServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_plan_run</servlet-name> - <servlet-class>com.android.vts.servlet.ShowPlanRunServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_performance_digest</servlet-name> - <servlet-class>com.android.vts.servlet.ShowPerformanceDigestServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_coverage</servlet-name> - <servlet-class>com.android.vts.servlet.ShowCoverageServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_test_acknowledgments</servlet-name> - <servlet-class>com.android.vts.servlet.ShowTestAcknowledgmentServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>show_gcs_log</servlet-name> - <servlet-class>com.android.vts.servlet.ShowGcsLogServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>test_data_api</servlet-name> - <servlet-class>com.android.vts.api.TestDataForDevServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>datastore_api</servlet-name> - <servlet-class>com.android.vts.api.DatastoreRestServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>data_api</servlet-name> - <servlet-class>com.android.vts.api.DataRestServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>coverage_api</servlet-name> - <servlet-class>com.android.vts.api.CoverageRestServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>test_run_api</servlet-name> - <servlet-class>com.android.vts.api.TestRunRestServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>favorites_api</servlet-name> - <servlet-class>com.android.vts.api.UserFavoriteRestServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>test_suite_api</servlet-name> - <servlet-class>com.android.vts.api.TestSuiteResultRestServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>bigtable_legacy_api</servlet-name> - <servlet-class>com.android.vts.api.BigtableLegacyJsonServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>test_acknowledgments</servlet-name> - <servlet-class>com.android.vts.api.TestAcknowledgmentRestServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>vts_alert_job</servlet-name> - <servlet-class>com.android.vts.job.VtsAlertJobServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>vts_performance_job</servlet-name> - <servlet-class>com.android.vts.job.VtsPerformanceJobServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>vts_profiling_stats_job</servlet-name> - <servlet-class>com.android.vts.job.VtsProfilingStatsJobServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>vts_coverage_job</servlet-name> - <servlet-class>com.android.vts.job.VtsCoverageAlertJobServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>vts_inactivity_job</servlet-name> - <servlet-class>com.android.vts.job.VtsInactivityJobServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>vts_spreadsheet_sync_job</servlet-name> - <servlet-class>com.android.vts.job.VtsSpreadSheetSyncServlet</servlet-class> -</servlet> - -<servlet> - <servlet-name>suite_test_report_gcs_monitor_job</servlet-name> - <servlet-class>com.android.vts.job.VtsSuiteTestJobServlet</servlet-class> -</servlet> - -<servlet-mapping> - <servlet-name>dashboard_main</servlet-name> - <url-pattern>/</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_release</servlet-name> - <url-pattern>/show_release/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_green_release</servlet-name> - <url-pattern>/show_green_release/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_coverage_overview</servlet-name> - <url-pattern>/show_coverage_overview/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_tree</servlet-name> - <url-pattern>/show_tree/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_table</servlet-name> - <url-pattern>/show_table/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_graph</servlet-name> - <url-pattern>/show_graph/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_profiling_list</servlet-name> - <url-pattern>/show_profiling_list/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_profiling_overview</servlet-name> - <url-pattern>/show_profiling_overview/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_plan_release</servlet-name> - <url-pattern>/show_plan_release/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_plan_run</servlet-name> - <url-pattern>/show_plan_run/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_performance_digest</servlet-name> - <url-pattern>/show_performance_digest/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_coverage</servlet-name> - <url-pattern>/show_coverage/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_test_acknowledgments</servlet-name> - <url-pattern>/show_test_acknowledgments/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>show_gcs_log</servlet-name> - <url-pattern>/show_gcs_log/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>bigtable_legacy_api</servlet-name> - <url-pattern>/api/bigtable/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>test_data_api</servlet-name> - <url-pattern>/api/test_data/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>datastore_api</servlet-name> - <url-pattern>/api/datastore/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>data_api</servlet-name> - <url-pattern>/api/data/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>coverage_api</servlet-name> - <url-pattern>/api/coverage/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>test_run_api</servlet-name> - <url-pattern>/api/test_run/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>favorites_api</servlet-name> - <url-pattern>/api/favorites/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>test_acknowledgments</servlet-name> - <url-pattern>/api/test_acknowledgments/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>test_suite_api</servlet-name> - <url-pattern>/api/test_suite/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>vts_alert_job</servlet-name> - <url-pattern>/task/vts_alert_job/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>vts_coverage_job</servlet-name> - <url-pattern>/task/vts_coverage_job/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>vts_profiling_stats_job</servlet-name> - <url-pattern>/task/vts_profiling_stats_job/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>vts_performance_job</servlet-name> - <url-pattern>/cron/vts_performance_job/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>vts_inactivity_job</servlet-name> - <url-pattern>/cron/vts_inactivity_job/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>vts_spreadsheet_sync_job</servlet-name> - <url-pattern>/cron/vts_spreadsheet_sync_job/*</url-pattern> -</servlet-mapping> - -<servlet-mapping> - <servlet-name>suite_test_report_gcs_monitor_job</servlet-name> - <url-pattern>/cron/test_suite_report_gcs_monitor/*</url-pattern> -</servlet-mapping> - -<security-constraint> - <web-resource-collection> - <web-resource-name>tasks</web-resource-name> - <url-pattern>/cron/*</url-pattern> - <url-pattern>/task/*</url-pattern> - </web-resource-collection> - <auth-constraint> - <role-name>admin</role-name> - </auth-constraint> -</security-constraint> - -<security-constraint> - <web-resource-collection> - <web-resource-name>all</web-resource-name> - <url-pattern>/show_*</url-pattern> - </web-resource-collection> - <auth-constraint> - <role-name>*</role-name> - </auth-constraint> -</security-constraint> -</web-app> diff --git a/src/main/webapp/css/common.css b/src/main/webapp/css/common.css deleted file mode 100644 index 3e0a1c9..0000000 --- a/src/main/webapp/css/common.css +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2017 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. -*/ - -@media only screen and (min-width: 993px) { - .wide.container { - width: 80%; - max-width: 1600px; - min-height: 80vh; - } -} -.TEST_CASE_RESULT_PASS { - background-color: #7FFF00; -} -.TEST_CASE_RESULT_FAIL { - background-color: #ff4d4d; -} -.TEST_CASE_RESULT_SKIP { - background-color: #A8A8A8; -} -.TEST_CASE_RESULT_EXCEPTION { - background-color: black; -} -.TEST_CASE_RESULT_TIMEOUT { - background-color: #9900CC; -} -.UNKNOWN_RESULT { - background-color: white; - border: 1px #A8A8A8 solid; -} diff --git a/src/main/webapp/css/dashboard_main.css b/src/main/webapp/css/dashboard_main.css deleted file mode 100644 index e4b4658..0000000 --- a/src/main/webapp/css/dashboard_main.css +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2016 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. -*/ -.row.home-tabs-row { - margin-bottom: 50px; -} - -.row.home-tabs-row li.col.tab { - cursor: pointer; - user-select: none; -} - -#add-button-wrapper { - margin-top: 10px; - height: 61px; -} - -.btn-container > .btn-flat { - margin-top: 8px; - user-select: none; - color: grey; -} - -.btn-container > .btn-flat.inactive { - color: lightgray; -} - -.row .col.card.option { - padding: 6px 15px 6px 15px; - margin: 5px 0; - border-radius: 25px; -} - -#error-container { - padding-top: 50px; - padding-bottom: 50px; -} - -.entry { - font-size: 20px; - font-weight: 300; - position: relative; -} - -.indicator { - color: white; - font-size: 12px; - font-weight: bold; - padding: 1px 6px; - right: 0; - min-width: 40px; - border-radius: 10px; - margin-top: 5px; -} - -#show-button { - border-radius: 100px; -} - -#show-button-arrow { - margin-left: 3px; -} - -#section-header { - cursor: default; - user-select: none; - color: #ee6e73; -} - -#section-header:after { - border: 1px solid #ee6e73; - margin-top: 10px; - margin-bottom: 0; - display: block; - content: " "; -} - -.ui-menu { - overflow-y: auto; - z-index: 100; - max-height: 50%; -} - -.ui-menu-item { - font-size: 16px; - padding: 4px 10px; - transition: background-color .25s; -} - -.ui-menu-item:hover { - background-color: #e0f2f1; -} - -.ui-menu-item:active { - background-color: #b2dfdb; -} - -.ui-helper-hidden-accessible { - display: none; -} diff --git a/src/main/webapp/css/datepicker.css b/src/main/webapp/css/datepicker.css deleted file mode 100644 index b98dd80..0000000 --- a/src/main/webapp/css/datepicker.css +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2016 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. -*/ -.ui-datepicker table { - font-family: Roboto !important; - font-size: 13px !important; - white-space: nowrap !important; -} - -#ui-datepicker-div { - font-family: "Roboto", sans-serif; - padding: 0; -} - -.ui-corner-all { - border-bottom-right-radius: 0 !important; - border-bottom-left-radius: 0 !important; - border-top-right-radius: 0 !important; - border-top-left-radius: 0 !important; -} - -.ui-datepicker td span.ui-state-default, .ui-datepicker td a.ui-state-default { - text-align: center; - padding: 0.7em 0.4em; - border: none; - border-radius: 10em; - background: none; -} - -.ui-datepicker td span.ui-state-hover, .ui-datepicker td a.ui-state-hover { - background: #e0f2f1; -} - -.ui-datepicker td span.ui-state-active, .ui-datepicker td a.ui-state-active { - color: white; - font-weight: 600; - background: #009688; -} - -.ui-datepicker-header.ui-widget-header.ui-helper-clearfix.ui-corner-all { - background: #009688; - border: none; - color: white; -} - -.ui-datepicker-next.ui-state-hover.ui-datepicker-next-hover { - right: 2px; - top: 2px; -} - -.ui-datepicker-prev.ui-state-hover.ui-datepicker-prev-hover { - left: 2px; - top: 2px; -} - -.ui-datepicker-next.ui-corner-all.ui-state-hover, .ui-datepicker-prev.ui-corner-all.ui-state-hover { - background: none; - border: none; -} diff --git a/src/main/webapp/css/navbar.css b/src/main/webapp/css/navbar.css deleted file mode 100644 index cf16f60..0000000 --- a/src/main/webapp/css/navbar.css +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2016 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. -*/ -nav#navbar { - margin-bottom: 30px; - user-select: none; -} -nav#navbar .nav-wrapper { - height: auto; -} -nav#navbar ul.nav-list { - display: inline-block; -} -nav#navbar ul li { - transition: background-color .3s; - float: left; - padding: 0; -} -nav#navbar ul li.active { - background-color: rgba(0,0,0,0.1); -} -nav#navbar ul li a:hover, nav#navbar ul li.active { - background-color: #ea454b; -} -nav#navbar ul a.nav-list-item { - font-size: 1.2rem; -} -nav#navbar #nav-sublist { - line-height: 35px; - background: white; - padding-left: 15px; - width: 100%; - display: inline-block; - position: relative; -} -nav#navbar #nav-sublist .breadcrumb.nav-sublist-item { - font-size: 15px; - font-weight: 400; - color: rgba(238, 110, 115, 0.85); - line-height: 35px; -} -nav#navbar #nav-sublist .breadcrumb.nav-sublist-item:last-child { - color: rgb(238, 110, 115); - font-weight: 500; -} -nav#navbar #nav-sublist .breadcrumb.nav-sublist-item::before { - font-size: 22px; - color: rgba(238, 110, 115, 0.85); - line-height: 35px; - margin: 0 5px; -} -nav#navbar #dropdown-button { - font-style: italic; - color: rgba(255, 255, 255, 0.75); - margin-left: 0; - margin-top: 0; -} diff --git a/src/main/webapp/css/plan_runs.css b/src/main/webapp/css/plan_runs.css deleted file mode 100644 index b84a656..0000000 --- a/src/main/webapp/css/plan_runs.css +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2017 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. -*/ -.release-entry { - border-radius: 5px 5px 10px 10px; - margin: 0 0 0.65rem 0; -} -.release-entry .plan-run-metadata { - text-overflow: ellipsis; - overflow-x: hidden; - white-space: nowrap; - display: inline-block; - font-size: 13px; - color: black; - line-height: 16px; - padding: 7px; - width: 100%; -} -.counter { - color: white; - font-size: 12px; - font-weight: bold; - display: block; - border-radius: 0 0 10px 10px; -}
\ No newline at end of file diff --git a/src/main/webapp/css/search_header.css b/src/main/webapp/css/search_header.css deleted file mode 100644 index d3abaf3..0000000 --- a/src/main/webapp/css/search_header.css +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 2017 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. -*/ -.row.card.search-bar { - margin-left: 0; - margin-right: 0; -} -.row.card.search-bar.expanded { - border-radius: 0 0 15px 15px; -} -.search-bar .section-header { - color: rgb(97, 97, 97); - font-weight: 300; - padding: 15px 20px 15px; - margin: 0; - cursor: default; - user-select: none; - display: inline-block; -} -.search-bar .section-header b { - color: #ee6e73; -} -.search-bar .search-icon-wrapper { - text-align: center; - display: inline-block; - position: absolute; - right: 0; - height: 57px; - width: 57px; - cursor: pointer; - user-select: none; -} -.search-bar .search-icon-wrapper i { - line-height: 57px; - color: rgb(97, 97, 97); -} -.search-bar .search-wrapper { - border-top: 1px solid rgb(221, 221, 221); -} -.search-bar .search-wrapper .refresh-wrapper a { - float: right; - margin-top: 17px; -} -.search-bar .input-field input[type=text].invalid { - color: #F44336; -} -.search-bar .search-wrapper .run-type-wrapper { - margin: 20px 0; -} -.search-bar .search-wrapper .run-type-wrapper [type="checkbox"]+label { - margin-right: 35px; -} -.search-bar-menu.ui-menu { - overflow: auto; - z-index: 100; - max-height: 75%; -} -.search-bar-menu .ui-menu-item { - font-size: 16px; - padding: 4px 10px; - transition: background-color .25s; -} -.search-bar-menu .ui-menu-item:hover { - background-color: #e0f2f1; -} - -.search-bar-menu .ui-menu-item:active { - background-color: #b2dfdb; -} -.ui-helper-hidden-accessible { - display: none; -} diff --git a/src/main/webapp/css/show_coverage.css b/src/main/webapp/css/show_coverage.css deleted file mode 100644 index 7178ec3..0000000 --- a/src/main/webapp/css/show_coverage.css +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2016 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. -*/ - -.collapsible.popout { - margin-bottom: 50px; -} - -.table { - font-size: 12px; - border: none; - width: 100%; - word-spacing: 4px; - font-family: monospace; - white-space: PRE; - border-collapse: collapse; -} - -.section-title { - margin-left: 24px; -} - -.html-container { - padding: 25px 25px; -} - -.login-button { - border: 1px solid gray; - color: gray; - border-radius: 15px; - padding: 4px 15px; - cursor: pointer; -} - -td { - padding: 0; -} - -.count { - white-space: nowrap; - text-align: right; - border-right: 1px solid black; - padding-right: 5px; -} - -.line_no { - padding-left: 35px; - white-space: nowrap; - padding-right: 5px; - border-right: 1px dotted gray; -} - -.code { - padding-left: 10px; - width: 99%; -} - -.indicator { - display: inline-block; - width: 50px; - line-height: 18px; - border-radius: 10px; - padding: 3px 5px; - font-size: 12px; - font-weight: bold; - color: white; -} - -.total-count { - margin-left: auto; - margin-right: 8px; - padding-right: 5px; - line-height: 22px; - border-right: 1px solid gray; - font-size: 12px; - font-weight: bold; - color: gray; -} - -.uncovered { - background-color: LightPink; -} - -.covered { - background-color: LightGreen; -} - -.source-name { - margin-top: -25px; - padding-left: 45px; -} - -.loader-background { - display: flex; - align-items: center; - justify-content: center; - background-color: #000; - - position: fixed; - z-index: 100; - top: 0; - left: 0; - right: 0; - bottom: 0; - opacity: 0.5; -}
\ No newline at end of file diff --git a/src/main/webapp/css/show_gcs_log.css b/src/main/webapp/css/show_gcs_log.css deleted file mode 100644 index 1960485..0000000 --- a/src/main/webapp/css/show_gcs_log.css +++ /dev/null @@ -1,25 +0,0 @@ -/* 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. -*/ - -.loading-overlay { - display: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: #A8A8A8; - opacity: 0.4; -} diff --git a/src/main/webapp/css/show_graph.css b/src/main/webapp/css/show_graph.css deleted file mode 100644 index 51e4c04..0000000 --- a/src/main/webapp/css/show_graph.css +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2016 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. -*/ - -#download { - bottom: 25px; - right: 25px; -} - -#header-container { - padding: 50px; - padding-bottom: 30px; -} - -#device-select-wrapper { - margin-top: 0; -} - -#date-container { - padding: 0 50px; - padding-bottom: 25px; -} - -#load { - margin-top: 5px; -} - -.profiling-name { - font-weight: 200; - font-style: italic; - font-size: 1.4rem -} - -#error-container { - padding-top: 25px; - padding-bottom: 25px; -} - -.graph-wrapper { - padding: 30px; -} - -.graph { - height: 500px; - padding-bottom: 30px; -} - -.percentile-table { - width: auto; - margin: auto; - margin-top: 20px; -} - -.percentile-table td, th{ - font-size: 11px; - text-align: center; - padding: 5px 10px; -} - diff --git a/src/main/webapp/css/show_performance_digest.css b/src/main/webapp/css/show_performance_digest.css deleted file mode 100644 index 5d0c0e6..0000000 --- a/src/main/webapp/css/show_performance_digest.css +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2016 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. -*/ - -#header-container { - padding: 25px; -} - -#load { - margin-top: 15px; -} - -#device-select-wrapper { - margin-top: 9px; -} - -#date { - margin-bottom: 0; - margin-top: 10px; -} - -div.col.card.summary { - padding: 0 20px 20px; -} - -.profiling-name { - font-weight: 200; - font-style: italic; - font-size: 1.4rem -} - -.profiling-subtitle { - font-style: italic; - font-size: 12px; - margin-left: 2px; -} - -.summary table { - width: 100%; - border-collapse: collapse; - border: 1px solid black; - font-size: 12px; - font-family: Roboto !important; -} - -.summary table td, th { - padding: 2px; -} - -.section-label { - border: 1px solid black; -} - -.axis-label { - border-top: 1px solid lightgray; - border-right: 1px solid black; - text-align: right; -} - -.cell { - border-top: 1px solid lightgray; - text-align: right; -} - -.inner-cell { - border-right: 1px solid lightgray; -} - -.outer-cell { - border-right: 1px solid black; -} diff --git a/src/main/webapp/css/show_plan_release.css b/src/main/webapp/css/show_plan_release.css deleted file mode 100644 index f55b8da..0000000 --- a/src/main/webapp/css/show_plan_release.css +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2017 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. -*/ -.page-button-wrapper { - top: 50%; - bottom: auto; - padding: 0; -} -#newer-wrapper { - left: 23px; - right: auto; -} diff --git a/src/main/webapp/css/show_profiling_overview.css b/src/main/webapp/css/show_profiling_overview.css deleted file mode 100644 index 76c194d..0000000 --- a/src/main/webapp/css/show_profiling_overview.css +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2017 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. -*/ - -.row.card.box-plot { - height: 400px; - padding: 25px 10px; -} -div.google-visualization-tooltip { - padding: 10px; - white-space: nowrap; -} diff --git a/src/main/webapp/css/show_release.css b/src/main/webapp/css/show_release.css deleted file mode 100644 index 1f1758b..0000000 --- a/src/main/webapp/css/show_release.css +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2017 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. -*/ - -.row .col.card.option { - padding: 10px 15px 10px 25px; - margin: 5px 0; - border-radius: 25px; -} -.entry { - font-size: 20px; - font-weight: 300; - position: relative; -} -#show-button-arrow { - margin-left: 3px; -} -#section-header { - cursor: default; - user-select: none; - color: #ee6e73; -} -#section-header:after { - border: 1px solid #ee6e73; - margin-top: 10px; - margin-bottom: 0; - display: block; - content: " "; -} diff --git a/src/main/webapp/css/show_table.css b/src/main/webapp/css/show_table.css deleted file mode 100644 index 627d859..0000000 --- a/src/main/webapp/css/show_table.css +++ /dev/null @@ -1,137 +0,0 @@ -/* Copyright (C) 2016 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. -*/ - -table { - font-family: Roboto !important; - font-size: 13px !important; - white-space: nowrap !important; -} -.table-header-cell { - background-color: white; - transition: max-width 1s; - max-width: 150px; -} -.table-header-cell:hover { - transition-delay: 0.5s; - max-width: 1000px; -} -.table-header-content.table-header-legend { - max-width: none; -} -.table-header-content { - font-weight: initial; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - display: inline-block; - max-width: inherit; - width: 100%; -} -.page-button-wrapper { - top: 50%; - bottom: auto; - padding: 0; -} -#newer-wrapper { - left: 23px; - right: auto; -} -#chart-holder { - padding: 30px 5px; -} -#pie-chart-div { - width: 100%; - height: 300px; -} -#profiling-container { - padding: 0; -} -#error-div { - padding: 30px 25px; -} -#profiling-body { - border: none; -} -#profiling-list { - max-height: 200px; - overflow-y: scroll; -} -.collapsible-header { - user-select: none; -} -.collapsible-link { - color: inherit; -} -.collection a.collection-item.profiling-point-name { - color: #616161; - font-size: 13px; - padding: 2px 0 2px 25px; -} -#legend-wrapper { - display: inline-block; - padding: 10px 15px 12px; -} -.btn.inline-btn { - border-radius: 50px; - height: auto; - line-height: inherit; - padding: 1px; - margin-left: 2px; -} -i.material-icons.inline-icon { - font-size: inherit; -} -a.legend-circle { - width: 15px; - height: 15px; - padding: 0; - border-radius: 15px; -} -.legend-header-cell { - text-transform: capitalize; -} -.legend-entry { - display: inline-block; - margin: 0 5px; - min-width: 50px; -} -.legend-bubble { - border-radius: 20px; - height: 20px; - width: 20px; - margin: 0 auto; -} -#pie-chart-wrapper { - padding: 25px 0; -} -.pie-chart-title { - cursor: default; -} -div.status-icon { - width: 10px; - height: 10px; - border-radius: 10px; - display: inline-block; - margin-left: 5px; -} -.test-case-status { - border-radius: 50px; - display: inline-block; - height: 100%; - width: 100%; -} -.test-case-status.width-1 { - width: calc(100% - 18px); -} diff --git a/src/main/webapp/css/show_test_acknowledgments.css b/src/main/webapp/css/show_test_acknowledgments.css deleted file mode 100644 index 38edb31..0000000 --- a/src/main/webapp/css/show_test_acknowledgments.css +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2017 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. -*/ -.row.home-tabs-row { - margin-bottom: 50px; -} -.row.home-tabs-row li.col.tab { - cursor: pointer; - user-select: none; -}
\ No newline at end of file diff --git a/src/main/webapp/css/show_test_runs_common.css b/src/main/webapp/css/show_test_runs_common.css deleted file mode 100644 index ff48b73..0000000 --- a/src/main/webapp/css/show_test_runs_common.css +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright (C) 2017 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. -*/ -.page-button-wrapper { - top: 50%; - bottom: auto; - padding: 0; -} -#newer-wrapper { - left: 23px; - right: auto; -} -#chart-holder { - padding: 30px 5px; -} -#pie-chart-div { - width: 100%; - height: 300px; -} -.row .col div.pie-chart-div { - width: 100%; - height: 255px; -} -#profiling-container { - padding: 0; -} -#summary-container { - padding: 0; - line-height: 18px; - font-weight: 300; - color: rgb(97, 97, 97); -} -#summary-container .summary-header { - font-size: 18px; - font-weight: normal; - color: rgba(0, 0, 0, 0.87); - border-bottom: 1px solid rgb(221, 221, 221); - margin: 0; - padding: 10px 15px; -} -#summary-container .summary-header i { - margin-right: 10px; -} -#summary-container div { - margin: 15px; -} -#error-div { - padding: 30px 25px; -} -#profiling-body { - border: none; -} -#profiling-list { - max-height: 200px; - overflow-y: scroll; -} -.collapsible-header { - user-select: none; -} -.collapsible-link { - color: inherit; -} -.collection a.collection-item.profiling-point-name { - color: #616161; - font-size: 13px; - padding: 2px 0 2px 25px; -} -#legend-wrapper { - display: inline-block; - padding: 10px 15px 12px; -} -.btn.inline-btn { - border-radius: 50px; - height: auto; - line-height: inherit; - padding: 1px; - margin-left: 2px; -} -i.material-icons.inline-icon { - font-size: inherit; -} -a.legend-circle { - width: 15px; - height: 15px; - padding: 0; - border-radius: 15px; -} -.legend-header-cell { - text-transform: capitalize; -} -.legend-entry { - display: inline-block; - margin: 0 5px; - min-width: 50px; -} -.legend-bubble { - border-radius: 20px; - height: 20px; - width: 20px; - margin: 0 auto; -} -#pie-chart-wrapper, .row .col.pie-chart-wrapper { - padding: 25px 0; -} -.pie-chart-title { - cursor: default; -} -div.status-icon { - width: 10px; - height: 10px; - border-radius: 10px; - display: inline-block; - margin-left: 5px; -} -.test-case-status { - border-radius: 50px; - display: inline-block; - height: 100%; - width: 100%; -} -.test-case-status.width-1 { - width: calc(100% - 18px); -} -.TEST_CASE_RESULT_PASS { - background-color: #4CAF50; -} -.TEST_CASE_RESULT_FAIL { - background-color: #F44336; -} -.TEST_CASE_RESULT_SKIP { - background-color: #A8A8A8; -} -.TEST_CASE_RESULT_EXCEPTION { - background-color: black; -} -.TEST_CASE_RESULT_TIMEOUT { - background-color: #9900CC; -} -.UNKNOWN_RESULT { - background-color: white; - border: 1px #A8A8A8 solid; -} -.tabs > div.indicator { - height: 3px; -} diff --git a/src/main/webapp/css/test_acknowledgments.css b/src/main/webapp/css/test_acknowledgments.css deleted file mode 100644 index 834b86d..0000000 --- a/src/main/webapp/css/test_acknowledgments.css +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (C) 2017 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. -*/ -div.col.s12.section-header-col:after { - border: 1px solid #ee6e73; - margin-top: 10px; - margin-bottom: 0; - display: block; - content: " "; -} -div.col.s12.section-header-col h4.section-header { - cursor: default; - user-select: none; - color: #ee6e73; -} -div.col.s12.section-header-col p.acknowledgment-info { - font-size: 18px; - color: rgba(0,0,0,0.6); - font-weight: 300; -} -.search-row .input-field.col.s8 > label { - pointer-events: none; -} -.search-row .col.s1 .btn.btn-floating { - margin-top: 22px; -} -.acknowledgments { - width: 100%; - margin-top: 25px; - display: inline-block; -} -.ack-entry .col.card { - margin: 5px 0; - border-radius: 5px; - word-break: break-word; - cursor: pointer; -} -.ack-entry span.info-icon.right { - padding: 5px 0 0 0; - height: auto; - margin-right: -15px; - pointer-events: none; -} -.ack-entry span.info-icon.right i { - font-size: 16px; - line-height: 16px; - user-select: none; - color: grey; -} -.ack-entry .btn-container > .btn-flat { - margin-top: 10px; - user-select: none; - color: grey; -} -.ack-entry .count-indicator { - font-size: 12px; - font-style: italic; - font-weight: 300; - vertical-align: text-top; -} -.acknowledgments-modal.modal { - width: 80%; -} -.acknowledgments-modal.modal h4, .acknowledgments-modal.modal h5 { - user-select: none; - cursor: default; -} -.acknowledgments-modal.modal .modal-content .row .modal-section > .col { - padding: 0; -} -.acknowledgments-modal.modal .modal-content h5 { - color: rgb(97, 97, 97); - font-weight: 300; -} -.acknowledgments-modal.modal .modal-content h5 b { - color: #ee6e73; -} -.acknowledgments-modal.modal .modal-content .chips { - max-height: 30%; - overflow-y: auto; -} -.acknowledgments-modal.modal .modal-content .chips .chip { - font-size: 13px; - height: auto; - line-height: 13px; - padding: 5px 10px; - margin-right: 5px; - margin-top: 5px; -} -.acknowledgments-modal.modal .modal-content .chips .chip i.material-icons { - line-height: 13px; -} -.acknowledgments-modal.modal .modal-content .input-container { - position: relative; -} -.acknowledgments-modal.modal .modal-content .input-container .material-icons.add-button { - position: absolute; - top: 13px; - right: 5px; - color: #9e9e9e; - cursor: pointer; -} -.acknowledgments-modal.modal .modal-content .input-container > input[type=text] { - font-size: 15px; - height: 30px; - border: 0; - color: rgba(0,0,0,0.6); - margin-top: 10px; -} -.acknowledgments-modal.modal .modal-content .input-field { - margin-top: -25px; -} -.acknowledgments-modal.modal .modal-content .input-field textarea.note-field:disabled { - color: rgba(0,0,0,0.6); -} -.ui-autocomplete.card.autocomplete-dropdown { - z-index: 10000000; - overflow: auto; - max-height: 250px; -} -.ui-autocomplete.card.autocomplete-dropdown .ui-menu-item { - font-size: 12px; - padding: 4px 10px; - transition: background-color .25s; -} -.ui-autocomplete.card.autocomplete-dropdown .ui-menu-item:hover { - background-color: #e0f2f1; -} -.ui-autocomplete.card.autocomplete-dropdown .ui-menu-item:active { - background-color: #b2dfdb; -} -.ui-helper-hidden-accessible { - display: none; -} diff --git a/src/main/webapp/css/test_results.css b/src/main/webapp/css/test_results.css deleted file mode 100644 index 1e7c13b..0000000 --- a/src/main/webapp/css/test_results.css +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2017 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. -*/ -li.test-run-container.active { - border-radius: 0 0 10px 10px; -} -.collapsible-header { - user-select: none; -} -.collapsible-header.disabled { - pointer-events: none; -} -.collapsible-header.test-run { - position: relative; -} -.test-run-metadata { - font-size: 13px; - line-height: 15px; - padding-top: 10px; - padding-bottom: 10px; - position: relative; - display: inline-block; - cursor: text; - user-select: initial; -} -.suite-test-run-metadata { - font-size: 13px; - line-height: 15px; - position: relative; - display: inline-block; - cursor: text; - user-select: initial; -} -.test-results.row { - margin: 0; - border-radius: 0 0 10px 10px; -} -.test-case-container { - font-weight: 400; - padding: 10px 15px 15px; - max-height: 33%; - overflow: auto; - box-shadow: inset 0 5px 7px -5px lightgrey; -} -.row .col.test-col { - padding: 0; -} -.row .col.test-col.bordered { - border-right: 1px solid lightgray; -} -.row .col.test-col.left-most { - border-radius: 0 0 0 10px; -} -.row .col.test-col.right-most { - border-radius: 0 0 10px 0; -} -.row .col.test-col.left-most.right-most { - border-radius: 0 0 10px 10px; -} -.test-result-label { - text-transform: capitalize; - border-bottom: 1px solid lightgray; - padding: 4px 15px; - margin: 0; -} -.loaders { - position: absolute; - left:0; - right:0; - top:0; - bottom:0; - margin:auto; -} -.indicator { - color: white; - font-size: 12px; - line-height: 20px; - font-weight: bold; - padding: 1px 6px; - margin-top: 10px; - min-width: 40px; - border-radius: 10px; -} -.indicator.padded { - margin-right: 5px; -} -.test-col .indicator { - margin-top: 2px; -} -.material-icons.expand-arrow { - right: 3px; - bottom: 0px; - position: absolute; - transition: transform 0.2s; -} -.rotate { - transform: rotate(-180deg); -} -i.material-icons.inline-icon { - font-size: inherit; -} -.test-run-label { - font-size: 18px; - line-height: 35px; - font-weight: 300; -} diff --git a/src/main/webapp/js/common.js b/src/main/webapp/js/common.js deleted file mode 100644 index a815868..0000000 --- a/src/main/webapp/js/common.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Copyright (c) 2018 Google Inc. All Rights Reserved. - * - * 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. - */ - -/** - * Display the log links in a modal window. - * @param linkList A list of [name, url] tuples representing log links. - */ -function showLinks(container, linkList) { - if (!linkList || linkList.length == 0) return; - - var logCollection = $('<ul class="collection"></ul>'); - var entries = linkList.reduce(function(acc, entry) { - if (!entry || entry.length == 0) return acc; - var link = '<a href="' + entry[1] + '"'; - link += 'class="collection-item">' + entry[0] + '</li>'; - return acc + link; - }, ''); - logCollection.html(entries); - - if (container.find('#info-modal').length == 0) { - var modal = - $('<div id="info-modal" class="modal modal-fixed-footer"></div>'); - var content = $('<div class="modal-content"></div>'); - content.append('<h4>Links</h4>'); - content.append('<div class="info-container"></div>'); - content.appendTo(modal); - var footer = $('<div class="modal-footer"></div>'); - footer.append('<a class="btn-flat modal-close">Close</a></div>'); - footer.appendTo(modal); - modal.appendTo(container); - } - var infoContainer = $('#info-modal>.modal-content>.info-container'); - infoContainer.empty(); - logCollection.appendTo(infoContainer); - $('#info-modal').modal({dismissible: true}); - $('#info-modal').modal('open'); -} - -/** - * Get the nickname for a test case result. - * - * Removes the result prefix and suffix, extracting only the result name. - * - * @param testCaseResult The string name of a VtsReportMessage.TestCaseResult. - * @returns the string nickname of the result. - */ -function getNickname(testCaseResult) { - return testCaseResult.replace('TEST_CASE_RESULT_', '') - .replace('_RESULT', '') - .trim() - .toLowerCase(); -} - -/** - * Display test data in the body beneath a test run's metadata. - * @param container The jquery object in which to insert the test metadata. - * @param data The json object containing the columns to display. - * @param lineHeight The height of each list element. - */ -function displayTestDetails(container, data, lineHeight) { - var nCol = data.length; - var width = 's' + (12 / nCol); - test = container; - var maxLines = 0; - data.forEach(function(column, index) { - if (column.data == undefined || column.name == undefined) { - return; - } - var classes = 'col test-col grey lighten-5 ' + width; - if (index != nCol - 1) { - classes += ' bordered'; - } - if (index == 0) { - classes += ' left-most'; - } - if (index == nCol - 1) { - classes += ' right-most'; - } - var colContainer = $('<div class="' + classes + '"></div>'); - var col = $('<div class="test-case-container"></div>'); - colContainer.appendTo(container); - var count = column.data.length; - var head = $('<h5 class="test-result-label white"></h5>') - .text(getNickname(column.name)) - .appendTo(colContainer) - .css('text-transform', 'capitalize'); - $('<div class="indicator right center"></div>') - .text(count) - .addClass(column.name) - .appendTo(head); - col.appendTo(colContainer); - var list = $('<ul></ul>').appendTo(col); - column.data.forEach(function(testCase) { - $('<li></li>') - .text(testCase) - .addClass('test-case') - .css('font-size', lineHeight - 2) - .css('line-height', lineHeight + 'px') - .appendTo(list); - }); - if (count > maxLines) { - maxLines = count; - } - }); - var containers = container.find('.test-case-container'); - containers.height(maxLines * lineHeight); -} diff --git a/src/main/webapp/js/plan_runs.js b/src/main/webapp/js/plan_runs.js deleted file mode 100644 index 6f11083..0000000 --- a/src/main/webapp/js/plan_runs.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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. - */ - -(function ($, moment) { - - /** - * Display test plan metadata in a vertical popout. - * @param container The jquery object in which to insert the plan metadata. - * @param metadataList The list of metadata objects to render on the display. - */ - function renderCard(container, entry) { - var card = $('<a class="col s12 m6 l4"></a>'); - var link = ( - '/show_plan_run?plan=' + entry.testPlanRun.testPlanName + - '&time=' + entry.testPlanRun.startTimestamp); - card.attr('href', link); - card.appendTo(container); - var div = $('<div class="hoverable card release-entry"></div>'); - var startTime = entry.testPlanRun.startTimestamp; - var endTime = entry.testPlanRun.endTimestamp; - div.appendTo(card); - var span = $('<span></span>'); - span.addClass('plan-run-metadata'); - span.appendTo(div); - $('<b></b>').text(entry.deviceInfo).appendTo(span); - span.append('<br>'); - $('<b></b>').text('VTS Build: ').appendTo(span); - span.append(entry.testPlanRun.testBuildId).append('<br>'); - var timeString = ( - moment().renderTime(startTime, false) + ' - ' + - moment().renderTime(endTime, true) + ' (' + - moment().renderDuration(endTime - startTime) + ')'); - span.append(timeString); - var counter = $('<span></span>'); - var color = entry.testPlanRun.failCount > 0 ? 'red' : 'green'; - counter.addClass('counter center ' + color); - counter.append( - entry.testPlanRun.passCount + '/' + - (entry.testPlanRun.passCount + entry.testPlanRun.failCount)); - counter.appendTo(div); - } - - $.fn.showPlanRuns = function(data) { - var self = $(this); - data.forEach(function (entry) { - renderCard(self, entry); - }) - } - -})(jQuery, moment); diff --git a/src/main/webapp/js/search_header.js b/src/main/webapp/js/search_header.js deleted file mode 100644 index 4f108c4..0000000 --- a/src/main/webapp/js/search_header.js +++ /dev/null @@ -1,251 +0,0 @@ -/** - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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. - */ - -(function ($) { - var _inequalityRegex = '(^)(<|>|<=|>=|=)?[ ]*?[0-9]+$'; - var _inequalityHint = 'e.g. 5, >0, <=10'; - - function _validate(input, valueSet) { - var value = input.val(); - if (valueSet.has(value) || !value) { - input.removeClass('invalid'); - } else { - input.addClass('invalid'); - } - } - - function _createInput(key, config) { - var value = config.value; - var values = config.options.corpus; - var displayName = config.displayName; - var width = config.options.width || 's4'; - var div = $('<div class="input-field col"></div>'); - div.addClass(width); - var input = $('<input class="filter-input"></input>'); - input.attr('type', config.options.type || 'text'); - input.appendTo(div); - var label = $('<label></label>').text(displayName).appendTo(div); - if (value) { - input.attr('value', value); - label.addClass('active'); - } - if (config.options.validate == 'inequality') { - input.addClass('validate'); - input.attr('pattern', _inequalityRegex); - input.attr('placeholder', _inequalityHint); - label.addClass('active'); - } - input.focusout(function() { - config.value = input.val(); - }); - if (values && values.length > 0) { - var valueSet = new Set(values); - input.sizedAutocomplete({ - source: values, - classes: { - 'ui-autocomplete': 'card search-bar-menu' - } - }); - input.focusout(function() { - _validate(input, valueSet); - }); - } - if (values && values.length > 0 && value) { - _validate(input, valueSet); - } - return div; - } - - function _verifyCheckboxes(checkboxes, refreshObject) { - var oneChecked = checkboxes.presubmit || checkboxes.postsubmit; - if (!oneChecked) { - refreshObject.addClass('disabled'); - } else { - refreshObject.removeClass('disabled'); - } - } - - function _createRunTypeBoxes(checkboxes, refreshObject) { - var container = $('<div class="run-type-wrapper col s12"></div>'); - var presubmit = $('<input type="checkbox" id="presubmit"></input>'); - presubmit.appendTo(container); - if (checkboxes.presubmit) { - presubmit.prop('checked', true); - } - container.append('<label for="presubmit">Presubmit</label>'); - var postsubmit = $('<input type="checkbox" id="postsubmit"></input>'); - postsubmit.appendTo(container); - if (checkboxes.postsubmit) { - postsubmit.prop('checked', true); - } - container.append('<label for="postsubmit">Postsubmit</label>'); - presubmit.change(function() { - checkboxes.presubmit = presubmit.prop('checked'); - _verifyCheckboxes(checkboxes, refreshObject); - }); - postsubmit.change(function() { - checkboxes.postsubmit = postsubmit.prop('checked'); - _verifyCheckboxes(checkboxes, refreshObject); - }); - return container; - } - - function _expand( - container, filters, checkboxes, onRefreshCallback, animate=true) { - var wrapper = $('<div class="search-wrapper"></div>'); - var col = $('<div class="col s9"></div>'); - col.appendTo(wrapper); - Object.keys(filters).forEach(function(key) { - col.append(_createInput(key, filters[key])); - }); - var refreshCol = $('<div class="col s3 refresh-wrapper"></div>'); - var refresh = $('<a class="btn-floating btn-medium red right waves-effect waves-light"></a>') - .append($('<i class="medium material-icons">cached</i>')) - .appendTo(refreshCol); - refresh.click(onRefreshCallback); - refreshCol.appendTo(wrapper); - if (Object.keys(checkboxes).length > 0) { - col.append(_createRunTypeBoxes(checkboxes, refresh)); - } - if (animate) { - wrapper.hide().appendTo(container).slideDown({ - duration: 200, - easing: "easeOutQuart", - queue: false - }); - } else { - wrapper.appendTo(container); - } - container.addClass('expanded') - } - - function _renderHeader( - container, label, value, filters, checkboxes, expand, onRefreshCallback) { - var div = $('<div class="row card search-bar"></div>'); - var wrapper = $('<div class="header-wrapper"></div>'); - var header = $('<h5 class="section-header"></h5>'); - $('<b></b>').text(label).appendTo(header); - $('<span></span>').text(value).appendTo(header); - header.appendTo(wrapper); - var iconWrapper = $('<div class="search-icon-wrapper"></div>'); - $('<i class="material-icons">search</i>').appendTo(iconWrapper); - iconWrapper.appendTo(wrapper); - wrapper.appendTo(div); - if (expand) { - _expand(div, filters, checkboxes, onRefreshCallback, false); - } else { - var expanded = false; - iconWrapper.click(function() { - if (expanded) return; - expanded = true; - _expand(div, filters, checkboxes, onRefreshCallback); - }); - } - div.appendTo(container); - } - - function _addFilter(filters, displayName, keyName, options, defaultValue) { - filters[keyName] = {}; - filters[keyName].displayName = displayName; - filters[keyName].value = defaultValue; - filters[keyName].options = options; - } - - function _getOptionString(filters, checkboxes) { - var args = Object.keys(filters).reduce(function(acc, key) { - if (filters[key].value) { - return acc + '&' + key + '=' + encodeURIComponent(filters[key].value); - } - return acc; - }, ''); - if (checkboxes.presubmit != undefined && checkboxes.presubmit) { - args += '&showPresubmit=' - } - if (checkboxes.postsubmit != undefined && checkboxes.postsubmit) { - args += '&showPostsubmit=' - } - return args; - } - - /** - * Create a search header element. - * @param label The header label. - * @param value The value to display next to the label. - * @param onRefreshCallback The function to call on refresh. - */ - $.fn.createSearchHeader = function(label, value, onRefreshCallback) { - var self = $(this); - $.widget('custom.sizedAutocomplete', $.ui.autocomplete, { - _resizeMenu : function() { - this.menu.element.outerWidth($('.search-bar .filter-input').width()); - } - }); - var filters = {}; - var checkboxes = {}; - var expandOnRender = false; - var displayed = false; - return { - /** - * Add a filter to the display. - * @param displayName The input placeholder/label text. - * @param keyName The URL key to use for the filter options. - * @param options A dict of additional options (e.g. width, type). - * @param defaultValue A default filter value. - */ - addFilter : function(displayName, keyName, options, defaultValue) { - if (displayed) return; - _addFilter(filters, displayName, keyName, options, defaultValue); - if (defaultValue) expandOnRender = true; - }, - /** - * Enable run type checkboxes in the filter options. - * - * This will display two checkboxes for selecting pre-/postsubmit runs. - * @param showPresubmit True if presubmit runs are selected. - * @param showPostsubmit True if postsubmit runs are selected. - * - */ - addRunTypeCheckboxes: function(showPresubmit, showPostsubmit) { - if (displayed) return; - checkboxes['presubmit'] = showPresubmit; - checkboxes['postsubmit'] = showPostsubmit; - if (!showPostsubmit || showPresubmit) { - expandOnRender = true; - } - }, - /** - * Display the created search bar. - * - * This must be called after filters have been added. After displaying, no - * modifications to the filter options will take effect. - */ - display : function() { - displayed = true; - _renderHeader( - self, label, value, filters, checkboxes, expandOnRender, - onRefreshCallback); - }, - /** - * Get the URL arguments string for the current set of filters. - * @returns a URI-encoded component with the search bar keys and values. - */ - args : function () { - return _getOptionString(filters, checkboxes); - } - } - } - -})(jQuery); diff --git a/src/main/webapp/js/test_acknowledgments.js b/src/main/webapp/js/test_acknowledgments.js deleted file mode 100644 index 810d9d6..0000000 --- a/src/main/webapp/js/test_acknowledgments.js +++ /dev/null @@ -1,439 +0,0 @@ -/** - * Copyright (c) 2017 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. - */ - -(function($) { - - var _isModalOpen = false; - var _isReadOnly = true; - var _allTestsSet = new Set(); - var _allBranches = []; - var _allDevices = []; - - var _writableSummary = 'Known test failures are acknowledged below for specific branch and \ - device configurations, and corresponding test breakage alerts will be silenced. Click an \ - entry to edit or see more information about the test failure.' - var _readOnlySummary = 'Known test failures are acknowledged below for specific branch and \ - device configurations, and corresponding test breakage alerts will be silenced. Click an \ - entry to see more information about the test failure. To add, edit, or remove a test \ - acknowledgment, contact a VTS Dashboard administrator.' - - $.widget('custom.sizedAutocomplete', $.ui.autocomplete, { - options: { - parent: '' - }, - _resizeMenu: function() { - this.menu.element.outerWidth($(this.options.parent).width()); - } - }); - - /** - * Remove an acknowledgment from the list. - * @param ack (jQuery object) The object for acknowledgment. - * @param key (String) The value to display next to the label. - */ - function removeAcknowledgment(ack, key) { - if (ack.hasClass('disabled')) { - return; - } - ack.addClass('disabled'); - $.ajax({ - url: '/api/test_acknowledgments/' + key, - type: 'DELETE' - }).always(function() { - ack.removeClass('disabled'); - }).then(function() { - ack.slideUp(150, function() { - ack.remove(); - }); - }); - } - - /** - * Callback for when a chip is removed from a chiplist. - * @param text (String) The value stored in the chip. - * @param allChipsSet (Set) The set of all chip values. - * @param allIndicator (jQuery object) The object for "All" indicator adjacent to the chips. - */ - function chipRemoveCallback(text, allChipsSet, allIndicator) { - allChipsSet.delete(text); - if (allChipsSet.size == 0) { - allIndicator.show(); - } - } - - /** - * Add chips to the chip UI. - * @param allChipsSet (Set) The set of all chip values. - * @param container (jQuery object) The object in which to insert the chips. - * @param chipList (list) The list of chip values to insert. - * @param allIndicator (jQuery object) The object for "All" indicator adjacent to the chips. - */ - function addChips(allChipsSet, container, chipList, allIndicator) { - if (chipList && chipList.length > 0) { - chipList.forEach(function(text) { - if (allChipsSet.has(text)) return; - var chip = $('<span class="chip">' + text + '</span>'); - if (!_isReadOnly) { - var icon = $('<i class="material-icons">clear</i>').appendTo(chip); - icon.click(function() { - chipRemoveCallback(text, allChipsSet, allIndicator); - }); - } - chip.appendTo(container); - allChipsSet.add(text); - }); - allIndicator.hide(); - } - } - - /** - * Create a chip input UI. - * @param container (jQuery object) The object in which to insert the input box. - * @param placeholder (String) The placeholder text to display in the input. - * @param allChipsSet (Set) The set of all chip values. - * @param chipContainer (jQuery object) The object in which to insert new chips from the input. - * @param allIndicator (jQuery object) The object for "All" indicator adjacent to the chips. - * @returns The chip input jQuery object. - */ - function addChipInput(container, placeholder, allChipsSet, chipContainer, allIndicator) { - var input = $('<input type="text"></input>'); - input.attr('placeholder', placeholder); - input.keyup(function(e) { - if (e.keyCode === 13 && input.val().trim()) { - addChips(allChipsSet, chipContainer, [input.val()], allIndicator); - input.val(''); - } - }); - var addButton = $('<i class="material-icons add-button">add</i>'); - addButton.click(function() { - if (input.val().trim()) { - addChips(allChipsSet, chipContainer, [input.val()], allIndicator); - input.val(''); - addButton.hide(); - } - }); - addButton.hide(); - input.focus(function() { - addButton.show(); - }); - input.focusout(function() { - if (!input.val().trim()) { - addButton.hide(); - } - }); - var holder = $('<div class="col s12 input-container"></div>').appendTo(container); - input.appendTo(holder); - addButton.appendTo(holder); - return input; - } - - /** - * Callback to save changes to the acknowledgment. - * @param ack (jQuery object) The object for acknowledgment. - * @param modal (jQuery object) The jQueryUI modal object which invoked the callback. - * @param key (String) The key associated with the acknowledgment. - * @param test (String) The test name in the acknowledgment. - * @param branchSet (Set) The set of all branches in the acknowledgment. - * @param deviceSet (Set) The set of all devoces in the acknowledgment. - * @param testCaseSet (Set) The set of all test cases in the acknowledgment. - * @param note (String) The note in the acknowledgment. - */ - function saveCallback(ack, modal, key, test, branchSet, deviceSet, testCaseSet, note) { - var allEmpty = true; - var firstUnemptyInput = null; - var vals = modal.find('.modal-section>.input-container>input').each(function(_, input) { - if (!!$(input).val()) { - allEmpty = false; - if (!firstUnemptyInput) firstUnemptyInput = $(input); - } - }); - if (!allEmpty) { - firstUnemptyInput.focus(); - return false; - } - var branches = Array.from(branchSet); - branches.sort(); - var devices = Array.from(deviceSet); - devices.sort(); - var testCaseNames = Array.from(testCaseSet); - testCaseNames.sort(); - var data = { - 'key' : key, - 'testName' : test, - 'branches' : branches, - 'devices' : devices, - 'testCaseNames' : testCaseNames, - 'note': note - }; - $.post('/api/test_acknowledgments', JSON.stringify(data)).done(function(newKey) { - var newAck = createAcknowledgment(newKey, test, branches, devices, testCaseNames, note); - if (key == null) { - ack.replaceWith(newAck.hide()); - newAck.slideDown(150); - } else { - ack.replaceWith(newAck); - } - }).always(function() { - modal.modal({ - complete: function() { _isModalOpen = false; } - }); - modal.modal('close'); - }); - } - - /** - * Callback to save changes to the acknowledgment. - * @param ack (jQuery object) The object for the acknowledgment. - * @param key (String) The key associated with the acknowledgment. - * @param test (String) The test name in the acknowledgment. - * @param branches (list) The list of all branches in the acknowledgment. - * @param devices (Set) The list of all devoces in the acknowledgment. - * @param testCases (Set) The list of all test cases in the acknowledgment. - * @param note (String) The note in the acknowledgment. - */ - function showModal(ack, key, test, branches, devices, testCases, note) { - if (_isModalOpen) { - return; - } - _isModalOpen = true; - var wrapper = $('#modal'); - wrapper.empty(); - wrapper.modal(); - var content = $('<div class="modal-content"><h4>Test Acknowledgment</h4></div>'); - var row = $('<div class="row"></div>').appendTo(content); - row.append('<div class="col s12"><h5><b>Test: </b>' + test + '</h5></div>'); - - var branchSet = new Set(); - var branchContainer = $('<div class="col l4 s12 modal-section"></div>').appendTo(row); - var branchHeader = $('<h5></h5>').appendTo(branchContainer); - branchHeader.append('<b>Branches:</b>'); - var allBranchesLabel = $('<span> All</span>').appendTo(branchHeader); - var branchChips = $('<div class="col s12 chips branch-chips"></div>').appendTo(branchContainer); - addChips(branchSet, branchChips, branches, allBranchesLabel); - if (!_isReadOnly) { - var branchInput = addChipInput( - branchContainer, 'Specify a branch...', branchSet, branchChips, allBranchesLabel); - branchInput.sizedAutocomplete({ - source: _allBranches, - classes: { - 'ui-autocomplete': 'card autocomplete-dropdown' - }, - parent: branchInput - }); - } - - var deviceSet = new Set(); - var deviceContainer = $('<div class="col l4 s12 modal-section"></div>').appendTo(row); - var deviceHeader = $('<h5></h5>').appendTo(deviceContainer); - deviceHeader.append('<b>Devices:</b>'); - var allDevicesLabel = $('<span> All</span>').appendTo(deviceHeader); - var deviceChips = $('<div class="col s12 chips device-chips"></div>').appendTo(deviceContainer); - addChips(deviceSet, deviceChips, devices, allDevicesLabel); - if (!_isReadOnly) { - var deviceInput = addChipInput( - deviceContainer, 'Specify a device...', deviceSet, deviceChips, allDevicesLabel); - deviceInput.sizedAutocomplete({ - source: _allDevices, - classes: { - 'ui-autocomplete': 'card autocomplete-dropdown' - }, - parent: deviceInput - }); - } - - var testCaseSet = new Set(); - var testCaseContainer = $('<div class="col l4 s12 modal-section"></div>').appendTo(row); - var testCaseHeader = $('<h5></h5>').appendTo(testCaseContainer); - testCaseHeader.append('<b>Test Cases:</b>'); - var allTestCasesLabel = $('<span> All</span>').appendTo(testCaseHeader); - var testCaseChips = $('<div class="col s12 chips test-case-chips"></div>').appendTo( - testCaseContainer); - addChips(testCaseSet, testCaseChips, testCases, allTestCasesLabel); - var testCaseInput = null; - if (!_isReadOnly) { - testCaseInput = addChipInput( - testCaseContainer, 'Specify a test case...', testCaseSet, testCaseChips, allTestCasesLabel); - } - - row.append('<div class="col s12"><h5><b>Note:</b></h5></div>'); - var inputField = $('<div class="input-field col s12"></div>').appendTo(row); - var textArea = $('<textarea placeholder="Type a note..."></textarea>'); - textArea.addClass('materialize-textarea note-field'); - textArea.appendTo(inputField); - textArea.val(note); - if (_isReadOnly) { - textArea.attr('disabled', true); - } - - content.appendTo(wrapper); - var footer = $('<div class="modal-footer"></div>'); - if (!_isReadOnly) { - var save = $('<a class="btn">Save</a></div>').appendTo(footer); - save.click(function() { - saveCallback(ack, wrapper, key, test, branchSet, deviceSet, testCaseSet, textArea.val()); - }); - } - var close = $('<a class="btn-flat">Close</a></div>').appendTo(footer); - close.click(function() { - wrapper.modal({ - complete: function() { _isModalOpen = false; } - }); - wrapper.modal('close'); - }) - footer.appendTo(wrapper); - if (!_isReadOnly) { - $.get('/api/test_run?test=' + test + '×tamp=latest').done(function(data) { - var allTestCases = data.reduce(function(array, column) { - return array.concat(column.data); - }, []); - testCaseInput.sizedAutocomplete({ - source: allTestCases, - classes: { - 'ui-autocomplete': 'card autocomplete-dropdown' - }, - parent: testCaseInput - }); - }).always(function() { - wrapper.modal('open'); - }); - } else { - wrapper.modal('open'); - } - } - - /** - * Create a test acknowledgment object. - * @param key (String) The key associated with the acknowledgment. - * @param test (String) The test name in the acknowledgment. - * @param branches (list) The list of all branches in the acknowledgment. - * @param devices (Set) The list of all devoces in the acknowledgment. - * @param testCases (Set) The list of all test cases in the acknowledgment. - * @param note (String) The note in the acknowledgment. - */ - function createAcknowledgment(key, test, branches, devices, testCases, note) { - var wrapper = $('<div class="col s12 ack-entry"></div>'); - var details = $('<div class="col card hoverable"></div>').appendTo(wrapper); - details.addClass(_isReadOnly ? 's12' : 's11') - var testDiv = $('<div class="col s12"><b>' + test + '</b></div>').appendTo(details); - var infoBtn = $('<span class="info-icon right"></a>').appendTo(testDiv); - infoBtn.append('<i class="material-icons">info_outline</i>'); - details.click(function() { - showModal(wrapper, key, test, branches, devices, testCases, note); - }); - var branchesSummary = 'All'; - if (!!branches && branches.length == 1) { - branchesSummary = branches[0]; - } else if (!!branches && branches.length > 1) { - branchesSummary = branches[0]; - branchesSummary += '<span class="count-indicator"> (+' + (branches.length - 1) + ')</span>'; - } - $('<div class="col l4 s12"><b>Branches: </b>' + branchesSummary + '</div>').appendTo(details); - var devicesSummary = 'All'; - if (!!devices && devices.length == 1) { - devicesSummary = devices[0]; - } else if (!!devices && devices.length > 1) { - devicesSummary = devices[0]; - devicesSummary += '<span class="count-indicator"> (+' + (devices.length - 1) + ')</span>'; - } - $('<div class="col l4 s12"><b>Devices: </b>' + devicesSummary + '</div>').appendTo(details); - var testCaseSummary = 'All'; - if (!!testCases && testCases.length == 1) { - testCaseSummary = testCases[0]; - } else if (!!testCases && testCases.length > 1) { - testCaseSummary = testCases[0]; - testCaseSummary += '<span class="count-indicator"> (+' + (testCases.length - 1) + ')</span>'; - } - details.append('<div class="col l4 s12"><b>Test Cases: </b>' + testCaseSummary + '</div>'); - - if (!_isReadOnly) { - var btnContainer = $('<div class="col s1 center btn-container"></div>'); - - var clear = $('<a class="col s12 btn-flat remove-button"></a>'); - clear.append('<i class="material-icons">clear</i>'); - clear.attr('title', 'Remove'); - clear.click(function() { removeAcknowledgment(wrapper, key); }); - clear.appendTo(btnContainer); - - btnContainer.appendTo(wrapper); - } - return wrapper; - } - - /** - * Create a test acknowledgments UI. - * @param allTests (list) The list of all test names. - * @param allBranches (list) The list of all branches. - * @param allDevices (list) The list of all device names. - * @param testAcknowledgments (list) JSON-serialized TestAcknowledgmentEntity object list. - * @param readOnly (boolean) True if the acknowledgments are read-only, false if mutable. - */ - $.fn.testAcknowledgments = function( - allTests, allBranches, allDevices, testAcknowledgments, readOnly) { - var self = $(this); - _allTestsSet = new Set(allTests); - _allBranches = allBranches; - _allDevices = allDevices; - _isReadOnly = readOnly; - var searchRow = $('<div class="search-row"></div>'); - var headerRow = $('<div></div>'); - var acks = $('<div class="acknowledgments"></div>'); - - if (!_isReadOnly) { - var inputWrapper = $('<div class="input-field col s8"></div>'); - var input = $('<input type="text"></input>').appendTo(inputWrapper); - inputWrapper.append('<label>Search for tests to add an acknowledgment</label>'); - inputWrapper.appendTo(searchRow); - input.sizedAutocomplete({ - source: allTests, - classes: { - 'ui-autocomplete': 'card autocomplete-dropdown' - }, - parent: input - }); - - var btnWrapper = $('<div class="col s1"></div>'); - var btn = $('<a class="btn waves-effect waves-light red btn-floating"></a>'); - btn.append('<i class="material-icons">add</a>'); - btn.appendTo(btnWrapper); - btnWrapper.appendTo(searchRow); - btn.click(function() { - if (!_allTestsSet.has(input.val())) return; - var ack = createAcknowledgment(undefined, input.val()); - ack.hide().prependTo(acks); - showModal(ack, undefined, input.val()); - }); - searchRow.appendTo(self); - } - - var headerCol = $('<div class="col s12 section-header-col"></div>').appendTo(headerRow); - if (_isReadOnly) { - headerCol.append('<p class="acknowledgment-info">' + _readOnlySummary + '</p>'); - } else { - headerCol.append('<p class="acknowledgment-info">' + _writableSummary + '</p>'); - } - headerRow.appendTo(self); - - testAcknowledgments.forEach(function(ack) { - var wrapper = createAcknowledgment( - ack.key, ack.testName, ack.branches, ack.devices, ack.testCaseNames, ack.note); - wrapper.appendTo(acks); - }); - acks.appendTo(self); - - self.append('<div class="modal modal-fixed-footer acknowledgments-modal" id="modal"></div>'); - }; - -})(jQuery); diff --git a/src/main/webapp/js/test_results.js b/src/main/webapp/js/test_results.js deleted file mode 100644 index 24d4c0b..0000000 --- a/src/main/webapp/js/test_results.js +++ /dev/null @@ -1,349 +0,0 @@ -/** - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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. - */ - -(function($, moment) { - -/** - * Display the log links in a modal window. - * @param linkList A list of [name, url] tuples representing log links. - */ -function showLinks(container, linkList) { - if (!linkList || linkList.length == 0) return; - - var logCollection = $('<ul class="collection"></ul>'); - var entries = linkList.reduce(function(acc, entry) { - if (!entry || entry.length == 0) return acc; - var link = '<a href="' + entry[1] + '"'; - link += 'class="collection-item">' + entry[0] + '</li>'; - return acc + link; - }, ''); - logCollection.html(entries); - - if (container.find('#info-modal').length == 0) { - var modal = - $('<div id="info-modal" class="modal modal-fixed-footer"></div>'); - var content = $('<div class="modal-content"></div>'); - content.append('<h4>Links</h4>'); - content.append('<div class="info-container"></div>'); - content.appendTo(modal); - var footer = $('<div class="modal-footer"></div>'); - footer.append('<a class="btn-flat modal-close">Close</a></div>'); - footer.appendTo(modal); - modal.appendTo(container); - } - var infoContainer = $('#info-modal>.modal-content>.info-container'); - infoContainer.empty(); - logCollection.appendTo(infoContainer); - $('#info-modal').modal({dismissible: true}); - $('#info-modal').modal('open'); -} - -/** - * Get the nickname for a test case result. - * - * Removes the result prefix and suffix, extracting only the result name. - * - * @param testCaseResult The string name of a VtsReportMessage.TestCaseResult. - * @returns the string nickname of the result. - */ -function getNickname(testCaseResult) { - return testCaseResult.replace('TEST_CASE_RESULT_', '') - .replace('_RESULT', '') - .trim() - .toLowerCase(); -} - -/** - * Get the badge color from ratio value. - * - * @param the percentage value. - * @returns the string of color for the badge. - */ -function getBadgeColor(ratio) { - var color = "orange"; - if (ratio <= 20) { - color = "red"; - } else if (ratio >= 70) { - color = "green"; - } - return color; -} - -/** - * Get the rounded value. - * - * @param the percentage value. - * @returns the rounded value from percentage value. - */ -function getRoundValue(ratio) { - return Math.round(ratio * 1000) / 10; -} - -/** - * Display test data in the body beneath a test run's metadata. - * @param container The jquery object in which to insert the test metadata. - * @param data The json object containing the columns to display. - * @param lineHeight The height of each list element. - */ -function displayTestDetails(container, data, lineHeight) { - var nCol = data.length; - var width = 's' + (12 / nCol); - test = container; - var maxLines = 0; - data.forEach(function(column, index) { - if (column.data == undefined || column.name == undefined) { - return; - } - var classes = 'col test-col grey lighten-5 ' + width; - if (index != nCol - 1) { - classes += ' bordered'; - } - if (index == 0) { - classes += ' left-most'; - } - if (index == nCol - 1) { - classes += ' right-most'; - } - var colContainer = $('<div class="' + classes + '"></div>'); - var col = $('<div class="test-case-container"></div>'); - colContainer.appendTo(container); - var count = column.data.length; - var head = $('<h5 class="test-result-label white"></h5>') - .text(getNickname(column.name)) - .appendTo(colContainer) - .css('text-transform', 'capitalize'); - $('<div class="indicator right center"></div>') - .text(count) - .addClass(column.name) - .appendTo(head); - col.appendTo(colContainer); - var list = $('<ul></ul>').appendTo(col); - column.data.forEach(function(testCase) { - $('<li></li>') - .text(testCase) - .addClass('test-case') - .css('font-size', lineHeight - 2) - .css('line-height', lineHeight + 'px') - .appendTo(list); - }); - if (count > maxLines) { - maxLines = count; - } - }); - var containers = container.find('.test-case-container'); - containers.height(maxLines * lineHeight); -} - -/** - * Click handler for displaying test run details. - * @param e The click event. - */ -function testRunClick(e) { - var header = $(this); - var icon = header.find('.material-icons.expand-arrow'); - var container = header.parent().find('.test-results'); - var test = header.attr('test'); - var time = header.attr('time'); - var url = '/api/test_run?test=' + test + '×tamp=' + time; - if (header.parent().hasClass('active')) { - header.parent().removeClass('active'); - header.removeClass('active'); - icon.removeClass('rotate'); - header.siblings('.collapsible-body').stop(true, false).slideUp({ - duration: 100, - easing: 'easeOutQuart', - queue: false, - complete: function() { - header.css('height', ''); - } - }); - } else { - container.empty(); - header.parent().addClass('active'); - header.addClass('active'); - header.addClass('disabled'); - icon.addClass('rotate'); - $.get(url) - .done(function(data) { - displayTestDetails(container, data, 16); - header.siblings('.collapsible-body').stop(true, false).slideDown({ - duration: 100, - easing: 'easeOutQuart', - queue: false, - complete: function() { - header.css('height', ''); - } - }); - }) - .fail(function() { - icon.removeClass('rotate'); - }) - .always(function() { - header.removeClass('disabled'); - }); - } -} - -/** - * Append a clickable indicator link to the container. - * @param container The jquery object to append the indicator to. - * @param content The text to display in the indicator. - * @param classes Additional space-delimited classes to add to the indicator. - * @param click The click handler to assign to the indicator. - * @returns The jquery object for the indicator. - */ -function createClickableIndicator(container, content, classes, click) { - var link = $('<span></span>'); - link.addClass('indicator badge padded hoverable waves-effect'); - link.addClass(classes); - link.css('color', 'white'); - link.css('margin-left', '1px'); - link.append(content); - link.appendTo(container); - link.click(click); - return link; -} - -function displayTestMetadata(container, metadataList, showTestNames = false) { - var popout = $('<ul></ul>'); - popout.attr('data-collapsible', 'expandable'); - popout.addClass('collapsible popout test-runs'); - popout.appendTo(container); - popout.unbind(); - metadataList.forEach(function(metadata) { - var li = $('<li class="test-run-container"></li>'); - li.appendTo(popout); - var div = $('<div></div>'); - var test = metadata.testRun.testName; - var startTime = metadata.testRun.startTimestamp; - var endTime = metadata.testRun.endTimestamp; - div.attr('test', test); - div.attr('time', startTime); - div.addClass('collapsible-header test-run'); - div.appendTo(li); - div.unbind().click(testRunClick); - var span = $('<span></span>'); - span.addClass('test-run-metadata'); - span.appendTo(div); - span.click(function() { - return false; - }); - if (showTestNames) { - $('<span class="test-run-label"></span>').text(test).appendTo(span); - span.append('<br>'); - } - if (metadata.deviceInfo) { - $('<b></b>').text(metadata.deviceInfo).appendTo(span); - span.append('<br>'); - } - if (metadata.abiInfo) { - $('<b></b>').text('ABI: ').appendTo(span) - span.append(metadata.abiInfo).append('<br>'); - } - $('<b></b>').text('VTS Build: ').appendTo(span) - span.append(metadata.testRun.testBuildId).append('<br>'); - $('<b></b>').text('Host: ').appendTo(span) - span.append(metadata.testRun.hostName).append('<br>'); - var timeString = - (moment().renderTime(startTime, false) + ' - ' + - moment().renderTime(endTime, true) + ' (' + - moment().renderDuration(endTime - startTime) + ')'); - span.append(timeString); - var indicator = $('<span></span>'); - var color = metadata.testRun.failCount > 0 ? 'red' : 'green'; - indicator.addClass('indicator badge ' + color); - indicator.css('color', 'white'); - indicator.append( - metadata.testRun.passCount + '/' + - (metadata.testRun.passCount + metadata.testRun.failCount)); - indicator.appendTo(div); - if (metadata.testRun.coveredLineCount != undefined && - metadata.testRun.totalLineCount != undefined) { - var url = ('/show_coverage?testName=' + test + '&startTime=' + startTime); - var covered = metadata.testRun.coveredLineCount; - var total = metadata.testRun.totalLineCount; - var covPct = getRoundValue(covered / total); - var color = getBadgeColor(covPct); - var coverage = - ('Coverage: ' + covered + '/' + total + ' (' + covPct + '%)'); - createClickableIndicator(div, coverage, color, function(evt) { - window.location.href = url; - return false; - }); - } - if (metadata.testRun.coveredApiCount != undefined && - metadata.testRun.totalApiCount != undefined) { - var covered = metadata.testRun.coveredApiCount; - var total = metadata.testRun.totalApiCount; - var covPct = getRoundValue(covered / total); - var color = getBadgeColor(covPct); - var apiCoverage = ('API Coverage: ' + covered + '/' + total + ' (' + covPct + '%)'); - createClickableIndicator(div, apiCoverage, color, function(evt) { - $('#apiCoverageModal') - .data('urlSafeKeyList', metadata.testRun.apiCoverageKeyList); - $('#apiCoverageModal').modal('open'); - return false; - }); - } - if (metadata.testRun.logLinks != undefined) { - createClickableIndicator(div, 'Links', 'grey lighten-1', function() { - showLinks(popout, metadata.testRun.logLinks); - return false; - }); - } - if ($('#coverageModalGraph').length) { - createClickableIndicator(div, 'Graph', 'grey lighten-1', function(evt) { - $('#coverageModalGraph').data('testname', test); - $('#coverageModalGraph').modal('open'); - $(evt.target).removeClass('grey'); - $(evt.target).addClass('blue'); - return false; - }); - } - - var expand = $('<i></i>'); - expand.addClass('material-icons expand-arrow') - expand.text('expand_more'); - expand.appendTo(div); - var body = $('<div></div>') - .addClass('collapsible-body test-results row') - .appendTo(li); - if (metadata.testDetails != undefined) { - expand.addClass('rotate'); - li.addClass('active'); - div.addClass('active'); - displayTestDetails(body, metadata.testDetails, 16); - div.siblings('.collapsible-body').stop(true, false).slideDown({ - duration: 0, - queue: false, - complete: function() { - div.css('height', ''); - } - }); - } - }); -} - -/** - * Display test metadata in a vertical popout. - * @param container The jquery object in which to insert the test metadata. - * @param metadataList The list of metadata objects to render on the display. - * @param showTestNames True to label each entry with the test module name. - */ -$.fn.showTests = function(metadataList, showTestNames = false) { - displayTestMetadata($(this), metadataList, showTestNames); -} -})(jQuery, moment); diff --git a/src/main/webapp/js/time.js b/src/main/webapp/js/time.js deleted file mode 100644 index 6178eda..0000000 --- a/src/main/webapp/js/time.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * 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. - */ - -(function (moment) { - - /** - * Renders a timestamp in the user timezone. - * @param timestamp The long timestamp to render (in microseconds). - * @param showTimezone True if the timezone should be rendered, false otherwise. - * @returns the string-formatted version of the provided timestamp. - */ - moment.prototype.renderTime = function (timestamp, showTimezone) { - var time = moment(timestamp / 1000); - var format = 'YYYY-M-DD H:mm:ss'; - if (!!showTimezone) { - format = format + 'ZZ'; - } - return time.format(format); - } - - /** - * Renders a date in the user timezone. - * @param timestamp The long timestamp to render (in microseconds). - * @param showTimezone True if the timezone should be rendered, false otherwise. - * @returns the string-formatted version of the provided timestamp. - */ - moment.prototype.renderDate = function (timestamp, showTimezone) { - var time = moment(timestamp / 1000); - var format = 'YYYY-M-DD'; - if (!!showTimezone) { - format = format + 'ZZ'; - } - return time.format(format); - } - - /** - * Renders a duration in the user timezone. - * @param durationTimestamp The long duration to render (in microseconds). - * @returns the string-formatted duration of the provided duration timestamp. - */ - moment.prototype.renderDuration = function (durationTimestamp) { - var fmt = 's[s]'; - var duration = moment.utc(durationTimestamp / 1000); - if (duration.hours() > 0) { - fmt = 'H[h], m[m], ' + fmt; - } else if (duration.minutes() > 0) { - fmt = 'm[m], ' + fmt; - } - return duration.format(fmt); - } - -})(moment); diff --git a/src/test/java/com/android/vts/api/CoverageRestServletTest.java b/src/test/java/com/android/vts/api/CoverageRestServletTest.java deleted file mode 100644 index f900f79..0000000 --- a/src/test/java/com/android/vts/api/CoverageRestServletTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * 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.api; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; -import static com.googlecode.objectify.ObjectifyService.factory; - -import com.android.vts.entity.ApiCoverageEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.util.ObjectifyTestBase; -import com.google.gson.Gson; -import com.google.gson.internal.LinkedTreeMap; -import com.googlecode.objectify.Key; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; - -import java.util.Arrays; -import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.BeforeEach; -import org.mockito.Mock; - -public class CoverageRestServletTest extends ObjectifyTestBase { - - private Gson gson; - - @Mock - private HttpServletRequest request; - - @Mock - private HttpServletResponse response; - - /** It be executed before each @Test method */ - @BeforeEach - void setUpExtra() { - gson = new Gson(); - - /******** - System.getenv().forEach((k,v) -> { - System.out.println("key => " + k); - System.out.println("value => " + v); - }); - *********/ - } - - @Test - public void testApiData() throws IOException, ServletException { - - factory().register(ApiCoverageEntity.class); - - List<String> halApi = Arrays.asList("allocate", "dumpDebugInfo"); - List<String> coveredHalApi = Arrays.asList("allocate", "dumpDebugInfo"); - - Key testParentKey = Key.create(TestEntity.class, "test1"); - Key testRunParentKey = Key.create(testParentKey, TestRunEntity.class, 1); - ApiCoverageEntity apiCoverageEntity = - new ApiCoverageEntity( - testRunParentKey, - "android.hardware.graphics.allocator", - 4, - 1, - "IAllocator", - halApi, - coveredHalApi); - apiCoverageEntity.save(); - - String key = apiCoverageEntity.getUrlSafeKey(); - - when(request.getPathInfo()).thenReturn("/api/data"); - - when(request.getParameter("key")).thenReturn(key); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - when(response.getWriter()).thenReturn(pw); - - CoverageRestServlet coverageRestServlet = new CoverageRestServlet(); - coverageRestServlet.doGet(request, response); - String result = sw.getBuffer().toString().trim(); - - LinkedTreeMap resultMap = gson.fromJson(result, LinkedTreeMap.class); - - assertEquals(resultMap.get("halInterfaceName"), "IAllocator"); - assertEquals(resultMap.get("halPackageName"), "android.hardware.graphics.allocator"); - assertEquals(resultMap.get("halApi"), Arrays.asList("allocate", "dumpDebugInfo")); - assertEquals(resultMap.get("coveredHalApi"), Arrays.asList("allocate", "dumpDebugInfo")); - - } - -} diff --git a/src/test/java/com/android/vts/api/DataRestServletTest.java b/src/test/java/com/android/vts/api/DataRestServletTest.java deleted file mode 100644 index b01c761..0000000 --- a/src/test/java/com/android/vts/api/DataRestServletTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * 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.api; - -import com.android.vts.entity.BranchEntity; -import com.android.vts.entity.BuildTargetEntity; -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.util.ObjectifyTestBase; -import com.google.gson.Gson; -import com.googlecode.objectify.Key; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Spy; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.LinkedList; - -import static com.googlecode.objectify.ObjectifyService.factory; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -public class DataRestServletTest extends ObjectifyTestBase { - - private Gson gson; - - @Spy private DataRestServlet servlet; - - @Mock private HttpServletRequest request; - - @Mock private HttpServletResponse response; - - /** It be executed before each @Test method */ - @BeforeEach - void setUpExtra() { - gson = new Gson(); - - factory().register(TestEntity.class); - factory().register(TestRunEntity.class); - factory().register(BranchEntity.class); - factory().register(BuildTargetEntity.class); - factory().register(DeviceInfoEntity.class); - - BranchEntity branchEntity1 = new BranchEntity("master"); - branchEntity1.save(); - BranchEntity branchEntity2 = new BranchEntity("pi"); - branchEntity2.save(); - - BuildTargetEntity buildTargetEntity1 = new BuildTargetEntity("aosp_arm64_ab-userdebug"); - buildTargetEntity1.save(); - BuildTargetEntity buildTargetEntity2 = new BuildTargetEntity("sailfish-userdebug"); - buildTargetEntity2.save(); - - Key testParentKey = Key.create(TestEntity.class, "test1"); - Key testRunParentKey = Key.create(testParentKey, TestRunEntity.class, 1); - DeviceInfoEntity deviceInfoEntity1 = - new DeviceInfoEntity( - testRunParentKey, - "pi", - "sailfish", - "sailfish-userdebug", - "4585723", - "64", - "arm64-v8a"); - deviceInfoEntity1.setId(2384723984L); - deviceInfoEntity1.save(); - - DeviceInfoEntity deviceInfoEntity2 = - new DeviceInfoEntity( - testRunParentKey, - "master", - "walleye", - "aosp_arm64_ab-userdebug", - "4585723", - "64", - "arm64-v8a"); - deviceInfoEntity2.setId(2384723422L); - deviceInfoEntity2.save(); - } - - @Test - public void testBranchData() throws IOException, ServletException { - - when(request.getPathInfo()).thenReturn("/branch"); - when(request.getParameter("schKey")).thenReturn("*"); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - when(response.getWriter()).thenReturn(pw); - - servlet.doGet(request, response); - String result = sw.getBuffer().toString().trim(); - - LinkedList resultList = gson.fromJson(result, LinkedList.class); - - assertEquals(resultList.size(), 2); - assertEquals(resultList.get(0), "master"); - assertEquals(resultList.get(1), "pi"); - } - - @Test - public void testDeviceData() throws IOException, ServletException { - - when(request.getPathInfo()).thenReturn("/device"); - when(request.getParameter("schKey")).thenReturn("*"); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - - when(response.getWriter()).thenReturn(pw); - - servlet.doGet(request, response); - String result = sw.getBuffer().toString().trim(); - - LinkedList resultList = gson.fromJson(result, LinkedList.class); - - assertEquals(resultList.size(), 2); - assertEquals(resultList.get(0), "aosp_arm64_ab-userdebug"); - assertEquals(resultList.get(1), "sailfish-userdebug"); - } -} diff --git a/src/test/java/com/android/vts/api/VtsSpreadSheetSyncServletTest.java b/src/test/java/com/android/vts/api/VtsSpreadSheetSyncServletTest.java deleted file mode 100644 index 661ea9e..0000000 --- a/src/test/java/com/android/vts/api/VtsSpreadSheetSyncServletTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * 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.api; - -import com.android.vts.entity.ApiCoverageExcludedEntity; -import com.android.vts.job.VtsSpreadSheetSyncServlet; -import com.android.vts.util.ObjectifyTestBase; -import com.google.api.client.extensions.appengine.datastore.AppEngineDataStoreFactory; -import com.google.api.services.sheets.v4.SheetsScopes; -import com.google.gson.Gson; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Spy; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collections; -import java.util.List; -import java.util.Properties; - -import static com.googlecode.objectify.ObjectifyService.factory; -import static com.googlecode.objectify.ObjectifyService.ofy; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@Slf4j -public class VtsSpreadSheetSyncServletTest extends ObjectifyTestBase { - - private Gson gson; - - @Spy private VtsSpreadSheetSyncServlet servlet; - - @Mock private HttpServletRequest request; - - @Mock private HttpServletResponse response; - - @Mock private ServletContext context; - - @Mock private ServletConfig servletConfig; - - @Mock private ServletOutputStream outputStream; - - private final AppEngineDataStoreFactory DATA_STORE_FACTORY = new AppEngineDataStoreFactory(); - - private final List<String> GOOGLE_API_SCOPES = - Collections.singletonList(SheetsScopes.SPREADSHEETS_READONLY); - - /** It be executed before each @Test method */ - @BeforeEach - void setUpExtra() { - - factory().register(ApiCoverageExcludedEntity.class); - - gson = new Gson(); - - Properties systemConfigProp = new Properties(); - - InputStream defaultInputStream = - VtsSpreadSheetSyncServletTest.class - .getClassLoader() - .getResourceAsStream("config.properties"); - - try { - systemConfigProp.load(defaultInputStream); - } catch (FileNotFoundException e) { - log.error(e.getMessage()); - } catch (IOException e) { - log.error(e.getMessage()); - } - - when(request.getServletContext()).thenReturn(context); - when(request.getServletContext().getAttribute("dataStoreFactory")) - .thenReturn(DATA_STORE_FACTORY); - when(request.getServletContext().getAttribute("googleApiScopes")) - .thenReturn(GOOGLE_API_SCOPES); - - when(servletConfig.getServletContext()).thenReturn(context); - when(servletConfig.getServletContext().getAttribute("systemConfigProp")) - .thenReturn(systemConfigProp); - - } - - @Test - public void testSyncServletJob() throws IOException, ServletException { - - when(request.getPathInfo()).thenReturn("/cron/vts_spreadsheet_sync_job"); - - when(servlet.getServletConfig()).thenReturn(servletConfig); - when(response.getOutputStream()).thenReturn(outputStream); - - servlet.init(servletConfig); - servlet.doGet(request, response); - String result = outputStream.toString().trim(); - - List<ApiCoverageExcludedEntity> apiCoverageExcludedEntityList = - ofy().load().type(ApiCoverageExcludedEntity.class).list(); - - assertEquals(apiCoverageExcludedEntityList.size(), 2); - assertEquals(apiCoverageExcludedEntityList.get(0).getApiName(), "getMasterMuteTest"); - assertEquals( - apiCoverageExcludedEntityList.get(0).getPackageName(), - "android.hardware.audio.test"); - assertEquals(apiCoverageExcludedEntityList.get(1).getApiName(), "getMasterVolumeTest"); - assertEquals( - apiCoverageExcludedEntityList.get(1).getPackageName(), - "android.hardware.video.test"); - } -} diff --git a/src/test/java/com/android/vts/entity/ApiCoverageExcludedEntityTest.java b/src/test/java/com/android/vts/entity/ApiCoverageExcludedEntityTest.java deleted file mode 100644 index 40d3af9..0000000 --- a/src/test/java/com/android/vts/entity/ApiCoverageExcludedEntityTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.android.vts.util.ObjectifyTestBase; -import com.googlecode.objectify.Key; -import org.junit.jupiter.api.Test; - -import static com.googlecode.objectify.ObjectifyService.factory; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class ApiCoverageExcludedEntityTest extends ObjectifyTestBase { - - @Test - public void saveTest() { - factory().register(ApiCoverageExcludedEntity.class); - - String packageName = "android.hardware.audio"; - String apiName = "createTestPatch"; - String version = "2.1"; - ApiCoverageExcludedEntity apiCoverageExcludedEntity = - new ApiCoverageExcludedEntity( - packageName, version, "IDevice", apiName, "not testable"); - apiCoverageExcludedEntity.save(); - - assertEquals(apiCoverageExcludedEntity.getPackageName(), packageName); - assertEquals(apiCoverageExcludedEntity.getApiName(), apiName); - assertEquals(apiCoverageExcludedEntity.getMajorVersion(), 2); - assertEquals(apiCoverageExcludedEntity.getMinorVersion(), 1); - } - - @Test - public void getUrlSafeKeyTest() { - factory().register(CodeCoverageEntity.class); - factory().register(ApiCoverageExcludedEntity.class); - - Key testParentKey = Key.create(TestEntity.class, "test1"); - Key testRunParentKey = Key.create(testParentKey, TestRunEntity.class, 1); - - CodeCoverageEntity codeCoverageEntity = - new CodeCoverageEntity(testRunParentKey, 1000, 3500); - codeCoverageEntity.save(); - - String urlKey = - "kind%3A+%22Test%22%0A++name%3A+%22test1%22%0A%7D%0Apath+%7B%0A++kind%3A+%22TestRun%22%0A++id%3A+1%0A%7D%0Apath+%7B%0A++kind%3A+%22CodeCoverage%22%0A++id%3A+1%0A%7D%0A"; - assertTrue(codeCoverageEntity.getUrlSafeKey().endsWith(urlKey)); - } -} diff --git a/src/test/java/com/android/vts/entity/CodeCoverageEntityTest.java b/src/test/java/com/android/vts/entity/CodeCoverageEntityTest.java deleted file mode 100644 index 06cad28..0000000 --- a/src/test/java/com/android/vts/entity/CodeCoverageEntityTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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.android.vts.util.ObjectifyTestBase; -import com.googlecode.objectify.Key; -import org.junit.jupiter.api.Test; - - -import static com.googlecode.objectify.ObjectifyService.factory; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class CodeCoverageEntityTest extends ObjectifyTestBase { - - @Test - public void saveTest() { - factory().register(CodeCoverageEntity.class); - - Key testParentKey = Key.create(TestEntity.class, "test1"); - Key testRunParentKey = Key.create(testParentKey, TestRunEntity.class, 1); - - CodeCoverageEntity codeCoverageEntity = new CodeCoverageEntity(testRunParentKey, 1000, 3500); - codeCoverageEntity.save(); - - assertEquals(codeCoverageEntity.getCoveredLineCount(), 1000); - assertEquals(codeCoverageEntity.getTotalLineCount(), 3500); - } - - @Test - public void getUrlSafeKeyTest() { - factory().register(CodeCoverageEntity.class); - - Key testParentKey = Key.create(TestEntity.class, "test1"); - Key testRunParentKey = Key.create(testParentKey, TestRunEntity.class, 1); - - CodeCoverageEntity codeCoverageEntity = new CodeCoverageEntity(testRunParentKey, 1000, 3500); - codeCoverageEntity.save(); - - String urlKey = - "kind%3A+%22Test%22%0A++name%3A+%22test1%22%0A%7D%0Apath+%7B%0A++kind%3A+%22TestRun%22%0A++id%3A+1%0A%7D%0Apath+%7B%0A++kind%3A+%22CodeCoverage%22%0A++id%3A+1%0A%7D%0A"; - assertTrue(codeCoverageEntity.getUrlSafeKey().endsWith(urlKey)); - } - -} diff --git a/src/test/java/com/android/vts/entity/CodeCoverageFileEntityTest.java b/src/test/java/com/android/vts/entity/CodeCoverageFileEntityTest.java deleted file mode 100644 index 5c944b2..0000000 --- a/src/test/java/com/android/vts/entity/CodeCoverageFileEntityTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.android.vts.util.ObjectifyTestBase; -import com.googlecode.objectify.Key; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; - -import static com.googlecode.objectify.ObjectifyService.factory; -import static com.googlecode.objectify.ObjectifyService.ofy; -import static org.junit.Assert.assertEquals; - -public class CodeCoverageFileEntityTest extends ObjectifyTestBase { - - @Test - public void saveTest() { - - factory().register(CodeCoverageFileEntity.class); - - Key testParentKey = Key.create(TestEntity.class, "test1"); - Key testRunParentKey = Key.create(testParentKey, TestRunEntity.class, 1); - - List<Long> lineCoverage = Arrays.asList(-1L, -1L, -1L, 4L, 2L, 0L); - CodeCoverageFileEntity codeCoverageFileEntity = new CodeCoverageFileEntity( - 10000, - testRunParentKey, - "audio/12.0/DevicesFile.h", - "", - lineCoverage, - 10020, - 40030, - "platform/hardware/interfaces", - "e8d6e9385a64b742ad1952c6d9"); - codeCoverageFileEntity.save(); - - CodeCoverageFileEntity loadCodeCoverageFileEntity = ofy().load().type(CodeCoverageFileEntity.class).first().now(); - - assertEquals(loadCodeCoverageFileEntity, codeCoverageFileEntity); - } - -} diff --git a/src/test/java/com/android/vts/entity/TestAcknowledgmentEntityTest.java b/src/test/java/com/android/vts/entity/TestAcknowledgmentEntityTest.java deleted file mode 100644 index 8ed68b6..0000000 --- a/src/test/java/com/android/vts/entity/TestAcknowledgmentEntityTest.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2017 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.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Text; -import com.google.appengine.api.users.User; -import com.google.appengine.api.users.UserServiceFactory; -import com.google.appengine.tools.development.testing.LocalServiceTestHelper; -import com.google.appengine.tools.development.testing.LocalUserServiceTestConfig; -import com.google.gson.JsonObject; -import java.util.ArrayList; -import java.util.List; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -public class TestAcknowledgmentEntityTest { - private final LocalServiceTestHelper helper = - new LocalServiceTestHelper(new LocalUserServiceTestConfig()) - .setEnvIsAdmin(true) - .setEnvIsLoggedIn(true) - .setEnvEmail("testemail@domain.com") - .setEnvAuthDomain("test"); - - @Before - public void setUp() { - helper.setUp(); - } - - @After - public void tearDown() { - helper.tearDown(); - } - - /** Test serialization to/from Entity objects. */ - @Test - public void testEntitySerialization() { - Key key = KeyFactory.createKey(TestEntity.KIND, "test"); - User user = UserServiceFactory.getUserService().getCurrentUser(); - List<String> branches = new ArrayList<>(); - branches.add("branch1"); - List<String> devices = new ArrayList<>(); - devices.add("device1"); - List<String> testCaseNames = new ArrayList<>(); - testCaseNames.add("testCase1"); - Text note = new Text("note"); - TestAcknowledgmentEntity ack = - new TestAcknowledgmentEntity(key, user, branches, devices, testCaseNames, note); - Entity e = ack.toEntity(); - - Assert.assertNotNull(e); - Assert.assertEquals(key, e.getProperty(TestAcknowledgmentEntity.TEST_KEY)); - Assert.assertEquals(user, e.getProperty(TestAcknowledgmentEntity.USER_OBJ)); - Assert.assertTrue( - ((List<String>) e.getProperty(TestAcknowledgmentEntity.BRANCHES)) - .containsAll(branches)); - Assert.assertTrue( - ((List<String>) e.getProperty(TestAcknowledgmentEntity.DEVICES)) - .containsAll(devices)); - Assert.assertTrue( - ((List<String>) e.getProperty(TestAcknowledgmentEntity.TEST_CASE_NAMES)) - .containsAll(testCaseNames)); - Assert.assertEquals(note, e.getProperty(TestAcknowledgmentEntity.NOTE)); - - TestAcknowledgmentEntity deserialized = TestAcknowledgmentEntity.fromEntity(e); - Assert.assertNotNull(deserialized); - Assert.assertEquals(key, deserialized.test); - Assert.assertEquals(user, deserialized.getUserObj()); - Assert.assertTrue(deserialized.getBranches().containsAll(branches)); - Assert.assertTrue(deserialized.getDevices().containsAll(devices)); - Assert.assertTrue(deserialized.getTestCaseNames().containsAll(testCaseNames)); - Assert.assertEquals(note.getValue(), deserialized.getNote()); - } - - /** Test serialization to/from Entity objects when optional parameters are null. */ - @Test - public void testEntitySerializationWithNulls() { - Key key = KeyFactory.createKey(TestEntity.KIND, "test"); - User user = UserServiceFactory.getUserService().getCurrentUser(); - TestAcknowledgmentEntity ack = - new TestAcknowledgmentEntity(key, user, null, null, null, null); - Entity e = ack.toEntity(); - - Assert.assertNotNull(e); - Assert.assertEquals(key, e.getProperty(TestAcknowledgmentEntity.TEST_KEY)); - Assert.assertEquals(user, e.getProperty(TestAcknowledgmentEntity.USER_OBJ)); - Assert.assertFalse(e.hasProperty(TestAcknowledgmentEntity.BRANCHES)); - Assert.assertFalse(e.hasProperty(TestAcknowledgmentEntity.DEVICES)); - Assert.assertFalse(e.hasProperty(TestAcknowledgmentEntity.TEST_CASE_NAMES)); - Assert.assertFalse(e.hasProperty(TestAcknowledgmentEntity.NOTE)); - - TestAcknowledgmentEntity deserialized = TestAcknowledgmentEntity.fromEntity(e); - Assert.assertNotNull(deserialized); - Assert.assertEquals(key, deserialized.test); - Assert.assertEquals(user, deserialized.getUserObj()); - Assert.assertEquals(0, deserialized.getBranches().size()); - Assert.assertEquals(0, deserialized.getDevices().size()); - Assert.assertEquals(0, deserialized.getTestCaseNames().size()); - Assert.assertNull(deserialized.getNote()); - } - - /** Test serialization to/from Json objects. */ - @Test - public void testJsonSerialization() { - Key key = KeyFactory.createKey(TestEntity.KIND, "test"); - User user = UserServiceFactory.getUserService().getCurrentUser(); - List<String> branches = new ArrayList<>(); - branches.add("branch1"); - List<String> devices = new ArrayList<>(); - devices.add("device1"); - List<String> testCaseNames = new ArrayList<>(); - testCaseNames.add("testCase1"); - Text note = new Text("note"); - TestAcknowledgmentEntity ack = - new TestAcknowledgmentEntity(key, user, branches, devices, testCaseNames, note); - Entity e = new Entity(KeyFactory.createKey(TestAcknowledgmentEntity.KIND, "fakekey")); - e.setPropertiesFrom(ack.toEntity()); - JsonObject json = TestAcknowledgmentEntity.fromEntity(e).toJson(); - - TestAcknowledgmentEntity deserialized = TestAcknowledgmentEntity.fromJson(user, json); - Assert.assertNotNull(deserialized); - Assert.assertEquals(key, deserialized.test); - Assert.assertEquals(user, deserialized.getUserObj()); - Assert.assertTrue(deserialized.getBranches().containsAll(branches)); - Assert.assertTrue(deserialized.getDevices().containsAll(devices)); - Assert.assertTrue(deserialized.getTestCaseNames().containsAll(testCaseNames)); - Assert.assertEquals(note.getValue(), deserialized.getNote()); - } - - /** Test serialization to/from Json objects when optional properties are null. */ - @Test - public void testJsonSerializationWithNulls() { - Key key = KeyFactory.createKey(TestEntity.KIND, "test"); - User user = UserServiceFactory.getUserService().getCurrentUser(); - TestAcknowledgmentEntity ack = - new TestAcknowledgmentEntity(key, user, null, null, null, null); - Entity e = new Entity(KeyFactory.createKey(TestAcknowledgmentEntity.KIND, "fakekey")); - e.setPropertiesFrom(ack.toEntity()); - JsonObject json = TestAcknowledgmentEntity.fromEntity(e).toJson(); - - TestAcknowledgmentEntity deserialized = TestAcknowledgmentEntity.fromJson(user, json); - Assert.assertNotNull(deserialized); - Assert.assertEquals(key, deserialized.test); - Assert.assertEquals(user, deserialized.getUserObj()); - Assert.assertEquals(0, deserialized.getBranches().size()); - Assert.assertEquals(0, deserialized.getDevices().size()); - Assert.assertEquals(0, deserialized.getTestCaseNames().size()); - Assert.assertEquals("", deserialized.getNote()); - } -} diff --git a/src/test/java/com/android/vts/entity/TestCaseRunEntityTest.java b/src/test/java/com/android/vts/entity/TestCaseRunEntityTest.java deleted file mode 100644 index d4abd38..0000000 --- a/src/test/java/com/android/vts/entity/TestCaseRunEntityTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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.android.vts.util.ObjectifyTestBase; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; - -import static com.googlecode.objectify.ObjectifyService.factory; -import static org.junit.Assert.assertEquals; - -public class TestCaseRunEntityTest extends ObjectifyTestBase { - - @Test - public void saveTest() { - - factory().register(TestCaseRunEntity.class); - - List<Integer> results = Arrays.asList(1, 1, 1, 1, 1, 1, 1); - List<String> testCaseNames = - Arrays.asList( - "AudioEffectsFactoryTest.EnumerateEffects(default)_32bit", - "AudioEffectsFactoryTest.CreateEffect(default)_32bit", - "AudioEffectsFactoryTest.GetDescriptor(default)_32bit", - "AudioEffectsFactoryTest.DebugDumpArgument(default)_32bit", - "AudioEffectTest.Close(default)_32bit", - "AudioEffectTest.GetDescriptor(default)_32bit", - "AudioEffectTest.GetSetConfig(default)_32bit"); - - TestCaseRunEntity testCaseRunEntity = new TestCaseRunEntity(); - for (int index = 0; index < results.size(); index++) { - String testCaseName = testCaseNames.get(index); - int result = results.get(index); - testCaseRunEntity.addTestCase(testCaseName, result); - } - TestCaseRunEntity loadedTestCaseRunEntity = saveClearLoad(testCaseRunEntity); - - assertEquals(loadedTestCaseRunEntity.getTestCases().size(), results.size()); - assertEquals( - (Integer) loadedTestCaseRunEntity.getTestCases().get(0).result, results.get(0)); - assertEquals(loadedTestCaseRunEntity.getTestCases().get(0).name, testCaseNames.get(0)); - } -} diff --git a/src/test/java/com/android/vts/job/VtsAlertJobServletTest.java b/src/test/java/com/android/vts/job/VtsAlertJobServletTest.java deleted file mode 100644 index 9c24c65..0000000 --- a/src/test/java/com/android/vts/job/VtsAlertJobServletTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2017 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.job; - -import static com.googlecode.objectify.ObjectifyService.factory; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestAcknowledgmentEntity; -import com.android.vts.util.ObjectifyTestBase; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.users.User; -import com.google.appengine.api.users.UserServiceFactory; -import com.google.appengine.tools.development.testing.LocalServiceTestHelper; -import com.google.appengine.tools.development.testing.LocalUserServiceTestConfig; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.BeforeEach; - -public class VtsAlertJobServletTest extends ObjectifyTestBase { - private final LocalServiceTestHelper userHelper = - new LocalServiceTestHelper(new LocalUserServiceTestConfig()) - .setEnvIsAdmin(true) - .setEnvIsLoggedIn(true) - .setEnvEmail("testemail@domain.com") - .setEnvAuthDomain("test"); - - User user; - private Key testKey; - private Set<String> allTestCases; - private List<DeviceInfoEntity> allDevices; - - @BeforeEach - void setUpExtra() { - factory().register(DeviceInfoEntity.class); - factory().register(TestAcknowledgmentEntity.class); - - userHelper.setUp(); - user = UserServiceFactory.getUserService().getCurrentUser(); - - testKey = KeyFactory.createKey(TestAcknowledgmentEntity.KIND, "test"); - - allTestCases = new HashSet<>(); - allTestCases.add("testCase1"); - allTestCases.add("testCase2"); - allTestCases.add("testCase3"); - - allDevices = new ArrayList<>(); - DeviceInfoEntity device1 = - new DeviceInfoEntity( - testKey, "branch1", "product1", "flavor1", "1234", "32", "abi"); - DeviceInfoEntity device2 = - new DeviceInfoEntity( - testKey, "branch2", "product2", "flavor2", "1235", "32", "abi"); - allDevices.add(device1); - allDevices.add(device2); - } - - @AfterEach - public void tearDown() { - userHelper.tearDown(); - } - - /** Test that acknowledge-all works correctly. */ - @Test - public void testSeparateAcknowledgedAll() { - - Set<String> testCases = new HashSet<>(allTestCases); - List<TestAcknowledgmentEntity> acks = new ArrayList<>(); - TestAcknowledgmentEntity ack = - new TestAcknowledgmentEntity(testKey, user, null, null, null, null); - acks.add(ack); - - Set<String> acknowledged = - VtsAlertJobServlet.separateAcknowledged(testCases, allDevices, acks); - assertEquals(allTestCases.size(), acknowledged.size()); - assertTrue(acknowledged.containsAll(allTestCases)); - assertEquals(0, testCases.size()); - } - - /** Test that specific branch/device/test case acknowledgement works correctly. */ - @Test - public void testSeparateAcknowledgedSpecific() { - - Set<String> testCases = new HashSet<>(allTestCases); - List<TestAcknowledgmentEntity> acks = new ArrayList<>(); - List<String> branches = new ArrayList<>(); - branches.add("branch1"); - - List<String> devices = new ArrayList<>(); - devices.add("flavor2"); - - List<String> testCaseNames = new ArrayList<>(); - testCaseNames.add("testCase1"); - - TestAcknowledgmentEntity ack = - new TestAcknowledgmentEntity( - testKey, user, branches, devices, testCaseNames, null); - acks.add(ack); - - Set<String> acknowledged = - VtsAlertJobServlet.separateAcknowledged(testCases, allDevices, acks); - assertEquals(0, acknowledged.size()); - assertEquals(allTestCases.size(), testCases.size()); - } - - /** Test that specific branch/device/test case acknowledgement skips device mismatches. */ - @Test - public void testSeparateAcknowledgedSpecificMismatch() { - - Set<String> testCases = new HashSet<>(allTestCases); - List<TestAcknowledgmentEntity> acks = new ArrayList<>(); - List<String> branches = new ArrayList<>(); - branches.add("branch1"); - - List<String> devices = new ArrayList<>(); - devices.add("flavor1"); - - List<String> testCaseNames = new ArrayList<>(); - testCaseNames.add("testCase1"); - - TestAcknowledgmentEntity ack = - new TestAcknowledgmentEntity( - testKey, user, branches, devices, testCaseNames, null); - acks.add(ack); - - Set<String> acknowledged = - VtsAlertJobServlet.separateAcknowledged(testCases, allDevices, acks); - assertEquals(1, acknowledged.size()); - assertTrue(acknowledged.contains("testCase1")); - assertTrue(!testCases.contains("testCase1")); - } -} diff --git a/src/test/java/com/android/vts/job/VtsPerformanceJobServletTest.java b/src/test/java/com/android/vts/job/VtsPerformanceJobServletTest.java deleted file mode 100644 index 814ab3a..0000000 --- a/src/test/java/com/android/vts/job/VtsPerformanceJobServletTest.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.job; - -import static org.junit.Assert.assertEquals; - -import com.android.vts.entity.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; -import com.android.vts.util.ObjectifyTestBase; -import com.android.vts.util.PerformanceSummary; -import com.android.vts.util.ProfilingPointSummary; -import com.android.vts.util.StatSummary; -import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; -import com.google.appengine.tools.development.testing.LocalServiceTestHelper; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; - -public class VtsPerformanceJobServletTest extends ObjectifyTestBase { - private final LocalServiceTestHelper helper = - new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()); - - private static final String LABEL = "testLabel"; - private static final String ROOT = "src/test/resources/servlet"; - private static final String[] LABELS = new String[] {"label1", "label2", "label3"}; - private static final long[] HIGH_VALS = new long[] {10, 20, 30}; - private static final long[] LOW_VALS = new long[] {1, 2, 3}; - - List<PerformanceSummary> dailySummaries; - List<String> legendLabels; - - /** - * Helper method for creating ProfilingPointSummaryEntity objects. - * - * @param labels The list of data labels. - * @param values The list of data values. Must be equal in size to the labels list. - * @param regressionMode The regression mode. - * @return A ProfilingPointSummaryEntity with specified data. - */ - private static ProfilingPointSummaryEntity createProfilingReport( - String[] labels, long[] values, VtsProfilingRegressionMode regressionMode) { - List<String> labelList = Arrays.asList(labels); - StatSummary globalStats = new StatSummary("global", regressionMode); - Map<String, StatSummary> labelStats = new HashMap<>(); - for (int i = 0; i < labels.length; ++i) { - StatSummary stat = new StatSummary(labels[i], regressionMode); - stat.updateStats(values[i]); - labelStats.put(labels[i], stat); - globalStats.updateStats(values[i]); - } - return new ProfilingPointSummaryEntity( - ProfilingPointEntity.createKey("test", "pp"), - globalStats, - labelList, - labelStats, - "branch", - "build", - null, - 0); - } - - /** Asserts whether text is the same as the contents in the baseline file specified. */ - private static void compareToBaseline(String text, String baselineFilename) - throws FileNotFoundException, IOException { - File f = new File(ROOT, baselineFilename); - String baseline = ""; - try (BufferedReader br = new BufferedReader(new FileReader(f))) { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - - while (line != null) { - sb.append(line); - line = br.readLine(); - } - baseline = sb.toString(); - } - assertEquals(baseline, text); - } - - @BeforeEach - public void setUp() { - helper.setUp(); - } - - @AfterEach - public void tearDown() { - helper.tearDown(); - } - - public void setUp(boolean grouped) { - dailySummaries = new ArrayList<>(); - legendLabels = new ArrayList<>(); - legendLabels.add(""); - - // Add today's data - PerformanceSummary today = new PerformanceSummary(0, 1); - VtsProfilingRegressionMode mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - ProfilingPointSummary summary = new ProfilingPointSummary("", "", mode); - ProfilingPointSummaryEntity pt = createProfilingReport(LABELS, HIGH_VALS, mode); - if (grouped) { - summary.updateLabel(pt, LABEL); - summary.updateLabel(pt, LABEL); - } else { - summary.update(pt); - summary.update(pt); - } - today.insertProfilingPointSummary("p1", summary); - - mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_DECREASING; - summary = new ProfilingPointSummary("", "", mode); - pt = createProfilingReport(LABELS, LOW_VALS, mode); - if (grouped) { - summary.updateLabel(pt, LABEL); - summary.updateLabel(pt, LABEL); - } else { - summary.update(pt); - summary.update(pt); - } - today.insertProfilingPointSummary("p2", summary); - dailySummaries.add(today); - legendLabels.add("today"); - - // Add yesterday data with regressions - PerformanceSummary yesterday = new PerformanceSummary(0, 1); - mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - summary = new ProfilingPointSummary("", "", mode); - pt = createProfilingReport(LABELS, LOW_VALS, mode); - if (grouped) { - summary.updateLabel(pt, LABEL); - summary.updateLabel(pt, LABEL); - } else { - summary.update(pt); - summary.update(pt); - } - yesterday.insertProfilingPointSummary("p1", summary); - - mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_DECREASING; - summary = new ProfilingPointSummary("x", "y", mode); - pt = createProfilingReport(LABELS, HIGH_VALS, mode); - if (grouped) { - summary.updateLabel(pt, LABEL); - summary.updateLabel(pt, LABEL); - } else { - summary.update(pt); - summary.update(pt); - } - yesterday.insertProfilingPointSummary("p2", summary); - dailySummaries.add(yesterday); - legendLabels.add("yesterday"); - - // Add last week data without regressions - PerformanceSummary lastWeek = new PerformanceSummary(0, 1); - mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - summary = new ProfilingPointSummary("", "", mode); - pt = createProfilingReport(LABELS, HIGH_VALS, mode); - summary.update(pt); - summary.update(pt); - lastWeek.insertProfilingPointSummary("p1", summary); - - mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_DECREASING; - summary = new ProfilingPointSummary("", "", mode); - pt = createProfilingReport(LABELS, LOW_VALS, mode); - summary.update(pt); - summary.update(pt); - lastWeek.insertProfilingPointSummary("p2", summary); - dailySummaries.add(lastWeek); - legendLabels.add("last week"); - } - - /** - * End-to-end test of performance report in the normal case. The normal case is when a profiling - * point is added or removed from the test. - */ - @Test - public void testPerformanceSummaryNormal() throws FileNotFoundException, IOException { - setUp(false); - String output = - VtsPerformanceJobServlet.getPerformanceSummary( - "test", dailySummaries, legendLabels); - compareToBaseline(output, "performanceSummary1.html"); - } - - /** - * End-to-end test of performance report when a profiling point was removed in the latest run. - */ - @Test - public void testPerformanceSummaryDroppedProfilingPoint() - throws FileNotFoundException, IOException { - setUp(false); - PerformanceSummary yesterday = dailySummaries.get(dailySummaries.size() - 1); - VtsProfilingRegressionMode mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - ProfilingPointSummary summary = new ProfilingPointSummary("x", "y", mode); - ProfilingPointSummaryEntity pt = createProfilingReport(LABELS, HIGH_VALS, mode); - summary.update(pt); - summary.update(pt); - yesterday.insertProfilingPointSummary("p3", summary); - String output = - VtsPerformanceJobServlet.getPerformanceSummary( - "test", dailySummaries, legendLabels); - compareToBaseline(output, "performanceSummary2.html"); - } - - /** End-to-end test of performance report when a profiling point was added in the latest run. */ - @Test - public void testPerformanceSummaryAddedProfilingPoint() - throws FileNotFoundException, IOException { - setUp(false); - PerformanceSummary today = dailySummaries.get(0); - VtsProfilingRegressionMode mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - ProfilingPointSummary summary = new ProfilingPointSummary("", "", mode); - ProfilingPointSummaryEntity pt = createProfilingReport(LABELS, HIGH_VALS, mode); - summary.update(pt); - summary.update(pt); - today.insertProfilingPointSummary("p3", summary); - String output = - VtsPerformanceJobServlet.getPerformanceSummary( - "test", dailySummaries, legendLabels); - compareToBaseline(output, "performanceSummary3.html"); - } - - /** - * End-to-end test of performance report labels are grouped (e.g. as if using unlabeled data) - */ - @Test - public void testPerformanceSummaryGroupedNormal() throws FileNotFoundException, IOException { - setUp(true); - String output = - VtsPerformanceJobServlet.getPerformanceSummary( - "test", dailySummaries, legendLabels); - compareToBaseline(output, "performanceSummary4.html"); - } -} diff --git a/src/test/java/com/android/vts/job/VtsProfilingStatsJobServletTest.java b/src/test/java/com/android/vts/job/VtsProfilingStatsJobServletTest.java deleted file mode 100644 index 36637a3..0000000 --- a/src/test/java/com/android/vts/job/VtsProfilingStatsJobServletTest.java +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright (C) 2017 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.job; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointRunEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.entity.TestEntity; -import com.android.vts.entity.TestRunEntity; -import com.android.vts.proto.VtsReportMessage; -import com.android.vts.util.ObjectifyTestBase; -import com.android.vts.util.StatSummary; -import com.android.vts.util.TimeUtil; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.EntityNotFoundException; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.taskqueue.dev.LocalTaskQueue; -import com.google.appengine.api.taskqueue.dev.QueueStateInfo; -import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; -import com.google.appengine.tools.development.testing.LocalServiceTestHelper; -import com.google.appengine.tools.development.testing.LocalTaskQueueTestConfig; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.Month; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import org.apache.commons.math3.stat.descriptive.moment.Mean; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; - -public class VtsProfilingStatsJobServletTest extends ObjectifyTestBase { - private final LocalServiceTestHelper helper = - new LocalServiceTestHelper( - new LocalDatastoreServiceTestConfig(), - new LocalTaskQueueTestConfig() - .setQueueXmlPath("src/main/webapp/WEB-INF/queue.xml")); - private static final double THRESHOLD = 1e-10; - - @BeforeEach - public void setUp() { - helper.setUp(); - } - - @AfterEach - public void tearDown() { - helper.tearDown(); - } - - private static void createProfilingRun() { - Date d = new Date(); - long time = TimeUnit.MILLISECONDS.toMicros(d.getTime()); - long canonicalTime = VtsProfilingStatsJobServlet.getCanonicalTime(time); - String test = "test"; - String profilingPointName = "profilingPoint"; - String xLabel = "xLabel"; - String yLabel = "yLabel"; - VtsReportMessage.VtsProfilingType type = - VtsReportMessage.VtsProfilingType.VTS_PROFILING_TYPE_UNLABELED_VECTOR; - VtsReportMessage.VtsProfilingRegressionMode mode = - VtsReportMessage.VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - - Key testKey = KeyFactory.createKey(TestEntity.KIND, test); - Key testRunKey = KeyFactory.createKey(testKey, TestRunEntity.KIND, time); - Long[] valueArray = new Long[] {1l, 2l, 3l, 4l, 5l}; - StatSummary stats = - new StatSummary( - "expected", - VtsReportMessage.VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE); - for (long value : valueArray) { - stats.updateStats(value); - } - Mean mean = new Mean(); - List<Long> values = Arrays.asList(valueArray); - ProfilingPointRunEntity profilingPointRunEntity = - new ProfilingPointRunEntity( - testRunKey, - profilingPointName, - type.getNumber(), - mode.getNumber(), - null, - values, - xLabel, - yLabel, - null); - - String branch = "master"; - String product = "product"; - String flavor = "flavor"; - String id = "12345"; - String bitness = "64"; - String abiName = "abi"; - DeviceInfoEntity device = - new DeviceInfoEntity(testRunKey, branch, product, flavor, id, bitness, abiName); - } - - /** - * Test that tasks are correctly scheduled on the queue. - * - * @throws InterruptedException - */ - @Test - public void testTasksScheduled() throws InterruptedException { - String[] testNames = new String[] {"test1", "test2", "test3"}; - List<Key> testKeys = new ArrayList(); - Set<Key> testKeySet = new HashSet<>(); - String kind = "TEST"; - for (String testName : testNames) { - Key key = KeyFactory.createKey(kind, testName); - testKeys.add(key); - testKeySet.add(key); - } - VtsProfilingStatsJobServlet.addTasks(testKeys); - Thread.sleep(1000); // wait one second (tasks are scheduled asychronously), must wait. - LocalTaskQueue taskQueue = LocalTaskQueueTestConfig.getLocalTaskQueue(); - QueueStateInfo qsi = taskQueue.getQueueStateInfo().get(VtsProfilingStatsJobServlet.QUEUE); - assertNotNull(qsi); - assertEquals(testNames.length, qsi.getTaskInfo().size()); - - int i = 0; - for (QueueStateInfo.TaskStateInfo taskStateInfo : qsi.getTaskInfo()) { - assertEquals( - VtsProfilingStatsJobServlet.PROFILING_STATS_JOB_URL, taskStateInfo.getUrl()); - assertEquals("POST", taskStateInfo.getMethod()); - String body = taskStateInfo.getBody(); - String[] parts = body.split("="); - assertEquals(2, parts.length); - assertEquals(VtsProfilingStatsJobServlet.PROFILING_POINT_KEY, parts[0]); - String keyString = parts[1]; - Key profilingPointRunKey; - try { - profilingPointRunKey = KeyFactory.stringToKey(keyString); - } catch (IllegalArgumentException e) { - fail(); - return; - } - assertTrue(testKeys.contains(profilingPointRunKey)); - } - } - - /** Test that canonical time is correctly derived from a timestamp in the middle of the day. */ - @Test - public void testCanonicalTimeMidday() { - int year = 2017; - Month month = Month.MAY; - int day = 28; - int hour = 14; - int minute = 30; - LocalDateTime now = LocalDateTime.of(year, month.getValue(), day, hour, minute); - ZonedDateTime zdt = ZonedDateTime.of(now, TimeUtil.PT_ZONE); - long time = TimeUnit.SECONDS.toMicros(zdt.toEpochSecond()); - long canonicalTime = VtsProfilingStatsJobServlet.getCanonicalTime(time); - long canonicalTimeSec = TimeUnit.MICROSECONDS.toSeconds(canonicalTime); - ZonedDateTime canonical = - ZonedDateTime.ofInstant(Instant.ofEpochSecond(canonicalTimeSec), TimeUtil.PT_ZONE); - assertEquals(month, canonical.getMonth()); - assertEquals(day, canonical.getDayOfMonth()); - assertEquals(0, canonical.getHour()); - assertEquals(0, canonical.getMinute()); - } - - /** Test that canonical time is correctly derived at the boundary of two days (midnight). */ - @Test - public void testCanonicalTimeMidnight() { - int year = 2017; - Month month = Month.MAY; - int day = 28; - int hour = 0; - int minute = 0; - LocalDateTime now = LocalDateTime.of(year, month.getValue(), day, hour, minute); - ZonedDateTime zdt = ZonedDateTime.of(now, TimeUtil.PT_ZONE); - long time = TimeUnit.SECONDS.toMicros(zdt.toEpochSecond()); - long canonicalTime = VtsProfilingStatsJobServlet.getCanonicalTime(time); - long canonicalTimeSec = TimeUnit.MICROSECONDS.toSeconds(canonicalTime); - ZonedDateTime canonical = - ZonedDateTime.ofInstant(Instant.ofEpochSecond(canonicalTimeSec), TimeUtil.PT_ZONE); - assertEquals(zdt, canonical); - } - - /** Test that new summaries are created with a clean database. */ - @Test - public void testNewSummary() { - Date d = new Date(); - long time = TimeUnit.MILLISECONDS.toMicros(d.getTime()); - String test = "test"; - - Key testKey = KeyFactory.createKey(TestEntity.KIND, test); - Key testRunKey = KeyFactory.createKey(testKey, TestRunEntity.KIND, time); - Long[] valueArray = new Long[] {1l, 2l, 3l, 4l, 5l}; - StatSummary expected = - new StatSummary( - "expected", - VtsReportMessage.VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE); - for (long value : valueArray) { - expected.updateStats(value); - } - Mean mean = new Mean(); - List<Long> values = Arrays.asList(valueArray); - ProfilingPointRunEntity profilingPointRunEntity = - new ProfilingPointRunEntity( - testRunKey, - "profilingPoint", - VtsReportMessage.VtsProfilingType.VTS_PROFILING_TYPE_UNLABELED_VECTOR_VALUE, - VtsReportMessage.VtsProfilingRegressionMode - .VTS_REGRESSION_MODE_INCREASING_VALUE, - null, - values, - "xLabel", - "yLabel", - null); - - DeviceInfoEntity device = - new DeviceInfoEntity( - testRunKey, "master", "product", "flavor", "12345", "64", "abi"); - - List<DeviceInfoEntity> devices = new ArrayList<>(); - devices.add(device); - - boolean result = - VtsProfilingStatsJobServlet.updateSummaries( - testKey, profilingPointRunEntity, devices, time); - assertTrue(result); - - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - // Check profiling point entity - Key profilingPointKey = ProfilingPointEntity.createKey(test, profilingPointRunEntity.getName()); - ProfilingPointEntity profilingPointEntity = null; - try { - Entity profilingPoint = datastore.get(profilingPointKey); - profilingPointEntity = ProfilingPointEntity.fromEntity(profilingPoint); - } catch (EntityNotFoundException exception) { - fail(); - } - assertNotNull(profilingPointEntity); - assertEquals(profilingPointRunEntity.getName(), profilingPointEntity.getProfilingPointName()); - assertEquals(profilingPointRunEntity.getXLabel(), profilingPointEntity.getXLabel()); - assertEquals(profilingPointRunEntity.getYLabel(), profilingPointEntity.getYLabel()); - assertEquals(profilingPointRunEntity.getType(), profilingPointEntity.getType()); - assertEquals(profilingPointRunEntity.getRegressionMode(), profilingPointEntity.getRegressionMode()); - - // Check all summary entities - Query q = new Query(ProfilingPointSummaryEntity.KIND).setAncestor(profilingPointKey); - for (Entity e : datastore.prepare(q).asIterable()) { - ProfilingPointSummaryEntity pps = ProfilingPointSummaryEntity.fromEntity(e); - assertNotNull(pps); - assertTrue( - pps.getBranch().equals(device.getBranch()) - || pps.getBranch().equals(ProfilingPointSummaryEntity.ALL)); - assertTrue( - pps.getBuildFlavor().equals(ProfilingPointSummaryEntity.ALL) - || pps.getBuildFlavor().equals(device.getBuildFlavor())); - assertEquals(expected.getCount(), pps.getGlobalStats().getCount()); - assertEquals(expected.getMax(), pps.getGlobalStats().getMax(), THRESHOLD); - assertEquals(expected.getMin(), pps.getGlobalStats().getMin(), THRESHOLD); - assertEquals(expected.getMean(), pps.getGlobalStats().getMean(), THRESHOLD); - assertEquals(expected.getSumSq(), pps.getGlobalStats().getSumSq(), THRESHOLD); - } - } - - /** Test that existing summaries are updated correctly when a job pushes new profiling data. */ - @Test - public void testUpdateSummary() { - Date d = new Date(); - long time = TimeUnit.MILLISECONDS.toMicros(d.getTime()); - String test = "test2"; - - Key testKey = KeyFactory.createKey(TestEntity.KIND, test); - Key testRunKey = KeyFactory.createKey(testKey, TestRunEntity.KIND, time); - Long[] valueArray = new Long[] {0l}; - List<Long> values = Arrays.asList(valueArray); - - // Create a new profiling point run - ProfilingPointRunEntity profilingPointRunEntity = - new ProfilingPointRunEntity( - testRunKey, - "profilingPoint2", - VtsReportMessage.VtsProfilingType.VTS_PROFILING_TYPE_UNLABELED_VECTOR_VALUE, - VtsReportMessage.VtsProfilingRegressionMode - .VTS_REGRESSION_MODE_INCREASING_VALUE, - null, - values, - "xLabel", - "yLabel", - null); - - // Create a device for the run - String series = ""; - DeviceInfoEntity device = - new DeviceInfoEntity( - testRunKey, "master", "product", "flavor", "12345", "64", "abi"); - - List<DeviceInfoEntity> devices = new ArrayList<>(); - devices.add(device); - - // Create the existing stats - Key profilingPointKey = ProfilingPointEntity.createKey(test, profilingPointRunEntity.getName()); - StatSummary expected = - new StatSummary( - "label", - 0, - 10, - 5, - 100, - 10, - VtsReportMessage.VtsProfilingRegressionMode.UNKNOWN_REGRESSION_MODE); - ProfilingPointSummaryEntity summary = - new ProfilingPointSummaryEntity( - profilingPointKey, - expected, - new ArrayList<>(), - new HashMap<>(), - device.getBranch(), - device.getBuildFlavor(), - series, - time); - - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - datastore.put(summary.toEntity()); - - // Update the summaries in the database - boolean result = - VtsProfilingStatsJobServlet.updateSummaries( - testKey, profilingPointRunEntity, devices, time); - assertTrue(result); - - // Calculate the expected stats with the values from the new run - for (long value : values) expected.updateStats(value); - - // Get the summary and check the values match what is expected - Key summaryKey = - ProfilingPointSummaryEntity.createKey( - profilingPointKey, device.getBranch(), device.getBuildFlavor(), series, time); - ProfilingPointSummaryEntity pps = null; - try { - Entity e = datastore.get(summaryKey); - pps = ProfilingPointSummaryEntity.fromEntity(e); - } catch (EntityNotFoundException e) { - fail(); - } - assertNotNull(pps); - assertTrue(pps.getBranch().equals(device.getBranch())); - assertTrue(pps.getBuildFlavor().equals(device.getBuildFlavor())); - assertEquals(expected.getCount(), pps.getGlobalStats().getCount()); - assertEquals(expected.getMax(), pps.getGlobalStats().getMax(), THRESHOLD); - assertEquals(expected.getMin(), pps.getGlobalStats().getMin(), THRESHOLD); - assertEquals(expected.getMean(), pps.getGlobalStats().getMean(), THRESHOLD); - assertEquals(expected.getSumSq(), pps.getGlobalStats().getSumSq(), THRESHOLD); - } -} diff --git a/src/test/java/com/android/vts/util/LocalDatastoreExtension.java b/src/test/java/com/android/vts/util/LocalDatastoreExtension.java deleted file mode 100644 index b06303c..0000000 --- a/src/test/java/com/android/vts/util/LocalDatastoreExtension.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.util; - -import com.google.cloud.datastore.testing.LocalDatastoreHelper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.extension.BeforeAllCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ExtensionContext.Namespace; - -/** Sets up and tears down the Local Datastore emulator, defaults to strong consistency */ -@RequiredArgsConstructor -@Slf4j -public class LocalDatastoreExtension implements BeforeAllCallback, BeforeEachCallback { - - private final double consistency; - - public LocalDatastoreExtension() { - this(1.0); - } - - @Override - public void beforeAll(final ExtensionContext context) throws Exception { - if (getHelper(context) == null) { - log.info("Creating new LocalDatastoreHelper"); - - final LocalDatastoreHelper helper = LocalDatastoreHelper.create(consistency); - context.getRoot().getStore(Namespace.GLOBAL).put(LocalDatastoreHelper.class, helper); - helper.start(); - } - } - - @Override - public void beforeEach(final ExtensionContext context) throws Exception { - final LocalDatastoreHelper helper = getHelper(context); - helper.reset(); - } - - /** Get the helper created in beforeAll; it should be global so there will one per test run */ - public static LocalDatastoreHelper getHelper(final ExtensionContext context) { - return context.getRoot() - .getStore(Namespace.GLOBAL) - .get(LocalDatastoreHelper.class, LocalDatastoreHelper.class); - } -} diff --git a/src/test/java/com/android/vts/util/MockitoExtension.java b/src/test/java/com/android/vts/util/MockitoExtension.java deleted file mode 100644 index 821574f..0000000 --- a/src/test/java/com/android/vts/util/MockitoExtension.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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.util; - -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.mockito.MockitoAnnotations; - -/** - * This will enable mockito annotations programmatically, by invoking MockitoAnnotations.initMocks() - */ -public class MockitoExtension implements BeforeEachCallback { - - @Override - public void beforeEach(final ExtensionContext context) throws Exception { - final Object testInstance = context.getTestInstance().get(); - - MockitoAnnotations.initMocks(testInstance); - } -} diff --git a/src/test/java/com/android/vts/util/ObjectifyExtension.java b/src/test/java/com/android/vts/util/ObjectifyExtension.java deleted file mode 100644 index a60ba0e..0000000 --- a/src/test/java/com/android/vts/util/ObjectifyExtension.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.util; - -import com.google.cloud.datastore.Datastore; -import com.googlecode.objectify.ObjectifyFactory; -import com.googlecode.objectify.ObjectifyService; -import com.googlecode.objectify.util.Closeable; -import org.junit.jupiter.api.extension.AfterEachCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ExtensionContext.Namespace; - -/** Sets up and tears down the GAE local unit test harness environment */ -public class ObjectifyExtension implements BeforeEachCallback, AfterEachCallback { - - private static final Namespace NAMESPACE = Namespace.create(ObjectifyExtension.class); - - @Override - public void beforeEach(final ExtensionContext context) throws Exception { - final Datastore datastore = - LocalDatastoreExtension.getHelper(context).getOptions().getService(); - - ObjectifyService.init(new ObjectifyFactory(datastore)); - - final Closeable rootService = ObjectifyService.begin(); - - context.getStore(NAMESPACE).put(Closeable.class, rootService); - } - - @Override - public void afterEach(final ExtensionContext context) throws Exception { - final Closeable rootService = - context.getStore(NAMESPACE).get(Closeable.class, Closeable.class); - - rootService.close(); - } -} diff --git a/src/test/java/com/android/vts/util/ObjectifyTestBase.java b/src/test/java/com/android/vts/util/ObjectifyTestBase.java deleted file mode 100644 index 0b3b5e8..0000000 --- a/src/test/java/com/android/vts/util/ObjectifyTestBase.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.util; - -import com.google.cloud.datastore.Datastore; -import com.google.cloud.datastore.EntityValue; -import com.google.cloud.datastore.FullEntity; -import com.google.cloud.datastore.IncompleteKey; -import com.google.cloud.datastore.Value; -import com.googlecode.objectify.Key; -import com.googlecode.objectify.cache.MemcacheService; -import com.googlecode.objectify.impl.AsyncDatastore; -import org.junit.jupiter.api.extension.ExtendWith; - -import static com.googlecode.objectify.ObjectifyService.factory; -import static com.googlecode.objectify.ObjectifyService.ofy; - -/** All tests should extend this class to set up the GAE environment. */ -@ExtendWith({ - MockitoExtension.class, - LocalDatastoreExtension.class, - ObjectifyExtension.class, -}) -public class ObjectifyTestBase { - /** Set embedded entity with property name */ - protected Value<FullEntity<?>> makeEmbeddedEntityWithProperty( - final String name, final Value<?> value) { - return EntityValue.of(FullEntity.newBuilder().set(name, value).build()); - } - - /** Get datastore instance */ - protected Datastore datastore() { - return factory().datastore(); - } - - /** Get memcache instance */ - protected MemcacheService memcache() { - return factory().memcache(); - } - - /** Get asynchronous datastore instance */ - protected AsyncDatastore asyncDatastore() { - return factory().asyncDatastore(); - } - - /** Save an entity and clear cache data and return entity by finding the key */ - protected <E> E saveClearLoad(final E thing) { - final Key<E> key = ofy().save().entity(thing).now(); - ofy().clear(); - return ofy().load().key(key).now(); - } - - /** Get the entity instance from class type */ - protected FullEntity.Builder<?> makeEntity(final Class<?> kind) { - return makeEntity(Key.getKind(kind)); - } - - /** Get the entity instance from class name */ - protected FullEntity.Builder<?> makeEntity(final String kind) { - final IncompleteKey incompleteKey = - factory().datastore().newKeyFactory().setKind(kind).newKey(); - return FullEntity.newBuilder(incompleteKey); - } -} diff --git a/src/test/java/com/android/vts/util/ProfilingPointSummaryTest.java b/src/test/java/com/android/vts/util/ProfilingPointSummaryTest.java deleted file mode 100644 index e44a1b0..0000000 --- a/src/test/java/com/android/vts/util/ProfilingPointSummaryTest.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.util; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import com.android.vts.entity.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; -import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; -import com.google.appengine.tools.development.testing.LocalServiceTestHelper; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class ProfilingPointSummaryTest { - private final LocalServiceTestHelper helper = - new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()); - private static String[] labels = new String[] {"label1", "label2", "label3"}; - private static long[] values = new long[] {1, 2, 3}; - private static ProfilingPointSummary summary; - - /** - * Helper method for creating ProfilingPointSummaryEntity objects. - * - * @param labels The list of data labels. - * @param values The list of data values. Must be equal in size to the labels list. - * @param regressionMode The regression mode. - * @return A ProfilingPointSummaryEntity with specified data. - */ - private static ProfilingPointSummaryEntity createProfilingReport( - String[] labels, long[] values, VtsProfilingRegressionMode regressionMode) { - List<String> labelList = Arrays.asList(labels); - StatSummary globalStats = new StatSummary("global", regressionMode); - Map<String, StatSummary> labelStats = new HashMap<>(); - for (int i = 0; i < labels.length; ++i) { - StatSummary stat = new StatSummary(labels[i], regressionMode); - stat.updateStats(values[i]); - labelStats.put(labels[i], stat); - globalStats.updateStats(values[i]); - } - return new ProfilingPointSummaryEntity( - ProfilingPointEntity.createKey("test", "pp"), - globalStats, - labelList, - labelStats, - "branch", - "build", - null, - 0); - } - - @Before - public void setUp() { - helper.setUp(); - VtsProfilingRegressionMode mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - summary = new ProfilingPointSummary("x", "y", mode); - ProfilingPointSummaryEntity pt = createProfilingReport(labels, values, mode); - summary.update(pt); - } - - @After - public void tearDown() { - helper.tearDown(); - } - - /** Test that all labels are found by hasLabel. */ - @Test - public void testHasLabel() { - for (String label : labels) { - assertTrue(summary.hasLabel(label)); - } - } - - /** Test that invalid labels are not found by hasLabel. */ - @Test - public void testInvalidHasLabel() { - assertFalse(summary.hasLabel("bad label")); - } - - /** Test that all stat summaries can be retrieved by profiling point label. */ - @Test - public void testGetStatSummary() { - for (String label : labels) { - StatSummary stats = summary.getStatSummary(label); - assertNotNull(stats); - assertEquals(label, stats.getLabel()); - } - } - - /** Test that the getStatSummary method returns null when the label is not present. */ - @Test - public void testInvalidGetStatSummary() { - StatSummary stats = summary.getStatSummary("bad label"); - assertNull(stats); - } - - /** Test that StatSummary objects are iterated in the order that the labels were provided. */ - @Test - public void testIterator() { - VtsProfilingRegressionMode mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - ProfilingPointSummaryEntity pt = createProfilingReport(labels, values, mode); - summary.update(pt); - - int i = 0; - for (StatSummary stats : summary) { - assertEquals(labels[i++], stats.getLabel()); - } - } - - /** Test that the updateLabel method updates the StatSummary for just the label provided. */ - @Test - public void testUpdateLabelGrouped() { - VtsProfilingRegressionMode mode = VtsProfilingRegressionMode.VTS_REGRESSION_MODE_INCREASING; - summary = new ProfilingPointSummary("x", "y", mode); - ProfilingPointSummaryEntity pt = createProfilingReport(labels, values, mode); - summary.updateLabel(pt, labels[0]); - - // Ensure the label specified is present and has been updated for each data point. - assertTrue(summary.hasLabel(labels[0])); - assertNotNull(summary.getStatSummary(labels[0])); - assertEquals(summary.getStatSummary(labels[0]).getCount(), labels.length); - - // Check that the other labels were not updated. - for (int i = 1; i < labels.length; i++) { - assertFalse(summary.hasLabel(labels[i])); - } - } -} diff --git a/src/test/java/com/android/vts/util/StatSummaryTest.java b/src/test/java/com/android/vts/util/StatSummaryTest.java deleted file mode 100644 index a5a4f76..0000000 --- a/src/test/java/com/android/vts/util/StatSummaryTest.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2016 Google Inc. All Rights Reserved. - * - * 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.util; - -import static org.junit.Assert.assertEquals; - -import com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode; -import java.util.Random; -import org.junit.Before; -import org.junit.Test; - -public class StatSummaryTest { - private static double threshold = 0.0000000001; - private StatSummary test; - - @Before - public void setUp() { - test = new StatSummary("label", VtsProfilingRegressionMode.VTS_REGRESSION_MODE_DECREASING); - } - - /** Test computation of average. */ - @Test - public void testAverage() { - int n = 1000; - double mean = (n - 1) / 2.0; - for (int i = 0; i < n; i++) { - test.updateStats(i); - } - assertEquals(n, test.getCount(), threshold); - assertEquals(mean, test.getMean(), threshold); - } - - /** Test computation of minimum. */ - @Test - public void testMin() { - double min = Double.MAX_VALUE; - int n = 1000; - Random rand = new Random(); - for (int i = 0; i < n; i++) { - double value = rand.nextInt(1000); - if (value < min) min = value; - test.updateStats(value); - } - assertEquals(n, test.getCount(), threshold); - assertEquals(min, test.getMin(), threshold); - } - - /** Test computation of maximum. */ - @Test - public void testMax() { - double max = Double.MIN_VALUE; - int n = 1000; - Random rand = new Random(); - for (int i = 0; i < n; i++) { - double value = rand.nextInt(1000); - if (value > max) max = value; - test.updateStats(value); - } - assertEquals(max, test.getMax(), threshold); - } - - /** Test computation of standard deviation. */ - @Test - public void testStd() { - int n = 1000; - double[] values = new double[n]; - Random rand = new Random(); - double sum = 0.0; - for (int i = 0; i < n; i++) { - values[i] = rand.nextInt(1000); - sum += values[i]; - test.updateStats(values[i]); - } - double mean = sum / n; - double sumSq = 0; - for (int i = 0; i < n; i++) { - sumSq += (values[i] - mean) * (values[i] - mean); - } - double std = Math.sqrt(sumSq / (n - 1)); - assertEquals(std, test.getStd(), threshold); - } - - /** Test computation of standard deviation. */ - @Test - public void testMerge() { - StatSummary test2 = - new StatSummary("label", VtsProfilingRegressionMode.VTS_REGRESSION_MODE_DECREASING); - StatSummary all = - new StatSummary("label", VtsProfilingRegressionMode.VTS_REGRESSION_MODE_DECREASING); - int n1 = 1000; - int n2 = 2000; - Random rand = new Random(); - for (int i = 0; i < n1; i++) { - int value = rand.nextInt(1000); - test.updateStats(value); - all.updateStats(value); - } - for (int i = 0; i < n2; i++) { - int value = rand.nextInt(1000); - test2.updateStats(value); - all.updateStats(value); - } - - test.merge(test2); - assertEquals(all.getCount(), test.getCount()); - assertEquals(all.getStd(), test.getStd(), threshold); - assertEquals(all.getMean(), test.getMean(), threshold); - } -} diff --git a/src/test/java/com/android/vts/util/TimeUtilTest.java b/src/test/java/com/android/vts/util/TimeUtilTest.java deleted file mode 100644 index 439991d..0000000 --- a/src/test/java/com/android/vts/util/TimeUtilTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2017 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.util; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -public class TimeUtilTest { - - /** Test that date/time strings are formatted correctly. */ - @Test - public void testFormatDateTime() { - long time = 1504286976352052l; - String expected = "2017-09-01 10:29:36 (PDT)"; - String timeString = TimeUtil.getDateTimeZoneString(time); - assertEquals(expected, timeString); - } - - /** Test that date strings are formatted correctly. */ - @Test - public void testFormatDate() { - long time = 1504248634455491l; - String expected = "2017-08-31"; - String timeString = TimeUtil.getDateString(time); - assertEquals(expected, timeString); - } -} diff --git a/src/test/resources/config.properties b/src/test/resources/config.properties deleted file mode 100644 index 2368374..0000000 --- a/src/test/resources/config.properties +++ /dev/null @@ -1,6 +0,0 @@ - -testProjectID= - -api.coverage.keyFile= -api.coverage.spreadSheetId= -api.coverage.spreadSheetRange= diff --git a/src/test/resources/data/android_vts.vts_api_coverage_exlude_test.ods b/src/test/resources/data/android_vts.vts_api_coverage_exlude_test.ods Binary files differdeleted file mode 100644 index eb557d0..0000000 --- a/src/test/resources/data/android_vts.vts_api_coverage_exlude_test.ods +++ /dev/null diff --git a/src/test/resources/driver/chromedriver b/src/test/resources/driver/chromedriver Binary files differdeleted file mode 100755 index bbb06c3..0000000 --- a/src/test/resources/driver/chromedriver +++ /dev/null diff --git a/src/test/resources/driver/config.properties b/src/test/resources/driver/config.properties deleted file mode 100644 index 939fa90..0000000 --- a/src/test/resources/driver/config.properties +++ /dev/null @@ -1 +0,0 @@ -LOCALHOST=localhost:8080
\ No newline at end of file diff --git a/src/test/resources/log4j2-test.xml b/src/test/resources/log4j2-test.xml deleted file mode 100644 index 98cfd73..0000000 --- a/src/test/resources/log4j2-test.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Configuration status="INFO"> - <Appenders> - <Console name="Console" target="SYSTEM_OUT"> - <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> - </Console> - </Appenders> - <Loggers> - <Root level="info"> - <AppenderRef ref="Console"/> - </Root> - </Loggers> -</Configuration>
\ No newline at end of file diff --git a/src/test/resources/servlet/performanceSummary1.html b/src/test/resources/servlet/performanceSummary1.html deleted file mode 100644 index 3b01593..0000000 --- a/src/test/resources/servlet/performanceSummary1.html +++ /dev/null @@ -1 +0,0 @@ -<p style='font-family: arial'><b>test</b></p><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p1</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Lower values are better. Minimum is the best-case performance.</i><br><br><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p2</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMax (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMax (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Higher values are better. Maximum is the best-case performance.</i><br><br>
\ No newline at end of file diff --git a/src/test/resources/servlet/performanceSummary2.html b/src/test/resources/servlet/performanceSummary2.html deleted file mode 100644 index 3b01593..0000000 --- a/src/test/resources/servlet/performanceSummary2.html +++ /dev/null @@ -1 +0,0 @@ -<p style='font-family: arial'><b>test</b></p><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p1</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Lower values are better. Minimum is the best-case performance.</i><br><br><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p2</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMax (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMax (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Higher values are better. Maximum is the best-case performance.</i><br><br>
\ No newline at end of file diff --git a/src/test/resources/servlet/performanceSummary3.html b/src/test/resources/servlet/performanceSummary3.html deleted file mode 100644 index 1ff1028..0000000 --- a/src/test/resources/servlet/performanceSummary3.html +++ /dev/null @@ -1 +0,0 @@ -<p style='font-family: arial'><b>test</b></p><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p1</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Lower values are better. Minimum is the best-case performance.</i><br><br><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p2</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMax (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMax (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td class='' style='background-color: rgba(255, 0, 0, -0.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>0 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Higher values are better. Maximum is the best-case performance.</i><br><br><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p3</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label1</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label2</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>label3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Lower values are better. Minimum is the best-case performance.</i><br><br>
\ No newline at end of file diff --git a/src/test/resources/servlet/performanceSummary4.html b/src/test/resources/servlet/performanceSummary4.html deleted file mode 100644 index 8fc8997..0000000 --- a/src/test/resources/servlet/performanceSummary4.html +++ /dev/null @@ -1 +0,0 @@ -<p style='font-family: arial'><b>test</b></p><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p1</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMin (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Min</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>testLabel</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>10</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>8.94</td><td class='' style='background-color: rgba(255, 0, 0, 18.0); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>900 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>1<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0.89</td><td></td><td></td><td></td><td></td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Lower values are better. Minimum is the best-case performance.</i><br><br><table cellpadding='2' style='width: 100%; border-collapse: collapse; border: 1px solid black; font-size: 12px; font-family: arial;'><tr><td colspan='16'>p2</td></tr><tr><td colspan='16'></td></tr><tr><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='1'></th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='3'>today</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>yesterday</th><th style='border: 1px solid black; border-bottom: none; background-color: lightgray;' colspan='4'>last week</th></tr><tr><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'></th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMax (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>ΔMax (%)</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Max</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Mean</th><th style='border: 1px solid black; border-bottom-width: 2px; border-top: 1px dotted gray; background-color: lightgray;'>Std</th></tr><tr><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right; background-color: lightgray;'>testLabel</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>3</td><td style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>2</td><td style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>0.89</td><td class='' style='background-color: rgba(255, 0, 0, 1.8); border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>-90 %</td><td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>30<td class='' style='border-top: 1px dotted gray; border-right: 1px dotted gray; text-align: right;'>20<td class='' style='border-top: 1px dotted gray; border-right: 2px solid black; text-align: right;'>8.94</td><td></td><td></td><td></td><td></td></tr></table><i style='font-family: arial; font-size: 12px'>Note: Higher values are better. Maximum is the best-case performance.</i><br><br>
\ No newline at end of file |