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)
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))
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())
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)
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)
"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,
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)