trigger_cr50_signing: Validate presence of artifact before submitting

This commit by default will reach out to ensure that the specified
artifact actually exists on the path given. It doesn't check the
content of the artifact. Also if for any reason the user can't
access the artifact an option to disable the verification check is
given.

BUG=chromium:1096113
TEST=./trigger_cr50_signing with args

Change-Id: Ia0b176b66e1a67112babf9031b700b26732f4833
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2274017
Tested-by: George Engelbrecht <engeg@google.com>
Reviewed-by: George Engelbrecht <engeg@google.com>
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Commit-Queue: George Engelbrecht <engeg@google.com>
Auto-Submit: George Engelbrecht <engeg@google.com>
diff --git a/scripts/trigger_cr50_signing.py b/scripts/trigger_cr50_signing.py
index bde508f..11b1de1 100644
--- a/scripts/trigger_cr50_signing.py
+++ b/scripts/trigger_cr50_signing.py
@@ -20,6 +20,7 @@
 from chromite.lib import commandline
 from chromite.lib import cros_build_lib
 from chromite.lib import cros_logging as logging
+from chromite.lib import gs
 
 
 assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
@@ -169,6 +170,12 @@
       'signer_type': _signer_types[options.signer_type],
   }
 
+  gcs = gs.GSContext()
+  if not gcs.Exists(options.archive):
+    logging.error('The archive %s was not found on google storage.',
+                  options.archive)
+    return 1
+
   if options.target != 'node_locked':
     LaunchOne(options.dry_run, builder, properties)
   else:
diff --git a/scripts/trigger_cr50_signing_unittest.py b/scripts/trigger_cr50_signing_unittest.py
index 0246908..6e7f93a 100644
--- a/scripts/trigger_cr50_signing_unittest.py
+++ b/scripts/trigger_cr50_signing_unittest.py
@@ -17,13 +17,14 @@
 from chromite.api.gen.chromiumos import sign_image_pb2
 from chromite.lib import cros_logging as logging
 from chromite.lib import cros_test_lib
+from chromite.lib import gs
 
 
 assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
 
 
 # pylint: disable=protected-access
-
+@mock.patch.object(gs.GSContext, 'Exists', lambda x, y: True)
 class TestLaunchOne(cros_test_lib.RunCommandTempDirTestCase):
   """Tests for the LaunchOne function."""
 
@@ -49,6 +50,7 @@
         self.rc.call_args_list)
 
 
+@mock.patch.object(gs.GSContext, 'Exists', lambda x, y: True)
 class TestMain(cros_test_lib.RunCommandTempDirTestCase):
   """Tests for the main function."""