If you change the public signature of an API, or add a new API in Keystone, there is a good chance the Tests that confirm JSON home layout will break. And that test is fairly unfriendly: It compares a JSON doc with another JSON doc, and spews out the entirety of both JSON docs, without telling you which section breaks. Here is how I deal with it:
First, run the test in a manner that you can do some qyerying. I did this:
tox -e py27 -- keystone.tests.unit.test_versions.VersionTestCase.test_json_home_v3 2>&1 | less
That lets me search through the output dynamically. It runs only the one test.
Here is the change I made to the keystone/assignment/routers.py file:
routers.append( router.Router(controllers.AccessV3(), 'url_patterns', 'url_pattern', resource_descriptions=self.v3_resources))
If I run the test and search through the output for the value url_pattern I see that this section is new:
u'http://docs.openstack.org/api/openstack-identity/3/rel/url_pattern': {u'href-template': u'/url_patterns/{url_pattern_id}', u'href-vars': {u'url_pattern_id': u'http://docs.openstack.org/api/openstack-identity/3/param/url_pattern_id'}}, u'http://docs.openstack.org/api/openstack-identity/3/rel/url_patterns': {u'href': u'/url_patterns'},
Sorry for the formatting:Â it is really long lines in the output.
To start, I modify the test_versions.py file to add something that I think will be comparable:
json_home.build_v3_resource_relation('url_pattern'): { 'href-template': '/url_pattern/{url_pattern_id}', 'href-vars': { 'url_pattern_id': json_home.Parameters.URL_PATTERN_ID},
Rerunning the test, I now see that it matches earlier:Â this is in the expected output:
'http://docs.openstack.org/api/openstack-identity/3/rel/url_pattern': {'hints': {'status': 'experimental'}, 'href-template': '/url_patterns/{url_pattern_id}', 'href-vars': {'url_pattern_id': 'http://docs.openstack.org/api/openstack-identity/3/param/pattern_id'}},
Which looks good, but I need the second line, with url_patterns. So I add:
json_home.build_v3_resource_relation('url_patterns'): { 'href': '/url_patterns'},
Note that it is href, and not href-template.