Merge "Change app.restapi to app.client_manager.session"

This commit is contained in:
Jenkins
2014-09-06 21:46:40 +00:00
committed by Gerrit Code Review
4 changed files with 124 additions and 25 deletions

View File

@@ -19,6 +19,7 @@ import logging
import pkg_resources
import sys
from openstackclient.common import restapi
from openstackclient.identity import client as identity_client
@@ -77,7 +78,18 @@ class ClientManager(object):
self._insecure = not verify
else:
self._cacert = verify
self._insecure = True
self._insecure = False
self.session = restapi.RESTApi(
verify=verify,
debug=True,
)
# Get logging from root logger
root_logger = logging.getLogger('')
LOG.setLevel(root_logger.getEffectiveLevel())
restapi_logger = logging.getLogger('restapi')
restapi_logger.setLevel(root_logger.getEffectiveLevel())
self.auth_ref = None

View File

@@ -31,7 +31,6 @@ import openstackclient
from openstackclient.common import clientmanager
from openstackclient.common import commandmanager
from openstackclient.common import exceptions as exc
from openstackclient.common import restapi
from openstackclient.common import timing
from openstackclient.common import utils
@@ -467,10 +466,6 @@ class OpenStackShell(app.App):
self.verify = self.options.os_cacert
else:
self.verify = not self.options.insecure
self.restapi = restapi.RESTApi(
verify=self.verify,
debug=self.options.debug,
)
def prepare_to_run_command(self, cmd):
"""Set up auth and API versions"""
@@ -481,12 +476,10 @@ class OpenStackShell(app.App):
if cmd.best_effort:
try:
self.authenticate_user()
self.restapi.set_auth(self.client_manager.identity.auth_token)
except Exception:
pass
else:
self.authenticate_user()
self.restapi.set_auth(self.client_manager.identity.auth_token)
return
def clean_up(self, cmd, result, err):
@@ -522,7 +515,6 @@ class OpenStackShell(app.App):
# NOTE(dtroyer): Maintain the old behaviour for interactive use as
# this path does not call prepare_to_run_command()
self.authenticate_user()
self.restapi.set_auth(self.client_manager.identity.auth_token)
super(OpenStackShell, self).interact()

View File

@@ -14,11 +14,26 @@
#
from openstackclient.common import clientmanager
from openstackclient.common import restapi
from openstackclient.tests import utils
AUTH_REF = {'a': 1}
AUTH_TOKEN = "foobar"
AUTH_URL = "http://0.0.0.0"
USERNAME = "itchy"
PASSWORD = "scratchy"
SERVICE_CATALOG = {'sc': '123'}
def FakeMakeClient(instance):
return FakeClient()
class FakeClient(object):
auth_ref = AUTH_REF
auth_token = AUTH_TOKEN
service_catalog = SERVICE_CATALOG
class Container(object):
@@ -28,18 +43,7 @@ class Container(object):
pass
class TestClientManager(utils.TestCase):
def setUp(self):
super(TestClientManager, self).setUp()
api_version = {"identity": "2.0"}
self.client_manager = clientmanager.ClientManager(
token=AUTH_TOKEN,
url=AUTH_URL,
auth_url=AUTH_URL,
api_version=api_version,
)
class TestClientCache(utils.TestCase):
def test_singleton(self):
# NOTE(dtroyer): Verify that the ClientCache descriptor only invokes
@@ -47,12 +51,88 @@ class TestClientManager(utils.TestCase):
c = Container()
self.assertEqual(c.attr, c.attr)
def test_make_client_identity_default(self):
class TestClientManager(utils.TestCase):
def setUp(self):
super(TestClientManager, self).setUp()
clientmanager.ClientManager.identity = \
clientmanager.ClientCache(FakeMakeClient)
def test_client_manager_token(self):
client_manager = clientmanager.ClientManager(
token=AUTH_TOKEN,
url=AUTH_URL,
verify=True,
)
self.assertEqual(
self.client_manager.identity.auth_token,
AUTH_TOKEN,
client_manager._token,
)
self.assertEqual(
self.client_manager.identity.management_url,
AUTH_URL,
client_manager._url,
)
self.assertIsInstance(
client_manager.session,
restapi.RESTApi,
)
self.assertFalse(client_manager._insecure)
self.assertTrue(client_manager._verify)
def test_client_manager_password(self):
client_manager = clientmanager.ClientManager(
auth_url=AUTH_URL,
username=USERNAME,
password=PASSWORD,
verify=False,
)
self.assertEqual(
AUTH_URL,
client_manager._auth_url,
)
self.assertEqual(
USERNAME,
client_manager._username,
)
self.assertEqual(
PASSWORD,
client_manager._password,
)
self.assertIsInstance(
client_manager.session,
restapi.RESTApi,
)
self.assertTrue(client_manager._insecure)
self.assertFalse(client_manager._verify)
# These need to stick around until the old-style clients are gone
self.assertEqual(
AUTH_REF,
client_manager.auth_ref,
)
self.assertEqual(
AUTH_TOKEN,
client_manager._token,
)
self.assertEqual(
SERVICE_CATALOG,
client_manager._service_catalog,
)
def test_client_manager_password_verify_ca(self):
client_manager = clientmanager.ClientManager(
auth_url=AUTH_URL,
username=USERNAME,
password=PASSWORD,
verify='cafile',
)
self.assertFalse(client_manager._insecure)
self.assertTrue(client_manager._verify)
self.assertEqual('cafile', client_manager._cacert)

View File

@@ -13,9 +13,12 @@
# under the License.
#
import json
import six
import sys
import requests
AUTH_TOKEN = "foobar"
AUTH_URL = "http://0.0.0.0"
@@ -42,7 +45,6 @@ class FakeApp(object):
self.stdin = sys.stdin
self.stdout = _stdout or sys.stdout
self.stderr = sys.stderr
self.restapi = None
class FakeClientManager(object):
@@ -53,6 +55,7 @@ class FakeClientManager(object):
self.object = None
self.volume = None
self.network = None
self.session = None
self.auth_ref = None
@@ -78,3 +81,15 @@ class FakeResource(object):
k != 'manager')
info = ", ".join("%s=%s" % (k, getattr(self, k)) for k in reprkeys)
return "<%s %s>" % (self.__class__.__name__, info)
class FakeResponse(requests.Response):
def __init__(self, headers={}, status_code=200, data=None, encoding=None):
super(FakeResponse, self).__init__()
self.status_code = status_code
self.headers.update(headers)
self._content = json.dumps(data)
if not isinstance(self._content, six.binary_type):
self._content = self._content.encode()