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

Side by Side Diff: third_party/gsutil/boto/tests/unit/cloudsearch/test_document.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 #!/usr/bin env python
2
3 from tests.unit import unittest
4 from httpretty import HTTPretty
5 from mock import MagicMock
6
7 import urlparse
8 import json
9
10 from boto.cloudsearch.document import DocumentServiceConnection
11 from boto.cloudsearch.document import CommitMismatchError, EncodingError, \
12 ContentTooLongError, DocumentServiceConnection
13
14 import boto
15
16 class CloudSearchDocumentTest(unittest.TestCase):
17 def setUp(self):
18 HTTPretty.enable()
19 HTTPretty.register_uri(
20 HTTPretty.POST,
21 ("http://doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com/"
22 "2011-02-01/documents/batch"),
23 body=json.dumps(self.response),
24 content_type="application/json")
25
26 def tearDown(self):
27 HTTPretty.disable()
28
29 class CloudSearchDocumentSingleTest(CloudSearchDocumentTest):
30
31 response = {
32 'status': 'success',
33 'adds': 1,
34 'deletes': 0,
35 }
36
37 def test_cloudsearch_add_basics(self):
38 """
39 Check that a simple add document actually sends an add document request
40 to AWS.
41 """
42 document = DocumentServiceConnection(
43 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
44 document.add("1234", 10, {"id": "1234", "title": "Title 1",
45 "category": ["cat_a", "cat_b", "cat_c"]})
46 document.commit()
47
48 args = json.loads(HTTPretty.last_request.body)[0]
49
50 self.assertEqual(args['lang'], 'en')
51 self.assertEqual(args['type'], 'add')
52
53 def test_cloudsearch_add_single_basic(self):
54 """
55 Check that a simple add document sends correct document metadata to
56 AWS.
57 """
58 document = DocumentServiceConnection(
59 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
60 document.add("1234", 10, {"id": "1234", "title": "Title 1",
61 "category": ["cat_a", "cat_b", "cat_c"]})
62 document.commit()
63
64 args = json.loads(HTTPretty.last_request.body)[0]
65
66 self.assertEqual(args['id'], '1234')
67 self.assertEqual(args['version'], 10)
68 self.assertEqual(args['type'], 'add')
69
70 def test_cloudsearch_add_single_fields(self):
71 """
72 Check that a simple add document sends the actual document to AWS.
73 """
74 document = DocumentServiceConnection(
75 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
76 document.add("1234", 10, {"id": "1234", "title": "Title 1",
77 "category": ["cat_a", "cat_b", "cat_c"]})
78 document.commit()
79
80 args = json.loads(HTTPretty.last_request.body)[0]
81
82 self.assertEqual(args['fields']['category'], ['cat_a', 'cat_b',
83 'cat_c'])
84 self.assertEqual(args['fields']['id'], '1234')
85 self.assertEqual(args['fields']['title'], 'Title 1')
86
87 def test_cloudsearch_add_single_result(self):
88 """
89 Check that the reply from adding a single document is correctly parsed.
90 """
91 document = DocumentServiceConnection(
92 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
93 document.add("1234", 10, {"id": "1234", "title": "Title 1",
94 "category": ["cat_a", "cat_b", "cat_c"]})
95 doc = document.commit()
96
97 self.assertEqual(doc.status, 'success')
98 self.assertEqual(doc.adds, 1)
99 self.assertEqual(doc.deletes, 0)
100
101 self.assertEqual(doc.doc_service, document)
102
103
104 class CloudSearchDocumentMultipleAddTest(CloudSearchDocumentTest):
105
106 response = {
107 'status': 'success',
108 'adds': 3,
109 'deletes': 0,
110 }
111
112 objs = {
113 '1234': {
114 'version': 10, 'fields': {"id": "1234", "title": "Title 1",
115 "category": ["cat_a", "cat_b",
116 "cat_c"]}},
117 '1235': {
118 'version': 11, 'fields': {"id": "1235", "title": "Title 2",
119 "category": ["cat_b", "cat_c",
120 "cat_d"]}},
121 '1236': {
122 'version': 12, 'fields': {"id": "1236", "title": "Title 3",
123 "category": ["cat_e", "cat_f",
124 "cat_g"]}},
125 }
126
127
128 def test_cloudsearch_add_basics(self):
129 """Check that multiple documents are added correctly to AWS"""
130 document = DocumentServiceConnection(
131 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
132 for (key, obj) in self.objs.items():
133 document.add(key, obj['version'], obj['fields'])
134 document.commit()
135
136 args = json.loads(HTTPretty.last_request.body)
137
138 for arg in args:
139 self.assertTrue(arg['id'] in self.objs)
140 self.assertEqual(arg['version'], self.objs[arg['id']]['version'])
141 self.assertEqual(arg['fields']['id'],
142 self.objs[arg['id']]['fields']['id'])
143 self.assertEqual(arg['fields']['title'],
144 self.objs[arg['id']]['fields']['title'])
145 self.assertEqual(arg['fields']['category'],
146 self.objs[arg['id']]['fields']['category'])
147
148 def test_cloudsearch_add_results(self):
149 """
150 Check that the result from adding multiple documents is parsed
151 correctly.
152 """
153 document = DocumentServiceConnection(
154 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
155 for (key, obj) in self.objs.items():
156 document.add(key, obj['version'], obj['fields'])
157 doc = document.commit()
158
159 self.assertEqual(doc.status, 'success')
160 self.assertEqual(doc.adds, len(self.objs))
161 self.assertEqual(doc.deletes, 0)
162
163
164 class CloudSearchDocumentDelete(CloudSearchDocumentTest):
165
166 response = {
167 'status': 'success',
168 'adds': 0,
169 'deletes': 1,
170 }
171
172 def test_cloudsearch_delete(self):
173 """
174 Test that the request for a single document deletion is done properly.
175 """
176 document = DocumentServiceConnection(
177 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
178 document.delete("5", "10")
179 document.commit()
180 args = json.loads(HTTPretty.last_request.body)[0]
181
182 self.assertEqual(args['version'], '10')
183 self.assertEqual(args['type'], 'delete')
184 self.assertEqual(args['id'], '5')
185
186 def test_cloudsearch_delete_results(self):
187 """
188 Check that the result of a single document deletion is parsed properly.
189 """
190 document = DocumentServiceConnection(
191 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
192 document.delete("5", "10")
193 doc = document.commit()
194
195 self.assertEqual(doc.status, 'success')
196 self.assertEqual(doc.adds, 0)
197 self.assertEqual(doc.deletes, 1)
198
199
200 class CloudSearchDocumentDeleteMultiple(CloudSearchDocumentTest):
201 response = {
202 'status': 'success',
203 'adds': 0,
204 'deletes': 2,
205 }
206
207 def test_cloudsearch_delete_multiples(self):
208 document = DocumentServiceConnection(
209 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
210 document.delete("5", "10")
211 document.delete("6", "11")
212 document.commit()
213 args = json.loads(HTTPretty.last_request.body)
214
215 self.assertEqual(len(args), 2)
216 for arg in args:
217 self.assertEqual(arg['type'], 'delete')
218
219 if arg['id'] == '5':
220 self.assertEqual(arg['version'], '10')
221 elif arg['id'] == '6':
222 self.assertEqual(arg['version'], '11')
223 else: # Unknown result out of AWS that shouldn't be there
224 self.assertTrue(False)
225
226
227 class CloudSearchSDFManipulation(CloudSearchDocumentTest):
228 response = {
229 'status': 'success',
230 'adds': 1,
231 'deletes': 0,
232 }
233
234
235 def test_cloudsearch_initial_sdf_is_blank(self):
236 document = DocumentServiceConnection(
237 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
238
239 self.assertEqual(document.get_sdf(), '[]')
240
241 def test_cloudsearch_single_document_sdf(self):
242 document = DocumentServiceConnection(
243 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
244
245 document.add("1234", 10, {"id": "1234", "title": "Title 1",
246 "category": ["cat_a", "cat_b", "cat_c"]})
247
248 self.assertNotEqual(document.get_sdf(), '[]')
249
250 document.clear_sdf()
251
252 self.assertEqual(document.get_sdf(), '[]')
253
254 class CloudSearchBadSDFTesting(CloudSearchDocumentTest):
255 response = {
256 'status': 'success',
257 'adds': 1,
258 'deletes': 0,
259 }
260
261 def test_cloudsearch_erroneous_sdf(self):
262 original = boto.log.error
263 boto.log.error = MagicMock()
264 document = DocumentServiceConnection(
265 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
266
267 document.add("1234", 10, {"id": "1234", "title": None,
268 "category": ["cat_a", "cat_b", "cat_c"]})
269
270 document.commit()
271 self.assertNotEqual(len(boto.log.error.call_args_list), 1)
272
273 boto.log.error = original
274
275
276 class CloudSearchDocumentErrorBadUnicode(CloudSearchDocumentTest):
277 response = {
278 'status': 'error',
279 'adds': 0,
280 'deletes': 0,
281 'errors': [{'message': 'Illegal Unicode character in document'}]
282 }
283
284 def test_fake_bad_unicode(self):
285 document = DocumentServiceConnection(
286 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
287 document.add("1234", 10, {"id": "1234", "title": "Title 1",
288 "category": ["cat_a", "cat_b", "cat_c"]})
289 self.assertRaises(EncodingError, document.commit)
290
291
292 class CloudSearchDocumentErrorDocsTooBig(CloudSearchDocumentTest):
293 response = {
294 'status': 'error',
295 'adds': 0,
296 'deletes': 0,
297 'errors': [{'message': 'The Content-Length is too long'}]
298 }
299
300 def test_fake_docs_too_big(self):
301 document = DocumentServiceConnection(
302 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
303 document.add("1234", 10, {"id": "1234", "title": "Title 1",
304 "category": ["cat_a", "cat_b", "cat_c"]})
305
306 self.assertRaises(ContentTooLongError, document.commit)
307
308
309 class CloudSearchDocumentErrorMismatch(CloudSearchDocumentTest):
310 response = {
311 'status': 'error',
312 'adds': 0,
313 'deletes': 0,
314 'errors': [{'message': 'Something went wrong'}]
315 }
316
317 def test_fake_failure(self):
318 document = DocumentServiceConnection(
319 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
320
321 document.add("1234", 10, {"id": "1234", "title": "Title 1",
322 "category": ["cat_a", "cat_b", "cat_c"]})
323
324 self.assertRaises(CommitMismatchError, document.commit)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698