Documents keystone v3 API usage - part 1

docs/source/using-api.rst documents how to use the V2 API. This patch
starts the equivalent documentation (using-api-v3.rst) about how to
use Keystone v3 API. Introduction and Authentication sections have
been written.

Change-Id: I5a2d45d80ba712492717a75ac5901f5ca775daa4
Partial-Bug: #1260527
Debug env for tox

Running a test with pdb was difficult because testr captures
output and causes pdb prompt to quit.

Tips for how to run testr with debug are provided here:
  https://wiki.openstack.org/wiki/Testr#Debugging_.28pdb.29_Tests

This change puts these commands into a debug env in tox.ini so
you can do a command like

 tox -e debug test_auth_token_middleware

or, for more granularity:
 tox -e debug keystone.tests.test_sql_migrate_extensions.EndpointFilterExtension
 tox -e debug keystone.tests.test_sql_migrate_extensions.EndpointFilterExtension.test_downgrade

and when it hits your breakpoint you'll get the debug prompt.

This same change was made to keystone in commit c8302509 .

Change-Id: I2b5dc81f4652dc89ecbcc7c785245a81cf77a1ca
Verify token binding in auth_token middleware

The server side has had token bind checking implemented for a while. Now
that it is possible to generate bound tokens auth_token middleware
should be capable of verifying them.

Change-Id: I4f9c5855ab3102333b0738864c506e2501bf9c7e
Sync strutils from oslo

Sync strutils from oslo which fix safe_encode under py3, this gets
keystone CLI to properly output results.

84d461 Fix a bug in safe_encode where it returns a bytes object in py3

Closes-Bug: 1260824
Change-Id: Idf0f3a51f5cfe3077395b53da66a12955449861f
Revert "Whitelist external netaddr requirement"

This reverts commit 01dc81aa148adaa127281f197047636cf2d2c898.

The netaddr package is now hosted on PyPI, so this workaround is
not needed anymore.

Change-Id: I76957aa5e276036921696f27e18efb5494b33120
Closes-Bug: #1266513
Controllable redirect handling

The requests library handles redirects as a browser would, which has the problem
that forwarding a POST will convert it to a GET. This is not necessarily
intuitive for an API. Handle all redirection manually and provide some
control over how far redirection can go.

Closes-Bug: 1267286
Change-Id: I24596a9c39cc29db28a66c3053ef3954b33abf90
Removes use of timeutils.set_time_override

The set_time_override function in timeutils was written as a
helper function to mock utcnow for unittests before 'mock' was
generally used. Now that we have mock and fixture, we no longer
need to use it.

Partial-Bug: #1266962

Change-Id: I56935911a08ccd9847419eb118af2d2c9dd6c1cd
Use install_venv from oslo to fix no post_process issue

In a recent oslo sync commit Ieb73d5f799423fa8abf71634c86601ba6d32df2f
post_process() has been removed from tools/install_venv_common.py, which
is still called in tools/install_venv.py

Further investigation shows install_venv.py has some legacy distro
specific code, which should be removed at the time introducing
install_venv_common from oslo.

This change switch tools/install_venv.py to use oslo code to align the
effort as well as fixing original no 'post_process' issue.

Changes being pulled into in install_venv are:
12bcdb7 - 2013-11-25 12:16:11 +0800 - Remove vim header
b5cca99 - 2013-10-09 21:34:00 +0100 - Remove obsolete
redhat-eventlet.patch
9378d3c - 2013-08-13 18:06:11 +0300 - Move `./run_tests.sh` to Oslo

Note: openstack-common.conf is not updated, because the project name
variable in install_venv has to be modified after syncing from oslo.
That makes it not an exact sync but modification after sync. Besides
other openstack projects using install_venv from oslo also don't change
openstack-common.conf. So this patch simply follow the common practice
here.

Change-Id: I78a7563fbbde70cfd98cf1bd7a5a4eec5370d31d
Closes-Bug: #1263940
Python 3: Use HTTPMessage.get() rather than HTTPMessage.getheader()

In Python 2, get() is a synonym for getheader(), which does not exist in Python
3.

Closes-Bug: #1267987
Change-Id: I6989a6ea733e0a186e9e68a61aaa8c3e43a198a6
Merge "Controllable redirect handling"
Merge "Documents keystone v3 API usage - part 1"
Merge "Sync strutils from oslo"
Merge "Revert "Whitelist external netaddr requirement""
Merge "Python 3: Use HTTPMessage.get() rather than HTTPMessage.getheader()"
Merge "Use install_venv from oslo to fix no post_process issue"
Updated from global requirements

Change-Id: Ia662a33f3615611c380ff5862f74f18ea459bf8e
auth_token tests use assertIs/Not/None

The tests in test_auth_token_middleware were using
assertEqual(res, None) and assertNotEqual(res, None) when they
should use assertIsNone and assertIsNotNone.

Change-Id: Ib1601b3a6101f843d9c29f3cd00aab339e671e61
Merge "Removes use of timeutils.set_time_override"
Merge "auth_token tests use assertIs/Not/None"
Make assertQueryStringIs usage simpler

As requested in https://review.openstack.org/#/c/65728/, this "fixes"
assertQueryStringIs so it takes a query string, rather than a dict
of lists, which is a less convenient format in many tests.

Change-Id: Ib4c49ba71f7e12bb5bcb4dfde77974f3418c7854