diff --git a/scripts/run_gce_system_tests.py b/scripts/run_gce_system_tests.py new file mode 100644 index 0000000..7af1902 --- /dev/null +++ b/scripts/run_gce_system_tests.py @@ -0,0 +1,58 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +import unittest + +import httplib2 +from six.moves import http_client +from six.moves import urllib + +from oauth2client import GOOGLE_TOKEN_INFO_URI +from oauth2client.client import GoogleCredentials +from oauth2client.contrib.gce import AppAssertionCredentials + + +class TestComputeEngine(unittest.TestCase): + + def test_application_default(self): + default_creds = GoogleCredentials.get_application_default() + self.assertIsInstance(default_creds, AppAssertionCredentials) + + def test_token_info(self): + credentials = AppAssertionCredentials([]) + http = httplib2.Http() + + # First refresh to get the access token. + self.assertIsNone(credentials.access_token) + credentials.refresh(http) + self.assertIsNotNone(credentials.access_token) + + # Then check the access token against the token info API. + query_params = {'access_token': credentials.access_token} + token_uri = (GOOGLE_TOKEN_INFO_URI + '?' + + urllib.parse.urlencode(query_params)) + response, content = http.request(token_uri) + self.assertEqual(response.status, http_client.OK) + + content = content.decode('utf-8') + payload = json.loads(content) + self.assertTrue(payload['email'].endswith( + '-compute@developer.gserviceaccount.com')) + self.assertEqual(payload['access_type'], 'offline') + self.assertLessEqual(int(payload['expires_in']), 3600) + + +if __name__ == '__main__': + unittest.main() diff --git a/scripts/run_system_tests.py b/scripts/run_system_tests.py index 02fb203..f955e3b 100644 --- a/scripts/run_system_tests.py +++ b/scripts/run_system_tests.py @@ -1,3 +1,17 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import json import os diff --git a/tox.ini b/tox.ini index 28f1405..fbff800 100644 --- a/tox.ini +++ b/tox.ini @@ -137,3 +137,12 @@ deps = cryptography>=1.0 pyopenssl>=0.14 passenv = {[testenv:system-tests]passenv} + +[testenv:gce-system-tests] +basepython = + python2.7 +commands = + python {toxinidir}/scripts/run_gce_system_tests.py +deps = + pycrypto>=2.6 +passenv = {[testenv:system-tests]passenv}