blob: a30dad238dabc32910558b2a5203d7df933eebf1 [file] [log] [blame]
# Copyright 2016 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
from dashboard.api import api_auth
from dashboard.common import testing_common
from dashboard.pinpoint import test
class AuthTest(test.TestCase):
def _ValidParams(self):
builder_name = 'Mac Builder'
change = '{"commits": [{"repository": "chromium", "git_hash": "git hash"}]}'
target = 'telemetry_perf_tests'
isolate_server = 'https://isolate.server'
isolate_hash = 'a0c28d99182661887feac644317c94fa18eccbbb'
params = {
'builder_name': builder_name,
'change': change,
'isolate_server': isolate_server,
'isolate_map': json.dumps({target: isolate_hash}),
}
return params
def testPost_Anonymous_Whitelisted_Succeeds(self):
testing_common.SetIpWhitelist(['remote_ip'])
self.SetCurrentUserOAuth(None)
self.Post('/api/isolate', self._ValidParams(), status=200)
def testPost_Anonymous_NotWhitelisted_Fails(self):
testing_common.SetIpWhitelist(['invalid'])
self.SetCurrentUserOAuth(None)
self.Post('/api/isolate', self._ValidParams(), status=401)
def testPost_Internal_Oauth_Succeeds(self):
testing_common.SetIpWhitelist(['invalid'])
self.SetCurrentUserOAuth(testing_common.INTERNAL_USER)
self.SetCurrentClientIdOAuth(api_auth.OAUTH_CLIENT_ID_WHITELIST[0])
self.Post('/api/isolate', self._ValidParams(), status=200)
def testPost_External_Oauth_Fails(self):
testing_common.SetIpWhitelist(['invalid'])
self.SetCurrentUserOAuth(testing_common.EXTERNAL_USER)
self.SetCurrentClientIdOAuth(api_auth.OAUTH_CLIENT_ID_WHITELIST[0])
self.Post('/api/isolate', self._ValidParams(), status=403)
class FunctionalityTest(test.TestCase):
def testPostAndGet(self):
testing_common.SetIpWhitelist(['remote_ip'])
builder_name = 'Mac Builder'
change = '{"commits": [{"repository": "chromium", "git_hash": "git hash"}]}'
target = 'telemetry_perf_tests'
isolate_server = 'https://isolate.server'
isolate_hash = 'a0c28d99182661887feac644317c94fa18eccbbb'
params = {
'builder_name': builder_name,
'change': change,
'isolate_server': isolate_server,
'isolate_map': json.dumps({target: isolate_hash}),
}
self.testapp.post('/api/isolate', params, status=200)
params = {
'builder_name': builder_name,
'change': change,
'target': target,
}
response = self.testapp.get('/api/isolate', params, status=200)
expected_body = json.dumps({
'isolate_server': isolate_server,
'isolate_hash': isolate_hash
})
self.assertEqual(response.normal_body, expected_body)
def testGetUnknownIsolate(self):
params = {
'builder_name': 'Mac Builder',
'change':
'{"commits": [{"repository": "chromium", "git_hash": "hash"}]}',
'target': 'not a real target',
}
self.testapp.get('/api/isolate', params, status=404)
def testPostPermissionDenied(self):
testing_common.SetIpWhitelist([])
self.testapp.post('/api/isolate', status=401)
class ParameterValidationTest(test.TestCase):
def testExtraParameter(self):
params = {
'builder_name': 'Mac Builder',
'change':
'{"commits": [{"repository": "chromium", "git_hash": "hash"}]}',
'target': 'telemetry_perf_tests',
'extra_parameter': '',
}
self.testapp.get('/api/isolate', params, status=400)
def testMissingParameter(self):
params = {
'builder_name': 'Mac Builder',
'change':
'{"commits": [{"repository": "chromium", "git_hash": "hash"}]}',
}
self.testapp.get('/api/isolate', params, status=400)
def testEmptyParameter(self):
params = {
'builder_name': 'Mac Builder',
'change':
'{"commits": [{"repository": "chromium", "git_hash": "hash"}]}',
'target': '',
}
self.testapp.get('/api/isolate', params, status=400)
def testBadJson(self):
params = {
'builder_name': 'Mac Builder',
'change': '',
'target': 'telemetry_perf_tests',
}
self.testapp.get('/api/isolate', params, status=400)
def testBadChange(self):
params = {
'builder_name': 'Mac Builder',
'change': '{"commits": [{}]}',
'target': 'telemetry_perf_tests',
}
self.testapp.get('/api/isolate', params, status=400)
def testGetInvalidChangeBecauseOfUnknownRepository(self):
params = {
'builder_name': 'Mac Builder',
'change': '{"commits": [{"repository": "foo", "git_hash": "hash"}]}',
'target': 'telemetry_perf_tests',
}
self.testapp.get('/api/isolate', params, status=400)
def testPostInvalidChangeBecauseOfUnknownRepository(self):
testing_common.SetIpWhitelist(['remote_ip'])
params = {
'builder_name': 'Mac Builder',
'change': '{"commits": [{"repository": "foo", "git_hash": "hash"}]}',
'isolate_map': '{"telemetry_perf_tests": "a0c28d9"}',
}
self.testapp.post('/api/isolate', params, status=400)