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

Side by Side Diff: third_party/boto/tests/unit/cloudsearch2/test_document.py

Issue 698893003: Update checked in version of gsutil to version 4.6 (Closed) Base URL: http://dart.googlecode.com/svn/third_party/gsutil/
Patch Set: Created 6 years, 1 month 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 | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
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.cloudsearch2.document import DocumentServiceConnection
11 from boto.cloudsearch2.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 "2013-01-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", {"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['type'], 'add')
51
52 def test_cloudsearch_add_single_basic(self):
53 """
54 Check that a simple add document sends correct document metadata to
55 AWS.
56 """
57 document = DocumentServiceConnection(
58 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
59 document.add("1234", {"id": "1234", "title": "Title 1",
60 "category": ["cat_a", "cat_b", "cat_c"]})
61 document.commit()
62
63 args = json.loads(HTTPretty.last_request.body)[0]
64
65 self.assertEqual(args['id'], '1234')
66 self.assertEqual(args['type'], 'add')
67
68 def test_cloudsearch_add_single_fields(self):
69 """
70 Check that a simple add document sends the actual document to AWS.
71 """
72 document = DocumentServiceConnection(
73 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
74 document.add("1234", {"id": "1234", "title": "Title 1",
75 "category": ["cat_a", "cat_b", "cat_c"]})
76 document.commit()
77
78 args = json.loads(HTTPretty.last_request.body)[0]
79
80 self.assertEqual(args['fields']['category'], ['cat_a', 'cat_b',
81 'cat_c'])
82 self.assertEqual(args['fields']['id'], '1234')
83 self.assertEqual(args['fields']['title'], 'Title 1')
84
85 def test_cloudsearch_add_single_result(self):
86 """
87 Check that the reply from adding a single document is correctly parsed.
88 """
89 document = DocumentServiceConnection(
90 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
91 document.add("1234", {"id": "1234", "title": "Title 1",
92 "category": ["cat_a", "cat_b", "cat_c"]})
93 doc = document.commit()
94
95 self.assertEqual(doc.status, 'success')
96 self.assertEqual(doc.adds, 1)
97 self.assertEqual(doc.deletes, 0)
98
99 self.assertEqual(doc.doc_service, document)
100
101
102 class CloudSearchDocumentMultipleAddTest(CloudSearchDocumentTest):
103
104 response = {
105 'status': 'success',
106 'adds': 3,
107 'deletes': 0,
108 }
109
110 objs = {
111 '1234': {
112 'fields': {"id": "1234", "title": "Title 1",
113 "category": ["cat_a", "cat_b", "cat_c"]}},
114 '1235': {
115 'fields': {"id": "1235", "title": "Title 2",
116 "category": ["cat_b", "cat_c",
117 "cat_d"]}},
118 '1236': {
119 'fields': {"id": "1236", "title": "Title 3",
120 "category": ["cat_e", "cat_f", "cat_g"]}},
121 }
122
123
124 def test_cloudsearch_add_basics(self):
125 """Check that multiple documents are added correctly to AWS"""
126 document = DocumentServiceConnection(
127 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
128 for (key, obj) in self.objs.items():
129 document.add(key, obj['fields'])
130 document.commit()
131
132 args = json.loads(HTTPretty.last_request.body)
133
134 for arg in args:
135 self.assertTrue(arg['id'] in self.objs)
136 self.assertEqual(arg['fields']['id'],
137 self.objs[arg['id']]['fields']['id'])
138 self.assertEqual(arg['fields']['title'],
139 self.objs[arg['id']]['fields']['title'])
140 self.assertEqual(arg['fields']['category'],
141 self.objs[arg['id']]['fields']['category'])
142
143 def test_cloudsearch_add_results(self):
144 """
145 Check that the result from adding multiple documents is parsed
146 correctly.
147 """
148 document = DocumentServiceConnection(
149 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
150 for (key, obj) in self.objs.items():
151 document.add(key, obj['fields'])
152 doc = document.commit()
153
154 self.assertEqual(doc.status, 'success')
155 self.assertEqual(doc.adds, len(self.objs))
156 self.assertEqual(doc.deletes, 0)
157
158
159 class CloudSearchDocumentDelete(CloudSearchDocumentTest):
160
161 response = {
162 'status': 'success',
163 'adds': 0,
164 'deletes': 1,
165 }
166
167 def test_cloudsearch_delete(self):
168 """
169 Test that the request for a single document deletion is done properly.
170 """
171 document = DocumentServiceConnection(
172 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
173 document.delete("5")
174 document.commit()
175 args = json.loads(HTTPretty.last_request.body)[0]
176
177 self.assertEqual(args['type'], 'delete')
178 self.assertEqual(args['id'], '5')
179
180 def test_cloudsearch_delete_results(self):
181 """
182 Check that the result of a single document deletion is parsed properly.
183 """
184 document = DocumentServiceConnection(
185 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
186 document.delete("5")
187 doc = document.commit()
188
189 self.assertEqual(doc.status, 'success')
190 self.assertEqual(doc.adds, 0)
191 self.assertEqual(doc.deletes, 1)
192
193
194 class CloudSearchDocumentDeleteMultiple(CloudSearchDocumentTest):
195 response = {
196 'status': 'success',
197 'adds': 0,
198 'deletes': 2,
199 }
200
201 def test_cloudsearch_delete_multiples(self):
202 document = DocumentServiceConnection(
203 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
204 document.delete("5")
205 document.delete("6")
206 document.commit()
207 args = json.loads(HTTPretty.last_request.body)
208
209 self.assertEqual(len(args), 2)
210 for arg in args:
211 self.assertEqual(arg['type'], 'delete')
212
213
214 class CloudSearchSDFManipulation(CloudSearchDocumentTest):
215 response = {
216 'status': 'success',
217 'adds': 1,
218 'deletes': 0,
219 }
220
221
222 def test_cloudsearch_initial_sdf_is_blank(self):
223 document = DocumentServiceConnection(
224 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
225
226 self.assertEqual(document.get_sdf(), '[]')
227
228 def test_cloudsearch_single_document_sdf(self):
229 document = DocumentServiceConnection(
230 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
231
232 document.add("1234", {"id": "1234", "title": "Title 1",
233 "category": ["cat_a", "cat_b", "cat_c"]})
234
235 self.assertNotEqual(document.get_sdf(), '[]')
236
237 document.clear_sdf()
238
239 self.assertEqual(document.get_sdf(), '[]')
240
241 class CloudSearchBadSDFTesting(CloudSearchDocumentTest):
242 response = {
243 'status': 'success',
244 'adds': 1,
245 'deletes': 0,
246 }
247
248 def test_cloudsearch_erroneous_sdf(self):
249 original = boto.log.error
250 boto.log.error = MagicMock()
251 document = DocumentServiceConnection(
252 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
253
254 document.add("1234", {"id": "1234", "title": None,
255 "category": ["cat_a", "cat_b", "cat_c"]})
256
257 document.commit()
258 self.assertNotEqual(len(boto.log.error.call_args_list), 1)
259
260 boto.log.error = original
261
262
263 class CloudSearchDocumentErrorBadUnicode(CloudSearchDocumentTest):
264 response = {
265 'status': 'error',
266 'adds': 0,
267 'deletes': 0,
268 'errors': [{'message': 'Illegal Unicode character in document'}]
269 }
270
271 def test_fake_bad_unicode(self):
272 document = DocumentServiceConnection(
273 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
274 document.add("1234", {"id": "1234", "title": "Title 1",
275 "category": ["cat_a", "cat_b", "cat_c"]})
276 self.assertRaises(EncodingError, document.commit)
277
278
279 class CloudSearchDocumentErrorDocsTooBig(CloudSearchDocumentTest):
280 response = {
281 'status': 'error',
282 'adds': 0,
283 'deletes': 0,
284 'errors': [{'message': 'The Content-Length is too long'}]
285 }
286
287 def test_fake_docs_too_big(self):
288 document = DocumentServiceConnection(
289 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
290 document.add("1234", {"id": "1234", "title": "Title 1",
291 "category": ["cat_a", "cat_b", "cat_c"]})
292
293 self.assertRaises(ContentTooLongError, document.commit)
294
295
296 class CloudSearchDocumentErrorMismatch(CloudSearchDocumentTest):
297 response = {
298 'status': 'error',
299 'adds': 0,
300 'deletes': 0,
301 'errors': [{'message': 'Something went wrong'}]
302 }
303
304 def test_fake_failure(self):
305 document = DocumentServiceConnection(
306 endpoint="doc-demo-userdomain.us-east-1.cloudsearch.amazonaws.com")
307
308 document.add("1234", {"id": "1234", "title": "Title 1",
309 "category": ["cat_a", "cat_b", "cat_c"]})
310
311 self.assertRaises(CommitMismatchError, document.commit)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698