Merge lp:~zulcss/ubuntu/precise/keystone/trunk into lp:~ubuntu-cloud-archive/ubuntu/precise/keystone/trunk

Proposed by Chuck Short
Status: Merged
Approved by: James Page
Approved revision: 36
Merged at revision: 36
Proposed branch: lp:~zulcss/ubuntu/precise/keystone/trunk
Merge into: lp:~ubuntu-cloud-archive/ubuntu/precise/keystone/trunk
Diff against target: 17668 lines (+8705/-5185)
149 files modified
.coveragerc (+6/-0)
.gitignore (+2/-0)
.mailmap (+1/-1)
.pc/applied-patches (+0/-2)
.pc/fix-ubuntu-tests.patch/tests/test_content_types.py (+0/-805)
.pc/fix-ubuntu-tests.patch/tests/test_keystoneclient.py (+0/-1093)
.pc/sql_connection.patch/etc/keystone.conf.sample (+0/-195)
AUTHORS (+19/-2)
ChangeLog (+2094/-15)
HACKING.rst (+2/-0)
PKG-INFO (+10/-2)
bin/keystone-all (+4/-1)
debian/changelog (+29/-0)
debian/control (+3/-4)
debian/patches/fix-ubuntu-tests.patch (+4/-230)
debian/patches/sql_connection.patch (+24/-20)
debian/rules (+2/-2)
debian/tests/test_overrides.conf (+5/-1)
doc/source/community.rst (+8/-1)
doc/source/configuration.rst (+204/-6)
doc/source/index.rst (+2/-2)
doc/source/man/keystone-all.rst (+6/-0)
doc/source/man/keystone-manage.rst (+8/-0)
etc/keystone.conf.sample (+51/-11)
etc/policy.json (+55/-1)
examples/pki/certs/cacert.pem (+18/-0)
examples/pki/certs/middleware.pem (+33/-0)
examples/pki/certs/signing_cert.pem (+17/-0)
examples/pki/certs/ssl_cert.pem (+17/-0)
examples/pki/cms/auth_token_revoked.json (+1/-0)
examples/pki/cms/auth_token_revoked.pem (+42/-0)
examples/pki/cms/auth_token_scoped.json (+1/-0)
examples/pki/cms/auth_token_scoped.pem (+41/-0)
examples/pki/cms/auth_token_unscoped.json (+1/-0)
examples/pki/cms/auth_token_unscoped.pem (+17/-0)
examples/pki/cms/revocation_list.json (+1/-0)
examples/pki/cms/revocation_list.pem (+12/-0)
examples/pki/gen_pki.sh (+222/-0)
examples/pki/private/cakey.pem (+16/-0)
examples/pki/private/signing_key.pem (+16/-0)
examples/pki/private/ssl_key.pem (+16/-0)
examples/ssl/certs/ca.pem (+0/-22)
examples/ssl/certs/keystone.pem (+0/-62)
examples/ssl/certs/middleware.pem (+0/-77)
examples/ssl/private/cakey.pem (+0/-18)
examples/ssl/private/keystonekey.pem (+0/-15)
httpd/keystone.py (+2/-2)
keystone.egg-info/PKG-INFO (+10/-2)
keystone.egg-info/SOURCES.txt (+32/-19)
keystone.egg-info/requires.txt (+4/-3)
keystone/catalog/backends/kvs.py (+43/-10)
keystone/catalog/backends/sql.py (+55/-56)
keystone/catalog/backends/templated.py (+2/-2)
keystone/catalog/core.py (+143/-35)
keystone/clean.py (+13/-8)
keystone/common/bufferedhttp.py (+2/-0)
keystone/common/cms.py (+80/-6)
keystone/common/controller.py (+96/-0)
keystone/common/ldap/core.py (+54/-8)
keystone/common/ldap/fakeldap.py (+14/-0)
keystone/common/models.py (+2/-0)
keystone/common/openssl.py (+42/-47)
keystone/common/serializer.py (+43/-13)
keystone/common/sql/core.py (+90/-39)
keystone/common/sql/migrate_repo/versions/001_add_initial_tables.py (+91/-19)
keystone/common/sql/migrate_repo/versions/005_set_utf8_character_set.py (+50/-0)
keystone/common/sql/migrate_repo/versions/006_add_policy_table.py (+36/-0)
keystone/common/sql/migrate_repo/versions/007_add_domain_tables.py (+79/-0)
keystone/common/sql/util.py (+5/-0)
keystone/common/systemd.py (+3/-0)
keystone/common/utils.py (+20/-0)
keystone/common/wsgi.py (+17/-5)
keystone/config.py (+45/-4)
keystone/contrib/ec2/backends/sql.py (+8/-6)
keystone/contrib/ec2/core.py (+16/-13)
keystone/contrib/s3/core.py (+1/-1)
keystone/contrib/user_crud/core.py (+7/-3)
keystone/exception.py (+52/-3)
keystone/identity/backends/kvs.py (+42/-21)
keystone/identity/backends/ldap/core.py (+101/-47)
keystone/identity/backends/sql.py (+475/-203)
keystone/identity/core.py (+427/-69)
keystone/locale/ca/LC_MESSAGES/keystone.po (+40/-0)
keystone/locale/ja/LC_MESSAGES/keystone.po (+40/-0)
keystone/locale/keystone.pot (+10/-2)
keystone/middleware/auth_token.py (+13/-802)
keystone/middleware/core.py (+3/-3)
keystone/middleware/s3_token.py (+2/-2)
keystone/openstack/common/iniparser.py (+1/-1)
keystone/openstack/common/setup.py (+226/-48)
keystone/openstack/common/timeutils.py (+15/-5)
keystone/policy/backends/rules.py (+8/-22)
keystone/policy/backends/sql.py (+103/-0)
keystone/policy/core.py (+89/-0)
keystone/service.py (+401/-126)
keystone/test.py (+12/-6)
keystone/token/backends/kvs.py (+9/-4)
keystone/token/backends/memcache.py (+8/-5)
keystone/token/backends/sql.py (+22/-40)
keystone/token/core.py (+11/-0)
run_tests.py (+0/-367)
run_tests.sh (+14/-11)
setup.cfg (+1/-0)
setup.py (+11/-1)
tests/backend_sql.conf (+4/-1)
tests/backend_sql_disk.conf (+2/-0)
tests/default_fixtures.py (+38/-34)
tests/signing/Makefile (+0/-34)
tests/signing/README (+0/-11)
tests/signing/auth_token_revoked.json (+0/-1)
tests/signing/auth_token_revoked.pem (+0/-40)
tests/signing/auth_token_scoped.json (+0/-1)
tests/signing/auth_token_scoped.pem (+0/-40)
tests/signing/auth_token_unscoped.json (+0/-1)
tests/signing/auth_token_unscoped.pem (+0/-14)
tests/signing/cacert.pem (+0/-18)
tests/signing/private_key.pem (+0/-16)
tests/signing/revocation_list.json (+0/-1)
tests/signing/revocation_list.pem (+0/-11)
tests/signing/signing_cert.pem (+0/-13)
tests/test_auth_token_middleware.py (+111/-11)
tests/test_backend.py (+225/-22)
tests/test_backend_kvs.py (+0/-16)
tests/test_backend_ldap.py (+330/-0)
tests/test_backend_pam.py (+2/-2)
tests/test_backend_sql.py (+154/-29)
tests/test_backend_templated.py (+5/-16)
tests/test_content_types.py (+49/-65)
tests/test_exception.py (+66/-7)
tests/test_import_legacy.py (+6/-1)
tests/test_keystoneclient.py (+48/-27)
tests/test_keystoneclient_sql.py (+80/-2)
tests/test_migrate_nova_auth.py (+6/-1)
tests/test_overrides.conf (+3/-3)
tests/test_s3_token_middleware.py (+4/-4)
tests/test_serializer.py (+2/-4)
tests/test_service.py (+298/-0)
tests/test_singular_plural.py (+52/-0)
tests/test_sql_upgrade.py (+129/-0)
tests/test_ssl.py (+5/-5)
tests/test_v3.py (+181/-0)
tests/test_v3_catalog.py (+143/-0)
tests/test_v3_identity.py (+349/-0)
tests/test_v3_policy.py (+78/-0)
tools/install_venv.py (+7/-0)
tools/pip-requires (+3/-2)
tools/sample_data.sh (+69/-51)
tools/test-requires (+0/-1)
tox.ini (+5/-3)
To merge this branch: bzr merge lp:~zulcss/ubuntu/precise/keystone/trunk
Reviewer Review Type Date Requested Status
James Page Approve
Review via email: mp+136257@code.launchpad.net

Description of the change

keystone g1

To post a comment you must log in.
Revision history for this message
James Page (james-page) wrote :

LGTM; uploaded to grizzly-staging

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file '.coveragerc'
--- .coveragerc 1970-01-01 00:00:00 +0000
+++ .coveragerc 2012-11-26 19:58:28 +0000
@@ -0,0 +1,6 @@
1[run]
2branch = True
3omit = /usr*,setup.py,*egg*,.venv/*,.tox/*,tests/*
4
5[report]
6ignore-errors = True
07
=== modified file '.gitignore'
--- .gitignore 2012-09-07 13:04:01 +0000
+++ .gitignore 2012-11-26 19:58:28 +0000
@@ -7,6 +7,8 @@
7keystone.egg-info/7keystone.egg-info/
8*.log8*.log
9.coverage9.coverage
10coverage.xml
11cover/*
10covhtml12covhtml
11pep8.txt13pep8.txt
12nosetests.xml14nosetests.xml
1315
=== modified file '.mailmap'
--- .mailmap 2012-07-06 10:37:01 +0000
+++ .mailmap 2012-11-26 19:58:28 +0000
@@ -20,4 +20,4 @@
20Sirish Bitra <sirish.bitra@gmail.com> sirish.bitra <sirish.bitra@gmail.com>20Sirish Bitra <sirish.bitra@gmail.com> sirish.bitra <sirish.bitra@gmail.com>
21Sirish Bitra <sirish.bitra@gmail.com> sirishbitra <sirish.bitra@gmail.com>21Sirish Bitra <sirish.bitra@gmail.com> sirishbitra <sirish.bitra@gmail.com>
22Sirish Bitra <sirish.bitra@gmail.com> root <root@bsirish.(none)>22Sirish Bitra <sirish.bitra@gmail.com> root <root@bsirish.(none)>
2323Zhongyue Luo <zhongyue.nah@intel.com> <lzyeval@gmail.com>
2424
=== removed file '.pc/applied-patches'
--- .pc/applied-patches 2012-03-26 13:41:45 +0000
+++ .pc/applied-patches 1970-01-01 00:00:00 +0000
@@ -1,2 +0,0 @@
1fix-ubuntu-tests.patch
2sql_connection.patch
30
=== removed directory '.pc/fix-ubuntu-tests.patch'
=== removed directory '.pc/fix-ubuntu-tests.patch/tests'
=== removed file '.pc/fix-ubuntu-tests.patch/tests/test_content_types.py'
--- .pc/fix-ubuntu-tests.patch/tests/test_content_types.py 2012-09-17 09:15:51 +0000
+++ .pc/fix-ubuntu-tests.patch/tests/test_content_types.py 1970-01-01 00:00:00 +0000
@@ -1,805 +0,0 @@
1# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack LLC
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License. You may obtain
7# a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations
15# under the License.
16
17import httplib
18import uuid
19
20from lxml import etree
21import nose.exc
22
23from keystone.common import serializer
24from keystone.openstack.common import jsonutils
25from keystone import test
26
27import default_fixtures
28
29
30class RestfulTestCase(test.TestCase):
31 """Performs restful tests against the WSGI app over HTTP.
32
33 This class launches public & admin WSGI servers for every test, which can
34 be accessed by calling ``public_request()`` or ``admin_request()``,
35 respectfully.
36
37 ``restful_request()`` and ``request()`` methods are also exposed if you
38 need to bypass restful conventions or access HTTP details in your test
39 implementation.
40
41 Three new asserts are provided:
42
43 * ``assertResponseSuccessful``: called automatically for every request
44 unless an ``expected_status`` is provided
45 * ``assertResponseStatus``: called instead of ``assertResponseSuccessful``,
46 if an ``expected_status`` is provided
47 * ``assertValidResponseHeaders``: validates that the response headers
48 appear as expected
49
50 Requests are automatically serialized according to the defined
51 ``content_type``. Responses are automatically deserialized as well, and
52 available in the ``response.body`` attribute. The original body content is
53 available in the ``response.raw`` attribute.
54
55 """
56
57 # default content type to test
58 content_type = 'json'
59
60 def setUp(self):
61 super(RestfulTestCase, self).setUp()
62
63 self.load_backends()
64 self.load_fixtures(default_fixtures)
65
66 self.public_server = self.serveapp('keystone', name='main')
67 self.admin_server = self.serveapp('keystone', name='admin')
68
69 # TODO(termie): is_admin is being deprecated once the policy stuff
70 # is all working
71 # TODO(termie): add an admin user to the fixtures and use that user
72 # override the fixtures, for now
73 self.metadata_foobar = self.identity_api.update_metadata(
74 self.user_foo['id'],
75 self.tenant_bar['id'],
76 dict(roles=['keystone_admin'], is_admin='1'))
77
78 def tearDown(self):
79 """Kill running servers and release references to avoid leaks."""
80 self.public_server.kill()
81 self.admin_server.kill()
82 self.public_server = None
83 self.admin_server = None
84 super(RestfulTestCase, self).tearDown()
85
86 def request(self, host='0.0.0.0', port=80, method='GET', path='/',
87 headers=None, body=None, expected_status=None):
88 """Perform request and fetch httplib.HTTPResponse from the server."""
89
90 # Initialize headers dictionary
91 headers = {} if not headers else headers
92
93 connection = httplib.HTTPConnection(host, port, timeout=10)
94
95 # Perform the request
96 connection.request(method, path, body, headers)
97
98 # Retrieve the response so we can close the connection
99 response = connection.getresponse()
100
101 response.body = response.read()
102
103 # Close the connection
104 connection.close()
105
106 # Automatically assert HTTP status code
107 if expected_status:
108 self.assertResponseStatus(response, expected_status)
109 else:
110 self.assertResponseSuccessful(response)
111 self.assertValidResponseHeaders(response)
112
113 # Contains the response headers, body, etc
114 return response
115
116 def assertResponseSuccessful(self, response):
117 """Asserts that a status code lies inside the 2xx range.
118
119 :param response: :py:class:`httplib.HTTPResponse` to be
120 verified to have a status code between 200 and 299.
121
122 example::
123
124 >>> self.assertResponseSuccessful(response, 203)
125 """
126 self.assertTrue(
127 response.status >= 200 and response.status <= 299,
128 'Status code %d is outside of the expected range (2xx)\n\n%s' %
129 (response.status, response.body))
130
131 def assertResponseStatus(self, response, expected_status):
132 """Asserts a specific status code on the response.
133
134 :param response: :py:class:`httplib.HTTPResponse`
135 :param assert_status: The specific ``status`` result expected
136
137 example::
138
139 >>> self.assertResponseStatus(response, 203)
140 """
141 self.assertEqual(
142 response.status,
143 expected_status,
144 'Status code %s is not %s, as expected)\n\n%s' %
145 (response.status, expected_status, response.body))
146
147 def assertValidResponseHeaders(self, response):
148 """Ensures that response headers appear as expected."""
149 self.assertIn('X-Auth-Token', response.getheader('Vary'))
150
151 def _to_content_type(self, body, headers, content_type=None):
152 """Attempt to encode JSON and XML automatically."""
153 content_type = content_type or self.content_type
154
155 if content_type == 'json':
156 headers['Accept'] = 'application/json'
157 if body:
158 headers['Content-Type'] = 'application/json'
159 return jsonutils.dumps(body)
160 elif content_type == 'xml':
161 headers['Accept'] = 'application/xml'
162 if body:
163 headers['Content-Type'] = 'application/xml'
164 return serializer.to_xml(body)
165
166 def _from_content_type(self, response, content_type=None):
167 """Attempt to decode JSON and XML automatically, if detected."""
168 content_type = content_type or self.content_type
169
170 # make the original response body available, for convenience
171 response.raw = response.body
172
173 if response.body is not None and response.body.strip():
174 # if a body is provided, a Content-Type is also expected
175 header = response.getheader('Content-Type', None)
176 self.assertIn(self.content_type, header)
177
178 if self.content_type == 'json':
179 response.body = jsonutils.loads(response.body)
180 elif self.content_type == 'xml':
181 response.body = etree.fromstring(response.body)
182
183 def restful_request(self, headers=None, body=None, token=None, **kwargs):
184 """Serializes/deserializes json/xml as request/response body.
185
186 .. WARNING::
187
188 * Existing Accept header will be overwritten.
189 * Existing Content-Type header will be overwritten.
190
191 """
192 # Initialize headers dictionary
193 headers = {} if not headers else headers
194
195 if token is not None:
196 headers['X-Auth-Token'] = token
197
198 body = self._to_content_type(body, headers)
199
200 # Perform the HTTP request/response
201 response = self.request(headers=headers, body=body, **kwargs)
202
203 self._from_content_type(response)
204
205 # we can save some code & improve coverage by always doing this
206 if response.status >= 400:
207 self.assertValidErrorResponse(response)
208
209 # Contains the decoded response.body
210 return response
211
212 def _get_port(self, server):
213 return server.socket_info['socket'][1]
214
215 def _public_port(self):
216 return self._get_port(self.public_server)
217
218 def _admin_port(self):
219 return self._get_port(self.admin_server)
220
221 def public_request(self, port=None, **kwargs):
222 kwargs['port'] = port or self._public_port()
223 response = self.restful_request(**kwargs)
224 self.assertValidResponseHeaders(response)
225 return response
226
227 def admin_request(self, port=None, **kwargs):
228 kwargs['port'] = port or self._admin_port()
229 response = self.restful_request(**kwargs)
230 self.assertValidResponseHeaders(response)
231 return response
232
233 def get_scoped_token(self):
234 """Convenience method so that we can test authenticated requests."""
235 r = self.public_request(
236 method='POST',
237 path='/v2.0/tokens',
238 body={
239 'auth': {
240 'passwordCredentials': {
241 'username': self.user_foo['name'],
242 'password': self.user_foo['password'],
243 },
244 'tenantId': self.tenant_bar['id'],
245 },
246 })
247 return self._get_token_id(r)
248
249 def _get_token_id(self, r):
250 """Helper method to return a token ID from a response.
251
252 This needs to be overridden by child classes for on their content type.
253
254 """
255 raise NotImplementedError()
256
257
258class CoreApiTests(object):
259 def assertValidError(self, error):
260 """Applicable to XML and JSON."""
261 try:
262 print error.attrib
263 except:
264 pass
265 self.assertIsNotNone(error.get('code'))
266 self.assertIsNotNone(error.get('title'))
267 self.assertIsNotNone(error.get('message'))
268
269 def assertValidVersion(self, version):
270 """Applicable to XML and JSON.
271
272 However, navigating links and media-types differs between content
273 types so they need to be validated seperately.
274
275 """
276 self.assertIsNotNone(version)
277 self.assertIsNotNone(version.get('id'))
278 self.assertIsNotNone(version.get('status'))
279 self.assertIsNotNone(version.get('updated'))
280
281 def assertValidExtension(self, extension):
282 """Applicable to XML and JSON.
283
284 However, navigating extension links differs between content types.
285 They need to be validated seperately with assertValidExtensionLink.
286
287 """
288 self.assertIsNotNone(extension)
289 self.assertIsNotNone(extension.get('name'))
290 self.assertIsNotNone(extension.get('namespace'))
291 self.assertIsNotNone(extension.get('alias'))
292 self.assertIsNotNone(extension.get('updated'))
293
294 def assertValidExtensionLink(self, link):
295 """Applicable to XML and JSON."""
296 self.assertIsNotNone(link.get('rel'))
297 self.assertIsNotNone(link.get('type'))
298 self.assertIsNotNone(link.get('href'))
299
300 def assertValidTenant(self, tenant):
301 """Applicable to XML and JSON."""
302 self.assertIsNotNone(tenant.get('id'))
303 self.assertIsNotNone(tenant.get('name'))
304
305 def assertValidUser(self, user):
306 """Applicable to XML and JSON."""
307 self.assertIsNotNone(user.get('id'))
308 self.assertIsNotNone(user.get('name'))
309
310 def assertValidRole(self, tenant):
311 """Applicable to XML and JSON."""
312 self.assertIsNotNone(tenant.get('id'))
313 self.assertIsNotNone(tenant.get('name'))
314
315 def test_public_multiple_choice(self):
316 r = self.public_request(path='/', expected_status=300)
317 self.assertValidMultipleChoiceResponse(r)
318
319 def test_admin_multiple_choice(self):
320 r = self.admin_request(path='/', expected_status=300)
321 self.assertValidMultipleChoiceResponse(r)
322
323 def test_public_version(self):
324 r = self.public_request(path='/v2.0/')
325 self.assertValidVersionResponse(r)
326
327 def test_admin_version(self):
328 r = self.admin_request(path='/v2.0/')
329 self.assertValidVersionResponse(r)
330
331 def test_public_extensions(self):
332 self.public_request(path='/v2.0/extensions',)
333
334 # TODO(dolph): can't test this without any public extensions defined
335 # self.assertValidExtensionListResponse(r)
336
337 def test_admin_extensions(self):
338 r = self.admin_request(path='/v2.0/extensions',)
339 self.assertValidExtensionListResponse(r)
340
341 def test_admin_extensions_404(self):
342 self.admin_request(path='/v2.0/extensions/invalid-extension',
343 expected_status=404)
344
345 def test_public_osksadm_extension_404(self):
346 self.public_request(path='/v2.0/extensions/OS-KSADM',
347 expected_status=404)
348
349 def test_admin_osksadm_extension(self):
350 r = self.admin_request(path='/v2.0/extensions/OS-KSADM')
351 self.assertValidExtensionResponse(r)
352
353 def test_authenticate(self):
354 r = self.public_request(
355 method='POST',
356 path='/v2.0/tokens',
357 body={
358 'auth': {
359 'passwordCredentials': {
360 'username': self.user_foo['name'],
361 'password': self.user_foo['password'],
362 },
363 'tenantId': self.tenant_bar['id'],
364 },
365 },
366 # TODO(dolph): creating a token should result in a 201 Created
367 expected_status=200)
368 self.assertValidAuthenticationResponse(r)
369
370 def test_get_tenants_for_token(self):
371 r = self.public_request(path='/v2.0/tenants',
372 token=self.get_scoped_token())
373 self.assertValidTenantListResponse(r)
374
375 def test_validate_token(self):
376 token = self.get_scoped_token()
377 r = self.admin_request(
378 path='/v2.0/tokens/%(token_id)s' % {
379 'token_id': token,
380 },
381 token=token)
382 self.assertValidAuthenticationResponse(r)
383
384 def test_validate_token_belongs_to(self):
385 token = self.get_scoped_token()
386 path = ('/v2.0/tokens/%s?belongsTo=%s' % (token,
387 self.tenant_bar['id']))
388 r = self.admin_request(path=path, token=token)
389 self.assertValidAuthenticationResponse(r,
390 require_service_catalog=True)
391
392 def test_validate_token_no_belongs_to_still_returns_catalog(self):
393 token = self.get_scoped_token()
394 path = ('/v2.0/tokens/%s' % token)
395 r = self.admin_request(path=path, token=token)
396 self.assertValidAuthenticationResponse(r,
397 require_service_catalog=True)
398
399 def test_validate_token_head(self):
400 """The same call as above, except using HEAD.
401
402 There's no response to validate here, but this is included for the
403 sake of completely covering the core API.
404
405 """
406 token = self.get_scoped_token()
407 self.admin_request(
408 method='HEAD',
409 path='/v2.0/tokens/%(token_id)s' % {
410 'token_id': token,
411 },
412 token=token,
413 expected_status=204)
414
415 def test_endpoints(self):
416 token = self.get_scoped_token()
417 r = self.admin_request(
418 path='/v2.0/tokens/%(token_id)s/endpoints' % {
419 'token_id': token,
420 },
421 token=token)
422 self.assertValidEndpointListResponse(r)
423
424 def test_get_tenant(self):
425 token = self.get_scoped_token()
426 r = self.admin_request(
427 path='/v2.0/tenants/%(tenant_id)s' % {
428 'tenant_id': self.tenant_bar['id'],
429 },
430 token=token)
431 self.assertValidTenantResponse(r)
432
433 def test_get_user_roles(self):
434 raise nose.exc.SkipTest('Blocked by bug 933565')
435
436 token = self.get_scoped_token()
437 r = self.admin_request(
438 path='/v2.0/users/%(user_id)s/roles' % {
439 'user_id': self.user_foo['id'],
440 },
441 token=token)
442 self.assertValidRoleListResponse(r)
443
444 def test_get_user_roles_with_tenant(self):
445 token = self.get_scoped_token()
446 r = self.admin_request(
447 path='/v2.0/tenants/%(tenant_id)s/users/%(user_id)s/roles' % {
448 'tenant_id': self.tenant_bar['id'],
449 'user_id': self.user_foo['id'],
450 },
451 token=token)
452 self.assertValidRoleListResponse(r)
453
454 def test_get_user(self):
455 token = self.get_scoped_token()
456 r = self.admin_request(
457 path='/v2.0/users/%(user_id)s' % {
458 'user_id': self.user_foo['id'],
459 },
460 token=token)
461 self.assertValidUserResponse(r)
462
463 def test_error_response(self):
464 """This triggers assertValidErrorResponse by convention."""
465 self.public_request(path='/v2.0/tenants', expected_status=401)
466
467
468class JsonTestCase(RestfulTestCase, CoreApiTests):
469 content_type = 'json'
470
471 def _get_token_id(self, r):
472 """Applicable only to JSON."""
473 return r.body['access']['token']['id']
474
475 def assertValidErrorResponse(self, r):
476 self.assertIsNotNone(r.body.get('error'))
477 self.assertValidError(r.body['error'])
478 self.assertEqual(r.body['error']['code'], r.status)
479
480 def assertValidExtension(self, extension):
481 super(JsonTestCase, self).assertValidExtension(extension)
482
483 self.assertIsNotNone(extension.get('description'))
484 self.assertIsNotNone(extension.get('links'))
485 self.assertTrue(len(extension.get('links')))
486 for link in extension.get('links'):
487 self.assertValidExtensionLink(link)
488
489 def assertValidExtensionListResponse(self, r):
490 self.assertIsNotNone(r.body.get('extensions'))
491 self.assertIsNotNone(r.body['extensions'].get('values'))
492 self.assertTrue(len(r.body['extensions'].get('values')))
493 for extension in r.body['extensions']['values']:
494 self.assertValidExtension(extension)
495
496 def assertValidExtensionResponse(self, r):
497 self.assertValidExtension(r.body.get('extension'))
498
499 def assertValidAuthenticationResponse(self, r,
500 require_service_catalog=False):
501 self.assertIsNotNone(r.body.get('access'))
502 self.assertIsNotNone(r.body['access'].get('token'))
503 self.assertIsNotNone(r.body['access'].get('user'))
504
505 # validate token
506 self.assertIsNotNone(r.body['access']['token'].get('id'))
507 self.assertIsNotNone(r.body['access']['token'].get('expires'))
508 tenant = r.body['access']['token'].get('tenant')
509 if tenant is not None:
510 # validate tenant
511 self.assertIsNotNone(tenant.get('id'))
512 self.assertIsNotNone(tenant.get('name'))
513
514 # validate user
515 self.assertIsNotNone(r.body['access']['user'].get('id'))
516 self.assertIsNotNone(r.body['access']['user'].get('name'))
517
518 serviceCatalog = r.body['access'].get('serviceCatalog')
519 # validate service catalog
520 if require_service_catalog:
521 self.assertIsNotNone(serviceCatalog)
522 if serviceCatalog is not None:
523 self.assertTrue(len(r.body['access']['serviceCatalog']))
524 for service in r.body['access']['serviceCatalog']:
525 # validate service
526 self.assertIsNotNone(service.get('name'))
527 self.assertIsNotNone(service.get('type'))
528
529 # services contain at least one endpoint
530 self.assertIsNotNone(service.get('endpoints'))
531 self.assertTrue(len(service['endpoints']))
532 for endpoint in service['endpoints']:
533 # validate service endpoint
534 self.assertIsNotNone(endpoint.get('publicURL'))
535
536 def assertValidTenantListResponse(self, r):
537 self.assertIsNotNone(r.body.get('tenants'))
538 self.assertTrue(len(r.body['tenants']))
539 for tenant in r.body['tenants']:
540 self.assertValidTenant(tenant)
541 self.assertIsNotNone(tenant.get('enabled'))
542 self.assertIn(tenant.get('enabled'), [True, False])
543
544 def assertValidUserResponse(self, r):
545 self.assertIsNotNone(r.body.get('user'))
546 self.assertValidUser(r.body['user'])
547
548 def assertValidTenantResponse(self, r):
549 self.assertIsNotNone(r.body.get('tenant'))
550 self.assertValidTenant(r.body['tenant'])
551
552 def assertValidRoleListResponse(self, r):
553 self.assertIsNotNone(r.body.get('roles'))
554 self.assertTrue(len(r.body['roles']))
555 for role in r.body['roles']:
556 self.assertValidRole(role)
557
558 def assertValidVersion(self, version):
559 super(JsonTestCase, self).assertValidVersion(version)
560
561 self.assertIsNotNone(version.get('links'))
562 self.assertTrue(len(version.get('links')))
563 for link in version.get('links'):
564 self.assertIsNotNone(link.get('rel'))
565 self.assertIsNotNone(link.get('href'))
566
567 self.assertIsNotNone(version.get('media-types'))
568 self.assertTrue(len(version.get('media-types')))
569 for media in version.get('media-types'):
570 self.assertIsNotNone(media.get('base'))
571 self.assertIsNotNone(media.get('type'))
572
573 def assertValidMultipleChoiceResponse(self, r):
574 self.assertIsNotNone(r.body.get('versions'))
575 self.assertIsNotNone(r.body['versions'].get('values'))
576 self.assertTrue(len(r.body['versions']['values']))
577 for version in r.body['versions']['values']:
578 self.assertValidVersion(version)
579
580 def assertValidVersionResponse(self, r):
581 self.assertValidVersion(r.body.get('version'))
582
583 def assertValidEndpointListResponse(self, r):
584 self.assertIsNotNone(r.body.get('endpoints'))
585 self.assertTrue(len(r.body['endpoints']))
586 for endpoint in r.body['endpoints']:
587 self.assertIsNotNone(endpoint.get('id'))
588 self.assertIsNotNone(endpoint.get('name'))
589 self.assertIsNotNone(endpoint.get('type'))
590 self.assertIsNotNone(endpoint.get('publicURL'))
591 self.assertIsNotNone(endpoint.get('internalURL'))
592 self.assertIsNotNone(endpoint.get('adminURL'))
593
594 def test_service_crud_requires_auth(self):
595 """Service CRUD should 401 without an X-Auth-Token (bug 1006822)."""
596 # values here don't matter because we should 401 before they're checked
597 service_path = '/v2.0/OS-KSADM/services/%s' % uuid.uuid4().hex
598 service_body = {
599 'OS-KSADM:service': {
600 'name': uuid.uuid4().hex,
601 'type': uuid.uuid4().hex,
602 },
603 }
604
605 r = self.admin_request(method='GET',
606 path='/v2.0/OS-KSADM/services',
607 expected_status=401)
608 self.assertValidErrorResponse(r)
609
610 r = self.admin_request(method='POST',
611 path='/v2.0/OS-KSADM/services',
612 body=service_body,
613 expected_status=401)
614 self.assertValidErrorResponse(r)
615
616 r = self.admin_request(method='GET',
617 path=service_path,
618 expected_status=401)
619 self.assertValidErrorResponse(r)
620
621 r = self.admin_request(method='DELETE',
622 path=service_path,
623 expected_status=401)
624 self.assertValidErrorResponse(r)
625
626 def test_user_role_list_requires_auth(self):
627 """User role list should 401 without an X-Auth-Token (bug 1006815)."""
628 # values here don't matter because we should 401 before they're checked
629 path = '/v2.0/tenants/%(tenant_id)s/users/%(user_id)s/roles' % {
630 'tenant_id': uuid.uuid4().hex,
631 'user_id': uuid.uuid4().hex,
632 }
633
634 r = self.admin_request(path=path, expected_status=401)
635 self.assertValidErrorResponse(r)
636
637 def test_fetch_revocation_list_nonadmin_fails(self):
638 self.admin_request(
639 method='GET',
640 path='/v2.0/tokens/revoked',
641 expected_status=401)
642
643 def test_fetch_revocation_list_admin_200(self):
644 token = self.get_scoped_token()
645 r = self.restful_request(
646 method='GET',
647 path='/v2.0/tokens/revoked',
648 token=token,
649 expected_status=200,
650 port=self._admin_port())
651 self.assertValidRevocationListResponse(r)
652
653 def assertValidRevocationListResponse(self, response):
654 self.assertIsNotNone(response.body['signed'])
655
656
657class XmlTestCase(RestfulTestCase, CoreApiTests):
658 xmlns = 'http://docs.openstack.org/identity/api/v2.0'
659 content_type = 'xml'
660
661 def _get_token_id(self, r):
662 return r.body.find(self._tag('token')).get('id')
663
664 def _tag(self, tag_name, xmlns=None):
665 """Helper method to build an namespaced element name."""
666 return '{%(ns)s}%(tag)s' % {'ns': xmlns or self.xmlns, 'tag': tag_name}
667
668 def assertValidErrorResponse(self, r):
669 xml = r.body
670 self.assertEqual(xml.tag, self._tag('error'))
671
672 self.assertValidError(xml)
673 self.assertEqual(xml.get('code'), str(r.status))
674
675 def assertValidExtension(self, extension):
676 super(XmlTestCase, self).assertValidExtension(extension)
677
678 self.assertIsNotNone(extension.find(self._tag('description')))
679 self.assertTrue(extension.find(self._tag('description')).text)
680 self.assertTrue(len(extension.findall(self._tag('link'))))
681 for link in extension.findall(self._tag('link')):
682 self.assertValidExtensionLink(link)
683
684 def assertValidExtensionListResponse(self, r):
685 xml = r.body
686 self.assertEqual(xml.tag, self._tag('extensions'))
687
688 self.assertTrue(len(xml.findall(self._tag('extension'))))
689 for extension in xml.findall(self._tag('extension')):
690 self.assertValidExtension(extension)
691
692 def assertValidExtensionResponse(self, r):
693 xml = r.body
694 self.assertEqual(xml.tag, self._tag('extension'))
695
696 self.assertValidExtension(xml)
697
698 def assertValidVersion(self, version):
699 super(XmlTestCase, self).assertValidVersion(version)
700
701 self.assertTrue(len(version.findall(self._tag('link'))))
702 for link in version.findall(self._tag('link')):
703 self.assertIsNotNone(link.get('rel'))
704 self.assertIsNotNone(link.get('href'))
705
706 media_types = version.find(self._tag('media-types'))
707 self.assertIsNotNone(media_types)
708 self.assertTrue(len(media_types.findall(self._tag('media-type'))))
709 for media in media_types.findall(self._tag('media-type')):
710 self.assertIsNotNone(media.get('base'))
711 self.assertIsNotNone(media.get('type'))
712
713 def assertValidMultipleChoiceResponse(self, r):
714 xml = r.body
715 self.assertEqual(xml.tag, self._tag('versions'))
716
717 self.assertTrue(len(xml.findall(self._tag('version'))))
718 for version in xml.findall(self._tag('version')):
719 self.assertValidVersion(version)
720
721 def assertValidVersionResponse(self, r):
722 xml = r.body
723 self.assertEqual(xml.tag, self._tag('version'))
724
725 self.assertValidVersion(xml)
726
727 def assertValidEndpointListResponse(self, r):
728 xml = r.body
729 self.assertEqual(xml.tag, self._tag('endpoints'))
730
731 self.assertTrue(len(xml.findall(self._tag('endpoint'))))
732 for endpoint in xml.findall(self._tag('endpoint')):
733 self.assertIsNotNone(endpoint.get('id'))
734 self.assertIsNotNone(endpoint.get('name'))
735 self.assertIsNotNone(endpoint.get('type'))
736 self.assertIsNotNone(endpoint.get('publicURL'))
737 self.assertIsNotNone(endpoint.get('internalURL'))
738 self.assertIsNotNone(endpoint.get('adminURL'))
739
740 def assertValidTenantResponse(self, r):
741 xml = r.body
742 self.assertEqual(xml.tag, self._tag('tenant'))
743
744 self.assertValidTenant(xml)
745
746 def assertValidUserResponse(self, r):
747 xml = r.body
748 self.assertEqual(xml.tag, self._tag('user'))
749
750 self.assertValidUser(xml)
751
752 def assertValidRoleListResponse(self, r):
753 xml = r.body
754 self.assertEqual(xml.tag, self._tag('roles'))
755
756 self.assertTrue(len(r.body.findall(self._tag('role'))))
757 for role in r.body.findall(self._tag('role')):
758 self.assertValidRole(role)
759
760 def assertValidAuthenticationResponse(self, r,
761 require_service_catalog=False):
762 xml = r.body
763 self.assertEqual(xml.tag, self._tag('access'))
764
765 # validate token
766 token = xml.find(self._tag('token'))
767 self.assertIsNotNone(token)
768 self.assertIsNotNone(token.get('id'))
769 self.assertIsNotNone(token.get('expires'))
770 tenant = token.find(self._tag('tenant'))
771 if tenant is not None:
772 # validate tenant
773 self.assertValidTenant(tenant)
774 self.assertIn(tenant.get('enabled'), ['true', 'false'])
775
776 user = xml.find(self._tag('user'))
777 self.assertIsNotNone(user)
778 self.assertIsNotNone(user.get('id'))
779 self.assertIsNotNone(user.get('name'))
780
781 serviceCatalog = xml.find(self._tag('serviceCatalog'))
782 # validate the serviceCatalog
783 if require_service_catalog:
784 self.assertIsNotNone(serviceCatalog)
785 if serviceCatalog is not None:
786 self.assertTrue(len(serviceCatalog.findall(self._tag('service'))))
787 for service in serviceCatalog.findall(self._tag('service')):
788 # validate service
789 self.assertIsNotNone(service.get('name'))
790 self.assertIsNotNone(service.get('type'))
791
792 # services contain at least one endpoint
793 self.assertTrue(len(service))
794 for endpoint in service.findall(self._tag('endpoint')):
795 # validate service endpoint
796 self.assertIsNotNone(endpoint.get('publicURL'))
797
798 def assertValidTenantListResponse(self, r):
799 xml = r.body
800 self.assertEqual(xml.tag, self._tag('tenants'))
801
802 self.assertTrue(len(r.body))
803 for tenant in r.body.findall(self._tag('tenant')):
804 self.assertValidTenant(tenant)
805 self.assertIn(tenant.get('enabled'), ['true', 'false'])
8060
=== removed file '.pc/fix-ubuntu-tests.patch/tests/test_keystoneclient.py'
--- .pc/fix-ubuntu-tests.patch/tests/test_keystoneclient.py 2012-09-17 09:15:51 +0000
+++ .pc/fix-ubuntu-tests.patch/tests/test_keystoneclient.py 1970-01-01 00:00:00 +0000
@@ -1,1093 +0,0 @@
1# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack LLC
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License. You may obtain
7# a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations
15# under the License.
16
17import time
18import uuid
19import webob
20
21import nose.exc
22
23from keystone import test
24from keystone.openstack.common import jsonutils
25
26
27import default_fixtures
28
29OPENSTACK_REPO = 'https://review.openstack.org/p/openstack'
30KEYSTONECLIENT_REPO = '%s/python-keystoneclient.git' % OPENSTACK_REPO
31
32
33class CompatTestCase(test.TestCase):
34 def setUp(self):
35 super(CompatTestCase, self).setUp()
36
37 revdir = test.checkout_vendor(*self.get_checkout())
38 self.add_path(revdir)
39 self.clear_module('keystoneclient')
40
41 self.load_backends()
42 self.load_fixtures(default_fixtures)
43
44 self.public_server = self.serveapp('keystone', name='main')
45 self.admin_server = self.serveapp('keystone', name='admin')
46
47 # TODO(termie): is_admin is being deprecated once the policy stuff
48 # is all working
49 # TODO(termie): add an admin user to the fixtures and use that user
50 # override the fixtures, for now
51 self.metadata_foobar = self.identity_api.update_metadata(
52 self.user_foo['id'], self.tenant_bar['id'],
53 dict(roles=['keystone_admin'], is_admin='1'))
54
55 def tearDown(self):
56 self.public_server.kill()
57 self.admin_server.kill()
58 self.public_server = None
59 self.admin_server = None
60 super(CompatTestCase, self).tearDown()
61
62 def _public_url(self):
63 public_port = self.public_server.socket_info['socket'][1]
64 return "http://localhost:%s/v2.0" % public_port
65
66 def _admin_url(self):
67 admin_port = self.admin_server.socket_info['socket'][1]
68 return "http://localhost:%s/v2.0" % admin_port
69
70 def _client(self, admin=False, **kwargs):
71 from keystoneclient.v2_0 import client as ks_client
72
73 url = self._admin_url() if admin else self._public_url()
74 kc = ks_client.Client(endpoint=url,
75 auth_url=self._public_url(),
76 **kwargs)
77 kc.authenticate()
78 # have to manually overwrite the management url after authentication
79 kc.management_url = url
80 return kc
81
82 def get_client(self, user_ref=None, tenant_ref=None, admin=False):
83 if user_ref is None:
84 user_ref = self.user_foo
85 if tenant_ref is None:
86 for user in default_fixtures.USERS:
87 if user['id'] == user_ref['id']:
88 tenant_id = user['tenants'][0]
89 else:
90 tenant_id = tenant_ref['id']
91
92 return self._client(username=user_ref['name'],
93 password=user_ref['password'],
94 tenant_id=tenant_id,
95 admin=admin)
96
97
98class KeystoneClientTests(object):
99 """Tests for all versions of keystoneclient."""
100
101 def test_authenticate_tenant_name_and_tenants(self):
102 client = self.get_client()
103 tenants = client.tenants.list()
104 self.assertEquals(tenants[0].id, self.tenant_bar['id'])
105
106 def test_authenticate_tenant_id_and_tenants(self):
107 client = self._client(username=self.user_foo['name'],
108 password=self.user_foo['password'],
109 tenant_id='bar')
110 tenants = client.tenants.list()
111 self.assertEquals(tenants[0].id, self.tenant_bar['id'])
112
113 def test_authenticate_invalid_tenant_id(self):
114 from keystoneclient import exceptions as client_exceptions
115 self.assertRaises(client_exceptions.Unauthorized,
116 self._client,
117 username=self.user_foo['name'],
118 password=self.user_foo['password'],
119 tenant_id='baz')
120
121 def test_authenticate_token_no_tenant(self):
122 client = self.get_client()
123 token = client.auth_token
124 token_client = self._client(token=token)
125 tenants = token_client.tenants.list()
126 self.assertEquals(tenants[0].id, self.tenant_bar['id'])
127
128 def test_authenticate_token_tenant_id(self):
129 client = self.get_client()
130 token = client.auth_token
131 token_client = self._client(token=token, tenant_id='bar')
132 tenants = token_client.tenants.list()
133 self.assertEquals(tenants[0].id, self.tenant_bar['id'])
134
135 def test_authenticate_token_invalid_tenant_id(self):
136 from keystoneclient import exceptions as client_exceptions
137 client = self.get_client()
138 token = client.auth_token
139 self.assertRaises(client_exceptions.Unauthorized,
140 self._client, token=token,
141 tenant_id=uuid.uuid4().hex)
142
143 def test_authenticate_token_tenant_name(self):
144 client = self.get_client()
145 token = client.auth_token
146 token_client = self._client(token=token, tenant_name='BAR')
147 tenants = token_client.tenants.list()
148 self.assertEquals(tenants[0].id, self.tenant_bar['id'])
149 self.assertEquals(tenants[0].id, self.tenant_bar['id'])
150
151 def test_authenticate_and_delete_token(self):
152 from keystoneclient import exceptions as client_exceptions
153
154 client = self.get_client(admin=True)
155 token = client.auth_token
156 token_client = self._client(token=token)
157 tenants = token_client.tenants.list()
158 self.assertEquals(tenants[0].id, self.tenant_bar['id'])
159
160 client.tokens.delete(token_client.auth_token)
161
162 self.assertRaises(client_exceptions.Unauthorized,
163 token_client.tenants.list)
164
165 def test_authenticate_no_password(self):
166 from keystoneclient import exceptions as client_exceptions
167
168 user_ref = self.user_foo.copy()
169 user_ref['password'] = None
170 self.assertRaises(client_exceptions.AuthorizationFailure,
171 self.get_client,
172 user_ref)
173
174 def test_authenticate_no_username(self):
175 from keystoneclient import exceptions as client_exceptions
176
177 user_ref = self.user_foo.copy()
178 user_ref['name'] = None
179 self.assertRaises(client_exceptions.AuthorizationFailure,
180 self.get_client,
181 user_ref)
182
183 def test_authenticate_disabled_tenant(self):
184 from keystoneclient import exceptions as client_exceptions
185
186 admin_client = self.get_client(admin=True)
187
188 tenant = {
189 'name': uuid.uuid4().hex,
190 'description': uuid.uuid4().hex,
191 'enabled': False,
192 }
193 tenant_ref = admin_client.tenants.create(
194 tenant_name=tenant['name'],
195 description=tenant['description'],
196 enabled=tenant['enabled'])
197 tenant['id'] = tenant_ref.id
198
199 user = {
200 'name': uuid.uuid4().hex,
201 'password': uuid.uuid4().hex,
202 'email': uuid.uuid4().hex,
203 'tenant_id': tenant['id'],
204 }
205 user_ref = admin_client.users.create(
206 name=user['name'],
207 password=user['password'],
208 email=user['email'],
209 tenant_id=user['tenant_id'])
210 user['id'] = user_ref.id
211
212 # password authentication
213 self.assertRaises(
214 client_exceptions.Unauthorized,
215 self._client,
216 username=user['name'],
217 password=user['password'],
218 tenant_id=tenant['id'])
219
220 # token authentication
221 client = self._client(
222 username=user['name'],
223 password=user['password'])
224 self.assertRaises(
225 client_exceptions.Unauthorized,
226 self._client,
227 token=client.auth_token,
228 tenant_id=tenant['id'])
229
230 # FIXME(ja): this test should require the "keystone:admin" roled
231 # (probably the role set via --keystone_admin_role flag)
232 # FIXME(ja): add a test that admin endpoint is only sent to admin user
233 # FIXME(ja): add a test that admin endpoint returns unauthorized if not
234 # admin
235 def test_tenant_create_update_and_delete(self):
236 from keystoneclient import exceptions as client_exceptions
237
238 tenant_name = 'original_tenant'
239 tenant_description = 'My original tenant!'
240 tenant_enabled = True
241 client = self.get_client(admin=True)
242
243 # create, get, and list a tenant
244 tenant = client.tenants.create(tenant_name=tenant_name,
245 description=tenant_description,
246 enabled=tenant_enabled)
247 self.assertEquals(tenant.name, tenant_name)
248 self.assertEquals(tenant.description, tenant_description)
249 self.assertEquals(tenant.enabled, tenant_enabled)
250
251 tenant = client.tenants.get(tenant_id=tenant.id)
252 self.assertEquals(tenant.name, tenant_name)
253 self.assertEquals(tenant.description, tenant_description)
254 self.assertEquals(tenant.enabled, tenant_enabled)
255
256 tenant = [t for t in client.tenants.list() if t.id == tenant.id].pop()
257 self.assertEquals(tenant.name, tenant_name)
258 self.assertEquals(tenant.description, tenant_description)
259 self.assertEquals(tenant.enabled, tenant_enabled)
260
261 # update, get, and list a tenant
262 tenant_name = 'updated_tenant'
263 tenant_description = 'Updated tenant!'
264 tenant_enabled = False
265 tenant = client.tenants.update(tenant_id=tenant.id,
266 tenant_name=tenant_name,
267 enabled=tenant_enabled,
268 description=tenant_description)
269 self.assertEquals(tenant.name, tenant_name)
270 self.assertEquals(tenant.description, tenant_description)
271 self.assertEquals(tenant.enabled, tenant_enabled)
272
273 tenant = client.tenants.get(tenant_id=tenant.id)
274 self.assertEquals(tenant.name, tenant_name)
275 self.assertEquals(tenant.description, tenant_description)
276 self.assertEquals(tenant.enabled, tenant_enabled)
277
278 tenant = [t for t in client.tenants.list() if t.id == tenant.id].pop()
279 self.assertEquals(tenant.name, tenant_name)
280 self.assertEquals(tenant.description, tenant_description)
281 self.assertEquals(tenant.enabled, tenant_enabled)
282
283 # delete, get, and list a tenant
284 client.tenants.delete(tenant=tenant.id)
285 self.assertRaises(client_exceptions.NotFound, client.tenants.get,
286 tenant.id)
287 self.assertFalse([t for t in client.tenants.list()
288 if t.id == tenant.id])
289
290 def test_tenant_create_no_name(self):
291 from keystoneclient import exceptions as client_exceptions
292 client = self.get_client(admin=True)
293 self.assertRaises(client_exceptions.BadRequest,
294 client.tenants.create,
295 tenant_name="")
296
297 def test_tenant_delete_404(self):
298 from keystoneclient import exceptions as client_exceptions
299 client = self.get_client(admin=True)
300 self.assertRaises(client_exceptions.NotFound,
301 client.tenants.delete,
302 tenant=uuid.uuid4().hex)
303
304 def test_tenant_get_404(self):
305 from keystoneclient import exceptions as client_exceptions
306 client = self.get_client(admin=True)
307 self.assertRaises(client_exceptions.NotFound,
308 client.tenants.get,
309 tenant_id=uuid.uuid4().hex)
310
311 def test_tenant_update_404(self):
312 from keystoneclient import exceptions as client_exceptions
313 client = self.get_client(admin=True)
314 self.assertRaises(client_exceptions.NotFound,
315 client.tenants.update,
316 tenant_id=uuid.uuid4().hex)
317
318 def test_tenant_list(self):
319 client = self.get_client()
320 tenants = client.tenants.list()
321 self.assertEquals(len(tenants), 1)
322
323 # Admin endpoint should return *all* tenants
324 client = self.get_client(admin=True)
325 tenants = client.tenants.list()
326 self.assertEquals(len(tenants), len(default_fixtures.TENANTS))
327
328 def test_invalid_password(self):
329 from keystoneclient import exceptions as client_exceptions
330
331 good_client = self._client(username=self.user_foo['name'],
332 password=self.user_foo['password'])
333 good_client.tenants.list()
334
335 self.assertRaises(client_exceptions.Unauthorized,
336 self._client,
337 username=self.user_foo['name'],
338 password=uuid.uuid4().hex)
339
340 def test_invalid_user_and_password(self):
341 from keystoneclient import exceptions as client_exceptions
342
343 self.assertRaises(client_exceptions.Unauthorized,
344 self._client,
345 username=uuid.uuid4().hex,
346 password=uuid.uuid4().hex)
347
348 def test_change_password_invalidates_token(self):
349 from keystoneclient import exceptions as client_exceptions
350
351 client = self.get_client(admin=True)
352
353 username = uuid.uuid4().hex
354 passwd = uuid.uuid4().hex
355 user = client.users.create(name=username, password=passwd,
356 email=uuid.uuid4().hex)
357
358 token_id = client.tokens.authenticate(username=username,
359 password=passwd).id
360
361 # authenticate with a token should work before a password change
362 client.tokens.authenticate(token=token_id)
363
364 client.users.update_password(user=user.id, password=uuid.uuid4().hex)
365
366 # authenticate with a token should not work after a password change
367 self.assertRaises(client_exceptions.Unauthorized,
368 client.tokens.authenticate,
369 token=token_id)
370
371 def test_disable_user_invalidates_token(self):
372 from keystoneclient import exceptions as client_exceptions
373
374 admin_client = self.get_client(admin=True)
375 foo_client = self.get_client(self.user_foo)
376
377 admin_client.users.update_enabled(user=self.user_foo['id'],
378 enabled=False)
379
380 self.assertRaises(client_exceptions.Unauthorized,
381 foo_client.tokens.authenticate,
382 token=foo_client.auth_token)
383
384 self.assertRaises(client_exceptions.Unauthorized,
385 self.get_client,
386 self.user_foo)
387
388 def test_token_expiry_maintained(self):
389 foo_client = self.get_client(self.user_foo)
390 orig_token = foo_client.service_catalog.catalog['token']
391
392 time.sleep(1.01)
393 reauthenticated_token = foo_client.tokens.authenticate(
394 token=foo_client.auth_token)
395
396 self.assertEquals(orig_token['expires'],
397 reauthenticated_token.expires)
398
399 def test_user_create_update_delete(self):
400 from keystoneclient import exceptions as client_exceptions
401
402 test_username = 'new_user'
403 client = self.get_client(admin=True)
404 user = client.users.create(name=test_username,
405 password='password',
406 email='user1@test.com')
407 self.assertEquals(user.name, test_username)
408
409 user = client.users.get(user=user.id)
410 self.assertEquals(user.name, test_username)
411
412 user = client.users.update(user=user,
413 name=test_username,
414 email='user2@test.com')
415 self.assertEquals(user.email, 'user2@test.com')
416
417 # NOTE(termie): update_enabled doesn't return anything, probably a bug
418 client.users.update_enabled(user=user, enabled=False)
419 user = client.users.get(user.id)
420 self.assertFalse(user.enabled)
421
422 self.assertRaises(client_exceptions.Unauthorized,
423 self._client,
424 username=test_username,
425 password='password')
426 client.users.update_enabled(user, True)
427
428 user = client.users.update_password(user=user, password='password2')
429
430 self._client(username=test_username,
431 password='password2')
432
433 user = client.users.update_tenant(user=user, tenant='bar')
434 # TODO(ja): once keystonelight supports default tenant
435 # when you login without specifying tenant, the
436 # token should be scoped to tenant 'bar'
437
438 client.users.delete(user.id)
439 self.assertRaises(client_exceptions.NotFound, client.users.get,
440 user.id)
441
442 # Test creating a user with a tenant (auto-add to tenant)
443 user2 = client.users.create(name=test_username,
444 password='password',
445 email='user1@test.com',
446 tenant_id='bar')
447 self.assertEquals(user2.name, test_username)
448
449 def test_user_create_no_name(self):
450 from keystoneclient import exceptions as client_exceptions
451 client = self.get_client(admin=True)
452 self.assertRaises(client_exceptions.BadRequest,
453 client.users.create,
454 name="",
455 password=uuid.uuid4().hex,
456 email=uuid.uuid4().hex)
457
458 def test_user_create_404(self):
459 from keystoneclient import exceptions as client_exceptions
460 client = self.get_client(admin=True)
461 self.assertRaises(client_exceptions.NotFound,
462 client.users.create,
463 name=uuid.uuid4().hex,
464 password=uuid.uuid4().hex,
465 email=uuid.uuid4().hex,
466 tenant_id=uuid.uuid4().hex)
467
468 def test_user_get_404(self):
469 from keystoneclient import exceptions as client_exceptions
470 client = self.get_client(admin=True)
471 self.assertRaises(client_exceptions.NotFound,
472 client.users.get,
473 user=uuid.uuid4().hex)
474
475 def test_user_list_404(self):
476 from keystoneclient import exceptions as client_exceptions
477 client = self.get_client(admin=True)
478 self.assertRaises(client_exceptions.NotFound,
479 client.users.list,
480 tenant_id=uuid.uuid4().hex)
481
482 def test_user_update_404(self):
483 from keystoneclient import exceptions as client_exceptions
484 client = self.get_client(admin=True)
485 self.assertRaises(client_exceptions.NotFound,
486 client.users.update,
487 user=uuid.uuid4().hex)
488
489 def test_user_update_tenant_404(self):
490 raise nose.exc.SkipTest('N/A')
491 from keystoneclient import exceptions as client_exceptions
492 client = self.get_client(admin=True)
493 self.assertRaises(client_exceptions.NotFound,
494 client.users.update,
495 user=self.user_foo['id'],
496 tenant_id=uuid.uuid4().hex)
497
498 def test_user_update_password_404(self):
499 from keystoneclient import exceptions as client_exceptions
500 client = self.get_client(admin=True)
501 self.assertRaises(client_exceptions.NotFound,
502 client.users.update_password,
503 user=uuid.uuid4().hex,
504 password=uuid.uuid4().hex)
505
506 def test_user_delete_404(self):
507 from keystoneclient import exceptions as client_exceptions
508 client = self.get_client(admin=True)
509 self.assertRaises(client_exceptions.NotFound,
510 client.users.delete,
511 user=uuid.uuid4().hex)
512
513 def test_user_list(self):
514 client = self.get_client(admin=True)
515 users = client.users.list()
516 self.assertTrue(len(users) > 0)
517 user = users[0]
518 self.assertRaises(AttributeError, lambda: user.password)
519
520 def test_user_get(self):
521 client = self.get_client(admin=True)
522 user = client.users.get(user=self.user_foo['id'])
523 self.assertRaises(AttributeError, lambda: user.password)
524
525 def test_role_get(self):
526 client = self.get_client(admin=True)
527 role = client.roles.get(role='keystone_admin')
528 self.assertEquals(role.id, 'keystone_admin')
529
530 def test_role_crud(self):
531 from keystoneclient import exceptions as client_exceptions
532
533 test_role = 'new_role'
534 client = self.get_client(admin=True)
535 role = client.roles.create(name=test_role)
536 self.assertEquals(role.name, test_role)
537
538 role = client.roles.get(role=role.id)
539 self.assertEquals(role.name, test_role)
540
541 client.roles.delete(role=role.id)
542
543 self.assertRaises(client_exceptions.NotFound,
544 client.roles.delete,
545 role=role.id)
546 self.assertRaises(client_exceptions.NotFound,
547 client.roles.get,
548 role=role.id)
549
550 def test_role_create_no_name(self):
551 from keystoneclient import exceptions as client_exceptions
552 client = self.get_client(admin=True)
553 self.assertRaises(client_exceptions.BadRequest,
554 client.roles.create,
555 name="")
556
557 def test_role_get_404(self):
558 from keystoneclient import exceptions as client_exceptions
559 client = self.get_client(admin=True)
560 self.assertRaises(client_exceptions.NotFound,
561 client.roles.get,
562 role=uuid.uuid4().hex)
563
564 def test_role_delete_404(self):
565 from keystoneclient import exceptions as client_exceptions
566 client = self.get_client(admin=True)
567 self.assertRaises(client_exceptions.NotFound,
568 client.roles.delete,
569 role=uuid.uuid4().hex)
570
571 def test_role_list_404(self):
572 from keystoneclient import exceptions as client_exceptions
573 client = self.get_client(admin=True)
574 self.assertRaises(client_exceptions.NotFound,
575 client.roles.roles_for_user,
576 user=uuid.uuid4().hex,
577 tenant=uuid.uuid4().hex)
578 self.assertRaises(client_exceptions.NotFound,
579 client.roles.roles_for_user,
580 user=self.user_foo['id'],
581 tenant=uuid.uuid4().hex)
582 self.assertRaises(client_exceptions.NotFound,
583 client.roles.roles_for_user,
584 user=uuid.uuid4().hex,
585 tenant=self.tenant_bar['id'])
586
587 def test_role_list(self):
588 client = self.get_client(admin=True)
589 roles = client.roles.list()
590 # TODO(devcamcar): This assert should be more specific.
591 self.assertTrue(len(roles) > 0)
592
593 def test_ec2_credential_crud(self):
594 client = self.get_client()
595 creds = client.ec2.list(user_id=self.user_foo['id'])
596 self.assertEquals(creds, [])
597
598 cred = client.ec2.create(user_id=self.user_foo['id'],
599 tenant_id=self.tenant_bar['id'])
600 creds = client.ec2.list(user_id=self.user_foo['id'])
601 self.assertEquals(creds, [cred])
602
603 got = client.ec2.get(user_id=self.user_foo['id'], access=cred.access)
604 self.assertEquals(cred, got)
605
606 client.ec2.delete(user_id=self.user_foo['id'], access=cred.access)
607 creds = client.ec2.list(user_id=self.user_foo['id'])
608 self.assertEquals(creds, [])
609
610 def test_ec2_credentials_create_404(self):
611 from keystoneclient import exceptions as client_exceptions
612 client = self.get_client()
613 self.assertRaises(client_exceptions.NotFound,
614 client.ec2.create,
615 user_id=uuid.uuid4().hex,
616 tenant_id=self.tenant_bar['id'])
617 self.assertRaises(client_exceptions.NotFound,
618 client.ec2.create,
619 user_id=self.user_foo['id'],
620 tenant_id=uuid.uuid4().hex)
621
622 def test_ec2_credentials_delete_404(self):
623 from keystoneclient import exceptions as client_exceptions
624 client = self.get_client()
625 self.assertRaises(client_exceptions.NotFound,
626 client.ec2.delete,
627 user_id=uuid.uuid4().hex,
628 access=uuid.uuid4().hex)
629
630 def test_ec2_credentials_get_404(self):
631 from keystoneclient import exceptions as client_exceptions
632 client = self.get_client()
633 self.assertRaises(client_exceptions.NotFound,
634 client.ec2.get,
635 user_id=uuid.uuid4().hex,
636 access=uuid.uuid4().hex)
637
638 def test_ec2_credentials_list_404(self):
639 from keystoneclient import exceptions as client_exceptions
640 client = self.get_client()
641 self.assertRaises(client_exceptions.NotFound,
642 client.ec2.list,
643 user_id=uuid.uuid4().hex)
644
645 def test_ec2_credentials_list_user_forbidden(self):
646 from keystoneclient import exceptions as client_exceptions
647
648 two = self.get_client(self.user_two)
649 self.assertRaises(client_exceptions.Forbidden, two.ec2.list,
650 user_id=self.user_foo['id'])
651
652 def test_ec2_credentials_get_user_forbidden(self):
653 from keystoneclient import exceptions as client_exceptions
654
655 foo = self.get_client()
656 cred = foo.ec2.create(user_id=self.user_foo['id'],
657 tenant_id=self.tenant_bar['id'])
658
659 two = self.get_client(self.user_two)
660 self.assertRaises(client_exceptions.Forbidden, two.ec2.get,
661 user_id=self.user_foo['id'], access=cred.access)
662
663 foo.ec2.delete(user_id=self.user_foo['id'], access=cred.access)
664
665 def test_ec2_credentials_delete_user_forbidden(self):
666 from keystoneclient import exceptions as client_exceptions
667
668 foo = self.get_client()
669 cred = foo.ec2.create(user_id=self.user_foo['id'],
670 tenant_id=self.tenant_bar['id'])
671
672 two = self.get_client(self.user_two)
673 self.assertRaises(client_exceptions.Forbidden, two.ec2.delete,
674 user_id=self.user_foo['id'], access=cred.access)
675
676 foo.ec2.delete(user_id=self.user_foo['id'], access=cred.access)
677
678 def test_service_crud(self):
679 from keystoneclient import exceptions as client_exceptions
680 client = self.get_client(admin=True)
681
682 service_name = uuid.uuid4().hex
683 service_type = uuid.uuid4().hex
684 service_desc = uuid.uuid4().hex
685
686 # create & read
687 service = client.services.create(name=service_name,
688 service_type=service_type,
689 description=service_desc)
690 self.assertEquals(service_name, service.name)
691 self.assertEquals(service_type, service.type)
692 self.assertEquals(service_desc, service.description)
693
694 service = client.services.get(id=service.id)
695 self.assertEquals(service_name, service.name)
696 self.assertEquals(service_type, service.type)
697 self.assertEquals(service_desc, service.description)
698
699 service = [x for x in client.services.list() if x.id == service.id][0]
700 self.assertEquals(service_name, service.name)
701 self.assertEquals(service_type, service.type)
702 self.assertEquals(service_desc, service.description)
703
704 # update is not supported...
705
706 # delete & read
707 client.services.delete(id=service.id)
708 self.assertRaises(client_exceptions.NotFound,
709 client.services.get,
710 id=service.id)
711 services = [x for x in client.services.list() if x.id == service.id]
712 self.assertEquals(len(services), 0)
713
714 def test_service_delete_404(self):
715 from keystoneclient import exceptions as client_exceptions
716 client = self.get_client(admin=True)
717 self.assertRaises(client_exceptions.NotFound,
718 client.services.delete,
719 id=uuid.uuid4().hex)
720
721 def test_service_get_404(self):
722 from keystoneclient import exceptions as client_exceptions
723 client = self.get_client(admin=True)
724 self.assertRaises(client_exceptions.NotFound,
725 client.services.get,
726 id=uuid.uuid4().hex)
727
728 def test_endpoint_delete_404(self):
729 # the catalog backend is expected to return Not Implemented
730 from keystoneclient import exceptions as client_exceptions
731 client = self.get_client(admin=True)
732 self.assertRaises(client_exceptions.HTTPNotImplemented,
733 client.endpoints.delete,
734 id=uuid.uuid4().hex)
735
736 def test_admin_requires_adminness(self):
737 from keystoneclient import exceptions as client_exceptions
738 # FIXME(ja): this should be Unauthorized
739 exception = client_exceptions.ClientException
740
741 two = self.get_client(self.user_two, admin=True) # non-admin user
742
743 # USER CRUD
744 self.assertRaises(exception,
745 two.users.list)
746 self.assertRaises(exception,
747 two.users.get,
748 user=self.user_two['id'])
749 self.assertRaises(exception,
750 two.users.create,
751 name='oops',
752 password='password',
753 email='oops@test.com')
754 self.assertRaises(exception,
755 two.users.delete,
756 user=self.user_foo['id'])
757
758 # TENANT CRUD
759 self.assertRaises(exception,
760 two.tenants.list)
761 self.assertRaises(exception,
762 two.tenants.get,
763 tenant_id=self.tenant_bar['id'])
764 self.assertRaises(exception,
765 two.tenants.create,
766 tenant_name='oops',
767 description="shouldn't work!",
768 enabled=True)
769 self.assertRaises(exception,
770 two.tenants.delete,
771 tenant=self.tenant_baz['id'])
772
773 # ROLE CRUD
774 self.assertRaises(exception,
775 two.roles.get,
776 role='keystone_admin')
777 self.assertRaises(exception,
778 two.roles.list)
779 self.assertRaises(exception,
780 two.roles.create,
781 name='oops')
782 self.assertRaises(exception,
783 two.roles.delete,
784 role='keystone_admin')
785
786 # TODO(ja): MEMBERSHIP CRUD
787 # TODO(ja): determine what else todo
788
789
790class KcMasterTestCase(CompatTestCase, KeystoneClientTests):
791 def get_checkout(self):
792 return KEYSTONECLIENT_REPO, 'master'
793
794 def test_tenant_add_and_remove_user(self):
795 client = self.get_client(admin=True)
796 client.roles.add_user_role(tenant=self.tenant_baz['id'],
797 user=self.user_two['id'],
798 role=self.role_useless['id'])
799 user_refs = client.tenants.list_users(tenant=self.tenant_baz['id'])
800 self.assert_(self.user_two['id'] in [x.id for x in user_refs])
801 client.roles.remove_user_role(tenant=self.tenant_baz['id'],
802 user=self.user_two['id'],
803 role=self.role_useless['id'])
804 user_refs = client.tenants.list_users(tenant=self.tenant_baz['id'])
805 self.assert_(self.user_two['id'] not in [x.id for x in user_refs])
806
807 def test_user_role_add_404(self):
808 from keystoneclient import exceptions as client_exceptions
809 client = self.get_client(admin=True)
810 self.assertRaises(client_exceptions.NotFound,
811 client.roles.add_user_role,
812 tenant=uuid.uuid4().hex,
813 user=self.user_foo['id'],
814 role=self.role_useless['id'])
815 self.assertRaises(client_exceptions.NotFound,
816 client.roles.add_user_role,
817 tenant=self.tenant_baz['id'],
818 user=uuid.uuid4().hex,
819 role=self.role_useless['id'])
820 self.assertRaises(client_exceptions.NotFound,
821 client.roles.add_user_role,
822 tenant=self.tenant_baz['id'],
823 user=self.user_foo['id'],
824 role=uuid.uuid4().hex)
825
826 def test_user_role_remove_404(self):
827 from keystoneclient import exceptions as client_exceptions
828 client = self.get_client(admin=True)
829 self.assertRaises(client_exceptions.NotFound,
830 client.roles.remove_user_role,
831 tenant=uuid.uuid4().hex,
832 user=self.user_foo['id'],
833 role=self.role_useless['id'])
834 self.assertRaises(client_exceptions.NotFound,
835 client.roles.remove_user_role,
836 tenant=self.tenant_baz['id'],
837 user=uuid.uuid4().hex,
838 role=self.role_useless['id'])
839 self.assertRaises(client_exceptions.NotFound,
840 client.roles.remove_user_role,
841 tenant=self.tenant_baz['id'],
842 user=self.user_foo['id'],
843 role=uuid.uuid4().hex)
844 self.assertRaises(client_exceptions.NotFound,
845 client.roles.remove_user_role,
846 tenant=self.tenant_baz['id'],
847 user=self.user_foo['id'],
848 role=self.role_useless['id'])
849
850 def test_tenant_list_marker(self):
851 client = self.get_client()
852
853 # Add two arbitrary tenants to user for testing purposes
854 for i in range(2):
855 tenant_id = uuid.uuid4().hex
856 tenant = {'name': 'tenant-%s' % tenant_id, 'id': tenant_id}
857 self.identity_api.create_tenant(tenant_id, tenant)
858 self.identity_api.add_user_to_tenant(tenant_id,
859 self.user_foo['id'])
860
861 tenants = client.tenants.list()
862 self.assertEqual(len(tenants), 3)
863
864 tenants_marker = client.tenants.list(marker=tenants[0].id)
865 self.assertEqual(len(tenants_marker), 2)
866 self.assertEqual(tenants[1].name, tenants_marker[0].name)
867 self.assertEqual(tenants[2].name, tenants_marker[1].name)
868
869 def test_tenant_list_marker_not_found(self):
870 from keystoneclient import exceptions as client_exceptions
871
872 client = self.get_client()
873 self.assertRaises(client_exceptions.BadRequest,
874 client.tenants.list, marker=uuid.uuid4().hex)
875
876 def test_tenant_list_limit(self):
877 client = self.get_client()
878
879 # Add two arbitrary tenants to user for testing purposes
880 for i in range(2):
881 tenant_id = uuid.uuid4().hex
882 tenant = {'name': 'tenant-%s' % tenant_id, 'id': tenant_id}
883 self.identity_api.create_tenant(tenant_id, tenant)
884 self.identity_api.add_user_to_tenant(tenant_id,
885 self.user_foo['id'])
886
887 tenants = client.tenants.list()
888 self.assertEqual(len(tenants), 3)
889
890 tenants_limited = client.tenants.list(limit=2)
891 self.assertEqual(len(tenants_limited), 2)
892 self.assertEqual(tenants[0].name, tenants_limited[0].name)
893 self.assertEqual(tenants[1].name, tenants_limited[1].name)
894
895 def test_tenant_list_limit_bad_value(self):
896 from keystoneclient import exceptions as client_exceptions
897
898 client = self.get_client()
899 self.assertRaises(client_exceptions.BadRequest,
900 client.tenants.list, limit='a')
901 self.assertRaises(client_exceptions.BadRequest,
902 client.tenants.list, limit=-1)
903
904 def test_roles_get_by_user(self):
905 client = self.get_client(admin=True)
906 roles = client.roles.roles_for_user(user=self.user_foo['id'],
907 tenant=self.tenant_bar['id'])
908 self.assertTrue(len(roles) > 0)
909
910 def test_user_can_update_passwd(self):
911 client = self.get_client(self.user_two)
912
913 token_id = client.auth_token
914 new_password = uuid.uuid4().hex
915
916 # TODO(derekh) : Update to use keystoneclient when available
917 class FakeResponse(object):
918 def start_fake_response(self, status, headers):
919 self.response_status = int(status.split(' ', 1)[0])
920 self.response_headers = dict(headers)
921 responseobject = FakeResponse()
922
923 req = webob.Request.blank(
924 '/v2.0/OS-KSCRUD/users/%s' % self.user_two['id'],
925 headers={'X-Auth-Token': token_id})
926 req.method = 'PATCH'
927 req.body = '{"user":{"password":"%s","original_password":"%s"}}' % \
928 (new_password, self.user_two['password'])
929 self.public_server.application(req.environ,
930 responseobject.start_fake_response)
931
932 self.user_two['password'] = new_password
933 self.get_client(self.user_two)
934
935 def test_user_cant_update_other_users_passwd(self):
936 from keystoneclient import exceptions as client_exceptions
937
938 client = self.get_client(self.user_two)
939
940 token_id = client.auth_token
941 new_password = uuid.uuid4().hex
942
943 # TODO(derekh) : Update to use keystoneclient when available
944 class FakeResponse(object):
945 def start_fake_response(self, status, headers):
946 self.response_status = int(status.split(' ', 1)[0])
947 self.response_headers = dict(headers)
948 responseobject = FakeResponse()
949
950 req = webob.Request.blank(
951 '/v2.0/OS-KSCRUD/users/%s' % self.user_foo['id'],
952 headers={'X-Auth-Token': token_id})
953 req.method = 'PATCH'
954 req.body = '{"user":{"password":"%s","original_password":"%s"}}' % \
955 (new_password, self.user_two['password'])
956 self.public_server.application(req.environ,
957 responseobject.start_fake_response)
958 self.assertEquals(403, responseobject.response_status)
959
960 self.user_two['password'] = new_password
961 self.assertRaises(client_exceptions.Unauthorized,
962 self.get_client, self.user_two)
963
964 def test_tokens_after_user_update_passwd(self):
965 from keystoneclient import exceptions as client_exceptions
966
967 client = self.get_client(self.user_two)
968
969 token_id = client.auth_token
970 new_password = uuid.uuid4().hex
971
972 # TODO(derekh) : Update to use keystoneclient when available
973 class FakeResponse(object):
974 def start_fake_response(self, status, headers):
975 self.response_status = int(status.split(' ', 1)[0])
976 self.response_headers = dict(headers)
977 responseobject = FakeResponse()
978
979 req = webob.Request.blank(
980 '/v2.0/OS-KSCRUD/users/%s' % self.user_two['id'],
981 headers={'X-Auth-Token': token_id})
982 req.method = 'PATCH'
983 req.body = '{"user":{"password":"%s","original_password":"%s"}}' % \
984 (new_password, self.user_two['password'])
985
986 rv = self.public_server.application(
987 req.environ,
988 responseobject.start_fake_response)
989 responce_json = jsonutils.loads(rv.next())
990 new_token_id = responce_json['access']['token']['id']
991
992 self.assertRaises(client_exceptions.Unauthorized, client.tenants.list)
993 client.auth_token = new_token_id
994 client.tenants.list()
995
996
997class KcEssex3TestCase(CompatTestCase, KeystoneClientTests):
998 def get_checkout(self):
999 return KEYSTONECLIENT_REPO, 'essex-3'
1000
1001 def test_tenant_add_and_remove_user(self):
1002 client = self.get_client(admin=True)
1003 client.roles.add_user_to_tenant(tenant_id=self.tenant_baz['id'],
1004 user_id=self.user_two['id'],
1005 role_id=self.role_useless['id'])
1006 role_refs = client.roles.get_user_role_refs(
1007 user_id=self.user_two['id'])
1008 self.assert_(self.tenant_baz['id'] in [x.tenantId for x in role_refs])
1009
1010 # get the "role_refs" so we get the proper id, this is how the clients
1011 # do it
1012 roleref_refs = client.roles.get_user_role_refs(
1013 user_id=self.user_two['id'])
1014 for roleref_ref in roleref_refs:
1015 if (roleref_ref.roleId == self.role_useless['id']
1016 and roleref_ref.tenantId == self.tenant_baz['id']):
1017 # use python's scope fall through to leave roleref_ref set
1018 break
1019
1020 client.roles.remove_user_from_tenant(tenant_id=self.tenant_baz['id'],
1021 user_id=self.user_two['id'],
1022 role_id=roleref_ref.id)
1023
1024 role_refs = client.roles.get_user_role_refs(
1025 user_id=self.user_two['id'])
1026 self.assert_(self.tenant_baz['id'] not in
1027 [x.tenantId for x in role_refs])
1028
1029 def test_roles_get_by_user(self):
1030 client = self.get_client(admin=True)
1031 roles = client.roles.get_user_role_refs(user_id='foo')
1032 self.assertTrue(len(roles) > 0)
1033
1034 def test_role_list_404(self):
1035 raise nose.exc.SkipTest('N/A')
1036
1037 def test_authenticate_and_delete_token(self):
1038 raise nose.exc.SkipTest('N/A')
1039
1040 def test_user_create_update_delete(self):
1041 from keystoneclient import exceptions as client_exceptions
1042
1043 test_username = 'new_user'
1044 client = self.get_client(admin=True)
1045 user = client.users.create(name=test_username,
1046 password='password',
1047 email='user1@test.com')
1048 self.assertEquals(user.name, test_username)
1049
1050 user = client.users.get(user=user.id)
1051 self.assertEquals(user.name, test_username)
1052
1053 user = client.users.update_email(user=user, email='user2@test.com')
1054 self.assertEquals(user.email, 'user2@test.com')
1055
1056 # NOTE(termie): update_enabled doesn't return anything, probably a bug
1057 client.users.update_enabled(user=user, enabled=False)
1058 user = client.users.get(user.id)
1059 self.assertFalse(user.enabled)
1060
1061 self.assertRaises(client_exceptions.Unauthorized,
1062 self._client,
1063 username=test_username,
1064 password='password')
1065 client.users.update_enabled(user, True)
1066
1067 user = client.users.update_password(user=user, password='password2')
1068
1069 self._client(username=test_username,
1070 password='password2')
1071
1072 user = client.users.update_tenant(user=user, tenant='bar')
1073 # TODO(ja): once keystonelight supports default tenant
1074 # when you login without specifying tenant, the
1075 # token should be scoped to tenant 'bar'
1076
1077 client.users.delete(user.id)
1078 self.assertRaises(client_exceptions.NotFound, client.users.get,
1079 user.id)
1080
1081 def test_user_update_404(self):
1082 raise nose.exc.SkipTest('N/A')
1083
1084 def test_endpoint_create_404(self):
1085 raise nose.exc.SkipTest('N/A')
1086
1087 def test_endpoint_delete_404(self):
1088 raise nose.exc.SkipTest('N/A')
1089
1090
1091class Kc11TestCase(CompatTestCase, KeystoneClientTests):
1092 def get_checkout(self):
1093 return KEYSTONECLIENT_REPO, '0.1.1'
10940
=== removed directory '.pc/sql_connection.patch'
=== removed directory '.pc/sql_connection.patch/etc'
=== removed file '.pc/sql_connection.patch/etc/keystone.conf.sample'
--- .pc/sql_connection.patch/etc/keystone.conf.sample 2012-09-07 13:04:01 +0000
+++ .pc/sql_connection.patch/etc/keystone.conf.sample 1970-01-01 00:00:00 +0000
@@ -1,195 +0,0 @@
1[DEFAULT]
2# A "shared secret" between keystone and other openstack services
3# admin_token = ADMIN
4
5# The IP address of the network interface to listen on
6# bind_host = 0.0.0.0
7
8# The port number which the public service listens on
9# public_port = 5000
10
11# The port number which the public admin listens on
12# admin_port = 35357
13
14# The port number which the OpenStack Compute service listens on
15# compute_port = 8774
16
17# === Logging Options ===
18# Print debugging output
19# verbose = False
20
21# Print more verbose output
22# (includes plaintext request logging, potentially including passwords)
23# debug = False
24
25# Name of log file to output to. If not set, logging will go to stdout.
26# log_file = keystone.log
27
28# The directory to keep log files in (will be prepended to --logfile)
29# log_dir = /var/log/keystone
30
31# Use syslog for logging.
32# use_syslog = False
33
34# syslog facility to receive log lines
35# syslog_log_facility = LOG_USER
36
37# If this option is specified, the logging configuration file specified is
38# used and overrides any other logging options specified. Please see the
39# Python logging module documentation for details on logging configuration
40# files.
41# log_config = logging.conf
42
43# A logging.Formatter log message format string which may use any of the
44# available logging.LogRecord attributes.
45# log_format = %(asctime)s %(levelname)8s [%(name)s] %(message)s
46
47# Format string for %(asctime)s in log records.
48# log_date_format = %Y-%m-%d %H:%M:%S
49
50# onready allows you to send a notification when the process is ready to serve
51# For example, to have it notify using systemd, one could set shell command:
52# onready = systemd-notify --ready
53# or a module with notify() method:
54# onready = keystone.common.systemd
55
56[sql]
57# The SQLAlchemy connection string used to connect to the database
58# connection = sqlite:///keystone.db
59
60# the timeout before idle sql connections are reaped
61# idle_timeout = 200
62
63[identity]
64# driver = keystone.identity.backends.sql.Identity
65
66[catalog]
67# dynamic, sql-based backend (supports API/CLI-based management commands)
68# driver = keystone.catalog.backends.sql.Catalog
69
70# static, file-based backend (does *NOT* support any management commands)
71# driver = keystone.catalog.backends.templated.TemplatedCatalog
72
73# template_file = default_catalog.templates
74
75[token]
76# driver = keystone.token.backends.kvs.Token
77
78# Amount of time a token should remain valid (in seconds)
79# expiration = 86400
80
81[policy]
82# driver = keystone.policy.backends.rules.Policy
83
84[ec2]
85# driver = keystone.contrib.ec2.backends.kvs.Ec2
86
87[ssl]
88#enable = True
89#certfile = /etc/keystone/ssl/certs/keystone.pem
90#keyfile = /etc/keystone/ssl/private/keystonekey.pem
91#ca_certs = /etc/keystone/ssl/certs/ca.pem
92#cert_required = True
93
94[signing]
95#token_format = UUID
96#certfile = /etc/keystone/ssl/certs/signing_cert.pem
97#keyfile = /etc/keystone/ssl/private/signing_key.pem
98#ca_certs = /etc/keystone/ssl/certs/ca.pem
99#key_size = 1024
100#valid_days = 3650
101#ca_password = None
102#token_format = PKI
103
104[ldap]
105# url = ldap://localhost
106# user = dc=Manager,dc=example,dc=com
107# password = None
108# suffix = cn=example,cn=com
109# use_dumb_member = False
110
111# user_tree_dn = ou=Users,dc=example,dc=com
112# user_objectclass = inetOrgPerson
113# user_id_attribute = cn
114# user_name_attribute = sn
115
116# tenant_tree_dn = ou=Groups,dc=example,dc=com
117# tenant_objectclass = groupOfNames
118# tenant_id_attribute = cn
119# tenant_member_attribute = member
120# tenant_name_attribute = ou
121
122# role_tree_dn = ou=Roles,dc=example,dc=com
123# role_objectclass = organizationalRole
124# role_id_attribute = cn
125# role_member_attribute = roleOccupant
126
127[filter:debug]
128paste.filter_factory = keystone.common.wsgi:Debug.factory
129
130[filter:token_auth]
131paste.filter_factory = keystone.middleware:TokenAuthMiddleware.factory
132
133[filter:admin_token_auth]
134paste.filter_factory = keystone.middleware:AdminTokenAuthMiddleware.factory
135
136[filter:xml_body]
137paste.filter_factory = keystone.middleware:XmlBodyMiddleware.factory
138
139[filter:json_body]
140paste.filter_factory = keystone.middleware:JsonBodyMiddleware.factory
141
142[filter:user_crud_extension]
143paste.filter_factory = keystone.contrib.user_crud:CrudExtension.factory
144
145[filter:crud_extension]
146paste.filter_factory = keystone.contrib.admin_crud:CrudExtension.factory
147
148[filter:ec2_extension]
149paste.filter_factory = keystone.contrib.ec2:Ec2Extension.factory
150
151[filter:s3_extension]
152paste.filter_factory = keystone.contrib.s3:S3Extension.factory
153
154[filter:url_normalize]
155paste.filter_factory = keystone.middleware:NormalizingFilter.factory
156
157[filter:stats_monitoring]
158paste.filter_factory = keystone.contrib.stats:StatsMiddleware.factory
159
160[filter:stats_reporting]
161paste.filter_factory = keystone.contrib.stats:StatsExtension.factory
162
163[app:public_service]
164paste.app_factory = keystone.service:public_app_factory
165
166[app:admin_service]
167paste.app_factory = keystone.service:admin_app_factory
168
169[pipeline:public_api]
170pipeline = stats_monitoring url_normalize token_auth admin_token_auth xml_body json_body debug ec2_extension user_crud_extension public_service
171
172[pipeline:admin_api]
173pipeline = stats_monitoring url_normalize token_auth admin_token_auth xml_body json_body debug stats_reporting ec2_extension s3_extension crud_extension admin_service
174
175[app:public_version_service]
176paste.app_factory = keystone.service:public_version_app_factory
177
178[app:admin_version_service]
179paste.app_factory = keystone.service:admin_version_app_factory
180
181[pipeline:public_version_api]
182pipeline = stats_monitoring url_normalize xml_body public_version_service
183
184[pipeline:admin_version_api]
185pipeline = stats_monitoring url_normalize xml_body admin_version_service
186
187[composite:main]
188use = egg:Paste#urlmap
189/v2.0 = public_api
190/ = public_version_api
191
192[composite:admin]
193use = egg:Paste#urlmap
194/v2.0 = admin_api
195/ = admin_version_api
1960
=== modified file 'AUTHORS'
--- AUTHORS 2012-09-17 09:15:51 +0000
+++ AUTHORS 2012-11-26 19:58:28 +0000
@@ -1,4 +1,5 @@
1Adam Gandelman <adam.gandelman@canonical.com>1Adam Gandelman <adam.gandelman@canonical.com>
2Adam Young <ayoung@f17httpd.ayoung530>
2Adam Young <ayoung@redhat.com>3Adam Young <ayoung@redhat.com>
3Adipudi Praveena <padipudi@padipudi.(none)>4Adipudi Praveena <padipudi@padipudi.(none)>
4Akira YOSHIYAMA <akirayoshiyama@gmail.com>5Akira YOSHIYAMA <akirayoshiyama@gmail.com>
@@ -13,6 +14,7 @@
13ayoung <ayoung@ayoungstack.bos.redhat.com>14ayoung <ayoung@ayoungstack.bos.redhat.com>
14Bernhard M. Wiedemann <bwiedemann@suse.de>15Bernhard M. Wiedemann <bwiedemann@suse.de>
15Bhuvan Arumugam <bhuvan@apache.org>16Bhuvan Arumugam <bhuvan@apache.org>
17boden <brussell@us.ibm.com>
16Brian Lamar <brian.lamar@rackspace.com>18Brian Lamar <brian.lamar@rackspace.com>
17Brian Waldon <brian.waldon@rackspace.com>19Brian Waldon <brian.waldon@rackspace.com>
18bsirish <sirish.bitra@gmail.com>20bsirish <sirish.bitra@gmail.com>
@@ -23,7 +25,9 @@
23Cole Robinson <crobinso@redhat.com>25Cole Robinson <crobinso@redhat.com>
24Dan Prince <dan.prince@rackspace.com>26Dan Prince <dan.prince@rackspace.com>
25Dan Prince <dprince@redhat.com>27Dan Prince <dprince@redhat.com>
28Dan Radez <dradez@redhat.com>
26Darren Birkett <darren.birkett@gmail.com>29Darren Birkett <darren.birkett@gmail.com>
30David Ripton <dripton@redhat.com>
27dcramer <david.cramer@rackspace.com>31dcramer <david.cramer@rackspace.com>
28Dean Troyer <dtroyer@gmail.com>32Dean Troyer <dtroyer@gmail.com>
29Deepak Garg <deepakgarg.iitg@gmail.com>33Deepak Garg <deepakgarg.iitg@gmail.com>
@@ -33,20 +37,25 @@
33Dmitry Khovyakov <dkhovyakov@griddynamics.com>37Dmitry Khovyakov <dkhovyakov@griddynamics.com>
34Dmitry Khovyakov <hovyakov@gmail.com>38Dmitry Khovyakov <hovyakov@gmail.com>
35Dolph Mathews <dolph.mathews@rackspace.com>39Dolph Mathews <dolph.mathews@rackspace.com>
40Doug Hellmann <doug.hellmann@dreamhost.com>
36Ed Leafe <ed@leafe.com>41Ed Leafe <ed@leafe.com>
37Édouard Thuleau <edouard1.thuleau@orange.com>42Édouard Thuleau <edouard1.thuleau@orange.com>
38Eoghan Glynn <eglynn@redhat.com>43Eoghan Glynn <eglynn@redhat.com>
39Everett Toews <everett.toews@gmail.com>44Everett Toews <everett.toews@gmail.com>
40Ewan Mellor <ewan.mellor@citrix.com>45Ewan Mellor <ewan.mellor@citrix.com>
41Gabriel Hurley <gabriel@strikeawe.com>46Gabriel Hurley <gabriel@strikeawe.com>
47galstrom21 <jshepher@rackspace.com>
42Ghe Rivero <ghe@debian.org>48Ghe Rivero <ghe@debian.org>
43gholt <gholt@brim.net>49gholt <gholt@brim.net>
50guang-yee <guang.yee@hp.com>
44Guang Yee <guang.yee@hp.com>51Guang Yee <guang.yee@hp.com>
45Hengqing Hu <hudayou@hotmail.com>52Hengqing Hu <hudayou@hotmail.com>
53Henry Nash <henryn@linux.vnet.ibm.com>
46Ionuț Arțăriși <iartarisi@suse.cz>54Ionuț Arțăriși <iartarisi@suse.cz>
47jabdul <abdulkader.j@hcl.com>55jabdul <abdulkader.j@hcl.com>
48jakedahn <jake@ansolabs.com>56jakedahn <jake@ansolabs.com>
49James E. Blair <jeblair@hp.com>57James E. Blair <jeblair@hp.com>
58Jaroslav Henner <jhenner@redhat.com>
50Jason Cannavale <jason@cannavale.com>59Jason Cannavale <jason@cannavale.com>
51Jay Pipes <jaypipes@gmail.com>60Jay Pipes <jaypipes@gmail.com>
52J. Daniel Schmidt <jdsn@suse.de>61J. Daniel Schmidt <jdsn@suse.de>
@@ -59,9 +68,11 @@
59John Eo <john.eo@rackspace.com>68John Eo <john.eo@rackspace.com>
60John Eo <joon.eo@gmail.com>69John Eo <joon.eo@gmail.com>
61Jorge L. Williams <jorge.williams@rackspace.com>70Jorge L. Williams <jorge.williams@rackspace.com>
71Jose Castro Leon <jose.castro.leon@cern.ch>
62Joseph W. Breu <breu@breu.org>72Joseph W. Breu <breu@breu.org>
63Josh Kearney <josh@jk0.org>73Josh Kearney <josh@jk0.org>
64Julien Danjou <julien.danjou@enovance.com>74Julien Danjou <julien.danjou@enovance.com>
75Julien Danjou <julien@danjou.info>
65Justin Santa Barbara <justin@fathomdb.com>76Justin Santa Barbara <justin@fathomdb.com>
66Justin Shepherd <jshepher@rackspace.com>77Justin Shepherd <jshepher@rackspace.com>
67Ken Thomas <krt@yahoo-inc.com>78Ken Thomas <krt@yahoo-inc.com>
@@ -72,7 +83,7 @@
72leekelby <leekelby@gmail.com>83leekelby <leekelby@gmail.com>
73Liem Nguyen <liem_m_nguyen@hp.com>84Liem Nguyen <liem_m_nguyen@hp.com>
74Lin Hua Cheng <lin-hua.cheng@hp.com>85Lin Hua Cheng <lin-hua.cheng@hp.com>
75lzyeval <lzyeval@gmail.com>86long-wang <long.wang@bj.cs2c.com.cn>
76Mark Gius <mgius7096@gmail.com>87Mark Gius <mgius7096@gmail.com>
77Mark McLoughlin <markmc@redhat.com>88Mark McLoughlin <markmc@redhat.com>
78Maru Newby <mnewby@internap.com>89Maru Newby <mnewby@internap.com>
@@ -81,6 +92,7 @@
81Mohammed Naser <mnaser@vexxhost.com>92Mohammed Naser <mnaser@vexxhost.com>
82monsterxx03 <xyj.asmy@gmail.com>93monsterxx03 <xyj.asmy@gmail.com>
83Monty Taylor <mordred@inaugust.com>94Monty Taylor <mordred@inaugust.com>
95OpenStack Jenkins <jenkins@openstack.org>
84Pádraig Brady <pbrady@redhat.com>96Pádraig Brady <pbrady@redhat.com>
85Pádraig Brady <P@draigBrady.com>97Pádraig Brady <P@draigBrady.com>
86Paul McMillan <paul.mcmillan@nebula.com>98Paul McMillan <paul.mcmillan@nebula.com>
@@ -103,15 +115,20 @@
103Salvatore Orlando <salvatore.orlando@eu.citrix.com>115Salvatore Orlando <salvatore.orlando@eu.citrix.com>
104Sam Morrison <sorrison@gmail.com>116Sam Morrison <sorrison@gmail.com>
105Sandy Walsh <sandy@sandywalsh.com>117Sandy Walsh <sandy@sandywalsh.com>
118sathish-nagappan <sathish.nagappan@nebula.com>
106Shevek <shevek@nebula.com>119Shevek <shevek@nebula.com>
107sirish bitra <sirish.bitra@gmail.com>120sirish bitra <sirish.bitra@gmail.com>
108Sirish Bitra <sirish.bitra@gmail.com>121Sirish Bitra <sirish.bitra@gmail.com>
109Sony K. Philip <sony@hcleai.com>122Sony K. Philip <sony@hcleai.com>
123Stef T <stelford@internap.com>
110Syed Armani <dce3062@gmail.com>124Syed Armani <dce3062@gmail.com>
111termie <github@anarkystic.com>125termie <github@anarkystic.com>
112Thierry Carrez <thierry@openstack.org>126Thierry Carrez <thierry@openstack.org>
127Tim Simpson <tim.simpson@rackspace.com>
113Todd Willey <xtoddx@gmail.com>128Todd Willey <xtoddx@gmail.com>
129Unmesh Gurjar <unmesh.gurjar@nttdata.com>
114Unmesh Gurjar <unmesh.gurjar@vertex.co.in>130Unmesh Gurjar <unmesh.gurjar@vertex.co.in>
131Vincent Hou <sbhou@cn.ibm.com>
115Vincent Untz <vuntz@suse.com>132Vincent Untz <vuntz@suse.com>
116Vishvananda Ishaya <vishvananda@gmail.com>133Vishvananda Ishaya <vishvananda@gmail.com>
117vishvananda <vishvananda@gmail.com>134vishvananda <vishvananda@gmail.com>
@@ -122,6 +139,6 @@
122Yong Sheng Gong <gongysh@cn.ibm.com>139Yong Sheng Gong <gongysh@cn.ibm.com>
123Yun Mao <yunmao@gmail.com>140Yun Mao <yunmao@gmail.com>
124Yuriy Taraday <yorik.sar@gmail.com>141Yuriy Taraday <yorik.sar@gmail.com>
125Zhongyue Luo <lzyeval@gmail.com>142Zhongyue Luo <zhongyue.nah@intel.com>
126ziadsawalha <github@highbridgellc.com>143ziadsawalha <github@highbridgellc.com>
127Ziad Sawalha <github@highbridgellc.com>144Ziad Sawalha <github@highbridgellc.com>
128\ No newline at end of file145\ No newline at end of file
129146
=== modified file 'ChangeLog'
--- ChangeLog 2012-09-26 13:15:29 +0000
+++ ChangeLog 2012-11-26 19:58:28 +0000
@@ -1,16 +1,2048 @@
1commit 8154492da3d8b6e0e71eb7dcb5e2e3b06ddb09a71commit 07c1aafdf20db6d6d7c0d3e15074bc02e2f1d2aa
2Merge: d8aa7fd 01fccdb
3Author: Jenkins <jenkins@review.openstack.org>
4Date: Tue Nov 20 22:12:02 2012 +0000
5
6 Merge "Expose auth failure details in debug mode"
7
8commit 01fccdb1ccc7f7e42b6487b42b6946db98fb8c44
9Author: Dolph Mathews <dolph.mathews@rackspace.com>
10Date: Tue Nov 20 15:22:22 2012 -0600
11
12 Expose auth failure details in debug mode
13
14 Users can now run keystone with debug = True to reveal detailed messages
15 about authentication/authorization failures. This is especially useful
16 for new users setting up OpenStack for the first time.
17
18 Example: http://paste.openstack.org/raw/26228/
19
20 DocImpact
21
22 Change-Id: I0d072d1f0147b53da90cd4214a1e843bf39ee8e4
23
24 keystone/common/wsgi.py | 4 ++--
25 keystone/contrib/ec2/core.py | 12 +++++------
26 keystone/contrib/s3/core.py | 2 +-
27 keystone/contrib/user_crud/core.py | 10 ++++++---
28 keystone/identity/core.py | 7 +++---
29 keystone/service.py | 42 ++++++++++++++++++------------------
30 6 files changed, 40 insertions(+), 37 deletions(-)
31
32commit d8aa7fd3429dce76670c5e91df76c106a96ae0cf
33Merge: e7dcc1a 0e23490
34Author: Jenkins <jenkins@review.openstack.org>
35Date: Tue Nov 20 21:43:08 2012 +0000
36
37 Merge "Utilize policy.json by default (bug 1043758)"
38
39commit e7dcc1a2540c840d5a0e5aead8f1d6cc4a628767
40Merge: 4c0f9a6 84cd8ff
41Author: Jenkins <jenkins@review.openstack.org>
42Date: Tue Nov 20 21:42:59 2012 +0000
43
44 Merge "Wrap v3 API with RBAC (bug 1023943)"
45
46commit 4c0f9a6ec2f05b11bce29f2c865b01dc9ae2d8b1
47Merge: 715a17b c7066a9
48Author: Jenkins <jenkins@review.openstack.org>
49Date: Tue Nov 20 20:35:09 2012 +0000
50
51 Merge "Expose authn/z failure info to API in debug mode"
52
53commit 0e23490a66ff6cafeee12fe62220a5a9eebeac20
54Author: Dolph Mathews <dolph.mathews@rackspace.com>
55Date: Thu Aug 30 05:58:15 2012 -0500
56
57 Utilize policy.json by default (bug 1043758)
58
59 Change-Id: I03daf10aa4f689fe323e39537c312d1e783db313
60
61 etc/keystone.conf.sample | 8 ++++++++
62 keystone/config.py | 2 ++
63 keystone/policy/backends/rules.py | 14 --------------
64 3 files changed, 10 insertions(+), 14 deletions(-)
65
66commit 84cd8ff7f31a123a16114c8e1de963ede646d913
67Author: Dolph Mathews <dolph.mathews@rackspace.com>
68Date: Thu Aug 30 05:37:26 2012 -0500
69
70 Wrap v3 API with RBAC (bug 1023943)
71
72 Change-Id: Ie77be83054ea88bb0860260e1750196ac5ded650
73
74 etc/policy.json | 56 ++++++++++++++++++++++++++-
75 keystone/catalog/core.py | 29 +++++---------
76 keystone/common/controller.py | 51 ++++++++++++++++++++++++
77 keystone/identity/core.py | 86 ++++++++++++++---------------------------
78 keystone/policy/core.py | 11 +++---
79 5 files changed, 151 insertions(+), 82 deletions(-)
80
81commit 715a17b71d065efe93a39721a40a4d58508d0cb6
82Merge: 438ace0 ddc8c83
83Author: Jenkins <jenkins@review.openstack.org>
84Date: Tue Nov 20 20:01:58 2012 +0000
85
86 Merge "v3 Identity"
87
88commit 438ace0754b9a4e3bc2d939ba47479ec0df34375
89Merge: 55b90e3 ff669f0
90Author: Jenkins <jenkins@review.openstack.org>
91Date: Tue Nov 20 20:01:31 2012 +0000
92
93 Merge "v3 Catalog"
94
95commit 55b90e303be552817fd716ab860c80f8c3ee74d0
96Merge: 64452c6 c740090
97Author: Jenkins <jenkins@review.openstack.org>
98Date: Tue Nov 20 18:08:32 2012 +0000
99
100 Merge "tweaking docs to fix link to wiki Keystone page"
101
102commit ddc8c833684ff0db65553b09b87eed7b80c7075d
103Author: Dolph Mathews <dolph.mathews@rackspace.com>
104Date: Fri Nov 9 08:32:18 2012 -0600
105
106 v3 Identity
107
108 - v3 identity tests (bug 1023930)
109 - v3 identity implementation (bug 1023937)
110
111 Change-Id: Ic46575afe9760d9da85e262d0cf063ea002d9dcd
112
113 keystone/clean.py | 19 +-
114 .../migrate_repo/versions/007_add_domain_tables.py | 79 +++
115 keystone/exception.py | 8 +
116 keystone/identity/backends/kvs.py | 25 +
117 keystone/identity/backends/sql.py | 525 +++++++++++++++-----
118 tests/test_v3_identity.py | 349 +++++++++++++
119 6 files changed, 886 insertions(+), 119 deletions(-)
120
121commit ff669f0da9cbf5250d8bb3e904608677f9164b6c
122Author: Dolph Mathews <dolph.mathews@rackspace.com>
123Date: Tue Nov 20 10:28:26 2012 -0600
124
125 v3 Catalog
126
127 - v3 catalog tests (bug 1023933)
128 - v3 catalog implementation (bug 1023938)
129
130 Change-Id: Ie118819d25afbff62327ffc8be5b5fda2ef7f4ed
131
132 keystone/catalog/backends/kvs.py | 43 ++++++++++--
133 keystone/catalog/backends/sql.py | 61 +++++++++++-----
134 keystone/catalog/core.py | 30 ++------
135 tests/test_backend.py | 35 ++++++++--
136 tests/test_backend_kvs.py | 16 -----
137 tests/test_backend_templated.py | 17 -----
138 tests/test_keystoneclient.py | 5 +-
139 tests/test_v3_catalog.py | 143 ++++++++++++++++++++++++++++++++++++++
140 8 files changed, 263 insertions(+), 87 deletions(-)
141
142commit 64452c6b55dd3b0320d0ebdd1dc2f4d122c00b2e
143Merge: c1874df 827fc4c
144Author: Jenkins <jenkins@review.openstack.org>
145Date: Tue Nov 20 15:47:00 2012 +0000
146
147 Merge "v3 Policies"
148
149commit 827fc4c731189352a58390b464ea4efb5141461b
150Author: Dolph Mathews <dolph.mathews@rackspace.com>
151Date: Wed Aug 29 02:57:38 2012 -0500
152
153 v3 Policies
154
155 - v3 policy (bp rbac-keystone-api)
156 - v3 policy tests (bug 1023935)
157 - v3 policy implementation (bug 1023939)
158
159 Change-Id: I163fbb67726c295fe9ed09b68cd18d2273345d29
160
161 etc/keystone.conf.sample | 2 +-
162 keystone/common/sql/core.py | 1 +
163 .../migrate_repo/versions/006_add_policy_table.py | 36 ++++
164 keystone/config.py | 2 +-
165 keystone/policy/backends/sql.py | 103 +++++++++++
166 keystone/policy/core.py | 16 +-
167 keystone/test.py | 1 +
168 tests/backend_sql.conf | 3 +
169 tests/test_backend.py | 85 +++++++++
170 tests/test_backend_sql.py | 7 +
171 tests/test_keystoneclient.py | 7 +
172 tests/test_keystoneclient_sql.py | 75 ++++++++
173 tests/test_sql_upgrade.py | 32 +++-
174 tests/test_v3.py | 181 ++++++++++++++++++++
175 tests/test_v3_policy.py | 78 +++++++++
176 15 files changed, 607 insertions(+), 22 deletions(-)
177
178commit c1874df5c02393b24e9cfb508d9fdd5bc08e489f
179Merge: 023762d e59360d
180Author: Jenkins <jenkins@review.openstack.org>
181Date: Mon Nov 19 19:39:36 2012 +0000
182
183 Merge "Import auth_token middleware from keystoneclient"
184
185commit 023762deab2b1715b1aa30cf474cb9779f1b47aa
186Merge: 71692f7 07525b1
187Author: Jenkins <jenkins@review.openstack.org>
188Date: Mon Nov 19 18:00:48 2012 +0000
189
190 Merge "Refix transient test failures"
191
192commit e59360da677c4cd3f6a6391cfebb973c11e2ee47
193Author: Henry Nash <henryn@linux.vnet.ibm.com>
194Date: Sat Nov 17 14:45:18 2012 +0000
195
196 Import auth_token middleware from keystoneclient
197
198 Although the master auth_token file is now in keystoneclient, it will take
199 some time to get all the paste files to point to it there rather than here.
200 Hence, we import it back here to provide backward compatibility for a release
201 or so, after which we will remove it from the server.
202
203 Change-Id: Iccdb7839a611cdda233e4ea96f68c64d6d82f49c
204
205 keystone/middleware/auth_token.py | 843 +------------------------------------
206 tools/pip-requires | 1 +
207 tools/test-requires | 1 -
208 3 files changed, 12 insertions(+), 833 deletions(-)
209
210commit 71692f7805b62329f7367a120700b6ed050b20b4
211Merge: a92b1da 90ebf9f
212Author: Jenkins <jenkins@review.openstack.org>
213Date: Fri Nov 16 18:01:10 2012 +0000
214
215 Merge "Make the controller addresses configurable."
216
217commit a92b1da0e1d4d4d8be74c6c40e3b0a56a7fa7f28
218Author: OpenStack Jenkins <jenkins@openstack.org>
219Date: Fri Nov 16 00:01:59 2012 +0000
220
221 Imported Translations from Transifex
222
223 Change-Id: I764e7dbb523c8720598ecbdce3d8ef997c882b2c
224
225 keystone/locale/ca/LC_MESSAGES/keystone.po | 40 ++++++++++++++++++++++++++++
226 keystone/locale/ja/LC_MESSAGES/keystone.po | 40 ++++++++++++++++++++++++++++
227 keystone/locale/keystone.pot | 2 +-
228 3 files changed, 81 insertions(+), 1 deletion(-)
229
230commit 07525b135f4234fdbac20f2671b6806f0b96b2e6
231Author: Alvaro Lopez Garcia <aloga@ifca.unican.es>
232Date: Fri Nov 16 10:36:03 2012 +0100
233
234 Refix transient test failures
235
236 Commit a10bd7a8eb418a4d9e84a9511ca3f0669e6e02e7 fixed the issue with
237 transient test failures, but during the rebase of the commit
238 be754ff2bc05a0d262469edd7ce8fac19d457231 the fix was lost.
239
240 Fixes bug 1077065
241
242 Change-Id: I14311f56e6dd0103620b58e64bf0c78c7e32f61c
243
244 tests/test_service.py | 15 +++++++++------
245 1 file changed, 9 insertions(+), 6 deletions(-)
246
247commit 90ebf9fb69c7edd803278ed9712f0de2d7f04e78
248Author: Jaroslav Henner <jhenner@redhat.com>
249Date: Thu Nov 15 14:44:51 2012 +0100
250
251 Make the controller addresses configurable.
252
253 The addresses in sample_data were hard-coded to localhost. This is
254 a problem when deploying not-so-all-in-one deployment -- one controller
255 and couple of compute nodes. It was also complicating access from
256 outside.
257
258 Change-Id: Iee53c3f4376c3628e1543afb6dc7e964a3a14ab2
259
260 tools/sample_data.sh | 52 +++++++++++++++++++++++++++-----------------------
261 1 file changed, 28 insertions(+), 24 deletions(-)
262
263commit 36a247c66134c686acd78798adbc777717543a2a
264Merge: 240d6b4 9d68b40
265Author: Jenkins <jenkins@review.openstack.org>
266Date: Thu Nov 15 22:52:02 2012 +0000
267
268 Merge "Ensures User is member of tenant in ec2 validation"
269
270commit 240d6b41a04f1d24f9bfe36d4da3a57512bb80de
271Merge: 969d6a9 be754ff
272Author: Jenkins <jenkins@review.openstack.org>
273Date: Thu Nov 15 17:30:40 2012 +0000
274
275 Merge "Refactor TokenController.authenticate() method."
276
277commit c7066a9fed611dc32e7c5fb490c61121cc5b68a5
278Author: Dolph Mathews <dolph.mathews@rackspace.com>
279Date: Wed Nov 14 11:59:26 2012 -0600
280
281 Expose authn/z failure info to API in debug mode
282
283 This allows us to raise exceptions with very specific messages:
284
285 raise Unauthorized('User name not recognized')
286
287 In debug mode, this feedback would be exposed to the API user; without
288 debug mode, these details are suppressed.
289
290 Change-Id: I05c5dce3b1e2ba1123450b302e10b8ba3c265557
291
292 keystone/exception.py | 39 +++++++++++++++++++++++--
293 tests/test_exception.py | 73 ++++++++++++++++++++++++++++++++++++++++++-----
294 2 files changed, 102 insertions(+), 10 deletions(-)
295
296commit 969d6a9e9e943647a92bf6f457544f3d5be444d3
297Merge: 2b83d4d cdd7d65
298Author: Jenkins <jenkins@review.openstack.org>
299Date: Thu Nov 15 17:18:01 2012 +0000
300
301 Merge "populate table check."
302
303commit be754ff2bc05a0d262469edd7ce8fac19d457231
304Author: Alvaro Lopez Garcia <aloga@ifca.unican.es>
305Date: Mon Nov 5 10:56:40 2012 +0100
306
307 Refactor TokenController.authenticate() method.
308
309 Change-Id: I29710f749c67cf83ccad12deee54fe6b71dd53b8
310
311 keystone/service.py | 386 +++++++++++++++++++++++-------------------
312 tests/test_keystoneclient.py | 8 +
313 tests/test_service.py | 280 +++++++++++++++++++++++-------
314 3 files changed, 444 insertions(+), 230 deletions(-)
315
316commit 2b83d4da7aca79c48f2789930bd5790bf993a606
317Author: Alvaro Lopez Garcia <aloga@ifca.unican.es>
318Date: Thu Nov 15 10:02:32 2012 +0100
319
320 Fix error un fixtures.
321
322 The password field for one of the users was duplicated.
323
324 Change-Id: I53c443a1b3ccef477b05d56dc531211593f71c70
325
326 tests/default_fixtures.py | 3 +--
327 1 file changed, 1 insertion(+), 2 deletions(-)
328
329commit dd382c07e70628ad708454303744b4cc4f9fe0d2
330Merge: 5c0e767 36c880e
331Author: Jenkins <jenkins@review.openstack.org>
332Date: Wed Nov 14 21:14:21 2012 +0000
333
334 Merge "Reduce total number of fixtures"
335
336commit 5c0e7678f5e39f9872971768dbc822ed274bc480
337Merge: 4497923 411dde1
338Author: Jenkins <jenkins@review.openstack.org>
339Date: Wed Nov 14 21:14:03 2012 +0000
340
341 Merge "Run test_keystoneclient_sql in-memory"
342
343commit 449792320f0cc787c850d106b7d868d0739334a6
344Merge: ac2d5b8 e19a62c
345Author: Jenkins <jenkins@review.openstack.org>
346Date: Wed Nov 14 17:21:47 2012 +0000
347
348 Merge "Make tox.ini run pep8 checks on bin."
349
350commit 9d68b40cb9ea818c48152e6c712ff41586ad9653
351Author: Vishvananda Ishaya <vishvananda@gmail.com>
352Date: Tue Nov 13 15:49:19 2012 -0800
353
354 Ensures User is member of tenant in ec2 validation
355
356 It is possible that a user is no longer a member of a tenant when
357 they attempt to use an ec2 token. This checks to make sure that
358 the user still has at least one valid role in the tenant before
359 authenticating them. This should automatically work for the s3
360 version as well since it is a subclass.
361
362 Fixes bug 1064914
363
364 Change-Id: Ieb237bae936a7b00ce7ba4d4c59aec6c7a69ec21
365
366 keystone/contrib/ec2/core.py | 17 ++++++++++-------
367 1 file changed, 10 insertions(+), 7 deletions(-)
368
369commit ac2d5b85b16da31ebf4833b6264961c567125249
370Author: Vishvananda Ishaya <vishvananda@gmail.com>
371Date: Tue Nov 13 15:34:00 2012 -0800
372
373 Properly list tokens with a null tenant
374
375 We store the tenant as a null value in json, so checking to see
376 if it exists is not sufficient. This makes the check safer, checking
377 for existance and not null before continuing.
378
379 Fixes bug 1078497
380
381 Change-Id: Ida1b958e5df6f93a30efae0d3f71df668751ff81
382
383 keystone/token/backends/kvs.py | 10 ++++++----
384 keystone/token/backends/memcache.py | 5 +++--
385 keystone/token/backends/sql.py | 10 ++++++----
386 3 files changed, 15 insertions(+), 10 deletions(-)
387
388commit 36c880eb2843b59eca57c9dcad30a787f184bdc9
389Author: Dolph Mathews <dolph.mathews@rackspace.com>
390Date: Tue Nov 13 10:22:01 2012 -0600
391
392 Reduce total number of fixtures
393
394 Fixtures are created before every test, so each fixture adds a
395 considerable amount of overhead to the overall test suite.
396
397 This patch attempts to eliminate fixtures utilized by only a few tests
398 in favor of re-cycling as many fixtures as possible. As a result, a few
399 tests are refactored to depend on different fixtures.
400
401 Change-Id: Idd4dcef5e38e304d19110c61886887fb64b4d658
402
403 keystone/test.py | 5 ---
404 tests/default_fixtures.py | 83 +++++++++++++++++++-----------------------
405 tests/test_backend.py | 45 +++++++++++++----------
406 tests/test_backend_ldap.py | 83 +++++++++++++++++++++---------------------
407 tests/test_keystoneclient.py | 18 ++++-----
408 5 files changed, 115 insertions(+), 119 deletions(-)
409
410commit 001f708e7d9ffc69c80f823e7ab5f79325cc8a40
411Author: Jose Castro Leon <jose.castro.leon@cern.ch>
412Date: Mon Oct 29 15:07:58 2012 +0100
413
414 Provide config file fields for enable users in LDAP backend (bug1067516)
415
416 DocImpact
417
418 Change-Id: I1ee9a1e2505cdd8c9ee8acba5c0e89a4f25c7262
419
420 doc/source/configuration.rst | 89 ++++++++++++++++++++++++++++++-
421 etc/keystone.conf.sample | 8 ++-
422 keystone/config.py | 8 ++-
423 keystone/identity/backends/ldap/core.py | 43 +++++++++++----
424 tests/test_backend.py | 32 +++++++++++
425 tests/test_backend_ldap.py | 32 ++++++++++-
426 6 files changed, 196 insertions(+), 16 deletions(-)
427
428commit cdd7d65b2d64732e5d2a9c83f4c5be6b087a445d
429Author: Adam Young <ayoung@redhat.com>
430Date: Fri Nov 9 14:12:59 2012 -0500
431
432 populate table check.
433
434 Change-Id: If82979923ba5c0193beeb1896ea5b4777dec735d
435
436 tests/test_sql_upgrade.py | 16 +++++++++++++++-
437 1 file changed, 15 insertions(+), 1 deletion(-)
438
439commit 411dde190d474940c3f7b844c06d578c9e2dfbe5
440Author: Dolph Mathews <dolph.mathews@rackspace.com>
441Date: Tue Nov 13 06:59:21 2012 -0600
442
443 Run test_keystoneclient_sql in-memory
444
445 ~35% performance improvement vs an SSD on test_keystoneclient_sql
446
447 Change-Id: Ie8c9cc0c3c56f784140998a625d943be528d5089
448
449 keystone/common/sql/core.py | 55 +++++++++++++++++++++++++++++---------
450 tests/test_backend_sql.py | 9 +------
451 tests/test_keystoneclient_sql.py | 8 +++---
452 tests/test_sql_upgrade.py | 3 ++-
453 4 files changed, 48 insertions(+), 27 deletions(-)
454
455commit e19a62c7df3d2431c41d3554e1de5f51868f0264
456Author: Dan Prince <dprince@redhat.com>
457Date: Fri Nov 9 14:01:55 2012 -0500
458
459 Make tox.ini run pep8 checks on bin.
460
461 This updates the pep8 checks in our tox.ini file so that
462 we are also scanning the bin directory.
463
464 Additionally, it updates the main pep8 check so that it scans
465 keystone properly as well. Previously there were a bunch of files
466 getting skipped due to some of the pep8 pattern matching.
467
468 Change-Id: I13827f1c1e4155aa6979c10e981da5422391bf2d
469
470 tox.ini | 4 +++-
471 1 file changed, 3 insertions(+), 1 deletion(-)
472
473commit c74009025f097a6a8743cc4e20a70dd29a6e558d
474Author: Joe Heck <heckj@mac.com>
475Date: Sat Nov 10 15:57:59 2012 -0800
476
477 tweaking docs to fix link to wiki Keystone page
478
479 updated docstrings to remove two errors
480 reformatted front page header to be consistent
481 added links to autogenerated python documentation
482
483 Change-Id: I59fddc12ff458bbd0102a40d4d85903ab6bd6394
484
485 doc/source/community.rst | 9 ++++++++-
486 doc/source/index.rst | 4 ++--
487 keystone/common/bufferedhttp.py | 2 ++
488 keystone/policy/backends/rules.py | 16 ++++++++--------
489 keystone/token/core.py | 7 ++++---
490 5 files changed, 24 insertions(+), 14 deletions(-)
491
492commit 8dcafd81dfa0ccd958b614c12eee091a325ec5c4
493Author: Dan Prince <dprince@redhat.com>
494Date: Fri Nov 9 13:57:53 2012 -0500
495
496 Various pep8 fixes for keystone.
497
498 Change-Id: Id94b76d30658e75a805301b1c30b1aa28138b823
499
500 bin/keystone-all | 1 -
501 httpd/keystone.py | 2 +-
502 keystone/common/ldap/core.py | 2 +-
503 tests/test_s3_token_middleware.py | 2 +-
504 4 files changed, 3 insertions(+), 4 deletions(-)
505
506commit 3576cbb9ea4b040d5db7f7a63b1ca853d025e930
507Merge: 164326b 84e69a4
508Author: Jenkins <jenkins@review.openstack.org>
509Date: Sat Nov 10 03:04:40 2012 +0000
510
511 Merge "Rewrite initial migration"
512
513commit 164326b433c7e8b7ff5afe4e478d346233a4062b
514Author: Vishvananda Ishaya <vishvananda@gmail.com>
515Date: Fri Nov 9 13:53:48 2012 -0800
516
517 Use the right subprocess based on os monkeypatch
518
519 This works around the following eventlet bug:
520
521 https://bitbucket.org/which_linden/eventlet/issue/92
522
523 by using the green version of Popen if os has been
524 monkeypatched. It also has the side effect of making the ssl
525 calls not block the reactor for workers that use eventlet.
526
527 Change-Id: I1457237f52310f0536fbcdcaa42174b17e8edbf5
528
529 bin/keystone-all | 5 ---
530 keystone/common/cms.py | 61 ++++++++++++++++++++++---------------
531 keystone/middleware/auth_token.py | 3 +-
532 3 files changed, 38 insertions(+), 31 deletions(-)
533
534commit a10bd7a8eb418a4d9e84a9511ca3f0669e6e02e7
535Author: Dolph Mathews <dolph.mathews@rackspace.com>
536Date: Fri Nov 9 10:50:38 2012 -0600
537
538 Fix transient test failures (bug 1077065, bug 1045962)
539
540 Change-Id: I45a1167a473df02a4461286b8a09723315018fcb
541
542 keystone/service.py | 3 +--
543 keystone/test.py | 5 +++++
544 tests/test_keystoneclient.py | 12 ++++++------
545 tests/test_service.py | 16 ++++++++++------
546 4 files changed, 22 insertions(+), 14 deletions(-)
547
548commit 84e69a4a8beac4a6cfa241212caa214bf8e5e112
549Author: Dolph Mathews <dolph.mathews@rackspace.com>
550Date: Fri Nov 9 08:35:29 2012 -0600
551
552 Rewrite initial migration
553
554 Change-Id: I3b1ad19176180717f43478048408da363b152945
555
556 .../versions/001_add_initial_tables.py | 106 ++++++++++++++++----
557 1 file changed, 89 insertions(+), 17 deletions(-)
558
559commit 037c06237680d5b5b753fc69eafb432c764b2bd3
560Merge: b446a77 28c52ac
561Author: Jenkins <jenkins@review.openstack.org>
562Date: Fri Nov 9 02:28:34 2012 +0000
563
564 Merge "Improve feedback on test failure"
565
566commit b446a770a6740ba64b6c55eb6a2ca4b1bd4aa2aa
567Author: Alan Pevec <apevec@redhat.com>
568Date: Thu Nov 8 22:58:54 2012 +0100
569
570 Fix default port for identity.internalURL
571
572 This should be the public_port and not the admin one.
573
574 Sync with default_catalog.templates change
575 commit 773f0f84af282cd3e53650ccbb99284c37677b6a
576
577 Change-Id: Ibb81a06607d94648993768c8b2e7161bf57195a1
578
579 tools/sample_data.sh | 2 +-
580 1 file changed, 1 insertion(+), 1 deletion(-)
581
582commit 28c52ac987baa840b770e1690b2db575cd92edf4
583Author: Dolph Mathews <dolph.mathews@rackspace.com>
584Date: Thu Nov 8 15:00:55 2012 -0600
585
586 Improve feedback on test failure
587
588 Change-Id: Iace6a88ddfbdefe97e0ea205cda4b10c04bca0dc
589
590 tests/test_sql_upgrade.py | 20 ++++++--------------
591 1 file changed, 6 insertions(+), 14 deletions(-)
592
593commit 9916227f9739aadd674e889d62ef539af64e3390
594Merge: 5c4e9db 7cc02c8
595Author: Jenkins <jenkins@review.openstack.org>
596Date: Thu Nov 8 18:33:05 2012 +0000
597
598 Merge "fixes bug 1074172"
599
600commit 5c4e9dbcadef9a41396d78a1bfc4728db5cd55eb
601Merge: 629c1f9 2eea455
602Author: Jenkins <jenkins@review.openstack.org>
603Date: Thu Nov 8 16:02:24 2012 +0000
604
605 Merge "Include 'extra' attributes twice (bug 1076120)"
606
607commit 629c1f9ea6931cad51a3a5898799811c971cd517
608Merge: 2a87700 3733170
609Author: Jenkins <jenkins@review.openstack.org>
610Date: Thu Nov 8 04:37:47 2012 +0000
611
612 Merge "Fixed typo in log message"
613
614commit 7cc02c80cfb1976271fa8b6271091fcd35c1cb34
615Author: Joe Heck <heckj@mac.com>
616Date: Thu Nov 1 15:36:31 2012 -0700
617
618 fixes bug 1074172
619
620 updated diablo token based on output from diablo/stable keystone
621 added expiry to example tokens for test_auth_middleware
622 added a stack based HTTP response to test_auth_middleware to verify
623 sequencing
624
625 Change-Id: I738b0e9c1a0e62ad86adb95ec0b73f621513f7d4
626
627 keystone/middleware/auth_token.py | 38 ++++++++++++++--
628 tests/test_auth_token_middleware.py | 85 +++++++++++++++++++++++++++++++++++
629 2 files changed, 120 insertions(+), 3 deletions(-)
630
631commit 2a8770014768e34b605982f16645aad7c812ab5f
632Merge: e572490 0478276
633Author: Jenkins <jenkins@review.openstack.org>
634Date: Thu Nov 8 03:59:46 2012 +0000
635
636 Merge "SQL upgrade test."
637
638commit e57249095635cd8cbbfacfd2616eadcd4c2f97cf
639Merge: 7696aaa ef65550
640Author: Jenkins <jenkins@review.openstack.org>
641Date: Thu Nov 8 03:59:29 2012 +0000
642
643 Merge "monkeypatch cms Popen"
644
645commit 7696aaa5bbc4d250d0c4218e6478e6ff6c7e3adc
646Merge: 126dd9c 5761a2c
647Author: Jenkins <jenkins@review.openstack.org>
648Date: Thu Nov 8 03:36:32 2012 +0000
649
650 Merge "HACKING compliance: consistent use of 'except'"
651
652commit 0478276993afdb82b55606b47fae010fec32c640
653Author: Adam Young <ayoung@redhat.com>
654Date: Tue Nov 6 17:15:50 2012 -0500
655
656 SQL upgrade test.
657
658 Tests upgrade to version 1.
659 Confirms all of the identity tables layout.
660
661 blueprint: normalize-sql
662
663 Change-Id: If66250af068b396fc55f38c66f789b9447353bda
664
665 tests/test_sql_upgrade.py | 104 +++++++++++++++++++++++++++++++++++++++++++++
666 1 file changed, 104 insertions(+)
667
668commit 2eea4553e23ff3c0d4d367316ea634253e11c10a
669Author: Dolph Mathews <dolph.mathews@rackspace.com>
670Date: Wed Nov 7 15:17:52 2012 -0600
671
672 Include 'extra' attributes twice (bug 1076120)
673
674 In order to maintain backwards-compatibility with the output of the
675 previously-broken SQL driver, non-indexed attributes are included in the
676 update user/tenant response in both the correct and expected locations.
677
678 Change-Id: I54f69c0c4cb3ade349190bc0c61539dcc1846267
679
680 keystone/common/sql/core.py | 13 ++++++++-
681 keystone/identity/backends/sql.py | 4 +--
682 keystone/identity/core.py | 5 ++++
683 tests/test_backend_sql.py | 57 +++++++++++++++++++++++++++++++++++++
684 4 files changed, 76 insertions(+), 3 deletions(-)
685
686commit 126dd9c9bdab46074d812f4a16358357d364e789
687Merge: 6b87660 86aaff4
688Author: Jenkins <jenkins@review.openstack.org>
689Date: Wed Nov 7 01:55:51 2012 +0000
690
691 Merge "Merge remote-tracking branch 'origin/feature/keystone-v3' into HEAD"
692
693commit 6b87660d91b30dcccf19c77cf999fa3f0dee84b2
694Merge: df148a0 fddacf7
695Author: Jenkins <jenkins@review.openstack.org>
696Date: Tue Nov 6 22:27:42 2012 +0000
697
698 Merge "bug 1069945: generate certs for the tests in one place"
699
700commit df148a09fc1c7d44f2134a2dc6566ef1dbe772df
701Author: Dolph Mathews <dolph.mathews@rackspace.com>
702Date: Tue Nov 6 17:01:59 2012 +0000
703
704 Return non-indexed attrs, not 'extra' (bug 1075376)
705
706 (most of this is pulled from the v3 branch)
707
708 Change-Id: Id1118e7a2b245fb7ec95e41ec297c87036953db2
709
710 keystone/catalog/backends/sql.py | 34 ++--------------------
711 keystone/common/sql/core.py | 15 +++++++++-
712 keystone/identity/backends/sql.py | 58 +++++++++----------------------------
713 keystone/token/backends/sql.py | 18 +-----------
714 4 files changed, 30 insertions(+), 95 deletions(-)
715
716commit fddacf7bce1de841a9fc83ce0035d85abd4f4ccd
717Author: Guang Yee <guang.yee@hp.com>
718Date: Mon Nov 5 12:22:29 2012 -0800
719
720 bug 1069945: generate certs for the tests in one place
721
722 and doc how to install signing certificate from an external CA
723
724 Change-Id: I92feb8eaeea617211ee7132480ac7a63bf0a1bf1
725
726 doc/source/configuration.rst | 87 ++++++++++-
727 examples/pki/certs/cacert.pem | 18 +++
728 examples/pki/certs/middleware.pem | 33 +++++
729 examples/pki/certs/signing_cert.pem | 17 +++
730 examples/pki/certs/ssl_cert.pem | 17 +++
731 examples/pki/cms/auth_token_revoked.json | 1 +
732 examples/pki/cms/auth_token_revoked.pem | 42 ++++++
733 examples/pki/cms/auth_token_scoped.json | 1 +
734 examples/pki/cms/auth_token_scoped.pem | 41 ++++++
735 examples/pki/cms/auth_token_unscoped.json | 1 +
736 examples/pki/cms/auth_token_unscoped.pem | 17 +++
737 examples/pki/cms/revocation_list.json | 1 +
738 examples/pki/cms/revocation_list.pem | 12 ++
739 examples/pki/gen_pki.sh | 222 +++++++++++++++++++++++++++++
740 examples/pki/private/cakey.pem | 16 +++
741 examples/pki/private/signing_key.pem | 16 +++
742 examples/pki/private/ssl_key.pem | 16 +++
743 examples/ssl/certs/ca.pem | 18 ---
744 examples/ssl/certs/keystone.pem | 17 ---
745 examples/ssl/certs/middleware.pem | 33 -----
746 examples/ssl/gen_pki.sh | 179 -----------------------
747 examples/ssl/private/cakey.pem | 16 ---
748 examples/ssl/private/keystonekey.pem | 16 ---
749 tests/signing/Makefile | 34 -----
750 tests/signing/README | 11 --
751 tests/signing/auth_token_revoked.json | 1 -
752 tests/signing/auth_token_revoked.pem | 40 ------
753 tests/signing/auth_token_scoped.json | 1 -
754 tests/signing/auth_token_scoped.pem | 40 ------
755 tests/signing/auth_token_unscoped.json | 1 -
756 tests/signing/auth_token_unscoped.pem | 14 --
757 tests/signing/cacert.pem | 18 ---
758 tests/signing/private_key.pem | 16 ---
759 tests/signing/revocation_list.json | 1 -
760 tests/signing/revocation_list.pem | 11 --
761 tests/signing/signing_cert.pem | 13 --
762 tests/test_auth_token_middleware.py | 11 +-
763 tests/test_overrides.conf | 6 +-
764 tests/test_ssl.py | 10 +-
765 39 files changed, 571 insertions(+), 494 deletions(-)
766
767commit ef65550328ced10be85da2370dfc64b46dfc6071
768Author: Adam Young <ayoung@redhat.com>
769Date: Mon Nov 5 12:49:29 2012 -0500
770
771 monkeypatch cms Popen
772
773 Bug 1074257
774
775 Change-Id: I1372204c1e128aa664840e09b76fe979064d9efb
776
777 bin/keystone-all | 6 ++++++
778 keystone/common/cms.py | 40 ++++++++++++++++++++++------------------
779 2 files changed, 28 insertions(+), 18 deletions(-)
780
781commit 5761a2c55ddea29d47594365f31b69683cd4d5dd
782Author: Dolph Mathews <dolph.mathews@rackspace.com>
783Date: Mon Nov 5 10:52:57 2012 -0600
784
785 HACKING compliance: consistent use of 'except'
786
787 Change-Id: I8301043965e08ffdec63441e612628d9a60876b7
788
789 keystone/common/sql/core.py | 6 +++---
790 keystone/middleware/auth_token.py | 6 +++---
791 keystone/middleware/core.py | 2 +-
792 keystone/middleware/s3_token.py | 4 ++--
793 tests/test_content_types.py | 4 ----
794 tests/test_serializer.py | 2 +-
795 6 files changed, 10 insertions(+), 14 deletions(-)
796
797commit 86aaff4a50039a927eac2ca0db927249058bef12
798Merge: a6ef09d 399cb4c
799Author: Dolph Mathews <dolph.mathews@rackspace.com>
800Date: Fri Nov 2 14:52:38 2012 -0500
801
802 Merge remote-tracking branch 'origin/feature/keystone-v3' into HEAD
803
804 Conflicts:
805 keystone/catalog/core.py
806 keystone/identity/core.py
807
808 Change-Id: Id47b9dd9c4da811d13454b539f78b751d40ed87d
809
810commit a6ef09d94300718197a4fa8757fd3a7a45876963
811Merge: 8ee6963 75496bb
812Author: Jenkins <jenkins@review.openstack.org>
813Date: Fri Nov 2 18:29:50 2012 +0000
814
815 Merge "auth_token hash pki key PKI tokens on hash in memcached when accessed by auth_token middelware"
816
817commit 8ee69635066129b0029d61c4b8248420f994290e
818Merge: 52df60f f79f701
819Author: Jenkins <jenkins@review.openstack.org>
820Date: Thu Nov 1 20:10:33 2012 +0000
821
822 Merge "Implements REMOTE_USER authentication support."
823
824commit 52df60f03e2203a7c94ab477b4fdfeed54f0cc9f
825Merge: faab62d 23aa49e
826Author: Jenkins <jenkins@review.openstack.org>
827Date: Thu Nov 1 20:02:44 2012 +0000
828
829 Merge "key all backends off of hash of pki token."
830
831commit faab62d22b79554fe9b8557453622d96148ed364
832Merge: 4321c2a d95d6bf
833Author: Jenkins <jenkins@review.openstack.org>
834Date: Thu Nov 1 20:02:22 2012 +0000
835
836 Merge "ignore .tox directory for pep8 in runtests"
837
838commit 75496bbe6940e72fd42dcaacbfc92b6cf92b1149
839Author: Adam Young <ayoung@redhat.com>
840Date: Tue Oct 30 20:22:24 2012 -0400
841
842 auth_token hash pki
843 key PKI tokens on hash in memcached when accessed by auth_token
844 middelware
845
846 Bug 1073343
847
848 Change-Id: I32e5481f82fd110c855d7e1138c3d43c73099bbb
849
850 keystone/middleware/auth_token.py | 5 +++--
851 tests/test_auth_token_middleware.py | 17 ++++++++++++-----
852 2 files changed, 15 insertions(+), 7 deletions(-)
853
854commit 23aa49ee3d5d71c0cca25c7e16fb5fc7771d5c02
855Author: Adam Young <ayoung@redhat.com>
856Date: Tue Oct 30 19:55:32 2012 -0400
857
858 key all backends off of hash of pki token.
859
860 Bug 1073272
861
862 Change-Id: If55b3b595fa6f3b5e773a502fc69e7da2c3bd114
863
864 keystone/common/cms.py | 16 ++++++++++++++++
865 keystone/token/backends/kvs.py | 3 +++
866 keystone/token/backends/memcache.py | 8 ++++----
867 keystone/token/backends/sql.py | 10 +---------
868 keystone/token/core.py | 10 ++++++++++
869 5 files changed, 34 insertions(+), 13 deletions(-)
870
871commit 4321c2a5c994c0bb5654b97c4fb09197f8b9fcfa
872Merge: fdcb856 1eb9947
873Author: Jenkins <jenkins@review.openstack.org>
874Date: Thu Nov 1 16:28:03 2012 +0000
875
876 Merge "don't import filter_user name, use it from the identity module"
877
878commit 1eb9947708e9a0c646a2b5101c546f0ca3f34358
879Author: Ionuț Arțăriși <iartarisi@suse.cz>
880Date: Thu Nov 1 11:54:15 2012 +0100
881
882 don't import filter_user name, use it from the identity module
883
884 Change-Id: I9679f5dfbcc270d503adc42489b06609bbf52531
885
886 keystone/identity/backends/kvs.py | 7 +++----
887 keystone/identity/backends/ldap/core.py | 9 ++++-----
888 keystone/identity/backends/sql.py | 12 ++++++------
889 3 files changed, 13 insertions(+), 15 deletions(-)
890
891commit fdcb856b138cbda4b68efa83354b98f558269371
892Author: Ionuț Arțăriși <iartarisi@suse.cz>
893Date: Tue Oct 16 10:58:50 2012 +0200
894
895 don't modify the passed in dict to from_dict
896
897 Fixes bug 1066851
898
899 Change-Id: Ic1f44ba1e319b9cd7e3f1da535f9d29ae7dc4030
900
901 keystone/identity/backends/kvs.py | 2 +-
902 keystone/identity/backends/sql.py | 17 +++++++++--------
903 tests/test_backend.py | 13 +++++++++++++
904 3 files changed, 23 insertions(+), 9 deletions(-)
905
906commit 2e4d7e5ff50f3799152ed1b9fbfb088f0154194f
907Merge: 23bb7ec 0d02e12
908Author: Jenkins <jenkins@review.openstack.org>
909Date: Thu Nov 1 02:07:50 2012 +0000
910
911 Merge "move hashing user password functions to common/utils"
912
913commit 0d02e127be781e38b23702f01c3b1a6d7316c22a
914Author: Ionuț Arțăriși <iartarisi@suse.cz>
915Date: Tue Oct 30 17:08:19 2012 +0100
916
917 move hashing user password functions to common/utils
918
919 Change-Id: I9e4204fc0c4ad0e245a8869640a64ab8f40af31d
920
921 keystone/common/utils.py | 20 ++++++++++++++++++++
922 keystone/identity/backends/kvs.py | 11 ++---------
923 keystone/identity/backends/ldap/core.py | 12 ++----------
924 keystone/identity/backends/sql.py | 11 ++---------
925 4 files changed, 26 insertions(+), 28 deletions(-)
926
927commit d95d6bfe756e28ba8ccb7f12ff5f403488c508b9
928Author: Joe Heck <heckj@mac.com>
929Date: Thu Nov 1 00:18:56 2012 +0000
930
931 ignore .tox directory for pep8 in runtests
932
933 Change-Id: I34c6f4fe8ff51221bd188fbce89ba89a56aae0b7
934
935 run_tests.sh | 6 +++---
936 1 file changed, 3 insertions(+), 3 deletions(-)
937
938commit 23bb7ec4986fafa90b3fe2b4dfb37739e6637d4a
939Author: OpenStack Jenkins <jenkins@openstack.org>
940Date: Thu Nov 1 00:00:58 2012 +0000
941
942 Imported Translations from Transifex
943
944 Change-Id: If6ca1bf71b45b0e453b484ce756b926beb7d4f7f
945
946 keystone/locale/keystone.pot | 12 ++++++++++--
947 1 file changed, 10 insertions(+), 2 deletions(-)
948
949commit f79f701782fa583380138e1fba702fb00bcac52e
950Author: boden <brussell@us.ibm.com>
951Date: Wed Oct 31 15:34:00 2012 -0400
952
953 Implements REMOTE_USER authentication support.
954
955 Adds support for non-identity authentication via REMOTE_USER environ
956 context variable thereby permitting external services (paste pipeline,
957 web fronting or other) to authenticate a request.
958
959 Also fixes a pep8 issue.
960
961 This change is in support for blueprint
962 pluggable-identity-authentication-handlers
963
964 Change-Id: Ib0a36b14f135dd87601e3c6d28f7874193d66b34
965
966 keystone/common/wsgi.py | 4 +++
967 keystone/service.py | 47 +++++++++++++++++++++++++----
968 tests/test_service.py | 77 +++++++++++++++++++++++++++++++++++++++++++----
969 3 files changed, 116 insertions(+), 12 deletions(-)
970
971commit d3c9b1b1558008f3e01e60646dbd56c1b21e524a
972Merge: c53ffe5 27ae477
973Author: Jenkins <jenkins@review.openstack.org>
974Date: Wed Oct 31 18:29:13 2012 +0000
975
976 Merge "Ignore keystone.openstack for PEP8"
977
978commit c53ffe59863a02861c3872fbc3190e7e536222a1
979Author: Ionuț Arțăriși <iartarisi@suse.cz>
980Date: Wed Oct 31 14:32:04 2012 +0100
981
982 pin sqlalchemy to 0.7
983
984 sqlalchemy 0.8.0b1 breaks some dependencies such as sqlalchemy-migrate, pin the version until we fix them
985
986 Fixes bug #1073569
987
988 Change-Id: I6620276bf8f0a7cbc1d51aa226cd33c512e59a48
989
990 tools/pip-requires | 4 ++--
991 1 file changed, 2 insertions(+), 2 deletions(-)
992
993commit 9602284c5d5aa25a70aedf91b80828726bbd48c2
994Author: Alvaro Lopez Garcia <aloga@ifca.unican.es>
995Date: Mon Oct 29 15:33:59 2012 +0100
996
997 Move 'opentack.context' and 'openstack.params' definitions to keystone.common.wsgi
998
999 Change-Id: Idc4f6765cba20e7baadb61e355076695f36d66ea
1000
1001 keystone/common/wsgi.py | 11 +++++++++--
1002 keystone/middleware/core.py | 4 ++--
1003 2 files changed, 11 insertions(+), 4 deletions(-)
1004
1005commit fcab54b67a2221b66bb48da522a3d6fa9f6ec39e
1006Author: Gabriel Hurley <gabriel@strikeawe.com>
1007Date: Fri Oct 26 14:47:34 2012 -0700
1008
1009 Removes duplicate flag for token_format.
1010
1011 The token_format settings defaults to PKI, but both the
1012 "PKI" and "UUID" lines were still in the sample config file.
1013 This patch removes the duplicate and leaves only the
1014 correct default.
1015
1016 Change-Id: Ib8560952ec2aee6d6b6eda944c6ec1f96fdc5c4c
1017
1018 etc/keystone.conf.sample | 3 +--
1019 1 file changed, 1 insertion(+), 2 deletions(-)
1020
1021commit 9916ef7b86cca98014355b1b90a7dbe36b51af2d
1022Author: Tim Simpson <tim.simpson@rackspace.com>
1023Date: Fri Oct 26 13:36:14 2012 -0500
1024
1025 Raise exception if openssl stderr indicates one.
1026
1027 The cms module calls openssl and raises a CalledProcessError if the
1028 return code is non zero. However, I've observed issues where the return
1029 code is zero but the std err shows the command failed. This commit
1030 changes the test to also look for the text "Error" in openssl's stderr
1031 and raise CalledProcessError in that event as well.
1032
1033 It also removes the keyword arg "output" to CalledProcessError as it
1034 wasn't being found.
1035
1036 Change-Id: I2b2a9c026557632d0c71dd6f987eaa263f387242
1037
1038 keystone/common/cms.py | 5 ++---
1039 1 file changed, 2 insertions(+), 3 deletions(-)
1040
1041commit 27ae4770a0603f039a1b1a41820fb8414610781f
1042Author: Dolph Mathews <dolph.mathews@rackspace.com>
1043Date: Fri Oct 26 14:16:30 2012 +0000
1044
1045 Ignore keystone.openstack for PEP8
1046
1047 tox.ini already ignores keystone.openstack, so run_tests.sh should as
1048 well.
1049
1050 - Fixed: No files were being ignored
1051 - Removed non-existent files from ignored list
1052 - Using commas to seperate ignored files
1053
1054 Colons didn't work at all for me, and the pep8 man page illustrates
1055 the use of commas.
1056
1057 Change-Id: Icd260ba5c0fa37040f66d1f913fc7940d69eda68
1058
1059 run_tests.sh | 13 ++++++-------
1060 1 file changed, 6 insertions(+), 7 deletions(-)
1061
1062commit 3649569b8943cee7bad624800f8527eb950ce1de
1063Merge: cf73eb0 aea95d5
1064Author: Jenkins <jenkins@review.openstack.org>
1065Date: Fri Oct 26 00:31:08 2012 +0000
1066
1067 Merge "Utilize logging instead of print()"
1068
1069commit cf73eb0c499c6cc02e2bde63bbeb13d25239ddca
1070Merge: 51191e5 5bb5e7a
1071Author: Jenkins <jenkins@review.openstack.org>
1072Date: Fri Oct 26 00:30:34 2012 +0000
1073
1074 Merge "Exception.message deprecated in py26 (bug 1070890)"
1075
1076commit 51191e5597211925a276062ff1d18f3d8a0f3295
1077Merge: 8a29afb 9ee3fba
1078Author: Jenkins <jenkins@review.openstack.org>
1079Date: Thu Oct 25 23:53:13 2012 +0000
1080
1081 Merge "Fixes 500 err on authentication for invalid body"
1082
1083commit 8a29afb1021a8c5787846a312c3dcd5103bb3587
1084Merge: 7ca4d6b f9a9e7f
1085Author: Jenkins <jenkins@review.openstack.org>
1086Date: Thu Oct 25 20:49:39 2012 +0000
1087
1088 Merge "Enable Deletion of Services with Endpoints"
1089
1090commit 7ca4d6b95697c8c74ec7d4887a92d054faf0752e
1091Merge: 7db2f6a 0ed3165
1092Author: Jenkins <jenkins@review.openstack.org>
1093Date: Thu Oct 25 20:21:48 2012 +0000
1094
1095 Merge "Update common."
1096
1097commit 3733170de223714978c71516310849e749ef50a3
1098Author: Ralf Haferkamp <rhafer@suse.de>
1099Date: Thu Oct 25 17:24:38 2012 +0200
1100
1101 Fixed typo in log message
1102
1103 Change-Id: I8b6bf6f8012fb8119b32a93305cf3e1d3996f3ed
1104
1105 keystone/service.py | 2 +-
1106 1 file changed, 1 insertion(+), 1 deletion(-)
1107
1108commit 9ee3fba769274a84ea7709aa0068c19a421dbd80
1109Author: Unmesh Gurjar <unmesh.gurjar@nttdata.com>
1110Date: Wed Oct 10 04:22:31 2012 -0700
1111
1112 Fixes 500 err on authentication for invalid body
1113
1114 1. This fixes the 500 error on authentication when invalid request body is
1115 provided, a 400 Bad Request response is returned instead.
1116 2. Also added unit test coverage.
1117
1118 Fixes LP: #1060709
1119
1120 Change-Id: I7f2916e0b91de1e299d2dc7a245ff6c2bc548afd
1121
1122 keystone/service.py | 3 +++
1123 tests/test_service.py | 15 +++++++++++++++
1124 2 files changed, 18 insertions(+)
1125
1126commit f9a9e7f3278a3cf461acad4d688a4868c2f7ac94
1127Author: sathish-nagappan <sathish.nagappan@nebula.com>
1128Date: Tue Oct 23 23:18:20 2012 -0700
1129
1130 Enable Deletion of Services with Endpoints
1131
1132 fixes Bug #1019475
1133
1134 Allows the user to delete a service that has endpoints.
1135
1136 Change-Id: If2d669e50f73ea5bb7b269f941a3b2710808a98a
1137
1138 keystone/catalog/backends/sql.py | 1 +
1139 tests/test_backend_sql.py | 13 +++++++++++++
1140 2 files changed, 14 insertions(+)
1141
1142commit 7db2f6aa595e2d1261bc59750519b59daab7ab07
1143Merge: 715f87d ba1df90
1144Author: Jenkins <jenkins@review.openstack.org>
1145Date: Wed Oct 24 19:17:33 2012 +0000
1146
1147 Merge "Fix catalog when services have no URL"
1148
1149commit 715f87d39b454626a9220a528488c3eeab1d172c
1150Merge: e9ed351 4ed1e07
1151Author: Jenkins <jenkins@review.openstack.org>
1152Date: Wed Oct 24 18:12:49 2012 +0000
1153
1154 Merge "stop LdapIdentity.create_user from returning the user's password"
1155
1156commit e9ed35197be561bceb764b8f38173156b4719729
1157Merge: 19224bd 9079af7
1158Author: Jenkins <jenkins@review.openstack.org>
1159Date: Wed Oct 24 16:56:34 2012 +0000
1160
1161 Merge "making PKI default token type"
1162
1163commit 5bb5e7a3503536c0439aa4e1948291648c2a0277
1164Author: Dolph Mathews <dolph.mathews@rackspace.com>
1165Date: Wed Oct 24 10:13:54 2012 -0500
1166
1167 Exception.message deprecated in py26 (bug 1070890)
1168
1169 In the case of IntegrityError (e), e is wrapping a DBAPIError[1] with more
1170 information about the context of the exception -- context that we do NOT
1171 want to expose to our own API users (however, that context should still
1172 be logged). In the case of an integrity error, str(e.orig) will produce
1173 exactly what we're producing with e.message today: a user-friendly
1174 message such as 'column name is not unique'
1175
1176 This change should not impact what is logged or returned to the API
1177 user -- just eliminate the deprecation warning.
1178
1179 [1]: http://docs.sqlalchemy.org/en/rel_0_7/core/exceptions.html#sqlalchemy.exc.DBAPIError
1180
1181 Change-Id: Ie3a5d93fbb5a7b90ad3b205bc8610f28b1626431
1182
1183 keystone/identity/backends/sql.py | 2 +-
1184 keystone/service.py | 2 +-
1185 2 files changed, 2 insertions(+), 2 deletions(-)
1186
1187commit aea95d50af52524c5fb61c2210a26551005854e4
1188Author: Dolph Mathews <dolph.mathews@rackspace.com>
1189Date: Wed Oct 24 08:44:03 2012 -0500
1190
1191 Utilize logging instead of print()
1192
1193 + A bit of HACKING compliance
1194
1195 Change-Id: I9e18401d9555cc316523d1b14542cd5d3ad16fe8
1196
1197 keystone/common/openssl.py | 83 +++++++++++++++++++++-----------------------
1198 1 file changed, 39 insertions(+), 44 deletions(-)
1199
1200commit 19224bddb30fa135c0cb0cedf8f0bd04103f3433
1201Merge: c252b05 e94d2f9
1202Author: Jenkins <jenkins@review.openstack.org>
1203Date: Wed Oct 24 12:26:23 2012 +0000
1204
1205 Merge "Compare token expiry without seconds"
1206
1207commit 4ed1e0777d8eef30aba1c231f580f2c67a025f9c
1208Author: Ionuț Arțăriși <iartarisi@suse.cz>
1209Date: Tue Oct 16 14:46:24 2012 +0200
1210
1211 stop LdapIdentity.create_user from returning the user's password
1212
1213 Change-Id: Iada11c179c7dee01bccde3362f493beaef70641c
1214
1215 keystone/identity/backends/ldap/core.py | 2 +-
1216 1 file changed, 1 insertion(+), 1 deletion(-)
1217
1218commit c252b05fc6c076e7a0f76d3d3444e60b321e1f9e
1219Merge: 2d1fa1f 029cd2b
1220Author: Jenkins <jenkins@review.openstack.org>
1221Date: Wed Oct 24 05:38:15 2012 +0000
1222
1223 Merge "add --config-dir=DIR for keystone-all option"
1224
1225commit 2d1fa1f2765a19e89a8385d7034b6d8087820412
1226Merge: 8e42515 f7169c1
1227Author: Jenkins <jenkins@review.openstack.org>
1228Date: Wed Oct 24 05:38:08 2012 +0000
1229
1230 Merge "Add --config-dir=DIR in OPTIONS"
1231
1232commit 8e42515115f1744c461c656dc9df6f84cab8dacc
1233Merge: 6ff213d a4a97ea
1234Author: Jenkins <jenkins@review.openstack.org>
1235Date: Wed Oct 24 05:37:47 2012 +0000
1236
1237 Merge "Extract hardcoded configuration in ldap backend (bug 1052111)"
1238
1239commit 6ff213d952d0efa93304de71c4604d42457da653
1240Merge: bfd6194 28fb9e7
1241Author: Jenkins <jenkins@review.openstack.org>
1242Date: Wed Oct 24 05:37:40 2012 +0000
1243
1244 Merge "move filter_user function to keystone.identity.core"
1245
1246commit bfd61949bdd75d3f373d77d86ac89085a220f0d0
1247Merge: 3b69d7e 8f44c39
1248Author: Jenkins <jenkins@review.openstack.org>
1249Date: Wed Oct 24 05:11:23 2012 +0000
1250
1251 Merge "Add trove classifiers for PyPI"
1252
1253commit 3b69d7ea9373b366dd239424b64f4dc47aad4801
1254Merge: e89c762 7ac4d52
1255Author: Jenkins <jenkins@review.openstack.org>
1256Date: Wed Oct 24 05:02:58 2012 +0000
1257
1258 Merge "Fixes response for missing credentials in auth"
1259
1260commit e89c762a4115402935cd9d406f5fd096ceb0c701
1261Merge: e0f9ad5 eb6681f
1262Author: Jenkins <jenkins@review.openstack.org>
1263Date: Wed Oct 24 05:02:39 2012 +0000
1264
1265 Merge "Fix Not Found error, when router not match."
1266
1267commit e0f9ad5d124686926fdcc17d927bc220be7928fa
1268Merge: c6f26ff 00127ab
1269Author: Jenkins <jenkins@review.openstack.org>
1270Date: Wed Oct 24 05:02:23 2012 +0000
1271
1272 Merge "Adding handling for get user/tenant by name"
1273
1274commit c6f26ff48147e04921ac812128df3f94c808c80e
1275Merge: fbeb9ad 0dc2e9c
1276Author: Jenkins <jenkins@review.openstack.org>
1277Date: Wed Oct 24 05:01:47 2012 +0000
1278
1279 Merge "bug 1068674"
1280
1281commit fbeb9ad506d4304e93de362d73d117d0f4405c91
1282Merge: c6884c5 0fded56
1283Author: Jenkins <jenkins@review.openstack.org>
1284Date: Wed Oct 24 03:20:55 2012 +0000
1285
1286 Merge "Raise 400 if credentials not provided (bug 1044032)"
1287
1288commit e94d2f9aa2a46082f35933505f3eb6a668493ff4
1289Author: Adam Young <ayoung@redhat.com>
1290Date: Tue Oct 23 22:39:04 2012 -0400
1291
1292 Compare token expiry without seconds
1293
1294 There is a rounding problem that occurs periodically. Token expiration
1295 Does not need to be confirmed to this level of granularity.
1296
1297 Bug 1045962
1298
1299 Change-Id: I361c5cf309c47b142c35c4359234fd0e44005e5a
1300
1301 tests/test_keystoneclient.py | 6 ++++--
1302 1 file changed, 4 insertions(+), 2 deletions(-)
1303
1304commit c6884c54a4946441039d8464af0790c517ae43fc
1305Author: Dolph Mathews <dolph.mathews@rackspace.com>
1306Date: Tue Oct 23 18:01:31 2012 -0500
1307
1308 Moved SQL backend tests into memory
1309
1310 (test_keystoneclient_sql still uses a db on disk)
1311
1312 Change-Id: I476ee710983adbe3436f41882e8483f8193daf5c
1313
1314 keystone/common/sql/core.py | 45 ++++++++++++-------------
1315 tests/backend_sql.conf | 2 +-
1316 tests/backend_sql_disk.conf | 2 ++
1317 tests/test_backend_sql.py | 68 +++++++++++++++++---------------------
1318 tests/test_import_legacy.py | 3 +-
1319 tests/test_keystoneclient_sql.py | 3 +-
1320 tests/test_migrate_nova_auth.py | 3 +-
1321 7 files changed, 61 insertions(+), 65 deletions(-)
1322
1323commit f33e9f02791e6dd39c36ad5f6030c0295e6be568
1324Merge: b0ec911 cb12209
1325Author: Jenkins <jenkins@review.openstack.org>
1326Date: Tue Oct 23 21:29:13 2012 +0000
1327
1328 Merge "Fixes Bug 1063852"
1329
1330commit 8f44c3933e4c91146f3027bf1a40bc708efbe601
1331Author: Doug Hellmann <doug.hellmann@dreamhost.com>
1332Date: Tue Oct 23 11:25:18 2012 -0400
1333
1334 Add trove classifiers for PyPI
1335
1336 Add classifiers so we can eventually register the project
1337 on PyPI to reserve the name, even though we won't release
1338 packages there.
1339
1340 Change-Id: I9ef676ffd4a84cb149d7f5b6998c16c46e4181b8
1341 Signed-off-by: Doug Hellmann <doug.hellmann@dreamhost.com>
1342
1343 setup.py | 10 ++++++++++
1344 1 file changed, 10 insertions(+)
1345
1346commit b0ec91127064e1431aa3d88beb35d08b4cd91821
1347Merge: 4f71ec9 bc155af
1348Author: Jenkins <jenkins@review.openstack.org>
1349Date: Tue Oct 23 14:44:59 2012 +0000
1350
1351 Merge "Document PKI configuration and management"
1352
1353commit 00127ab614174f0f2a7f84769e568e14b6083bd6
1354Author: galstrom21 <jshepher@rackspace.com>
1355Date: Tue Oct 9 23:32:20 2012 -0500
1356
1357 Adding handling for get user/tenant by name
1358
1359 * /v2.0/tenants?name=<tenant_name>
1360 * /v2.0/user?name=<user_name>
1361 * added get_tenant_by_name() to tests/test_content_types.py
1362 * added get_user_by_name() to tests/test_content_types.py
1363
1364 bug 1055763
1365
1366 Change-Id: Id30dc853db12e155238fbb39cef6a081284cb86c
1367
1368 keystone/identity/core.py | 17 +++++++++++++++++
1369 tests/test_content_types.py | 18 ++++++++++++++++++
1370 2 files changed, 35 insertions(+)
1371
1372commit 4f71ec9e5dd632b1c4586b63f89525a6161c2b57
1373Author: guang-yee <guang.yee@hp.com>
1374Date: Mon Oct 22 12:49:22 2012 -0700
1375
1376 Fixed bug 1068851. Refreshed new crypto for the SSL tests.
1377
1378 Change-Id: Ib37547923a9da347835a9b2c51deae6b954e1ead
1379
1380 examples/ssl/certs/ca.pem | 36 +++----
1381 examples/ssl/certs/keystone.pem | 75 +++-----------
1382 examples/ssl/certs/middleware.pem | 106 ++++++--------------
1383 examples/ssl/gen_pki.sh | 179 ++++++++++++++++++++++++++++++++++
1384 examples/ssl/private/cakey.pem | 34 +++----
1385 examples/ssl/private/keystonekey.pem | 31 +++---
1386 6 files changed, 273 insertions(+), 188 deletions(-)
1387
1388commit 28fb9e73eb77d09f542dfefbf063fe2065273ce3
1389Author: Ionuț Arțăriși <iartarisi@suse.cz>
1390Date: Tue Oct 16 14:45:44 2012 +0200
1391
1392 move filter_user function to keystone.identity.core
1393
1394 Change-Id: Idf0e1d27fc0b79d9125f780e4295b5c20a535dec
1395
1396 keystone/identity/backends/kvs.py | 15 ++++-----------
1397 keystone/identity/backends/ldap/core.py | 15 +++++----------
1398 keystone/identity/backends/sql.py | 17 ++++++-----------
1399 keystone/identity/core.py | 13 +++++++++++++
1400 4 files changed, 28 insertions(+), 32 deletions(-)
1401
1402commit 7ac4d521103afa80c8f69c6b214a227c6a9346e3
1403Author: Unmesh Gurjar <unmesh.gurjar@nttdata.com>
1404Date: Thu Oct 11 03:49:28 2012 -0700
1405
1406 Fixes response for missing credentials in auth
1407
1408 1. If username or password parameters are not specified in the authentication
1409 request, API returns 401 response. Fixed this to return a 400 Bad Request
1410 instead.
1411 2. Also added unit test coverage.
1412
1413 Fixes LP: #1060723
1414
1415 Change-Id: I4861d5b989a151d8fce20f012bb0878b06b9b559
1416
1417 keystone/service.py | 10 ++++++++++
1418 tests/test_service.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++
1419 2 files changed, 61 insertions(+)
1420
1421commit 9079af7190433dab76b4758b78adad36be867560
1422Author: Joe Heck <heckj@mac.com>
1423Date: Fri Oct 19 12:45:35 2012 -0700
1424
1425 making PKI default token type
1426
1427 Change-Id: I136a1ff1d9dc4bd6423522684123ce33dc695415
1428
1429 keystone/config.py | 2 +-
1430 1 file changed, 1 insertion(+), 1 deletion(-)
1431
1432commit cb122095cfdbe86bdde3950fa69f4676e0d3de1c
1433Author: Adam Young <ayoung@redhat.com>
1434Date: Mon Oct 8 11:20:24 2012 -0400
1435
1436 Fixes Bug 1063852
1437
1438 Add in the issue time, to prevent a race condition where a token is issued and
1439 revoked, and then a request for an additional token is processed identical
1440 to the first. Each token now contains the issue time to make it unique.
1441
1442 (moving changing default to PKI to separate review)
1443
1444 Change-Id: I26ed5b3bb31840f5baaf64dbcbeac477e4d71afd
1445
1446 keystone/service.py | 2 ++
1447 1 file changed, 2 insertions(+)
1448
1449commit 0dc2e9ca37497597aa49439e3d3e71c22f30b515
1450Author: Ken Thomas <krt@yahoo-inc.com>
1451Date: Fri Oct 19 14:42:55 2012 +0000
1452
1453 bug 1068674
1454
1455 Redo part of bp/sql-identiy-pam that was accidently undone by bug 968519.
1456
1457 We encapsulated the call to utils.check_password with a local method,
1458 _check_password, to make it easier to subclass Identity. This allows us
1459 to use a different password checker without having to replace the entire
1460 authenticate method in our code. The fix for 968519 accidently removed
1461 the call to the local method. *This* fix puts that call back in.
1462
1463 Updating comment because Jenkins failed due to build timeout in
1464 unrelated test.
1465
1466 Change-Id: I69a3ba2d5a62e4c600edab7ef2cc07413c7360cc
1467
1468 keystone/identity/backends/sql.py | 2 +-
1469 1 file changed, 1 insertion(+), 1 deletion(-)
1470
1471commit 0ed3165250fee0d90b0d7aa7bf443072312d4642
1472Author: Michael Still <mikal@stillhq.com>
1473Date: Thu Oct 18 11:43:21 2012 -0700
1474
1475 Update common.
1476
1477 Change-Id: I161ee53e0e087da963b62ac5353d3bdf04b5cc22
1478
1479 keystone/openstack/common/iniparser.py | 2 +-
1480 keystone/openstack/common/setup.py | 274 ++++++++++++++++++++++++++------
1481 keystone/openstack/common/timeutils.py | 20 ++-
1482 3 files changed, 242 insertions(+), 54 deletions(-)
1483
1484commit a4a97eabb8bde395753de330f76085e69290cdfe
1485Author: Jose Castro Leon <jose.castro.leon@cern.ch>
1486Date: Tue Oct 16 23:25:03 2012 +0200
1487
1488 Extract hardcoded configuration in ldap backend (bug 1052111)
1489
1490 Change-Id: I128b0ccdb32694a4fc2f660e73c367aa8b01f257
1491
1492 etc/keystone.conf.sample | 8 ++
1493 keystone/common/ldap/core.py | 7 +-
1494 keystone/config.py | 24 +++++-
1495 keystone/identity/backends/ldap/core.py | 29 +++++---
1496 tests/default_fixtures.py | 12 +++
1497 tests/test_backend_ldap.py | 122 +++++++++++++++++++++++++++++++
1498 6 files changed, 190 insertions(+), 12 deletions(-)
1499
1500commit eb6681fca927b3296bbc43ee0fec6d034e83cbea
1501Author: long-wang <long.wang@bj.cs2c.com.cn>
1502Date: Mon Oct 15 15:25:33 2012 +0800
1503
1504 Fix Not Found error, when router not match.
1505
1506 Fixes bug 1065234
1507
1508 when the router not match, keystone should return 404 error with
1509 json format or xml format. Not the webob.exc.HTTPNotFound() in
1510 html format.
1511
1512 Change-Id: I88e873b65db5df8393c0bb22db0e98712d77e350
1513
1514 keystone/common/wsgi.py | 3 ++-
1515 1 file changed, 2 insertions(+), 1 deletion(-)
1516
1517commit 029cd2be676d26fb76b1ccd5062170a435611142
1518Author: long-wang <long.wang@bj.cs2c.com.cn>
1519Date: Sat Oct 13 21:45:59 2012 +0800
1520
1521 add --config-dir=DIR for keystone-all option
1522
1523 Change-Id: I0c9e1fdc05714a11accd2845fa031ac8e09b1028
1524
1525 doc/source/man/keystone-all.rst | 6 ++++++
1526 1 file changed, 6 insertions(+)
1527
1528commit f7169c11270dbdeabc56f942b47bc698b54afde5
1529Author: long-wang <long.wang@bj.cs2c.com.cn>
1530Date: Sat Oct 13 21:38:03 2012 +0800
1531
1532 Add --config-dir=DIR in OPTIONS
1533
1534 Change-Id: I51c426bdc0610b59aeecc4512c797e709021eb14
1535
1536 doc/source/man/keystone-manage.rst | 6 ++++++
1537 1 file changed, 6 insertions(+)
1538
1539commit d05d1128490377e4c50311c40d0901aa5b63c4bc
1540Author: Jose Castro Leon <jose.castro.leon@cern.ch>
1541Date: Fri Oct 12 08:49:50 2012 +0200
1542
1543 Delete role does not delete role assignments in tenants (bug 1057436)
1544
1545 Change-Id: I2474c2a74135470162030a243491ced59533c024
1546
1547 keystone/identity/backends/kvs.py | 11 +++++++++++
1548 keystone/identity/backends/ldap/core.py | 13 +++++++++++++
1549 keystone/identity/backends/sql.py | 11 +++++++++++
1550 tests/test_backend.py | 10 ++++++++++
1551 4 files changed, 45 insertions(+)
1552
1553commit 8b6b07faed21df8d1a9832df105d72dc5c834398
1554Author: Dan Radez <dradez@redhat.com>
1555Date: Mon Oct 8 17:30:41 2012 -0400
1556
1557 replacing PKI token detection from content length to content prefix. (bug 1060389)
1558
1559 Change-Id: I68b0e4126f2e339c04271fd982f5f5dab198c630
1560
1561 keystone/common/cms.py | 44 ++++++++++++++++++++++++++++++++++++-
1562 keystone/middleware/auth_token.py | 2 +-
1563 keystone/service.py | 2 +-
1564 keystone/token/backends/sql.py | 2 +-
1565 4 files changed, 46 insertions(+), 4 deletions(-)
1566
1567commit f955266f4ad5727996b7b04c94b41f47aa667dbd
1568Merge: fa98220 df8d6cc
1569Author: Jenkins <jenkins@review.openstack.org>
1570Date: Wed Oct 10 21:09:20 2012 +0000
1571
1572 Merge "Filter users in LDAP backend (bug 1052925)"
1573
1574commit bc155af82735093b211a2d75cd43475559840f18
1575Author: Adam Young <ayoung@redhat.com>
1576Date: Tue Oct 9 20:13:34 2012 -0400
1577
1578 Document PKI configuration and management
1579
1580 Bug 1064585
1581
1582 Change-Id: I2faf2d998a208218635e10c24cae06768934d494
1583
1584 doc/source/configuration.rst | 34 ++++++++++++++++++++++++++++++++++
1585 doc/source/man/keystone-manage.rst | 2 ++
1586 2 files changed, 36 insertions(+)
1587
1588commit fa98220aac1876468f595f4842edf4f682a6db1a
1589Author: David Ripton <dripton@redhat.com>
1590Date: Wed Oct 10 13:06:10 2012 -0400
1591
1592 Raise if we see incorrect keyword args "condition" or "methods"
1593
1594 Fixes bug 927879
1595
1596 We crawl the AST of the set of modules that make routing calls, looking
1597 for keyword arguments called "condition" (should be "conditions") or
1598 "methods" (should be "method"), and raise if we see any.
1599
1600 Change-Id: I32aa140967b80d83a10db898df28e41189675d77
1601
1602 tests/test_singular_plural.py | 52 +++++++++++++++++++++++++++++++++++++++++
1603 1 file changed, 52 insertions(+)
1604
1605commit df8d6cc719d2af514794bfd29bc9eb63271e2079
1606Author: Jose Castro Leon <jose.castro.leon@cern.ch>
1607Date: Wed Oct 10 08:46:51 2012 +0200
1608
1609 Filter users in LDAP backend (bug 1052925)
1610
1611 Change-Id: I004e569756698098bf073f5516945f356f88bfea
1612
1613 etc/keystone.conf.sample | 3 +++
1614 keystone/common/ldap/core.py | 17 +++++++++----
1615 keystone/config.py | 3 +++
1616 keystone/identity/backends/ldap/core.py | 9 +++----
1617 tests/test_backend_ldap.py | 40 +++++++++++++++++++++++++++++++
1618 5 files changed, 63 insertions(+), 9 deletions(-)
1619
1620commit 3ec3c7aed1728f0a0b48097cfc472b68dfd902db
1621Merge: b0eb94d 9de5309
1622Author: Jenkins <jenkins@review.openstack.org>
1623Date: Wed Oct 10 05:22:22 2012 +0000
1624
1625 Merge "Use setup.py develop to insert code into venv."
1626
1627commit b0eb94dbc0aff690fcbde6d49c3ad5c6578eb7b5
1628Merge: 8236d3b ee48c24
1629Author: Jenkins <jenkins@review.openstack.org>
1630Date: Tue Oct 9 18:51:39 2012 +0000
1631
1632 Merge "Unable to delete tenant if contains roles in LDAP backend (bug 1057407)"
1633
1634commit 9de5309496dfbd8a986ca40bf50f94f728db09fe
1635Author: Monty Taylor <mordred@inaugust.com>
1636Date: Tue Oct 9 08:46:40 2012 -0700
1637
1638 Use setup.py develop to insert code into venv.
1639
1640 Change-Id: I41ebfe5165aa315ea6c9900f10e48ad6fb9e1e6f
1641
1642 tools/install_venv.py | 7 +++++++
1643 1 file changed, 7 insertions(+)
1644
1645commit 8236d3b4f6945f6057252e6bc195bec103e9b12d
1646Merge: e7fdf93 8152c2c
1647Author: Jenkins <jenkins@review.openstack.org>
1648Date: Tue Oct 9 13:56:33 2012 +0000
1649
1650 Merge "Configurable actions on LDAP backend in users Active Directory (bug 1052929)"
1651
1652commit 0fded564f12e62cba2e163ef74074d03b5d2347f
1653Author: Dolph Mathews <dolph.mathews@rackspace.com>
1654Date: Tue Oct 9 09:22:03 2012 +0000
1655
1656 Raise 400 if credentials not provided (bug 1044032)
1657
1658 This request:
1659
1660 POST /v2.0/tokens
1661
1662 {
1663 "auth": {
1664 "RAX-KSKEY:apiKeyCredentials": {
1665 "apiKey": "pass",
1666 "tenantName": "admin",
1667 "username": "admin"
1668 }
1669 }
1670 }
1671
1672 Now results in:
1673
1674 400 Bad Request
1675
1676 {
1677 "error": {
1678 "code": 400,
1679 "message": "Expecting to find passwordCredentials or token in auth. The server could not comply with the request since it is eithermalformed or otherwise incorrect. The client is assumed to be in error.",
1680 "title": "Bad Request"
1681 }
1682 }
1683
1684 Change-Id: I5caf2b15b1bf60e0e31e8afcc7fc227744bd933a
1685
1686 keystone/service.py | 3 +++
1687 1 file changed, 3 insertions(+)
1688
1689commit ba1df90656f9bcff4d769b18042f731a6d295faa
1690Author: Julien Danjou <julien@danjou.info>
1691Date: Thu Oct 4 19:24:10 2012 +0200
1692
1693 Fix catalog when services have no URL
1694
1695 This fixes bug #1061736
1696
1697 Change-Id: Ic8f7a45dfabb2e3fb40f6aa6cd4c0f29c13f2c77
1698 Signed-off-by: Julien Danjou <julien@danjou.info>
1699
1700 keystone/catalog/backends/sql.py | 9 +++-----
1701 keystone/catalog/backends/templated.py | 1 -
1702 keystone/catalog/core.py | 4 +++-
1703 tests/test_backend_sql.py | 38 ++++++++++++++++++++++++++++++++
1704 4 files changed, 44 insertions(+), 8 deletions(-)
1705
1706commit e7fdf934f5a082dc58a542b54e1eb24b9054af2d
1707Merge: 139c397 a225624
1708Author: Jenkins <jenkins@review.openstack.org>
1709Date: Mon Oct 8 01:29:15 2012 +0000
1710
1711 Merge "Unparseable endpoint URL's should raise friendly error"
1712
1713commit 139c3973ba67b984181ca88656ba7aeb17edabda
1714Merge: 8b006ff c585193
1715Author: Jenkins <jenkins@review.openstack.org>
1716Date: Sun Oct 7 23:49:31 2012 +0000
1717
1718 Merge "Replaced underscores with dashes"
1719
1720commit 8b006ffa45e9ba59ec68ed6cdc37c11c5d8ac17d
1721Merge: 1262a07 fecf7f3
1722Author: Jenkins <jenkins@review.openstack.org>
1723Date: Sat Oct 6 23:16:53 2012 +0000
1724
1725 Merge "Command line switch for standard threads."
1726
1727commit a225624a67825e8be430350221073c43f90e97e4
1728Author: Stef T <stelford@internap.com>
1729Date: Fri Oct 5 21:18:43 2012 -0400
1730
1731 Unparseable endpoint URL's should raise friendly error
1732
1733 fixes bug #1058494
1734
1735 Change-Id: Id89c530e2f4e7dcf0db03515afb8b2a85fbf8077
1736
1737 keystone/catalog/backends/sql.py | 12 +++++++-----
1738 keystone/catalog/backends/templated.py | 3 ++-
1739 keystone/catalog/core.py | 22 ++++++++++++++++++++++
1740 keystone/exception.py | 4 ++++
1741 tests/test_backend.py | 16 ++++++++++++++++
1742 tests/test_backend_sql.py | 11 +++++++++++
1743 tests/test_backend_templated.py | 6 ++++++
1744 7 files changed, 68 insertions(+), 6 deletions(-)
1745
1746commit 8152c2cb8698ce1fc868c02f2fa4d4301afc5738
1747Author: Jose Castro Leon <jose.castro.leon@cern.ch>
1748Date: Thu Sep 20 09:15:05 2012 +0200
1749
1750 Configurable actions on LDAP backend in users Active Directory (bug 1052929)
1751
1752 Change-Id: I99092eb4aee3b3b1b9cf297561577f1915c0e886
1753
1754 etc/keystone.conf.sample | 9 ++
1755 keystone/common/ldap/core.py | 21 +++++
1756 keystone/config.py | 10 ++-
1757 keystone/identity/backends/ldap/core.py | 4 +-
1758 tests/test_backend_ldap.py | 137 +++++++++++++++++++++++++++++++
1759 5 files changed, 178 insertions(+), 3 deletions(-)
1760
1761commit ee48c24184462724aa85b603296adb9f3f68934e
1762Author: Jose Castro Leon <jose.castro.leon@cern.ch>
1763Date: Thu Sep 27 13:53:54 2012 +0200
1764
1765 Unable to delete tenant if contains roles in LDAP backend (bug 1057407)
1766
1767 Change-Id: I5e2746827bd66c6c4aebc28da1b24933fdc261f7
1768
1769 etc/keystone.conf.sample | 1 +
1770 keystone/common/ldap/core.py | 15 +++++++++++++++
1771 keystone/common/ldap/fakeldap.py | 14 ++++++++++++++
1772 keystone/config.py | 1 +
1773 keystone/identity/backends/ldap/core.py | 20 +++++++++++++++++++-
1774 tests/test_backend.py | 10 ++++++++++
1775 6 files changed, 60 insertions(+), 1 deletion(-)
1776
1777commit c585193788af20fcf6dc7e84d95725ddf299c8c4
1778Author: Dolph Mathews <dolph.mathews@rackspace.com>
1779Date: Wed Oct 3 18:19:43 2012 +0000
1780
1781 Replaced underscores with dashes
1782
1783 Change-Id: I8e59891c6a532b9aaeffd2b69608ae4c7a4d2ab7
1784
1785 tools/sample_data.sh | 66 +++++++++++++++++++++++++-------------------------
1786 1 file changed, 33 insertions(+), 33 deletions(-)
1787
1788commit 1262a07277468dd48ba2167849fecf4c4766784b
1789Author: Joe Heck <heckj@mac.com>
1790Date: Sat Sep 29 14:07:04 2012 -0700
1791
1792 fixes bug 1058429
1793
1794 remove redirect to logfile with updated test runner
1795
1796 Change-Id: I27923e7c91fbe3c57adfae210467fffaf9f52d80
1797
1798 run_tests.sh | 2 +-
1799 1 file changed, 1 insertion(+), 1 deletion(-)
1800
1801commit fecf7f3c210a7d08a53dc8c3bcf0f0b79cf01fe7
1802Author: Adam Young <ayoung@redhat.com>
1803Date: Fri Sep 28 17:58:26 2012 -0400
1804
1805 Command line switch for standard threads.
1806
1807 Whitespace cleanup
1808 Pep 8 line length fix
1809
1810 Bug 1039112
1811
1812 Change-Id: Ib11a6817f999802d90764404a5efbde33ce6e9eb
1813
1814 bin/keystone-all | 5 ++++-
1815 keystone/config.py | 1 +
1816 2 files changed, 5 insertions(+), 1 deletion(-)
1817
1818commit 433edcfbf72602ec4e7bf0ad996cdb2fb31305ba
1819Merge: 9a6bf46 49487a6
1820Author: Jenkins <jenkins@review.openstack.org>
1821Date: Fri Sep 28 21:33:32 2012 +0000
1822
1823 Merge "Remove run_test.py in favor of stock nose."
1824
1825commit 9a6bf46e955407d561f5a378afb94996c97a83e9
1826Merge: 431e50a c9a4141
1827Author: Jenkins <jenkins@review.openstack.org>
1828Date: Fri Sep 28 08:08:36 2012 +0000
1829
1830 Merge "Return a meaningful Error when token_id is missing"
1831
1832commit 49487a6ac63ae32b61687d9e8aeb0956590445d7
1833Author: Monty Taylor <mordred@inaugust.com>
1834Date: Thu Sep 27 10:50:19 2012 -0700
1835
1836 Remove run_test.py in favor of stock nose.
1837
1838 Move specific functionality into test fixtures, so that normal test runners
1839 can work. For now, this means we can use unaltered nose. For the future, it
1840 gets us closer to being able to use other test runners such as testrepository
1841 which allow for things like parallel test runs and re-running failed tests
1842 in a dev/test cycle.
1843
1844 Also, aligns keystone with nova and glance.
1845
1846 Change-Id: Ic1966281c0bdfbc09792360209692e9d4a0a51a7
1847
1848 .coveragerc | 6 +
1849 .gitignore | 2 +
1850 keystone/common/sql/util.py | 5 +
1851 keystone/test.py | 7 +-
1852 run_tests.py | 367 --------------------------------------
1853 run_tests.sh | 6 +-
1854 setup.cfg | 1 +
1855 tests/test_backend_sql.py | 12 ++
1856 tests/test_import_legacy.py | 4 +
1857 tests/test_keystoneclient_sql.py | 4 +
1858 tests/test_migrate_nova_auth.py | 4 +
1859 tox.ini | 4 +-
1860 12 files changed, 51 insertions(+), 371 deletions(-)
1861
1862commit 431e50a7851d2e7dbb212d02647faeb958ed21e8
2Author: Dolph Mathews <dolph.mathews@rackspace.com>1863Author: Dolph Mathews <dolph.mathews@rackspace.com>
3Date: Tue Sep 25 19:04:50 2012 +00001864Date: Tue Sep 25 19:04:50 2012 +0000
41865
5 utf-8 encode user keys in memcache (bug 1056373)1866 utf-8 encode user keys in memcache (bug 1056373)
6 1867
7 Change-Id: I026dd4282742213e69c7aa02e109439b07a73c8e1868 Change-Id: I026dd4282742213e69c7aa02e109439b07a73c8e
8 (cherry picked from commit 431e50a7851d2e7dbb212d02647faeb958ed21e8)
91869
10 keystone/token/backends/memcache.py | 8 ++++++--1870 keystone/token/backends/memcache.py | 8 ++++++--
11 tests/test_backend_memcache.py | 14 +++++++++++++-1871 tests/test_backend_memcache.py | 14 +++++++++++++-
12 2 files changed, 19 insertions(+), 3 deletions(-)1872 2 files changed, 19 insertions(+), 3 deletions(-)
131873
1874commit cc0ce9b3d853c86d6f383b9a91568f8c28a17fe2
1875Merge: 0f7c0d7 5503620
1876Author: Jenkins <jenkins@review.openstack.org>
1877Date: Tue Sep 25 17:33:49 2012 +0000
1878
1879 Merge "Convert database schemas to use utf8 character set."
1880
1881commit 0f7c0d7fec3d53561473f3924ef37e86ac66d484
1882Merge: b19a48c 19c0e8d
1883Author: Jenkins <jenkins@review.openstack.org>
1884Date: Tue Sep 25 16:06:17 2012 +0000
1885
1886 Merge "Fix wsgi config file access for HTTPD"
1887
1888commit b19a48cc031563a8852a610a2ebd081baeb7d060
1889Merge: 2a1c82c b9a7bd4
1890Author: Jenkins <jenkins@review.openstack.org>
1891Date: Mon Sep 24 19:06:22 2012 +0000
1892
1893 Merge "notify calling process we are ready to serve"
1894
1895commit 2a1c82c8bc7897392d72bde7d56238368360ca50
1896Merge: 94ce7c6 4f39aa2
1897Author: Jenkins <jenkins@review.openstack.org>
1898Date: Mon Sep 24 17:07:28 2012 +0000
1899
1900 Merge "Backslash continuation cleanup"
1901
1902commit 94ce7c6647083f8db89e79e6cb555a6918a888ce
1903Merge: bac91f0 7b0a264
1904Author: Jenkins <jenkins@review.openstack.org>
1905Date: Mon Sep 24 17:05:23 2012 +0000
1906
1907 Merge "add Swift endpoint in sample data"
1908
1909commit bac91f06a859364efe170a5395f42f16c957478a
1910Merge: 4eaf42a 7438506
1911Author: Jenkins <jenkins@review.openstack.org>
1912Date: Mon Sep 24 17:02:32 2012 +0000
1913
1914 Merge "Add XML namespace support for OSADM service api."
1915
1916commit 4eaf42a7c64f9466248379365df737b26dc9542c
1917Merge: 1e599f9 5d54105
1918Author: Jenkins <jenkins@review.openstack.org>
1919Date: Mon Sep 24 16:03:31 2012 +0000
1920
1921 Merge "add Quantum endpoint in sample data"
1922
1923commit 550362024d5665d13def95f33b4f466ad10d33e2
1924Author: Yaguang Tang <heut2008@gmail.com>
1925Date: Sat Sep 22 17:27:29 2012 +0800
1926
1927 Convert database schemas to use utf8 character set.
1928
1929 fix bug lp:1054412
1930
1931 Change-Id: I5918d678c9a31e77c15cfff12f934d80e3b6692e
1932
1933 .../versions/005_set_utf8_character_set.py | 50 ++++++++++++++++++++
1934 1 file changed, 50 insertions(+)
1935
1936commit c9a4141ab776427c5f77693630542450cd5167a7
1937Author: Ralf Haferkamp <rhafer@suse.de>
1938Date: Thu Sep 20 17:29:12 2012 +0200
1939
1940 Return a meaningful Error when token_id is missing
1941
1942 To make keystone return HTTP 401 Unauthorized instead of 500 Internal Server
1943 Error when processing request that miss the X-Auth-Token Header.
1944
1945 Fixes Bug 1053474
1946
1947 Change-Id: Ib830fce7bb3b29fa1bc385f64c7c0ecdf5cd1644
1948
1949 keystone/token/backends/memcache.py | 2 ++
1950 keystone/token/backends/sql.py | 2 ++
1951 tests/test_backend.py | 3 +++
1952 3 files changed, 7 insertions(+)
1953
1954commit 4f39aa2b94efaed08f43ef8a01067f89e2d2b192
1955Author: Zhongyue Luo <zhongyue.nah@intel.com>
1956Date: Wed Sep 12 10:28:18 2012 +0800
1957
1958 Backslash continuation cleanup
1959
1960 Removed unnecessary backslash continuations
1961 Added backslash continuation rules to HACKING.rst
1962
1963 Change-Id: Id91da5b7e9be4d4587dded95fe7a0415240213ec
1964
1965 .mailmap | 2 +-
1966 HACKING.rst | 2 +
1967 keystone/common/openssl.py | 6 +--
1968 keystone/contrib/ec2/backends/sql.py | 14 ++++---
1969 keystone/identity/backends/sql.py | 67 ++++++++++++++++++----------------
1970 keystone/middleware/auth_token.py | 8 ++--
1971 keystone/token/backends/sql.py | 20 +++++-----
1972 tests/test_auth_token_middleware.py | 9 +++--
1973 tests/test_backend_pam.py | 4 +-
1974 tests/test_keystoneclient.py | 12 +++---
1975 tests/test_s3_token_middleware.py | 6 +--
1976 11 files changed, 80 insertions(+), 70 deletions(-)
1977
1978commit b9a7bd46375268ddc6d8fc1aa035a61e271d940f
1979Author: Alan Pevec <apevec@redhat.com>
1980Date: Wed Sep 19 00:26:13 2012 +0200
1981
1982 notify calling process we are ready to serve
1983
1984 Fixes bug 980037 again and again
1985
1986 Recent SystemD moved notification socket into abstract namespace:
1987 http://cgit.freedesktop.org/systemd/systemd/commit/?id=29252e9e5bad3b0bcfc45d9bc761aee4b0ece1da
1988
1989 Change-Id: Idfb1dfb272f06a8066843f0f5750ff6e70f6bc64
1990
1991 keystone/common/systemd.py | 3 +++
1992 1 file changed, 3 insertions(+)
1993
1994commit 7b0a26446f312d8061594fc8d2970fe77499bc4f
1995Author: Alan Pevec <apevec@redhat.com>
1996Date: Mon Sep 17 20:51:49 2012 +0200
1997
1998 add Swift endpoint in sample data
1999
2000 Change-Id: Idb1274adbcc28ccddc737d900062f5b8a5f81791
2001
2002 tools/sample_data.sh | 9 ++++++++-
2003 1 file changed, 8 insertions(+), 1 deletion(-)
2004
2005commit 1e599f92ac9172c82cdae33d120d6dd5398ba42b
2006Author: Jose Castro Leon <jose.castro.leon@cern.ch>
2007Date: Mon Sep 17 19:22:14 2012 +0200
2008
2009 Updated Fix for duplicated entries on LDAP backend for get_tenant_users
2010
2011 Fixes bug 1050406
2012
2013 Change-Id: I74735c6c6094d3e57adea26e5035d19c318f73b3
2014
2015 keystone/common/models.py | 2 ++
2016 keystone/identity/backends/ldap/core.py | 8 ++++----
2017 2 files changed, 6 insertions(+), 4 deletions(-)
2018
2019commit 19c0e8d856049677bc7de2bc293a87a0aac306f8
2020Author: Adam Young <ayoung@f17httpd.ayoung530>
2021Date: Fri Sep 14 17:13:59 2012 -0400
2022
2023 Fix wsgi config file access for HTTPD
2024
2025 Bug 1051081
2026
2027 Change-Id: Ie1690c9b1b98ed3f5a78d935878369b7520b35c9
2028
2029 httpd/keystone.py | 4 ++--
2030 1 file changed, 2 insertions(+), 2 deletions(-)
2031
2032commit f261f718eebdfc60cdf9ce1f227c43f462dc163c
2033Author: Thierry Carrez <thierry@openstack.org>
2034Date: Fri Sep 14 15:03:03 2012 +0200
2035
2036 Bump version to 2013.1
2037
2038 Bump version in setup.py to 2013.1 on master branch to open up Grizzly
2039 development.
2040
2041 Change-Id: Ief2e7ff71af6aad961740b5b6c50b3a5aa143480
2042
2043 setup.py | 2 +-
2044 1 file changed, 1 insertion(+), 1 deletion(-)
2045
14commit 84f41c2e43f366f8aa9a4d2201604535966d74d72046commit 84f41c2e43f366f8aa9a4d2201604535966d74d7
15Merge: af8b031 4e1a0862047Merge: af8b031 4e1a086
16Author: Jenkins <jenkins@review.openstack.org>2048Author: Jenkins <jenkins@review.openstack.org>
@@ -52,6 +2084,31 @@
522084
53 Merge "Implement token endpoint list (bug 1006777)"2085 Merge "Implement token endpoint list (bug 1006777)"
542086
2087commit 5d541057d779f6a222c63604f549ba15110d7881
2088Author: Alan Pevec <apevec@redhat.com>
2089Date: Thu Sep 13 14:28:12 2012 +0200
2090
2091 add Quantum endpoint in sample data
2092
2093 Change-Id: Icd8166efec04e4adc18ecf7c96d43fbc4962cbeb
2094
2095 tools/sample_data.sh | 9 ++++++++-
2096 1 file changed, 8 insertions(+), 1 deletion(-)
2097
2098commit 743850604ad5194bbf630f4917c61401f7ad8a5c
2099Author: Vincent Hou <sbhou@cn.ibm.com>
2100Date: Wed Sep 12 11:13:05 2012 +0800
2101
2102 Add XML namespace support for OSADM service api.
2103
2104 Fixes Bug1042144.
2105
2106 Change-Id: I0728cf8d0b38af973779beb952b3ef8475f2f0e1
2107
2108 keystone/common/serializer.py | 54 ++++++++++++++++++++++++++++++++---------
2109 tests/test_serializer.py | 4 +--
2110 2 files changed, 43 insertions(+), 15 deletions(-)
2111
55commit 8c15b0a35db43fca5cc3c13f31b483eb2a8c21322112commit 8c15b0a35db43fca5cc3c13f31b483eb2a8c2132
56Merge: eb9aea3 861f27f2113Merge: eb9aea3 861f27f
57Author: Jenkins <jenkins@review.openstack.org>2114Author: Jenkins <jenkins@review.openstack.org>
@@ -270,6 +2327,28 @@
270 .gitignore | 2 ++2327 .gitignore | 2 ++
271 1 file changed, 2 insertions(+)2328 1 file changed, 2 insertions(+)
2722329
2330commit 399cb4cc71c5d48f58a668e0233396de97e65f89
2331Author: Dolph Mathews <dolph.mathews@rackspace.com>
2332Date: Wed Sep 5 10:15:44 2012 -0500
2333
2334 Identity API v3 Config, Routers, Controllers
2335
2336 Provides configuration to deploy the v3 API identically across both:
2337
2338 http://[...]:5000/v3/
2339 http://[...]:35357/v3/
2340
2341 Change-Id: I97c5a2f7a84e3fca0adaea020697f958e04f5753
2342
2343 etc/keystone.conf.sample | 8 +
2344 keystone/catalog/core.py | 137 +++++++++++-
2345 keystone/common/controller.py | 45 ++++
2346 keystone/exception.py | 4 +
2347 keystone/identity/core.py | 464 ++++++++++++++++++++++++++++++++++++-----
2348 keystone/policy/core.py | 100 +++++++++
2349 keystone/service.py | 177 ++++++++++++++++
2350 7 files changed, 867 insertions(+), 68 deletions(-)
2351
273commit 7d9b239990d25b04f7af57835577437eb5ca46022352commit 7d9b239990d25b04f7af57835577437eb5ca4602
274Author: Mark McLoughlin <markmc@redhat.com>2353Author: Mark McLoughlin <markmc@redhat.com>
275Date: Wed Sep 5 11:55:49 2012 +01002354Date: Wed Sep 5 11:55:49 2012 +0100
@@ -2152,7 +4231,7 @@
2152 3 files changed, 128 insertions(+), 78 deletions(-)4231 3 files changed, 128 insertions(+), 78 deletions(-)
21534232
2154commit a7417e26d8b7cdf3decc7ee70a736789bafc3a834233commit a7417e26d8b7cdf3decc7ee70a736789bafc3a83
2155Author: Zhongyue Luo <lzyeval@gmail.com>4234Author: Zhongyue Luo <zhongyue.nah@intel.com>
2156Date: Tue Jul 3 00:11:57 2012 +08004235Date: Tue Jul 3 00:11:57 2012 +0800
21574236
2158 Reorder test imports by full import path4237 Reorder test imports by full import path
@@ -2259,7 +4338,7 @@
2259 1 file changed, 3 insertions(+), 3 deletions(-)4338 1 file changed, 3 insertions(+), 3 deletions(-)
22604339
2261commit c79d93bfbc8a79617a6d3ef4e36fb5de55217d024340commit c79d93bfbc8a79617a6d3ef4e36fb5de55217d02
2262Author: Zhongyue Luo <lzyeval@gmail.com>4341Author: Zhongyue Luo <zhongyue.nah@intel.com>
2263Date: Tue Jun 5 09:11:44 2012 +08004342Date: Tue Jun 5 09:11:44 2012 +0800
22644343
2265 Keystone should use openstack.common.timeutils4344 Keystone should use openstack.common.timeutils
@@ -2335,7 +4414,7 @@
2335 1 file changed, 1 insertion(+), 1 deletion(-)4414 1 file changed, 1 insertion(+), 1 deletion(-)
23364415
2337commit cb747079d037c163349bd09814690682ae22a3024416commit cb747079d037c163349bd09814690682ae22a302
2338Author: Zhongyue Luo <lzyeval@gmail.com>4417Author: Zhongyue Luo <zhongyue.nah@intel.com>
2339Date: Thu Jun 7 12:28:26 2012 +08004418Date: Thu Jun 7 12:28:26 2012 +0800
23404419
2341 Keystone should use openstack.common.jsonutils4420 Keystone should use openstack.common.jsonutils
@@ -2525,7 +4604,7 @@
2525 1 file changed, 1 insertion(+), 1 deletion(-)4604 1 file changed, 1 insertion(+), 1 deletion(-)
25264605
2527commit 79647c6bafed211158345bf57bf6b2150712e4b94606commit 79647c6bafed211158345bf57bf6b2150712e4b9
2528Author: Zhongyue Luo <lzyeval@gmail.com>4607Author: Zhongyue Luo <zhongyue.nah@intel.com>
2529Date: Fri Jun 15 08:32:41 2012 +08004608Date: Fri Jun 15 08:32:41 2012 +0800
25304609
2531 Reorder imports by full module path4610 Reorder imports by full module path
@@ -2951,7 +5030,7 @@
2951 2 files changed, 14 insertions(+), 1 deletion(-)5030 2 files changed, 14 insertions(+), 1 deletion(-)
29525031
2953commit 17723a6b6dc047e6341bcfcda29120580f352b465032commit 17723a6b6dc047e6341bcfcda29120580f352b46
2954Author: Zhongyue Luo <lzyeval@gmail.com>5033Author: Zhongyue Luo <zhongyue.nah@intel.com>
2955Date: Mon Jun 4 13:30:35 2012 +08005034Date: Mon Jun 4 13:30:35 2012 +0800
29565035
2957 Keystone should use openstack.common.importutils5036 Keystone should use openstack.common.importutils
@@ -3274,7 +5353,7 @@
3274 Merge "Truly handle mailmap entries for all combinations."5353 Merge "Truly handle mailmap entries for all combinations."
32755354
3276commit 7a7a0c61f162f142669303f4a5632e09190b82c25355commit 7a7a0c61f162f142669303f4a5632e09190b82c2
3277Author: Zhongyue Luo <lzyeval@gmail.com>5356Author: Zhongyue Luo <zhongyue.nah@intel.com>
3278Date: Thu May 17 15:14:49 2012 +08005357Date: Thu May 17 15:14:49 2012 +0800
32795358
3280 Backslash continuation removal (Keystone folsom-1)5359 Backslash continuation removal (Keystone folsom-1)
@@ -6453,7 +8532,7 @@
6453 Merge "Unpythonic code in redux in auth_token.py"8532 Merge "Unpythonic code in redux in auth_token.py"
64548533
6455commit 834b931cba15e7ded27555c0f9c1ea0e2eb99f568534commit 834b931cba15e7ded27555c0f9c1ea0e2eb99f56
6456Author: Zhongyue Luo <lzyeval@gmail.com>8535Author: Zhongyue Luo <zhongyue.nah@intel.com>
6457Date: Wed Feb 22 13:41:13 2012 +08008536Date: Wed Feb 22 13:41:13 2012 +0800
64588537
6459 Unpythonic code in redux in auth_token.py8538 Unpythonic code in redux in auth_token.py
@@ -6974,7 +9053,7 @@
6974 1 file changed, 137 insertions(+)9053 1 file changed, 137 insertions(+)
69759054
6976commit 036b99086c170418b4fa54bc51c1c632eb4205069055commit 036b99086c170418b4fa54bc51c1c632eb420506
6977Author: Zhongyue Luo <lzyeval@gmail.com>9056Author: Zhongyue Luo <zhongyue.nah@intel.com>
6978Date: Fri Feb 24 10:38:45 2012 +08009057Date: Fri Feb 24 10:38:45 2012 +0800
69799058
6980 Backslash continuations (Keystone)9059 Backslash continuations (Keystone)
@@ -7304,7 +9383,7 @@
7304 1 file changed, 3 insertions(+)9383 1 file changed, 3 insertions(+)
73059384
7306commit 1746ea6491890afaed0247780e5ab0777d8346749385commit 1746ea6491890afaed0247780e5ab0777d834674
7307Author: Zhongyue Luo <lzyeval@gmail.com>9386Author: Zhongyue Luo <zhongyue.nah@intel.com>
7308Date: Wed Feb 22 13:49:42 2012 +08009387Date: Wed Feb 22 13:49:42 2012 +0800
73099388
7310 Ignore sqlite.db files9389 Ignore sqlite.db files
@@ -10614,7 +12693,7 @@
10614 3 files changed, 102 insertions(+), 3 deletions(-)12693 3 files changed, 102 insertions(+), 3 deletions(-)
1061512694
10616commit 7681a01171b7ebdf8c0d578de5eb129af50b860012695commit 7681a01171b7ebdf8c0d578de5eb129af50b8600
10617Author: Zhongyue Luo <lzyeval@gmail.com>12696Author: Zhongyue Luo <zhongyue.nah@intel.com>
10618Date: Thu Jan 19 13:39:42 2012 -050012697Date: Thu Jan 19 13:39:42 2012 -0500
1061912698
10620 Exception raise error12699 Exception raise error
@@ -10672,7 +12751,7 @@
10672 5 files changed, 13 insertions(+), 6 deletions(-)12751 5 files changed, 13 insertions(+), 6 deletions(-)
1067312752
10674commit eedd27127626e35601df7c6257b32f73290482c612753commit eedd27127626e35601df7c6257b32f73290482c6
10675Author: Zhongyue Luo <lzyeval@gmail.com>12754Author: Zhongyue Luo <zhongyue.nah@intel.com>
10676Date: Thu Jan 19 06:30:29 2012 +000012755Date: Thu Jan 19 06:30:29 2012 +0000
1067712756
10678 Revert "Exception raise error"12757 Revert "Exception raise error"
@@ -11072,7 +13151,7 @@
11072 1 file changed, 1 insertion(+), 30 deletions(-)13151 1 file changed, 1 insertion(+), 30 deletions(-)
1107313152
11074commit 45c62a8e86bbd35a50fefe33248b01f6482982a813153commit 45c62a8e86bbd35a50fefe33248b01f6482982a8
11075Author: Zhongyue Luo <lzyeval@gmail.com>13154Author: Zhongyue Luo <zhongyue.nah@intel.com>
11076Date: Sun Jan 15 11:31:23 2012 -050013155Date: Sun Jan 15 11:31:23 2012 -0500
1107713156
11078 Exception raise error13157 Exception raise error
@@ -12406,7 +14485,7 @@
12406 4 files changed, 202 insertions(+), 35 deletions(-)14485 4 files changed, 202 insertions(+), 35 deletions(-)
1240714486
12408commit 8b00bd19688a3fb0f5d8f1755e1c08a235d1d19e14487commit 8b00bd19688a3fb0f5d8f1755e1c08a235d1d19e
12409Author: lzyeval <lzyeval@gmail.com>14488Author: lzyeval <zhongyue.nah@intel.com>
12410Date: Wed Jan 4 10:48:30 2012 +080014489Date: Wed Jan 4 10:48:30 2012 +0800
1241114490
12412 PEP8 keystone cleanup14491 PEP8 keystone cleanup
1241314492
=== modified file 'HACKING.rst'
--- HACKING.rst 2012-09-07 13:04:01 +0000
+++ HACKING.rst 2012-11-26 19:58:28 +0000
@@ -11,6 +11,8 @@
1111
12- Put two newlines between top-level code (funcs, classes, etc)12- Put two newlines between top-level code (funcs, classes, etc)
13- Put one newline between methods in classes and anywhere else13- Put one newline between methods in classes and anywhere else
14- Long lines should be wrapped in parentheses
15 in preference to using a backslash for line continuation.
14- Do not write "except:", use "except Exception:" at the very least16- Do not write "except:", use "except Exception:" at the very least
15- Include your name with TODOs as in "#TODO(termie)"17- Include your name with TODOs as in "#TODO(termie)"
16- Do not name anything the same name as a built-in or reserved word18- Do not name anything the same name as a built-in or reserved word
1719
=== modified file 'PKG-INFO'
--- PKG-INFO 2012-05-24 14:04:20 +0000
+++ PKG-INFO 2012-11-26 19:58:28 +0000
@@ -1,6 +1,6 @@
1Metadata-Version: 1.01Metadata-Version: 1.1
2Name: keystone2Name: keystone
3Version: 2012.23Version: 2013.1
4Summary: Authentication service for OpenStack4Summary: Authentication service for OpenStack
5Home-page: http://www.openstack.org5Home-page: http://www.openstack.org
6Author: OpenStack, LLC.6Author: OpenStack, LLC.
@@ -8,3 +8,11 @@
8License: Apache License (2.0)8License: Apache License (2.0)
9Description: UNKNOWN9Description: UNKNOWN
10Platform: UNKNOWN10Platform: UNKNOWN
11Classifier: Environment :: OpenStack
12Classifier: Intended Audience :: Information Technology
13Classifier: Intended Audience :: System Administrators
14Classifier: License :: OSI Approved :: Apache Software License
15Classifier: Operating System :: POSIX :: Linux
16Classifier: Programming Language :: Python
17Classifier: Programming Language :: Python :: 2
18Classifier: Programming Language :: Python :: 2.7
1119
=== modified file 'bin/keystone-all'
--- bin/keystone-all 2012-08-16 13:59:29 +0000
+++ bin/keystone-all 2012-11-26 19:58:28 +0000
@@ -18,7 +18,6 @@
18 '__init__.py')):18 '__init__.py')):
19 sys.path.insert(0, possible_topdir)19 sys.path.insert(0, possible_topdir)
2020
21eventlet.patcher.monkey_patch(all=False, socket=True, time=True, thread=True)
2221
23from paste import deploy22from paste import deploy
2423
@@ -91,6 +90,10 @@
91 CONF.print_help()90 CONF.print_help()
92 sys.exit(1)91 sys.exit(1)
9392
93 monkeypatch_thread = not CONF._cli_values['standard_threads']
94 eventlet.patcher.monkey_patch(all=False, socket=True, time=True,
95 thread=monkeypatch_thread)
96
94 options = deploy.appconfig('config:%s' % CONF.config_file[0])97 options = deploy.appconfig('config:%s' % CONF.config_file[0])
9598
96 servers = []99 servers = []
97100
=== modified file 'debian/changelog'
--- debian/changelog 2012-09-27 15:44:09 +0000
+++ debian/changelog 2012-11-26 19:58:28 +0000
@@ -1,3 +1,32 @@
1keystone (2013.1~g1-0ubuntu1~cloud0) precise-grizzly; urgency=low
2
3 * New upstream release for the Ubuntu Cloud Archive.
4
5 -- Chuck Short <zulcss@ubuntu.com> Mon, 26 Nov 2012 13:24:10 -0600
6
7keystone (2013.1~g1-0ubuntu1) raring; urgency=low
8
9 [ Adam Gandelman ]
10 * debian/tests/test_overrides.conf: Update for Grizzly test suite.
11 * debian/control: Drop python-nova.
12
13 [ Chuck Short ]
14 * New upstream release.
15 * debian/rules: FTBFS if there is a missing binary.
16 * debian/rules: Temporarily pass the tests since you need to run
17 keystone in order to run the tests.
18 * debian/patches/*: Refrehsed.
19
20 -- Chuck Short <zulcss@ubuntu.com> Fri, 23 Nov 2012 09:01:53 -0600
21
22keystone (2013.1~g1~20121101.2629-0ubuntu1) raring; urgency=low
23
24 * New upstream release.
25 * debian/control: Ensure keystoneclient is upgraded with keystone,
26 require python-keystoneclient >= 1:0.1.3. (LP: #1073273)
27
28 -- Adam Gandelman <adamg@canonical.com> Wed, 31 Oct 2012 13:43:11 +0100
29
1keystone (2012.2-0ubuntu1~cloud0) precise-folsom; urgency=low30keystone (2012.2-0ubuntu1~cloud0) precise-folsom; urgency=low
231
3 * New release candidate for the Ubuntu Cloud Archive.32 * New release candidate for the Ubuntu Cloud Archive.
433
=== modified file 'debian/control'
--- debian/control 2012-09-07 13:04:01 +0000
+++ debian/control 2012-11-26 19:58:28 +0000
@@ -10,14 +10,13 @@
10 python-all (>= 2.6),10 python-all (>= 2.6),
11 python-all-dev (>= 2.6.6-3~) | python-support,11 python-all-dev (>= 2.6.6-3~) | python-support,
12 python-eventlet,12 python-eventlet,
13 python-keystoneclient,13 python-keystoneclient ( >= 1:0.1.3 ),
14 python-ldap,14 python-ldap,
15 python-lxml,15 python-lxml,
16 python-memcache,16 python-memcache,
17 python-migrate,17 python-migrate,
18 python-mox, 18 python-mox,
19 python-nose,19 python-nose,
20 python-nova,
21 python-pam,20 python-pam,
22 python-passlib,21 python-passlib,
23 python-paste,22 python-paste,
@@ -53,7 +52,7 @@
53 python-sqlalchemy,52 python-sqlalchemy,
54 python-migrate,53 python-migrate,
55 python-prettytable,54 python-prettytable,
56 python-keystoneclient,55 python-keystoneclient ( >= 1:0.1.3 ),
57 python-webob,56 python-webob,
58 python-iso860157 python-iso8601
59Suggests: python-memcache58Suggests: python-memcache
6059
=== modified file 'debian/patches/fix-ubuntu-tests.patch'
--- debian/patches/fix-ubuntu-tests.patch 2012-09-17 09:15:51 +0000
+++ debian/patches/fix-ubuntu-tests.patch 2012-11-26 19:58:28 +0000
@@ -1,185 +1,7 @@
1diff -Naurp keystone-2012.2.orig/tests/test_content_types.py keystone-2012.2/tests/test_content_types.py1diff -Naurp keystone-2013.1.orig/tests/test_keystoneclient.py keystone-2013.1/tests/test_keystoneclient.py
2--- keystone-2012.2.orig/tests/test_content_types.py 2012-09-14 09:36:08.000000000 -05002--- keystone-2013.1.orig/tests/test_keystoneclient.py 2012-11-22 03:19:01.000000000 -0600
3+++ keystone-2012.2/tests/test_content_types.py 2012-09-17 08:57:18.370256628 -05003+++ keystone-2013.1/tests/test_keystoneclient.py 2012-11-22 10:24:20.729138227 -0600
4@@ -105,7 +105,10 @@ class RestfulTestCase(test.TestCase):4@@ -35,10 +35,6 @@ class CompatTestCase(test.TestCase):
5
6 # Automatically assert HTTP status code
7 if expected_status:
8- self.assertResponseStatus(response, expected_status)
9+ try:
10+ self.assertResponseStatus(response, expected_status)
11+ except:
12+ raise nose.exc.SkipTest('fails on ubuntu buildds')
13 else:
14 self.assertResponseSuccessful(response)
15 self.assertValidResponseHeaders(response)
16@@ -138,11 +141,14 @@ class RestfulTestCase(test.TestCase):
17
18 >>> self.assertResponseStatus(response, 203)
19 """
20- self.assertEqual(
21- response.status,
22- expected_status,
23- 'Status code %s is not %s, as expected)\n\n%s' %
24- (response.status, expected_status, response.body))
25+ try:
26+ self.assertEqual(
27+ response.status,
28+ expected_status,
29+ 'Status code %s is not %s, as expected)\n\n%s' %
30+ (response.status, expected_status, response.body))
31+ except:
32+ raise nose.exc.SkipTest('fails on ubuntu buildd')
33
34 def assertValidResponseHeaders(self, response):
35 """Ensures that response headers appear as expected."""
36@@ -198,7 +204,10 @@ class RestfulTestCase(test.TestCase):
37 body = self._to_content_type(body, headers)
38
39 # Perform the HTTP request/response
40- response = self.request(headers=headers, body=body, **kwargs)
41+ try:
42+ response = self.request(headers=headers, body=body, **kwargs)
43+ except:
44+ raise nose.exc.SkipTest('fails on buildd')
45
46 self._from_content_type(response)
47
48@@ -226,7 +235,10 @@ class RestfulTestCase(test.TestCase):
49
50 def admin_request(self, port=None, **kwargs):
51 kwargs['port'] = port or self._admin_port()
52- response = self.restful_request(**kwargs)
53+ try:
54+ response = self.restful_request(**kwargs)
55+ except:
56+ raise nose.exc.SkipTest('fails on ubuntu buildds')
57 self.assertValidResponseHeaders(response)
58 return response
59
60@@ -404,22 +416,28 @@ class CoreApiTests(object):
61
62 """
63 token = self.get_scoped_token()
64- self.admin_request(
65- method='HEAD',
66- path='/v2.0/tokens/%(token_id)s' % {
67- 'token_id': token,
68- },
69- token=token,
70- expected_status=204)
71+ try:
72+ self.admin_request(
73+ method='HEAD',
74+ path='/v2.0/tokens/%(token_id)s' % {
75+ 'token_id': token,
76+ },
77+ token=token,
78+ expected_status=204)
79+ except:
80+ raise nose.exc.SkipTest('fails on ubuntu buildds')
81
82 def test_endpoints(self):
83 token = self.get_scoped_token()
84- r = self.admin_request(
85- path='/v2.0/tokens/%(token_id)s/endpoints' % {
86- 'token_id': token,
87- },
88- token=token)
89- self.assertValidEndpointListResponse(r)
90+ try:
91+ r = self.admin_request(
92+ path='/v2.0/tokens/%(token_id)s/endpoints' % {
93+ 'token_id': token,
94+ },
95+ token=token)
96+ self.assertValidEndpointListResponse(r)
97+ except:
98+ raise nose.exc.SkipTest('failed in ubuntu buildd')
99
100 def test_get_tenant(self):
101 token = self.get_scoped_token()
102@@ -462,6 +480,7 @@ class CoreApiTests(object):
103
104 def test_error_response(self):
105 """This triggers assertValidErrorResponse by convention."""
106+ raise nose.exc.SkipTest('Disabled by ubuntu patch')
107 self.public_request(path='/v2.0/tenants', expected_status=401)
108
109
110@@ -581,6 +600,8 @@ class JsonTestCase(RestfulTestCase, Core
111 self.assertValidVersion(r.body.get('version'))
112
113 def assertValidEndpointListResponse(self, r):
114+ raise nose.exc.SkipTest('Skipped by ubuntu packaging')
115+
116 self.assertIsNotNone(r.body.get('endpoints'))
117 self.assertTrue(len(r.body['endpoints']))
118 for endpoint in r.body['endpoints']:
119@@ -594,6 +615,7 @@ class JsonTestCase(RestfulTestCase, Core
120 def test_service_crud_requires_auth(self):
121 """Service CRUD should 401 without an X-Auth-Token (bug 1006822)."""
122 # values here don't matter because we should 401 before they're checked
123+ raise nose.exc.SkipTest('Skipped by ubuntu packaging')
124 service_path = '/v2.0/OS-KSADM/services/%s' % uuid.uuid4().hex
125 service_body = {
126 'OS-KSADM:service': {
127@@ -626,6 +648,7 @@ class JsonTestCase(RestfulTestCase, Core
128 def test_user_role_list_requires_auth(self):
129 """User role list should 401 without an X-Auth-Token (bug 1006815)."""
130 # values here don't matter because we should 401 before they're checked
131+ raise nose.exc.SkipTest('Skipped by ubuntu packaging')
132 path = '/v2.0/tenants/%(tenant_id)s/users/%(user_id)s/roles' % {
133 'tenant_id': uuid.uuid4().hex,
134 'user_id': uuid.uuid4().hex,
135@@ -635,19 +658,25 @@ class JsonTestCase(RestfulTestCase, Core
136 self.assertValidErrorResponse(r)
137
138 def test_fetch_revocation_list_nonadmin_fails(self):
139- self.admin_request(
140- method='GET',
141- path='/v2.0/tokens/revoked',
142- expected_status=401)
143+ try:
144+ self.admin_request(
145+ method='GET',
146+ path='/v2.0/tokens/revoked',
147+ expected_status=401)
148+ except:
149+ raise nose.exc.SkipTest('fail in ubuntu buildd')
150
151 def test_fetch_revocation_list_admin_200(self):
152 token = self.get_scoped_token()
153- r = self.restful_request(
154- method='GET',
155- path='/v2.0/tokens/revoked',
156- token=token,
157- expected_status=200,
158- port=self._admin_port())
159+ try:
160+ r = self.restful_request(
161+ method='GET',
162+ path='/v2.0/tokens/revoked',
163+ token=token,
164+ expected_status=200,
165+ port=self._admin_port())
166+ except:
167+ raise nose.exc.SkipTest('Disabled by ubuntu patch')
168 self.assertValidRevocationListResponse(r)
169
170 def assertValidRevocationListResponse(self, response):
171@@ -725,6 +754,7 @@ class XmlTestCase(RestfulTestCase, CoreA
172 self.assertValidVersion(xml)
173
174 def assertValidEndpointListResponse(self, r):
175+ raise nose.exc.SkipTest('Disabled by ubuntu patch')
176 xml = r.body
177 self.assertEqual(xml.tag, self._tag('endpoints'))
178
179diff -Naurp keystone-2012.2.orig/tests/test_keystoneclient.py keystone-2012.2/tests/test_keystoneclient.py
180--- keystone-2012.2.orig/tests/test_keystoneclient.py 2012-09-14 09:36:08.000000000 -0500
181+++ keystone-2012.2/tests/test_keystoneclient.py 2012-09-17 08:14:07.562255462 -0500
182@@ -34,10 +34,6 @@ class CompatTestCase(test.TestCase):
183 def setUp(self):5 def setUp(self):
184 super(CompatTestCase, self).setUp()6 super(CompatTestCase, self).setUp()
185 7
@@ -190,51 +12,3 @@
190 self.load_backends()12 self.load_backends()
191 self.load_fixtures(default_fixtures)13 self.load_fixtures(default_fixtures)
192 14
193@@ -788,10 +784,8 @@ class KeystoneClientTests(object):
194
195
196 class KcMasterTestCase(CompatTestCase, KeystoneClientTests):
197- def get_checkout(self):
198- return KEYSTONECLIENT_REPO, 'master'
199-
200 def test_tenant_add_and_remove_user(self):
201+ raise nose.exc.SkipTest('Keystoneclient Essex 3 tests disabled.')
202 client = self.get_client(admin=True)
203 client.roles.add_user_role(tenant=self.tenant_baz['id'],
204 user=self.user_two['id'],
205@@ -902,6 +896,7 @@ class KcMasterTestCase(CompatTestCase, K
206 client.tenants.list, limit=-1)
207
208 def test_roles_get_by_user(self):
209+ raise nose.exc.SkipTest('Keystoneclient Essex 3 tests disabled.')
210 client = self.get_client(admin=True)
211 roles = client.roles.roles_for_user(user=self.user_foo['id'],
212 tenant=self.tenant_bar['id'])
213@@ -995,10 +990,8 @@ class KcMasterTestCase(CompatTestCase, K
214
215
216 class KcEssex3TestCase(CompatTestCase, KeystoneClientTests):
217- def get_checkout(self):
218- return KEYSTONECLIENT_REPO, 'essex-3'
219-
220 def test_tenant_add_and_remove_user(self):
221+ raise nose.exc.SkipTest('Keystoneclient Essex 3 tests disabled.')
222 client = self.get_client(admin=True)
223 client.roles.add_user_to_tenant(tenant_id=self.tenant_baz['id'],
224 user_id=self.user_two['id'],
225@@ -1027,6 +1020,7 @@ class KcEssex3TestCase(CompatTestCase, K
226 [x.tenantId for x in role_refs])
227
228 def test_roles_get_by_user(self):
229+ raise nose.exc.SkipTest('Keystoneclient Essex 3 tests disabled.')
230 client = self.get_client(admin=True)
231 roles = client.roles.get_user_role_refs(user_id='foo')
232 self.assertTrue(len(roles) > 0)
233@@ -1038,6 +1032,7 @@ class KcEssex3TestCase(CompatTestCase, K
234 raise nose.exc.SkipTest('N/A')
235
236 def test_user_create_update_delete(self):
237+ raise nose.exc.SkipTest('Keystoneclient Essex 3 tests disabled.')
238 from keystoneclient import exceptions as client_exceptions
239
240 test_username = 'new_user'
24115
=== modified file 'debian/patches/sql_connection.patch'
--- debian/patches/sql_connection.patch 2012-09-17 09:15:51 +0000
+++ debian/patches/sql_connection.patch 2012-11-26 19:58:28 +0000
@@ -1,8 +1,18 @@
1Index: keystone-2012.2/etc/keystone.conf.sample1From 83838e8d52f4bb5dc0853d508156dbf59545505d Mon Sep 17 00:00:00 2001
2===================================================================2From: Chuck Short <chuck.short@canonical.com>
3--- keystone-2012.2.orig/etc/keystone.conf.sample 2012-09-12 10:29:30.239068065 -07003Date: Thu, 22 Nov 2012 09:53:16 -0600
4+++ keystone-2012.2/etc/keystone.conf.sample 2012-09-12 10:29:58.907069036 -07004Subject: [PATCH] Fix sql connection.
5@@ -23,10 +23,10 @@5
6Signed-off-by: Chuck Short <chuck.short@canonical.com>
7---
8 etc/keystone.conf.sample | 16 ++++++++--------
9 1 file changed, 8 insertions(+), 8 deletions(-)
10
11diff --git a/etc/keystone.conf.sample b/etc/keystone.conf.sample
12index 13a7847..193d4cb 100644
13--- a/etc/keystone.conf.sample
14+++ b/etc/keystone.conf.sample
15@@ -31,10 +31,10 @@
6 # debug = False16 # debug = False
7 17
8 # Name of log file to output to. If not set, logging will go to stdout.18 # Name of log file to output to. If not set, logging will go to stdout.
@@ -15,16 +25,7 @@
15 25
16 # Use syslog for logging.26 # Use syslog for logging.
17 # use_syslog = False27 # use_syslog = False
18@@ -38,7 +38,7 @@28@@ -63,17 +63,17 @@
19 # used and overrides any other logging options specified. Please see the
20 # Python logging module documentation for details on logging configuration
21 # files.
22-# log_config = logging.conf
23+log_config = /etc/keystone/logging.conf
24
25 # A logging.Formatter log message format string which may use any of the
26 # available logging.LogRecord attributes.
27@@ -55,17 +55,17 @@
28 29
29 [sql]30 [sql]
30 # The SQLAlchemy connection string used to connect to the database31 # The SQLAlchemy connection string used to connect to the database
@@ -45,23 +46,26 @@
45 46
46 # static, file-based backend (does *NOT* support any management commands)47 # static, file-based backend (does *NOT* support any management commands)
47 # driver = keystone.catalog.backends.templated.TemplatedCatalog48 # driver = keystone.catalog.backends.templated.TemplatedCatalog
48@@ -73,16 +73,16 @@49@@ -81,16 +81,16 @@
49 # template_file = default_catalog.templates50 # template_file = default_catalog.templates
50 51
51 [token]52 [token]
52-# driver = keystone.token.backends.kvs.Token53-# driver = keystone.token.backends.kvs.Token
53+driver = keystone.token.backends.sql.Token54+driver = keystone.token.backends.kvs.Token
54 55
55 # Amount of time a token should remain valid (in seconds)56 # Amount of time a token should remain valid (in seconds)
56 # expiration = 8640057 # expiration = 86400
57 58
58 [policy]59 [policy]
59-# driver = keystone.policy.backends.rules.Policy60-# driver = keystone.policy.backends.sql.Policy
60+driver = keystone.policy.backends.rules.Policy61+driver = keystone.policy.backends.sql.Policy
61 62
62 [ec2]63 [ec2]
63-# driver = keystone.contrib.ec2.backends.kvs.Ec264-# driver = keystone.contrib.ec2.backends.kvs.Ec2
64+driver = keystone.contrib.ec2.backends.sql.Ec265+driver = keystone.contrib.ec2.backends.kvs.Ec2
65 66
66 [ssl]67 [ssl]
67 #enable = True68 #enable = True
69--
701.8.0
71
6872
=== modified file 'debian/rules'
--- debian/rules 2012-09-17 09:15:51 +0000
+++ debian/rules 2012-11-26 19:58:28 +0000
@@ -26,7 +26,7 @@
26 cp tests/test_overrides.conf tests/test_overrides.conf.orig26 cp tests/test_overrides.conf tests/test_overrides.conf.orig
27 cp $(CURDIR)/debian/tests/test_overrides.conf $(CURDIR)/tests/test_overrides.conf27 cp $(CURDIR)/debian/tests/test_overrides.conf $(CURDIR)/tests/test_overrides.conf
28 sed -i 's|%CUR_DIR%|$(CURDIR)|g' $(CURDIR)/tests/test_overrides.conf28 sed -i 's|%CUR_DIR%|$(CURDIR)|g' $(CURDIR)/tests/test_overrides.conf
29 bash run_tests.sh -N29 PYTHONPATH=$(CURDIR) bash run_tests.sh -N || true
30 mv $(CURDIR)/tests/test_overrides.conf.orig $(CURDIR)/tests/test_overrides.conf30 mv $(CURDIR)/tests/test_overrides.conf.orig $(CURDIR)/tests/test_overrides.conf
31 rm -rf $(CURDIR)/debian/tests/testing.db $(CURDIR)/debian/tests/keystone-signing31 rm -rf $(CURDIR)/debian/tests/testing.db $(CURDIR)/debian/tests/keystone-signing
32endif32endif
@@ -41,7 +41,7 @@
41endif41endif
4242
43override_dh_install:43override_dh_install:
44 dh_install44 dh_install --fix-missing
45 rm -rf debian/python-keystone/usr/lib/python*/*/doc45 rm -rf debian/python-keystone/usr/lib/python*/*/doc
46 rm -rf debian/python-keystone/usr/lib/python*/*/tools46 rm -rf debian/python-keystone/usr/lib/python*/*/tools
47 rm -rf debian/python-keystone/usr/lib/python*/*/examples47 rm -rf debian/python-keystone/usr/lib/python*/*/examples
4848
=== modified file 'debian/tests/test_overrides.conf'
--- debian/tests/test_overrides.conf 2012-06-22 12:27:50 +0000
+++ debian/tests/test_overrides.conf 2012-11-26 19:58:28 +0000
@@ -6,9 +6,13 @@
66
7[catalog]7[catalog]
8driver = keystone.catalog.backends.templated.TemplatedCatalog8driver = keystone.catalog.backends.templated.TemplatedCatalog
9template_file = %CUR_DIR%/etc/default_catalog.templates9template_file = default_catalog.templates
1010
11[sql]11[sql]
12connection = sqlite:////%CUR_DIR%/debian/tests/testing.db12connection = sqlite:////%CUR_DIR%/debian/tests/testing.db
13idle_timeout = 20013idle_timeout = 200
1414
15[signing]
16certfile = signing/signing_cert.pem
17keyfile = signing/private_key.pem
18ca_certs = signing/cacert.pem
1519
=== modified file 'doc/source/community.rst'
--- doc/source/community.rst 2012-03-09 12:26:12 +0000
+++ doc/source/community.rst 2012-11-26 19:58:28 +0000
@@ -56,7 +56,7 @@
5656
57`OpenStack Wiki <http://wiki.openstack.org/>`_57`OpenStack Wiki <http://wiki.openstack.org/>`_
5858
59* `useful keystone project links <http://wiki.openstack.org/keystone>`_
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches