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

Side by Side Diff: third_party/gsutil/boto/tests/integration/gs/test_generation_conditionals.py

Issue 12317103: Added gsutil to depot tools (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: added readme 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 unified diff | Download patch
OLDNEW
(Empty)
1 # -*- coding: utf-8 -*-
2 # Copyright (c) 2013, Google, Inc.
3 # All rights reserved.
4 #
5 # Permission is hereby granted, free of charge, to any person obtaining a
6 # copy of this software and associated documentation files (the
7 # "Software"), to deal in the Software without restriction, including
8 # without limitation the rights to use, copy, modify, merge, publish, dis-
9 # tribute, sublicense, and/or sell copies of the Software, and to permit
10 # persons to whom the Software is furnished to do so, subject to the fol-
11 # lowing conditions:
12 #
13 # The above copyright notice and this permission notice shall be included
14 # in all copies or substantial portions of the Software.
15 #
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
18 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
19 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22 # IN THE SOFTWARE.
23
24 """Unit tests for GS versioning support."""
25
26 import StringIO
27 import os
28 import tempfile
29 from xml import sax
30
31 from boto import handler
32 from boto.exception import GSResponseError
33 from boto.gs.acl import ACL
34 from tests.integration.gs.testcase import GSTestCase
35
36
37 # HTTP Error returned when a generation precondition fails.
38 VERSION_MISMATCH = "412"
39
40
41 class GSGenerationConditionalsTest(GSTestCase):
42
43 def testConditionalSetContentsFromFile(self):
44 b = self._MakeBucket()
45 k = b.new_key("foo")
46 s1 = "test1"
47 fp = StringIO.StringIO(s1)
48 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
49 k.set_contents_from_file(fp, if_generation=999)
50
51 fp = StringIO.StringIO(s1)
52 k.set_contents_from_file(fp, if_generation=0)
53 g1 = k.generation
54
55 s2 = "test2"
56 fp = StringIO.StringIO(s2)
57 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
58 k.set_contents_from_file(fp, if_generation=int(g1)+1)
59
60 fp = StringIO.StringIO(s2)
61 k.set_contents_from_file(fp, if_generation=g1)
62 self.assertEqual(k.get_contents_as_string(), s2)
63
64 def testConditionalSetContentsFromString(self):
65 b = self._MakeBucket()
66 k = b.new_key("foo")
67 s1 = "test1"
68 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
69 k.set_contents_from_string(s1, if_generation=999)
70
71 k.set_contents_from_string(s1, if_generation=0)
72 g1 = k.generation
73
74 s2 = "test2"
75 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
76 k.set_contents_from_string(s2, if_generation=int(g1)+1)
77
78 k.set_contents_from_string(s2, if_generation=g1)
79 self.assertEqual(k.get_contents_as_string(), s2)
80
81 def testConditionalSetContentsFromFilename(self):
82 s1 = "test1"
83 s2 = "test2"
84 f1 = tempfile.NamedTemporaryFile(prefix="boto-gs-test", delete=False)
85 f2 = tempfile.NamedTemporaryFile(prefix="boto-gs-test", delete=False)
86 fname1 = f1.name
87 fname2 = f2.name
88 f1.write(s1)
89 f1.close()
90 f2.write(s2)
91 f2.close()
92
93 try:
94 b = self._MakeBucket()
95 k = b.new_key("foo")
96
97 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
98 k.set_contents_from_filename(fname1, if_generation=999)
99
100 k.set_contents_from_filename(fname1, if_generation=0)
101 g1 = k.generation
102
103 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
104 k.set_contents_from_filename(fname2, if_generation=int(g1)+1)
105
106 k.set_contents_from_filename(fname2, if_generation=g1)
107 self.assertEqual(k.get_contents_as_string(), s2)
108 finally:
109 os.remove(fname1)
110 os.remove(fname2)
111
112 def testBucketConditionalSetAcl(self):
113 b = self._MakeVersionedBucket()
114 k = b.new_key("foo")
115 s1 = "test1"
116 k.set_contents_from_string(s1)
117
118 g1 = k.generation
119 mg1 = k.meta_generation
120 self.assertEqual(str(mg1), "1")
121 b.set_acl("public-read", key_name="foo")
122
123 k = b.get_key("foo")
124 g2 = k.generation
125 mg2 = k.meta_generation
126
127 self.assertEqual(g2, g1)
128 self.assertGreater(mg2, mg1)
129
130 with self.assertRaisesRegexp(ValueError, ("Received if_metageneration "
131 "argument with no "
132 "if_generation argument")):
133 b.set_acl("bucket-owner-full-control", key_name="foo",
134 if_metageneration=123)
135
136 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
137 b.set_acl("bucket-owner-full-control", key_name="foo",
138 if_generation=int(g2) + 1)
139
140 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
141 b.set_acl("bucket-owner-full-control", key_name="foo",
142 if_generation=g2, if_metageneration=int(mg2) + 1)
143
144 b.set_acl("bucket-owner-full-control", key_name="foo", if_generation=g2)
145
146 k = b.get_key("foo")
147 g3 = k.generation
148 mg3 = k.meta_generation
149 self.assertEqual(g3, g2)
150 self.assertGreater(mg3, mg2)
151
152 b.set_acl("public-read", key_name="foo", if_generation=g3,
153 if_metageneration=mg3)
154
155 def testConditionalSetContentsFromStream(self):
156 b = self._MakeBucket()
157 k = b.new_key("foo")
158 s1 = "test1"
159 fp = StringIO.StringIO(s1)
160 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
161 k.set_contents_from_stream(fp, if_generation=999)
162
163 fp = StringIO.StringIO(s1)
164 k.set_contents_from_stream(fp, if_generation=0)
165 g1 = k.generation
166
167 k = b.get_key("foo")
168 s2 = "test2"
169 fp = StringIO.StringIO(s2)
170 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
171 k.set_contents_from_stream(fp, if_generation=int(g1)+1)
172
173 fp = StringIO.StringIO(s2)
174 k.set_contents_from_stream(fp, if_generation=g1)
175 self.assertEqual(k.get_contents_as_string(), s2)
176
177 def testBucketConditionalSetCannedAcl(self):
178 b = self._MakeVersionedBucket()
179 k = b.new_key("foo")
180 s1 = "test1"
181 k.set_contents_from_string(s1)
182
183 g1 = k.generation
184 mg1 = k.meta_generation
185 self.assertEqual(str(mg1), "1")
186 b.set_canned_acl("public-read", key_name="foo")
187
188 k = b.get_key("foo")
189 g2 = k.generation
190 mg2 = k.meta_generation
191
192 self.assertEqual(g2, g1)
193 self.assertGreater(mg2, mg1)
194
195 with self.assertRaisesRegexp(ValueError, ("Received if_metageneration "
196 "argument with no "
197 "if_generation argument")):
198 b.set_canned_acl("bucket-owner-full-control", key_name="foo",
199 if_metageneration=123)
200
201 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
202 b.set_canned_acl("bucket-owner-full-control", key_name="foo",
203 if_generation=int(g2) + 1)
204
205 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
206 b.set_canned_acl("bucket-owner-full-control", key_name="foo",
207 if_generation=g2, if_metageneration=int(mg2) + 1)
208
209 b.set_canned_acl("bucket-owner-full-control", key_name="foo",
210 if_generation=g2)
211
212 k = b.get_key("foo")
213 g3 = k.generation
214 mg3 = k.meta_generation
215 self.assertEqual(g3, g2)
216 self.assertGreater(mg3, mg2)
217
218 b.set_canned_acl("public-read", key_name="foo", if_generation=g3,
219 if_metageneration=mg3)
220
221 def testBucketConditionalSetXmlAcl(self):
222 b = self._MakeVersionedBucket()
223 k = b.new_key("foo")
224 s1 = "test1"
225 k.set_contents_from_string(s1)
226
227 g1 = k.generation
228 mg1 = k.meta_generation
229 self.assertEqual(str(mg1), "1")
230
231 acl_xml = (
232 '<ACCESSControlList><EntrIes><Entry>' +
233 '<Scope type="AllUsers"></Scope><Permission>READ</Permission>' +
234 '</Entry></EntrIes></ACCESSControlList>')
235 acl = ACL()
236 h = handler.XmlHandler(acl, b)
237 sax.parseString(acl_xml, h)
238 acl = acl.to_xml()
239
240 b.set_xml_acl(acl, key_name="foo")
241
242 k = b.get_key("foo")
243 g2 = k.generation
244 mg2 = k.meta_generation
245
246 self.assertEqual(g2, g1)
247 self.assertGreater(mg2, mg1)
248
249 with self.assertRaisesRegexp(ValueError, ("Received if_metageneration "
250 "argument with no "
251 "if_generation argument")):
252 b.set_xml_acl(acl, key_name="foo", if_metageneration=123)
253
254 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
255 b.set_xml_acl(acl, key_name="foo", if_generation=int(g2) + 1)
256
257 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
258 b.set_xml_acl(acl, key_name="foo", if_generation=g2,
259 if_metageneration=int(mg2) + 1)
260
261 b.set_xml_acl(acl, key_name="foo", if_generation=g2)
262
263 k = b.get_key("foo")
264 g3 = k.generation
265 mg3 = k.meta_generation
266 self.assertEqual(g3, g2)
267 self.assertGreater(mg3, mg2)
268
269 b.set_xml_acl(acl, key_name="foo", if_generation=g3,
270 if_metageneration=mg3)
271
272 def testObjectConditionalSetAcl(self):
273 b = self._MakeVersionedBucket()
274 k = b.new_key("foo")
275 k.set_contents_from_string("test1")
276
277 g1 = k.generation
278 mg1 = k.meta_generation
279 self.assertEqual(str(mg1), "1")
280 k.set_acl("public-read")
281
282 k = b.get_key("foo")
283 g2 = k.generation
284 mg2 = k.meta_generation
285
286 self.assertEqual(g2, g1)
287 self.assertGreater(mg2, mg1)
288
289 with self.assertRaisesRegexp(ValueError, ("Received if_metageneration "
290 "argument with no "
291 "if_generation argument")):
292 k.set_acl("bucket-owner-full-control", if_metageneration=123)
293
294 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
295 k.set_acl("bucket-owner-full-control", if_generation=int(g2) + 1)
296
297 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
298 k.set_acl("bucket-owner-full-control", if_generation=g2,
299 if_metageneration=int(mg2) + 1)
300
301 k.set_acl("bucket-owner-full-control", if_generation=g2)
302
303 k = b.get_key("foo")
304 g3 = k.generation
305 mg3 = k.meta_generation
306 self.assertEqual(g3, g2)
307 self.assertGreater(mg3, mg2)
308
309 k.set_acl("public-read", if_generation=g3, if_metageneration=mg3)
310
311 def testObjectConditionalSetCannedAcl(self):
312 b = self._MakeVersionedBucket()
313 k = b.new_key("foo")
314 k.set_contents_from_string("test1")
315
316 g1 = k.generation
317 mg1 = k.meta_generation
318 self.assertEqual(str(mg1), "1")
319 k.set_canned_acl("public-read")
320
321 k = b.get_key("foo")
322 g2 = k.generation
323 mg2 = k.meta_generation
324
325 self.assertEqual(g2, g1)
326 self.assertGreater(mg2, mg1)
327
328 with self.assertRaisesRegexp(ValueError, ("Received if_metageneration "
329 "argument with no "
330 "if_generation argument")):
331 k.set_canned_acl("bucket-owner-full-control",
332 if_metageneration=123)
333
334 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
335 k.set_canned_acl("bucket-owner-full-control",
336 if_generation=int(g2) + 1)
337
338 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
339 k.set_canned_acl("bucket-owner-full-control", if_generation=g2,
340 if_metageneration=int(mg2) + 1)
341
342 k.set_canned_acl("bucket-owner-full-control", if_generation=g2)
343
344 k = b.get_key("foo")
345 g3 = k.generation
346 mg3 = k.meta_generation
347 self.assertEqual(g3, g2)
348 self.assertGreater(mg3, mg2)
349
350 k.set_canned_acl("public-read", if_generation=g3, if_metageneration=mg3)
351
352 def testObjectConditionalSetXmlAcl(self):
353 b = self._MakeVersionedBucket()
354 k = b.new_key("foo")
355 s1 = "test1"
356 k.set_contents_from_string(s1)
357
358 g1 = k.generation
359 mg1 = k.meta_generation
360 self.assertEqual(str(mg1), "1")
361
362 acl_xml = (
363 '<ACCESSControlList><EntrIes><Entry>' +
364 '<Scope type="AllUsers"></Scope><Permission>READ</Permission>' +
365 '</Entry></EntrIes></ACCESSControlList>')
366 acl = ACL()
367 h = handler.XmlHandler(acl, b)
368 sax.parseString(acl_xml, h)
369 acl = acl.to_xml()
370
371 k.set_xml_acl(acl)
372
373 k = b.get_key("foo")
374 g2 = k.generation
375 mg2 = k.meta_generation
376
377 self.assertEqual(g2, g1)
378 self.assertGreater(mg2, mg1)
379
380 with self.assertRaisesRegexp(ValueError, ("Received if_metageneration "
381 "argument with no "
382 "if_generation argument")):
383 k.set_xml_acl(acl, if_metageneration=123)
384
385 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
386 k.set_xml_acl(acl, if_generation=int(g2) + 1)
387
388 with self.assertRaisesRegexp(GSResponseError, VERSION_MISMATCH):
389 k.set_xml_acl(acl, if_generation=g2, if_metageneration=int(mg2) + 1)
390
391 k.set_xml_acl(acl, if_generation=g2)
392
393 k = b.get_key("foo")
394 g3 = k.generation
395 mg3 = k.meta_generation
396 self.assertEqual(g3, g2)
397 self.assertGreater(mg3, mg2)
398
399 k.set_xml_acl(acl, if_generation=g3, if_metageneration=mg3)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698