OLD | NEW |
(Empty) | |
| 1 # Copyright 2016 Google Inc. All Rights Reserved. |
| 2 # |
| 3 # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 # you may not use this file except in compliance with the License. |
| 5 # You may obtain a copy of the License at |
| 6 # |
| 7 # http://www.apache.org/licenses/LICENSE-2.0 |
| 8 # |
| 9 # Unless required by applicable law or agreed to in writing, software |
| 10 # distributed under the License is distributed on an "AS IS" BASIS, |
| 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 # See the License for the specific language governing permissions and |
| 13 # limitations under the License. |
| 14 |
| 15 """Tests for discovery_service.""" |
| 16 |
| 17 import os |
| 18 import unittest |
| 19 |
| 20 import endpoints.api_config as api_config |
| 21 import endpoints.api_config_manager as api_config_manager |
| 22 import endpoints.apiserving as apiserving |
| 23 import endpoints.discovery_service as discovery_service |
| 24 import test_util |
| 25 |
| 26 from protorpc import message_types |
| 27 from protorpc import remote |
| 28 |
| 29 |
| 30 @api_config.api('aservice', 'v3', hostname='aservice.appspot.com', |
| 31 description='A Service API') |
| 32 class AService(remote.Service): |
| 33 |
| 34 @api_config.method(path='noop') |
| 35 def Noop(self, unused_request): |
| 36 return message_types.VoidMessage() |
| 37 |
| 38 |
| 39 class DiscoveryServiceTest(unittest.TestCase): |
| 40 |
| 41 class FakeRequest(object): |
| 42 |
| 43 def __init__(self, server=None, port=None, url_scheme=None, api=None, |
| 44 version=None): |
| 45 self.server = server |
| 46 self.port = port |
| 47 self.url_scheme = url_scheme |
| 48 self.body_json = {'api': api, 'version': version} |
| 49 |
| 50 def setUp(self): |
| 51 """Make ApiConfigManager with a few helpful fakes.""" |
| 52 self.backend = self._create_wsgi_application() |
| 53 self.config_manager = api_config_manager.ApiConfigManager() |
| 54 self.discovery = discovery_service.DiscoveryService( |
| 55 self.config_manager, self.backend) |
| 56 |
| 57 def _create_wsgi_application(self): |
| 58 return apiserving._ApiServer([AService], registry_path='/my_registry') |
| 59 |
| 60 def _check_api_config(self, expected_base_url, server, port, url_scheme, api, |
| 61 version): |
| 62 request = DiscoveryServiceTest.FakeRequest( |
| 63 server=server, port=port, url_scheme=url_scheme, api=api, |
| 64 version=version) |
| 65 config_dict = self.discovery._generate_api_config_with_root(request) |
| 66 |
| 67 # Check bns entry |
| 68 adapter = config_dict.get('adapter') |
| 69 self.assertIsNotNone(adapter) |
| 70 self.assertEqual(expected_base_url, adapter.get('bns')) |
| 71 |
| 72 # Check root |
| 73 self.assertEqual(expected_base_url, config_dict.get('root')) |
| 74 |
| 75 |
| 76 class ProdDiscoveryServiceTest(DiscoveryServiceTest): |
| 77 |
| 78 def testGenerateApiConfigWithRoot(self): |
| 79 server = 'test.appspot.com' |
| 80 port = '12345' |
| 81 url_scheme = 'https' |
| 82 api = 'aservice' |
| 83 version = 'v3' |
| 84 expected_base_url = '{0}://{1}:{2}/_ah/api'.format(url_scheme, server, port) |
| 85 |
| 86 self._check_api_config(expected_base_url, server, port, url_scheme, api, |
| 87 version) |
| 88 |
| 89 def testGenerateApiConfigWithRootLocalhost(self): |
| 90 server = 'localhost' |
| 91 port = '12345' |
| 92 url_scheme = 'http' |
| 93 api = 'aservice' |
| 94 version = 'v3' |
| 95 expected_base_url = '{0}://{1}:{2}/_ah/api'.format(url_scheme, server, port) |
| 96 |
| 97 self._check_api_config(expected_base_url, server, port, url_scheme, api, |
| 98 version) |
| 99 |
| 100 def testGenerateApiConfigLocalhostDefaultHttpPort(self): |
| 101 server = 'localhost' |
| 102 port = '80' |
| 103 url_scheme = 'http' |
| 104 api = 'aservice' |
| 105 version = 'v3' |
| 106 expected_base_url = '{0}://{1}/_ah/api'.format(url_scheme, server) |
| 107 |
| 108 self._check_api_config(expected_base_url, server, port, url_scheme, api, |
| 109 version) |
| 110 |
| 111 def testGenerateApiConfigWithRootDefaultHttpsPort(self): |
| 112 server = 'test.appspot.com' |
| 113 port = '443' |
| 114 url_scheme = 'https' |
| 115 api = 'aservice' |
| 116 version = 'v3' |
| 117 expected_base_url = '{0}://{1}/_ah/api'.format(url_scheme, server) |
| 118 |
| 119 self._check_api_config(expected_base_url, server, port, url_scheme, api, |
| 120 version) |
| 121 |
| 122 |
| 123 class DevServerDiscoveryServiceTest(DiscoveryServiceTest, |
| 124 test_util.DevServerTest): |
| 125 |
| 126 def setUp(self): |
| 127 super(DevServerDiscoveryServiceTest, self).setUp() |
| 128 self.env_key, self.orig_env_value = (test_util.DevServerTest. |
| 129 setUpDevServerEnv()) |
| 130 self.addCleanup(test_util.DevServerTest.restoreEnv, |
| 131 self.env_key, self.orig_env_value) |
| 132 |
| 133 def testGenerateApiConfigWithRootDefaultHttpPort(self): |
| 134 server = 'test.appspot.com' |
| 135 port = '80' |
| 136 url_scheme = 'http' |
| 137 api = 'aservice' |
| 138 version = 'v3' |
| 139 expected_base_url = '{0}://{1}/_ah/api'.format(url_scheme, server) |
| 140 |
| 141 self._check_api_config(expected_base_url, server, port, url_scheme, api, |
| 142 version) |
| 143 |
| 144 def testGenerateApiConfigLocalhostDefaultHttpPort(self): |
| 145 server = 'localhost' |
| 146 port = '80' |
| 147 url_scheme = 'http' |
| 148 api = 'aservice' |
| 149 version = 'v3' |
| 150 expected_base_url = '{0}://{1}/_ah/api'.format(url_scheme, server) |
| 151 |
| 152 self._check_api_config(expected_base_url, server, port, url_scheme, api, |
| 153 version) |
| 154 |
| 155 def testGenerateApiConfigHTTPS(self): |
| 156 server = 'test.appspot.com' |
| 157 port = '443' |
| 158 url_scheme = 'http' # Should still be 'http' because we're using devserver |
| 159 api = 'aservice' |
| 160 version = 'v3' |
| 161 expected_base_url = '{0}://{1}:{2}/_ah/api'.format(url_scheme, server, port) |
| 162 |
| 163 self._check_api_config(expected_base_url, server, port, url_scheme, api, |
| 164 version) |
| 165 |
| 166 if __name__ == '__main__': |
| 167 unittest.main() |
OLD | NEW |