)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Tests for the Ironic CLI node-delete command that checks that node can be"},{"line_number":10,"context_line":"deleted by Name by UUID and can be deleted several nodes using:"},{"line_number":11,"context_line":"        ironic node-delete \u003cnode\u003e [\u003cnode\u003e ...]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ic73be943c48107a3bb817f5db98065e425d9c67d"},{"line_number":14,"context_line":"Implements: blueprint ironic-client-advanced-functional-tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a8ffd7b_96fd17b3","line":11,"updated":"2015-12-03 06:27:12.000000000","message":"How about this description:\n\nTests for the Ironic CLI node-delete command that check single node\ncan be deleted by Name or UUID of the node. And for multiple nodes,\nthey can be deleted using:\nironic node-delete \u003cnode\u003e [\u003cnode\u003e ...]","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Tests for the Ironic CLI node-delete command that checks that node can be"},{"line_number":10,"context_line":"deleted by Name by UUID and can be deleted several nodes using:"},{"line_number":11,"context_line":"        ironic node-delete \u003cnode\u003e [\u003cnode\u003e ...]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ic73be943c48107a3bb817f5db98065e425d9c67d"},{"line_number":14,"context_line":"Implements: blueprint ironic-client-advanced-functional-tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a740942_23e8317c","line":11,"in_reply_to":"9a8ffd7b_96fd17b3","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3195911e0870b14c0be2a878ea8ffb4404be38e5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        ironic node-delete \u003cnode\u003e [\u003cnode\u003e ...]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Negative tests for the Ironic CLI node-delete command that checks that"},{"line_number":14,"context_line":"node can not be deleted by non-exist UUID."},{"line_number":15,"context_line":"Checks that node-delete command without parameters triggers to an error."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic73be943c48107a3bb817f5db98065e425d9c67d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"ba0121b8_df5116da","line":14,"updated":"2016-03-30 14:38:34.000000000","message":"or name. Delete node by non existed name also should be covered by tests","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"08e2de1b20b77d498ee269dce68ed96dc6c3adde","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        ironic node-delete \u003cnode\u003e [\u003cnode\u003e ...]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Negative tests for the Ironic CLI node-delete command that checks that"},{"line_number":14,"context_line":"node can not be deleted by non-exist UUID."},{"line_number":15,"context_line":"Checks that node-delete command without parameters triggers to an error."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic73be943c48107a3bb817f5db98065e425d9c67d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"ba0121b8_df7561fa","line":14,"in_reply_to":"ba0121b8_df5116da","updated":"2016-03-31 13:10:49.000000000","message":"Done","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4178df00eeb2b0a234ffc2bde2705e6108f85718","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Checks that node-delete command without parameters triggers to an error."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic73be943c48107a3bb817f5db98065e425d9c67d"},{"line_number":18,"context_line":"Implements: blueprint ironic-client-advanced-functional-tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"ba0121b8_390c7d3a","line":18,"updated":"2016-03-31 12:44:35.000000000","message":"please use bugs, not blueprints to track your work","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"22013b4f17691252216c9cd095ba36834a678494","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Checks that node-delete command without parameters triggers to an error."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic73be943c48107a3bb817f5db98065e425d9c67d"},{"line_number":18,"context_line":"Implements: blueprint ironic-client-advanced-functional-tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"ba0121b8_d0ef0ee7","line":18,"updated":"2016-03-31 13:54:05.000000000","message":"Please see this doc - http://docs.openstack.org/developer/ironic/dev/code-contribution-guide.html#adding-new-features\n\nIronic (and client too) now use RFE bugs to track progress on features. I\u0027m not sure if \"adding fuctional tests\" is an RFE bug, as it is never-ending process, and it\u0027s not a \"feature\" as I think, but if you think so, please create it and use partial-bug/closes-bug","commit_id":"a8a9f8e7d9ce930e1d6c44a4cde2cab0975ab23e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"bfea20bc7442fa0be9eed8f30d26077712d9be52","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Checks that node-delete command without parameters triggers to an error."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic73be943c48107a3bb817f5db98065e425d9c67d"},{"line_number":18,"context_line":"Implements: blueprint ironic-client-advanced-functional-tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"ba0121b8_822f0587","line":18,"in_reply_to":"ba0121b8_d0ef0ee7","updated":"2016-04-01 10:39:41.000000000","message":"Done","commit_id":"a8a9f8e7d9ce930e1d6c44a4cde2cab0975ab23e"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"b4975a482d183026f15d56089eec7c918d6ea53d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"node can not be deleted by non-exist UUID."},{"line_number":15,"context_line":"Checks that node-delete command without parameters triggers to an error."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements: blueprint ironic-client-advanced-functional-tests"},{"line_number":18,"context_line":"Change-Id: Ic73be943c48107a3bb817f5db98065e425d9c67d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":39,"id":"9ad45d7e_21fd5db4","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":61},"updated":"2016-08-11 13:09:44.000000000","message":"It looks that blueprint was deleted and link to it is no more relevant.","commit_id":"daedf7923f0dff1eac3cb740580e277f2519d8ba"}],"ironicclient/tests/functional/base.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"663eef1d2cdf441f53393e4d8effbf0106a1e163","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        self.assertNotIn(\u0027False\u0027, [x[\u0027Result\u0027] for x in node_validate])"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def assertCreatedNodesInListNodes(self, created_nodes):"},{"line_number":173,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_9fe6f1e6","line":172,"updated":"2015-12-01 17:11:03.000000000","message":"I\u0027m not sure this should go to the base class, I\u0027d rather see it as in testcase class method.","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        self.assertNotIn(\u0027False\u0027, [x[\u0027Result\u0027] for x in node_validate])"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def assertCreatedNodesInListNodes(self, created_nodes):"},{"line_number":173,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d67abf23","line":172,"in_reply_to":"9a8ffd7b_9fe6f1e6","updated":"2015-12-03 06:27:12.000000000","message":"++, maybe can move to the utils.","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        self.assertNotIn(\u0027False\u0027, [x[\u0027Result\u0027] for x in node_validate])"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def assertCreatedNodesInListNodes(self, created_nodes):"},{"line_number":173,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_1e6eaec9","line":172,"in_reply_to":"9a8ffd7b_9fe6f1e6","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        self.assertNotIn(\u0027False\u0027, [x[\u0027Result\u0027] for x in node_validate])"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def assertCreatedNodesInListNodes(self, created_nodes):"},{"line_number":173,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_3e736ab3","line":172,"in_reply_to":"9a8ffd7b_d67abf23","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"},{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        created_nodes_uuid \u003d [x[\u0027uuid\u0027] for x in created_nodes]"},{"line_number":178,"context_line":"        for created_node_id in created_nodes_uuid:"},{"line_number":179,"context_line":"            self.assertIn(created_node_id,"},{"line_number":180,"context_line":"                          self.get_nodes_uuids_from_node_list())"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_f6958331","line":177,"updated":"2015-12-03 06:27:12.000000000","message":"nit:\n\ns/created_nodes_uuid/created_nodes_uuids/","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"},{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        created_nodes_uuid \u003d [x[\u0027uuid\u0027] for x in created_nodes]"},{"line_number":178,"context_line":"        for created_node_id in created_nodes_uuid:"},{"line_number":179,"context_line":"            self.assertIn(created_node_id,"},{"line_number":180,"context_line":"                          self.get_nodes_uuids_from_node_list())"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_fe48822f","line":177,"in_reply_to":"9a8ffd7b_f6958331","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"},{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        created_nodes_uuid \u003d [x[\u0027uuid\u0027] for x in created_nodes]"},{"line_number":178,"context_line":"        for created_node_id in created_nodes_uuid:"},{"line_number":179,"context_line":"            self.assertIn(created_node_id,"},{"line_number":180,"context_line":"                          self.get_nodes_uuids_from_node_list())"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d6f63f8e","line":178,"updated":"2015-12-03 06:27:12.000000000","message":"nit: As there are \u0027id\u0027 and \u0027uuid\u0027 in node table of ironic database, here using \u0027uuid\u0027 might be more suitable.\n\ns/created_node_id/created_node_uuid/","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"},{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        created_nodes_uuid \u003d [x[\u0027uuid\u0027] for x in created_nodes]"},{"line_number":178,"context_line":"        for created_node_id in created_nodes_uuid:"},{"line_number":179,"context_line":"            self.assertIn(created_node_id,"},{"line_number":180,"context_line":"                          self.get_nodes_uuids_from_node_list())"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_de4b462a","line":178,"in_reply_to":"9a8ffd7b_d6f63f8e","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"663eef1d2cdf441f53393e4d8effbf0106a1e163","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            self.assertIn(created_node_id,"},{"line_number":180,"context_line":"                          self.get_nodes_uuids_from_node_list())"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def assertCreatedNodesNotInListNodes(self, created_nodes):"},{"line_number":183,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :param created_nodes: list of nodes from node-create cmd"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_e24c4678","line":182,"updated":"2015-12-01 17:11:03.000000000","message":"ditto","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            self.assertIn(created_node_id,"},{"line_number":180,"context_line":"                          self.get_nodes_uuids_from_node_list())"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def assertCreatedNodesNotInListNodes(self, created_nodes):"},{"line_number":183,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :param created_nodes: list of nodes from node-create cmd"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_7e6332b2","line":182,"in_reply_to":"9a8ffd7b_e24c4678","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        :param nodes_id: nodes uuids"},{"line_number":196,"context_line":"        \"\"\""},{"line_number":197,"context_line":"        node_list \u003d self.list_nodes()"},{"line_number":198,"context_line":"        for node_id in nodes_id:"},{"line_number":199,"context_line":"            if utils.get_object(node_list, node_id):"},{"line_number":200,"context_line":"                node_show \u003d self.show_node(node_id)"},{"line_number":201,"context_line":"                if node_show[\u0027provision_state\u0027] !\u003d \u0027available\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_367a2bf2","line":198,"updated":"2015-12-03 06:27:12.000000000","message":"ditto","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        :param nodes_id: nodes uuids"},{"line_number":196,"context_line":"        \"\"\""},{"line_number":197,"context_line":"        node_list \u003d self.list_nodes()"},{"line_number":198,"context_line":"        for node_id in nodes_id:"},{"line_number":199,"context_line":"            if utils.get_object(node_list, node_id):"},{"line_number":200,"context_line":"                node_show \u003d self.show_node(node_id)"},{"line_number":201,"context_line":"                if node_show[\u0027provision_state\u0027] !\u003d \u0027available\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_1e58eef9","line":198,"in_reply_to":"9a8ffd7b_367a2bf2","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"700b0bfbc4fd9a429a3cd337ac58d9c9e5b1acfe","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"},{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        created_nodes_uuid \u003d [x[\u0027uuid\u0027] for x in created_nodes]"},{"line_number":178,"context_line":"        for created_node_id in created_nodes_uuid:"},{"line_number":179,"context_line":"            self.assertIn(created_node_id,"},{"line_number":180,"context_line":"                          self.get_nodes_uuids_from_node_list())"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_2de8d7b3","line":177,"updated":"2015-12-07 09:16:54.000000000","message":"nit:s/x/node/ may be better","commit_id":"43e6a2c994684a9a00e35e6f7f8ec150bc1aec9b"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"c0330ebe7ec7515aa63e094918c430fde5b70085","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param created_nodes: list of nodes from node-create cmd"},{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        created_nodes_uuid \u003d [x[\u0027uuid\u0027] for x in created_nodes]"},{"line_number":178,"context_line":"        for created_node_id in created_nodes_uuid:"},{"line_number":179,"context_line":"            self.assertIn(created_node_id,"},{"line_number":180,"context_line":"                          self.get_nodes_uuids_from_node_list())"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_5902690b","line":177,"in_reply_to":"7a740942_2de8d7b3","updated":"2015-12-08 18:09:44.000000000","message":"Done","commit_id":"43e6a2c994684a9a00e35e6f7f8ec150bc1aec9b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"c117a090f8823df1221ef9ab814758f0edc4bca8","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                if node_show[\u0027power_state\u0027] not in (\u0027None\u0027, \u0027off\u0027):"},{"line_number":181,"context_line":"                    self.ironic(\u0027node-set-power-state\u0027,"},{"line_number":182,"context_line":"                                params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":183,"context_line":"                self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"                node_list_uuid \u003d self.get_nodes_uuids_from_node_list()"},{"line_number":186,"context_line":"                if node_id in node_list_uuid:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_bbb68e3b","line":183,"range":{"start_line":183,"start_character":21,"end_line":183,"end_character":27},"updated":"2015-12-23 11:09:34.000000000","message":"node-delete supports multiple delete, I think we need to test it as well","commit_id":"9e5d90213e2532342b98938e2056b156d9a21832"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"181fb497c12b638ed8d73163c336f42af35cadcd","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                if node_show[\u0027power_state\u0027] not in (\u0027None\u0027, \u0027off\u0027):"},{"line_number":181,"context_line":"                    self.ironic(\u0027node-set-power-state\u0027,"},{"line_number":182,"context_line":"                                params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":183,"context_line":"                self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"                node_list_uuid \u003d self.get_nodes_uuids_from_node_list()"},{"line_number":186,"context_line":"                if node_id in node_list_uuid:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_76ca0f50","line":183,"range":{"start_line":183,"start_character":21,"end_line":183,"end_character":27},"in_reply_to":"1a7b0d38_7d79f692","updated":"2015-12-28 13:02:54.000000000","message":"Actually in python-ironicclient/ironicclient/v1/port_shell.py\nmethod that delete nodes:\ndef do_node_delete(cc, args):\n    \"\"\"Unregister node(s) from the Ironic service.\"\"\"\n    for n in args.node:\n        cc.node.delete(n)\n        print(_(\u0027Deleted node %s\u0027) % n)\nIt delte nodes one by one. So I don\u0027t see a point to change my delete_node() method","commit_id":"9e5d90213e2532342b98938e2056b156d9a21832"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"42f7a342303e1414e7c7fb415d272f88b3b1736c","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                if node_show[\u0027power_state\u0027] not in (\u0027None\u0027, \u0027off\u0027):"},{"line_number":181,"context_line":"                    self.ironic(\u0027node-set-power-state\u0027,"},{"line_number":182,"context_line":"                                params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":183,"context_line":"                self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"                node_list_uuid \u003d self.get_nodes_uuids_from_node_list()"},{"line_number":186,"context_line":"                if node_id in node_list_uuid:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_e220e74b","line":183,"range":{"start_line":183,"start_character":21,"end_line":183,"end_character":27},"in_reply_to":"1a7b0d38_bbb68e3b","updated":"2015-12-23 13:14:08.000000000","message":"Actually we already have it\nhttps://review.openstack.org/#/c/251458/7/ironicclient/tests/functional/test_node_delete.py\n\nSee string 168 \u003d)\ndef delete_node(self, *nodes_id):","commit_id":"9e5d90213e2532342b98938e2056b156d9a21832"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"96b33b2a9789aa5fd814de3a3f5e4d6a67776db1","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                if node_show[\u0027power_state\u0027] not in (\u0027None\u0027, \u0027off\u0027):"},{"line_number":181,"context_line":"                    self.ironic(\u0027node-set-power-state\u0027,"},{"line_number":182,"context_line":"                                params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":183,"context_line":"                self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"                node_list_uuid \u003d self.get_nodes_uuids_from_node_list()"},{"line_number":186,"context_line":"                if node_id in node_list_uuid:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_7d79f692","line":183,"range":{"start_line":183,"start_character":21,"end_line":183,"end_character":27},"in_reply_to":"1a7b0d38_e220e74b","updated":"2015-12-23 13:28:18.000000000","message":"I\u0027ve got you point:\nyou want to Ironic delete multiple nodes in the same time \n\u0027ironic node-delete node1, node2, node3\u0027. I\u0027ll fix it.","commit_id":"9e5d90213e2532342b98938e2056b156d9a21832"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1faf25ac21bc1b5305431c88ac6dff9bed260238","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"from tempest_lib import exceptions"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six.moves.configparser as config_parser"},{"line_number":19,"context_line":"from tempest_lib.cli import base"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_8f746536","line":16,"updated":"2016-02-23 11:13:24.000000000","message":"this is incorrect, tempest_lib is a 3rdparty library","commit_id":"fd269774ebb688a6f0d83e275770ab0330cff7f6"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"652d30b82a592be65c79e9b909688d3ef00c43c1","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"from tempest_lib import exceptions"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six.moves.configparser as config_parser"},{"line_number":19,"context_line":"from tempest_lib.cli import base"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_e979a683","line":16,"in_reply_to":"bae84128_8f746536","updated":"2016-02-23 14:14:09.000000000","message":"Done","commit_id":"fd269774ebb688a6f0d83e275770ab0330cff7f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1faf25ac21bc1b5305431c88ac6dff9bed260238","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        self.assertNotIn(\u0027False\u0027, [x[\u0027Result\u0027] for x in node_validate])"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def delete_node(self, nodes_ids_names, checks\u003d\u0027True\u0027):"},{"line_number":170,"context_line":"        \"\"\"Delete node method works only with fake driver."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        :param nodes_id: nodes uuids"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_6f712144","line":169,"updated":"2016-02-23 11:13:24.000000000","message":"why not use boolean value directly? also I\u0027d call it something like ignore_exceptions","commit_id":"fd269774ebb688a6f0d83e275770ab0330cff7f6"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"652d30b82a592be65c79e9b909688d3ef00c43c1","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        self.assertNotIn(\u0027False\u0027, [x[\u0027Result\u0027] for x in node_validate])"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def delete_node(self, nodes_ids_names, checks\u003d\u0027True\u0027):"},{"line_number":170,"context_line":"        \"\"\"Delete node method works only with fake driver."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        :param nodes_id: nodes uuids"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_69fab644","line":169,"in_reply_to":"bae84128_6f712144","updated":"2016-02-23 14:14:09.000000000","message":"Done","commit_id":"fd269774ebb688a6f0d83e275770ab0330cff7f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1faf25ac21bc1b5305431c88ac6dff9bed260238","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        try:"},{"line_number":179,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnodes_ids_names)"},{"line_number":180,"context_line":"        except exceptions.CommandFailed:"},{"line_number":181,"context_line":"            return"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_cf902d46","line":179,"updated":"2016-02-23 11:13:24.000000000","message":"this is a different version from line 175. I suggest we don\u0027t copy-paste it, instead just reraise exception in the \u0027except\u0027 block, if ignore_exceptions is False","commit_id":"fd269774ebb688a6f0d83e275770ab0330cff7f6"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"652d30b82a592be65c79e9b909688d3ef00c43c1","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        try:"},{"line_number":179,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnodes_ids_names)"},{"line_number":180,"context_line":"        except exceptions.CommandFailed:"},{"line_number":181,"context_line":"            return"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_2979cec8","line":179,"in_reply_to":"bae84128_cf902d46","updated":"2016-02-23 14:14:09.000000000","message":"Done","commit_id":"fd269774ebb688a6f0d83e275770ab0330cff7f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1faf25ac21bc1b5305431c88ac6dff9bed260238","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        try:"},{"line_number":179,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnodes_ids_names)"},{"line_number":180,"context_line":"        except exceptions.CommandFailed:"},{"line_number":181,"context_line":"            return"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"},{"line_number":184,"context_line":"        node \u003d self.ironic(\u0027node-create\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_af95e933","line":181,"updated":"2016-02-23 11:13:24.000000000","message":"lets return the exception here, so that we can verify it on the caller side","commit_id":"fd269774ebb688a6f0d83e275770ab0330cff7f6"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"652d30b82a592be65c79e9b909688d3ef00c43c1","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        try:"},{"line_number":179,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnodes_ids_names)"},{"line_number":180,"context_line":"        except exceptions.CommandFailed:"},{"line_number":181,"context_line":"            return"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"},{"line_number":184,"context_line":"        node \u003d self.ironic(\u0027node-create\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_09768ad6","line":181,"in_reply_to":"bae84128_af95e933","updated":"2016-02-23 14:14:09.000000000","message":"Done","commit_id":"fd269774ebb688a6f0d83e275770ab0330cff7f6"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"c2e7f357b5f0205efaff4d57ab96df4ecd8e2968","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        self.assertNotIn(\u0027False\u0027, [x[\u0027Result\u0027] for x in node_validate])"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def delete_node(self, nodes_ids_names, ignore_exceptions\u003dTrue):"},{"line_number":170,"context_line":"        \"\"\"Delete node method works only with fake driver."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        :param nodes_id: nodes uuids"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_47dd19df","line":169,"updated":"2016-02-23 14:41:32.000000000","message":"Also seems default should be False, True is potentially may hide bugs imo","commit_id":"689c0caa8f01a734eda0576825cbf886bd0e809e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"c2d863e20b3a5bff6f568e737cc050738e028bf3","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        self.assertNotIn(\u0027False\u0027, [x[\u0027Result\u0027] for x in node_validate])"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def delete_node(self, nodes_ids_names, ignore_exceptions\u003dTrue):"},{"line_number":170,"context_line":"        \"\"\"Delete node method works only with fake driver."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        :param nodes_id: nodes uuids"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_a4417cab","line":169,"in_reply_to":"bae84128_47dd19df","updated":"2016-02-23 16:06:17.000000000","message":"Done","commit_id":"689c0caa8f01a734eda0576825cbf886bd0e809e"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"c2e7f357b5f0205efaff4d57ab96df4ecd8e2968","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnodes_ids_names)"},{"line_number":176,"context_line":"        except exceptions.CommandFailed as e:"},{"line_number":177,"context_line":"            if not ignore_exceptions:"},{"line_number":178,"context_line":"                raise e"},{"line_number":179,"context_line":"            return"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_c705a97a","line":178,"range":{"start_line":178,"start_character":16,"end_line":178,"end_character":23},"updated":"2016-02-23 14:41:32.000000000","message":"just `raise` please w/o e, you need simple re-raise, in your case new exception is created","commit_id":"689c0caa8f01a734eda0576825cbf886bd0e809e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"c2d863e20b3a5bff6f568e737cc050738e028bf3","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnodes_ids_names)"},{"line_number":176,"context_line":"        except exceptions.CommandFailed as e:"},{"line_number":177,"context_line":"            if not ignore_exceptions:"},{"line_number":178,"context_line":"                raise e"},{"line_number":179,"context_line":"            return"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_4438703d","line":178,"range":{"start_line":178,"start_character":16,"end_line":178,"end_character":23},"in_reply_to":"bae84128_c705a97a","updated":"2016-02-23 16:06:17.000000000","message":"Done","commit_id":"689c0caa8f01a734eda0576825cbf886bd0e809e"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"c2e7f357b5f0205efaff4d57ab96df4ecd8e2968","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        except exceptions.CommandFailed as e:"},{"line_number":177,"context_line":"            if not ignore_exceptions:"},{"line_number":178,"context_line":"                raise e"},{"line_number":179,"context_line":"            return"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"},{"line_number":182,"context_line":"        node \u003d self.ironic(\u0027node-create\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_0797913a","line":179,"range":{"start_line":179,"start_character":12,"end_line":179,"end_character":18},"updated":"2016-02-23 14:41:32.000000000","message":"return is not needed","commit_id":"689c0caa8f01a734eda0576825cbf886bd0e809e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"857dbb0913b7ef7fef5c9633646ee4468e627ce9","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        except exceptions.CommandFailed as e:"},{"line_number":177,"context_line":"            if not ignore_exceptions:"},{"line_number":178,"context_line":"                raise e"},{"line_number":179,"context_line":"            return"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"},{"line_number":182,"context_line":"        node \u003d self.ironic(\u0027node-create\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_24144c9e","line":179,"range":{"start_line":179,"start_character":12,"end_line":179,"end_character":18},"in_reply_to":"bae84128_0797913a","updated":"2016-02-23 16:06:30.000000000","message":"Done","commit_id":"689c0caa8f01a734eda0576825cbf886bd0e809e"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"749043f5d4414eb355ec24020f9d3108ee956c29","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    def delete_node(self, nodes_ids_names, ignore_exceptions\u003dFalse):"},{"line_number":170,"context_line":"        \"\"\"Delete node method works only with fake driver."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        :param nodes_id: nodes uuids"},{"line_number":173,"context_line":"        \"\"\""},{"line_number":174,"context_line":"        try:"},{"line_number":175,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnodes_ids_names)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9aed3d3a_aff3a509","line":172,"range":{"start_line":172,"start_character":9,"end_line":172,"end_character":36},"updated":"2016-02-26 06:35:31.000000000","message":"This is not the parameter used. TMU here the nodes_ids_names represents the name or uuid of a node, so how about:\n\n:param node_ident: the UUID or logical name of a node.","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"0106805ba104965e925d40fd2731dab87294f702","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    def delete_node(self, nodes_ids_names, ignore_exceptions\u003dFalse):"},{"line_number":170,"context_line":"        \"\"\"Delete node method works only with fake driver."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        :param nodes_id: nodes uuids"},{"line_number":173,"context_line":"        \"\"\""},{"line_number":174,"context_line":"        try:"},{"line_number":175,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnodes_ids_names)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_ed3f91d4","line":172,"range":{"start_line":172,"start_character":9,"end_line":172,"end_character":36},"in_reply_to":"9aed3d3a_aff3a509","updated":"2016-03-01 12:17:45.000000000","message":"Done","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b8a0592c73a07e83b5ded00823f36a1799a830f2","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            params\u003d\u0027{0} {1} {2}\u0027.format(chassis_id, operation, params))"},{"line_number":279,"context_line":"        return utils.get_dict_from_output(updated_chassis)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def delete_port(self, port_id):"},{"line_number":282,"context_line":"        port_list_uuid \u003d self.get_port_uuids_from_port_list()"},{"line_number":283,"context_line":"        if port_id in port_list_uuid:"},{"line_number":284,"context_line":"            self.ironic(\u0027port-delete\u0027, params\u003dport_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bae84128_92b51d80","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":19},"updated":"2016-02-25 11:13:04.000000000","message":"looks like you have 2 copy of port methods: https://review.openstack.org/#/c/259354/10/ironicclient/tests/functional/base.py\n\nPlease remove one, and make patches depended","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"749043f5d4414eb355ec24020f9d3108ee956c29","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            params\u003d\u0027{0} {1} {2}\u0027.format(chassis_id, operation, params))"},{"line_number":279,"context_line":"        return utils.get_dict_from_output(updated_chassis)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def delete_port(self, port_id):"},{"line_number":282,"context_line":"        port_list_uuid \u003d self.get_port_uuids_from_port_list()"},{"line_number":283,"context_line":"        if port_id in port_list_uuid:"},{"line_number":284,"context_line":"            self.ironic(\u0027port-delete\u0027, params\u003dport_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9aed3d3a_0fbc5104","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":19},"in_reply_to":"bae84128_92b51d80","updated":"2016-02-26 06:35:31.000000000","message":"++","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"982a213dd60ea3f900c816938654bef232a6f294","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        node_list \u003d self.list_nodes()"},{"line_number":206,"context_line":"        return [node[\u0027UUID\u0027] for node in node_list]"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def get_nodes_names_from_node_list(self):"},{"line_number":209,"context_line":"        node_list \u003d self.list_nodes()"},{"line_number":210,"context_line":"        return [node[\u0027Name\u0027] for node in node_list]"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7af24918_998d6c7e","line":208,"updated":"2016-03-01 13:40:31.000000000","message":"s/_from_node_list//","commit_id":"c3fc5db91e2ada37487c5cc23fd283bbeb7876dd"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"5600b285befb71437849c78a2f331924d6b9cdd7","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        node_list \u003d self.list_nodes()"},{"line_number":206,"context_line":"        return [node[\u0027UUID\u0027] for node in node_list]"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def get_nodes_names_from_node_list(self):"},{"line_number":209,"context_line":"        node_list \u003d self.list_nodes()"},{"line_number":210,"context_line":"        return [node[\u0027Name\u0027] for node in node_list]"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7af24918_16d4d7ba","line":208,"in_reply_to":"7af24918_998d6c7e","updated":"2016-03-03 17:32:34.000000000","message":"Done","commit_id":"c3fc5db91e2ada37487c5cc23fd283bbeb7876dd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"982a213dd60ea3f900c816938654bef232a6f294","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                                .format(port_id, params))"},{"line_number":311,"context_line":"        return utils.get_dict_from_output(port_show)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def get_port_uuids_from_port_list(self):"},{"line_number":314,"context_line":"        port_list \u003d self.list_ports()"},{"line_number":315,"context_line":"        return [x[\u0027UUID\u0027] for x in port_list]"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7af24918_f9e8f018","line":313,"updated":"2016-03-01 13:40:31.000000000","message":"ditto","commit_id":"c3fc5db91e2ada37487c5cc23fd283bbeb7876dd"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"25bd5efebf70cb2649ba6b4a7a942cd20170ff22","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                                .format(port_id, params))"},{"line_number":311,"context_line":"        return utils.get_dict_from_output(port_show)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def get_port_uuids_from_port_list(self):"},{"line_number":314,"context_line":"        port_list \u003d self.list_ports()"},{"line_number":315,"context_line":"        return [x[\u0027UUID\u0027] for x in port_list]"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7af24918_89b285e3","line":313,"in_reply_to":"7af24918_f9e8f018","updated":"2016-03-03 17:46:31.000000000","message":"Done in https://review.openstack.org/#/c/240944/","commit_id":"c3fc5db91e2ada37487c5cc23fd283bbeb7876dd"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"dfda90fc703cc23fbe60b6ab02bc681f7f1e6f3e","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            self.fail(\u0027Ironic port has not been created!\u0027)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        port \u003d utils.get_dict_from_output(port)"},{"line_number":320,"context_line":"        # NOTE(sturivnyi): no need to cleanup port because it will be deleted"},{"line_number":321,"context_line":"        # with associated node"},{"line_number":322,"context_line":"        return port"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3afc51ec_cd1b647f","line":320,"updated":"2016-03-14 13:55:01.000000000","message":"This should not be here - there is a separate change for it.","commit_id":"26f3d97fd8cfc4b09a2f94d0859489233880e296"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3195911e0870b14c0be2a878ea8ffb4404be38e5","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027chassis-update\u0027,"},{"line_number":296,"context_line":"            params\u003d\u0027{0} {1} {2}\u0027.format(chassis_id, operation, params))"},{"line_number":297,"context_line":"        return utils.get_dict_from_output(updated_chassis)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def delete_port(self, port_id):"},{"line_number":300,"context_line":"        port_list_uuid \u003d self.get_port_uuids_from_port_list()"},{"line_number":301,"context_line":"        if port_id in port_list_uuid:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_9ff5decc","line":298,"updated":"2016-03-30 14:38:34.000000000","message":"Is those methods are used in this patch?","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4178df00eeb2b0a234ffc2bde2705e6108f85718","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027chassis-update\u0027,"},{"line_number":296,"context_line":"            params\u003d\u0027{0} {1} {2}\u0027.format(chassis_id, operation, params))"},{"line_number":297,"context_line":"        return utils.get_dict_from_output(updated_chassis)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def delete_port(self, port_id):"},{"line_number":300,"context_line":"        port_list_uuid \u003d self.get_port_uuids_from_port_list()"},{"line_number":301,"context_line":"        if port_id in port_list_uuid:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_d9bc6108","line":298,"in_reply_to":"ba0121b8_9ff5decc","updated":"2016-03-31 12:44:35.000000000","message":"++, this belongs to ports, please be more accurate when preparing changes, I see such things often in your patches.","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"08e2de1b20b77d498ee269dce68ed96dc6c3adde","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027chassis-update\u0027,"},{"line_number":296,"context_line":"            params\u003d\u0027{0} {1} {2}\u0027.format(chassis_id, operation, params))"},{"line_number":297,"context_line":"        return utils.get_dict_from_output(updated_chassis)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def delete_port(self, port_id):"},{"line_number":300,"context_line":"        port_list_uuid \u003d self.get_port_uuids_from_port_list()"},{"line_number":301,"context_line":"        if port_id in port_list_uuid:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_fe5af5f0","line":298,"in_reply_to":"ba0121b8_9ff5decc","updated":"2016-03-31 13:10:49.000000000","message":"Done","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"1d94933ee46c372d0b8c0627c6109c7e264b54f4","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027chassis-update\u0027,"},{"line_number":296,"context_line":"            params\u003d\u0027{0} {1} {2}\u0027.format(chassis_id, operation, params))"},{"line_number":297,"context_line":"        return utils.get_dict_from_output(updated_chassis)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def delete_port(self, port_id):"},{"line_number":300,"context_line":"        port_list_uuid \u003d self.get_port_uuids_from_port_list()"},{"line_number":301,"context_line":"        if port_id in port_list_uuid:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_36cf5f2a","line":298,"in_reply_to":"ba0121b8_d9bc6108","updated":"2016-03-31 15:18:39.000000000","message":"Done","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"753dae7fca971e9a94daef076320c1beb3a4ea20","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        :type flags: string"},{"line_number":128,"context_line":"        :param params: any optional positional args to use"},{"line_number":129,"context_line":"        :type params: string"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":132,"context_line":"        if hasattr(self, \u0027os_auth_token\u0027):"},{"line_number":133,"context_line":"            return self._cmd_no_auth(\u0027ironic\u0027, action, flags, params)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_ab46e620","line":130,"range":{"start_line":130,"start_character":8,"end_line":130,"end_character":11},"updated":"2016-04-18 07:15:18.000000000","message":"nit: :returns: is missing","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c59a6afe44689fdea8e417398854ddec8f8cba34","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        :type params: string"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":132,"context_line":"        if hasattr(self, \u0027os_auth_token\u0027):"},{"line_number":133,"context_line":"            return self._cmd_no_auth(\u0027ironic\u0027, action, flags, params)"},{"line_number":134,"context_line":"        else:"},{"line_number":135,"context_line":"            for keystone_object in \u0027user\u0027, \u0027project\u0027:"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_7dd77abf","line":132,"updated":"2016-07-19 08:21:32.000000000","message":"Why the try, except block is moved out from this function?\nIn this case all calls of self.ironic(...) should be wrapped by try except like you did it on L193. For example in L199,210","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"219077fd7e703c0d30ea06a559fa56aaae558b45","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        :type params: string"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":132,"context_line":"        if hasattr(self, \u0027os_auth_token\u0027):"},{"line_number":133,"context_line":"            return self._cmd_no_auth(\u0027ironic\u0027, action, flags, params)"},{"line_number":134,"context_line":"        else:"},{"line_number":135,"context_line":"            for keystone_object in \u0027user\u0027, \u0027project\u0027:"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_acb522ef","line":132,"in_reply_to":"dada55a8_7dd77abf","updated":"2016-07-19 17:27:34.000000000","message":"+1 good catch Vasyl","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"bebfc4efb9d59c5d8a4613fd13ba0920ff5c7237","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        :type params: string"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        flags +\u003d \u0027 --os-endpoint-type publicURL\u0027"},{"line_number":132,"context_line":"        if hasattr(self, \u0027os_auth_token\u0027):"},{"line_number":133,"context_line":"            return self._cmd_no_auth(\u0027ironic\u0027, action, flags, params)"},{"line_number":134,"context_line":"        else:"},{"line_number":135,"context_line":"            for keystone_object in \u0027user\u0027, \u0027project\u0027:"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_3e4ac126","line":132,"in_reply_to":"dada55a8_7dd77abf","updated":"2016-07-20 15:58:31.000000000","message":"Done","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"219077fd7e703c0d30ea06a559fa56aaae558b45","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        :param node_ident: the UUID or logical name of a node."},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        try:"},{"line_number":193,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnode_ident)"},{"line_number":194,"context_line":"        except exceptions.CommandFailed:"},{"line_number":195,"context_line":"            if not ignore_exceptions:"},{"line_number":196,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_4c1c6677","line":193,"range":{"start_line":193,"start_character":12,"end_line":193,"end_character":57},"updated":"2016-07-19 17:27:34.000000000","message":"Why did we remove the provision / power state handling?","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"bebfc4efb9d59c5d8a4613fd13ba0920ff5c7237","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        :param node_ident: the UUID or logical name of a node."},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        try:"},{"line_number":193,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnode_ident)"},{"line_number":194,"context_line":"        except exceptions.CommandFailed:"},{"line_number":195,"context_line":"            if not ignore_exceptions:"},{"line_number":196,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_354ae426","line":193,"range":{"start_line":193,"start_character":12,"end_line":193,"end_character":57},"in_reply_to":"dada55a8_4c1c6677","updated":"2016-07-20 15:58:31.000000000","message":"Done","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c59a6afe44689fdea8e417398854ddec8f8cba34","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self.fail(\u0027Ironic node has not been created!\u0027)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        node \u003d utils.get_dict_from_output(node)"},{"line_number":206,"context_line":"        self.addCleanup(self.delete_node, node[\u0027uuid\u0027], ignore_exceptions\u003dTrue)"},{"line_number":207,"context_line":"        return node"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def show_node(self, node_id, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_bd7d72b3","line":206,"updated":"2016-07-19 08:21:32.000000000","message":"Why it was changed? It seems it is not related to changes mentioned in commit message. If we want ignore exceptions during cleanup it should be done for all addCleanup calls?","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"bebfc4efb9d59c5d8a4613fd13ba0920ff5c7237","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self.fail(\u0027Ironic node has not been created!\u0027)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        node \u003d utils.get_dict_from_output(node)"},{"line_number":206,"context_line":"        self.addCleanup(self.delete_node, node[\u0027uuid\u0027], ignore_exceptions\u003dTrue)"},{"line_number":207,"context_line":"        return node"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def show_node(self, node_id, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_55fb18c1","line":206,"in_reply_to":"dada55a8_bd7d72b3","updated":"2016-07-20 15:58:31.000000000","message":"Done","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"9eb5bb855a3686c3a369c807a32d709b738b244e","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                            params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":205,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"            node_list_uuid \u003d self.get_nodes_uuids_from_node_list()"},{"line_number":208,"context_line":"            if node_id in node_list_uuid:"},{"line_number":209,"context_line":"                self.fail(\u0027Ironic node {0} has not been deleted!\u0027"},{"line_number":210,"context_line":"                          .format(node_id))"}],"source_content_type":"text/x-python","patch_set":31,"id":"dada55a8_6266212b","line":207,"range":{"start_line":207,"start_character":34,"end_line":207,"end_character":64},"updated":"2016-07-21 15:22:41.000000000","message":"I think this was renamed to \"get_nodes_uuids\"","commit_id":"c2a29c4e1e387872aa647642bed6aeb47c375920"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"46c7182872283cbae9919a738ae38898b46c76b5","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                            params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":205,"context_line":"            self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"            node_list_uuid \u003d self.get_nodes_uuids_from_node_list()"},{"line_number":208,"context_line":"            if node_id in node_list_uuid:"},{"line_number":209,"context_line":"                self.fail(\u0027Ironic node {0} has not been deleted!\u0027"},{"line_number":210,"context_line":"                          .format(node_id))"}],"source_content_type":"text/x-python","patch_set":31,"id":"dada55a8_a3281a9b","line":207,"range":{"start_line":207,"start_character":34,"end_line":207,"end_character":64},"in_reply_to":"dada55a8_6266212b","updated":"2016-07-21 16:20:41.000000000","message":"Chris, thanks for catch! \nBTW, i see that this method used twice in already merged tests. Is it better to to save this long name intact or update it in other places for shorter and more usable name?","commit_id":"c2a29c4e1e387872aa647642bed6aeb47c375920"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"62753fe6c5ea21a3b41d867651cfad01c6170721","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        object_params \u003d ast.literal_eval(object_params)"},{"line_number":200,"context_line":"        self.assertEqual(params, object_params)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete_node(self, node_id, params\u003d\u0027\u0027):"},{"line_number":203,"context_line":"        \"\"\"Delete node method works only with fake driver."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        :param node_id: node uuid"}],"source_content_type":"text/x-python","patch_set":43,"id":"1ac06dbe_43c45491","line":202,"updated":"2016-08-25 12:02:17.000000000","message":"I don\u0027t quite get the difference between delete_node and _delete_node. Why do you have to split them, and _delete_node is not called from delete_node?","commit_id":"4d0ca7cdd8029e65a1ac6fe422a575b692b840f6"},{"author":{"_account_id":20675,"name":"Sofiia Andriichenko","email":"sofiia.andriichenko@gmail.com","username":"SofiiaAndriichenko"},"change_message_id":"2edee7720a2f9007682f6f767b40eec05f46e7b4","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        object_params \u003d ast.literal_eval(object_params)"},{"line_number":200,"context_line":"        self.assertEqual(params, object_params)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete_node(self, node_id, params\u003d\u0027\u0027):"},{"line_number":203,"context_line":"        \"\"\"Delete node method works only with fake driver."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        :param node_id: node uuid"}],"source_content_type":"text/x-python","patch_set":43,"id":"fa7ab95a_d5e76ce2","line":202,"in_reply_to":"1ac06dbe_43c45491","updated":"2016-08-26 14:22:25.000000000","message":"We use method with underscore for cleanup. It sets node state to able to delete it.\nOn other hand we need to check exceptions therefore we us method delete_node","commit_id":"4d0ca7cdd8029e65a1ac6fe422a575b692b840f6"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"545d864ca857923aab304dddcd920c7964fbbffb","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                self.ironic(\u0027node-set-power-state\u0027,"},{"line_number":225,"context_line":"                            params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            node_list_uuid \u003d self.get_nodes_uuids()"},{"line_number":228,"context_line":"            if node_id in node_list_uuid:"},{"line_number":229,"context_line":"                self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_bc435e41","line":228,"range":{"start_line":227,"start_character":12,"end_line":228,"end_character":41},"updated":"2016-08-29 12:37:01.000000000","message":"Not sure why do you do this, you already checked that it is in list_nodes(), after moving of node-delete down here these 2 lines are not needed.","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"8c138eed9707c6efa899ce07597bd76eab07b3d8","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                self.ironic(\u0027node-set-power-state\u0027,"},{"line_number":225,"context_line":"                            params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            node_list_uuid \u003d self.get_nodes_uuids()"},{"line_number":228,"context_line":"            if node_id in node_list_uuid:"},{"line_number":229,"context_line":"                self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_ec008904","line":228,"range":{"start_line":227,"start_character":12,"end_line":228,"end_character":41},"in_reply_to":"fa7ab95a_604cc09e","updated":"2016-08-30 12:12:16.000000000","message":"Er, what cleanup? There is no cleanup in either _delete_node or delete_node.\n\nOn l216 you\u0027ve got the list of nodes. Then you\u0027ve ensured that the node is in the required provision and power state. Why after that you list the nodes again? Neither node-set-provision-state nor node-set-power-state can delete the node. If it was deleted by some other test, it is a bug in test and should not be hidden, as tests should clean up only their own resources.","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"55172b5d0a6394edfa698c26145b471caadbe282","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                self.ironic(\u0027node-set-power-state\u0027,"},{"line_number":225,"context_line":"                            params\u003d\u0027{0} off\u0027.format(node_id))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            node_list_uuid \u003d self.get_nodes_uuids()"},{"line_number":228,"context_line":"            if node_id in node_list_uuid:"},{"line_number":229,"context_line":"                self.ironic(\u0027node-delete\u0027, params\u003dnode_id)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def create_node(self, driver\u003d\u0027fake\u0027, params\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_604cc09e","line":228,"range":{"start_line":227,"start_character":12,"end_line":228,"end_character":41},"in_reply_to":"fa7ab95a_bc435e41","updated":"2016-08-30 11:54:45.000000000","message":"This lines are needed. Because I use them for cleanup.","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"76c0c275c3b7ac03534e508b093a2cf3e319b75b","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    def _delete_node(self, node_id):"},{"line_number":212,"context_line":"        \"\"\"Delete node internal method works only with fake driver."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        :param node_id: node uuid"},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        node_list \u003d self.list_nodes()"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"fa7ab95a_4c8f1ccc","line":214,"range":{"start_line":214,"start_character":24,"end_line":214,"end_character":33},"updated":"2016-09-01 12:20:06.000000000","message":"It seems it should work also with node name.","commit_id":"467d0de676dd7f5557fac8dfe3a9e6b37be59d1e"},{"author":{"_account_id":22724,"name":"Galyna Zholtkevych","email":"galynazholtkevych1991@gmail.com","username":"gzholtkevych"},"change_message_id":"88996398b008e62f5f0ed1057b368e1c19ae5afa","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        self.ironic(\u0027node-delete\u0027, params\u003d\u0027{0} {1}\u0027"},{"line_number":202,"context_line":"                    .format(node_id, params))"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _delete_node(self, node_id):"},{"line_number":205,"context_line":"        \"\"\"Delete node internal method works only with fake driver."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        :param node_id: node uuid"},{"line_number":208,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":47,"id":"1a6eadb0_2f24cb0b","line":205,"range":{"start_line":204,"start_character":4,"end_line":205,"end_character":67},"updated":"2016-12-13 13:21:57.000000000","message":"Why do you need specific internal method and do not call approapriate operations just in delete_node method","commit_id":"30512108e365a999e81cf6625a9a33eaa42395f0"}],"ironicclient/tests/functional/test_node.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        node_show \u003d self.show_node(self.node[\u0027uuid\u0027])"},{"line_number":46,"context_line":"        self.assertEqual(self.node[\u0027uuid\u0027], node_show[\u0027uuid\u0027])"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_node_delete(self):"},{"line_number":49,"context_line":"        \"\"\"Test steps:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        1) create node"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_124b992c","line":48,"updated":"2016-05-04 14:46:47.000000000","message":"Is it clear what the separation is between what goes in this test_node.py file and what goes in test_node_delete.py file?","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"db025c5183b4e25337811e592774f1999343d59b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        node_show \u003d self.show_node(self.node[\u0027uuid\u0027])"},{"line_number":46,"context_line":"        self.assertEqual(self.node[\u0027uuid\u0027], node_show[\u0027uuid\u0027])"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_node_delete(self):"},{"line_number":49,"context_line":"        \"\"\"Test steps:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        1) create node"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_1a3c68e1","line":48,"in_reply_to":"1a122d0e_124b992c","updated":"2016-05-19 12:08:11.000000000","message":"Hello, Ruby! File \"test_node.py\" is intended for general CRUD operations with nodes. And \"test_node_delete.py\" is for comprehensive testing of node-delete subcommand including negative tests.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"}],"ironicclient/tests/functional/test_node_delete.py":[{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import ironicclient.tests.functional.utils as utils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NodeDeleteTestIronicClient(base.FunctionalTestBase):"},{"line_number":20,"context_line":"    \"\"\"Tests for testing node-delete command."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    Tests for the Ironic CLI node-delete command that checks that node can be"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_f96a54b4","line":19,"updated":"2015-12-03 06:27:12.000000000","message":"A question here: Besides adding tests of deleting several nodes, should the tests of deleting single node be added?","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import ironicclient.tests.functional.utils as utils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NodeDeleteTestIronicClient(base.FunctionalTestBase):"},{"line_number":20,"context_line":"    \"\"\"Tests for testing node-delete command."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    Tests for the Ironic CLI node-delete command that checks that node can be"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_9e34dede","line":19,"in_reply_to":"9a8ffd7b_f96a54b4","updated":"2015-12-04 15:02:36.000000000","message":"Test_node_delete implemented in test_node.py module and it has been merged to master.\nironicclient/tests/functional/test_node.py","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    Tests for the Ironic CLI node-delete command that checks that node can be"},{"line_number":23,"context_line":"    deleted by Name by UUID and can be deleted several nodes using:"},{"line_number":24,"context_line":"        ironic node-delete \u003cnode\u003e [\u003cnode\u003e ...]"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_f6cd8330","line":24,"updated":"2015-12-03 06:27:12.000000000","message":"A little twisted, please check the comment in commit message.","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    Tests for the Ironic CLI node-delete command that checks that node can be"},{"line_number":23,"context_line":"    deleted by Name by UUID and can be deleted several nodes using:"},{"line_number":24,"context_line":"        ironic node-delete \u003cnode\u003e [\u003cnode\u003e ...]"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_03009533","line":24,"in_reply_to":"9a8ffd7b_f6cd8330","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                self.create_node(params\u003d\u0027-n {0}\u0027"},{"line_number":33,"context_line":"                                 .format(utils.generate_name())))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_delete_nodes_by_UUID(self):"},{"line_number":36,"context_line":"        \"\"\"Test steps:"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        1) create 5 nodes"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_f6b26395","line":35,"updated":"2015-12-03 06:27:12.000000000","message":"s/test_delete_nodes_by_UUID/test_delete_nodes_by_uuid/","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                self.create_node(params\u003d\u0027-n {0}\u0027"},{"line_number":33,"context_line":"                                 .format(utils.generate_name())))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_delete_nodes_by_UUID(self):"},{"line_number":36,"context_line":"        \"\"\"Test steps:"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        1) create 5 nodes"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_43a45d56","line":35,"in_reply_to":"9a8ffd7b_f6b26395","updated":"2015-12-04 15:02:36.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        created_nodes_uuids \u003d utils.get_nodes_values("},{"line_number":45,"context_line":"            \u0027uuid\u0027, self.list_of_created_nodes)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.delete_node(*created_nodes_uuids)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_39277cb7","line":47,"updated":"2015-12-03 06:27:12.000000000","message":"Is this line duplicated of line #43?","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        created_nodes_uuids \u003d utils.get_nodes_values("},{"line_number":45,"context_line":"            \u0027uuid\u0027, self.list_of_created_nodes)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.delete_node(*created_nodes_uuids)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_a358a157","line":47,"in_reply_to":"9a8ffd7b_39277cb7","updated":"2015-12-04 15:02:36.000000000","message":"Fixed","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"f8653fd32b4c223d7559b34ecd0167ce15ffb899","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        created_nodes_names \u003d utils.get_nodes_values("},{"line_number":63,"context_line":"            \u0027name\u0027, self.list_of_created_nodes)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.delete_node(*created_nodes_names)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_b93b6cd0","line":65,"updated":"2015-12-03 06:27:12.000000000","message":"Is this line duplicated of line #61?","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"27cbec7cbb116ce59a5fd54f724a0d580900602b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        created_nodes_names \u003d utils.get_nodes_values("},{"line_number":63,"context_line":"            \u0027name\u0027, self.list_of_created_nodes)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.delete_node(*created_nodes_names)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_8336c501","line":65,"in_reply_to":"9a8ffd7b_b93b6cd0","updated":"2015-12-04 15:02:36.000000000","message":"Fixed","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"cb840038f6806a3d8f3292edc47ab26a57200b60","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.delete_node(*created_nodes_uuids)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self.assertCreatedNodesNotInListNodes(self.list_of_created_nodes)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_8c2a317d","line":49,"updated":"2015-12-07 07:37:28.000000000","message":"Can we add more negative testing cases to cover the error behaviors? For example, the non-existing uuid case, etc.","commit_id":"43e6a2c994684a9a00e35e6f7f8ec150bc1aec9b"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"c0330ebe7ec7515aa63e094918c430fde5b70085","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.delete_node(*created_nodes_uuids)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self.assertCreatedNodesNotInListNodes(self.list_of_created_nodes)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_8be074ce","line":49,"in_reply_to":"7a740942_6d89ff25","updated":"2015-12-08 18:09:44.000000000","message":"I\u0027ve added negative test-cases. My point is that case when name of node has been changed it\u0027s part of another tests. We have the same error either delete node with non-existing uuid or delete renamed node with non-existing node name.","commit_id":"43e6a2c994684a9a00e35e6f7f8ec150bc1aec9b"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"700b0bfbc4fd9a429a3cd337ac58d9c9e5b1acfe","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.delete_node(*created_nodes_uuids)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self.assertCreatedNodesNotInListNodes(self.list_of_created_nodes)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_6d89ff25","line":49,"in_reply_to":"7a740942_8c2a317d","updated":"2015-12-07 09:16:54.000000000","message":"Agree, and what about add cases that the name of node is changed","commit_id":"43e6a2c994684a9a00e35e6f7f8ec150bc1aec9b"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"c0330ebe7ec7515aa63e094918c430fde5b70085","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.delete_node(*created_nodes_uuids)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self.assertCreatedNodesNotInListNodes(self.list_of_created_nodes)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_594d8998","line":49,"in_reply_to":"7a740942_8c2a317d","updated":"2015-12-08 18:09:44.000000000","message":"Done","commit_id":"43e6a2c994684a9a00e35e6f7f8ec150bc1aec9b"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"cb840038f6806a3d8f3292edc47ab26a57200b60","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.delete_node(*created_nodes_names)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.assertCreatedNodesNotInListNodes(self.list_of_created_nodes)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_2c58dd31","line":67,"updated":"2015-12-07 07:37:28.000000000","message":"ditto","commit_id":"43e6a2c994684a9a00e35e6f7f8ec150bc1aec9b"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"c0330ebe7ec7515aa63e094918c430fde5b70085","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.assertCreatedNodesInListNodes(self.list_of_created_nodes)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.delete_node(*created_nodes_names)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.assertCreatedNodesNotInListNodes(self.list_of_created_nodes)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_79508532","line":67,"in_reply_to":"7a740942_2c58dd31","updated":"2015-12-08 18:09:44.000000000","message":"Done","commit_id":"43e6a2c994684a9a00e35e6f7f8ec150bc1aec9b"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b8a0592c73a07e83b5ded00823f36a1799a830f2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            self.list_of_created_nodes.append("},{"line_number":34,"context_line":"                self.create_node(params\u003d\u0027-n {0}\u0027"},{"line_number":35,"context_line":"                                 .format(utils.generate_name())))"},{"line_number":36,"context_line":"        self.uuid_list_of_created_nodes \u003d \\"},{"line_number":37,"context_line":"            [node[\u0027uuid\u0027] for node in self.list_of_created_nodes]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _assertCreatedNodesInListNodes(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"bae84128_0d93b2fb","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":43},"updated":"2016-02-25 11:13:04.000000000","message":"nit: no need to keep 2 copy of nodes info, you can get uuid from list_of_created_nodes when it\u0027s meeded","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"0106805ba104965e925d40fd2731dab87294f702","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            self.list_of_created_nodes.append("},{"line_number":34,"context_line":"                self.create_node(params\u003d\u0027-n {0}\u0027"},{"line_number":35,"context_line":"                                 .format(utils.generate_name())))"},{"line_number":36,"context_line":"        self.uuid_list_of_created_nodes \u003d \\"},{"line_number":37,"context_line":"            [node[\u0027uuid\u0027] for node in self.list_of_created_nodes]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _assertCreatedNodesInListNodes(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_18995d6f","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":43},"in_reply_to":"bae84128_0d93b2fb","updated":"2016-03-01 12:17:45.000000000","message":"Done","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b8a0592c73a07e83b5ded00823f36a1799a830f2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def _assertCreatedNodesInListNodes(self):"},{"line_number":40,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes.\"\"\""},{"line_number":41,"context_line":"        for node_id in self.uuid_list_of_created_nodes:"},{"line_number":42,"context_line":"            self.assertIn(node_id, self.get_nodes_uuids_from_node_list())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _assertCreatedNodesNotInListNodes(self):"},{"line_number":45,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"bae84128_6d3fded6","line":42,"range":{"start_line":42,"start_character":40,"end_line":42,"end_character":70},"updated":"2016-02-25 11:13:04.000000000","message":"it\u0027s redundant to call ironic api in the loop","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"0106805ba104965e925d40fd2731dab87294f702","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def _assertCreatedNodesInListNodes(self):"},{"line_number":40,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes.\"\"\""},{"line_number":41,"context_line":"        for node_id in self.uuid_list_of_created_nodes:"},{"line_number":42,"context_line":"            self.assertIn(node_id, self.get_nodes_uuids_from_node_list())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _assertCreatedNodesNotInListNodes(self):"},{"line_number":45,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_18579d03","line":42,"range":{"start_line":42,"start_character":40,"end_line":42,"end_character":70},"in_reply_to":"bae84128_6d3fded6","updated":"2016-03-01 12:17:45.000000000","message":"Done","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b8a0592c73a07e83b5ded00823f36a1799a830f2","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def _assertCreatedNodesNotInListNodes(self):"},{"line_number":45,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes.\"\"\""},{"line_number":46,"context_line":"        for node_id in self.uuid_list_of_created_nodes:"},{"line_number":47,"context_line":"            self.assertNotIn(node_id, self.get_nodes_uuids_from_node_list())"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_delete_nodes_by_UUID(self):"},{"line_number":50,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":15,"id":"bae84128_ad21e6b6","line":47,"range":{"start_line":47,"start_character":43,"end_line":47,"end_character":73},"updated":"2016-02-25 11:13:04.000000000","message":"ditto","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"0106805ba104965e925d40fd2731dab87294f702","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def _assertCreatedNodesNotInListNodes(self):"},{"line_number":45,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes.\"\"\""},{"line_number":46,"context_line":"        for node_id in self.uuid_list_of_created_nodes:"},{"line_number":47,"context_line":"            self.assertNotIn(node_id, self.get_nodes_uuids_from_node_list())"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_delete_nodes_by_UUID(self):"},{"line_number":50,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_f85bd12c","line":47,"range":{"start_line":47,"start_character":43,"end_line":47,"end_character":73},"in_reply_to":"bae84128_ad21e6b6","updated":"2016-03-01 12:17:45.000000000","message":"Done","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"b8a0592c73a07e83b5ded00823f36a1799a830f2","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    Checks that node-delete command without parameters triggers to an error."},{"line_number":88,"context_line":"    \"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def setUp(self):"},{"line_number":91,"context_line":"        super(NodeDeleteNegativeTestIronicClient, self).setUp()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_negative_delete_non_exist_node(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"bae84128_c8125858","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":13},"updated":"2016-02-25 11:13:04.000000000","message":"nit; not needed","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"0106805ba104965e925d40fd2731dab87294f702","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    Checks that node-delete command without parameters triggers to an error."},{"line_number":88,"context_line":"    \"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def setUp(self):"},{"line_number":91,"context_line":"        super(NodeDeleteNegativeTestIronicClient, self).setUp()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_negative_delete_non_exist_node(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7af24918_b8bae9be","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":13},"in_reply_to":"bae84128_c8125858","updated":"2016-03-01 12:17:45.000000000","message":"Done","commit_id":"069c5a4e683787cc73bd60ed8281bf11d732216e"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"dfda90fc703cc23fbe60b6ab02bc681f7f1e6f3e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import ironicclient.tests.functional.utils as utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NodeDeleteTestIronicClient(base.FunctionalTestBase):"},{"line_number":22,"context_line":"    \"\"\"Tests for testing node-delete command."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Tests for the Ironic CLI node-delete command that checks that node can be"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afc51ec_e3c74f10","line":21,"updated":"2016-03-14 13:55:01.000000000","message":"It would also be good to test the case when e.g. 4 out of 5 nodes are deleted. This might be done the following way - you create 5 nodes, update one of them setting instance_uuid\u003d\u003csome value\u003e, save its uuid, then delete all 5 and check that only 4 were deleted.","commit_id":"26f3d97fd8cfc4b09a2f94d0859489233880e296"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"6158aff4a3c3ac8e5b67e091c3b57775a6f127c0","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.delete_node(names_of_created_nodes)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        self._assertCreatedNodesNotInListNodes()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"},{"line_number":84,"context_line":"    \"\"\"Negative tests for testing node-delete command."}],"source_content_type":"text/x-python","patch_set":18,"id":"fa0719c6_08dae8e7","line":81,"updated":"2016-03-24 09:33:28.000000000","message":"What about mixed test-case of node-delete test? I mean delete several nodes by ID and several by NAME in one step.","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"08e2de1b20b77d498ee269dce68ed96dc6c3adde","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.delete_node(names_of_created_nodes)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        self._assertCreatedNodesNotInListNodes()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"},{"line_number":84,"context_line":"    \"\"\"Negative tests for testing node-delete command."}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_7f325cf3","line":81,"in_reply_to":"fa0719c6_08dae8e7","updated":"2016-03-31 13:10:49.000000000","message":"Done","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"e5799e194971d87f923e95a37e10dba5a609d2cb","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        self._assertCreatedNodesNotInListNodes()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"},{"line_number":84,"context_line":"    \"\"\"Negative tests for testing node-delete command."},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa0719c6_2329cd9e","line":82,"updated":"2016-03-24 09:56:28.000000000","message":"it should work this way:\n$ ironic node-delete node fd0c5445-6b51-4489-a174-532bd51a278d\nDeleted node node\nDeleted node fd0c5445-6b51-4489-a174-532bd51a278d","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"08e2de1b20b77d498ee269dce68ed96dc6c3adde","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        self._assertCreatedNodesNotInListNodes()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"},{"line_number":84,"context_line":"    \"\"\"Negative tests for testing node-delete command."},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_bf4eb46c","line":82,"in_reply_to":"fa0719c6_2329cd9e","updated":"2016-03-31 13:10:49.000000000","message":"Done","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3195911e0870b14c0be2a878ea8ffb4404be38e5","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":100,"context_line":"                                ex_text,"},{"line_number":101,"context_line":"                                self.delete_node,"},{"line_number":102,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_negative_delete_node_without_parameters(self):"},{"line_number":105,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_9f1cbe14","line":102,"updated":"2016-03-30 14:38:34.000000000","message":"I would like to see negative test for deleting node by non existed name.","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"08e2de1b20b77d498ee269dce68ed96dc6c3adde","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":100,"context_line":"                                ex_text,"},{"line_number":101,"context_line":"                                self.delete_node,"},{"line_number":102,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_negative_delete_node_without_parameters(self):"},{"line_number":105,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_1f7b59f6","line":102,"in_reply_to":"ba0121b8_9f1cbe14","updated":"2016-03-31 13:10:49.000000000","message":"Done","commit_id":"c06d2b8e0e63e3146e388f2e61999e9b2e6e30a1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"22013b4f17691252216c9cd095ba36834a678494","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        1) execute command to delete non-exist node by node uuid"},{"line_number":131,"context_line":"        2) check that exception has been raised"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        #ex_text \u003d r\u0027Node .* could not be found\\. \\(HTTP 404\\)\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba0121b8_50fc9e71","line":130,"updated":"2016-03-31 13:54:05.000000000","message":"name","commit_id":"a8a9f8e7d9ce930e1d6c44a4cde2cab0975ab23e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"bfea20bc7442fa0be9eed8f30d26077712d9be52","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        1) execute command to delete non-exist node by node uuid"},{"line_number":131,"context_line":"        2) check that exception has been raised"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        #ex_text \u003d r\u0027Node .* could not be found\\. \\(HTTP 404\\)\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba0121b8_8250a5d5","line":130,"in_reply_to":"ba0121b8_50fc9e71","updated":"2016-04-01 10:39:41.000000000","message":"Done","commit_id":"a8a9f8e7d9ce930e1d6c44a4cde2cab0975ab23e"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"22013b4f17691252216c9cd095ba36834a678494","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        2) check that exception has been raised"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        #ex_text \u003d r\u0027Node .* could not be found\\. \\(HTTP 404\\)\u0027"},{"line_number":134,"context_line":"        ex_text \u003d (r\"Failed to delete node .*: \""},{"line_number":135,"context_line":"                   r\"Invalid input for field\\/attribute node_ident. \""},{"line_number":136,"context_line":"                   r\"Value: .*. \""},{"line_number":137,"context_line":"                   r\"unable to convert to uuid_or_name \\(HTTP 400\\)\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba0121b8_b0d6daee","line":134,"updated":"2016-03-31 13:54:05.000000000","message":"It should be node not found here. I guess the reason for this is that underscores are not allowed in node name. You could try test-ironic-node instead. Which leads to a suggestion to leave this test as one checking incorrect value passed to node-delete.","commit_id":"a8a9f8e7d9ce930e1d6c44a4cde2cab0975ab23e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"bfea20bc7442fa0be9eed8f30d26077712d9be52","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        2) check that exception has been raised"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        #ex_text \u003d r\u0027Node .* could not be found\\. \\(HTTP 404\\)\u0027"},{"line_number":134,"context_line":"        ex_text \u003d (r\"Failed to delete node .*: \""},{"line_number":135,"context_line":"                   r\"Invalid input for field\\/attribute node_ident. \""},{"line_number":136,"context_line":"                   r\"Value: .*. \""},{"line_number":137,"context_line":"                   r\"unable to convert to uuid_or_name \\(HTTP 400\\)\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba0121b8_a6579656","line":134,"in_reply_to":"ba0121b8_b0d6daee","updated":"2016-04-01 10:39:41.000000000","message":"Done","commit_id":"a8a9f8e7d9ce930e1d6c44a4cde2cab0975ab23e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                 .format(utils.generate_name())))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def assertCreatedNodesInListNodes(self):"},{"line_number":38,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes.\"\"\""},{"line_number":39,"context_line":"        nodes_uuids \u003d self.get_nodes_uuids()"},{"line_number":40,"context_line":"        for node_id in [node[\u0027uuid\u0027] for node in self.list_of_created_nodes]:"},{"line_number":41,"context_line":"            self.assertIn(node_id, nodes_uuids)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_8d8e6c25","line":38,"updated":"2016-05-04 14:46:47.000000000","message":"i\u0027m curious to know why you use \u0027list_nodes\u0027 when I don\u0027t see that any where.\n\nYou mean \u0027the list of nodes\u0027, right?","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                 .format(utils.generate_name())))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def assertCreatedNodesInListNodes(self):"},{"line_number":38,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes.\"\"\""},{"line_number":39,"context_line":"        nodes_uuids \u003d self.get_nodes_uuids()"},{"line_number":40,"context_line":"        for node_id in [node[\u0027uuid\u0027] for node in self.list_of_created_nodes]:"},{"line_number":41,"context_line":"            self.assertIn(node_id, nodes_uuids)"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_8a75a399","line":38,"in_reply_to":"1a122d0e_8d8e6c25","updated":"2016-05-19 14:03:47.000000000","message":"Done","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self.assertCreatedNodesInListNodes()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        name_list_of_created_nodes \u003d ["},{"line_number":93,"context_line":"            node[\u0027name\u0027] for node in self.list_of_created_nodes[:3]"},{"line_number":94,"context_line":"        ]"},{"line_number":95,"context_line":"        uuid_list_of_created_nodes \u003d ["},{"line_number":96,"context_line":"            node[\u0027uuid\u0027] for node in self.list_of_created_nodes[3:]"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_947034a6","line":93,"updated":"2016-05-04 14:46:47.000000000","message":"why don\u0027t you use that utils method that you changed? get_nodes_values()?","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.delete_node(\u0027{0} {1}\u0027.format(names_of_created_nodes,"},{"line_number":101,"context_line":"                                          uuid_of_created_nodes))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.assertCreatedNodesNotInListNodes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_b13aa2e5","line":103,"updated":"2016-05-04 14:46:47.000000000","message":"My only concern with all these tests is that you create/delete all the nodes.\n\nWhat about just deleting one uuid, one name, to show that there isn\u0027t a bug that causes all nodes to be deleted when a delete is invoked?","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.delete_node(\u0027{0} {1}\u0027.format(names_of_created_nodes,"},{"line_number":101,"context_line":"                                          uuid_of_created_nodes))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.assertCreatedNodesNotInListNodes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_cde865b7","line":103,"in_reply_to":"1a122d0e_b13aa2e5","updated":"2016-05-19 14:03:47.000000000","message":"Thanks, good idea for new test.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9e434742f43c0b748bf0645d9a48c4d1037c776f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.delete_node(\u0027{0} {1}\u0027.format(names_of_created_nodes,"},{"line_number":101,"context_line":"                                          uuid_of_created_nodes))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.assertCreatedNodesNotInListNodes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_6ba82fdc","line":103,"in_reply_to":"bab6814e_04487f5a","updated":"2016-05-25 16:11:19.000000000","message":"Hello, Ruby! I have updated testcase \"test_delete_nodes_by_names_and_UUIDs\", so it checks that additional created node has remained unaffected after deletion of others.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"507619e900f1e4579c09641e7f8849dc303ee80a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.delete_node(\u0027{0} {1}\u0027.format(names_of_created_nodes,"},{"line_number":101,"context_line":"                                          uuid_of_created_nodes))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.assertCreatedNodesNotInListNodes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_04487f5a","line":103,"in_reply_to":"bab6814e_cde865b7","updated":"2016-05-19 15:49:47.000000000","message":"I don\u0027t see a new test for this in revision 22.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    \"\"\"Negative tests for testing node-delete command."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    Negative tests for the Ironic CLI node-delete command that checks that"},{"line_number":110,"context_line":"    node can not be deleted by non-exist UUID."},{"line_number":111,"context_line":"    Checks that node-delete command without parameters triggers to an error."},{"line_number":112,"context_line":"    \"\"\""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_1101d606","line":110,"updated":"2016-05-04 14:46:47.000000000","message":"s/non-exist UUID/non-existing node identifier./\n\nThis class of tests is basically testing that the node-delete command fails when we expect it to, right?","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    \"\"\"Negative tests for testing node-delete command."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    Negative tests for the Ironic CLI node-delete command that checks that"},{"line_number":110,"context_line":"    node can not be deleted by non-exist UUID."},{"line_number":111,"context_line":"    Checks that node-delete command without parameters triggers to an error."},{"line_number":112,"context_line":"    \"\"\""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_8d893d29","line":110,"in_reply_to":"1a122d0e_1101d606","updated":"2016-05-19 14:03:47.000000000","message":"Done. \nRight :)","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def test_negative_delete_non_exist_node_by_uuid(self):"},{"line_number":115,"context_line":"        \"\"\"Test steps:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        1) execute command to delete non-exist node by node uuid"},{"line_number":118,"context_line":"        2) check that exception has been raised"},{"line_number":119,"context_line":"        \"\"\""},{"line_number":120,"context_line":"        ex_text \u003d r\u0027Node .* could not be found\\. \\(HTTP 404\\)\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_314e92c1","line":117,"updated":"2016-05-04 14:46:47.000000000","message":"s/uuid/UUID/\n\nI know it isn\u0027t a big deal. What happens is that people will cut/paste, so while we\u0027re at it, we might as well drill into people\u0027s heads that it is UUID :)","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def test_negative_delete_non_exist_node_by_uuid(self):"},{"line_number":115,"context_line":"        \"\"\"Test steps:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        1) execute command to delete non-exist node by node uuid"},{"line_number":118,"context_line":"        2) check that exception has been raised"},{"line_number":119,"context_line":"        \"\"\""},{"line_number":120,"context_line":"        ex_text \u003d r\u0027Node .* could not be found\\. \\(HTTP 404\\)\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_cdf4e5f3","line":117,"in_reply_to":"1a122d0e_314e92c1","updated":"2016-05-19 14:03:47.000000000","message":"Done","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"2436a98bdbe2a134378f5ee901c0100a6291e11b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba0121b8_8124fc0c","line":125,"updated":"2016-04-01 10:55:13.000000000","message":"This is not a uuid, it is considered a name by ironic, so the test is actually checking delete_non_exist_node_by_name. Also would be good to add some randomisation, as it is possible that node with such name exists.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_0db1cd47","line":125,"in_reply_to":"1a122d0e_d1763e3e","updated":"2016-05-19 14:03:47.000000000","message":"Thanks for idea for a new testcase!","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_2a7477fb","line":125,"in_reply_to":"ba0121b8_8124fc0c","updated":"2016-05-19 14:03:47.000000000","message":"Done","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_d1763e3e","line":125,"in_reply_to":"ba0121b8_8124fc0c","updated":"2016-05-04 14:46:47.000000000","message":"There is no setup() here. So no node exists, right? Which means you are testing the deletion of a node when there are no nodes. What about the case where a node exists, but it isn\u0027t the node that you want to delete?\n\nTo Vlad\u0027s comment -- you should put a valid uuid string here.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"507619e900f1e4579c09641e7f8849dc303ee80a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_243663e6","line":125,"in_reply_to":"bab6814e_0db1cd47","updated":"2016-05-19 15:49:47.000000000","message":"I don\u0027t see a new testcase in revision 22?","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa60df00c9c8e1205f8192cd8b7d55ba18d68a75","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_8923d157","line":125,"in_reply_to":"bab6814e_1faf2182","updated":"2016-05-25 20:48:53.000000000","message":"ummm, did you add these tests? I don\u0027t see any in revision 24.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"85123e5e57caaf5df85912a3d93a067102d21abb","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_1faf2182","line":125,"in_reply_to":"bab6814e_243663e6","updated":"2016-05-19 18:15:54.000000000","message":"Right! I should set \"Workflow -1\" until i add those testcases.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0f2f9f02632af49ca4109720a808c1c01dce113e","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_e63c23e3","line":125,"in_reply_to":"bab6814e_5694c089","updated":"2016-05-26 14:00:16.000000000","message":"That isn\u0027t the test I was thinking of.  I was wondering about\n\n1. create node with UUID1\n2. delete node with UUID2\n3. show that an exception is raised.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"4c2298ade59e25d9b43aa3d24605592e94e5ac2d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_5694c089","line":125,"in_reply_to":"bab6814e_8923d157","updated":"2016-05-26 13:05:21.000000000","message":"I have added one more node and one more assert to the existing test \"test_delete_nodes_by_names_and_UUIDs\" to check that deletion of several nodes does not remove all nodes.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"b1caa896e214c3feb898f5f7e26d64276cf98db0","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":123,"context_line":"                                ex_text,"},{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_f71de4be","line":125,"in_reply_to":"bab6814e_e63c23e3","updated":"2016-05-26 16:18:18.000000000","message":"Ok, i add testcase \"test_negative_delete_node_by_false_uuid\"","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"2436a98bdbe2a134378f5ee901c0100a6291e11b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        1) execute command to delete non-exist node by node uuid"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba0121b8_415ca47c","line":127,"updated":"2016-04-01 10:55:13.000000000","message":"by_incorrect_name, as test_ironic_node is neither valid uuid, nor valid name.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                self.delete_node,"},{"line_number":125,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        1) execute command to delete non-exist node by node uuid"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_cacb2ba4","line":127,"in_reply_to":"ba0121b8_415ca47c","updated":"2016-05-19 14:03:47.000000000","message":"Done","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        1) execute command to delete non-exist node by node uuid"},{"line_number":131,"context_line":"        2) check that exception has been raised"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        ex_text \u003d (r\"Failed to delete node .*: \""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_11d6f6f0","line":130,"updated":"2016-05-04 14:46:47.000000000","message":"this doesn\u0027t seem correct","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def test_negative_delete_non_exist_node_by_name(self):"},{"line_number":128,"context_line":"        \"\"\"Test steps:"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        1) execute command to delete non-exist node by node uuid"},{"line_number":131,"context_line":"        2) check that exception has been raised"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        ex_text \u003d (r\"Failed to delete node .*: \""}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_8a3803a2","line":130,"in_reply_to":"1a122d0e_11d6f6f0","updated":"2016-05-19 14:03:47.000000000","message":"Done","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":152,"context_line":"                                ex_text,"},{"line_number":153,"context_line":"                                self.delete_node, \u0027 \u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_314972d1","line":153,"updated":"2016-05-04 14:46:47.000000000","message":"Do we run functional tests with English language set?","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":152,"context_line":"                                ex_text,"},{"line_number":153,"context_line":"                                self.delete_node, \u0027 \u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_4d7915f6","line":153,"in_reply_to":"1a122d0e_314972d1","updated":"2016-05-19 14:03:47.000000000","message":"It`s expected to run only in English language set.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f0d12947a5389c48c78b1b859ef2534cabc977f3","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                          uuid_of_created_nodes))"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        self.assertCreatedNodesNotInListNodes()"},{"line_number":106,"context_line":"        self.assertIn(self.node[\u0027uuid\u0027], self.get_nodes_uuids())"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class NodeDeleteNegativeTestIronicClient(base.FunctionalTestBase):"}],"source_content_type":"text/x-python","patch_set":24,"id":"bab6814e_89b11104","line":106,"updated":"2016-05-25 20:49:28.000000000","message":"self.get_nodes_uuids() should just return 1 uuid, so you could check for equality. I guess this is ok though.","commit_id":"ca6076750dda637b0cdd73ea1660bfffbfecd83d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c59a6afe44689fdea8e417398854ddec8f8cba34","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def test_delete_nodes_by_UUID(self):"},{"line_number":50,"context_line":"        \"\"\"Test steps:"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        1) create 5 nodes"},{"line_number":53,"context_line":"        2) check that nodes have been successfully created"},{"line_number":54,"context_line":"        3) delete 5 nodes by node uuid"},{"line_number":55,"context_line":"        4) check that nodes have been successfully deleted"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_1d891e27","line":52,"range":{"start_line":52,"start_character":18,"end_line":52,"end_character":19},"updated":"2016-07-19 08:21:32.000000000","message":"Why 5 nodes, 2 should be enough.","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"bebfc4efb9d59c5d8a4613fd13ba0920ff5c7237","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def test_delete_nodes_by_UUID(self):"},{"line_number":50,"context_line":"        \"\"\"Test steps:"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        1) create 5 nodes"},{"line_number":53,"context_line":"        2) check that nodes have been successfully created"},{"line_number":54,"context_line":"        3) delete 5 nodes by node uuid"},{"line_number":55,"context_line":"        4) check that nodes have been successfully deleted"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_f584cc0b","line":52,"range":{"start_line":52,"start_character":18,"end_line":52,"end_character":19},"in_reply_to":"dada55a8_1d891e27","updated":"2016-07-20 15:58:31.000000000","message":"Done","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c59a6afe44689fdea8e417398854ddec8f8cba34","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":100,"context_line":"                                ex_text,"},{"line_number":101,"context_line":"                                self.delete_node,"},{"line_number":102,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_negative_delete_node_without_parameters(self):"},{"line_number":105,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_70d96183","line":102,"updated":"2016-07-19 08:21:32.000000000","message":"Please add a test for case when first node doesn\u0027t exist, while rest of nodes are valid/existed names/uuids.","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"bebfc4efb9d59c5d8a4613fd13ba0920ff5c7237","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":100,"context_line":"                                ex_text,"},{"line_number":101,"context_line":"                                self.delete_node,"},{"line_number":102,"context_line":"                                \u002700000000-000000000000\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_negative_delete_node_without_parameters(self):"},{"line_number":105,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":29,"id":"dada55a8_5b606701","line":102,"in_reply_to":"dada55a8_70d96183","updated":"2016-07-20 15:58:31.000000000","message":"Added two testcases: \ntest_mixed_case_node_delete_name\ntest_mixed_case_node_delete_uuid","commit_id":"af946b187f46d747ae2bed60bca8e13a5e4ff606"},{"author":{"_account_id":22724,"name":"Galyna Zholtkevych","email":"galynazholtkevych1991@gmail.com","username":"gzholtkevych"},"change_message_id":"cca1656d5b96e75c798c58e8287d5dea3541eb8c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def _assertCreatedNodesInListNodes(self):"},{"line_number":38,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes.\"\"\""},{"line_number":39,"context_line":"        nodes_uuids \u003d self.get_nodes_uuids()"},{"line_number":40,"context_line":"        for node_id in [node[\u0027uuid\u0027] for node in self.list_of_created_nodes]:"},{"line_number":41,"context_line":"            self.assertIn(node_id, nodes_uuids)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _assertCreatedNodesNotInListNodes(self):"},{"line_number":44,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes.\"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"dada55a8_7ec89074","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":47},"updated":"2016-07-21 10:59:55.000000000","message":"I think it is not good way to do. \nI think, in cycle you create every time the list of node uuid\n\nMy proposition is sth like that\n\nnodes_uuids \u003d set(self.get_nodes_uuids)\ncreated_uuids \u003d set([node[\u0027uuid\u0027] for node in\n                 self.list_of_created_nodes])\nself.assertSetEqual(nodes_uuids, created_uuids)","commit_id":"c2a29c4e1e387872aa647642bed6aeb47c375920"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"38280d560453d8fda81362f08bfb0079267fc0b3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def _assertCreatedNodesInListNodes(self):"},{"line_number":38,"context_line":"        \"\"\"Assert that created_nodes is in list_nodes.\"\"\""},{"line_number":39,"context_line":"        nodes_uuids \u003d self.get_nodes_uuids()"},{"line_number":40,"context_line":"        for node_id in [node[\u0027uuid\u0027] for node in self.list_of_created_nodes]:"},{"line_number":41,"context_line":"            self.assertIn(node_id, nodes_uuids)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _assertCreatedNodesNotInListNodes(self):"},{"line_number":44,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes.\"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"dada55a8_356472b7","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":47},"in_reply_to":"dada55a8_7ec89074","updated":"2016-07-21 12:03:43.000000000","message":"It is better to compare sorted lists:\nnodes_uuids \u003d sorted(self.get_nodes_uuids)\ncreated_uuids \u003d sorted([node[\u0027uuid\u0027] for node in\n                 self.list_of_created_nodes])\n\nself.assertEqual(created_uuids, nodes_uuids)","commit_id":"c2a29c4e1e387872aa647642bed6aeb47c375920"},{"author":{"_account_id":22724,"name":"Galyna Zholtkevych","email":"galynazholtkevych1991@gmail.com","username":"gzholtkevych"},"change_message_id":"cca1656d5b96e75c798c58e8287d5dea3541eb8c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def _assertCreatedNodesNotInListNodes(self):"},{"line_number":44,"context_line":"        \"\"\"Assert that created_nodes is not in list_nodes.\"\"\""},{"line_number":45,"context_line":"        nodes_uuids \u003d self.get_nodes_uuids()"},{"line_number":46,"context_line":"        for node_id in [node[\u0027uuid\u0027] for node in self.list_of_created_nodes]:"},{"line_number":47,"context_line":"            self.assertNotIn(node_id, nodes_uuids)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_delete_nodes_by_UUID(self):"},{"line_number":50,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":31,"id":"dada55a8_7e76d03e","line":47,"range":{"start_line":46,"start_character":8,"end_line":47,"end_character":50},"updated":"2016-07-21 10:59:55.000000000","message":"Same remark. Can be used similar solution proposed above","commit_id":"c2a29c4e1e387872aa647642bed6aeb47c375920"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"62753fe6c5ea21a3b41d867651cfad01c6170721","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super(NodeDeleteTestIronicClient, self).setUp()"},{"line_number":31,"context_line":"        self.list_of_created_nodes \u003d []"},{"line_number":32,"context_line":"        for _ in range(2):"},{"line_number":33,"context_line":"            self.list_of_created_nodes.append("},{"line_number":34,"context_line":"                self.create_node(params\u003d\u0027-n {0}\u0027"},{"line_number":35,"context_line":"                                 .format(data_utils.rand_name())))"}],"source_content_type":"text/x-python","patch_set":43,"id":"1ac06dbe_e014564e","line":32,"updated":"2016-08-25 12:02:17.000000000","message":"please do not shadow _, this is a standard gettext/i18n marker","commit_id":"4d0ca7cdd8029e65a1ac6fe422a575b692b840f6"},{"author":{"_account_id":20675,"name":"Sofiia Andriichenko","email":"sofiia.andriichenko@gmail.com","username":"SofiiaAndriichenko"},"change_message_id":"2edee7720a2f9007682f6f767b40eec05f46e7b4","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super(NodeDeleteTestIronicClient, self).setUp()"},{"line_number":31,"context_line":"        self.list_of_created_nodes \u003d []"},{"line_number":32,"context_line":"        for _ in range(2):"},{"line_number":33,"context_line":"            self.list_of_created_nodes.append("},{"line_number":34,"context_line":"                self.create_node(params\u003d\u0027-n {0}\u0027"},{"line_number":35,"context_line":"                                 .format(data_utils.rand_name())))"}],"source_content_type":"text/x-python","patch_set":43,"id":"fa7ab95a_2f8767b6","line":32,"in_reply_to":"1ac06dbe_e014564e","updated":"2016-08-26 14:22:25.000000000","message":"Done","commit_id":"4d0ca7cdd8029e65a1ac6fe422a575b692b840f6"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"545d864ca857923aab304dddcd920c7964fbbffb","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":102,"context_line":"                                ex_text,"},{"line_number":103,"context_line":"                                self.delete_node,"},{"line_number":104,"context_line":"                                node_id\u003d\u002700000000-000000000000\u0027)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def test_negative_delete_node_without_parameters(self):"},{"line_number":107,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_7c24765f","line":104,"range":{"start_line":104,"start_character":41,"end_line":104,"end_character":62},"updated":"2016-08-29 12:37:01.000000000","message":"would be better to generate it.","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"55172b5d0a6394edfa698c26145b471caadbe282","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":102,"context_line":"                                ex_text,"},{"line_number":103,"context_line":"                                self.delete_node,"},{"line_number":104,"context_line":"                                node_id\u003d\u002700000000-000000000000\u0027)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def test_negative_delete_node_without_parameters(self):"},{"line_number":107,"context_line":"        \"\"\"Test steps:"}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_21635a43","line":104,"range":{"start_line":104,"start_character":41,"end_line":104,"end_character":62},"in_reply_to":"fa7ab95a_7c24765f","updated":"2016-08-30 11:54:45.000000000","message":"Done","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"545d864ca857923aab304dddcd920c7964fbbffb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":141,"context_line":"                                ex_text,"},{"line_number":142,"context_line":"                                self.delete_node,"},{"line_number":143,"context_line":"                                \u0027fakenodename {0}\u0027.format(self.node[\u0027name\u0027]))"},{"line_number":144,"context_line":"        nodes_names \u003d self.get_nodes_names()"},{"line_number":145,"context_line":"        self.assertNotIn(self.node[\u0027name\u0027], nodes_names)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_bc227e50","line":143,"range":{"start_line":143,"start_character":33,"end_line":143,"end_character":45},"updated":"2016-08-29 12:37:01.000000000","message":"ditto","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"55172b5d0a6394edfa698c26145b471caadbe282","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":141,"context_line":"                                ex_text,"},{"line_number":142,"context_line":"                                self.delete_node,"},{"line_number":143,"context_line":"                                \u0027fakenodename {0}\u0027.format(self.node[\u0027name\u0027]))"},{"line_number":144,"context_line":"        nodes_names \u003d self.get_nodes_names()"},{"line_number":145,"context_line":"        self.assertNotIn(self.node[\u0027name\u0027], nodes_names)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_6159e28d","line":143,"range":{"start_line":143,"start_character":33,"end_line":143,"end_character":45},"in_reply_to":"fa7ab95a_bc227e50","updated":"2016-08-30 11:54:45.000000000","message":"Done","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"545d864ca857923aab304dddcd920c7964fbbffb","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":158,"context_line":"                                ex_text,"},{"line_number":159,"context_line":"                                self.delete_node,"},{"line_number":160,"context_line":"                                \u002700000000-000000000000 {0}\u0027"},{"line_number":161,"context_line":"                                .format(self.node[\u0027name\u0027]))"},{"line_number":162,"context_line":"        nodes_uuids \u003d self.get_nodes_uuids()"},{"line_number":163,"context_line":"        self.assertNotIn(self.node[\u0027uuid\u0027], nodes_uuids)"}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_fc188620","line":160,"range":{"start_line":160,"start_character":33,"end_line":160,"end_character":54},"updated":"2016-08-29 12:37:01.000000000","message":"ditto","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"55172b5d0a6394edfa698c26145b471caadbe282","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertRaisesRegexp(exceptions.CommandFailed,"},{"line_number":158,"context_line":"                                ex_text,"},{"line_number":159,"context_line":"                                self.delete_node,"},{"line_number":160,"context_line":"                                \u002700000000-000000000000 {0}\u0027"},{"line_number":161,"context_line":"                                .format(self.node[\u0027name\u0027]))"},{"line_number":162,"context_line":"        nodes_uuids \u003d self.get_nodes_uuids()"},{"line_number":163,"context_line":"        self.assertNotIn(self.node[\u0027uuid\u0027], nodes_uuids)"}],"source_content_type":"text/x-python","patch_set":44,"id":"fa7ab95a_c152ae66","line":160,"range":{"start_line":160,"start_character":33,"end_line":160,"end_character":54},"in_reply_to":"fa7ab95a_fc188620","updated":"2016-08-30 11:54:45.000000000","message":"Done","commit_id":"f664e2a906427cfd7c676c2e4521f993b48543e6"}],"ironicclient/tests/functional/test_port.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"dfda90fc703cc23fbe60b6ab02bc681f7f1e6f3e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from ironicclient.tests.functional import base"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class PortSanityTestIronicClient(base.FunctionalTestBase):"},{"line_number":19,"context_line":"    \"\"\"Sanity tests for testing actions with port."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    Smoke test for the Ironic CLI commands which checks basic actions with"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afc51ec_2d45a86f","line":18,"updated":"2016-03-14 13:55:01.000000000","message":"This should not be here - there is a separate change for it.","commit_id":"26f3d97fd8cfc4b09a2f94d0859489233880e296"}],"ironicclient/tests/functional/utils.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"663eef1d2cdf441f53393e4d8effbf0106a1e163","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    try:"},{"line_number":58,"context_line":"        return [x[node_key] for x in node_list]"},{"line_number":59,"context_line":"    except KeyError as e:"},{"line_number":60,"context_line":"        raise e"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_826d3a9b","line":59,"updated":"2015-12-01 17:11:03.000000000","message":"What\u0027s the point of this except if it is just raising? You should either remove try-except or return empty list in case of exception.","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"096f18e54bb5fc67b06bf7fbce24eb176ec1c347","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    try:"},{"line_number":58,"context_line":"        return [x[node_key] for x in node_list]"},{"line_number":59,"context_line":"    except KeyError as e:"},{"line_number":60,"context_line":"        raise e"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_ece0c7fc","line":59,"in_reply_to":"9a8ffd7b_826d3a9b","updated":"2015-12-04 15:40:54.000000000","message":"Done","commit_id":"1421cce5c5f69754b0c83c94acfaa04b716823ce"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"dfda90fc703cc23fbe60b6ab02bc681f7f1e6f3e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return [x[node_key] for x in node_list]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def generate_mac_address():"},{"line_number":61,"context_line":"    \"\"\"Genetate mac address.\"\"\""},{"line_number":62,"context_line":"    mac \u003d []"},{"line_number":63,"context_line":"    for _ in range(6):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afc51ec_f03713ae","line":60,"updated":"2016-03-14 13:55:01.000000000","message":"ditto","commit_id":"26f3d97fd8cfc4b09a2f94d0859489233880e296"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"22013b4f17691252216c9cd095ba36834a678494","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return [x[node_key] for x in node_list]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def generate_mac_address():"},{"line_number":61,"context_line":"    \"\"\"Genetate mac address.\"\"\""},{"line_number":62,"context_line":"    mac \u003d []"},{"line_number":63,"context_line":"    for _ in range(6):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba0121b8_70128258","line":60,"updated":"2016-03-31 13:54:05.000000000","message":"This one is still unrelated, please remove.","commit_id":"a8a9f8e7d9ce930e1d6c44a4cde2cab0975ab23e"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"bfea20bc7442fa0be9eed8f30d26077712d9be52","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return [x[node_key] for x in node_list]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def generate_mac_address():"},{"line_number":61,"context_line":"    \"\"\"Genetate mac address.\"\"\""},{"line_number":62,"context_line":"    mac \u003d []"},{"line_number":63,"context_line":"    for _ in range(6):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba0121b8_e6a98e25","line":60,"in_reply_to":"ba0121b8_70128258","updated":"2016-04-01 10:39:41.000000000","message":"Done","commit_id":"a8a9f8e7d9ce930e1d6c44a4cde2cab0975ab23e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def get_dict_from_output(output):"},{"line_number":20,"context_line":"    \"\"\"Create a dictionary from an output."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    :param output: list of dictionaries"},{"line_number":23,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_b7a7370a","line":20,"updated":"2016-05-04 14:46:47.000000000","message":"I liked the original description better, although both of them could be expanded to include more information about what this function is doing.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def get_dict_from_output(output):"},{"line_number":20,"context_line":"    \"\"\"Create a dictionary from an output."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    :param output: list of dictionaries"},{"line_number":23,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_8d32dd0e","line":20,"in_reply_to":"1a122d0e_b7a7370a","updated":"2016-05-19 14:03:47.000000000","message":"Done","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\""},{"line_number":24,"context_line":"    obj \u003d {}"},{"line_number":25,"context_line":"    for item in output:"},{"line_number":26,"context_line":"        obj[item[\u0027Property\u0027]] \u003d six.text_type(item[\u0027Value\u0027])"},{"line_number":27,"context_line":"    return obj"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_d7563305","line":26,"updated":"2016-05-04 14:46:47.000000000","message":"I know you didn\u0027t write this code, but it looks like it assumes that the dictionaries in output all have \u0027Property\u0027 \u0026 \u0027Value\u0027 as keys. Seems like that should be mentioned in the description.","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\""},{"line_number":24,"context_line":"    obj \u003d {}"},{"line_number":25,"context_line":"    for item in output:"},{"line_number":26,"context_line":"        obj[item[\u0027Property\u0027]] \u003d six.text_type(item[\u0027Value\u0027])"},{"line_number":27,"context_line":"    return obj"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_adba416c","line":26,"in_reply_to":"1a122d0e_d7563305","updated":"2016-05-19 14:03:47.000000000","message":"Done","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fa1d3584fc278276c4cd0c781bf30741f625eab0","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def get_nodes_values(node_key, node_list):"},{"line_number":51,"context_line":"    \"\"\"Get nodes uuids from node list."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    :param node_key: key to obtain its value"},{"line_number":54,"context_line":"    :param node_list: list of nodes"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a122d0e_1c7730d5","line":51,"updated":"2016-05-04 14:46:47.000000000","message":"It doesn\u0027t look like this is always returning the node UUIDs.\n\nShould mention that it returns a list of values etc","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"9244880a2252260f7a5eeed675429e80f8032173","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def get_nodes_values(node_key, node_list):"},{"line_number":51,"context_line":"    \"\"\"Get nodes uuids from node list."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    :param node_key: key to obtain its value"},{"line_number":54,"context_line":"    :param node_list: list of nodes"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_584d516b","line":51,"in_reply_to":"1a122d0e_1c7730d5","updated":"2016-05-19 14:03:47.000000000","message":"Done","commit_id":"204d1e26c98f11c51ced37e7de5703a55617d63d"}],"test-requirements.txt":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"62753fe6c5ea21a3b41d867651cfad01c6170721","unresolved":false,"context_lines":[{"line_number":17,"context_line":"tempest\u003e\u003d12.1.0 # Apache-2.0"},{"line_number":18,"context_line":"os-testr\u003e\u003d0.7.0 # Apache-2.0"},{"line_number":19,"context_line":"jsonschema!\u003d2.5.0,\u003c3.0.0,\u003e\u003d2.0.0 # MIT"},{"line_number":20,"context_line":"ddt\u003e\u003d1.0.1 # MIT"}],"source_content_type":"text/plain","patch_set":43,"id":"1ac06dbe_83348cde","line":20,"updated":"2016-08-25 12:02:17.000000000","message":"where it is used in this patch?","commit_id":"4d0ca7cdd8029e65a1ac6fe422a575b692b840f6"},{"author":{"_account_id":20675,"name":"Sofiia Andriichenko","email":"sofiia.andriichenko@gmail.com","username":"SofiiaAndriichenko"},"change_message_id":"2edee7720a2f9007682f6f767b40eec05f46e7b4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"tempest\u003e\u003d12.1.0 # Apache-2.0"},{"line_number":18,"context_line":"os-testr\u003e\u003d0.7.0 # Apache-2.0"},{"line_number":19,"context_line":"jsonschema!\u003d2.5.0,\u003c3.0.0,\u003e\u003d2.0.0 # MIT"},{"line_number":20,"context_line":"ddt\u003e\u003d1.0.1 # MIT"}],"source_content_type":"text/plain","patch_set":43,"id":"fa7ab95a_32118e53","line":20,"in_reply_to":"1ac06dbe_83348cde","updated":"2016-08-26 14:22:25.000000000","message":"it isn\u0027t used in this patch","commit_id":"4d0ca7cdd8029e65a1ac6fe422a575b692b840f6"}]}
