Correct the resolving api logic in stat middleware
If the admin_port string is a substring of public_port string, all the requests would be stated as 'admin' either their real dest port is admin_port or public_port. It's due to the incorrect logic in stat middleware. For example, if public_port = 35000, admin_port = 5000, the first judgement branch: "if str(CONF.admin_port) in host" in StatsMiddleware::_resolve_api() would always return "True" either the host port number equal to 5000 or 35000, so that the following judgement branches would be incorrectly ignored. Fixes bug #1189121 Change-Id: I1086b7d11f83dd218d66376f79747a1f720eb807
This commit is contained in:
parent
ad3ba38cda
commit
d0d4976f28
|
@ -121,9 +121,9 @@ class StatsMiddleware(wsgi.Middleware):
|
|||
return super(StatsMiddleware, self).__init__(*args, **kwargs)
|
||||
|
||||
def _resolve_api(self, host):
|
||||
if str(CONF.admin_port) in host:
|
||||
if host.endswith(':%s' % (CONF.admin_port)):
|
||||
return 'admin'
|
||||
elif str(CONF.public_port) in host:
|
||||
elif host.endswith(':%s' % (CONF.public_port)):
|
||||
return 'public'
|
||||
else:
|
||||
# NOTE(dolph): I don't think this is actually reachable, but hey
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2012 OpenStack LLC
|
||||
#
|
||||
# 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.
|
||||
|
||||
from keystone.contrib import stats
|
||||
|
||||
from keystone import config
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
|
||||
class StatsContribCore(test.TestCase):
|
||||
def setUp(self):
|
||||
super(StatsContribCore, self).setUp()
|
||||
self.stats_middleware = stats.StatsMiddleware(None)
|
||||
|
||||
def test_admin_request(self):
|
||||
host_admin = "127.0.0.1:%s" % CONF.admin_port
|
||||
self.assertEqual("admin",
|
||||
self.stats_middleware._resolve_api(host_admin))
|
||||
|
||||
def test_public_request(self):
|
||||
host_public = "127.0.0.1:%s" % CONF.public_port
|
||||
self.assertEqual("public",
|
||||
self.stats_middleware._resolve_api(host_public))
|
||||
|
||||
def test_other_request(self):
|
||||
host_public = "127.0.0.1:%s" % CONF.public_port
|
||||
host_other = host_public + "1"
|
||||
self.assertEqual(host_other,
|
||||
self.stats_middleware._resolve_api(host_other))
|
Loading…
Reference in New Issue