Build API: Add unit tests for package_indexes.

Add unit tests missing from crrev.com/c/2341833.

BUG=chromium:1088059
TEST=unit tests pass

Change-Id: I3b248574cfe0f3cf3668ae896d19cad3fafefb5c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2353528
Tested-by: LaMont Jones <lamontjones@chromium.org>
Commit-Queue: LaMont Jones <lamontjones@chromium.org>
Auto-Submit: LaMont Jones <lamontjones@chromium.org>
Reviewed-by: David Burger <dburger@chromium.org>
diff --git a/api/controller/sysroot_unittest.py b/api/controller/sysroot_unittest.py
index f852abc..454ce51 100644
--- a/api/controller/sysroot_unittest.py
+++ b/api/controller/sysroot_unittest.py
@@ -16,6 +16,7 @@
 from chromite.api.controller import sysroot as sysroot_controller
 from chromite.api.gen.chromite.api import sysroot_pb2
 from chromite.api.gen.chromiumos import common_pb2
+from chromite.lib import binpkg
 from chromite.lib import cros_build_lib
 from chromite.lib import cros_test_lib
 from chromite.lib import osutils
@@ -31,7 +32,7 @@
   """Create function tests."""
 
   def _InputProto(self, build_target=None, profile=None, replace=False,
-                  current=False):
+                  current=False, package_indexes=None):
     """Helper to build and input proto instance."""
     proto = sysroot_pb2.SysrootCreateRequest()
     if build_target:
@@ -42,6 +43,8 @@
       proto.flags.replace = replace
     if current:
       proto.flags.chroot_current = current
+    if package_indexes:
+      proto.package_indexes.extend(package_indexes)
 
     return proto
 
@@ -132,14 +135,28 @@
     profile = 'profile'
     force = True
     upgrade_chroot = False
+    package_indexes = [
+        common_pb2.PackageIndexInfo(
+            snapshot_sha='SHA', snapshot_number=5,
+            build_target=common_pb2.BuildTarget(name=board),
+            location='LOCATION', profile=common_pb2.Profile(name=profile)),
+        common_pb2.PackageIndexInfo(
+            snapshot_sha='SHA2', snapshot_number=4,
+            build_target=common_pb2.BuildTarget(name=board),
+            location='LOCATION2', profile=common_pb2.Profile(name=profile))]
+
     in_proto = self._InputProto(build_target=board, profile=profile,
-                                replace=force, current=not upgrade_chroot)
+                                replace=force, current=not upgrade_chroot,
+                                package_indexes=package_indexes)
     out_proto = self._OutputProto()
     sysroot_controller.Create(in_proto, out_proto, self.api_config)
 
     # Not default value checks.
-    rc_patch.assert_called_with(force=force, upgrade_chroot=upgrade_chroot,
-                                package_indexes=[])
+    rc_patch.assert_called_with(
+        force=force, package_indexes=[
+            binpkg.PackageIndexInfo.from_protobuf(x)
+            for x in package_indexes
+        ], upgrade_chroot=upgrade_chroot)
     self.assertEqual(board, out_proto.sysroot.build_target.name)
     self.assertEqual(sysroot_path, out_proto.sysroot.path)
 
@@ -428,7 +445,8 @@
 
   def _InputProto(self, build_target=None, sysroot_path=None,
                   build_source=False, goma_dir=None, goma_log_dir=None,
-                  goma_stats_file=None, goma_counterz_file=None):
+                  goma_stats_file=None, goma_counterz_file=None,
+                  package_indexes=None):
     """Helper to build an input proto instance."""
     instance = sysroot_pb2.InstallPackagesRequest()
 
@@ -446,6 +464,8 @@
       instance.goma_config.stats_file = goma_stats_file
     if goma_counterz_file:
       instance.goma_config.counterz_file = goma_counterz_file
+    if package_indexes:
+      instance.package_indexes.extend(package_indexes)
 
     return instance
 
@@ -550,6 +570,40 @@
     self.assertFalse(rc)
     self.assertFalse(out_proto.failed_packages)
 
+  def testSuccessPackageIndexes(self):
+    """Test successful call with package_indexes."""
+    # Prevent argument validation error.
+    self.PatchObject(sysroot_lib.Sysroot, 'IsToolchainInstalled',
+                     return_value=True)
+    package_indexes = [
+        common_pb2.PackageIndexInfo(
+            snapshot_sha='SHA', snapshot_number=5,
+            build_target=common_pb2.BuildTarget(name='board'),
+            location='LOCATION', profile=common_pb2.Profile(name='profile')),
+        common_pb2.PackageIndexInfo(
+            snapshot_sha='SHA2', snapshot_number=4,
+            build_target=common_pb2.BuildTarget(name='board'),
+            location='LOCATION2', profile=common_pb2.Profile(name='profile'))]
+
+    in_proto = self._InputProto(build_target=self.build_target,
+                                sysroot_path=self.sysroot,
+                                package_indexes=package_indexes)
+
+    out_proto = self._OutputProto()
+    rc_patch = self.PatchObject(sysroot_service, 'BuildPackagesRunConfig')
+    self.PatchObject(sysroot_service, 'BuildPackages')
+
+    rc = sysroot_controller.InstallPackages(in_proto, out_proto,
+                                            self.api_config)
+    self.assertFalse(rc)
+    rc_patch.assert_called_with(usepkg=True, install_debug_symbols=True,
+                                packages=[],
+                                package_indexes=[
+                                    binpkg.PackageIndexInfo.from_protobuf(x)
+                                    for x in package_indexes
+                                ], use_flags=[], use_goma=False,
+                                incremental_build=False)
+
   def testSuccessWithGomaLogs(self):
     """Test successful call with goma."""
     self._CreateGomaLogFile(self.goma_dir, 'compiler_proxy',