OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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() |
OLD | NEW |