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

Side by Side Diff: third_party/gsutil/boto/tests/integration/gs/test_versioning.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) 2012, 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 from xml import sax
27
28 from boto import handler
29 from boto.gs import acl
30 from tests.integration.gs.testcase import GSTestCase
31
32
33 class GSVersioningTest(GSTestCase):
34
35 def testVersioningToggle(self):
36 b = self._MakeBucket()
37 self.assertFalse(b.get_versioning_status())
38 b.configure_versioning(True)
39 self.assertTrue(b.get_versioning_status())
40 b.configure_versioning(False)
41 self.assertFalse(b.get_versioning_status())
42
43 def testDeleteVersionedKey(self):
44 b = self._MakeVersionedBucket()
45 k = b.new_key("foo")
46 s1 = "test1"
47 k.set_contents_from_string(s1)
48
49 k = b.get_key("foo")
50 g1 = k.generation
51
52 s2 = "test2"
53 k.set_contents_from_string(s2)
54 k = b.get_key("foo")
55 g2 = k.generation
56
57 versions = list(b.list_versions())
58 self.assertEqual(len(versions), 2)
59 self.assertEqual(versions[0].name, "foo")
60 self.assertEqual(versions[1].name, "foo")
61 generations = [k.generation for k in versions]
62 self.assertIn(g1, generations)
63 self.assertIn(g2, generations)
64
65 # Delete "current" version and make sure that version is no longer
66 # visible from a basic GET call.
67 k = b.get_key("foo")
68 k.delete()
69 self.assertIsNone(b.get_key("foo"))
70
71 # Both old versions should still be there when listed using the versions
72 # query parameter.
73 versions = list(b.list_versions())
74 self.assertEqual(len(versions), 2)
75 self.assertEqual(versions[0].name, "foo")
76 self.assertEqual(versions[1].name, "foo")
77 generations = [k.generation for k in versions]
78 self.assertIn(g1, generations)
79 self.assertIn(g2, generations)
80
81 # Delete generation 2 and make sure it's gone.
82 b.delete_key("foo", generation=g2)
83 versions = list(b.list_versions())
84 self.assertEqual(len(versions), 1)
85 self.assertEqual(versions[0].name, "foo")
86 self.assertEqual(versions[0].generation, g1)
87
88 # Delete generation 1 and make sure it's gone.
89 b.delete_key("foo", generation=g1)
90 versions = list(b.list_versions())
91 self.assertEqual(len(versions), 0)
92
93 def testGetVersionedKey(self):
94 b = self._MakeVersionedBucket()
95 k = b.new_key("foo")
96 s1 = "test1"
97 k.set_contents_from_string(s1)
98
99 k = b.get_key("foo")
100 g1 = k.generation
101 o1 = k.get_contents_as_string()
102 self.assertEqual(o1, s1)
103
104 s2 = "test2"
105 k.set_contents_from_string(s2)
106 k = b.get_key("foo")
107 g2 = k.generation
108 self.assertNotEqual(g2, g1)
109 o2 = k.get_contents_as_string()
110 self.assertEqual(o2, s2)
111
112 k = b.get_key("foo", generation=g1)
113 self.assertEqual(k.get_contents_as_string(), s1)
114 k = b.get_key("foo", generation=g2)
115 self.assertEqual(k.get_contents_as_string(), s2)
116
117 def testVersionedBucketCannedAcl(self):
118 b = self._MakeVersionedBucket()
119 k = b.new_key("foo")
120 s1 = "test1"
121 k.set_contents_from_string(s1)
122
123 k = b.get_key("foo")
124 g1 = k.generation
125
126 s2 = "test2"
127 k.set_contents_from_string(s2)
128 k = b.get_key("foo")
129 g2 = k.generation
130
131 acl1g1 = b.get_acl("foo", generation=g1)
132 acl1g2 = b.get_acl("foo", generation=g2)
133 owner1g1 = acl1g1.owner.id
134 owner1g2 = acl1g2.owner.id
135 self.assertEqual(owner1g1, owner1g2)
136 entries1g1 = acl1g1.entries.entry_list
137 entries1g2 = acl1g2.entries.entry_list
138 self.assertEqual(len(entries1g1), len(entries1g2))
139
140 b.set_acl("public-read", key_name="foo", generation=g1)
141
142 acl2g1 = b.get_acl("foo", generation=g1)
143 acl2g2 = b.get_acl("foo", generation=g2)
144 entries2g1 = acl2g1.entries.entry_list
145 entries2g2 = acl2g2.entries.entry_list
146 self.assertEqual(len(entries2g2), len(entries1g2))
147 public_read_entries1 = [e for e in entries2g1 if e.permission == "READ"
148 and e.scope.type == acl.ALL_USERS]
149 public_read_entries2 = [e for e in entries2g2 if e.permission == "READ"
150 and e.scope.type == acl.ALL_USERS]
151 self.assertEqual(len(public_read_entries1), 1)
152 self.assertEqual(len(public_read_entries2), 0)
153
154 def testVersionedBucketXmlAcl(self):
155 b = self._MakeVersionedBucket()
156 k = b.new_key("foo")
157 s1 = "test1"
158 k.set_contents_from_string(s1)
159
160 k = b.get_key("foo")
161 g1 = k.generation
162
163 s2 = "test2"
164 k.set_contents_from_string(s2)
165 k = b.get_key("foo")
166 g2 = k.generation
167
168 acl1g1 = b.get_acl("foo", generation=g1)
169 acl1g2 = b.get_acl("foo", generation=g2)
170 owner1g1 = acl1g1.owner.id
171 owner1g2 = acl1g2.owner.id
172 self.assertEqual(owner1g1, owner1g2)
173 entries1g1 = acl1g1.entries.entry_list
174 entries1g2 = acl1g2.entries.entry_list
175 self.assertEqual(len(entries1g1), len(entries1g2))
176
177 acl_xml = (
178 '<ACCESSControlList><EntrIes><Entry>' +
179 '<Scope type="AllUsers"></Scope><Permission>READ</Permission>' +
180 '</Entry></EntrIes></ACCESSControlList>')
181 aclo = acl.ACL()
182 h = handler.XmlHandler(aclo, b)
183 sax.parseString(acl_xml, h)
184
185 b.set_acl(aclo, key_name="foo", generation=g1)
186
187 acl2g1 = b.get_acl("foo", generation=g1)
188 acl2g2 = b.get_acl("foo", generation=g2)
189 entries2g1 = acl2g1.entries.entry_list
190 entries2g2 = acl2g2.entries.entry_list
191 self.assertEqual(len(entries2g2), len(entries1g2))
192 public_read_entries1 = [e for e in entries2g1 if e.permission == "READ"
193 and e.scope.type == acl.ALL_USERS]
194 public_read_entries2 = [e for e in entries2g2 if e.permission == "READ"
195 and e.scope.type == acl.ALL_USERS]
196 self.assertEqual(len(public_read_entries1), 1)
197 self.assertEqual(len(public_read_entries2), 0)
198
199 def testVersionedObjectCannedAcl(self):
200 b = self._MakeVersionedBucket()
201 k = b.new_key("foo")
202 s1 = "test1"
203 k.set_contents_from_string(s1)
204
205 k = b.get_key("foo")
206 g1 = k.generation
207
208 s2 = "test2"
209 k.set_contents_from_string(s2)
210 k = b.get_key("foo")
211 g2 = k.generation
212
213 acl1g1 = b.get_acl("foo", generation=g1)
214 acl1g2 = b.get_acl("foo", generation=g2)
215 owner1g1 = acl1g1.owner.id
216 owner1g2 = acl1g2.owner.id
217 self.assertEqual(owner1g1, owner1g2)
218 entries1g1 = acl1g1.entries.entry_list
219 entries1g2 = acl1g2.entries.entry_list
220 self.assertEqual(len(entries1g1), len(entries1g2))
221
222 b.set_acl("public-read", key_name="foo", generation=g1)
223
224 acl2g1 = b.get_acl("foo", generation=g1)
225 acl2g2 = b.get_acl("foo", generation=g2)
226 entries2g1 = acl2g1.entries.entry_list
227 entries2g2 = acl2g2.entries.entry_list
228 self.assertEqual(len(entries2g2), len(entries1g2))
229 public_read_entries1 = [e for e in entries2g1 if e.permission == "READ"
230 and e.scope.type == acl.ALL_USERS]
231 public_read_entries2 = [e for e in entries2g2 if e.permission == "READ"
232 and e.scope.type == acl.ALL_USERS]
233 self.assertEqual(len(public_read_entries1), 1)
234 self.assertEqual(len(public_read_entries2), 0)
235
236 def testCopyVersionedKey(self):
237 b = self._MakeVersionedBucket()
238 k = b.new_key("foo")
239 s1 = "test1"
240 k.set_contents_from_string(s1)
241
242 k = b.get_key("foo")
243 g1 = k.generation
244
245 s2 = "test2"
246 k.set_contents_from_string(s2)
247
248 b2 = self._MakeVersionedBucket()
249 b2.copy_key("foo2", b.name, "foo", src_generation=g1)
250
251 k2 = b2.get_key("foo2")
252 s3 = k2.get_contents_as_string()
253 self.assertEqual(s3, s1)
254
255 def testKeyGenerationUpdatesOnSet(self):
256 b = self._MakeVersionedBucket()
257 k = b.new_key("foo")
258 self.assertIsNone(k.generation)
259 k.set_contents_from_string("test1")
260 g1 = k.generation
261 self.assertRegexpMatches(g1, r'[0-9]+')
262 self.assertEqual(k.meta_generation, '1')
263 k.set_contents_from_string("test2")
264 g2 = k.generation
265 self.assertNotEqual(g1, g2)
266 self.assertRegexpMatches(g2, r'[0-9]+')
267 self.assertGreater(int(g2), int(g1))
268 self.assertEqual(k.meta_generation, '1')
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698