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

Unified Diff: appengine/chrome_infra_mon_proxy/test/vm_module_test.py

Issue 928043005: Monitoring proxy for time series data (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Responded to comments Created 5 years, 8 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: appengine/chrome_infra_mon_proxy/test/vm_module_test.py
diff --git a/appengine/chrome_infra_mon_proxy/test/vm_module_test.py b/appengine/chrome_infra_mon_proxy/test/vm_module_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..247e1504fd7c05b8c4fd64490238677a0034bd25
--- /dev/null
+++ b/appengine/chrome_infra_mon_proxy/test/vm_module_test.py
@@ -0,0 +1,146 @@
+# 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 json
+import logging
+import os
+import webtest
+
+import oauth2client.client
+import googleapiclient.http
+from google.appengine.api import app_identity
+from testing_utils import testing
+
+import common
+import vm_module
+
+
+class VMModuleTest(testing.AppengineTestCase):
+ def test_get_config_data(self):
+ self.assertIsNone(vm_module._get_config_data())
+
+ data = common.MonAcqData()
+ class MonAcqMock(object):
+ @classmethod
+ def get_by_id(cls, _key):
+ return data
+
+ self.mock(common, 'MonAcqData', MonAcqMock)
+ self.assertIsInstance(vm_module._get_config_data(), dict)
+
+ def test_get_credentials(self):
+ class CredentialsMock(object):
+ def __init__(self, **kwargs):
+ pass
+ self.mock(oauth2client.client, 'SignedJwtAssertionCredentials',
+ CredentialsMock)
+ creds = {
+ 'client_email': 'we@you.me',
+ 'client_id': 'agent007',
+ 'private_key': 'deadbeafyoudneverguess',
+ 'private_key_id': '!@#$%',
+ }
+ scopes = ['this', 'that']
+ self.assertIsInstance(vm_module._get_credentials(creds, scopes), object)
+
+
+class VMHandlerTest(testing.AppengineTestCase):
+
+ @property
+ def app_module(self):
+ return vm_module.app
+
+ def test_get(self):
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.get('/vm1')
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('405', str(cm.exception))
+
+ def test_post(self):
+ # Authenticated production server.
+ self.mock(os, 'environ', {'SERVER_SOFTWARE': 'GAE production server'})
+ headers = {'X-Appengine-Inbound-Appid': 'my-app-id'}
+
+ # Authentication fails.
+ self.mock(app_identity, 'get_application_id', lambda: 'bad-app-id')
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/vm1', '', headers=headers)
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('403', str(cm.exception))
+
+ # Authentication succeeds.
+ self.mock(app_identity, 'get_application_id', lambda: 'my-app-id')
+
+ # No data is configured.
+ self.mock(vm_module, '_get_config_data', lambda: None)
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/vm1', '', headers=headers)
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('500', str(cm.exception))
+
+ # Not all required data is present.
+ self.mock(vm_module, '_get_config_data',
+ lambda: {'url': 'foo://', 'bad': 'data'})
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/vm1', '', headers=headers)
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('500', str(cm.exception))
+
+ # Credentials are malformed.
+ self.mock(vm_module, '_get_config_data', lambda: {
+ 'url': 'foo://', 'scopes': ['this', 'that'],
+ 'credentials': {'bad': 'value'}})
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/vm1', '', headers=headers)
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('500', str(cm.exception))
+
+ # Data is correct.
+ creds = {
+ 'client_email': 'we@you.me',
+ 'client_id': 'agent007',
+ 'private_key': 'deadbeafyoudneverguess',
+ 'private_key_id': '!@#$%',
+ }
+ class CredentialsMock(object):
+ def __init__(self, **kwargs):
+ pass
+
+ def authorize(self, x):
+ return x
+
+ self.mock(oauth2client.client, 'SignedJwtAssertionCredentials',
+ CredentialsMock)
+ self.mock(vm_module, '_get_config_data', lambda: {
+ 'url': 'foo://', 'scopes': ['this', 'that'],
+ 'credentials': creds})
+
+ class ResponseMock(dict):
+ def __init__(self, status, reason):
+ self.status = status
+ self.reason = reason
+
+ # Production server, unsuccessful request.
+ def execute_mock_bad(self):
+ self.postproc(ResponseMock(404, 'Not OK'), 'content')
+ self.mock(googleapiclient.http.HttpRequest, 'execute', execute_mock_bad)
+
+ response = self.test_app.post('/vm1', '', headers=headers)
+ logging.info('response = %s', response)
+ self.assertEquals(200, response.status_int)
+
+ # Production server, successful request.
+ def execute_mock_good(self):
+ self.postproc(ResponseMock(200, 'OK'), 'content')
+ self.mock(googleapiclient.http.HttpRequest, 'execute', execute_mock_good)
+
+ response = self.test_app.post('/vm1', '', headers=headers)
+ logging.info('response = %s', response)
+ self.assertEquals(200, response.status_int)
+
+ # Dev appserver (for branch coverage).
+ self.mock(os, 'environ', {'SERVER_SOFTWARE': 'Development server'})
+ response = self.test_app.post('/vm1', '', headers=headers)
+ logging.info('response = %s', response)
+ self.assertEquals(200, response.status_int)

Powered by Google App Engine
This is Rietveld 408576698