Merge "Isolate eventlet code into environment."
This commit is contained in:
commit
cdc0ee1f85
|
@ -1,7 +1,6 @@
|
|||
#!/usr/bin/env python
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
import greenlet
|
||||
import logging
|
||||
import os
|
||||
import signal
|
||||
|
@ -21,8 +20,8 @@ if os.path.exists(os.path.join(possible_topdir,
|
|||
from paste import deploy
|
||||
import pbr.version
|
||||
|
||||
from keystone.common import environment
|
||||
from keystone.common import utils
|
||||
from keystone.common import wsgi_server
|
||||
from keystone import config
|
||||
from keystone.openstack.common import gettextutils
|
||||
from keystone.openstack.common import importutils
|
||||
|
@ -33,7 +32,7 @@ CONF = config.CONF
|
|||
|
||||
def create_server(conf, name, host, port):
|
||||
app = deploy.loadapp('config:%s' % conf, name=name)
|
||||
server = wsgi_server.Server(app, host=host, port=port)
|
||||
server = environment.Server(app, host=host, port=port)
|
||||
if CONF.ssl.enable:
|
||||
server.set_ssl(CONF.ssl.certfile, CONF.ssl.keyfile,
|
||||
CONF.ssl.ca_certs, CONF.ssl.cert_required)
|
||||
|
@ -64,10 +63,7 @@ def serve(*servers):
|
|||
logging.exception('Failed to execute onready command')
|
||||
|
||||
for server in servers:
|
||||
try:
|
||||
server.wait()
|
||||
except greenlet.GreenletExit:
|
||||
pass
|
||||
server.wait()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -100,7 +96,7 @@ if __name__ == '__main__':
|
|||
# http://lists.openstack.org/pipermail/openstack-dev/2012-August/
|
||||
# 000794.html
|
||||
monkeypatch_thread = False
|
||||
wsgi_server.monkey_patch_eventlet(monkeypatch_thread=monkeypatch_thread)
|
||||
environment.use_eventlet(monkeypatch_thread)
|
||||
|
||||
servers = []
|
||||
servers.append(create_server(paste_config,
|
||||
|
|
|
@ -14,11 +14,13 @@ if os.path.exists(os.path.join(possible_topdir,
|
|||
sys.path.insert(0, possible_topdir)
|
||||
|
||||
from keystone import cli
|
||||
from keystone.common import environment
|
||||
from keystone.openstack.common import gettextutils
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
gettextutils.install('keystone')
|
||||
environment.use_stdlib()
|
||||
|
||||
dev_conf = os.path.join(possible_topdir,
|
||||
'etc',
|
||||
|
|
|
@ -2,6 +2,7 @@ import os
|
|||
|
||||
from paste import deploy
|
||||
|
||||
from keystone.common import environment
|
||||
from keystone.common import logging
|
||||
from keystone import config
|
||||
|
||||
|
@ -9,6 +10,7 @@ LOG = logging.getLogger(__name__)
|
|||
CONF = config.CONF
|
||||
CONF(project='keystone')
|
||||
|
||||
environment.use_stdlib()
|
||||
name = os.path.basename(__file__)
|
||||
|
||||
if CONF.debug:
|
||||
|
|
|
@ -17,12 +17,12 @@
|
|||
"""Token Factory"""
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
import uuid
|
||||
import webob
|
||||
|
||||
from keystone import catalog
|
||||
from keystone.common import cms
|
||||
from keystone.common import environment
|
||||
from keystone.common import logging
|
||||
from keystone.common import utils
|
||||
from keystone import config
|
||||
|
@ -310,7 +310,7 @@ def create_token(context, auth_context, auth_info):
|
|||
token_id = cms.cms_sign_token(json.dumps(token_data),
|
||||
CONF.signing.certfile,
|
||||
CONF.signing.keyfile)
|
||||
except subprocess.CalledProcessError:
|
||||
except environment.subprocess.CalledProcessError:
|
||||
raise exception.UnexpectedError(_(
|
||||
'Unable to sign token.'))
|
||||
else:
|
||||
|
|
|
@ -1,46 +1,31 @@
|
|||
import hashlib
|
||||
|
||||
from keystone.common import environment
|
||||
from keystone.common import logging
|
||||
|
||||
|
||||
subprocess = None
|
||||
LOG = logging.getLogger(__name__)
|
||||
PKI_ANS1_PREFIX = 'MII'
|
||||
|
||||
|
||||
def _ensure_subprocess():
|
||||
# NOTE(vish): late loading subprocess so we can
|
||||
# use the green version if we are in
|
||||
# eventlet.
|
||||
global subprocess
|
||||
if not subprocess:
|
||||
try:
|
||||
from eventlet import patcher
|
||||
if patcher.already_patched.get('os'):
|
||||
from eventlet.green import subprocess
|
||||
else:
|
||||
import subprocess
|
||||
except ImportError:
|
||||
import subprocess # nopep8
|
||||
|
||||
|
||||
def cms_verify(formatted, signing_cert_file_name, ca_file_name):
|
||||
"""Verifies the signature of the contents IAW CMS syntax."""
|
||||
_ensure_subprocess()
|
||||
process = subprocess.Popen(["openssl", "cms", "-verify",
|
||||
"-certfile", signing_cert_file_name,
|
||||
"-CAfile", ca_file_name,
|
||||
"-inform", "PEM",
|
||||
"-nosmimecap", "-nodetach",
|
||||
"-nocerts", "-noattr"],
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE)
|
||||
process = environment.subprocess.Popen(["openssl", "cms", "-verify",
|
||||
"-certfile",
|
||||
signing_cert_file_name,
|
||||
"-CAfile", ca_file_name,
|
||||
"-inform", "PEM",
|
||||
"-nosmimecap", "-nodetach",
|
||||
"-nocerts", "-noattr"],
|
||||
stdin=environment.subprocess.PIPE,
|
||||
stdout=environment.subprocess.PIPE,
|
||||
stderr=environment.subprocess.PIPE)
|
||||
output, err = process.communicate(formatted)
|
||||
retcode = process.poll()
|
||||
if retcode:
|
||||
LOG.error(_('Verify error: %s') % err)
|
||||
raise subprocess.CalledProcessError(retcode, "openssl", output=err)
|
||||
raise environment.subprocess.CalledProcessError(retcode,
|
||||
"openssl", output=err)
|
||||
return output
|
||||
|
||||
|
||||
|
@ -117,16 +102,15 @@ def cms_sign_text(text, signing_cert_file_name, signing_key_file_name):
|
|||
Produces a Base64 encoding of a DER formatted CMS Document
|
||||
http://en.wikipedia.org/wiki/Cryptographic_Message_Syntax
|
||||
"""
|
||||
_ensure_subprocess()
|
||||
process = subprocess.Popen(["openssl", "cms", "-sign",
|
||||
"-signer", signing_cert_file_name,
|
||||
"-inkey", signing_key_file_name,
|
||||
"-outform", "PEM",
|
||||
"-nosmimecap", "-nodetach",
|
||||
"-nocerts", "-noattr"],
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE)
|
||||
process = environment.subprocess.Popen(["openssl", "cms", "-sign",
|
||||
"-signer", signing_cert_file_name,
|
||||
"-inkey", signing_key_file_name,
|
||||
"-outform", "PEM",
|
||||
"-nosmimecap", "-nodetach",
|
||||
"-nocerts", "-noattr"],
|
||||
stdin=environment.subprocess.PIPE,
|
||||
stdout=environment.subprocess.PIPE,
|
||||
stderr=environment.subprocess.PIPE)
|
||||
output, err = process.communicate(text)
|
||||
retcode = process.poll()
|
||||
if retcode or "Error" in err:
|
||||
|
@ -136,7 +120,7 @@ def cms_sign_text(text, signing_cert_file_name, signing_key_file_name):
|
|||
"'keystone-manage pki_setup'"))
|
||||
else:
|
||||
LOG.error(_('Signing error: %s') % err)
|
||||
raise subprocess.CalledProcessError(retcode, "openssl")
|
||||
raise environment.subprocess.CalledProcessError(retcode, "openssl")
|
||||
return output
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
import functools
|
||||
import os
|
||||
|
||||
from keystone.common import config
|
||||
from keystone.common import logging
|
||||
|
||||
CONF = config.CONF
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
__all__ = ['Server', 'httplib', 'subprocess']
|
||||
|
||||
_configured = False
|
||||
|
||||
Server = None
|
||||
httplib = None
|
||||
subprocess = None
|
||||
|
||||
|
||||
def configure_once(name):
|
||||
"""Ensure that environment configuration is only run once.
|
||||
|
||||
If environment is reconfigured in the same way then it is ignored.
|
||||
It is an error to attempt to reconfigure environment in a different way.
|
||||
"""
|
||||
def decorator(func):
|
||||
@functools.wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
global _configured
|
||||
if _configured:
|
||||
if _configured == name:
|
||||
return
|
||||
else:
|
||||
raise SystemError("Environment has already been "
|
||||
"configured as %s" % _configured)
|
||||
|
||||
LOG.info(_("Environment configured as: %s"), name)
|
||||
_configured = name
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
@configure_once('eventlet')
|
||||
def use_eventlet(monkeypatch_thread=None):
|
||||
global httplib, subprocess, Server
|
||||
|
||||
# This must be set before the initial import of eventlet because if
|
||||
# dnspython is present in your environment then eventlet monkeypatches
|
||||
# socket.getaddrinfo() with an implementation which doesn't work for IPv6.
|
||||
os.environ['EVENTLET_NO_GREENDNS'] = 'yes'
|
||||
|
||||
import eventlet
|
||||
from eventlet.green import httplib as _httplib
|
||||
from eventlet.green import subprocess as _subprocess
|
||||
from keystone.common.environment import eventlet_server
|
||||
|
||||
if monkeypatch_thread is None:
|
||||
monkeypatch_thread = not os.getenv('STANDARD_THREADS')
|
||||
|
||||
eventlet.patcher.monkey_patch(all=False, socket=True, time=True,
|
||||
thread=monkeypatch_thread)
|
||||
|
||||
Server = eventlet_server.Server
|
||||
httplib = _httplib
|
||||
subprocess = _subprocess
|
||||
|
||||
|
||||
@configure_once('stdlib')
|
||||
def use_stdlib():
|
||||
global httplib, subprocess
|
||||
|
||||
import httplib as _httplib
|
||||
import subprocess as _subprocess
|
||||
|
||||
httplib = _httplib
|
||||
subprocess = _subprocess
|
|
@ -18,26 +18,13 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import os
|
||||
import socket
|
||||
import ssl
|
||||
import sys
|
||||
|
||||
# NOTE(mikal): All of this is because if dnspython is present in your
|
||||
# environment then eventlet monkeypatches socket.getaddrinfo() with an
|
||||
# implementation which doesn't work for IPv6. What we're checking here is
|
||||
# that the magic environment variable was set when the import happened.
|
||||
if ('eventlet' in sys.modules and
|
||||
os.environ.get('EVENTLET_NO_GREENDNS', '').lower() != 'yes'):
|
||||
raise ImportError('eventlet imported before '
|
||||
'keystone.common.wsgi_server '
|
||||
'(EVENTLET_NO_GREENDNS env var set to %s)'
|
||||
% os.environ.get('EVENTLET_NO_GREENDNS'))
|
||||
|
||||
os.environ['EVENTLET_NO_GREENDNS'] = 'yes'
|
||||
|
||||
import eventlet
|
||||
import eventlet.wsgi
|
||||
import greenlet
|
||||
|
||||
from keystone.common import logging
|
||||
from keystone.common import wsgi
|
||||
|
@ -46,14 +33,6 @@ from keystone.common import wsgi
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def monkey_patch_eventlet(monkeypatch_thread=None):
|
||||
if monkeypatch_thread is None:
|
||||
monkeypatch_thread = not os.getenv('STANDARD_THREADS')
|
||||
|
||||
eventlet.patcher.monkey_patch(all=False, socket=True, time=True,
|
||||
thread=monkeypatch_thread)
|
||||
|
||||
|
||||
class Server(object):
|
||||
"""Server class to manage multiple WSGI sockets and applications."""
|
||||
|
||||
|
@ -121,6 +100,8 @@ class Server(object):
|
|||
self.pool.waitall()
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
except greenlet.GreenletExit:
|
||||
pass
|
||||
|
||||
def _run(self, application, socket):
|
||||
"""Start a WSGI server in a new green thread."""
|
|
@ -16,8 +16,8 @@
|
|||
|
||||
import os
|
||||
import stat
|
||||
import subprocess
|
||||
|
||||
from keystone.common import environment
|
||||
from keystone.common import logging
|
||||
from keystone import config
|
||||
|
||||
|
@ -77,7 +77,7 @@ class BaseCertificateConfigure(object):
|
|||
def exec_command(self, command):
|
||||
to_exec = command % self.ssl_dictionary
|
||||
LOG.info(to_exec)
|
||||
subprocess.check_call(to_exec.rsplit(' '))
|
||||
environment.subprocess.check_call(to_exec.rsplit(' '))
|
||||
|
||||
def build_ssl_config_file(self):
|
||||
if not file_exists(self.ssl_config_file_name):
|
||||
|
|
|
@ -21,12 +21,12 @@
|
|||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
import passlib.hash
|
||||
|
||||
from keystone.common import config
|
||||
from keystone.common import environment
|
||||
from keystone.common import logging
|
||||
from keystone import exception
|
||||
|
||||
|
@ -160,14 +160,15 @@ def check_output(*popenargs, **kwargs):
|
|||
if 'stdout' in kwargs:
|
||||
raise ValueError('stdout argument not allowed, it will be overridden.')
|
||||
LOG.debug(' '.join(popenargs[0]))
|
||||
process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
|
||||
process = environment.subprocess.Popen(stdout=environment.subprocess.PIPE,
|
||||
*popenargs, **kwargs)
|
||||
output, unused_err = process.communicate()
|
||||
retcode = process.poll()
|
||||
if retcode:
|
||||
cmd = kwargs.get('args')
|
||||
if cmd is None:
|
||||
cmd = popenargs[0]
|
||||
raise subprocess.CalledProcessError(retcode, cmd)
|
||||
raise environment.subprocess.CalledProcessError(retcode, cmd)
|
||||
return output
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ Starting point for routing EC2 requests.
|
|||
|
||||
import urlparse
|
||||
|
||||
from eventlet.green import httplib
|
||||
import webob.dec
|
||||
import webob.exc
|
||||
|
||||
|
@ -32,6 +31,7 @@ from nova import flags
|
|||
from nova import utils
|
||||
from nova import wsgi
|
||||
|
||||
from keystone.common import environment
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
flags.DEFINE_string('keystone_ec2_url',
|
||||
|
@ -75,9 +75,9 @@ class EC2Token(wsgi.Middleware):
|
|||
# pylint: disable-msg=E1101
|
||||
o = urlparse.urlparse(FLAGS.keystone_ec2_url)
|
||||
if o.scheme == 'http':
|
||||
conn = httplib.HTTPConnection(o.netloc)
|
||||
conn = environment.httplib.HTTPConnection(o.netloc)
|
||||
else:
|
||||
conn = httplib.HTTPSConnection(o.netloc)
|
||||
conn = environment.httplib.HTTPSConnection(o.netloc)
|
||||
conn.request('POST', o.path, body=creds_json, headers=headers)
|
||||
response = conn.getresponse().read()
|
||||
conn.close()
|
||||
|
|
|
@ -33,13 +33,13 @@ This WSGI component:
|
|||
|
||||
"""
|
||||
|
||||
import httplib
|
||||
|
||||
import webob
|
||||
|
||||
from keystone.openstack.common import jsonutils
|
||||
from swift.common import utils as swift_utils
|
||||
|
||||
from keystone.common import environment
|
||||
from keystone.openstack.common import jsonutils
|
||||
|
||||
|
||||
PROTOCOL_NAME = 'S3 Token Authentication'
|
||||
|
||||
|
@ -62,9 +62,9 @@ class S3Token(object):
|
|||
self.auth_port = int(conf.get('auth_port', 35357))
|
||||
self.auth_protocol = conf.get('auth_protocol', 'https')
|
||||
if self.auth_protocol == 'http':
|
||||
self.http_client_class = httplib.HTTPConnection
|
||||
self.http_client_class = environment.httplib.HTTPConnection
|
||||
else:
|
||||
self.http_client_class = httplib.HTTPSConnection
|
||||
self.http_client_class = environment.httplib.HTTPSConnection
|
||||
# SSL
|
||||
self.cert_file = conf.get('certfile')
|
||||
self.key_file = conf.get('keyfile')
|
||||
|
|
|
@ -19,7 +19,6 @@ import errno
|
|||
import os
|
||||
import socket
|
||||
import StringIO
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
|
@ -31,12 +30,16 @@ from paste import deploy
|
|||
import stubout
|
||||
import unittest2 as unittest
|
||||
|
||||
gettext.install('keystone', unicode=1)
|
||||
|
||||
from keystone.common import environment
|
||||
environment.use_eventlet()
|
||||
|
||||
from keystone import catalog
|
||||
from keystone.common import kvs
|
||||
from keystone.common import logging
|
||||
from keystone.common import utils
|
||||
from keystone.common import wsgi
|
||||
from keystone.common import wsgi_server
|
||||
from keystone import config
|
||||
from keystone import credential
|
||||
from keystone import exception
|
||||
|
@ -47,11 +50,6 @@ from keystone import token
|
|||
from keystone import trust
|
||||
|
||||
|
||||
wsgi_server.monkey_patch_eventlet()
|
||||
|
||||
|
||||
gettext.install('keystone', unicode=1)
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
ROOTDIR = os.path.dirname(os.path.abspath(os.curdir))
|
||||
VENDOR = os.path.join(ROOTDIR, 'vendor')
|
||||
|
@ -115,7 +113,7 @@ def checkout_vendor(repo, rev):
|
|||
# write out a modified time
|
||||
with open(modcheck, 'w') as fd:
|
||||
fd.write('1')
|
||||
except subprocess.CalledProcessError:
|
||||
except environment.subprocess.CalledProcessError:
|
||||
LOG.warning(_('Failed to checkout %s'), repo)
|
||||
cd(working_dir)
|
||||
return revdir
|
||||
|
@ -320,7 +318,7 @@ class TestCase(NoModule, unittest.TestCase):
|
|||
def serveapp(self, config, name=None, cert=None, key=None, ca=None,
|
||||
cert_required=None, host="127.0.0.1", port=0):
|
||||
app = self.loadapp(config, name=name)
|
||||
server = wsgi_server.Server(app, host, port)
|
||||
server = environment.Server(app, host, port)
|
||||
if cert is not None and ca is not None and key is not None:
|
||||
server.set_ssl(certfile=cert, keyfile=key, ca_certs=ca,
|
||||
cert_required=cert_required)
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import json
|
||||
import subprocess
|
||||
import uuid
|
||||
|
||||
from keystone.common import cms
|
||||
from keystone.common import controller
|
||||
from keystone.common import dependency
|
||||
from keystone.common import environment
|
||||
from keystone.common import logging
|
||||
from keystone.common import utils
|
||||
from keystone import config
|
||||
|
@ -117,7 +117,7 @@ class Auth(controller.V2Controller):
|
|||
token_id = cms.cms_sign_token(json.dumps(token_data),
|
||||
CONF.signing.certfile,
|
||||
CONF.signing.keyfile)
|
||||
except subprocess.CalledProcessError:
|
||||
except environment.subprocess.CalledProcessError:
|
||||
raise exception.UnexpectedError(_(
|
||||
'Unable to sign token.'))
|
||||
else:
|
||||
|
|
|
@ -16,11 +16,12 @@ import copy
|
|||
import datetime
|
||||
import uuid
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import auth
|
||||
from keystone import config
|
||||
from keystone import exception
|
||||
from keystone.openstack.common import timeutils
|
||||
from keystone import test
|
||||
from keystone import token
|
||||
from keystone import trust
|
||||
|
||||
|
|
|
@ -16,9 +16,10 @@
|
|||
|
||||
import uuid
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import auth
|
||||
from keystone import exception
|
||||
from keystone import test
|
||||
|
||||
|
||||
# for testing purposes only
|
||||
|
|
|
@ -18,11 +18,12 @@ import datetime
|
|||
import default_fixtures
|
||||
import uuid
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.catalog import core
|
||||
from keystone import config
|
||||
from keystone import exception
|
||||
from keystone.openstack.common import timeutils
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -17,11 +17,12 @@ import uuid
|
|||
|
||||
import nose.exc
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import catalog
|
||||
from keystone.catalog.backends import kvs as catalog_kvs
|
||||
from keystone import exception
|
||||
from keystone import identity
|
||||
from keystone import test
|
||||
from keystone.token.backends import kvs as token_kvs
|
||||
from keystone.trust.backends import kvs as trust_kvs
|
||||
|
||||
|
|
|
@ -19,11 +19,12 @@ import uuid
|
|||
|
||||
import nose.exc
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common.ldap import fakeldap
|
||||
from keystone import config
|
||||
from keystone import exception
|
||||
from keystone import identity
|
||||
from keystone import test
|
||||
|
||||
import default_fixtures
|
||||
import test_backend
|
||||
|
|
|
@ -20,11 +20,12 @@ import uuid
|
|||
|
||||
import memcache
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import utils
|
||||
from keystone import exception
|
||||
from keystone.openstack.common import jsonutils
|
||||
from keystone.openstack.common import timeutils
|
||||
from keystone import test
|
||||
from keystone import token
|
||||
from keystone.token.backends import memcache as token_memcache
|
||||
|
||||
|
|
|
@ -16,9 +16,10 @@
|
|||
|
||||
import uuid
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import config
|
||||
from keystone.identity.backends import pam as identity_pam
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -16,13 +16,14 @@
|
|||
|
||||
import uuid
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import catalog
|
||||
from keystone.common import sql
|
||||
from keystone import config
|
||||
from keystone import exception
|
||||
from keystone import identity
|
||||
from keystone import policy
|
||||
from keystone import test
|
||||
from keystone import token
|
||||
from keystone import trust
|
||||
|
||||
|
|
|
@ -16,10 +16,11 @@
|
|||
|
||||
import os
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import catalog
|
||||
from keystone.catalog.backends import templated as catalog_templated
|
||||
from keystone import exception
|
||||
from keystone import test
|
||||
|
||||
import default_fixtures
|
||||
import test_backend
|
||||
|
|
|
@ -18,9 +18,10 @@
|
|||
import os
|
||||
import shutil
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import openssl
|
||||
from keystone import exception
|
||||
from keystone import test
|
||||
from keystone import token
|
||||
|
||||
import default_fixtures
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from keystone import test
|
||||
|
||||
from keystone import config
|
||||
from keystone import exception
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -21,9 +21,10 @@ from lxml import etree
|
|||
import nose.exc
|
||||
import webtest
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import serializer
|
||||
from keystone.openstack.common import jsonutils
|
||||
from keystone import test
|
||||
|
||||
import default_fixtures
|
||||
|
||||
|
|
|
@ -16,11 +16,12 @@
|
|||
|
||||
import uuid
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.contrib import ec2
|
||||
from keystone.contrib import s3
|
||||
|
||||
from keystone import exception
|
||||
from keystone import test
|
||||
|
||||
|
||||
class S3ContribCore(test.TestCase):
|
||||
|
|
|
@ -16,11 +16,12 @@
|
|||
|
||||
import uuid
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import wsgi
|
||||
from keystone import config
|
||||
from keystone import exception
|
||||
from keystone.openstack.common import jsonutils
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -21,13 +21,14 @@ try:
|
|||
except ImportError:
|
||||
from pysqlite2 import dbapi2 as dbapi
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.catalog.backends import templated as catalog_templated
|
||||
from keystone.common.sql import legacy
|
||||
from keystone.common.sql import util as sql_util
|
||||
from keystone import config
|
||||
from keystone import identity
|
||||
from keystone.identity.backends import sql as identity_sql
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import httplib
|
||||
|
||||
from keystone import config
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import environment
|
||||
from keystone import config
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
|
@ -40,12 +40,12 @@ class IPv6TestCase(test.TestCase):
|
|||
self.admin_server = self.serveapp('keystone', name='admin',
|
||||
host="::1", port=0)
|
||||
# Verify Admin
|
||||
conn = httplib.HTTPConnection('::1', CONF.admin_port)
|
||||
conn = environment.httplib.HTTPConnection('::1', CONF.admin_port)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
self.assertEqual(resp.status, 300)
|
||||
# Verify Public
|
||||
conn = httplib.HTTPConnection('::1', CONF.public_port)
|
||||
conn = environment.httplib.HTTPConnection('::1', CONF.public_port)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
self.assertEqual(resp.status, 300)
|
||||
|
|
|
@ -19,10 +19,11 @@ import webob
|
|||
|
||||
import nose.exc
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import config
|
||||
from keystone.openstack.common import jsonutils
|
||||
from keystone.openstack.common import timeutils
|
||||
from keystone import test
|
||||
|
||||
import default_fixtures
|
||||
|
||||
|
|
|
@ -18,9 +18,10 @@ import uuid
|
|||
|
||||
import nose.exc
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import sql
|
||||
from keystone import config
|
||||
from keystone import test
|
||||
|
||||
import test_keystoneclient
|
||||
|
||||
|
|
|
@ -16,10 +16,11 @@
|
|||
|
||||
import webob
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import config
|
||||
from keystone import middleware
|
||||
from keystone.openstack.common import jsonutils
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -16,13 +16,14 @@
|
|||
|
||||
import uuid
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common.sql import nova
|
||||
from keystone.common.sql import util as sql_util
|
||||
from keystone import config
|
||||
from keystone.contrib.ec2.backends import sql as ec2_sql
|
||||
from keystone import identity
|
||||
from keystone.identity.backends import sql as identity_sql
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -19,11 +19,12 @@ import StringIO
|
|||
import tempfile
|
||||
import urllib2
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import config
|
||||
from keystone import exception
|
||||
from keystone.openstack.common import policy as common_policy
|
||||
from keystone.policy.backends import rules
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -14,10 +14,11 @@
|
|||
|
||||
import webob
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import config
|
||||
from keystone import exception
|
||||
from keystone import middleware
|
||||
from keystone import test
|
||||
|
||||
CONF = config.CONF
|
||||
MAX_REQUEST_BODY_SIZE = CONF.max_request_body_size
|
||||
|
|
|
@ -32,10 +32,11 @@ import uuid
|
|||
from migrate.versioning import api as versioning_api
|
||||
import sqlalchemy
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import sql
|
||||
from keystone.common.sql import migration
|
||||
from keystone import config
|
||||
from keystone import test
|
||||
|
||||
import default_fixtures
|
||||
|
||||
|
|
|
@ -15,13 +15,13 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import httplib
|
||||
import os
|
||||
import ssl
|
||||
|
||||
from keystone import config
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import environment
|
||||
from keystone import config
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
|
@ -45,12 +45,14 @@ class SSLTestCase(test.TestCase):
|
|||
self.admin_server = self.serveapp('keystone', name='admin',
|
||||
cert=CERT, key=KEY, ca=CA)
|
||||
# Verify Admin
|
||||
conn = httplib.HTTPSConnection('127.0.0.1', CONF.admin_port)
|
||||
conn = environment.httplib.HTTPSConnection('127.0.0.1',
|
||||
CONF.admin_port)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
self.assertEqual(resp.status, 300)
|
||||
# Verify Public
|
||||
conn = httplib.HTTPSConnection('127.0.0.1', CONF.public_port)
|
||||
conn = environment.httplib.HTTPSConnection('127.0.0.1',
|
||||
CONF.public_port)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
self.assertEqual(resp.status, 300)
|
||||
|
@ -67,13 +69,13 @@ class SSLTestCase(test.TestCase):
|
|||
'keystone', name='admin', cert=CERT,
|
||||
key=KEY, ca=CA, cert_required=True)
|
||||
# Verify Admin
|
||||
conn = httplib.HTTPSConnection(
|
||||
conn = environment.httplib.HTTPSConnection(
|
||||
'127.0.0.1', CONF.admin_port, CLIENT, CLIENT)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
self.assertEqual(resp.status, 300)
|
||||
# Verify Public
|
||||
conn = httplib.HTTPSConnection(
|
||||
conn = environment.httplib.HTTPSConnection(
|
||||
'127.0.0.1', CONF.public_port, CLIENT, CLIENT)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
|
@ -89,12 +91,12 @@ class SSLTestCase(test.TestCase):
|
|||
cert=CERT, key=KEY, ca=CA,
|
||||
host="::1", port=0)
|
||||
# Verify Admin
|
||||
conn = httplib.HTTPSConnection('::1', CONF.admin_port)
|
||||
conn = environment.httplib.HTTPSConnection('::1', CONF.admin_port)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
self.assertEqual(resp.status, 300)
|
||||
# Verify Public
|
||||
conn = httplib.HTTPSConnection('::1', CONF.public_port)
|
||||
conn = environment.httplib.HTTPSConnection('::1', CONF.public_port)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
self.assertEqual(resp.status, 300)
|
||||
|
@ -114,13 +116,13 @@ class SSLTestCase(test.TestCase):
|
|||
key=KEY, ca=CA, cert_required=True,
|
||||
host="::1", port=0)
|
||||
# Verify Admin
|
||||
conn = httplib.HTTPSConnection(
|
||||
conn = environment.httplib.HTTPSConnection(
|
||||
'::1', CONF.admin_port, CLIENT, CLIENT)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
self.assertEqual(resp.status, 300)
|
||||
# Verify Public
|
||||
conn = httplib.HTTPSConnection(
|
||||
conn = environment.httplib.HTTPSConnection(
|
||||
'::1', CONF.public_port, CLIENT, CLIENT)
|
||||
conn.request('GET', '/')
|
||||
resp = conn.getresponse()
|
||||
|
@ -135,14 +137,16 @@ class SSLTestCase(test.TestCase):
|
|||
'keystone', name='admin', cert=CERT,
|
||||
key=KEY, ca=CA, cert_required=True)
|
||||
# Verify Admin
|
||||
conn = httplib.HTTPSConnection('127.0.0.1', CONF.admin_port)
|
||||
conn = environment.httplib.HTTPSConnection('127.0.0.1',
|
||||
CONF.admin_port)
|
||||
try:
|
||||
conn.request('GET', '/')
|
||||
self.fail('Admin API shoulda failed with SSL handshake!')
|
||||
except ssl.SSLError:
|
||||
pass
|
||||
# Verify Public
|
||||
conn = httplib.HTTPSConnection('127.0.0.1', CONF.public_port)
|
||||
conn = environment.httplib.HTTPSConnection('127.0.0.1',
|
||||
CONF.public_port)
|
||||
try:
|
||||
conn.request('GET', '/')
|
||||
self.fail('Public API shoulda failed with SSL handshake!')
|
||||
|
|
|
@ -16,9 +16,10 @@
|
|||
|
||||
import webob
|
||||
|
||||
from keystone import middleware
|
||||
from keystone import test
|
||||
|
||||
from keystone import middleware
|
||||
|
||||
|
||||
class FakeApp(object):
|
||||
"""Fakes a WSGI app URL normalized."""
|
||||
|
|
|
@ -29,9 +29,10 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from keystone.common import utils
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import utils
|
||||
|
||||
|
||||
class UtilsTestCase(test.TestCase):
|
||||
def test_hash(self):
|
||||
|
|
|
@ -4,13 +4,14 @@ import uuid
|
|||
from lxml import etree
|
||||
import webtest
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import auth
|
||||
from keystone.common import serializer
|
||||
from keystone.common.sql import util as sql_util
|
||||
from keystone import config
|
||||
from keystone.openstack.common import timeutils
|
||||
from keystone.policy.backends import rules
|
||||
from keystone import test
|
||||
|
||||
import test_content_types
|
||||
|
||||
|
|
|
@ -15,10 +15,11 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone import config
|
||||
from keystone import controllers
|
||||
from keystone.openstack.common import jsonutils
|
||||
from keystone import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
|
|
@ -16,10 +16,11 @@
|
|||
|
||||
import webob
|
||||
|
||||
from keystone import test
|
||||
|
||||
from keystone.common import wsgi
|
||||
from keystone import exception
|
||||
from keystone.openstack.common import jsonutils
|
||||
from keystone import test
|
||||
|
||||
|
||||
class FakeApp(wsgi.Application):
|
||||
|
|
Loading…
Reference in New Issue