OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Unit tests for rietveld.py.""" | 6 """Unit tests for rietveld.py.""" |
7 | 7 |
| 8 import httplib |
8 import logging | 9 import logging |
9 import os | 10 import os |
10 import socket | 11 import socket |
11 import ssl | 12 import ssl |
| 13 import StringIO |
12 import sys | 14 import sys |
| 15 import tempfile |
13 import time | 16 import time |
14 import traceback | 17 import traceback |
15 import unittest | 18 import unittest |
| 19 import urllib2 |
16 | 20 |
17 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | 21 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
18 | 22 |
19 from testing_support.patches_data import GIT, RAW | 23 from testing_support.patches_data import GIT, RAW |
20 from testing_support import auto_stub | 24 from testing_support import auto_stub |
| 25 from third_party import httplib2 |
21 | 26 |
22 import patch | 27 import patch |
23 import rietveld | 28 import rietveld |
24 | 29 |
25 | 30 |
26 def _api(files): | 31 def _api(files): |
27 """Mock a rietveld api request.""" | 32 """Mock a rietveld api request.""" |
28 return rietveld.json.dumps({'files': files}) | 33 return rietveld.json.dumps({'files': files}) |
29 | 34 |
30 | 35 |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 self.rietveld.post('/api/1234', [('key', 'data')]) | 488 self.rietveld.post('/api/1234', [('key', 'data')]) |
484 self.assertNotEqual(self.sleep_time, 0) | 489 self.assertNotEqual(self.sleep_time, 0) |
485 | 490 |
486 def test_socket_connect_timeout_post(self): | 491 def test_socket_connect_timeout_post(self): |
487 self.mock(self.rietveld.rpc_server, 'Send', MockSocketConnectTimeout) | 492 self.mock(self.rietveld.rpc_server, 'Send', MockSocketConnectTimeout) |
488 self.mock(time, 'sleep', self.MockSleep) | 493 self.mock(time, 'sleep', self.MockSleep) |
489 with self.assertRaises(socket.timeout): | 494 with self.assertRaises(socket.timeout): |
490 self.rietveld.post('/api/1234', [('key', 'data')]) | 495 self.rietveld.post('/api/1234', [('key', 'data')]) |
491 self.assertNotEqual(self.sleep_time, 0) | 496 self.assertNotEqual(self.sleep_time, 0) |
492 | 497 |
| 498 |
| 499 class OAuthRpcServerTest(auto_stub.TestCase): |
| 500 def setUp(self): |
| 501 super(OAuthRpcServerTest, self).setUp() |
| 502 self.rpc_server = rietveld.OAuthRpcServer( |
| 503 'http://www.example.com', 'foo', 'bar') |
| 504 |
| 505 def set_mock_response(self, status): |
| 506 def mock_http_request(*args, **kwargs): |
| 507 return (httplib2.Response({'status': status}), 'body') |
| 508 self.mock(self.rpc_server._http, 'request', mock_http_request) |
| 509 |
| 510 def test_404(self): |
| 511 self.set_mock_response(404) |
| 512 with self.assertRaises(urllib2.HTTPError) as ctx: |
| 513 self.rpc_server.Send('/foo') |
| 514 self.assertEquals(404, ctx.exception.code) |
| 515 |
| 516 def test_200(self): |
| 517 self.set_mock_response(200) |
| 518 ret = self.rpc_server.Send('/foo') |
| 519 self.assertEquals('body', ret) |
| 520 |
| 521 |
| 522 class RietveldOAuthRpcServerTest(auto_stub.TestCase): |
| 523 def setUp(self): |
| 524 super(RietveldOAuthRpcServerTest, self).setUp() |
| 525 with tempfile.NamedTemporaryFile() as private_key_file: |
| 526 self.rietveld = rietveld.JwtOAuth2Rietveld( |
| 527 'http://www.example.com', 'foo', private_key_file.name, maxtries=2) |
| 528 |
| 529 self.mock(time, 'sleep', lambda duration: None) |
| 530 |
| 531 def test_retries_500(self): |
| 532 urls = [] |
| 533 def mock_http_request(url, *args, **kwargs): |
| 534 urls.append(url) |
| 535 return (httplib2.Response({'status': 500}), 'body') |
| 536 self.mock(self.rietveld.rpc_server._http, 'request', mock_http_request) |
| 537 |
| 538 with self.assertRaises(urllib2.HTTPError) as ctx: |
| 539 self.rietveld.get('/foo') |
| 540 self.assertEquals(500, ctx.exception.code) |
| 541 |
| 542 self.assertEqual(2, len(urls)) # maxtries was 2 |
| 543 self.assertEqual(['https://www.example.com/foo'] * 2, urls) |
| 544 |
| 545 def test_does_not_retry_404(self): |
| 546 urls = [] |
| 547 def mock_http_request(url, *args, **kwargs): |
| 548 urls.append(url) |
| 549 return (httplib2.Response({'status': 404}), 'body') |
| 550 self.mock(self.rietveld.rpc_server._http, 'request', mock_http_request) |
| 551 |
| 552 with self.assertRaises(urllib2.HTTPError) as ctx: |
| 553 self.rietveld.get('/foo') |
| 554 self.assertEquals(404, ctx.exception.code) |
| 555 |
| 556 self.assertEqual(1, len(urls)) # doesn't retry |
| 557 |
| 558 def test_retries_404_when_requested(self): |
| 559 urls = [] |
| 560 def mock_http_request(url, *args, **kwargs): |
| 561 urls.append(url) |
| 562 return (httplib2.Response({'status': 404}), 'body') |
| 563 self.mock(self.rietveld.rpc_server._http, 'request', mock_http_request) |
| 564 |
| 565 with self.assertRaises(urllib2.HTTPError) as ctx: |
| 566 self.rietveld.get('/foo', retry_on_404=True) |
| 567 self.assertEquals(404, ctx.exception.code) |
| 568 |
| 569 self.assertEqual(2, len(urls)) # maxtries was 2 |
| 570 |
| 571 def test_socket_timeout(self): |
| 572 urls = [] |
| 573 def mock_http_request(url, *args, **kwargs): |
| 574 urls.append(url) |
| 575 raise socket.error('timed out') |
| 576 self.mock(self.rietveld.rpc_server._http, 'request', mock_http_request) |
| 577 |
| 578 with self.assertRaises(socket.error): |
| 579 self.rietveld.get('/foo') |
| 580 |
| 581 self.assertEqual(2, len(urls)) # maxtries was 2 |
| 582 |
| 583 def test_other_socket_error(self): |
| 584 urls = [] |
| 585 def mock_http_request(url, *args, **kwargs): |
| 586 urls.append(url) |
| 587 raise socket.error('something else') |
| 588 self.mock(self.rietveld.rpc_server._http, 'request', mock_http_request) |
| 589 |
| 590 with self.assertRaises(socket.error): |
| 591 self.rietveld.get('/foo') |
| 592 |
| 593 self.assertEqual(1, len(urls)) |
| 594 |
| 595 |
493 if __name__ == '__main__': | 596 if __name__ == '__main__': |
494 logging.basicConfig(level=[ | 597 logging.basicConfig(level=[ |
495 logging.ERROR, logging.INFO, logging.DEBUG][min(2, sys.argv.count('-v'))]) | 598 logging.ERROR, logging.INFO, logging.DEBUG][min(2, sys.argv.count('-v'))]) |
496 unittest.main() | 599 unittest.main() |
OLD | NEW |