Merge "protoc command integration with gradle command"
am: 31063431db

Change-Id: I0d949bda3738a37f8c35df29d63ff50409151e62
diff --git a/build.gradle b/build.gradle
index 47ac875..4663d2b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,6 +11,7 @@
         googleHttpClientVersion = '1.25.0'
         lombokVersion = '1.18.4'
         appGradlePluginVersion = '2.0.0-rc3'
+        protobufGradlePlugin = '0.8.7'
         googleSheetsAPI = 'v4-rev548-1.25.0'
     }
     repositories {
@@ -25,6 +26,7 @@
     }
     dependencies {
         classpath "com.google.cloud.tools:appengine-gradle-plugin:${appGradlePluginVersion}"    // latest App Engine Gradle tasks
+        classpath "com.google.protobuf:protobuf-gradle-plugin:${protobufGradlePlugin}"
         classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
     }
 }
@@ -34,6 +36,7 @@
     id "com.github.sherter.google-java-format" version "0.7.1"
 }
 
+apply plugin: 'com.google.protobuf'
 apply plugin: 'com.google.cloud.tools.appengine-standard'  // App Engine tasks
 
 apply from: rootProject.file('gradle/profiles.gradle')
@@ -92,7 +95,7 @@
     testCompile 'com.google.appengine:appengine-api-stubs:+'
     testCompile 'com.google.appengine:appengine-tools-sdk:+'
 
-    runtimeOnly group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}"
+    compile group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}"
     annotationProcessor group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}"
 }
 
@@ -109,6 +112,33 @@
     exclude 'src/test/template_*'
 }
 
+sourceSets {
+    main {
+        proto {
+            srcDir '../test_serving/proto'
+            include 'TestScheduleConfigMessage.proto'
+        }
+        java {
+            srcDir 'src/main/java'
+        }
+    }
+}
+
+protobuf {
+    generateProtoTasks {
+        ofSourceSet('main').each { task ->
+            task.builtins {
+                python {
+                    outputSubDir = 'python'
+                }
+                java {
+                    outputSubDir = 'java'
+                }
+            }
+        }
+    }
+}
+
 appengine {  // App Engine tasks configuration
     tools {
         // configure the Cloud Sdk tooling
@@ -150,6 +180,23 @@
     }
 }
 
+tasks.whenTaskAdded { task ->
+    if (task.name =~ /generate.*Proto/) {
+        task.finalizedBy(copyGeneratedProtoFiles)
+    }
+}
+
+task copyGeneratedProtoFiles(type: Copy) {
+    into(projectDir)
+
+    from("build/generated/source/proto/main/java") {
+        into "src/main/java"
+    }
+    from("build/generated/source/proto/main/python") {
+        into "python"
+    }
+}
+
 
 tasks.addRule("Pattern: vtsGaeDeploy<ID>") { String taskName ->
     if (taskName.startsWith("vtsGaeDeploy-")) {
diff --git a/script/build-java.sh b/script/build-java.sh
deleted file mode 100755
index ed1350b..0000000
--- a/script/build-java.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-#
-# 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.
-
-pushd ${ANDROID_BUILD_TOP}/test
-protoc --proto_path=. --java_out=vti/dashboard/src/main/java vti/dashboard/proto/TestSuiteResultMessage.proto vti/test_serving/proto/TestScheduleConfigMessage.proto
-popd
diff --git a/src/main/java/com/android/vts/api/TestSuiteResultRestServlet.java b/src/main/java/com/android/vts/api/TestSuiteResultRestServlet.java
index 4f2d52e..38be2c0 100644
--- a/src/main/java/com/android/vts/api/TestSuiteResultRestServlet.java
+++ b/src/main/java/com/android/vts/api/TestSuiteResultRestServlet.java
@@ -18,8 +18,7 @@
 
 import com.android.vts.entity.TestSuiteFileEntity;
 import com.android.vts.entity.TestSuiteResultEntity;
-import com.android.vts.proto.TestSuiteResultMessageProto.TestSuiteResultMessage;
-import com.android.vts.servlet.BaseServlet;
+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;
@@ -29,20 +28,14 @@
 import com.googlecode.objectify.Key;
 import org.apache.commons.codec.binary.Base64;
 
-import javax.servlet.http.HttpServlet;
 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.HashMap;
 import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
-import java.util.stream.IntStream;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 
@@ -64,11 +57,12 @@
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws IOException {
         // Retrieve the params
-        TestSuiteResultMessage testSuiteResultMessage;
+        TestSuiteResultMessageProto.TestSuiteResultMessage testSuiteResultMessage;
         try {
             String payload = request.getReader().lines().collect(Collectors.joining());
             byte[] value = Base64.decodeBase64(payload);
-            testSuiteResultMessage = TestSuiteResultMessage.parseFrom(value);
+            testSuiteResultMessage =
+                    TestSuiteResultMessageProto.TestSuiteResultMessage.parseFrom(value);
         } catch (IOException e) {
             response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
             logger.log(Level.WARNING, "Invalid proto: " + e.getLocalizedMessage());
diff --git a/src/main/java/com/android/vts/proto/TestSuiteResultMessageProto.java b/src/main/java/com/android/vts/proto/TestSuiteResultMessageProto.java
index 52f73d1..f152227 100644
--- a/src/main/java/com/android/vts/proto/TestSuiteResultMessageProto.java
+++ b/src/main/java/com/android/vts/proto/TestSuiteResultMessageProto.java
@@ -1,5 +1,5 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: vti/dashboard/proto/TestSuiteResultMessage.proto
+// source: TestSuiteResultMessage.proto
 
 package com.android.vts.proto;
 
@@ -436,17 +436,17 @@
         getGsiBuildIdBytes();
 
     /**
-     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
      */
-    boolean hasScheduleConfig();
+    @java.lang.Deprecated boolean hasScheduleConfig();
     /**
-     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
      */
-    android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage getScheduleConfig();
+    @java.lang.Deprecated com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage getScheduleConfig();
     /**
-     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
      */
-    android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder getScheduleConfigOrBuilder();
+    @java.lang.Deprecated com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder getScheduleConfigOrBuilder();
   }
   /**
    * <pre>
@@ -658,11 +658,11 @@
               break;
             }
             case 506: {
-              android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder subBuilder = null;
+              com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder subBuilder = null;
               if (((bitField0_ & 0x00800000) == 0x00800000)) {
                 subBuilder = scheduleConfig_.toBuilder();
               }
-              scheduleConfig_ = input.readMessage(android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.PARSER, extensionRegistry);
+              scheduleConfig_ = input.readMessage(com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.PARSER, extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(scheduleConfig_);
                 scheduleConfig_ = subBuilder.buildPartial();
@@ -1594,24 +1594,24 @@
     }
 
     public static final int SCHEDULE_CONFIG_FIELD_NUMBER = 63;
-    private android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage scheduleConfig_;
+    private com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage scheduleConfig_;
     /**
-     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
      */
-    public boolean hasScheduleConfig() {
+    @java.lang.Deprecated public boolean hasScheduleConfig() {
       return ((bitField0_ & 0x00800000) == 0x00800000);
     }
     /**
-     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
      */
-    public android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage getScheduleConfig() {
-      return scheduleConfig_ == null ? android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_;
+    @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;</code>
+     * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
      */
-    public android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder getScheduleConfigOrBuilder() {
-      return scheduleConfig_ == null ? android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_;
+    @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;
@@ -4285,29 +4285,29 @@
         return this;
       }
 
-      private android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage scheduleConfig_ = null;
+      private com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage scheduleConfig_ = null;
       private com.google.protobuf.SingleFieldBuilderV3<
-          android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage, android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder, android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder> scheduleConfigBuilder_;
+          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;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
-      public boolean hasScheduleConfig() {
+      @java.lang.Deprecated public boolean hasScheduleConfig() {
         return ((bitField0_ & 0x01000000) == 0x01000000);
       }
       /**
-       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
-      public android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage getScheduleConfig() {
+      @java.lang.Deprecated public com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage getScheduleConfig() {
         if (scheduleConfigBuilder_ == null) {
-          return scheduleConfig_ == null ? android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_;
+          return scheduleConfig_ == null ? com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_;
         } else {
           return scheduleConfigBuilder_.getMessage();
         }
       }
       /**
-       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
-      public Builder setScheduleConfig(android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage value) {
+      @java.lang.Deprecated public Builder setScheduleConfig(com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage value) {
         if (scheduleConfigBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -4321,10 +4321,10 @@
         return this;
       }
       /**
-       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
-      public Builder setScheduleConfig(
-          android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder builderForValue) {
+      @java.lang.Deprecated public Builder setScheduleConfig(
+          com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder builderForValue) {
         if (scheduleConfigBuilder_ == null) {
           scheduleConfig_ = builderForValue.build();
           onChanged();
@@ -4335,15 +4335,15 @@
         return this;
       }
       /**
-       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
-      public Builder mergeScheduleConfig(android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage value) {
+      @java.lang.Deprecated public Builder mergeScheduleConfig(com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage value) {
         if (scheduleConfigBuilder_ == null) {
           if (((bitField0_ & 0x01000000) == 0x01000000) &&
               scheduleConfig_ != null &&
-              scheduleConfig_ != android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance()) {
+              scheduleConfig_ != com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance()) {
             scheduleConfig_ =
-              android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.newBuilder(scheduleConfig_).mergeFrom(value).buildPartial();
+              com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.newBuilder(scheduleConfig_).mergeFrom(value).buildPartial();
           } else {
             scheduleConfig_ = value;
           }
@@ -4355,9 +4355,9 @@
         return this;
       }
       /**
-       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
-      public Builder clearScheduleConfig() {
+      @java.lang.Deprecated public Builder clearScheduleConfig() {
         if (scheduleConfigBuilder_ == null) {
           scheduleConfig_ = null;
           onChanged();
@@ -4368,33 +4368,33 @@
         return this;
       }
       /**
-       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
-      public android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder getScheduleConfigBuilder() {
+      @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;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
-      public android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder getScheduleConfigOrBuilder() {
+      @java.lang.Deprecated public com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder getScheduleConfigOrBuilder() {
         if (scheduleConfigBuilder_ != null) {
           return scheduleConfigBuilder_.getMessageOrBuilder();
         } else {
           return scheduleConfig_ == null ?
-              android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_;
+              com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.getDefaultInstance() : scheduleConfig_;
         }
       }
       /**
-       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63;</code>
+       * <code>optional .android.test.lab.ScheduleConfigMessage schedule_config = 63 [deprecated = true];</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage, android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder, android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder> 
+          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<
-              android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage, android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder, android.test.lab.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder>(
+              com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage, com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessage.Builder, com.android.vts.proto.TestScheduleConfigMessageOuterClass.ScheduleConfigMessageOrBuilder>(
                   getScheduleConfig(),
                   getParentForChildren(),
                   isClean());
@@ -4465,27 +4465,26 @@
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n0vti/dashboard/proto/TestSuiteResultMes" +
-      "sage.proto\022\013android.vts\0326vti/test_servin" +
-      "g/proto/TestScheduleConfigMessage.proto\"" +
-      "\222\005\n\026TestSuiteResultMessage\022\024\n\014access_tok" +
-      "en\030\001 \001(\t\022\023\n\013result_path\030\002 \001(\t\022\032\n\014boot_su" +
-      "ccess\030\003 \001(\010:\004true\022\016\n\006branch\030\013 \002(\t\022\016\n\006tar" +
-      "get\030\014 \002(\t\022\020\n\010build_id\030\r \002(\t\022\022\n\nsuite_pla" +
-      "n\030\025 \001(\t\022\025\n\rsuite_version\030\026 \001(\t\022\032\n\022suite_" +
-      "build_number\030\027 \001(\t\022\022\n\nstart_time\030\030 \001(\003\022\020" +
-      "\n\010end_time\030\031 \001(\003\022\021\n\thost_name\030\032 \001(\t\022\022\n\ns",
-      "uite_name\030\033 \001(\t\022 \n\030build_system_fingerpr" +
-      "int\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" +
-      "_case_count\030) \001(\005\022\036\n\026failed_test_case_co" +
-      "unt\030* \001(\005\022\024\n\014modules_done\030+ \001(\005\022\025\n\rmodul" +
-      "es_total\030, \001(\005\022\026\n\016infra_log_path\0303 \001(\t\022\033" +
-      "\n\023repacked_image_path\0304 \003(\t\022\027\n\017vendor_bu" +
-      "ild_id\030= \001(\t\022\024\n\014gsi_build_id\030> \001(\t\022@\n\017sc" +
-      "hedule_config\030? \001(\0132\'.android.test.lab.S" +
-      "cheduleConfigMessageB6\n\025com.android.vts.",
-      "protoB\033TestSuiteResultMessageProtoP\000"
+      "\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() {
@@ -4498,7 +4497,7 @@
     com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
-          android.test.lab.TestScheduleConfigMessageOuterClass.getDescriptor(),
+          com.android.vts.proto.TestScheduleConfigMessageOuterClass.getDescriptor(),
         }, assigner);
     internal_static_android_vts_TestSuiteResultMessage_descriptor =
       getDescriptor().getMessageTypes().get(0);
@@ -4506,7 +4505,7 @@
       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", });
-    android.test.lab.TestScheduleConfigMessageOuterClass.getDescriptor();
+    com.android.vts.proto.TestScheduleConfigMessageOuterClass.getDescriptor();
   }
 
   // @@protoc_insertion_point(outer_class_scope)
diff --git a/proto/TestSuiteResultMessage.proto b/src/main/proto/TestSuiteResultMessage.proto
similarity index 96%
rename from proto/TestSuiteResultMessage.proto
rename to src/main/proto/TestSuiteResultMessage.proto
index 560ceb6..be447e9 100644
--- a/proto/TestSuiteResultMessage.proto
+++ b/src/main/proto/TestSuiteResultMessage.proto
@@ -15,12 +15,11 @@
 syntax = "proto2";
 
 package android.vts;
-import "vti/test_serving/proto/TestScheduleConfigMessage.proto";
+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
@@ -66,5 +65,6 @@
   // 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;
+
+  optional android.test.lab.ScheduleConfigMessage schedule_config = 63 [ deprecated = true ];
 }
\ No newline at end of file