Merge "Change app.restapi to app.client_manager.session"
This commit is contained in:
		@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user