Merge "Change app.restapi to app.client_manager.session"
This commit is contained in:
@@ -19,6 +19,7 @@ import logging
|
|||||||
import pkg_resources
|
import pkg_resources
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from openstackclient.common import restapi
|
||||||
from openstackclient.identity import client as identity_client
|
from openstackclient.identity import client as identity_client
|
||||||
|
|
||||||
|
|
||||||
@@ -77,7 +78,18 @@ class ClientManager(object):
|
|||||||
self._insecure = not verify
|
self._insecure = not verify
|
||||||
else:
|
else:
|
||||||
self._cacert = verify
|
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
|
self.auth_ref = None
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ import openstackclient
|
|||||||
from openstackclient.common import clientmanager
|
from openstackclient.common import clientmanager
|
||||||
from openstackclient.common import commandmanager
|
from openstackclient.common import commandmanager
|
||||||
from openstackclient.common import exceptions as exc
|
from openstackclient.common import exceptions as exc
|
||||||
from openstackclient.common import restapi
|
|
||||||
from openstackclient.common import timing
|
from openstackclient.common import timing
|
||||||
from openstackclient.common import utils
|
from openstackclient.common import utils
|
||||||
|
|
||||||
@@ -467,10 +466,6 @@ class OpenStackShell(app.App):
|
|||||||
self.verify = self.options.os_cacert
|
self.verify = self.options.os_cacert
|
||||||
else:
|
else:
|
||||||
self.verify = not self.options.insecure
|
self.verify = not self.options.insecure
|
||||||
self.restapi = restapi.RESTApi(
|
|
||||||
verify=self.verify,
|
|
||||||
debug=self.options.debug,
|
|
||||||
)
|
|
||||||
|
|
||||||
def prepare_to_run_command(self, cmd):
|
def prepare_to_run_command(self, cmd):
|
||||||
"""Set up auth and API versions"""
|
"""Set up auth and API versions"""
|
||||||
@@ -481,12 +476,10 @@ class OpenStackShell(app.App):
|
|||||||
if cmd.best_effort:
|
if cmd.best_effort:
|
||||||
try:
|
try:
|
||||||
self.authenticate_user()
|
self.authenticate_user()
|
||||||
self.restapi.set_auth(self.client_manager.identity.auth_token)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.authenticate_user()
|
self.authenticate_user()
|
||||||
self.restapi.set_auth(self.client_manager.identity.auth_token)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def clean_up(self, cmd, result, err):
|
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
|
# NOTE(dtroyer): Maintain the old behaviour for interactive use as
|
||||||
# this path does not call prepare_to_run_command()
|
# this path does not call prepare_to_run_command()
|
||||||
self.authenticate_user()
|
self.authenticate_user()
|
||||||
self.restapi.set_auth(self.client_manager.identity.auth_token)
|
|
||||||
super(OpenStackShell, self).interact()
|
super(OpenStackShell, self).interact()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,26 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
from openstackclient.common import clientmanager
|
from openstackclient.common import clientmanager
|
||||||
|
from openstackclient.common import restapi
|
||||||
from openstackclient.tests import utils
|
from openstackclient.tests import utils
|
||||||
|
|
||||||
|
|
||||||
|
AUTH_REF = {'a': 1}
|
||||||
AUTH_TOKEN = "foobar"
|
AUTH_TOKEN = "foobar"
|
||||||
AUTH_URL = "http://0.0.0.0"
|
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):
|
class Container(object):
|
||||||
@@ -28,18 +43,7 @@ class Container(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class TestClientManager(utils.TestCase):
|
class TestClientCache(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,
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_singleton(self):
|
def test_singleton(self):
|
||||||
# NOTE(dtroyer): Verify that the ClientCache descriptor only invokes
|
# NOTE(dtroyer): Verify that the ClientCache descriptor only invokes
|
||||||
@@ -47,12 +51,88 @@ class TestClientManager(utils.TestCase):
|
|||||||
c = Container()
|
c = Container()
|
||||||
self.assertEqual(c.attr, c.attr)
|
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.assertEqual(
|
||||||
self.client_manager.identity.auth_token,
|
|
||||||
AUTH_TOKEN,
|
AUTH_TOKEN,
|
||||||
|
client_manager._token,
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.client_manager.identity.management_url,
|
|
||||||
AUTH_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)
|
||||||
|
|||||||
@@ -13,9 +13,12 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import json
|
||||||
import six
|
import six
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
AUTH_TOKEN = "foobar"
|
AUTH_TOKEN = "foobar"
|
||||||
AUTH_URL = "http://0.0.0.0"
|
AUTH_URL = "http://0.0.0.0"
|
||||||
@@ -42,7 +45,6 @@ class FakeApp(object):
|
|||||||
self.stdin = sys.stdin
|
self.stdin = sys.stdin
|
||||||
self.stdout = _stdout or sys.stdout
|
self.stdout = _stdout or sys.stdout
|
||||||
self.stderr = sys.stderr
|
self.stderr = sys.stderr
|
||||||
self.restapi = None
|
|
||||||
|
|
||||||
|
|
||||||
class FakeClientManager(object):
|
class FakeClientManager(object):
|
||||||
@@ -53,6 +55,7 @@ class FakeClientManager(object):
|
|||||||
self.object = None
|
self.object = None
|
||||||
self.volume = None
|
self.volume = None
|
||||||
self.network = None
|
self.network = None
|
||||||
|
self.session = None
|
||||||
self.auth_ref = None
|
self.auth_ref = None
|
||||||
|
|
||||||
|
|
||||||
@@ -78,3 +81,15 @@ class FakeResource(object):
|
|||||||
k != 'manager')
|
k != 'manager')
|
||||||
info = ", ".join("%s=%s" % (k, getattr(self, k)) for k in reprkeys)
|
info = ", ".join("%s=%s" % (k, getattr(self, k)) for k in reprkeys)
|
||||||
return "<%s %s>" % (self.__class__.__name__, info)
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user