From 78b3bbb44e8258bf7d7095116b4ff23855203511 Mon Sep 17 00:00:00 2001 From: Young Gyu Park Date: Tue, 11 Sep 2018 15:50:48 +0900 Subject: Newly added entities for code coverage. Test: go/vts-web-staging Bug: 113356010 Change-Id: I50c5e8900da3c5e68f88244cc924aa9be8fcee23 --- .../com/android/vts/config/ObjectifyListener.java | 3 +- .../com/android/vts/entity/ApiCoverageEntity.java | 16 +++ .../com/android/vts/entity/CodeCoverageEntity.java | 126 +++++++++++++++++++++ .../android/vts/entity/CodeCoverageFileEntity.java | 101 +++++++++++++++++ 4 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/android/vts/entity/CodeCoverageEntity.java create mode 100644 src/main/java/com/android/vts/entity/CodeCoverageFileEntity.java (limited to 'src/main') diff --git a/src/main/java/com/android/vts/config/ObjectifyListener.java b/src/main/java/com/android/vts/config/ObjectifyListener.java index 2c73e1f..2610ab8 100644 --- a/src/main/java/com/android/vts/config/ObjectifyListener.java +++ b/src/main/java/com/android/vts/config/ObjectifyListener.java @@ -17,6 +17,7 @@ package com.android.vts.config; import com.android.vts.entity.ApiCoverageEntity; +import com.android.vts.entity.CodeCoverageEntity; import com.android.vts.entity.CoverageEntity; import com.android.vts.entity.DeviceInfoEntity; import com.android.vts.entity.ProfilingPointEntity; @@ -33,7 +34,6 @@ 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.googlecode.objectify.Key; import com.googlecode.objectify.ObjectifyService; import java.util.Arrays; @@ -74,6 +74,7 @@ public class ObjectifyListener implements ServletContextListener { public void contextInitialized(ServletContextEvent servletContextEvent) { ObjectifyService.init(); ObjectifyService.register(ApiCoverageEntity.class); + ObjectifyService.register(CodeCoverageEntity.class); ObjectifyService.register(CoverageEntity.class); ObjectifyService.register(DeviceInfoEntity.class); ObjectifyService.register(TestCoverageStatusEntity.class); diff --git a/src/main/java/com/android/vts/entity/ApiCoverageEntity.java b/src/main/java/com/android/vts/entity/ApiCoverageEntity.java index beb772d..0a41743 100644 --- a/src/main/java/com/android/vts/entity/ApiCoverageEntity.java +++ b/src/main/java/com/android/vts/entity/ApiCoverageEntity.java @@ -127,6 +127,22 @@ public class ApiCoverageEntity { this.coveredHalApi = coveredHalApi; } + /** + * Constructor function for ApiCoverageEntity Class with objectify Key. + */ + public ApiCoverageEntity(Key testRunKey, String halPackageName, + int halVersionMajor, int halVersionMinor, String halInterfaceName, + List halApi, List coveredHalApi) { + this.parent = testRunKey; + + this.halPackageName = halPackageName; + this.halMajorVersion = halVersionMajor; + this.halMinorVersion = halVersionMinor; + this.halInterfaceName = halInterfaceName; + this.halApi = halApi; + this.coveredHalApi = coveredHalApi; + } + /** * Get objectify Key from datastore Key type */ diff --git a/src/main/java/com/android/vts/entity/CodeCoverageEntity.java b/src/main/java/com/android/vts/entity/CodeCoverageEntity.java new file mode 100644 index 0000000..63034ef --- /dev/null +++ b/src/main/java/com/android/vts/entity/CodeCoverageEntity.java @@ -0,0 +1,126 @@ +/* + * 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.UrlUtil; +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.google.gson.Gson; +import com.google.gson.JsonElement; +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.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.logging.Level; +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 { + 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 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 */ + public Key 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 new file mode 100644 index 0000000..cb6d06c --- /dev/null +++ b/src/main/java/com/android/vts/entity/CodeCoverageFileEntity.java @@ -0,0 +1,101 @@ +/* + * 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 { + + /** 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 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 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 */ + public void save() { + this.isIgnored = false; + ofy().save().entity(this).now(); + } +} -- cgit v1.2.3