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

Side by Side Diff: client/tests/isolate_storage_test.py

Issue 2599493002: Rethrow Isolate gRPC proxy exceptions as IOError (Closed)
Patch Set: Created 3 years, 12 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
« no previous file with comments | « client/isolate_storage.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The LUCI Authors. All rights reserved. 2 # Copyright 2014 The LUCI Authors. All rights reserved.
3 # Use of this source code is governed under the Apache License, Version 2.0 3 # Use of this source code is governed under the Apache License, Version 2.0
4 # that can be found in the LICENSE file. 4 # that can be found in the LICENSE file.
5 5
6 import binascii 6 import binascii
7 import time 7 import time
8 import unittest 8 import unittest
9 import sys 9 import sys
10 10
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 self.request = request 110 self.request = request
111 response = isolate_storage.isolate_bot_pb2.FetchBlobsReply() 111 response = isolate_storage.isolate_bot_pb2.FetchBlobsReply()
112 response.status.succeeded = True 112 response.status.succeeded = True
113 response.data.data = str(42) 113 response.data.data = str(42)
114 response.data.offset = 1 114 response.data.offset = 1
115 yield response 115 yield response
116 self.mock(FileServiceStubMock, 'FetchBlobs', FetchBlobs) 116 self.mock(FileServiceStubMock, 'FetchBlobs', FetchBlobs)
117 117
118 s = self.get_server() 118 s = self.get_server()
119 replies = s.fetch('abc123') 119 replies = s.fetch('abc123')
120 got_exception = False 120 with self.assertRaises(IOError):
121 try:
122 _response = replies.next() 121 _response = replies.next()
123 except IOError:
124 got_exception = True
125 self.assertTrue(got_exception)
126 122
127 def testFetchThrowsOnFailure(self): 123 def testFetchThrowsOnFailure(self):
128 """Fetch: if something goes wrong in Isolate, we throw an exception""" 124 """Fetch: if something goes wrong in Isolate, we throw an exception"""
129 def FetchBlobs(self, request, timeout=None): 125 def FetchBlobs(self, request, timeout=None):
130 del timeout 126 del timeout
131 self.request = request 127 self.request = request
132 response = isolate_storage.isolate_bot_pb2.FetchBlobsReply() 128 response = isolate_storage.isolate_bot_pb2.FetchBlobsReply()
133 response.status.succeeded = False 129 response.status.succeeded = False
134 yield response 130 yield response
135 self.mock(FileServiceStubMock, 'FetchBlobs', FetchBlobs) 131 self.mock(FileServiceStubMock, 'FetchBlobs', FetchBlobs)
136 132
137 s = self.get_server() 133 s = self.get_server()
138 replies = s.fetch('abc123') 134 replies = s.fetch('abc123')
139 got_exception = False 135 with self.assertRaises(IOError):
140 try:
141 _response = replies.next() 136 _response = replies.next()
142 except IOError: 137
143 got_exception = True 138 def testFetchThrowsCorrectExceptionOnGrpcFailure(self):
144 self.assertTrue(got_exception) 139 """Fetch: if something goes wrong in gRPC, we throw an IOError"""
140 def FetchBlobs(_self, _request, timeout=None):
141 del timeout
142 raise isolate_storage.grpc.RpcError('proxy died during initial fetch :(')
143 self.mock(FileServiceStubMock, 'FetchBlobs', FetchBlobs)
144
145 s = self.get_server()
146 replies = s.fetch('abc123')
147 with self.assertRaises(IOError):
148 _response = replies.next()
149
150 def testFetchThrowsCorrectExceptionOnStreamingGrpcFailure(self):
151 """Fetch: if something goes wrong in gRPC, we throw an IOError"""
152 def FetchBlobs(self, request, timeout=None):
153 del timeout
154 self.request = request
155 response = isolate_storage.isolate_bot_pb2.FetchBlobsReply()
156 response.status.succeeded = True
157 for i in range(0, 3):
158 if i is 2:
159 raise isolate_storage.grpc.RpcError(
160 'proxy died during fetch stream :(')
161 response.data.data = str(i)
162 response.data.offset = i
163 yield response
164 self.mock(FileServiceStubMock, 'FetchBlobs', FetchBlobs)
165
166 s = self.get_server()
167 with self.assertRaises(IOError):
168 for _response in s.fetch('abc123'):
169 pass
145 170
146 def testPushHappySingleSmall(self): 171 def testPushHappySingleSmall(self):
147 """Push: send one chunk of small data""" 172 """Push: send one chunk of small data"""
148 s = self.get_server() 173 s = self.get_server()
149 i = isolate_storage.Item(digest='abc123', size=4) 174 i = isolate_storage.Item(digest='abc123', size=4)
150 s.push(i, isolate_storage._IsolateServerGrpcPushState(), '1234') 175 s.push(i, isolate_storage._IsolateServerGrpcPushState(), '1234')
151 requests = s._stub.popPushRequests() 176 requests = s._stub.popPushRequests()
152 self.assertEqual(1, len(requests)) 177 self.assertEqual(1, len(requests))
153 self.assertEqual(binascii.unhexlify('abc123'), 178 self.assertEqual(binascii.unhexlify('abc123'),
154 requests[0].data.digest.digest) 179 requests[0].data.digest.digest)
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 """Push: if something goes wrong in Isolate, we throw an exception""" 242 """Push: if something goes wrong in Isolate, we throw an exception"""
218 def PushBlobs(self, request, timeout=None): 243 def PushBlobs(self, request, timeout=None):
219 del request, timeout, self 244 del request, timeout, self
220 response = isolate_storage.isolate_bot_pb2.PushBlobsReply() 245 response = isolate_storage.isolate_bot_pb2.PushBlobsReply()
221 response.status.succeeded = False 246 response.status.succeeded = False
222 return response 247 return response
223 self.mock(FileServiceStubMock, 'PushBlobs', PushBlobs) 248 self.mock(FileServiceStubMock, 'PushBlobs', PushBlobs)
224 249
225 s = self.get_server() 250 s = self.get_server()
226 i = isolate_storage.Item(digest='abc123', size=0) 251 i = isolate_storage.Item(digest='abc123', size=0)
227 got_exception = False 252 with self.assertRaises(IOError):
228 try:
229 s.push(i, isolate_storage._IsolateServerGrpcPushState(), '1234') 253 s.push(i, isolate_storage._IsolateServerGrpcPushState(), '1234')
230 except IOError: 254
231 got_exception = True 255 def testPushThrowsCorrectExceptionOnGrpcFailure(self):
232 self.assertTrue(got_exception) 256 """Push: if something goes wrong in Isolate, we throw an exception"""
257 def PushBlobs(_self, _request, timeout=None):
258 del timeout
259 raise isolate_storage.grpc.RpcError('proxy died during push :(')
260 self.mock(FileServiceStubMock, 'PushBlobs', PushBlobs)
261
262 s = self.get_server()
263 i = isolate_storage.Item(digest='abc123', size=0)
264 with self.assertRaises(IOError):
265 s.push(i, isolate_storage._IsolateServerGrpcPushState(), '1234')
233 266
234 def testContainsHappySimple(self): 267 def testContainsHappySimple(self):
235 """Contains: basic sanity check""" 268 """Contains: basic sanity check"""
236 items = [] 269 items = []
237 for i in range(0, 3): 270 for i in range(0, 3):
238 digest = ''.join(['a', str(i)]) 271 digest = ''.join(['a', str(i)])
239 i = isolate_storage.Item(digest=digest, size=1) 272 i = isolate_storage.Item(digest=digest, size=1)
240 items.append(i) 273 items.append(i)
241 s = self.get_server() 274 s = self.get_server()
242 response = s.contains(items) 275 response = s.contains(items)
(...skipping 23 matching lines...) Expand all
266 digest = ''.join(['a', str(i)]) 299 digest = ''.join(['a', str(i)])
267 i = isolate_storage.Item(digest=digest, size=1) 300 i = isolate_storage.Item(digest=digest, size=1)
268 items.append(i) 301 items.append(i)
269 s = self.get_server() 302 s = self.get_server()
270 response = s.contains(items) 303 response = s.contains(items)
271 self.assertEqual(3, len(response)) 304 self.assertEqual(3, len(response))
272 self.assertTrue(items[0] in response) 305 self.assertTrue(items[0] in response)
273 self.assertTrue(items[1] in response) 306 self.assertTrue(items[1] in response)
274 self.assertTrue(items[2] in response) 307 self.assertTrue(items[2] in response)
275 308
309 def testContainsThrowsCorrectExceptionOnGrpcFailure(self):
310 """Contains: the digests are missing"""
311 def Contains(_self, _request, timeout=None):
312 del timeout
313 raise isolate_storage.grpc.RpcError('proxy died during contains :(')
314 self.mock(FileServiceStubMock, 'Contains', Contains)
315
316 items = []
317 for i in range(0, 3):
318 digest = ''.join(['a', str(i)])
319 i = isolate_storage.Item(digest=digest, size=1)
320 items.append(i)
321 s = self.get_server()
322 with self.assertRaises(IOError):
323 _response = s.contains(items)
276 324
277 325
278 if __name__ == '__main__': 326 if __name__ == '__main__':
279 if not isolate_storage.grpc: 327 if not isolate_storage.grpc:
280 # Don't print to stderr or return error code as this will 328 # Don't print to stderr or return error code as this will
281 # show up as a warning and fail in presubmit. 329 # show up as a warning and fail in presubmit.
282 print('gRPC could not be loaded; skipping tests') 330 print('gRPC could not be loaded; skipping tests')
283 sys.exit(0) 331 sys.exit(0)
284 isolate_storage.isolate_bot_pb2.FileServiceStub = FileServiceStubMock 332 isolate_storage.isolate_bot_pb2.FileServiceStub = FileServiceStubMock
285 test_utils.main() 333 test_utils.main()
OLDNEW
« no previous file with comments | « client/isolate_storage.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698