)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"20d19296ac02b4a771d61139ba9e571a2d1dc02f","unresolved":false,"context_lines":[{"line_number":27,"context_line":" +--------------------+--------------------------------------------------+"},{"line_number":28,"context_line":" | \u00272.2\u0027,    \u00272.3\u0027    | A(\u00272.2\u0027), B(\u00272.2\u0027), C(\u00272.3\u0027)                     |"},{"line_number":29,"context_line":" +--------------------+--------------------------------------------------+"},{"line_number":30,"context_line":" | \u00272.10\u0027,   \u00272.10\u0027   | A(\u00272.10\u0027), C(\u00272.10\u0027), D(\u00272.10\u0027)                  |"},{"line_number":31,"context_line":" +--------------------+--------------------------------------------------+"},{"line_number":32,"context_line":" | None,     \u0027latest\u0027 | A(Not passed), B(Not passed), C(\u00272.3\u0027), D(\u00272.5\u0027) |"},{"line_number":33,"context_line":" +--------------------+--------------------------------------------------+"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa80f949_f1606203","line":30,"updated":"2015-11-06 02:07:32.000000000","message":"Maybe we should say B skipped here too.","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"578ebe29bfa19cad07cf73d1f4dba7058a46e0b8","unresolved":false,"context_lines":[{"line_number":27,"context_line":" +--------------------+--------------------------------------------------+"},{"line_number":28,"context_line":" | \u00272.2\u0027,    \u00272.3\u0027    | A(\u00272.2\u0027), B(\u00272.2\u0027), C(\u00272.3\u0027)                     |"},{"line_number":29,"context_line":" +--------------------+--------------------------------------------------+"},{"line_number":30,"context_line":" | \u00272.10\u0027,   \u00272.10\u0027   | A(\u00272.10\u0027), C(\u00272.10\u0027), D(\u00272.10\u0027)                  |"},{"line_number":31,"context_line":" +--------------------+--------------------------------------------------+"},{"line_number":32,"context_line":" | None,     \u0027latest\u0027 | A(Not passed), B(Not passed), C(\u00272.3\u0027), D(\u00272.5\u0027) |"},{"line_number":33,"context_line":" +--------------------+--------------------------------------------------+"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_58cdbe64","line":30,"in_reply_to":"fa80f949_f1606203","updated":"2015-11-11 07:11:41.000000000","message":"Done","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"7925df2726c0fcd3e2e6bfff543b99219d8657ff","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":19,"context_line":"  | Configration       | Test classes                                        |"},{"line_number":20,"context_line":"  | (min,    max)      | (Passed microversion)                               |"},{"line_number":21,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":22,"context_line":"  | None,     None     | A(Not passed), B(Not passed), C \u0026 D - Skipped       |"},{"line_number":23,"context_line":"  +--------------------+-----------------------------------------------------+"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9a8ffd7b_4facdb9e","line":20,"updated":"2015-12-03 14:14:56.000000000","message":"I don\u0027t get the \"passed micro version\" part.\n\nI see the logic in the patch to define the range of accepted micro versions in the config, and the range of micro versions valid for a test. So a test will be skipped if the two ranges do not match.\n\nHowever I do not see in this patch the logic to select which version the test will use when making API requests (passed micro versions in my understanding).\n\nIf the ranges configured and acceptable overlap on several versions, what is the logic to select which one is used, and where is that implemented?","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"df8da5886c1aa2266db565b04c1716d9f393863a","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":19,"context_line":"  | Configration       | Test classes                                        |"},{"line_number":20,"context_line":"  | (min,    max)      | (Passed microversion)                               |"},{"line_number":21,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":22,"context_line":"  | None,     None     | A(Not passed), B(Not passed), C \u0026 D - Skipped       |"},{"line_number":23,"context_line":"  +--------------------+-----------------------------------------------------+"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7a740942_37c72114","line":20,"in_reply_to":"7a740942_a2af667c","updated":"2015-12-03 23:46:41.000000000","message":"Yea, right. it is max(CONF.min, test.min) https://review.openstack.org/#/c/244439/","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fa4656ba78b51b43d3fc4fb33ff37a60e82bb7f3","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":19,"context_line":"  | Configration       | Test classes                                        |"},{"line_number":20,"context_line":"  | (min,    max)      | (Passed microversion)                               |"},{"line_number":21,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":22,"context_line":"  | None,     None     | A(Not passed), B(Not passed), C \u0026 D - Skipped       |"},{"line_number":23,"context_line":"  +--------------------+-----------------------------------------------------+"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7a740942_a2af667c","line":20,"in_reply_to":"9a8ffd7b_4facdb9e","updated":"2015-12-03 15:53:13.000000000","message":"IIRC, the actual logic to pass the microversion header is further down the stack. The version sent should be the max(CONF.min, test.min)","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"7925df2726c0fcd3e2e6bfff543b99219d8657ff","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":32,"context_line":"  | None,     \u0027latest\u0027 | A(Not passed), B(Not passed), C(\u00272.3\u0027), D(\u00272.5\u0027)    |"},{"line_number":33,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":34,"context_line":"  | \u0027latest\u0027, \u0027latest\u0027 | A(\u0027latest\u0027), B - Skipped, C(\u0027latest\u0027), D - Skipped  |"},{"line_number":35,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"After this patch, we need to add tests for each microversion and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9a8ffd7b_2f97173b","line":34,"updated":"2015-12-03 14:14:56.000000000","message":"How do we know what latest is? Is there a way in the API to tell \"I want to use the latest\" without knowing what the latest number is?","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"df8da5886c1aa2266db565b04c1716d9f393863a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":32,"context_line":"  | None,     \u0027latest\u0027 | A(Not passed), B(Not passed), C(\u00272.3\u0027), D(\u00272.5\u0027)    |"},{"line_number":33,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":34,"context_line":"  | \u0027latest\u0027, \u0027latest\u0027 | A(\u0027latest\u0027), B - Skipped, C(\u0027latest\u0027), D - Skipped  |"},{"line_number":35,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"After this patch, we need to add tests for each microversion and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7a740942_37ee418c","line":34,"in_reply_to":"7a740942_42aa4272","updated":"2015-12-03 23:46:41.000000000","message":"Yea, it is not any number its by sending \u0027latest\u0027 keyword as microversion.","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fa4656ba78b51b43d3fc4fb33ff37a60e82bb7f3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":32,"context_line":"  | None,     \u0027latest\u0027 | A(Not passed), B(Not passed), C(\u00272.3\u0027), D(\u00272.5\u0027)    |"},{"line_number":33,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":34,"context_line":"  | \u0027latest\u0027, \u0027latest\u0027 | A(\u0027latest\u0027), B - Skipped, C(\u0027latest\u0027), D - Skipped  |"},{"line_number":35,"context_line":"  +--------------------+-----------------------------------------------------+"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"After this patch, we need to add tests for each microversion and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7a740942_42aa4272","line":34,"in_reply_to":"9a8ffd7b_2f97173b","updated":"2015-12-03 15:53:13.000000000","message":"Latest is part of the nova api","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"}],"tempest/api/compute/base.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"20d19296ac02b4a771d61139ba9e571a2d1dc02f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    # NOTE: Basically, each microversion is small API change and we"},{"line_number":37,"context_line":"    # can use the same tests for most microversions in most cases."},{"line_number":38,"context_line":"    # So it is nice to define the base test class as possible to run"},{"line_number":39,"context_line":"    # for all microversions. We need to encap max_microversion on each"},{"line_number":40,"context_line":"    # test class if necessary."},{"line_number":41,"context_line":"    min_microversion \u003d None"},{"line_number":42,"context_line":"    max_microversion \u003d \u0027latest\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa80f949_71beb266","line":39,"updated":"2015-11-06 02:07:32.000000000","message":"Is encap a word? It sounds like an abbreviation for encapsulate, which I don\u0027t think works here.","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"578ebe29bfa19cad07cf73d1f4dba7058a46e0b8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    # NOTE: Basically, each microversion is small API change and we"},{"line_number":37,"context_line":"    # can use the same tests for most microversions in most cases."},{"line_number":38,"context_line":"    # So it is nice to define the base test class as possible to run"},{"line_number":39,"context_line":"    # for all microversions. We need to encap max_microversion on each"},{"line_number":40,"context_line":"    # test class if necessary."},{"line_number":41,"context_line":"    min_microversion \u003d None"},{"line_number":42,"context_line":"    max_microversion \u003d \u0027latest\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_18c3b639","line":39,"in_reply_to":"fa80f949_71beb266","updated":"2015-11-11 07:11:41.000000000","message":"Doen","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9b5c0cecebc7be92f8d4d73c45758d2f455acba0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    # for all microversions. We need to encap max_microversion on each"},{"line_number":40,"context_line":"    # test class if necessary."},{"line_number":41,"context_line":"    min_microversion \u003d None"},{"line_number":42,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    force_tenant_isolation \u003d False"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa80f949_bcfab141","line":42,"updated":"2015-11-06 02:53:43.000000000","message":"We should have logic to validate the cfg version range also against project supported version range.\n\nBut that can be part of config validation script part?","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"578ebe29bfa19cad07cf73d1f4dba7058a46e0b8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    # for all microversions. We need to encap max_microversion on each"},{"line_number":40,"context_line":"    # test class if necessary."},{"line_number":41,"context_line":"    min_microversion \u003d None"},{"line_number":42,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    force_tenant_isolation \u003d False"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_f8e4b2e1","line":42,"in_reply_to":"fa80f949_bcfab141","updated":"2015-11-11 07:11:41.000000000","message":"validation against project supported version might be difficult so verifying if min is greater than max","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9b5c0cecebc7be92f8d4d73c45758d2f455acba0","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            ip_or_server \u003d server"},{"line_number":360,"context_line":"        return ip_or_server"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def check_skip_with_microversion(cls):"},{"line_number":363,"context_line":"        class_min_version \u003d api_version_request.APIVersionRequest("},{"line_number":364,"context_line":"            cls.min_microversion)"},{"line_number":365,"context_line":"        class_max_version \u003d api_version_request.APIVersionRequest("}],"source_content_type":"text/x-python","patch_set":1,"id":"fa80f949_7c60c9a5","line":362,"updated":"2015-11-06 02:53:43.000000000","message":"How about this function too in api_version_request.py to be consumable for other project tests.","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"578ebe29bfa19cad07cf73d1f4dba7058a46e0b8","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            ip_or_server \u003d server"},{"line_number":360,"context_line":"        return ip_or_server"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def check_skip_with_microversion(cls):"},{"line_number":363,"context_line":"        class_min_version \u003d api_version_request.APIVersionRequest("},{"line_number":364,"context_line":"            cls.min_microversion)"},{"line_number":365,"context_line":"        class_max_version \u003d api_version_request.APIVersionRequest("}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_b8eaaaaa","line":362,"in_reply_to":"fa80f949_7c60c9a5","updated":"2015-11-11 07:11:41.000000000","message":"Moved to test.py","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9b5c0cecebc7be92f8d4d73c45758d2f455acba0","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            return"},{"line_number":381,"context_line":"        if (class_max_version \u003c\u003d cfg_max_version and"},{"line_number":382,"context_line":"            cfg_min_version \u003c\u003d class_max_version):"},{"line_number":383,"context_line":"            return"},{"line_number":384,"context_line":"        raise cls.skipException(\"The microversion range[%s - %s] of this test \""},{"line_number":385,"context_line":"                                \"is out of the configration range[%s - %s].\","},{"line_number":386,"context_line":"                                % (class_min_version.get_string(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa80f949_3ca9e190","line":383,"updated":"2015-11-06 02:53:43.000000000","message":"1 case is missed here where cfg version range falls in class version range.\n class_min \u003c cfg_min \u0026\u0026 cfg_max \u003c class_max\n\nThis case-\n\n TestClass C: min_microversion \u003d \u00272.3\u0027, max_microversion \u003d \u0027latest\u0027 \n  | Configration       | Test classes                                     |\n  | (min,    max)      | (Passed microversion)   \n  | \u00272.10\u0027,   \u00272.10\u0027      | C(\u00272.10\u0027)","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"578ebe29bfa19cad07cf73d1f4dba7058a46e0b8","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            return"},{"line_number":381,"context_line":"        if (class_max_version \u003c\u003d cfg_max_version and"},{"line_number":382,"context_line":"            cfg_min_version \u003c\u003d class_max_version):"},{"line_number":383,"context_line":"            return"},{"line_number":384,"context_line":"        raise cls.skipException(\"The microversion range[%s - %s] of this test \""},{"line_number":385,"context_line":"                                \"is out of the configration range[%s - %s].\","},{"line_number":386,"context_line":"                                % (class_min_version.get_string(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_78d1a2f9","line":383,"in_reply_to":"fa80f949_3ca9e190","updated":"2015-11-11 07:11:41.000000000","message":"Done in test.py","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"af51c99ac3b141efe8aac3b168ec13ba6393f74a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    # for all microversions. We need to define microversion range"},{"line_number":40,"context_line":"    # (min_microversion, max_microversion) on each test class if necessary."},{"line_number":41,"context_line":"    min_microversion \u003d None"},{"line_number":42,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    force_tenant_isolation \u003d False"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_7e5c017d","line":42,"updated":"2015-11-19 11:43:13.000000000","message":"This feels like it should come in as a mixin or decorator, because we\u0027re going to need this code again for Ironic and Cinder.","commit_id":"f2a438c22efe75282341de98a7b80a102535c381"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ff31ce9e33cd790699d949954f587f32862933e3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    # for all microversions. We need to define microversion range"},{"line_number":40,"context_line":"    # (min_microversion, max_microversion) on each test class if necessary."},{"line_number":41,"context_line":"    min_microversion \u003d None"},{"line_number":42,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    force_tenant_isolation \u003d False"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_a1024c08","line":42,"in_reply_to":"ba8a016a_7e5c017d","updated":"2015-11-19 11:47:24.000000000","message":"That means we need to implement BaseTestCase class for microversion testing, right?\n\nI am imaging\n\n class BaseMicroversionsTest(tempest.test.BaseTestCase):\n     min_microversion \u003d None\n     max_microversion \u003d \u0027latest\u0027\n\n class BaseV2ComputeTest(tempest.test.BaseMicroversionsTest):\n     \"\"\"Base test case class for all Compute API tests.\"\"\"\n     [..]","commit_id":"f2a438c22efe75282341de98a7b80a102535c381"}],"tempest/common/api_version_request.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"20d19296ac02b4a771d61139ba9e571a2d1dc02f","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import re"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova import exception"},{"line_number":18,"context_line":"from nova.i18n import _"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Define the minimum and maximum version of the API across all of the"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa80f949_71f0f267","line":17,"updated":"2015-11-06 02:07:32.000000000","message":"Uhm, don\u0027t think this is right...","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"578ebe29bfa19cad07cf73d1f4dba7058a46e0b8","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import re"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova import exception"},{"line_number":18,"context_line":"from nova.i18n import _"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Define the minimum and maximum version of the API across all of the"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_38d79aee","line":17,"in_reply_to":"da85f559_028ad4bf","updated":"2015-11-11 07:11:41.000000000","message":"Done","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1b9c35408f66bbbf995cc6a001229f58571c49fe","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import re"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova import exception"},{"line_number":18,"context_line":"from nova.i18n import _"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Define the minimum and maximum version of the API across all of the"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_028ad4bf","line":17,"in_reply_to":"fa80f949_71f0f267","updated":"2015-11-09 09:41:09.000000000","message":"Oops, right","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"4f99e2a15634daf132dd8adbca2c30199588b85d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        if self.is_null():"},{"line_number":141,"context_line":"            raise ValueError"},{"line_number":142,"context_line":"        if (self.ver_major \u003d\u003d latest_ver_major and"},{"line_number":143,"context_line":"            self.ver_minor \u003d latest_ver_minor):"},{"line_number":144,"context_line":"            return \u0027latest\u0027"},{"line_number":145,"context_line":"        return \"%s.%s\" % (self.ver_major, self.ver_minor)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_02de546d","line":143,"updated":"2015-11-09 09:36:01.000000000","message":"\u003d ?","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"578ebe29bfa19cad07cf73d1f4dba7058a46e0b8","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        if self.is_null():"},{"line_number":141,"context_line":"            raise ValueError"},{"line_number":142,"context_line":"        if (self.ver_major \u003d\u003d latest_ver_major and"},{"line_number":143,"context_line":"            self.ver_minor \u003d latest_ver_minor):"},{"line_number":144,"context_line":"            return \u0027latest\u0027"},{"line_number":145,"context_line":"        return \"%s.%s\" % (self.ver_major, self.ver_minor)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_f80b528c","line":143,"in_reply_to":"da85f559_02de546d","updated":"2015-11-11 07:11:41.000000000","message":"Done","commit_id":"840519e5745965ca78fca854873dc3ed042afd2c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"17938be78e3a34d18492ebb1d144b08dee12c92d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # NOTE: This \u0027latest\u0027 version is a magic number, we assume any"},{"line_number":43,"context_line":"    # projects(Nova, etc.) never achieve this number."},{"line_number":44,"context_line":"    latest_ver_major \u003d 99999"},{"line_number":45,"context_line":"    latest_ver_minor \u003d 99999"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, version_string\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Create an API version request object."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_be3d8990","line":45,"updated":"2015-11-19 11:38:48.000000000","message":"I\u0027m not sure why we need a magic set of strings here.","commit_id":"f2a438c22efe75282341de98a7b80a102535c381"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a5094da6a9dd604c068728bd1fe60a9afd04f334","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # NOTE: This \u0027latest\u0027 version is a magic number, we assume any"},{"line_number":43,"context_line":"    # projects(Nova, etc.) never achieve this number."},{"line_number":44,"context_line":"    latest_ver_major \u003d 99999"},{"line_number":45,"context_line":"    latest_ver_minor \u003d 99999"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, version_string\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Create an API version request object."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_9eca051a","line":45,"in_reply_to":"ba8a016a_be3d8990","updated":"2015-11-19 11:43:27.000000000","message":"because we need to convert between string \"latest\" to the combination of X and Y. (X and Y should be actual integers on this base part)","commit_id":"f2a438c22efe75282341de98a7b80a102535c381"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfe9ce3aca428d987d532ee2c799399b570325e6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                self.ver_major \u003d self.latest_ver_major"},{"line_number":68,"context_line":"                self.ver_minor \u003d self.latest_ver_minor"},{"line_number":69,"context_line":"            else:"},{"line_number":70,"context_line":"                raise exceptions.InvalidAPIVersionString("},{"line_number":71,"context_line":"                    version\u003dversion_string)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def __str__(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_13a3ac9e","line":70,"updated":"2015-11-26 10:57:00.000000000","message":"I think you should do this in oslo.config now (once it also accepts latest):\nhttp://docs.openstack.org/developer/oslo.config/opts.html#oslo_config.cfg.StrOpt","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a5a2bd5a731ce4a77d2b01c52e3c659b0326f363","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                self.ver_major \u003d self.latest_ver_major"},{"line_number":68,"context_line":"                self.ver_minor \u003d self.latest_ver_minor"},{"line_number":69,"context_line":"            else:"},{"line_number":70,"context_line":"                raise exceptions.InvalidAPIVersionString("},{"line_number":71,"context_line":"                    version\u003dversion_string)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def __str__(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_44a5cb44","line":70,"in_reply_to":"9a8ffd7b_13a3ac9e","updated":"2015-11-27 08:29:31.000000000","message":"Yea that can be done in oslo if they support all operation and latest etc. ( I think currently they do not have all operation which needed here like matches, __le_ etc right?)\nEven this file can be moved to oslo once that is much stable.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"7925df2726c0fcd3e2e6bfff543b99219d8657ff","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.ver_minor \u003d 0"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        if version_string is not None:"},{"line_number":61,"context_line":"            match \u003d re.match(r\"^([1-9]\\d*)\\.([1-9]\\d*|0)$\","},{"line_number":62,"context_line":"                             version_string)"},{"line_number":63,"context_line":"            if match:"},{"line_number":64,"context_line":"                self.ver_major \u003d int(match.group(1))"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_457a9389","line":61,"range":{"start_line":61,"start_character":31,"end_line":61,"end_character":57},"updated":"2015-12-03 14:14:56.000000000","message":"Nice regex","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"7925df2726c0fcd3e2e6bfff543b99219d8657ff","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def __ge__(self, other):"},{"line_number":112,"context_line":"        return self \u003e other or self \u003d\u003d other"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def matches(self, min_version, max_version):"},{"line_number":115,"context_line":"        \"\"\"Matches the version object."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        Returns whether the version object represents a version"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_85f63b5b","line":114,"updated":"2015-12-03 14:14:56.000000000","message":"I would have called this \"between\"","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"}],"tempest/common/api_version_utils.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfe9ce3aca428d987d532ee2c799399b570325e6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    # ...don\u0027t-select|"},{"line_number":53,"context_line":"    #            ...select...  ...select...  ...select..."},{"line_number":54,"context_line":"    #                                             |don\u0027t-select..."},{"line_number":55,"context_line":"    # ......................select............................"},{"line_number":56,"context_line":"    if (config_min_version \u003c\u003d min_version and"},{"line_number":57,"context_line":"        min_version \u003c\u003d config_max_version):"},{"line_number":58,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_73d2385e","line":55,"updated":"2015-11-26 10:57:00.000000000","message":"I love this.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfe9ce3aca428d987d532ee2c799399b570325e6","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    if (min_version \u003c\u003d config_min_version and"},{"line_number":63,"context_line":"        config_max_version \u003c\u003d max_version):"},{"line_number":64,"context_line":"        return"},{"line_number":65,"context_line":"    msg \u003d (\"The microversion range[%s - %s] of this test is out of the \""},{"line_number":66,"context_line":"           \"configration range[%s - %s].\""},{"line_number":67,"context_line":"           % (min_version.get_string(),"},{"line_number":68,"context_line":"              max_version.get_string(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_488663dc","line":65,"updated":"2015-11-26 10:57:00.000000000","message":"Nit: I think the above is correct, but I think the reverse logic is actually easier, just check for the skips:\n* max_version \u003c config_min_version: raise skip\n* min_version \u003e config_max_version: raise skip\notherwise its all good, I think.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a5a2bd5a731ce4a77d2b01c52e3c659b0326f363","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    if (min_version \u003c\u003d config_min_version and"},{"line_number":63,"context_line":"        config_max_version \u003c\u003d max_version):"},{"line_number":64,"context_line":"        return"},{"line_number":65,"context_line":"    msg \u003d (\"The microversion range[%s - %s] of this test is out of the \""},{"line_number":66,"context_line":"           \"configration range[%s - %s].\""},{"line_number":67,"context_line":"           % (min_version.get_string(),"},{"line_number":68,"context_line":"              max_version.get_string(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_046a63ee","line":65,"in_reply_to":"9a8ffd7b_488663dc","updated":"2015-11-27 08:29:31.000000000","message":"Nice idea. That\u0027s much better. Done","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"7925df2726c0fcd3e2e6bfff543b99219d8657ff","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                  max_version.get_string(),"},{"line_number":45,"context_line":"                  config_min_version.get_string(),"},{"line_number":46,"context_line":"                  config_max_version.get_string()))"},{"line_number":47,"context_line":"        raise exceptions.InvalidConfiguration(msg)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # NOTE: Select tests which are in range of configuration like"},{"line_number":50,"context_line":"    #               config min           config max"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_40536117","line":47,"updated":"2015-12-03 14:14:56.000000000","message":"If we ever plan to move this to tempest-lib, InvalidConfiguration here, and the word config above will have to be replaced, but that\u0027s easily done.","commit_id":"4d237e72fe75f0d0a1e32fa2947e3b6875bf0d4e"}],"tempest/config.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfe9ce3aca428d987d532ee2c799399b570325e6","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                    \"If both values are None, Tempest avoids tests which \""},{"line_number":355,"context_line":"                    \"require a microversion.\"),"},{"line_number":356,"context_line":"    cfg.StrOpt(\u0027max_microversion\u0027,"},{"line_number":357,"context_line":"               default\u003dNone,"},{"line_number":358,"context_line":"               help\u003d\"Upper version of the test target microversion range. \""},{"line_number":359,"context_line":"                    \"The format is \u0027X.Y\u0027, where \u0027X\u0027 and \u0027Y\u0027 are int values. \""},{"line_number":360,"context_line":"                    \"Tempest selects tests based on the range between \""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_53b7f4f4","line":357,"updated":"2015-11-26 10:57:00.000000000","message":"I think I would like this to default to latest, but maybe thats crazy?\n\nI think if we have a decorator thats able to inspect the known supported version, and skip them, this would be possible. But probably best to do that as a later change.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a5a2bd5a731ce4a77d2b01c52e3c659b0326f363","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                    \"If both values are None, Tempest avoids tests which \""},{"line_number":355,"context_line":"                    \"require a microversion.\"),"},{"line_number":356,"context_line":"    cfg.StrOpt(\u0027max_microversion\u0027,"},{"line_number":357,"context_line":"               default\u003dNone,"},{"line_number":358,"context_line":"               help\u003d\"Upper version of the test target microversion range. \""},{"line_number":359,"context_line":"                    \"The format is \u0027X.Y\u0027, where \u0027X\u0027 and \u0027Y\u0027 are int values. \""},{"line_number":360,"context_line":"                    \"Tempest selects tests based on the range between \""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_876735e8","line":357,"in_reply_to":"9a8ffd7b_53b7f4f4","updated":"2015-11-27 08:29:31.000000000","message":"Ok. So in that case we do not need config variable right. we can dynamically detect the supported versions and use those to trigger the tests.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfe9ce3aca428d987d532ee2c799399b570325e6","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                    \"Tempest selects tests based on the range between \""},{"line_number":361,"context_line":"                    \"min_microversion and max_microversion. \""},{"line_number":362,"context_line":"                    \"If both values are None, Tempest avoids tests which \""},{"line_number":363,"context_line":"                    \"require a microversion.\"),"},{"line_number":364,"context_line":"    cfg.BoolOpt(\u0027disk_config\u0027,"},{"line_number":365,"context_line":"                default\u003dTrue,"},{"line_number":366,"context_line":"                help\u003d\"If false, skip disk config tests\"),"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_b3c66066","line":363,"updated":"2015-11-26 10:57:00.000000000","message":"You don\u0027t mention latest in here.\n\nI wonder if you should actually have a regex to validate the config, as oslo.config now supports?\nhttp://docs.openstack.org/developer/oslo.config/opts.html#oslo_config.cfg.StrOpt","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a5a2bd5a731ce4a77d2b01c52e3c659b0326f363","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                    \"Tempest selects tests based on the range between \""},{"line_number":361,"context_line":"                    \"min_microversion and max_microversion. \""},{"line_number":362,"context_line":"                    \"If both values are None, Tempest avoids tests which \""},{"line_number":363,"context_line":"                    \"require a microversion.\"),"},{"line_number":364,"context_line":"    cfg.BoolOpt(\u0027disk_config\u0027,"},{"line_number":365,"context_line":"                default\u003dTrue,"},{"line_number":366,"context_line":"                help\u003d\"If false, skip disk config tests\"),"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_47b4ed33","line":363,"in_reply_to":"9a8ffd7b_b3c66066","updated":"2015-11-27 08:29:31.000000000","message":"Currently it is done in api_version_request but we can do with oslo(if it support all needed operation) or move that file in oslo.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"}],"tempest/tests/common/test_api_version_request.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfe9ce3aca428d987d532ee2c799399b570325e6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        self.assertRaises(TypeError, vers1.__lt__, \"2.1\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_version_matches(self):"},{"line_number":101,"context_line":"        vers1 \u003d api_version_request.APIVersionRequest(\"2.0\")"},{"line_number":102,"context_line":"        vers2 \u003d api_version_request.APIVersionRequest(\"2.5\")"},{"line_number":103,"context_line":"        vers3 \u003d api_version_request.APIVersionRequest(\"2.45\")"},{"line_number":104,"context_line":"        vers4 \u003d api_version_request.APIVersionRequest(\"3.3\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_f3faa874","line":101,"updated":"2015-11-26 10:57:00.000000000","message":"Nit: v2_0 might be a better name here?","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a5a2bd5a731ce4a77d2b01c52e3c659b0326f363","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        self.assertRaises(TypeError, vers1.__lt__, \"2.1\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_version_matches(self):"},{"line_number":101,"context_line":"        vers1 \u003d api_version_request.APIVersionRequest(\"2.0\")"},{"line_number":102,"context_line":"        vers2 \u003d api_version_request.APIVersionRequest(\"2.5\")"},{"line_number":103,"context_line":"        vers3 \u003d api_version_request.APIVersionRequest(\"2.45\")"},{"line_number":104,"context_line":"        vers4 \u003d api_version_request.APIVersionRequest(\"3.3\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_b94cffc8","line":101,"in_reply_to":"9a8ffd7b_f3faa874","updated":"2015-11-27 08:29:31.000000000","message":"Done","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfe9ce3aca428d987d532ee2c799399b570325e6","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        v_null \u003d api_version_request.APIVersionRequest()"},{"line_number":110,"context_line":"        v_latest \u003d api_version_request.APIVersionRequest(\u0027latest\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self.assertTrue(vers2.matches(vers1, vers3))"},{"line_number":113,"context_line":"        self.assertTrue(vers2.matches(vers1, v_null))"},{"line_number":114,"context_line":"        self.assertTrue(vers1.matches(vers6, vers2))"},{"line_number":115,"context_line":"        self.assertTrue(vers4.matches(vers2, vers7))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_53ea94ad","line":112,"updated":"2015-11-26 10:57:00.000000000","message":"Nit: its nicer if we add comments into the assert.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a5a2bd5a731ce4a77d2b01c52e3c659b0326f363","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        v_null \u003d api_version_request.APIVersionRequest()"},{"line_number":110,"context_line":"        v_latest \u003d api_version_request.APIVersionRequest(\u0027latest\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self.assertTrue(vers2.matches(vers1, vers3))"},{"line_number":113,"context_line":"        self.assertTrue(vers2.matches(vers1, v_null))"},{"line_number":114,"context_line":"        self.assertTrue(vers1.matches(vers6, vers2))"},{"line_number":115,"context_line":"        self.assertTrue(vers4.matches(vers2, vers7))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_39cfaf2a","line":112,"in_reply_to":"9a8ffd7b_53ea94ad","updated":"2015-11-27 08:29:31.000000000","message":"Done.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"}],"tempest/tests/common/test_api_version_utils.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cfe9ce3aca428d987d532ee2c799399b570325e6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from tempest.tests import fake_config"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class VersionTestA(compute_base.BaseV2ComputeTest):"},{"line_number":27,"context_line":"    min_microversion \u003d None"},{"line_number":28,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_13264c15","line":26,"updated":"2015-11-26 10:57:00.000000000","message":"nit: I would prefer better names, like VersionTestLatest, VersionTestMax2_2, etc.\n\nIts hard to review TestMicroversionsTestsClass with these names.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a5a2bd5a731ce4a77d2b01c52e3c659b0326f363","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from tempest.tests import fake_config"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class VersionTestA(compute_base.BaseV2ComputeTest):"},{"line_number":27,"context_line":"    min_microversion \u003d None"},{"line_number":28,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_d9722311","line":26,"in_reply_to":"9a8ffd7b_13264c15","updated":"2015-11-27 08:29:31.000000000","message":"Done.","commit_id":"a63f79d923c8ee1e78be6f2376009e0362c89d10"}]}
