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

Side by Side Diff: tests/rietveld_test.py

Issue 1681333005: Raise exceptions properly on HTTP errors from OAuthRpcServer (which is only used on bots) (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: All 200s are successes Created 4 years, 10 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 | « rietveld.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 (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
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()
OLDNEW
« no previous file with comments | « rietveld.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698