)]}'
{"nova/tests/unit/conductor/tasks/test_live_migrate.py":[{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"6b3f84bf8560c7e4c9959ab046589a5664022a69","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                             mock_get_info.call_args_list)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def test_find_destination_works(self):"},{"line_number":254,"context_line":"        with test.nested("},{"line_number":255,"context_line":"            mock.patch.object(utils, \u0027get_image_from_system_metadata\u0027),"},{"line_number":256,"context_line":"            mock.patch.object(scheduler_utils, \u0027setup_instance_group\u0027),"},{"line_number":257,"context_line":"            mock.patch.object(objects.RequestSpec,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_8dce2781","line":254,"updated":"2016-05-05 18:43:32.000000000","message":"I would be in favor of using @mock.patch.object decorators.\n\nThis would make the code more readable in my opinion and more consistent.\n\nBut this still works.","commit_id":"42dba47c28c97d2de2c30e0c7ff0ad2aa196c098"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"8ec9524790db090eede00e6795ccd38ff3ab3229","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                             mock_get_info.call_args_list)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def test_find_destination_works(self):"},{"line_number":254,"context_line":"        with test.nested("},{"line_number":255,"context_line":"            mock.patch.object(utils, \u0027get_image_from_system_metadata\u0027),"},{"line_number":256,"context_line":"            mock.patch.object(scheduler_utils, \u0027setup_instance_group\u0027),"},{"line_number":257,"context_line":"            mock.patch.object(objects.RequestSpec,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_aba96492","line":254,"in_reply_to":"1a122d0e_8dce2781","updated":"2016-05-31 11:32:36.000000000","message":"Yeah, let\u0027s increase readability","commit_id":"42dba47c28c97d2de2c30e0c7ff0ad2aa196c098"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"76de5966ffacc123b0fa955dbeda9770722088aa","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            self.context, fake_props, {\u0027ignore_hosts\u0027: [self.instance_host]})"},{"line_number":263,"context_line":"        mock_reset.assert_called_once_with()"},{"line_number":264,"context_line":"        mock_select.assert_called_once_with(self.context, self.fake_spec)"},{"line_number":265,"context_line":"        mock_call.assert_called_once_with(\"host1\")"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def test_find_destination_works_with_no_request_spec(self):"},{"line_number":268,"context_line":"        task \u003d live_migrate.LiveMigrationTask("}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_930bce29","line":265,"updated":"2016-06-01 01:23:00.000000000","message":"@mock.patch.object(ive_migrate.LiveMigrationTask, \u0027_check_compatible_with_source_hypervisor\u0027) is specified here but there is no mock_call.assert_called_once_with() associated with it.","commit_id":"007e02f1ed0db102867811d98c3892c226c0221a"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"94bd1c8e963d64ff10a20484d25cb006819f5ff2","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            self.context, fake_props, {\u0027ignore_hosts\u0027: [self.instance_host]})"},{"line_number":263,"context_line":"        mock_reset.assert_called_once_with()"},{"line_number":264,"context_line":"        mock_select.assert_called_once_with(self.context, self.fake_spec)"},{"line_number":265,"context_line":"        mock_call.assert_called_once_with(\"host1\")"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def test_find_destination_works_with_no_request_spec(self):"},{"line_number":268,"context_line":"        task \u003d live_migrate.LiveMigrationTask("}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_f729399c","line":265,"in_reply_to":"9abb7d3a_930bce29","updated":"2016-06-01 17:07:04.000000000","message":"Done","commit_id":"007e02f1ed0db102867811d98c3892c226c0221a"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"76de5966ffacc123b0fa955dbeda9770722088aa","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def _copy_call_args(self, mock):"},{"line_number":304,"context_line":"        \u0027\u0027\u0027Copy arguments for later assertions in case arguments are modified"},{"line_number":305,"context_line":"        by side effects."},{"line_number":306,"context_line":"        \u0027\u0027\u0027"},{"line_number":307,"context_line":"        new_mock \u003d mock.Mock()"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_b66a40b1","line":305,"updated":"2016-06-01 01:23:00.000000000","message":"Is this actually needed ?  If not, it would make the patch easier to review.","commit_id":"007e02f1ed0db102867811d98c3892c226c0221a"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"94bd1c8e963d64ff10a20484d25cb006819f5ff2","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def _copy_call_args(self, mock):"},{"line_number":304,"context_line":"        \u0027\u0027\u0027Copy arguments for later assertions in case arguments are modified"},{"line_number":305,"context_line":"        by side effects."},{"line_number":306,"context_line":"        \u0027\u0027\u0027"},{"line_number":307,"context_line":"        new_mock \u003d mock.Mock()"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_97e6ede5","line":305,"in_reply_to":"9abb7d3a_b66a40b1","updated":"2016-06-01 17:07:04.000000000","message":"I think it is necessary.\nAn item is added to attempt_hosts in a error route[1].\nDue to this addition, mock_setup.assert_called_once_with() does not work as expected.\nI wrote this function based on the documentation[2].\n\n[1] https://github.com/openstack/nova/blob/master/nova/conductor/tasks/live_migrate.py#L205\n\n[2] https://docs.python.org/3.5/library/unittest.mock-examples.html#coping-with-mutable-arguments","commit_id":"007e02f1ed0db102867811d98c3892c226c0221a"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"ca22fce3c1e6ca0230e38a7950bd85662d61531f","unresolved":false,"context_lines":[{"line_number":344,"context_line":"    @mock.patch.object(live_migrate.LiveMigrationTask,"},{"line_number":345,"context_line":"                       \u0027_call_livem_checks_on_host\u0027)"},{"line_number":346,"context_line":"    def _test_find_destination_retry_hypervisor_raises(self, error,"},{"line_number":347,"context_line":"        mock_call, mock_check, mock_select, mock_setup, mock_get_image):"},{"line_number":348,"context_line":"        mock_get_image.return_value \u003d \"image\""},{"line_number":349,"context_line":"        mock_setup_copy \u003d self._copy_call_args(mock_setup)"},{"line_number":350,"context_line":"        mock_select.side_effect \u003d [[{\u0027host\u0027: \u0027host1\u0027}],"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_a2eaccd8","line":347,"updated":"2016-06-01 18:50:19.000000000","message":"Please indent the arguments correctly like you have done above.  This will makes the code easier to read.","commit_id":"fc929544f4a7162984c3ba0132050cac603b09ca"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"ca22fce3c1e6ca0230e38a7950bd85662d61531f","unresolved":false,"context_lines":[{"line_number":381,"context_line":"    @mock.patch.object(live_migrate.LiveMigrationTask,"},{"line_number":382,"context_line":"                       \u0027_call_livem_checks_on_host\u0027)"},{"line_number":383,"context_line":"    def test_find_destination_retry_with_invalid_livem_checks(self, mock_call,"},{"line_number":384,"context_line":"        mock_check, mock_select, mock_setup, mock_get_image):"},{"line_number":385,"context_line":"        self.flags(migrate_max_retries\u003d1)"},{"line_number":386,"context_line":"        mock_get_image.return_value \u003d \"image\""},{"line_number":387,"context_line":"        mock_setup_copy \u003d self._copy_call_args(mock_setup)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_82cfc854","line":384,"updated":"2016-06-01 18:50:19.000000000","message":"Same thing here.","commit_id":"fc929544f4a7162984c3ba0132050cac603b09ca"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"ca22fce3c1e6ca0230e38a7950bd85662d61531f","unresolved":false,"context_lines":[{"line_number":410,"context_line":"    @mock.patch.object(live_migrate.LiveMigrationTask,"},{"line_number":411,"context_line":"                       \u0027_call_livem_checks_on_host\u0027)"},{"line_number":412,"context_line":"    def test_find_destination_retry_with_failed_migration_pre_checks(self,"},{"line_number":413,"context_line":"        mock_call, mock_check, mock_select, mock_setup, mock_get_image):"},{"line_number":414,"context_line":"        self.flags(migrate_max_retries\u003d1)"},{"line_number":415,"context_line":"        mock_get_image.return_value \u003d \"image\""},{"line_number":416,"context_line":"        mock_setup_copy \u003d self._copy_call_args(mock_setup)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_62fd846d","line":413,"updated":"2016-06-01 18:50:19.000000000","message":"And here.","commit_id":"fc929544f4a7162984c3ba0132050cac603b09ca"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"79b62ca016236e8fd0d848db8b7c0b44403cbac0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import mock"},{"line_number":15,"context_line":"import oslo_messaging as messaging"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_ed369701","line":13,"updated":"2017-02-01 02:58:51.000000000","message":"A blank line is required between line 13 and line 14.","commit_id":"b17cee1c9506c6294efa14f2732b119dcc8118c3"}]}
