Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2093)

Unified Diff: tests/upload_to_google_storage_unittests.py

Issue 12042069: Scripts to download files from google storage based on sha1 sums (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/upload_to_google_storage_unittests.py
diff --git a/tests/upload_to_google_storage_unittests.py b/tests/upload_to_google_storage_unittests.py
new file mode 100755
index 0000000000000000000000000000000000000000..8879f5cf8dc515be7518a0a76d5ee6b3522102e1
--- /dev/null
+++ b/tests/upload_to_google_storage_unittests.py
@@ -0,0 +1,165 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Unit tests for upload_to_google_storage.py."""
+
+import optparse
+import os
+import Queue
+import shutil
+import StringIO
+import sys
+import tempfile
+import threading
+import unittest
+
+sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+import upload_to_google_storage
+from download_from_google_storage_unittests import GsutilMock
+
+# ../third_party/gsutil/gsutil
+GSUTIL_DEFAULT_PATH = os.path.join(
+ os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
+ 'third_party', 'gsutil', 'gsutil')
+TEST_DIR = os.path.dirname(os.path.abspath(__file__))
+
+
+class UploadTests(unittest.TestCase):
+ def setUp(self):
+ self.gsutil = GsutilMock(GSUTIL_DEFAULT_PATH)
+ self.temp_dir = tempfile.mkdtemp(prefix='gstools_test')
+ self.base_path = os.path.join(self.temp_dir, 'gstools')
+ shutil.copytree(os.path.join(TEST_DIR, 'gstools'), self.base_path)
+ self.base_url = 'gs://sometesturl'
+ self.parser = optparse.OptionParser()
+ self.ret_codes = Queue.Queue()
+ self.stdout_queue = Queue.Queue()
+ self.lorem_ipsum = os.path.join(self.base_path, 'lorem_ipsum.txt')
+ self.lorem_ipsum_sha1 = '7871c8e24da15bad8b0be2c36edc9dc77e37727f'
+
+ def cleanUp(self):
+ shutil.rmtree(self.temp_dir)
+ sys.stdin = sys.__stdin__
+
+ def test_upload_single_file(self):
+ filenames = [self.lorem_ipsum]
+ output_filename = '%s.sha1' % self.lorem_ipsum
+ code = upload_to_google_storage.upload_to_google_storage(
+ filenames, self.base_url, self.gsutil, True, False, 1, False)
+ self.assertEqual(
+ self.gsutil.history,
+ [('check_call',
+ ('ls', '%s/%s' % (self.base_url, self.lorem_ipsum_sha1))),
+ ('check_call',
+ ('cp', '-q', filenames[0], '%s/%s' % (self.base_url,
+ self.lorem_ipsum_sha1)))])
+ self.assertTrue(os.path.exists(output_filename))
+ self.assertEqual(
+ open(output_filename, 'rb').read(),
+ '7871c8e24da15bad8b0be2c36edc9dc77e37727f')
+ os.remove(output_filename)
+ self.assertEqual(code, 0)
+
+ def test_upload_single_file_remote_exists(self):
+ filenames = [self.lorem_ipsum]
+ output_filename = '%s.sha1' % self.lorem_ipsum
+ etag_string = 'ETag: 634d7c1ed3545383837428f031840a1e'
+ self.gsutil.add_expected(0, '', '')
+ self.gsutil.add_expected(0, etag_string, '')
+ code = upload_to_google_storage.upload_to_google_storage(
+ filenames, self.base_url, self.gsutil, False, False, 1, False)
+ self.assertEqual(
+ self.gsutil.history,
+ [('check_call',
+ ('ls', '%s/%s' % (self.base_url, self.lorem_ipsum_sha1))),
+ ('check_call',
+ ('ls', '-L', '%s/%s' % (self.base_url, self.lorem_ipsum_sha1)))])
+ self.assertTrue(os.path.exists(output_filename))
+ self.assertEqual(
+ open(output_filename, 'rb').read(),
+ '7871c8e24da15bad8b0be2c36edc9dc77e37727f')
+ os.remove(output_filename)
+ self.assertEqual(code, 0)
+
+ def test_upload_worker_errors(self):
+ work_queue = Queue.Queue()
+ work_queue.put((self.lorem_ipsum, self.lorem_ipsum_sha1))
+ work_queue.put((None, None))
+ self.gsutil.add_expected(1, '', '') # For the first ls call.
+ self.gsutil.add_expected(20, '', 'Expected error message')
+ # pylint: disable=W0212
+ upload_to_google_storage._upload_worker(
+ 0,
+ work_queue,
+ self.base_url,
+ self.gsutil,
+ threading.Lock(),
+ False,
+ False,
+ self.stdout_queue,
+ self.ret_codes)
+ expected_ret_codes = [
+ (20,
+ 'Encountered error on uploading %s to %s/%s\nExpected error message' %
+ (self.lorem_ipsum, self.base_url, self.lorem_ipsum_sha1))]
+ self.assertEqual(list(self.ret_codes.queue), expected_ret_codes)
+
+ def test_skip_hashing(self):
+ filenames = [self.lorem_ipsum]
+ output_filename = '%s.sha1' % self.lorem_ipsum
+ fake_hash = '6871c8e24da15bad8b0be2c36edc9dc77e37727f'
+ with open(output_filename, 'wb') as f:
+ f.write(fake_hash) # Fake hash.
+ code = upload_to_google_storage.upload_to_google_storage(
+ filenames, self.base_url, self.gsutil, False, False, 1, True)
+ self.assertEqual(
+ self.gsutil.history,
+ [('check_call',
+ ('ls', '%s/%s' % (self.base_url, fake_hash))),
+ ('check_call',
+ ('ls', '-L', '%s/%s' % (self.base_url, fake_hash))),
+ ('check_call',
+ ('cp', '-q', filenames[0], '%s/%s' % (self.base_url, fake_hash)))])
+ self.assertEqual(
+ open(output_filename, 'rb').read(), fake_hash)
+ os.remove(output_filename)
+ self.assertEqual(code, 0)
+
+ def test_get_targets_no_args(self):
+ try:
+ upload_to_google_storage.get_targets([], self.parser, False)
+ self.fail()
+ except SystemExit, e:
+ self.assertEqual(e.code, 2)
+
+ def test_get_targets_passthrough(self):
+ result = upload_to_google_storage.get_targets(
+ ['a', 'b', 'c', 'd', 'e'],
+ self.parser,
+ False)
+ self.assertEqual(result, ['a', 'b', 'c', 'd', 'e'])
+
+ def test_get_targets_multiple_stdin(self):
+ inputs = ['a', 'b', 'c', 'd', 'e']
+ sys.stdin = StringIO.StringIO(os.linesep.join(inputs))
+ result = upload_to_google_storage.get_targets(
+ ['-'],
+ self.parser,
+ False)
+ self.assertEqual(result, inputs)
+
+ def test_get_targets_multiple_stdin_null(self):
+ inputs = ['a', 'b', 'c', 'd', 'e']
+ sys.stdin = StringIO.StringIO('\0'.join(inputs))
+ result = upload_to_google_storage.get_targets(
+ ['-'],
+ self.parser,
+ True)
+ self.assertEqual(result, inputs)
+
+
+if __name__ == '__main__':
+ unittest.main()

Powered by Google App Engine
This is Rietveld 408576698