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

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: More fine-tuning 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..ae02dffb27b93e92b131a2df420461058075a774
--- /dev/null
+++ b/appengine/chrome_infra_mon_proxy/test/vm_module_test.py
@@ -0,0 +1,90 @@
+# 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 VMHandlerTest(testing.AppengineTestCase):
+ @property
+ def app_module(self):
+ return vm_module.app
+
+ def test_get(self):
+ response = self.test_app.get('/vm')
+ logging.info('response = %s', response)
+ self.assertEquals(200, response.status_int)
+
+ 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('/vm', '', 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(common, 'get_data', lambda: None)
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/vm', '', headers=headers)
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('500', str(cm.exception))
+
+ # Not all required data is present.
+ self.mock(common, 'get_data', lambda: {'url': 'foo://', 'bad': 'data'})
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/vm', '', 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(common, 'get_data', lambda: {
+ 'url': 'foo://', 'scopes': ['this', 'that'],
+ 'credentials': creds})
+ def execute_mock(self):
+ self.postproc('response', 'content')
+ self.mock(googleapiclient.http.HttpRequest, 'execute', execute_mock)
+
+ # Production server.
+ response = self.test_app.post('/vm', '', 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('/vm', '', headers=headers)
+ logging.info('response = %s', response)
+ self.assertEquals(200, response.status_int)

Powered by Google App Engine
This is Rietveld 408576698