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

Unified Diff: infra_libs/test/httplib2_utils_test.py

Issue 2213143002: Add infra_libs as a bootstrap dependency. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Removed the ugly import hack Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: infra_libs/test/httplib2_utils_test.py
diff --git a/infra_libs/test/httplib2_utils_test.py b/infra_libs/test/httplib2_utils_test.py
deleted file mode 100644
index 21d57354cdffbf5374a612a83877d6bbecc01689..0000000000000000000000000000000000000000
--- a/infra_libs/test/httplib2_utils_test.py
+++ /dev/null
@@ -1,364 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import socket
-import time
-import unittest
-
-import infra_libs
-from infra_libs.ts_mon.common import http_metrics
-from infra_libs import httplib2_utils
-from infra_libs import ts_mon
-
-import httplib2
-import mock
-import oauth2client.client
-
-
-DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data')
-
-
-class LoadJsonCredentialsTest(unittest.TestCase):
- # Everything's good, should not raise any exceptions.
- def test_valid_credentials(self):
- creds = httplib2_utils.load_service_account_credentials(
- 'valid_creds.json',
- service_accounts_creds_root=DATA_DIR)
- self.assertIsInstance(creds, dict)
- self.assertIn('type', creds)
- self.assertIn('client_email', creds)
- self.assertIn('private_key', creds)
-
- # File exists but issue with the content: raises AuthError.
- def test_missing_type(self):
- with self.assertRaises(infra_libs.AuthError):
- httplib2_utils.load_service_account_credentials(
- 'creds_missing_type.json',
- service_accounts_creds_root=DATA_DIR)
-
- def test_wrong_type(self):
- with self.assertRaises(infra_libs.AuthError):
- httplib2_utils.load_service_account_credentials(
- 'creds_wrong_type.json',
- service_accounts_creds_root=DATA_DIR)
-
- def test_missing_client_email(self):
- with self.assertRaises(infra_libs.AuthError):
- httplib2_utils.load_service_account_credentials(
- 'creds_missing_client_email.json',
- service_accounts_creds_root=DATA_DIR)
-
- def test_missing_private_key(self):
- with self.assertRaises(infra_libs.AuthError):
- httplib2_utils.load_service_account_credentials(
- 'creds_missing_private_key.json',
- service_accounts_creds_root=DATA_DIR)
-
- def test_malformed(self):
- with self.assertRaises(infra_libs.AuthError):
- httplib2_utils.load_service_account_credentials(
- 'creds_malformed.json',
- service_accounts_creds_root=DATA_DIR)
-
- # Problem with the file itself
- def test_file_not_found(self):
- with self.assertRaises(IOError):
- httplib2_utils.load_service_account_credentials(
- 'this_file_should_not_exist.json',
- service_accounts_creds_root=DATA_DIR)
-
-
-class GetSignedJwtAssertionCredentialsTest(unittest.TestCase):
- def test_valid_credentials(self):
- creds = infra_libs.get_signed_jwt_assertion_credentials(
- 'valid_creds.json',
- service_accounts_creds_root=DATA_DIR)
- self.assertIsInstance(creds,
- oauth2client.client.SignedJwtAssertionCredentials)
- # A default scope must be provided, we don't care which one
- self.assertTrue(creds.scope)
-
- def test_valid_credentials_with_scope_as_string(self):
- creds = infra_libs.get_signed_jwt_assertion_credentials(
- 'valid_creds.json',
- scope='repo',
- service_accounts_creds_root=DATA_DIR)
- self.assertIsInstance(creds,
- oauth2client.client.SignedJwtAssertionCredentials)
- self.assertIn('repo', creds.scope)
-
- def test_valid_credentials_with_scope_as_list(self):
- creds = infra_libs.get_signed_jwt_assertion_credentials(
- 'valid_creds.json',
- scope=['gist'],
- service_accounts_creds_root=DATA_DIR)
- self.assertIsInstance(creds,
- oauth2client.client.SignedJwtAssertionCredentials)
- self.assertIn('gist', creds.scope)
-
- # Only test one malformed case and rely on LoadJsonCredentialsTest
- # for the other cases.
- def test_malformed_credentials(self):
- with self.assertRaises(infra_libs.AuthError):
- infra_libs.get_signed_jwt_assertion_credentials(
- 'creds_malformed.json',
- service_accounts_creds_root=DATA_DIR)
-
-
-class GetAuthenticatedHttp(unittest.TestCase):
- def test_valid_credentials(self):
- http = infra_libs.get_authenticated_http(
- 'valid_creds.json',
- service_accounts_creds_root=DATA_DIR)
- self.assertIsInstance(http, httplib2.Http)
-
- def test_valid_credentials_authenticated(self):
- http = infra_libs.get_authenticated_http(
- 'valid_creds.json',
- service_accounts_creds_root=DATA_DIR,
- http_identifier='test_case')
- self.assertIsInstance(http, infra_libs.InstrumentedHttp)
-
- # Only test one malformed case and rely on LoadJsonCredentialsTest
- # for the other cases.
- def test_malformed_credentials(self):
- with self.assertRaises(infra_libs.AuthError):
- infra_libs.get_authenticated_http(
- 'creds_malformed.json',
- service_accounts_creds_root=DATA_DIR)
-
-class RetriableHttplib2Test(unittest.TestCase):
- def setUp(self):
- super(RetriableHttplib2Test, self).setUp()
- self.http = infra_libs.RetriableHttp(httplib2.Http())
- self.http._http.request = mock.create_autospec(self.http._http.request,
- spec_set=True)
-
- _MOCK_REQUEST = mock.call('http://foo/', 'GET', None)
-
- def test_authorize(self):
- http = infra_libs.RetriableHttp(httplib2.Http())
- creds = infra_libs.get_signed_jwt_assertion_credentials(
- 'valid_creds.json',
- service_accounts_creds_root=DATA_DIR)
- creds.authorize(http)
-
- def test_delegate_get_attr(self):
- """RetriableHttp should delegate getting attribute except request() to
- Http"""
- self.http._http.clear_credentials = mock.create_autospec(
- self.http._http.clear_credentials, spec_set=True)
- self.http.clear_credentials()
- self.http._http.clear_credentials.assert_called_once_with()
-
- def test_delegate_set_attr(self):
- """RetriableHttp should delegate setting attributes to Http"""
- self.http.ignore_etag = False
- self.assertFalse(self.http.ignore_etag)
- self.assertFalse(self.http._http.ignore_etag)
- self.http.ignore_etag = True
- self.assertTrue(self.http.ignore_etag)
- self.assertTrue(self.http._http.ignore_etag)
-
- @mock.patch('time.sleep', autospec=True)
- def test_succeed(self, _sleep):
- self.http._http.request.return_value = (
- httplib2.Response({'status': 400}), 'content')
- response, _ = self.http.request('http://foo/')
- self.assertEqual(400, response.status)
- self.http._http.request.assert_has_calls([ self._MOCK_REQUEST ])
-
- @mock.patch('time.sleep', autospec=True)
- def test_retry_succeed(self, _sleep):
- self.http._http.request.side_effect = iter([
- (httplib2.Response({'status': 500}), 'content'),
- httplib2.HttpLib2Error,
- (httplib2.Response({'status': 200}), 'content')
- ])
- response, _ = self.http.request('http://foo/')
- self.assertEqual(200, response.status)
- self.http._http.request.assert_has_calls([ self._MOCK_REQUEST ] * 3)
-
- @mock.patch('time.sleep', autospec=True)
- def test_fail_exception(self, _sleep):
- self.http._http.request.side_effect = httplib2.HttpLib2Error()
- self.assertRaises(httplib2.HttpLib2Error, self.http.request, 'http://foo/')
- self.http._http.request.assert_has_calls([ self._MOCK_REQUEST ] * 5)
-
- @mock.patch('time.sleep', autospec=True)
- def test_fail_status_code(self, _sleep):
- self.http._http.request.return_value = (
- httplib2.Response({'status': 500}), 'content')
- response, _ = self.http.request('http://foo/')
- self.assertEqual(500, response.status)
- self.http._http.request.assert_has_calls([ self._MOCK_REQUEST ] * 5)
-
-
-class InstrumentedHttplib2Test(unittest.TestCase):
- def setUp(self):
- super(InstrumentedHttplib2Test, self).setUp()
- self.mock_time = mock.create_autospec(time.time, spec_set=True)
- self.mock_time.return_value = 42
- self.http = infra_libs.InstrumentedHttp('test', time_fn=self.mock_time)
- self.http._request = mock.Mock()
- ts_mon.reset_for_unittest()
-
- def test_success_status(self):
- self.http._request.return_value = (
- httplib2.Response({'status': 200}),
- 'content')
-
- response, _ = self.http.request('http://foo/')
- self.assertEqual(200, response.status)
- self.assertEqual(1, http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2', 'status': 200}))
- self.assertIsNone(http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2', 'status': 404}))
-
- def test_error_status(self):
- self.http._request.return_value = (
- httplib2.Response({'status': 404}),
- 'content')
-
- response, _ = self.http.request('http://foo/')
- self.assertEqual(404, response.status)
- self.assertIsNone(http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2', 'status': 200}))
- self.assertEqual(1, http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2', 'status': 404}))
-
- def test_timeout(self):
- self.http._request.side_effect = socket.timeout
-
- with self.assertRaises(socket.timeout):
- self.http.request('http://foo/')
- self.assertIsNone(http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2', 'status': 200}))
- self.assertEqual(1, http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2',
- 'status': http_metrics.STATUS_TIMEOUT}))
-
- def test_connection_error(self):
- self.http._request.side_effect = socket.error
-
- with self.assertRaises(socket.error):
- self.http.request('http://foo/')
- self.assertIsNone(http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2', 'status': 200}))
- self.assertEqual(1, http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2',
- 'status': http_metrics.STATUS_ERROR}))
-
- def test_exception(self):
- self.http._request.side_effect = httplib2.HttpLib2Error
-
- with self.assertRaises(httplib2.HttpLib2Error):
- self.http.request('http://foo/')
- self.assertIsNone(http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2', 'status': 200}))
- self.assertEqual(1, http_metrics.response_status.get(
- {'name': 'test', 'client': 'httplib2',
- 'status': http_metrics.STATUS_EXCEPTION}))
-
- def test_response_bytes(self):
- self.http._request.return_value = (
- httplib2.Response({'status': 200}),
- 'content')
-
- _, content = self.http.request('http://foo/')
- self.assertEqual('content', content)
- self.assertEqual(1, http_metrics.response_bytes.get(
- {'name': 'test', 'client': 'httplib2'}).count)
- self.assertEqual(7, http_metrics.response_bytes.get(
- {'name': 'test', 'client': 'httplib2'}).sum)
-
- def test_request_bytes(self):
- self.http._request.return_value = (
- httplib2.Response({'status': 200}),
- 'content')
-
- _, content = self.http.request('http://foo/', body='wibblewibble')
- self.assertEqual('content', content)
- self.assertEqual(1, http_metrics.request_bytes.get(
- {'name': 'test', 'client': 'httplib2'}).count)
- self.assertEqual(12, http_metrics.request_bytes.get(
- {'name': 'test', 'client': 'httplib2'}).sum)
-
- def test_duration(self):
- current_time = [4.2]
-
- def time_side_effect():
- ret = current_time[0]
- current_time[0] += 0.3
- return ret
- self.mock_time.side_effect = time_side_effect
-
- self.http._request.return_value = (
- httplib2.Response({'status': 200}),
- 'content')
-
- _, _ = self.http.request('http://foo/')
- self.assertEqual(1, http_metrics.durations.get(
- {'name': 'test', 'client': 'httplib2'}).count)
- self.assertAlmostEqual(300, http_metrics.durations.get(
- {'name': 'test', 'client': 'httplib2'}).sum)
-
-
-class HttpMockTest(unittest.TestCase):
- def test_empty(self):
- http = infra_libs.HttpMock([])
- with self.assertRaises(AssertionError):
- http.request('https://www.google.com', 'GET')
-
- def test_invalid_parameter(self):
- with self.assertRaises(TypeError):
- infra_libs.HttpMock(None)
-
- def test_uris_wrong_length(self):
- with self.assertRaises(ValueError):
- infra_libs.HttpMock([(1, 2)])
-
- def test_uris_wrong_type(self):
- with self.assertRaises(ValueError):
- infra_libs.HttpMock([(None,)])
-
- def test_invalid_uri(self):
- with self.assertRaises(TypeError):
- infra_libs.HttpMock([(1, {'status': '100'}, None)])
-
- def test_invalid_headers(self):
- with self.assertRaises(TypeError):
- infra_libs.HttpMock([('https://www.google.com', None, None)])
-
- def test_headers_without_status(self):
- with self.assertRaises(ValueError):
- infra_libs.HttpMock([('https://www.google.com', {'foo': 'bar'}, None)])
-
- def test_invalid_body(self):
- with self.assertRaises(TypeError):
- infra_libs.HttpMock([('https://www.google.com', {'status': '200'}, 42)])
-
- def test_one_uri(self):
- http = infra_libs.HttpMock([('https://www.google.com',
- {'status': '403'},
- 'bar')])
- response, body = http.request('https://www.google.com', 'GET')
- self.assertIsInstance(response, httplib2.Response)
- self.assertEqual(response.status, 403)
- self.assertEqual(body, 'bar')
-
- def test_two_uris(self):
- http = infra_libs.HttpMock([('https://www.google.com',
- {'status': 200}, 'foo'),
- ('.*', {'status': 404}, '')])
- response, body = http.request('https://mywebserver.woo.hoo', 'GET')
- self.assertIsInstance(response, httplib2.Response)
- self.assertEqual(response.status, 404)
- self.assertEqual(body, '')
-
- self.assertEqual(http.requests_made[0].uri, 'https://mywebserver.woo.hoo')
- self.assertEqual(http.requests_made[0].method, 'GET')
- self.assertEqual(http.requests_made[0].body, None)
- self.assertEqual(http.requests_made[0].headers, None)

Powered by Google App Engine
This is Rietveld 408576698