Just because Icehouse is EOL does not mean no one is running it. One part of my job is back-porting patches to older versions of Keystone that my Company supports.
A dirty secret is that we only package the code needed for the live deployment, though, not the unit tests. In the case of I need to test a bug fix against a version of Keystone that was, essentially, Upstream Icehouse.
Running the unit tests with Tox had some problems, mainly due to recent oslo components not being being compatible that far back.
Here is what I did:
- Cloned the keystone repo
- applied the patch to test
- ran tox -r -epy27 to generate the virtual environment. Note that the tests fail.
- . .tox/py27/bin/activate
- python -m unittest keystone.tests.test_v3_identity.IdentityTestCase
- see that test fails due to:
- AttributeError: ‘module’ object has no attribute ‘tests’
- run python to get an interactive interpreter
- import keystone.tests.test_v3_identity
- Get the error below:
ImportError: No module named utils >>> import oslo-utils File "<stdin>", line 1 import oslo-utils
To deal with this:
- Clone the oslo-utils repo
- git clone https://git.openstack.org/openstack/oslo.utils
- checkout out the tag that is closest to what I think we need. A little trial and error showed I wanted kilo-eol
- git checkout kilo-eol
- Build and install in the venv (note that the venv is still activated)
- cd oslo.utils/
- python setup.py install
Try running the tests again. Similar process shows that something is mismatched with oslo.serialization. Clone, checkout, and build, this time the tag is also kilo-eol.
Running the unit test runs and shows:
Traceback (most recent call last): File "keystone/tests/test_v3_identity.py", line 835, in test_delete_user_and_check_role_assignment_fails member_url, user = self._create_new_user_and_assign_role_on_project() File "keystone/tests/test_v3_identity.py", line 807, in _create_new_user_and_assign_role_on_project user_ref = self.identity_api.create_user(new_user) File "keystone/notifications.py", line 74, in wrapper result = f(*args, **kwargs) File "keystone/identity/core.py", line 189, in wrapper return f(self, *args, **kwargs) TypeError: create_user() takes exactly 3 arguments (2 given)
Other unit tests run successfully. I’m back in business.