)]}'
{"tempest/api/compute/servers/test_server_locked.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"42b9612dd4e733ec431e001292535573082796a8","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @test.idempotent_id(\u0027535607cc-054f-11e6-b512-3e1d05defe78\u0027)"},{"line_number":60,"context_line":"    def test_server_show_unlock(self):"},{"line_number":61,"context_line":"        self.test_server_show_lock()"},{"line_number":62,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":63,"context_line":"        resp \u003d self.client.show_server(self.server_id)"},{"line_number":64,"context_line":"        self.assertEqual(False, resp[\u0027server\u0027][\u0027locked\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_7d99391f","line":61,"updated":"2016-04-22 11:37:49.000000000","message":"You shouldn\u0027t call a test from another test. \n\nAlso I am not sure what\u0027s the point of this test. How is it different from the others ?","commit_id":"55e0ca5a174abc4aa96640488f8074fb2432b2dd"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"42b9612dd4e733ec431e001292535573082796a8","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @test.idempotent_id(\u0027535608bc-054f-11e6-b512-3e1d05defe78\u0027)"},{"line_number":67,"context_line":"    def test_servers_detail_unlock(self):"},{"line_number":68,"context_line":"        self.test_servers_detail_lock()"},{"line_number":69,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":70,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":71,"context_line":"        self.assertEqual(False, resp[\u0027servers\u0027][0][\u0027locked\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_1d8925cb","line":68,"updated":"2016-04-22 11:37:49.000000000","message":"same","commit_id":"55e0ca5a174abc4aa96640488f8074fb2432b2dd"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"6869ffc5fc98c82e01a9efb82b1e35bc960fd323","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @test.idempotent_id(\u0027de668e86-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":58,"context_line":"    def test_server_show_unlocked_by_default(self):"},{"line_number":59,"context_line":"        resp \u003d self.client.show_server(self.server_id)"},{"line_number":60,"context_line":"        self.assertEqual(False, resp[\u0027server\u0027][\u0027locked\u0027])"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_36e6eae8","line":58,"updated":"2016-06-09 15:43:18.000000000","message":"I think this test name is misleading, you\u0027re not guaranteed a fresh server whem this is run. If you want to test by default this test should create a server and not rely on one shared between all the tests in the class","commit_id":"11ef633bd9efed1cf62d033ae42a28f09aba79e2"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"508f6b1cfc07cff7f4fb21cb135e250b176ed5be","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @test.idempotent_id(\u0027de668e86-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":58,"context_line":"    def test_server_show_unlocked_by_default(self):"},{"line_number":59,"context_line":"        resp \u003d self.client.show_server(self.server_id)"},{"line_number":60,"context_line":"        self.assertEqual(False, resp[\u0027server\u0027][\u0027locked\u0027])"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_c0204afa","line":58,"in_reply_to":"7aa08908_36e6eae8","updated":"2016-06-10 11:52:28.000000000","message":"you are right","commit_id":"11ef633bd9efed1cf62d033ae42a28f09aba79e2"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"6869ffc5fc98c82e01a9efb82b1e35bc960fd323","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertEqual(False, resp[\u0027server\u0027][\u0027locked\u0027])"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @test.idempotent_id(\u0027de669142-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":63,"context_line":"    def test_servers_detail_unlocked_by_default(self):"},{"line_number":64,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":65,"context_line":"        self.assertEqual(False, resp[\u0027servers\u0027][0][\u0027locked\u0027])"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_16ebeeb1","line":63,"updated":"2016-06-09 15:43:18.000000000","message":"Same here","commit_id":"11ef633bd9efed1cf62d033ae42a28f09aba79e2"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"508f6b1cfc07cff7f4fb21cb135e250b176ed5be","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.assertEqual(False, resp[\u0027server\u0027][\u0027locked\u0027])"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @test.idempotent_id(\u0027de669142-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":63,"context_line":"    def test_servers_detail_unlocked_by_default(self):"},{"line_number":64,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":65,"context_line":"        self.assertEqual(False, resp[\u0027servers\u0027][0][\u0027locked\u0027])"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_e07bc6f2","line":63,"in_reply_to":"7aa08908_16ebeeb1","updated":"2016-06-10 11:52:28.000000000","message":"Done","commit_id":"11ef633bd9efed1cf62d033ae42a28f09aba79e2"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"6869ffc5fc98c82e01a9efb82b1e35bc960fd323","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @test.idempotent_id(\u0027535604de-054f-11e6-b512-3e1d05defe78\u0027)"},{"line_number":74,"context_line":"    def test_servers_detail_lock(self):"},{"line_number":75,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":76,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":77,"context_line":"        self.assertEqual(True, resp[\u0027servers\u0027][0][\u0027locked\u0027])"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_76d072f8","line":75,"updated":"2016-06-09 15:43:18.000000000","message":"This should have an unlock to cleanup after itself. The test ordering inside a class isn\u0027t guaranteed and what would happen if test_server_show_unlocked_by_default ran right after this...","commit_id":"11ef633bd9efed1cf62d033ae42a28f09aba79e2"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"508f6b1cfc07cff7f4fb21cb135e250b176ed5be","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @test.idempotent_id(\u0027535604de-054f-11e6-b512-3e1d05defe78\u0027)"},{"line_number":74,"context_line":"    def test_servers_detail_lock(self):"},{"line_number":75,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":76,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":77,"context_line":"        self.assertEqual(True, resp[\u0027servers\u0027][0][\u0027locked\u0027])"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_20eb0e7a","line":75,"in_reply_to":"7aa08908_76d072f8","updated":"2016-06-10 11:52:28.000000000","message":"We unlock server before every test in SetUp() Line #34","commit_id":"11ef633bd9efed1cf62d033ae42a28f09aba79e2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0be519856bdd28703b95120807b970f994012eb3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest import test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ServerLockedTestJSON(base.BaseV2ComputeTest):"},{"line_number":22,"context_line":"    @classmethod"},{"line_number":23,"context_line":"    def setup_clients(cls):"},{"line_number":24,"context_line":"        super(ServerLockedTestJSON, cls).setup_clients()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_e38936cc","line":21,"range":{"start_line":21,"start_character":49,"end_line":21,"end_character":51},"updated":"2016-07-04 09:18:55.000000000","message":"we should cap this class tests with max version to avoid redundant run of tests.\n    max_microversion \u003d \u00272.8\u0027","commit_id":"e5df93f76f3ca0dd3cd6f2c171aeccf2df3d0478"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0be519856bdd28703b95120807b970f994012eb3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    min_microversion \u003d \u00272.9\u0027"},{"line_number":55,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _remove_server(self, uuid):"},{"line_number":58,"context_line":"        self.client.delete_server(uuid)"},{"line_number":59,"context_line":"        waiters.wait_for_server_termination(self.servers_client, uuid)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @test.idempotent_id(\u0027de668e86-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":62,"context_line":"    def test_server_show_unlocked_by_default(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_a3e8ce7d","line":59,"range":{"start_line":57,"start_character":0,"end_line":59,"end_character":70},"updated":"2016-07-04 09:18:55.000000000","message":"this is already handled in  create_test_server() but no harm to remove server explicitly.","commit_id":"e5df93f76f3ca0dd3cd6f2c171aeccf2df3d0478"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0be519856bdd28703b95120807b970f994012eb3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.client.delete_server(uuid)"},{"line_number":59,"context_line":"        waiters.wait_for_server_termination(self.servers_client, uuid)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @test.idempotent_id(\u0027de668e86-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":62,"context_line":"    def test_server_show_unlocked_by_default(self):"},{"line_number":63,"context_line":"        # To check the default value the server must be brand new"},{"line_number":64,"context_line":"        uuid \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)[\u0027id\u0027]"},{"line_number":65,"context_line":"        resp \u003d self.client.show_server(uuid)"},{"line_number":66,"context_line":"        self.assertEqual(False, resp[\u0027server\u0027][\u0027locked\u0027])"},{"line_number":67,"context_line":"        self._remove_server(uuid)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.idempotent_id(\u0027de669142-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":70,"context_line":"    def test_servers_detail_unlocked_by_default(self):"},{"line_number":71,"context_line":"        # To check the default value the server must be brand new"},{"line_number":72,"context_line":"        uuid \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)[\u0027id\u0027]"},{"line_number":73,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":74,"context_line":"        for server in resp[\u0027servers\u0027]:"},{"line_number":75,"context_line":"            if server[\u0027id\u0027] \u003d\u003d uuid:"},{"line_number":76,"context_line":"                self.assertEqual(False, server[\u0027locked\u0027])"},{"line_number":77,"context_line":"        self._remove_server(uuid)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @test.idempotent_id(\u002753560240-054f-11e6-b512-3e1d05defe78\u0027)"},{"line_number":80,"context_line":"    def test_server_show_lock(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_031e02ba","line":77,"range":{"start_line":61,"start_character":0,"end_line":77,"end_character":33},"updated":"2016-07-04 09:18:55.000000000","message":"we should merge these tests. It just testing the \"locked\" status in show and detail so no need to create 2 servers. How about below-\n\n     @test.idempotent_id(\u0027de668e86-0540-11e6-b512-3e1d05defe78\u0027)\n    def test_server_default_lock_status(self):\n        # To check the default lock status, the server must be brand new\n        uuid \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)[\u0027id\u0027]\n        resp \u003d self.client.show_server(uuid)\n        self.assertEqual(False, resp[\u0027server\u0027][\u0027locked\u0027])\n\n        resp \u003d self.client.list_servers(detail\u003dTrue)\n        for server in resp[\u0027servers\u0027]:\n            if server[\u0027id\u0027] \u003d\u003d uuid:\n                self.assertEqual(False, server[\u0027locked\u0027])\n                break\n        self._remove_server(uuid)","commit_id":"e5df93f76f3ca0dd3cd6f2c171aeccf2df3d0478"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0be519856bdd28703b95120807b970f994012eb3","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    def test_servers_detail_lock(self):"},{"line_number":87,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":88,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":89,"context_line":"        self.assertEqual(True, resp[\u0027servers\u0027][0][\u0027locked\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @test.idempotent_id(\u0027535607cc-054f-11e6-b512-3e1d05defe78\u0027)"},{"line_number":92,"context_line":"    def test_server_show_unlock(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_83d672c3","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":60},"updated":"2016-07-04 09:18:55.000000000","message":"this is not right. first element can be any other server too. use filter or iterate to the expected server","commit_id":"e5df93f76f3ca0dd3cd6f2c171aeccf2df3d0478"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0be519856bdd28703b95120807b970f994012eb3","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":101,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":102,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":103,"context_line":"        self.assertEqual(False, resp[\u0027servers\u0027][0][\u0027locked\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_2935ddd9","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":61},"updated":"2016-07-04 09:18:55.000000000","message":"ditto","commit_id":"e5df93f76f3ca0dd3cd6f2c171aeccf2df3d0478"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8ef6c477c55d85f612ffac21c6a8986d129ecb30","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ServerLockedTestJSON(base.BaseV2ComputeTest):"},{"line_number":22,"context_line":"    max_microversion \u003d \u00272.8\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @classmethod"},{"line_number":25,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_a425180a","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":28},"updated":"2016-07-06 00:15:27.000000000","message":"you can remove this now as inheriting ServerLockedTestJSONV29 from  BaseV2ComputeTest","commit_id":"ae7b1998abb81ff8d1cb331784e65982aba91eb2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"68185d2ba48b3d9b9010ab212ec1956b37f309f3","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ServerLockedTestJSON(base.BaseV2ComputeTest):"},{"line_number":22,"context_line":"    max_microversion \u003d \u00272.8\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @classmethod"},{"line_number":25,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_26a723ab","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":28},"in_reply_to":"1aa78d24_8ac1ec56","updated":"2016-07-07 06:51:14.000000000","message":"Yea that was valid for case we were inheriting new microversion tests class with this class. \n\nNow as per below comment, we do not need to do that so this cap is invalid.","commit_id":"ae7b1998abb81ff8d1cb331784e65982aba91eb2"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ea6f43a910f69a41f6c4a22eaa7ec0fd9781b0eb","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ServerLockedTestJSON(base.BaseV2ComputeTest):"},{"line_number":22,"context_line":"    max_microversion \u003d \u00272.8\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @classmethod"},{"line_number":25,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_8ac1ec56","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":28},"in_reply_to":"1aa78d24_a425180a","updated":"2016-07-06 12:15:50.000000000","message":"But in previous patchset you wrote: \n \n we should cap this class tests with max version to avoid redundant run of tests.\n    max_microversion \u003d \u00272.8\u0027","commit_id":"ae7b1998abb81ff8d1cb331784e65982aba91eb2"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"13e43d54f1048609876fb419c89bd1aeea497154","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @test.idempotent_id(\u002780a8094c-211e-440a-ab88-9e59d556c7ee\u0027)"},{"line_number":39,"context_line":"    def test_lock_unlock_server(self):"},{"line_number":40,"context_line":"        # Lock the server,try server stop(exceptions throw),unlock it and retry"},{"line_number":41,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":42,"context_line":"        self.addCleanup(self.client.unlock_server, self.server_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_5b226f01","line":39,"updated":"2016-07-05 13:39:46.000000000","message":"This test will be run twice because ServerLockedTestJSONV29 inherits from ServerLockedTestJSON. Is that what you really wants ?","commit_id":"ae7b1998abb81ff8d1cb331784e65982aba91eb2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"68185d2ba48b3d9b9010ab212ec1956b37f309f3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @test.idempotent_id(\u002780a8094c-211e-440a-ab88-9e59d556c7ee\u0027)"},{"line_number":39,"context_line":"    def test_lock_unlock_server(self):"},{"line_number":40,"context_line":"        # Lock the server,try server stop(exceptions throw),unlock it and retry"},{"line_number":41,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":42,"context_line":"        self.addCleanup(self.client.unlock_server, self.server_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_86a7f7bb","line":39,"in_reply_to":"1aa78d24_5b1cf469","updated":"2016-07-07 06:51:14.000000000","message":"Yea that\u0027s true but we need to go case by case here. If base class tests is something related to changes in that microversion then yes we should run those with new microversion also for regression. \n\nBut if there is no relation of tests and microversion change then it is not necessary. If we do we end up with running all common tests with all microversion which is not possible. \n\nSo in version 2.9 only change if \"locked\" field is being added in GET server details. and this tests does not test that so it make no sense to rerun this tests for 2.9\n\nFYI- we have configuration for microversion which makes users to run any tests for any microversion.","commit_id":"ae7b1998abb81ff8d1cb331784e65982aba91eb2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8ef6c477c55d85f612ffac21c6a8986d129ecb30","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @test.idempotent_id(\u002780a8094c-211e-440a-ab88-9e59d556c7ee\u0027)"},{"line_number":39,"context_line":"    def test_lock_unlock_server(self):"},{"line_number":40,"context_line":"        # Lock the server,try server stop(exceptions throw),unlock it and retry"},{"line_number":41,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":42,"context_line":"        self.addCleanup(self.client.unlock_server, self.server_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_647170a8","line":39,"in_reply_to":"1aa78d24_5b226f01","updated":"2016-07-06 00:15:27.000000000","message":"actually we have capped the ServerLockedTestJSON with max_microversion to avoid running these tests twice for same microversion. \n\nBut Jordan has nice point not to run this twice even for different microversion. I also feel same as there is no specific testing in this test for 2.9 microversion. \n\nLet\u0027s drive ServerLockedTestJSONV29 from base.BaseV2ComputeTest","commit_id":"ae7b1998abb81ff8d1cb331784e65982aba91eb2"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ea6f43a910f69a41f6c4a22eaa7ec0fd9781b0eb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @test.idempotent_id(\u002780a8094c-211e-440a-ab88-9e59d556c7ee\u0027)"},{"line_number":39,"context_line":"    def test_lock_unlock_server(self):"},{"line_number":40,"context_line":"        # Lock the server,try server stop(exceptions throw),unlock it and retry"},{"line_number":41,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":42,"context_line":"        self.addCleanup(self.client.unlock_server, self.server_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_5b1cf469","line":39,"in_reply_to":"1aa78d24_647170a8","updated":"2016-07-06 12:15:50.000000000","message":"I think we need to left it here because:\n\n1) what if new microverion (2.9) broke something? we will never know it because we tested just new functional in new microversion.\n\n2) we already do the same for microverions 2.2 and 2.20\n\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/keypairs/test_keypairs_v22.py#L20-L22\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/volumes/test_attach_volume.py#L179-L187","commit_id":"ae7b1998abb81ff8d1cb331784e65982aba91eb2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"96273f4b18e9de4a868f0f23316f2b3af258b052","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest import test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ServerLockedTestJSON(base.BaseV2ComputeTest):"},{"line_number":22,"context_line":"    @classmethod"},{"line_number":23,"context_line":"    def setup_clients(cls):"},{"line_number":24,"context_line":"        super(ServerLockedTestJSON, cls).setup_clients()"},{"line_number":25,"context_line":"        cls.client \u003d cls.servers_client"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def resource_setup(cls):"},{"line_number":29,"context_line":"        super(ServerLockedTestJSON, cls).resource_setup()"},{"line_number":30,"context_line":"        cls.server_id \u003d cls.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)[\u0027id\u0027]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super(ServerLockedTestJSON, self).setUp()"},{"line_number":34,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @test.idempotent_id(\u002780a8094c-211e-440a-ab88-9e59d556c7ee\u0027)"},{"line_number":37,"context_line":"    def test_lock_unlock_server(self):"},{"line_number":38,"context_line":"        # Lock the server,try server stop(exceptions throw),unlock it and retry"},{"line_number":39,"context_line":"        self.client.lock_server(self.server_id)"},{"line_number":40,"context_line":"        self.addCleanup(self.client.unlock_server, self.server_id)"},{"line_number":41,"context_line":"        server \u003d self.client.show_server(self.server_id)[\u0027server\u0027]"},{"line_number":42,"context_line":"        self.assertEqual(server[\u0027status\u0027], \u0027ACTIVE\u0027)"},{"line_number":43,"context_line":"        # Locked server is not allowed to be stopped by non-admin user"},{"line_number":44,"context_line":"        self.assertRaises(lib_exc.Conflict,"},{"line_number":45,"context_line":"                          self.client.stop_server, self.server_id)"},{"line_number":46,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":47,"context_line":"        self.client.stop_server(self.server_id)"},{"line_number":48,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id, \u0027SHUTOFF\u0027)"},{"line_number":49,"context_line":"        self.client.start_server(self.server_id)"},{"line_number":50,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id, \u0027ACTIVE\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class ServerLockedTestJSONV29(base.BaseV2ComputeTest):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_19af1c2b","line":50,"range":{"start_line":21,"start_character":0,"end_line":50,"end_character":77},"updated":"2016-07-12 05:52:26.000000000","message":"Maybe you want to create a special test module related to locked feature as a separated file. But I feel it is not necessary to change the existing test to avoid the above code(setUp, resource_setup, etc.)","commit_id":"609b92dd6f19983d79953a266368b6b9f2364e73"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"038377ffba080e5281349ad4eab56553e0ce7223","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id, \u0027ACTIVE\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class ServerLockedTestJSONV29(base.BaseV2ComputeTest):"},{"line_number":54,"context_line":"    min_microversion \u003d \u00272.9\u0027"},{"line_number":55,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_0f21d3fc","line":53,"updated":"2016-07-10 16:09:12.000000000","message":"Why do we need a test for this microversion in Tempest? It only tests nova\u0027s API and DB and the ability to set a status on a server and perform actions on it. It doesn\u0027t depend on anything in the compute layer or other services, like image/volume/network, so I don\u0027t think it really needs to be in Tempest - and all other projects using Tempest will have to run these these tests and it will add time to all jobs using Tempest. I\u0027d just leave testing this in Nova\u0027s functional tree.","commit_id":"609b92dd6f19983d79953a266368b6b9f2364e73"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"96273f4b18e9de4a868f0f23316f2b3af258b052","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id, \u0027ACTIVE\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class ServerLockedTestJSONV29(base.BaseV2ComputeTest):"},{"line_number":54,"context_line":"    min_microversion \u003d \u00272.9\u0027"},{"line_number":55,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_d9eab473","line":53,"in_reply_to":"1aa78d24_0f21d3fc","updated":"2016-07-12 05:52:26.000000000","message":"That is a nice point. The microversion test doesn\u0027t make much merit at the microversion.\nThere are some microversions which need to communicate with the other services, and we can find the merit at these microversions.\nBut I am not against adding all microversions tests, because it is difficult to distinguish such internal implementation of nova as the integrated test: Tempest.\n\nAnd the test operating time also is not so huge.","commit_id":"609b92dd6f19983d79953a266368b6b9f2364e73"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"a17cd393496294f661d9baccdb7bb599d1dc4eb9","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id, \u0027ACTIVE\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class ServerLockedTestJSONV29(base.BaseV2ComputeTest):"},{"line_number":54,"context_line":"    min_microversion \u003d \u00272.9\u0027"},{"line_number":55,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_5091a698","line":53,"in_reply_to":"1aa78d24_d9eab473","updated":"2016-07-25 14:29:51.000000000","message":"Decisions from the midcycle:\n\n\"We can\u0027t have schema changes in Tempest that aren\u0027t tested - this is already the Tempest policy and makes sense\"\n\nbut we have schema for 2.9 without tests. we need to fix it.\n\n\"It\u0027s fine to have microversion tests in Tempest even if they only hit the nova API/DB because we want the response schema validation (and to avoid these gaps in coverage)\"","commit_id":"609b92dd6f19983d79953a266368b6b9f2364e73"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"96273f4b18e9de4a868f0f23316f2b3af258b052","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _check_locked(self, expected, resp, uuid):"},{"line_number":72,"context_line":"        for server in resp[\u0027servers\u0027]:"},{"line_number":73,"context_line":"            if server[\u0027id\u0027] \u003d\u003d uuid:"},{"line_number":74,"context_line":"                self.assertEqual(expected, server[\u0027locked\u0027])"},{"line_number":75,"context_line":"                return"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @test.idempotent_id(\u0027de668e86-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":78,"context_line":"    def test_server_default_lock_status(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_d914744e","line":75,"range":{"start_line":73,"start_character":0,"end_line":75,"end_character":22},"updated":"2016-07-12 05:52:26.000000000","message":"If there is not the target server in the list, I guess this internal method should raise an exception.","commit_id":"609b92dd6f19983d79953a266368b6b9f2364e73"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"a17cd393496294f661d9baccdb7bb599d1dc4eb9","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _check_locked(self, expected, resp, uuid):"},{"line_number":72,"context_line":"        for server in resp[\u0027servers\u0027]:"},{"line_number":73,"context_line":"            if server[\u0027id\u0027] \u003d\u003d uuid:"},{"line_number":74,"context_line":"                self.assertEqual(expected, server[\u0027locked\u0027])"},{"line_number":75,"context_line":"                return"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @test.idempotent_id(\u0027de668e86-0540-11e6-b512-3e1d05defe78\u0027)"},{"line_number":78,"context_line":"    def test_server_default_lock_status(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_90e95e1d","line":75,"range":{"start_line":73,"start_character":0,"end_line":75,"end_character":22},"in_reply_to":"1aa78d24_d914744e","updated":"2016-07-25 14:29:51.000000000","message":"good point","commit_id":"609b92dd6f19983d79953a266368b6b9f2364e73"}],"tempest/lib/api_schema/response/compute/v2_9/servers.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0be519856bdd28703b95120807b970f994012eb3","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.lib.api_schema.response.compute.v2_1 import servers"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"server_actions_common_schema \u003d servers.server_actions_common_schema"},{"line_number":20,"context_line":"list_servers \u003d servers.list_servers"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"get_server \u003d copy.deepcopy(servers.get_server)"},{"line_number":23,"context_line":"get_server[\u0027response_body\u0027][\u0027properties\u0027][\u0027server\u0027]["}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_29bf9dfc","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":35},"updated":"2016-07-04 09:18:55.000000000","message":"there is no change in list and server action schema so these changes not needed.","commit_id":"e5df93f76f3ca0dd3cd6f2c171aeccf2df3d0478"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"b8672892dae22a277ccd675e9a2a06fec391c0c8","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.lib.api_schema.response.compute.v2_1 import servers"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"server_actions_common_schema \u003d servers.server_actions_common_schema"},{"line_number":20,"context_line":"list_servers \u003d servers.list_servers"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"get_server \u003d copy.deepcopy(servers.get_server)"},{"line_number":23,"context_line":"get_server[\u0027response_body\u0027][\u0027properties\u0027][\u0027server\u0027]["}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_c4b332e8","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":35},"in_reply_to":"1aa78d24_29bf9dfc","updated":"2016-07-05 08:59:37.000000000","message":"Yes, but we need we need list_servers here: \n\nLine 126\n\nhttps://review.openstack.org/#/c/307222/6/tempest/lib/services/compute/servers_client.py \n\nas we test microversion 2.9, this module named \u0027servers.py\u0027 will be chosen in method self.get_schema(self.schema_versions_info).\n\nAnd the chosen module must have field \u0027list_servers\u0027 because it used in line 126.","commit_id":"e5df93f76f3ca0dd3cd6f2c171aeccf2df3d0478"}],"tempest/lib/services/compute/servers_client.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"f10374400bac199f6f7af894081971b0bccffe52","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.validate_response(schema.list_addresses_by_network, resp, body)"},{"line_number":152,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def action(self, server_id, action_name, schema\u003dNone, **kwargs):"},{"line_number":155,"context_line":"        if schema is None:"},{"line_number":156,"context_line":"            _schema \u003d self.get_schema(self.schema_versions_info)"},{"line_number":157,"context_line":"            schema \u003d _schema.server_actions_common_schema"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_0a3b77d2","line":154,"updated":"2016-06-10 18:34:30.000000000","message":"I don\u0027t get why schema was/is in the method signature in the first place.... It seems it\u0027s the only method like this.","commit_id":"5d90f194f6e5f80dd230b573b31aa15f2037c29b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0be519856bdd28703b95120807b970f994012eb3","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.validate_response(schema.list_addresses_by_network, resp, body)"},{"line_number":152,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def action(self, server_id, action_name, schema\u003dNone, **kwargs):"},{"line_number":155,"context_line":"        if schema is None:"},{"line_number":156,"context_line":"            _schema \u003d self.get_schema(self.schema_versions_info)"},{"line_number":157,"context_line":"            schema \u003d _schema.server_actions_common_schema"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        post_body \u003d json.dumps({action_name: kwargs})"},{"line_number":160,"context_line":"        resp, body \u003d self.post(\u0027servers/%s/action\u0027 % server_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_29915d9a","line":157,"range":{"start_line":154,"start_character":0,"end_line":157,"end_character":57},"updated":"2016-07-04 09:18:55.000000000","message":"there is no change in server action schema so these changes not required.","commit_id":"e5df93f76f3ca0dd3cd6f2c171aeccf2df3d0478"}]}
