Update CTS upload scripts to support v2 pipeline.

For unibuild model, model.board and for non unibuild ones board.board
BUG=b:130679085
 TEST=./upload_cts.py <build_id> <results_dir_path>

Change-Id: Icfae143278a5a987d9c8422664e35976cb4db4ec
Reviewed-on: https://chromium-review.googlesource.com/1573198
Commit-Ready: Rohit Makasana <rohitbm@chromium.org>
Tested-by: Nita Nair <nnita@chromium.org>
Tested-by: Rohit Makasana <rohitbm@chromium.org>
Reviewed-by: Rohit Makasana <rohitbm@chromium.org>
diff --git a/provingground/cts/lib/upload_utils.py b/provingground/cts/lib/upload_utils.py
index 01e5835..1010297 100755
--- a/provingground/cts/lib/upload_utils.py
+++ b/provingground/cts/lib/upload_utils.py
@@ -56,14 +56,14 @@
 
   def PrintObsoleteFolderCount(self):
     """Prints obsolete file count in case of build id mismatch."""
-    if not self.build_mismatch_file_count == 0:
+    if self.build_mismatch_file_count != 0:
       err_msg = ('Build ID Mismatch!Pushed {0} invalid files to BuildID'
                  ' Mismatch Folder'.format(self.build_mismatch_file_count))
       print(self.BOLD + self.C_RED + err_msg +self.BOLD+ self.C_END)
 
   def PrintUntestedFolderCount(self):
     """Prints untested file count if untested tests exist."""
-    if not self.untested_file_count == 0:
+    if self.untested_file_count != 0:
       err_msg = ('Untested Test(s) Detected!Pushed {0} files to Untested'
                  ' Tests Folder'.format(self.untested_file_count))
       print(self.BOLD + self.C_RED + err_msg +self.BOLD+ self.C_END)
@@ -127,28 +127,28 @@
     : relm           : R62-9901.20.0       : 7.1_r9
 
     Args:
-       item: Information list to be printed to terminal.
+      item: Information list to be printed to terminal.
     """
     print(('{:^%s}'%self.SPACE_COUNT_CTSV_BOARD_NAME).format(item[1]),
-          ('{:>%s}'%self.SPACE_COUNT_CTSV_BUILD_VERSION).format(item[2]),
-          ('{:>%s}'%self.SPACE_COUNT_VERIFIER_VERSION).format(item[3]))
+          ('{:>%s}'%self.SPACE_COUNT_CTSV_BUILD_VERSION).format(item[3]),
+          ('{:>%s}'%self.SPACE_COUNT_VERIFIER_VERSION).format(item[4]))
 
   def SegregateCtsDataToPrint(self, item):
     """Segregates passed and failed results into two separate lists.
 
     Args:
-       item: Board information.
+      item: Board information.
     """
     rerun = 0
-    if ((item[7] == self.TEST_PASS and
-         item[6] != self.TEST_FAIL) or
-        item[7] == self.TEST_PASS_X86_64):
+    if ((item[8] == self.TEST_PASS and
+         item[7] != self.TEST_FAIL) or
+        item[8] == self.TEST_PASS_X86_64):
       self.passed_list.append(item)
 
       for i in range(len(self.passed_list)):
         if(self.passed_list[i][1] == item[1] and
-           self.passed_list[i][3] == item[3] and
-           self.passed_list[i][5] == item[5]):
+           self.passed_list[i][4] == item[4] and
+           self.passed_list[i][6] == item[6]):
           rerun = rerun + 1
         if rerun > 1:
           break
@@ -174,12 +174,12 @@
     print(('{:<%i}'%self.SPACE_COUNT_ROW).format(self.row_count),
           ('{:>%s}'%self.SPACE_COUNT_TIMESTAMP).format(item[0]),
           ('{:^%s}'%self.SPACE_COUNT_CTS_BOARD_NAME).format(item[1]),
-          ('{:^%s}'%self.SPACE_COUNT_CTS_BUILD_VERSION).format(item[2]),
-          ('{:>%s}'%self.SPACE_COUNT_CTS_BOARD_ABI).format(item[3]),
-          ('{:^%s}'%self.SPACE_COUNT_PACKAGE_NAME).format(item[4]),
-          ('{:<%s}'%self.SPACE_COUNT_TEST_NAME).format(item[5]),
-          ('{:<%s}'%self.SPACE_COUNT_FAILED_TESTS).format(item[6]),
-          ('{:<%s}'%self.SPACE_COUNT_PASSED_TESTS).format(item[7]))
+          ('{:^%s}'%self.SPACE_COUNT_CTS_BUILD_VERSION).format(item[3]),
+          ('{:>%s}'%self.SPACE_COUNT_CTS_BOARD_ABI).format(item[4]),
+          ('{:^%s}'%self.SPACE_COUNT_PACKAGE_NAME).format(item[5]),
+          ('{:<%s}'%self.SPACE_COUNT_TEST_NAME).format(item[6]),
+          ('{:<%s}'%self.SPACE_COUNT_FAILED_TESTS).format(item[7]),
+          ('{:<%s}'%self.SPACE_COUNT_PASSED_TESTS).format(item[8]))
 
   def GetXmlTagNamesCtsv(self):
     """Get xml tag names.
@@ -191,12 +191,14 @@
     RESULT_XML_TAG = 'Result'
     SUITE_VERSION_XML_TAG = 'suite_version'
     BUILD_BOARD_XML_TAG = 'build_board'
+    BUILD_MODEL_XML_TAG = 'build_product'
     BUILD_ID_N_XML_TAG = 'build_id'
     TEST_XML_TAG = 'Test'
     return [BUILD_N_XML_TAG,
             RESULT_XML_TAG,
             SUITE_VERSION_XML_TAG,
             BUILD_BOARD_XML_TAG,
+            BUILD_MODEL_XML_TAG,
             BUILD_ID_N_XML_TAG,
             TEST_XML_TAG]
 
@@ -212,6 +214,7 @@
     SUMMARY_XML_TAG = 'Summary'
     BUILD_N_XML_TAG = 'Build'
     BUILD_BOARD_VERSION_XML_TAG = 'build_board'
+    BUILD_MODEL_VERSION_XML_TAG = 'build_product'
     BUILD_ID_N_XML_TAG = 'build_id'
     TEST_PACKAGE_LIST_N_XML_TAG = 'Module'
     TEST_PACKAGE_NAME_N_XML_TAG = 'name'
@@ -224,6 +227,7 @@
     return [SUMMARY_XML_TAG,
             BUILD_N_XML_TAG,
             BUILD_BOARD_VERSION_XML_TAG,
+            BUILD_MODEL_VERSION_XML_TAG,
             BUILD_ID_N_XML_TAG,
             TEST_PACKAGE_LIST_N_XML_TAG,
             TEST_PACKAGE_NAME_N_XML_TAG,
@@ -251,9 +255,10 @@
     build_board = ''
     split_file_list = self.SplitFileName(filename)
     base = split_file_list[0]
+    build_model = self.build_info_list[-1][2]
     build_board = self.build_info_list[-1][1]
-    build_id_folder = self.build_info_list[-1][2]
-    release_folder = '%s-release' % build_board
+    build_id_folder = self.build_info_list[-1][3]
+    release_folder = '%s.%s-release' % (build_model, build_board)
     manual_folder = 'manual'
     apfe_path = os.path.join(dir_path, release_folder, build_id_folder,
                              manual_folder)
@@ -272,8 +277,9 @@
     split_file_list = self.SplitFileName(filename)
     base = split_file_list[0]
     build_board = self.build_info_list[-1][1]
-    build_id_folder = self.build_info_list[-1][2]
-    release_folder = '%s-release' % build_board
+    build_model = self.build_info_list[-1][2]
+    build_id_folder = self.build_info_list[-1][3]
+    release_folder = '%s.%s-release' %(build_model, build_board)
     apfe_path = os.path.join(dir_path, release_folder, build_id_folder)
     if not os.path.exists(apfe_path):
       os.makedirs(apfe_path)
@@ -290,7 +296,7 @@
     build_id = None
     build_board = None
     build_board = self.build_info_list[-1][1]
-    build_id = self.build_info_list[-1][2]
+    build_id = self.build_info_list[-1][3]
     split_file_list = self.SplitFileName(filename)
     basename_xml_file = split_file_list[2]
     basename_xml_gz_file = split_file_list[3]
diff --git a/provingground/cts/upload_cts.py b/provingground/cts/upload_cts.py
index e4914ef..418809c 100755
--- a/provingground/cts/upload_cts.py
+++ b/provingground/cts/upload_cts.py
@@ -103,16 +103,19 @@
   def PrintGsutilLinks(self, dir_path):
     """Prints gsutil links to upload results to CTS and APFE buckets.
 
+       Sample APFE:board.board for non-unibuild.
+       Sample APFE:model.board for unibuild.
+
     Args:
       dir_path: Results directory path.
     """
     for item in self.build_info_list:
       if self.test_board_name != item[1]:
-        print('gsutil cp -r {0}/{1}-release/ gs://chromeos-cts-apfe/'
-              .format(dir_path, item[1]))
+        print('gsutil cp -r {0}/{1}.{2}-release/ gs://chromeos-cts-apfe/'
+              .format(dir_path, item[2], item[1]))
         print('gsutil cp -r {0}/{1}_{2}/ '
               'gs://chromeos-cts-results/manual'
-              .format(dir_path, item[2], item[1]))
+              .format(dir_path, item[3], item[1]))
         self.test_board_name = item[1]
 
 
@@ -137,14 +140,15 @@
     summary = tag_list[0]
     build_version = tag_list[1]
     build_board_version = tag_list[2]
-    build_id_type = tag_list[3]
-    test_package_list = tag_list[4]
-    test_package_v = tag_list[5]
-    build_abi_type = tag_list[6]
-    failed = tag_list[7]
-    passed = tag_list[8]
-    test = tag_list[9]
-    name = tag_list[10]
+    build_model_version = tag_list[3]
+    build_id_type = tag_list[4]
+    test_package_list = tag_list[5]
+    test_package_v = tag_list[6]
+    build_abi_type = tag_list[7]
+    failed = tag_list[8]
+    passed = tag_list[9]
+    test = tag_list[10]
+    name = tag_list[11]
     split_file_list = self.SplitFileName(abs_input_file_path)
     basename = split_file_list[1]
     full_base_name = os.path.join(dir_path, basename)
@@ -189,6 +193,7 @@
       self.untested_tests_exist = True
     else:
       build_board = build_info[0].attributes[build_board_version].value
+      build_model = build_info[0].attributes[build_model_version].value
       build_id = build_info[0].attributes[build_id_type].value
       test_package = test_package_list[0].attributes[test_package_v].value
       build_abi = test_package_list[0].attributes[build_abi_type].value
@@ -197,6 +202,7 @@
       test = test[0].attributes[name].value
       self.UpdateBuildInfoList([timestamp,
                                 build_board,
+                                build_model,
                                 build_id,
                                 build_abi,
                                 test_package,
@@ -229,7 +235,7 @@
                           dir_path)
 
         for item in self.build_info_list:
-          build_id = item[2]
+          build_id = item[3]
 
         if build_id == input_build_id:
           self.valid_exist = True
diff --git a/provingground/cts/upload_cts_verifier.py b/provingground/cts/upload_cts_verifier.py
index cb85318..ea4a24f 100755
--- a/provingground/cts/upload_cts_verifier.py
+++ b/provingground/cts/upload_cts_verifier.py
@@ -65,16 +65,19 @@
   def PrintGsutilLinks(self, dir_path):
     """Prints gsutil links to upload results to CTS dashboard and APFE buckets.
 
+       CTS-V APFE :model.board for unibuild.
+       CTS-V APFE :board.board for non-unibuild.
+
     Args:
       dir_path: Results directory path.
     """
     for item in self.build_info_list:
-      gsutil_msg_apfe = ('gsutil cp -r {0}/{1}-release/ '
+      gsutil_msg_apfe = ('gsutil cp -r {0}/{1}.{2}-release/ '
                          'gs://chromeos-ctsverifier-results/'
-                         .format(dir_path, item[1]))
+                         .format(dir_path, item[2], item[1]))
       gsutil_msg_cts = ('gsutil cp -r {0}/{1}_{2}/ '
                         'gs://chromeos-cts-results/ctsVerifier'
-                        .format(dir_path, item[2], item[1]))
+                        .format(dir_path, item[3], item[1]))
       print(self.BOLD +
             self.C_PURPLE +
             gsutil_msg_cts +
@@ -129,8 +132,9 @@
     result = tag_list[1]
     suite_version = tag_list[2]
     build_board = tag_list[3]
-    build_id_n = tag_list[4]
-    test = tag_list[5]
+    build_model = tag_list[4]
+    build_id_n = tag_list[5]
+    test = tag_list[6]
     split_file_list = self.SplitFileName(abs_input_file_path)
     basename = split_file_list[1]
     full_base_name = os.path.join(dir_path, basename)
@@ -145,10 +149,11 @@
     verifier_info = xml_doc.getElementsByTagName(result)
     suite_version = verifier_info[0].attributes[suite_version].value
     build_board = build[0].attributes[build_board].value
+    build_model = build[0].attributes[build_model].value
     build_id = build[0].attributes[build_id_n].value
     tests = xml_doc.getElementsByTagName(test)
     self.UpdateBuildInfoList(
-        [basename, build_board, build_id, suite_version])
+        [basename, build_board, build_model, build_id, suite_version])
     return tests
 
   def ProcessFilesToUpload(self, input_build_id, dir_path):
@@ -171,7 +176,7 @@
         self.ExtractZipFile(full_file, dir_path)
         tests = self.ParseXmlFile(the_file, dir_path)
         for item in self.build_info_list:
-          build_id = item[2]
+          build_id = item[3]
         if build_id == input_build_id:
           self.valid_files_exist = True
           self.failed_tests_exist = False