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

Side by Side Diff: third_party/gsutil/gslib/tests/test_parallel_cp.py

Issue 1380943003: Roll version of gsutil to 4.15. (Closed) Base URL: https://github.com/catapult-project/catapult.git@master
Patch Set: rebase Created 5 years 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
OLDNEW
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 # Copyright 2010 Google Inc. All Rights Reserved. 2 # Copyright 2010 Google Inc. All Rights Reserved.
3 # 3 #
4 # Permission is hereby granted, free of charge, to any person obtaining a 4 # Permission is hereby granted, free of charge, to any person obtaining a
5 # copy of this software and associated documentation files (the 5 # copy of this software and associated documentation files (the
6 # "Software"), to deal in the Software without restriction, including 6 # "Software"), to deal in the Software without restriction, including
7 # without limitation the rights to use, copy, modify, merge, publish, dis- 7 # without limitation the rights to use, copy, modify, merge, publish, dis-
8 # tribute, sublicense, and/or sell copies of the Software, and to permit 8 # tribute, sublicense, and/or sell copies of the Software, and to permit
9 # persons to whom the Software is furnished to do so, subject to the fol- 9 # persons to whom the Software is furnished to do so, subject to the fol-
10 # lowing conditions: 10 # lowing conditions:
(...skipping 18 matching lines...) Expand all
29 mock storage service rewrite. 29 mock storage service rewrite.
30 30
31 Tests for relative paths are not included as integration_testcase does not 31 Tests for relative paths are not included as integration_testcase does not
32 support modifying the current working directory. 32 support modifying the current working directory.
33 """ 33 """
34 34
35 import os 35 import os
36 36
37 import gslib.tests.testcase as testcase 37 import gslib.tests.testcase as testcase
38 from gslib.tests.util import ObjectToURI as suri 38 from gslib.tests.util import ObjectToURI as suri
39 from gslib.tests.util import PerformsFileToObjectUpload 39 from gslib.tests.util import SequentialAndParallelTransfer
40 from gslib.util import Retry 40 from gslib.util import Retry
41 41
42 42
43 class TestParallelCp(testcase.GsUtilIntegrationTestCase): 43 class TestParallelCp(testcase.GsUtilIntegrationTestCase):
44 """Unit tests for gsutil naming logic.""" 44 """Unit tests for gsutil naming logic."""
45 45
46 @PerformsFileToObjectUpload 46 @SequentialAndParallelTransfer
47 def testCopyingTopLevelFileToBucket(self): 47 def testCopyingTopLevelFileToBucket(self):
48 """Tests copying one top-level file to a bucket.""" 48 """Tests copying one top-level file to a bucket."""
49 src_file = self.CreateTempFile(file_name='f0') 49 src_file = self.CreateTempFile(file_name='f0')
50 dst_bucket_uri = self.CreateBucket() 50 dst_bucket_uri = self.CreateBucket()
51 self.RunGsUtil(['cp', src_file, suri(dst_bucket_uri)]) 51 self.RunGsUtil(['cp', src_file, suri(dst_bucket_uri)])
52 52
53 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 1) 53 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 1)
54 self.assertEqual(suri(dst_bucket_uri, 'f0'), lines[0]) 54 self.assertEqual(suri(dst_bucket_uri, 'f0'), lines[0])
55 55
56 @PerformsFileToObjectUpload 56 @SequentialAndParallelTransfer
57 def testCopyingMultipleFilesToBucket(self): 57 def testCopyingMultipleFilesToBucket(self):
58 """Tests copying multiple files to a bucket.""" 58 """Tests copying multiple files to a bucket."""
59 src_file0 = self.CreateTempFile(file_name='f0') 59 src_file0 = self.CreateTempFile(file_name='f0')
60 src_file1 = self.CreateTempFile(file_name='f1') 60 src_file1 = self.CreateTempFile(file_name='f1')
61 dst_bucket_uri = self.CreateBucket() 61 dst_bucket_uri = self.CreateBucket()
62 self.RunGsUtil(['cp', src_file0, src_file1, suri(dst_bucket_uri)]) 62 self.RunGsUtil(['cp', src_file0, src_file1, suri(dst_bucket_uri)])
63 63
64 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 2) 64 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 2)
65 self.assertEqual(suri(dst_bucket_uri, 'f0'), lines[0]) 65 self.assertEqual(suri(dst_bucket_uri, 'f0'), lines[0])
66 self.assertEqual(suri(dst_bucket_uri, 'f1'), lines[1]) 66 self.assertEqual(suri(dst_bucket_uri, 'f1'), lines[1])
67 67
68 @PerformsFileToObjectUpload 68 @SequentialAndParallelTransfer
69 def testCopyingNestedFileToBucketSubdir(self): 69 def testCopyingNestedFileToBucketSubdir(self):
70 """Tests copying a nested file to a bucket subdir. 70 """Tests copying a nested file to a bucket subdir.
71 71
72 Tests that we correctly translate local FS-specific delimiters ('\' on 72 Tests that we correctly translate local FS-specific delimiters ('\' on
73 Windows) to bucket delimiter (/). 73 Windows) to bucket delimiter (/).
74 """ 74 """
75 tmpdir = self.CreateTempDir() 75 tmpdir = self.CreateTempDir()
76 subdir = os.path.join(tmpdir, 'subdir') 76 subdir = os.path.join(tmpdir, 'subdir')
77 os.mkdir(subdir) 77 os.mkdir(subdir)
78 src_file = self.CreateTempFile(tmpdir=tmpdir, file_name='obj', contents='') 78 src_file = self.CreateTempFile(tmpdir=tmpdir, file_name='obj', contents='')
79 dst_bucket_uri = self.CreateBucket() 79 dst_bucket_uri = self.CreateBucket()
80 # Make an object under subdir so next copy will treat subdir as a subdir. 80 # Make an object under subdir so next copy will treat subdir as a subdir.
81 self.RunGsUtil(['cp', src_file, suri(dst_bucket_uri, 'subdir/a')]) 81 self.RunGsUtil(['cp', src_file, suri(dst_bucket_uri, 'subdir/a')])
82 self.RunGsUtil(['cp', src_file, suri(dst_bucket_uri, 'subdir')]) 82 self.RunGsUtil(['cp', src_file, suri(dst_bucket_uri, 'subdir')])
83 83
84 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 2) 84 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 2)
85 self.assertEqual(suri(dst_bucket_uri, 'subdir/a'), lines[0]) 85 self.assertEqual(suri(dst_bucket_uri, 'subdir/a'), lines[0])
86 self.assertEqual(suri(dst_bucket_uri, 'subdir/obj'), lines[1]) 86 self.assertEqual(suri(dst_bucket_uri, 'subdir/obj'), lines[1])
87 87
88 @PerformsFileToObjectUpload 88 @SequentialAndParallelTransfer
89 def testCopyingAbsolutePathDirToBucket(self): 89 def testCopyingAbsolutePathDirToBucket(self):
90 """Tests recursively copying absolute path directory to a bucket.""" 90 """Tests recursively copying absolute path directory to a bucket."""
91 dst_bucket_uri = self.CreateBucket() 91 dst_bucket_uri = self.CreateBucket()
92 src_dir_root = self.CreateTempDir(test_files=[ 92 src_dir_root = self.CreateTempDir(test_files=[
93 'f0', 'f1', 'f2.txt', ('dir0', 'dir1', 'nested')]) 93 'f0', 'f1', 'f2.txt', ('dir0', 'dir1', 'nested')])
94 self.RunGsUtil(['cp', '-R', src_dir_root, suri(dst_bucket_uri)]) 94 self.RunGsUtil(['cp', '-R', src_dir_root, suri(dst_bucket_uri)])
95 src_tmpdir = os.path.split(src_dir_root)[1] 95 src_tmpdir = os.path.split(src_dir_root)[1]
96 96
97 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 4) 97 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 4)
98 self.assertEqual(suri(dst_bucket_uri, src_tmpdir, 98 self.assertEqual(suri(dst_bucket_uri, src_tmpdir,
99 'dir0', 'dir1', 'nested'), lines[0]) 99 'dir0', 'dir1', 'nested'), lines[0])
100 self.assertEqual(suri(dst_bucket_uri, src_tmpdir, 'f0'), lines[1]) 100 self.assertEqual(suri(dst_bucket_uri, src_tmpdir, 'f0'), lines[1])
101 self.assertEqual(suri(dst_bucket_uri, src_tmpdir, 'f1'), lines[2]) 101 self.assertEqual(suri(dst_bucket_uri, src_tmpdir, 'f1'), lines[2])
102 self.assertEqual(suri(dst_bucket_uri, src_tmpdir, 'f2.txt'), lines[3]) 102 self.assertEqual(suri(dst_bucket_uri, src_tmpdir, 'f2.txt'), lines[3])
103 103
104 @PerformsFileToObjectUpload 104 @SequentialAndParallelTransfer
105 def testCopyingDirContainingOneFileToBucket(self): 105 def testCopyingDirContainingOneFileToBucket(self):
106 """Tests copying a directory containing 1 file to a bucket. 106 """Tests copying a directory containing 1 file to a bucket.
107 107
108 We test this case to ensure that correct bucket handling isn't dependent 108 We test this case to ensure that correct bucket handling isn't dependent
109 on the copy being treated as a multi-source copy. 109 on the copy being treated as a multi-source copy.
110 """ 110 """
111 dst_bucket_uri = self.CreateBucket() 111 dst_bucket_uri = self.CreateBucket()
112 src_dir = self.CreateTempDir(test_files=[('dir0', 'dir1', 'foo')]) 112 src_dir = self.CreateTempDir(test_files=[('dir0', 'dir1', 'foo')])
113 self.RunGsUtil(['cp', '-R', os.path.join(src_dir, 'dir0', 'dir1'), 113 self.RunGsUtil(['cp', '-R', os.path.join(src_dir, 'dir0', 'dir1'),
114 suri(dst_bucket_uri)]) 114 suri(dst_bucket_uri)])
115 115
116 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 1) 116 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 1)
117 self.assertEqual(suri(dst_bucket_uri, 'dir1', 'foo'), lines[0]) 117 self.assertEqual(suri(dst_bucket_uri, 'dir1', 'foo'), lines[0])
118 118
119 @PerformsFileToObjectUpload 119 @SequentialAndParallelTransfer
120 def testCopyingFileToObjectWithConsecutiveSlashes(self): 120 def testCopyingFileToObjectWithConsecutiveSlashes(self):
121 """Tests copying a file to an object containing consecutive slashes.""" 121 """Tests copying a file to an object containing consecutive slashes."""
122 src_file = self.CreateTempFile(file_name='f0') 122 src_file = self.CreateTempFile(file_name='f0')
123 dst_bucket_uri = self.CreateBucket() 123 dst_bucket_uri = self.CreateBucket()
124 self.RunGsUtil(['cp', src_file, suri(dst_bucket_uri) + '//obj']) 124 self.RunGsUtil(['cp', src_file, suri(dst_bucket_uri) + '//obj'])
125 125
126 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 1) 126 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 1)
127 self.assertEqual(suri(dst_bucket_uri) + '//obj', lines[0]) 127 self.assertEqual(suri(dst_bucket_uri) + '//obj', lines[0])
128 128
129 @PerformsFileToObjectUpload 129 @SequentialAndParallelTransfer
130 def testCopyingObjsAndFilesToBucket(self): 130 def testCopyingObjsAndFilesToBucket(self):
131 """Tests copying objects and files to a bucket.""" 131 """Tests copying objects and files to a bucket."""
132 src_bucket_uri = self.CreateBucket() 132 src_bucket_uri = self.CreateBucket()
133 self.CreateObject(src_bucket_uri, object_name='f1', contents='foo') 133 self.CreateObject(src_bucket_uri, object_name='f1', contents='foo')
134 src_dir = self.CreateTempDir(test_files=['f2']) 134 src_dir = self.CreateTempDir(test_files=['f2'])
135 dst_bucket_uri = self.CreateBucket() 135 dst_bucket_uri = self.CreateBucket()
136 self.RunGsUtil(['cp', '-R', suri(src_bucket_uri, '**'), 136 self.RunGsUtil(['cp', '-R', suri(src_bucket_uri, '**'),
137 '%s%s**' % (src_dir, os.sep), suri(dst_bucket_uri)]) 137 '%s%s**' % (src_dir, os.sep), suri(dst_bucket_uri)])
138 138
139 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 2) 139 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 2)
140 self.assertEqual(suri(dst_bucket_uri, 'f1'), lines[0]) 140 self.assertEqual(suri(dst_bucket_uri, 'f1'), lines[0])
141 self.assertEqual(suri(dst_bucket_uri, 'f2'), lines[1]) 141 self.assertEqual(suri(dst_bucket_uri, 'f2'), lines[1])
142 142
143 @PerformsFileToObjectUpload 143 @SequentialAndParallelTransfer
144 def testCopyingSubdirRecursiveToNonexistentSubdir(self): 144 def testCopyingSubdirRecursiveToNonexistentSubdir(self):
145 """Tests copying a directory with a single file recursively to a bucket. 145 """Tests copying a directory with a single file recursively to a bucket.
146 146
147 The file should end up in a new bucket subdirectory with the file's 147 The file should end up in a new bucket subdirectory with the file's
148 directory structure starting below the recursive copy point, as in Unix cp. 148 directory structure starting below the recursive copy point, as in Unix cp.
149 149
150 Example: 150 Example:
151 filepath: dir1/dir2/foo 151 filepath: dir1/dir2/foo
152 cp -r dir1 dir3 152 cp -r dir1 dir3
153 Results in dir3/dir2/foo being created. 153 Results in dir3/dir2/foo being created.
154 """ 154 """
155 src_dir = self.CreateTempDir() 155 src_dir = self.CreateTempDir()
156 self.CreateTempFile(tmpdir=src_dir + '/dir1/dir2', file_name='foo') 156 self.CreateTempFile(tmpdir=src_dir + '/dir1/dir2', file_name='foo')
157 dst_bucket_uri = self.CreateBucket() 157 dst_bucket_uri = self.CreateBucket()
158 self.RunGsUtil(['cp', '-R', src_dir + '/dir1', 158 self.RunGsUtil(['cp', '-R', src_dir + '/dir1',
159 suri(dst_bucket_uri, 'dir3')]) 159 suri(dst_bucket_uri, 'dir3')])
160 160
161 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 1) 161 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 1)
162 self.assertEqual(suri(dst_bucket_uri, 'dir3/dir2/foo'), lines[0]) 162 self.assertEqual(suri(dst_bucket_uri, 'dir3/dir2/foo'), lines[0])
163 163
164 @PerformsFileToObjectUpload 164 @SequentialAndParallelTransfer
165 def testCopyingWildcardedFilesToBucketSubDir(self): 165 def testCopyingWildcardedFilesToBucketSubDir(self):
166 """Tests copying wildcarded files to a bucket subdir.""" 166 """Tests copying wildcarded files to a bucket subdir."""
167 # Test with and without final slash on dest subdir. 167 # Test with and without final slash on dest subdir.
168 for final_dst_char in ('', '/'): 168 for final_dst_char in ('', '/'):
169 dst_bucket_uri = self.CreateBucket() 169 dst_bucket_uri = self.CreateBucket()
170 self.CreateObject(dst_bucket_uri, object_name='subdir0/existing', 170 self.CreateObject(dst_bucket_uri, object_name='subdir0/existing',
171 contents='foo') 171 contents='foo')
172 self.CreateObject(dst_bucket_uri, object_name='subdir1/existing', 172 self.CreateObject(dst_bucket_uri, object_name='subdir1/existing',
173 contents='foo') 173 contents='foo')
174 src_dir = self.CreateTempDir(test_files=['f0', 'f1', 'f2']) 174 src_dir = self.CreateTempDir(test_files=['f0', 'f1', 'f2'])
(...skipping 11 matching lines...) Expand all
186 return_stdout=True) 186 return_stdout=True)
187 lines = stdout.split('\n') 187 lines = stdout.split('\n')
188 self.assertEqual(5, len(lines)) 188 self.assertEqual(5, len(lines))
189 self.assertEqual(suri(dst_bucket_uri, 'subdir%d' % i, 'existing'), 189 self.assertEqual(suri(dst_bucket_uri, 'subdir%d' % i, 'existing'),
190 lines[0]) 190 lines[0])
191 self.assertEqual(suri(dst_bucket_uri, 'subdir%d' % i, 'f0'), lines[1]) 191 self.assertEqual(suri(dst_bucket_uri, 'subdir%d' % i, 'f0'), lines[1])
192 self.assertEqual(suri(dst_bucket_uri, 'subdir%d' % i, 'f1'), lines[2]) 192 self.assertEqual(suri(dst_bucket_uri, 'subdir%d' % i, 'f1'), lines[2])
193 self.assertEqual(suri(dst_bucket_uri, 'subdir%d' % i, 'f2'), lines[3]) 193 self.assertEqual(suri(dst_bucket_uri, 'subdir%d' % i, 'f2'), lines[3])
194 _Check1() 194 _Check1()
195 195
196 @PerformsFileToObjectUpload 196 @SequentialAndParallelTransfer
197 def testCopyingOneNestedFileToBucketSubDir(self): 197 def testCopyingOneNestedFileToBucketSubDir(self):
198 """Tests copying one nested file to a bucket subdir.""" 198 """Tests copying one nested file to a bucket subdir."""
199 # Test with and without final slash on dest subdir. 199 # Test with and without final slash on dest subdir.
200 for final_dst_char in ('', '/'): 200 for final_dst_char in ('', '/'):
201 201
202 dst_bucket_uri = self.CreateBucket() 202 dst_bucket_uri = self.CreateBucket()
203 self.CreateObject(dst_bucket_uri, object_name='d0/placeholder', 203 self.CreateObject(dst_bucket_uri, object_name='d0/placeholder',
204 contents='foo') 204 contents='foo')
205 self.CreateObject(dst_bucket_uri, object_name='d1/placeholder', 205 self.CreateObject(dst_bucket_uri, object_name='d1/placeholder',
206 contents='foo') 206 contents='foo')
207 207
208 for i in range(2): 208 for i in range(2):
209 src_dir = self.CreateTempDir(test_files=[('d3', 'd4', 'nested', 'f1')]) 209 src_dir = self.CreateTempDir(test_files=[('d3', 'd4', 'nested', 'f1')])
210 self.RunGsUtil(['cp', '-r', suri(src_dir, 'd3'), 210 self.RunGsUtil(['cp', '-r', suri(src_dir, 'd3'),
211 suri(dst_bucket_uri, 'd%d' % i) + final_dst_char]) 211 suri(dst_bucket_uri, 'd%d' % i) + final_dst_char])
212 212
213 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 4) 213 lines = self.AssertNObjectsInBucket(dst_bucket_uri, 4)
214 self.assertEqual(suri(dst_bucket_uri, 'd0', 'd3', 'd4', 'nested', 'f1'), 214 self.assertEqual(suri(dst_bucket_uri, 'd0', 'd3', 'd4', 'nested', 'f1'),
215 lines[0]) 215 lines[0])
216 self.assertEqual(suri(dst_bucket_uri, 'd0', 'placeholder'), lines[1]) 216 self.assertEqual(suri(dst_bucket_uri, 'd0', 'placeholder'), lines[1])
217 self.assertEqual(suri(dst_bucket_uri, 'd1', 'd3', 'd4', 'nested', 'f1'), 217 self.assertEqual(suri(dst_bucket_uri, 'd1', 'd3', 'd4', 'nested', 'f1'),
218 lines[2]) 218 lines[2])
219 self.assertEqual(suri(dst_bucket_uri, 'd1', 'placeholder'), lines[3]) 219 self.assertEqual(suri(dst_bucket_uri, 'd1', 'placeholder'), lines[3])
220 220
OLDNEW
« no previous file with comments | « third_party/gsutil/gslib/tests/test_naming.py ('k') | third_party/gsutil/gslib/tests/test_parallelism_framework.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698