[autotest] Abstract out upload marker file logic

BUG=chromium:715435
TEST=None

Change-Id: I7ab86b06dc86cb18d307ab0e726987ead199a152
Reviewed-on: https://chromium-review.googlesource.com/497722
Commit-Ready: Allen Li <ayatane@chromium.org>
Tested-by: Allen Li <ayatane@chromium.org>
Reviewed-by: Allen Li <ayatane@chromium.org>
diff --git a/site_utils/gs_offloader.py b/site_utils/gs_offloader.py
index bb8b684..8c987b2 100755
--- a/site_utils/gs_offloader.py
+++ b/site_utils/gs_offloader.py
@@ -576,8 +576,7 @@
         metrics_fields = _get_metrics_fields(dir_entry)
         es_metadata = _get_es_metadata(dir_entry)
         try:
-            upload_signal_filename = '%s/.GS_UPLOADED' % (dir_entry,)
-            if not os.path.isfile(upload_signal_filename):
+            if not _is_uploaded(dir_entry):
                 sanitize_dir(dir_entry)
                 if DEFAULT_CTS_RESULTS_GSURI:
                     upload_testresult_files(dir_entry, multiprocessing)
@@ -624,9 +623,9 @@
                             error = True
 
                     if not error:
-                        open(upload_signal_filename, 'a').close()
+                        _mark_uploaded(dir_entry)
 
-            if os.path.isfile(upload_signal_filename):
+            if _is_uploaded(dir_entry):
                 if job_directories.is_job_expired(delete_age, job_complete_time):
                     shutil.rmtree(dir_entry)
 
@@ -707,6 +706,31 @@
     shutil.rmtree(dir_entry)
 
 
+def _is_uploaded(dirpath):
+    """Return whether directory has been uploaded.
+
+    @param dirpath: Directory path string.
+    """
+    return os.path.isfile(_get_uploaded_marker_file(dirpath))
+
+
+def _mark_uploaded(dirpath):
+    """Mark directory as uploaded.
+
+    @param dirpath: Directory path string.
+    """
+    with open(_get_uploaded_marker_file(dirpath), 'a'):
+        pass
+
+
+def _get_uploaded_marker_file(dirpath):
+    """Return path to upload marker file for directory.
+
+    @param dirpath: Directory path string.
+    """
+    return '%s/.GS_UPLOADED' % (dirpath,)
+
+
 def _format_job_for_failure_reporting(job):
     """Formats a _JobDirectory for reporting / logging.
 
diff --git a/site_utils/gs_offloader_unittest.py b/site_utils/gs_offloader_unittest.py
index 0731611..d59d746 100755
--- a/site_utils/gs_offloader_unittest.py
+++ b/site_utils/gs_offloader_unittest.py
@@ -17,6 +17,7 @@
 import time
 import unittest
 
+import mock
 import mox
 
 import common
@@ -820,9 +821,7 @@
 
     def _mock_create_marker_file(self):
         self.mox.StubOutWithMock(__builtin__, 'open')
-        mock_marker_file = self.mox.CreateMock(file)
-        open(mox.IgnoreArg(), 'a').AndReturn(mock_marker_file)
-        mock_marker_file.close()
+        open(mox.IgnoreArg(), 'a').AndReturn(mock.MagicMock())
 
 
     def _mock_offload_dir_calls(self, command, queue_args,