def new_client(self):
        t = fixture.V2Token(user_id=self.user_id)
        t.set_scope()

        s = t.add_service('identity')
        s.add_endpoint(self.TEST_URL)

        d = fixture.V2Discovery(self.TEST_URL)

        self.requests.register_uri('POST', self.TEST_URL + '/tokens', json=t)

        # NOTE(jamielennox): Because of the versioned URL hack here even though
        # the V2 URL will be in the service catalog it will be the root URL
        # that will be queried for discovery.
        self.requests.register_uri('GET', self.TEST_ROOT_URL,
                                   json={'version': d})

        with self.deprecations.expect_deprecations_here():
            a = ksc_identity.V2Password(username=uuid.uuid4().hex,
                                        password=uuid.uuid4().hex,
                                        auth_url=self.TEST_URL)

            s = ksc_session.Session(auth=a)

        return v2_client.Client(session=s)
 def register_keystone_discovery_fixture(self, mreq):
     v2_url = "http://no.where/v2.0"
     v2_version = fixture.V2Discovery(v2_url)
     mreq.register_uri('GET',
                       v2_url,
                       json=_create_ver_list([v2_version]),
                       status_code=200)
Beispiel #3
0
    def register_keystone_auth_fixture(self, request_mocker):
        self.register_keystone_v2_token_fixture(request_mocker)
        self.register_keystone_v3_token_fixture(request_mocker)

        request_mocker.get(V2_URL, json=ks_fixture.V2Discovery(V2_URL))
        request_mocker.get(V3_URL, json=ks_fixture.V3Discovery(V3_URL))
        request_mocker.get(BASE_URL, json=ks_fixture.DiscoveryList(BASE_URL))
Beispiel #4
0
    def setUp(self):
        super(ShellTest, self).setUp()
        global _old_env
        _old_env, os.environ = os.environ, self.auth_env

        self.requests = self.useFixture(rm_fixture.Fixture())

        json_list = ks_fixture.DiscoveryList(DEFAULT_UNVERSIONED_AUTH_URL)
        self.requests.get(DEFAULT_UNVERSIONED_AUTH_URL,
                          json=json_list,
                          status_code=300)

        json_v2 = {'version': ks_fixture.V2Discovery(DEFAULT_V2_AUTH_URL)}
        self.requests.get(DEFAULT_V2_AUTH_URL, json=json_v2)

        json_v3 = {'version': ks_fixture.V3Discovery(DEFAULT_V3_AUTH_URL)}
        self.requests.get(DEFAULT_V3_AUTH_URL, json=json_v3)

        self.v2_auth = self.requests.post(DEFAULT_V2_AUTH_URL + '/tokens',
                                          json=V2_TOKEN)

        headers = {'X-Subject-Token': TOKEN_ID}
        self.v3_auth = self.requests.post(DEFAULT_V3_AUTH_URL + '/auth/tokens',
                                          headers=headers,
                                          json=V3_TOKEN)

        global shell, _shell, assert_called, assert_called_anytime
        _shell = openstack_shell.OpenStackImagesShell()
        shell = lambda cmd: _shell.main(cmd.split())
Beispiel #5
0
 def __init__(self, requests_mock, identity_url=IDENTITY_URL):
     super(ClientFixture, self).__init__()
     self.identity_url = identity_url
     self.client = None
     self.token = fixture.V2Token()
     self.token.set_scope()
     self.requests_mock = requests_mock
     self.discovery = fixture.V2Discovery(href=self.identity_url)
     s = self.token.add_service('nfv-orchestration')
     s.add_endpoint(TACKER_URL)
Beispiel #6
0
    def __init__(self, requests,
                 compute_url=COMPUTE_URL, identity_url=IDENTITY_URL):
        super(V1, self).__init__()
        self.identity_url = identity_url
        self.compute_url = compute_url
        self.client = None
        self.requests = requests

        self.token = fixture.V2Token()
        self.token.set_scope()
        self.discovery = fixture.V2Discovery(href=self.identity_url)

        s = self.token.add_service('compute')
        s.add_endpoint(self.compute_url)

        s = self.token.add_service('computev3')
        s.add_endpoint(self.compute_url)
Beispiel #7
0
    "keystone"
}, {
    "endpoints": [{
        "adminURL": "http://swift/swiftapi/admin",
        "region": "RegionOne",
        "internalURL": "http://swift/swiftapi/internal",
        "publicURL": "http://swift/swiftapi/public"
    }],
    "type":
    "object-store",
    "name":
    "swift"
}]

V2_URL = "%sv2.0" % BASE_URL
V2_VERSION = fixture.V2Discovery(V2_URL)
V2_VERSION.updated_str = UPDATED

V2_AUTH_RESPONSE = json.dumps({
    "access": {
        "token": {
            "expires": "2020-01-01T00:00:10.000123Z",
            "id": 'fakeToken',
            "tenant": {
                "id": '1'
            },
        },
        "user": {
            "id": 'test'
        },
        "serviceCatalog": TEST_SERVICE_CATALOG,
Beispiel #8
0
class ShellTest(testtools.TestCase):

    version_id = u'v2.0'
    links = [{u'href': u'http://no.where/v2.0', u'rel': u'self'}]

    v2_version = fixture.V2Discovery(V2_URL)
    v2_version.updated_str = UPDATED

    v2_auth_response = json.dumps({
        "access": {
            "token": {
                "expires": "2020-01-01T00:00:10.000123Z",
                "id": 'fakeToken',
                "tenant": {
                    "id": uuid.uuid4().hex
                },
            },
            "user": {
                "id": uuid.uuid4().hex
            },
            "serviceCatalog": TEST_SERVICE_CATALOG,
        },
    })

    def make_env(self, exclude=None, fake_env=FAKE_V2_ENV):
        env = dict((k, v) for k, v in fake_env.items() if k != exclude)
        self.useFixture(fixtures.MonkeyPatch('os.environ', env))

    def setUp(self):
        super(ShellTest, self).setUp()
        self.useFixture(fixtures.MonkeyPatch(
                        'troveclient.client.get_client_class',
                        mock.MagicMock))

    def shell(self, argstr, exitcodes=(0,)):
        orig = sys.stdout
        orig_stderr = sys.stderr
        try:
            sys.stdout = six.StringIO()
            sys.stderr = six.StringIO()
            _shell = troveclient.shell.OpenStackTroveShell()
            _shell.main(argstr.split())
        except SystemExit:
            exc_type, exc_value, exc_traceback = sys.exc_info()
            self.assertIn(exc_value.code, exitcodes)
        finally:
            stdout = sys.stdout.getvalue()
            sys.stdout.close()
            sys.stdout = orig
            stderr = sys.stderr.getvalue()
            sys.stderr.close()
            sys.stderr = orig_stderr
        return (stdout, stderr)

    def register_keystone_discovery_fixture(self, mreq):
        mreq.register_uri('GET', V2_URL,
                          json=_create_ver_list([self.v2_version]),
                          status_code=200)

    def test_help_unknown_command(self):
        self.assertRaises(exceptions.CommandError, self.shell, 'help foofoo')

    def test_help(self):
        required = [
            '.*?^usage: ',
            '.*?^See "trove help COMMAND" for help on a specific command',
        ]
        stdout, stderr = self.shell('help')
        for r in required:
            self.assertThat(
                (stdout + stderr),
                testtools.matchers.MatchesRegex(r, re.DOTALL | re.MULTILINE))

    def test_no_username(self):
        required = ('You must provide a username'
                    ' via either --os-username or'
                    ' env[OS_USERNAME]')
        self.make_env(exclude='OS_USERNAME')
        try:
            self.shell('list')
        except exceptions.CommandError as message:
            self.assertEqual(required, message.args[0])
        else:
            self.fail('CommandError not raised')

    def test_no_auth_url(self):
        required = ('You must provide an auth url'
                    ' via either --os-auth-url or env[OS_AUTH_URL] '
                    'or specify an auth_system which defines a default '
                    'url with --os-auth-system or env[OS_AUTH_SYSTEM]',)
        self.make_env(exclude='OS_AUTH_URL')
        try:
            self.shell('list')
        except exceptions.CommandError as message:
            self.assertEqual(required, message.args)
        else:
            self.fail('CommandError not raised')

    @mock.patch('keystoneauth1.discover.get_version_data',
                return_value=[{u'status': u'stable', u'id': version_id,
                               u'links': links}])
    @mock.patch('troveclient.v1.datastores.DatastoreVersions.list')
    @requests_mock.Mocker()
    def test_datastore_version_list(self, mock_discover,
                                    mock_list, mock_requests):
        expected = '\n'.join([
            '+----+------+',
            '| ID | Name |',
            '+----+------+',
            '+----+------+',
            ''
        ])
        self.make_env()
        self.register_keystone_discovery_fixture(mock_requests)
        mock_requests.register_uri('POST', "http://no.where/v2.0/tokens",
                                   text=self.v2_auth_response)
        stdout, stderr = self.shell('datastore-version-list XXX')
        self.assertEqual(expected, (stdout + stderr))

    @mock.patch('keystoneauth1.discover.get_version_data',
                return_value=[{u'status': u'stable', u'id': version_id,
                               u'links': links}])
    @mock.patch('troveclient.v1.datastores.Datastores.list')
    @requests_mock.Mocker()
    def test_get_datastore_list(self, mock_discover,
                                mock_list, mock_requests):
        expected = '\n'.join([
            '+----+------+',
            '| ID | Name |',
            '+----+------+',
            '+----+------+',
            ''
        ])
        self.make_env()
        self.register_keystone_discovery_fixture(mock_requests)
        mock_requests.register_uri('POST', "http://no.where/v2.0/tokens",
                                   text=self.v2_auth_response)
        stdout, stderr = self.shell('datastore-list')
        self.assertEqual(expected, (stdout + stderr))
    def test_setting_no_discover_hack(self):
        v2_disc = fixture.V2Discovery(self.V2_URL)
        common_disc = fixture.DiscoveryList(href=self.BASE_URL)

        v2_m = self.stub_url('GET', ['v2.0'],
                             base_url=self.BASE_URL,
                             status_code=200,
                             json=v2_disc)

        common_m = self.stub_url('GET', [],
                                 base_url=self.BASE_URL,
                                 status_code=300,
                                 json=common_disc)

        resp_text = uuid.uuid4().hex

        resp_m = self.stub_url('GET', ['v3', 'path'],
                               base_url=self.BASE_URL,
                               status_code=200,
                               text=resp_text)

        # it doesn't matter that we auth with v2 here, discovery hack is in
        # base. All identity endpoints point to v2 urls.
        token = fixture.V2Token()
        service = token.add_service(self.IDENTITY)
        service.add_endpoint(public=self.V2_URL,
                             admin=self.V2_URL,
                             internal=self.V2_URL)

        self.stub_url('POST', ['tokens'], base_url=self.V2_URL, json=token)

        v2_auth = identity.V2Password(self.V2_URL,
                                      username=uuid.uuid4().hex,
                                      password=uuid.uuid4().hex)

        sess = session.Session(auth=v2_auth)

        # v2 auth with v2 url doesn't make any discovery calls.
        self.assertFalse(v2_m.called)
        self.assertFalse(common_m.called)

        # v3 endpoint with hack will strip v2 suffix and call root discovery
        endpoint = sess.get_endpoint(service_type=self.IDENTITY,
                                     version=(3, 0),
                                     allow_version_hack=True)

        # got v3 url
        self.assertEqual(self.V3_URL, endpoint)

        # only called root discovery.
        self.assertFalse(v2_m.called)
        self.assertTrue(common_m.called_once)

        # with hack turned off it calls v2 discovery and finds nothing
        endpoint = sess.get_endpoint(service_type=self.IDENTITY,
                                     version=(3, 0),
                                     allow_version_hack=False)
        self.assertIsNone(endpoint)

        # this one called v2
        self.assertTrue(v2_m.called_once)
        self.assertTrue(common_m.called_once)

        # get_endpoint returning None raises EndpointNotFound when requesting
        self.assertRaises(exceptions.EndpointNotFound,
                          sess.get,
                          '/path',
                          endpoint_filter={
                              'service_type': 'identity',
                              'version': (3, 0),
                              'allow_version_hack': False
                          })

        self.assertFalse(resp_m.called)

        # works when allow_version_hack is set
        resp = sess.get('/path',
                        endpoint_filter={
                            'service_type': 'identity',
                            'version': (3, 0),
                            'allow_version_hack': True
                        })

        self.assertTrue(resp_m.called_once)
        self.assertEqual(resp_text, resp.text)