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

Unified Diff: appengine/chrome_infra_mon_proxy/test/admin_handler_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/admin_handler_test.py
diff --git a/appengine/chrome_infra_mon_proxy/test/admin_handler_test.py b/appengine/chrome_infra_mon_proxy/test/admin_handler_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..1a98855bd0b3cead47c2e0c9e2f70808ed7da819
--- /dev/null
+++ b/appengine/chrome_infra_mon_proxy/test/admin_handler_test.py
@@ -0,0 +1,131 @@
+# 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 collections
+import logging
+import webtest
+
+from testing_utils import testing
+from google.appengine.api import users
+
+import admin_handler
+import common
+import main
+
+class AdminTest(testing.AppengineTestCase):
ghost stip (do not use) 2015/04/14 00:36:43 nit: insert another newline
Sergey Berezin (google) 2015/04/16 04:39:07 Done.
+ @property
+ def app_module(self):
+ return main.app
+
+ def test_admin_page(self):
+ # Unauthorized GET request: redirect to login page.
+ response = self.test_app.get('/admin/')
+ logging.info('response = %s', response)
+ self.assertEquals(302, response.status_int)
+ # Unauthorized POST request: 403.
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/admin/')
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('403', str(cm.exception))
+
+ self.mock(users, 'is_current_user_admin', lambda: True)
+
+ # Authorized GET request.
+ response = self.test_app.get('/admin/')
+ logging.info('response = %s', response)
+ self.assertEquals(200, response.status_int)
+ # Authorized POST request: 403 (POST not allowed on /admin/).
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/admin/')
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('403', str(cm.exception))
+
+ def test_set_credentials(self):
+ class MonAcqDataMock(object):
+ def __init__(self, data):
+ self.data = data
+
+ def get_by_id(self, _id):
+ return self.data
+
+ def get_or_insert(self, _id):
+ return self.data
+
+ class DataMock(object):
+ def __init__(self, credentials=None, url='http://',
+ scopes=None, headers=None):
+ self.credentials = credentials or {}
+ self.url = url
+ self.scopes = scopes or ['a', 'b']
+ self.headers = headers or {}
+ self.updated = False
+
+ def to_dict(self):
+ return {
+ 'credentials': self.credentials,
+ 'url': self.url,
+ 'scopes': self.scopes,
+ 'headers': self.headers,
+ }
+
+ def put(self):
+ self.updated = True
+ logging.debug('Saving NDB data: %s', self.to_dict())
+
+ # Unauthorized GET request: redirect to login page.
+ response = self.test_app.get('/admin/set-credentials')
+ logging.info('response = %s', response)
+ self.assertEquals(302, response.status_int)
+
+ # Unauthorized POST request: 403.
+ with self.assertRaises(webtest.AppError) as cm:
+ self.test_app.post('/admin/set-credentials')
+ logging.info('exception = %s', cm.exception)
+ self.assertIn('403', str(cm.exception))
+
+ # Authorized GET request, no data in NDB.
+ self.mock(users, 'is_current_user_admin', lambda: True)
+ self.mock(common, 'MonAcqData', MonAcqDataMock(None))
+ response = self.test_app.get('/admin/set-credentials')
+ self.assertEquals(200, response.status_int)
+
+ # Authorized GET request, data exists in NDB.
+ self.mock(common, 'MonAcqData', MonAcqDataMock(DataMock()))
+ response = self.test_app.get('/admin/set-credentials')
+ self.assertEquals(200, response.status_int)
+
+ # POST request with bad data (for coverage of serialize()).
+ self.mock(common, 'MonAcqData', MonAcqDataMock(DataMock(headers=set('a'))))
+ response = self.test_app.post('/admin/set-credentials')
+ self.assertEquals(200, response.status_int)
+
+ # Valid POST request.
+ data = DataMock()
+ self.mock(common, 'MonAcqData', MonAcqDataMock(data))
+ params = collections.OrderedDict([
+ ('url', 'https://new.url'),
+ ('credentials', '{"client_id": "john@doe"}'),
+ ('scopes', 'foo bar'),
+ ])
+ response = self.test_app.post('/admin/set-credentials', params)
+ self.assertEquals(200, response.status_int)
+ self.assertTrue(data.updated)
+
+ # Invalid POST request.
+ data = DataMock()
+ self.mock(common, 'MonAcqData', MonAcqDataMock(data))
+ params = collections.OrderedDict([
+ ('credentials', '{"client_id": '), # Bad JSON.
+ ])
+ response = self.test_app.post('/admin/set-credentials', params)
+ self.assertEquals(200, response.status_int)
+ self.assertFalse(data.updated)
+
+ def test_deserialize(self):
+ # Mostly covered by other tests, except for the unsupported type case.
+ class UnsupportedType(object):
+ pass
+
+ with self.assertRaises(ValueError):
+ admin_handler.deserialize('blah', UnsupportedType)

Powered by Google App Engine
This is Rietveld 408576698