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

Side by Side Diff: py/utils/gs_utils_manualtest.py

Issue 411723002: add only_if_modified param to GSUtils.upload_file() (Closed) Base URL: https://skia.googlesource.com/common.git@master
Patch Set: sleep(2) Created 6 years, 5 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 unified diff | Download patch
« no previous file with comments | « py/utils/gs_utils.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 """Tests for gs_utils.py. 3 """Tests for gs_utils.py.
4 4
5 TODO(epoger): How should we exercise these self-tests? See http://skbug.com/2751 5 TODO(epoger): How should we exercise these self-tests? See http://skbug.com/2751
6 """ 6 """
7 7
8 # System-level imports. 8 # System-level imports.
9 import os 9 import os
10 import posixpath 10 import posixpath
11 import random 11 import random
12 import shutil 12 import shutil
13 import sys 13 import sys
14 import tempfile 14 import tempfile
15 import time
15 16
16 # Local imports. 17 # Local imports.
17 import gs_utils 18 import gs_utils
18 19
19 TEST_BUCKET = 'chromium-skia-testing' 20 TEST_BUCKET = 'chromium-skia-testing'
20 21
21 22
22 def _get_authenticated_gs_handle(): 23 def _get_authenticated_gs_handle():
23 """Returns an instance of GSUtils using ~/.boto for authentication.""" 24 """Returns an instance of GSUtils using ~/.boto for authentication."""
24 try: 25 try:
(...skipping 12 matching lines...) Expand all
37 """Returns a unique directory name suitable for use in Google Storage.""" 38 """Returns a unique directory name suitable for use in Google Storage."""
38 return 'gs_utils_manualtest/%d' % random.randint(0, sys.maxint) 39 return 'gs_utils_manualtest/%d' % random.randint(0, sys.maxint)
39 40
40 41
41 def _test_public_read(): 42 def _test_public_read():
42 """Make sure we can read from public files without .boto file credentials.""" 43 """Make sure we can read from public files without .boto file credentials."""
43 gs = gs_utils.GSUtils() 44 gs = gs_utils.GSUtils()
44 gs.list_bucket_contents(bucket=TEST_BUCKET, subdir=None) 45 gs.list_bucket_contents(bucket=TEST_BUCKET, subdir=None)
45 46
46 47
48 def _test_only_if_modified():
49 """Test only_if_modified param within upload_file()."""
50 gs = _get_authenticated_gs_handle()
51 filename = 'filename'
52 remote_dir = _get_unique_posix_dir()
53 dest_path = posixpath.join(remote_dir, filename)
54 local_dir = tempfile.mkdtemp()
55 try:
56 # Create a file on local disk, and upload it for the first time.
57 local_path = os.path.join(local_dir, filename)
58 with open(local_path, 'w') as f:
59 f.write('original contents')
60 gs.upload_file(source_path=local_path, dest_bucket=TEST_BUCKET,
61 dest_path=dest_path, only_if_modified=True)
62 try:
63 # Re-upload the same file one second later, with only_if_modified=False;
64 # the timestamp should change.
65 old_timestamp = gs.get_last_modified_time(
66 bucket=TEST_BUCKET, path=dest_path)
67 time.sleep(2)
68 gs.upload_file(source_path=local_path, dest_bucket=TEST_BUCKET,
69 dest_path=dest_path, only_if_modified=False)
70 new_timestamp = gs.get_last_modified_time(
71 bucket=TEST_BUCKET, path=dest_path)
72 assert old_timestamp != new_timestamp, '%s != %s' % (
73 old_timestamp, new_timestamp)
74
75 # Re-upload the same file one second later, with only_if_modified=True;
76 # the timestamp should NOT change.
77 old_timestamp = new_timestamp
78 time.sleep(2)
79 gs.upload_file(source_path=local_path, dest_bucket=TEST_BUCKET,
80 dest_path=dest_path, only_if_modified=True)
81 new_timestamp = gs.get_last_modified_time(
82 bucket=TEST_BUCKET, path=dest_path)
83 assert old_timestamp == new_timestamp, '%s == %s' % (
84 old_timestamp, new_timestamp)
85
86 # MODIFY and re-upload the file one second later, with
87 # only_if_modified=True; the timestamp SHOULD change.
88 old_timestamp = new_timestamp
89 with open(local_path, 'w') as f:
90 f.write('modified contents')
91 time.sleep(2)
92 gs.upload_file(source_path=local_path, dest_bucket=TEST_BUCKET,
93 dest_path=dest_path, only_if_modified=True)
94 new_timestamp = gs.get_last_modified_time(
95 bucket=TEST_BUCKET, path=dest_path)
96 assert old_timestamp != new_timestamp, '%s != %s' % (
97 old_timestamp, new_timestamp)
98 finally:
99 # Clean up the remote_dir.
100 gs.delete_file(bucket=TEST_BUCKET, path=dest_path)
101 finally:
102 # Clean up the local dir.
103 shutil.rmtree(local_dir)
104
47 def _test_authenticated_round_trip(): 105 def _test_authenticated_round_trip():
48 gs = _get_authenticated_gs_handle() 106 gs = _get_authenticated_gs_handle()
49 remote_dir = _get_unique_posix_dir() 107 remote_dir = _get_unique_posix_dir()
50 subdir = 'subdir' 108 subdir = 'subdir'
51 filenames_to_upload = ['file1', 'file2'] 109 filenames_to_upload = ['file1', 'file2']
52 110
53 # Upload test files to Google Storage, checking that their fine-grained 111 # Upload test files to Google Storage, checking that their fine-grained
54 # ACLs were set correctly. 112 # ACLs were set correctly.
55 id_type = gs.IdType.GROUP_BY_DOMAIN 113 id_type = gs.IdType.GROUP_BY_DOMAIN
56 id_value = 'chromium.org' 114 id_value = 'chromium.org'
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 assert file_contents == 'contents of %s\n' % filename, ( 257 assert file_contents == 'contents of %s\n' % filename, (
200 '%s == "contents of %s\n"' % (file_contents, filename)) 258 '%s == "contents of %s\n"' % (file_contents, filename))
201 finally: 259 finally:
202 shutil.rmtree(local_dest_dir) 260 shutil.rmtree(local_dest_dir)
203 for filename in filenames: 261 for filename in filenames:
204 gs.delete_file(bucket=TEST_BUCKET, 262 gs.delete_file(bucket=TEST_BUCKET,
205 path=posixpath.join(remote_dir, subdir, filename)) 263 path=posixpath.join(remote_dir, subdir, filename))
206 264
207 265
208 if __name__ == '__main__': 266 if __name__ == '__main__':
267 _test_only_if_modified()
209 _test_public_read() 268 _test_public_read()
210 _test_authenticated_round_trip() 269 _test_authenticated_round_trip()
211 _test_dir_upload_and_download() 270 _test_dir_upload_and_download()
212 # TODO(epoger): Add _test_unauthenticated_access() to make sure we raise 271 # TODO(epoger): Add _test_unauthenticated_access() to make sure we raise
213 # an exception when we try to access without needed credentials. 272 # an exception when we try to access without needed credentials.
OLDNEW
« no previous file with comments | « py/utils/gs_utils.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698