)]}'
{"patrole_tempest_plugin/tests/api/compute/test_server_actions_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"749955b8f29f921b6d2335a2de692a98e6952949","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                                       \u0027ACTIVE\u0027)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _test_confirm_resize_server(self):"},{"line_number":80,"context_line":"        self._test_resize_server(self.flavor_ref_alt)"},{"line_number":81,"context_line":"        self.client.confirm_resize_server(self.server_id)"},{"line_number":82,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":83,"context_line":"                                       \u0027ACTIVE\u0027)"},{"line_number":84,"context_line":"        self._test_resize_server(self.flavor_ref)"},{"line_number":85,"context_line":"        self.client.confirm_resize_server(self.server_id)"},{"line_number":86,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":87,"context_line":"                                       \u0027ACTIVE\u0027)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _test_rebuild_server(self):"},{"line_number":90,"context_line":"        self.client.rebuild_server(self.server_id, self.image_ref)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba2be162_45e4bd0c","line":87,"range":{"start_line":80,"start_character":0,"end_line":87,"end_character":48},"updated":"2017-02-28 16:30:49.000000000","message":"Why is the same code repeated twice?","commit_id":"040b08a647b9e5ad51053e042baac407e8ee70d0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"749955b8f29f921b6d2335a2de692a98e6952949","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def test_resize_server(self):"},{"line_number":121,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":122,"context_line":"        self._test_resize_server(self.flavor_ref_alt)"},{"line_number":123,"context_line":"        self._test_revert_resize_server()"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @rbac_rule_validation.action("},{"line_number":126,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":1,"id":"ba2be162_a52bb932","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":41},"updated":"2017-02-28 16:30:49.000000000","message":"Wrap this in self.addCleanup(self._test_revert_resize_server) because you\u0027re only testing the resize server policy action.","commit_id":"040b08a647b9e5ad51053e042baac407e8ee70d0"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"b0821b626d5d4ccf97b9575897d824239f72f7d0","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    @decorators.idempotent_id(\u0027d41b64b8-a72d-414a-a4c5-94e1eb5e5a96\u0027)"},{"line_number":129,"context_line":"    def test_revert_resize_server(self):"},{"line_number":130,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":131,"context_line":"        self._test_resize_server(self.flavor_ref_alt)"},{"line_number":132,"context_line":"        self._test_revert_resize_server()"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @rbac_rule_validation.action("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba2be162_4fe4de0c","line":131,"range":{"start_line":131,"start_character":8,"end_line":131,"end_character":53},"updated":"2017-02-28 15:53:59.000000000","message":"Shouldn\u0027t this line go before the switch role?","commit_id":"040b08a647b9e5ad51053e042baac407e8ee70d0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49790cbc672a94112e1b9ef524cfee6af07283aa","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                                       \u0027ACTIVE\u0027)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _test_confirm_resize_server(self):"},{"line_number":80,"context_line":"        self._test_resize_server(self.flavor_ref_alt)"},{"line_number":81,"context_line":"        self.client.confirm_resize_server(self.server_id)"},{"line_number":82,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":83,"context_line":"                                       \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_936ded06","line":80,"range":{"start_line":80,"start_character":8,"end_line":80,"end_character":53},"updated":"2017-03-01 15:25:23.000000000","message":"This shouldn\u0027t be called here if this corresponds to a different policy action. This should be placed before switch_role(self, switchToRbacRole\u003dTrue) call.","commit_id":"e5cb8cbb60ee36c5728fe4e7f95d1a6399060f47"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49790cbc672a94112e1b9ef524cfee6af07283aa","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    @decorators.idempotent_id(\u0027ab4a17d2-166f-4a6d-9944-f17baa576cf2\u0027)"},{"line_number":99,"context_line":"    def test_stop_server(self):"},{"line_number":100,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":101,"context_line":"        self._test_stop_server()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @rbac_rule_validation.action("},{"line_number":104,"context_line":"        service\u003d\"nova\","},{"line_number":105,"context_line":"        rule\u003d\"os_compute_api:servers:start\")"},{"line_number":106,"context_line":"    @decorators.idempotent_id(\u00278876bfa9-4d10-406e-a335-a57e451abb12\u0027)"},{"line_number":107,"context_line":"    def test_start_server(self):"},{"line_number":108,"context_line":"        self._test_stop_server()"},{"line_number":109,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":110,"context_line":"        self._test_start_server()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_737eb9e5","line":108,"range":{"start_line":101,"start_character":0,"end_line":108,"end_character":32},"updated":"2017-03-01 15:25:23.000000000","message":"Have you tested whether running these tests together in one test run works? I\u0027m wondering whether test_stop_server will put the server in SHUTOFF state, causing the call to _test_stop_server in test_start_server to potentially fail at L65, because the server has already been stopped.\n\nAccording to the Nova API documentation for stop server:\n\n\"Preconditions\n\nThe server status must be ACTIVE or ERROR.\"\n\nIf I\u0027m right, can you add a self.addCleanup(self._test_start_server, self.server_id) to test_stop_server on L102 above.","commit_id":"e5cb8cbb60ee36c5728fe4e7f95d1a6399060f47"},{"author":{"_account_id":23026,"name":"Sravan Kumar","email":"d.sravan.kumar@ericsson.com","username":"rajusravan"},"change_message_id":"bb7ea433f495fc3d2dabc947835a48f180cddbf1","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    @decorators.idempotent_id(\u0027ab4a17d2-166f-4a6d-9944-f17baa576cf2\u0027)"},{"line_number":99,"context_line":"    def test_stop_server(self):"},{"line_number":100,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":101,"context_line":"        self._test_stop_server()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @rbac_rule_validation.action("},{"line_number":104,"context_line":"        service\u003d\"nova\","},{"line_number":105,"context_line":"        rule\u003d\"os_compute_api:servers:start\")"},{"line_number":106,"context_line":"    @decorators.idempotent_id(\u00278876bfa9-4d10-406e-a335-a57e451abb12\u0027)"},{"line_number":107,"context_line":"    def test_start_server(self):"},{"line_number":108,"context_line":"        self._test_stop_server()"},{"line_number":109,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":110,"context_line":"        self._test_start_server()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_69d4de46","line":108,"range":{"start_line":101,"start_character":0,"end_line":108,"end_character":32},"in_reply_to":"ba2be162_737eb9e5","updated":"2017-03-02 11:21:28.000000000","message":"Hi Felipe, I tested out running all these tests together. But somehow I couldn\u0027t see any issues with test_stop_server and test_start_server.\n\nAny how its good to add addCleanup method in test_stop_server to make it clean run as per your suggestion.","commit_id":"e5cb8cbb60ee36c5728fe4e7f95d1a6399060f47"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"49790cbc672a94112e1b9ef524cfee6af07283aa","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    def test_confirm_resize_server(self):"},{"line_number":135,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":136,"context_line":"        self._test_confirm_resize_server()"},{"line_number":137,"context_line":"        self._test_resize_server(self.flavor_ref)"},{"line_number":138,"context_line":"        self.client.confirm_resize_server(self.server_id)"},{"line_number":139,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":140,"context_line":"                                       \u0027ACTIVE\u0027)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @rbac_rule_validation.action("},{"line_number":143,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":2,"id":"ba2be162_96095b2f","line":140,"range":{"start_line":137,"start_character":0,"end_line":140,"end_character":48},"updated":"2017-03-01 15:25:23.000000000","message":"If this is your cleanup, then this belongs in an addCleanup call.\nOtherwise, the test may fail due to additional policy actions being enforced. \n\nIt also belongs in addCleanup in case the test fails -- in which case cleanup should be guaranteed, so that other tests don\u0027t also fail.","commit_id":"e5cb8cbb60ee36c5728fe4e7f95d1a6399060f47"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"cd75089a1b3433d7cad465aef7f277c5077e7ce8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        cls.flavor_ref_alt \u003d CONF.compute.flavor_ref_alt"},{"line_number":57,"context_line":"        cls.image_ref \u003d CONF.compute.image_ref"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _test_start_server(self):"},{"line_number":60,"context_line":"        self.client.start_server(self.server_id)"},{"line_number":61,"context_line":"        waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":62,"context_line":"                                       \u0027ACTIVE\u0027)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _test_stop_server(self):"},{"line_number":65,"context_line":"        self.client.stop_server(self.server_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_5306c386","line":62,"range":{"start_line":59,"start_character":0,"end_line":62,"end_character":48},"updated":"2017-03-02 20:22:50.000000000","message":"I think these helper functions should only exist if they\u0027re called in more than 1 test function. If only 1 test function calls the helper function, then get rid of the helper function.","commit_id":"ef9815794aeace8a1f85961a10935173e10ac0c4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"cd75089a1b3433d7cad465aef7f277c5077e7ce8","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    @decorators.idempotent_id(\u0027ab4a17d2-166f-4a6d-9944-f17baa576cf2\u0027)"},{"line_number":98,"context_line":"    def test_stop_server(self):"},{"line_number":99,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":100,"context_line":"        self._test_stop_server()"},{"line_number":101,"context_line":"        self.addCleanup(self._test_start_server)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @rbac_rule_validation.action("},{"line_number":104,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_b3e0dffb","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":48},"updated":"2017-03-02 20:22:50.000000000","message":"Place addCleanup _immediately_ after switchToRbacRole\u003dTrue, because that way it\u0027ll always be executed, even if the next line fails.","commit_id":"ef9815794aeace8a1f85961a10935173e10ac0c4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5aeb0aff5e9cc95422f5795d1fddaee75e255eaf","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    @decorators.idempotent_id(\u0027ab4a17d2-166f-4a6d-9944-f17baa576cf2\u0027)"},{"line_number":98,"context_line":"    def test_stop_server(self):"},{"line_number":99,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":100,"context_line":"        self._test_stop_server()"},{"line_number":101,"context_line":"        self.addCleanup(self._test_start_server)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @rbac_rule_validation.action("},{"line_number":104,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_532de3fc","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":48},"in_reply_to":"ba2be162_b3e0dffb","updated":"2017-03-02 20:23:53.000000000","message":"Actually, the addCleanup can be placed anywhere inside this function, as long as it\u0027s before the you do the API call that you\u0027re testing.","commit_id":"ef9815794aeace8a1f85961a10935173e10ac0c4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"cd75089a1b3433d7cad465aef7f277c5077e7ce8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def test_start_server(self):"},{"line_number":108,"context_line":"        self._test_stop_server()"},{"line_number":109,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":110,"context_line":"        self._test_start_server()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @rbac_rule_validation.action("},{"line_number":113,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_53b883c8","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":33},"updated":"2017-03-02 20:22:50.000000000","message":"You need an addCleanup here, except that you\u0027ll need to do something like this in a helper function (or tearDown, alternatively).\n\n        # Guarantee that the server is active during each test run.\n        vm_state \u003d self.client.show_server(self.server[\u0027id\u0027])[\u0027server\u0027][\n            \u0027OS-EXT-STS:vm_state\u0027].upper()\n        if vm_state !\u003d \u0027ACTIVE\u0027:\n            self.client.resume_server(self.server[\u0027id\u0027])\n            waiters.wait_for_server_status(self.client, self.server[\u0027id\u0027],\n                                           \u0027ACTIVE\u0027)\n\nSee https://review.openstack.org/#/c/439717/1/patrole_tempest_plugin/tests/api/compute/test_suspend_server_rbac.py","commit_id":"ef9815794aeace8a1f85961a10935173e10ac0c4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"cd75089a1b3433d7cad465aef7f277c5077e7ce8","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    @decorators.idempotent_id(\u00270546fbdd-2d8f-4ce8-ac00-f1e2129d0765\u0027)"},{"line_number":116,"context_line":"    def test_resize_server(self):"},{"line_number":117,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":118,"context_line":"        self._test_resize_server(self.flavor_ref_alt)"},{"line_number":119,"context_line":"        self.addCleanup(self._test_revert_resize_server)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @rbac_rule_validation.action("},{"line_number":122,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_b3f61ff7","line":119,"range":{"start_line":118,"start_character":8,"end_line":119,"end_character":56},"updated":"2017-03-02 20:22:50.000000000","message":"Reverse these.\n\nPlace addCleanup _immediately_ after switchToRbacRole\u003dTrue, because that way it\u0027ll always be executed, even if the next line fails.","commit_id":"ef9815794aeace8a1f85961a10935173e10ac0c4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"cd75089a1b3433d7cad465aef7f277c5077e7ce8","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self._test_resize_server(self.flavor_ref_alt)"},{"line_number":136,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":137,"context_line":"        self._test_confirm_resize_server()"},{"line_number":138,"context_line":"        self._test_resize_server(self.flavor_ref)"},{"line_number":139,"context_line":"        self.addCleanup(self._test_confirm_resize_server)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @rbac_rule_validation.action("},{"line_number":142,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_13336bf7","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":57},"updated":"2017-03-02 20:22:50.000000000","message":"First, place addCleanup _immediately_ after switchToRbacRole\u003dTrue, because that way it\u0027ll always be executed, even if the next line fails.\n\nThis should be combined together into one function. You have 2 options:\n\nCreate a helper function called restore_server_size, or undo_resize_server, which calls:\n\nself._test_resize_server(self.flavor_ref)\nself._test_confirm_resize_server()\n\nThen in this function do: self.addCleanup(undo_resize_server)\n\nAlternatively:\n\nself.addCleanup(\n    lambda: (\n        self._test_resize_server(self.flavor_ref),\n        self._test_confirm_resize_server()\n    )\n)","commit_id":"ef9815794aeace8a1f85961a10935173e10ac0c4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3f24be409574c22a50dfb8e2b60bb38eca6cf618","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ServerActionsRbacTest(rbac_base.BaseV2ComputeRbacTest):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":29,"context_line":"    def tearDown(self):"},{"line_number":30,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":31,"context_line":"        super(ServerActionsRbacTest, self).tearDown()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":34,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 5759b69... Compute API Server Actions Test"},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def setup_clients(cls):"},{"line_number":37,"context_line":"        super(ServerActionsRbacTest, cls).setup_clients()"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_401fa707","line":34,"range":{"start_line":28,"start_character":0,"end_line":34,"end_character":50},"updated":"2017-03-03 13:53:27.000000000","message":"Fix merge conflict.","commit_id":"8214ab85753135c4e51060b755323850660fc0ff"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"a40c3e77340ba3a4d5bf492e99355f739f91a288","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def skip_checks(cls):"},{"line_number":34,"context_line":"        super(ServerActionsRbacTest, cls).skip_checks()"},{"line_number":35,"context_line":"        if not CONF.compute_feature_enabled.api_extensions:"},{"line_number":36,"context_line":"            raise cls.skipException("},{"line_number":37,"context_line":"                \u0027%s skipped as no compute extensions enabled\u0027 % cls.__name__)"},{"line_number":38,"context_line":"        if not CONF.compute_feature_enabled.interface_attach:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \u0027%s skipped as interface attachment is not available\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba2be162_7a29689a","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":77},"updated":"2017-03-06 16:10:45.000000000","message":"I\u0027d prefer to check for the one extension we need rather than just checking that extensions are enabled","commit_id":"646f1aff9c9c57a96c0a4a420199377414ea99a4"},{"author":{"_account_id":23900,"name":"Uday T Kumar","email":"uday053@gmail.com","username":"uday.t.kumar"},"change_message_id":"eaede250e2c2c004628260503135309e888b640a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def skip_checks(cls):"},{"line_number":34,"context_line":"        super(ServerActionsRbacTest, cls).skip_checks()"},{"line_number":35,"context_line":"        if not CONF.compute_feature_enabled.api_extensions:"},{"line_number":36,"context_line":"            raise cls.skipException("},{"line_number":37,"context_line":"                \u0027%s skipped as no compute extensions enabled\u0027 % cls.__name__)"},{"line_number":38,"context_line":"        if not CONF.compute_feature_enabled.interface_attach:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \u0027%s skipped as interface attachment is not available\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a30ddce_693b45ec","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":77},"in_reply_to":"ba2be162_12af6995","updated":"2017-03-07 14:19:01.000000000","message":"Thanks a ton for the review and the pointers. Appreciate you taking time to help with this. I have made the changes using the pointers given by you and its working locally and I have pushed the code.","commit_id":"646f1aff9c9c57a96c0a4a420199377414ea99a4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"dfee6fa97b90f587c3ce13b57332673dc518871e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def skip_checks(cls):"},{"line_number":34,"context_line":"        super(ServerActionsRbacTest, cls).skip_checks()"},{"line_number":35,"context_line":"        if not CONF.compute_feature_enabled.api_extensions:"},{"line_number":36,"context_line":"            raise cls.skipException("},{"line_number":37,"context_line":"                \u0027%s skipped as no compute extensions enabled\u0027 % cls.__name__)"},{"line_number":38,"context_line":"        if not CONF.compute_feature_enabled.interface_attach:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \u0027%s skipped as interface attachment is not available\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba2be162_12af6995","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":77},"in_reply_to":"ba2be162_7a29689a","updated":"2017-03-06 19:01:16.000000000","message":"Not applicable in this case (at least not here).\n\nSince there are so many extensions being executed, need to do this on a case-by-case basis, not at the class level.\n\ni.e.\n\n    @testtools.skipUnless(CONF.compute_feature_enabled.pause,\n                          \u0027Pause is not available.\u0027)\n    def test_pause_unpause_server(self):\n        ...","commit_id":"646f1aff9c9c57a96c0a4a420199377414ea99a4"},{"author":{"_account_id":23900,"name":"Uday T Kumar","email":"uday053@gmail.com","username":"uday.t.kumar"},"change_message_id":"eaede250e2c2c004628260503135309e888b640a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def skip_checks(cls):"},{"line_number":34,"context_line":"        super(ServerActionsRbacTest, cls).skip_checks()"},{"line_number":35,"context_line":"        if not CONF.compute_feature_enabled.api_extensions:"},{"line_number":36,"context_line":"            raise cls.skipException("},{"line_number":37,"context_line":"                \u0027%s skipped as no compute extensions enabled\u0027 % cls.__name__)"},{"line_number":38,"context_line":"        if not CONF.compute_feature_enabled.interface_attach:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \u0027%s skipped as interface attachment is not available\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a30ddce_696d0504","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":77},"in_reply_to":"ba2be162_7a29689a","updated":"2017-03-07 14:19:01.000000000","message":"Thanks for the review Samantha. I have made the changes using the pointers given by Felipe and its working locally and I have pushed the code.","commit_id":"646f1aff9c9c57a96c0a4a420199377414ea99a4"},{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"92095ef1c54f88d34165ed0b9cc7b2755a5dcbb1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def tearDown(self):"},{"line_number":54,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Guarantee that the server is active during each test run."},{"line_number":57,"context_line":"        vm_state \u003d self.client.show_server(self.server_id)[\u0027server\u0027]["},{"line_number":58,"context_line":"            \u0027OS-EXT-STS:vm_state\u0027].upper()"},{"line_number":59,"context_line":"        if vm_state \u003d\u003d \u0027RESIZED\u0027:"},{"line_number":60,"context_line":"            self.client.revert_resize_server(self.server_id)"},{"line_number":61,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":62,"context_line":"                                           \u0027ACTIVE\u0027)"},{"line_number":63,"context_line":"        if vm_state !\u003d \u0027ACTIVE\u0027:"},{"line_number":64,"context_line":"            self.client.rebuild_server(self.server_id, self.image_ref)"},{"line_number":65,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":66,"context_line":"                                           \u0027ACTIVE\u0027)"},{"line_number":67,"context_line":"        super(ServerActionsRbacTest, self).tearDown()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _test_start_server(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba2be162_3a529067","line":66,"range":{"start_line":56,"start_character":8,"end_line":66,"end_character":52},"updated":"2017-03-06 16:07:05.000000000","message":"Is this something you expect to be used each test call, or is this just an extra bit of redundancy to ensure the VM is active.  If the purpose of this is just to ensure the VM is active for a test, I think it makes more sense to put this logic into the setup.","commit_id":"646f1aff9c9c57a96c0a4a420199377414ea99a4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"dfee6fa97b90f587c3ce13b57332673dc518871e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def tearDown(self):"},{"line_number":54,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Guarantee that the server is active during each test run."},{"line_number":57,"context_line":"        vm_state \u003d self.client.show_server(self.server_id)[\u0027server\u0027]["},{"line_number":58,"context_line":"            \u0027OS-EXT-STS:vm_state\u0027].upper()"},{"line_number":59,"context_line":"        if vm_state \u003d\u003d \u0027RESIZED\u0027:"},{"line_number":60,"context_line":"            self.client.revert_resize_server(self.server_id)"},{"line_number":61,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":62,"context_line":"                                           \u0027ACTIVE\u0027)"},{"line_number":63,"context_line":"        if vm_state !\u003d \u0027ACTIVE\u0027:"},{"line_number":64,"context_line":"            self.client.rebuild_server(self.server_id, self.image_ref)"},{"line_number":65,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":66,"context_line":"                                           \u0027ACTIVE\u0027)"},{"line_number":67,"context_line":"        super(ServerActionsRbacTest, self).tearDown()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _test_start_server(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba2be162_b2b85dea","line":66,"range":{"start_line":56,"start_character":8,"end_line":66,"end_character":52},"in_reply_to":"ba2be162_3a529067","updated":"2017-03-06 19:01:16.000000000","message":"I found a better way to do this: see setUp in https://github.com/openstack/tempest/blob/master/tempest/api/compute/servers/test_server_actions.py","commit_id":"646f1aff9c9c57a96c0a4a420199377414ea99a4"},{"author":{"_account_id":23900,"name":"Uday T Kumar","email":"uday053@gmail.com","username":"uday.t.kumar"},"change_message_id":"eaede250e2c2c004628260503135309e888b640a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def tearDown(self):"},{"line_number":54,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Guarantee that the server is active during each test run."},{"line_number":57,"context_line":"        vm_state \u003d self.client.show_server(self.server_id)[\u0027server\u0027]["},{"line_number":58,"context_line":"            \u0027OS-EXT-STS:vm_state\u0027].upper()"},{"line_number":59,"context_line":"        if vm_state \u003d\u003d \u0027RESIZED\u0027:"},{"line_number":60,"context_line":"            self.client.revert_resize_server(self.server_id)"},{"line_number":61,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":62,"context_line":"                                           \u0027ACTIVE\u0027)"},{"line_number":63,"context_line":"        if vm_state !\u003d \u0027ACTIVE\u0027:"},{"line_number":64,"context_line":"            self.client.rebuild_server(self.server_id, self.image_ref)"},{"line_number":65,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":66,"context_line":"                                           \u0027ACTIVE\u0027)"},{"line_number":67,"context_line":"        super(ServerActionsRbacTest, self).tearDown()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _test_start_server(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a30ddce_a90c5d43","line":66,"range":{"start_line":56,"start_character":8,"end_line":66,"end_character":52},"in_reply_to":"ba2be162_3a529067","updated":"2017-03-07 14:19:01.000000000","message":"Thanks a lot for the review. I have made the changes using the pointers given by Felipe and its working locally and I have pushed the code.","commit_id":"646f1aff9c9c57a96c0a4a420199377414ea99a4"},{"author":{"_account_id":23900,"name":"Uday T Kumar","email":"uday053@gmail.com","username":"uday.t.kumar"},"change_message_id":"eaede250e2c2c004628260503135309e888b640a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def tearDown(self):"},{"line_number":54,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Guarantee that the server is active during each test run."},{"line_number":57,"context_line":"        vm_state \u003d self.client.show_server(self.server_id)[\u0027server\u0027]["},{"line_number":58,"context_line":"            \u0027OS-EXT-STS:vm_state\u0027].upper()"},{"line_number":59,"context_line":"        if vm_state \u003d\u003d \u0027RESIZED\u0027:"},{"line_number":60,"context_line":"            self.client.revert_resize_server(self.server_id)"},{"line_number":61,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":62,"context_line":"                                           \u0027ACTIVE\u0027)"},{"line_number":63,"context_line":"        if vm_state !\u003d \u0027ACTIVE\u0027:"},{"line_number":64,"context_line":"            self.client.rebuild_server(self.server_id, self.image_ref)"},{"line_number":65,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"},{"line_number":66,"context_line":"                                           \u0027ACTIVE\u0027)"},{"line_number":67,"context_line":"        super(ServerActionsRbacTest, self).tearDown()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _test_start_server(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a30ddce_c92271b9","line":66,"range":{"start_line":56,"start_character":8,"end_line":66,"end_character":52},"in_reply_to":"ba2be162_b2b85dea","updated":"2017-03-07 14:19:01.000000000","message":"Thanks a ton for the review and the pointers. Appreciate you taking time to help with this. I have made the changes using the pointers given by you and its working locally and I have pushed the code.","commit_id":"646f1aff9c9c57a96c0a4a420199377414ea99a4"},{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"6ec17f0b2a34627b288f6a360c02efcad4d9e26d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            waiters.wait_for_server_status(self.client,"},{"line_number":54,"context_line":"                                           self.server_id, \u0027ACTIVE\u0027)"},{"line_number":55,"context_line":"        except lib_exc.NotFound:"},{"line_number":56,"context_line":"            # if the server was found to be deleted by a previous test,"},{"line_number":57,"context_line":"            # a new one is built"},{"line_number":58,"context_line":"            server \u003d self.create_test_server("},{"line_number":59,"context_line":"                validatable\u003dTrue,"},{"line_number":60,"context_line":"                wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":61,"context_line":"            self.__class__.server_id \u003d server[\u0027id\u0027]"},{"line_number":62,"context_line":"        except Exception:"},{"line_number":63,"context_line":"            # Rebuilding the server in case something happened during a test"},{"line_number":64,"context_line":"            self.__class__.server_id \u003d self.rebuild_server("},{"line_number":65,"context_line":"                self.server_id, validatable\u003dTrue)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def tearDown(self):"},{"line_number":68,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a30ddce_9625e9c3","line":65,"range":{"start_line":55,"start_character":8,"end_line":65,"end_character":49},"updated":"2017-03-07 17:37:46.000000000","message":"This seems good.  We should still try to make sure individual tests clean up after themselves, but having a backup measure like this is good.","commit_id":"9dd3d31aa7dbba02bccd6d241295d9d2d0434a94"}]}
