)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e660ffcc6ab02e16754fd881e3edd38f618bcf7c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Derek Higgins \u003cderekh@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-19 06:50:02 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Remove mox in libvirt destory tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch replaces mox with mock in libvirt"},{"line_number":10,"context_line":"test_destroy_undefines_* test."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a461143_9b9457e9","line":7,"range":{"start_line":7,"start_character":22,"end_line":7,"end_character":29},"updated":"2017-01-25 14:49:04.000000000","message":"nit: destroy","commit_id":"68456f49e2cdd84ef7a3624222fde4d3e878a7d1"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9f80715d44684d35fb599cf904ca24690b8a16a","unresolved":false,"context_lines":[{"line_number":11894,"context_line":"        mock_domain.ID.return_value \u003d 123"},{"line_number":11895,"context_line":""},{"line_number":11896,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":11897,"context_line":"        drvr._host.get_domain \u003d mock.Mock(return_value \u003d mock_domain)"},{"line_number":11898,"context_line":"        drvr.delete_instance_files \u003d mock.Mock(return_value \u003d None)"},{"line_number":11899,"context_line":"        drvr.get_info \u003d mock.Mock(return_value \u003d"},{"line_number":11900,"context_line":"            hardware.InstanceInfo(state\u003dpower_state.SHUTDOWN, id\u003d-1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_52504cd4","line":11897,"range":{"start_line":11897,"start_character":54,"end_line":11897,"end_character":57},"updated":"2017-01-06 09:48:31.000000000","message":"minor nit: I don\u0027t think there should be spaces around this?","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab94da3a192edca6d49923eb0b4db9a788516317","unresolved":false,"context_lines":[{"line_number":11904,"context_line":"        drvr.destroy(self.context, instance, [])"},{"line_number":11905,"context_line":""},{"line_number":11906,"context_line":"        self.assertEqual(2, mock_domain.ID.call_count)"},{"line_number":11907,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11908,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11909,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11910,"context_line":"        mock_save.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a3c09a3_decafc19","line":11907,"range":{"start_line":11907,"start_character":28,"end_line":11907,"end_character":48},"updated":"2017-01-16 06:44:36.000000000","message":"It should be \u0027assert_called_once_with()\u0027.","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"41cc418345e22f22324769d706830018d00df826","unresolved":false,"context_lines":[{"line_number":11904,"context_line":"        drvr.destroy(self.context, instance, [])"},{"line_number":11905,"context_line":""},{"line_number":11906,"context_line":"        self.assertEqual(2, mock_domain.ID.call_count)"},{"line_number":11907,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11908,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11909,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11910,"context_line":"        mock_save.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a3905b3_62c2c9ea","line":11907,"range":{"start_line":11907,"start_character":28,"end_line":11907,"end_character":48},"in_reply_to":"5a3905b3_4df8d0c3","updated":"2017-01-24 04:53:09.000000000","message":"There is \u0027assert_called_once\u0027 method, but it is not proper in these cases.\n\u0027assert_called_once\u0027 does not check arguments.\n\u0027assert_called_once_with\u0027 checks arguments.\nSo \u0027assert_called_once_with\u0027 should be used to assert that the mock was called with the specified arguments.","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a1636d4ecbfe3680257c5b61a9cf1edc9ac3a605","unresolved":false,"context_lines":[{"line_number":11904,"context_line":"        drvr.destroy(self.context, instance, [])"},{"line_number":11905,"context_line":""},{"line_number":11906,"context_line":"        self.assertEqual(2, mock_domain.ID.call_count)"},{"line_number":11907,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11908,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11909,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11910,"context_line":"        mock_save.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a3905b3_4df8d0c3","line":11907,"range":{"start_line":11907,"start_character":28,"end_line":11907,"end_character":48},"in_reply_to":"7a3c09a3_decafc19","updated":"2017-01-23 10:00:01.000000000","message":"Actually, I don\u0027t think this is true - assert_called_once is valid:\n\n  https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.assert_called_once","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab94da3a192edca6d49923eb0b4db9a788516317","unresolved":false,"context_lines":[{"line_number":11906,"context_line":"        self.assertEqual(2, mock_domain.ID.call_count)"},{"line_number":11907,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11908,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11909,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11910,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":11911,"context_line":""},{"line_number":11912,"context_line":"    @mock.patch.object(objects.Instance, \u0027save\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a3c09a3_3edce0e3","line":11909,"range":{"start_line":11909,"start_character":29,"end_line":11909,"end_character":49},"updated":"2017-01-16 06:44:36.000000000","message":"ditto","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab94da3a192edca6d49923eb0b4db9a788516317","unresolved":false,"context_lines":[{"line_number":11926,"context_line":"        drvr.destroy(self.context, instance, [])"},{"line_number":11927,"context_line":""},{"line_number":11928,"context_line":"        self.assertEqual(1, mock_domain.ID.call_count)"},{"line_number":11929,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11930,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11931,"context_line":"        mock_domain.hasManagedSaveImage.assert_has_calls([mock.call(0)])"},{"line_number":11932,"context_line":"        mock_domain.managedSaveRemove.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a3c09a3_def11c6c","line":11929,"range":{"start_line":11929,"start_character":28,"end_line":11929,"end_character":48},"updated":"2017-01-16 06:44:36.000000000","message":"ditto","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9f80715d44684d35fb599cf904ca24690b8a16a","unresolved":false,"context_lines":[{"line_number":11927,"context_line":""},{"line_number":11928,"context_line":"        self.assertEqual(1, mock_domain.ID.call_count)"},{"line_number":11929,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11930,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11931,"context_line":"        mock_domain.hasManagedSaveImage.assert_has_calls([mock.call(0)])"},{"line_number":11932,"context_line":"        mock_domain.managedSaveRemove.assert_called_once()"},{"line_number":11933,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11934,"context_line":"        mock_save.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_5215ace2","line":11931,"range":{"start_line":11930,"start_character":0,"end_line":11931,"end_character":72},"updated":"2017-01-06 09:48:31.000000000","message":"I don\u0027t know how much value these are adding without actually defining the calls that are made first. Maybe you should remove them else manually define the calls expected?","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"97cc30d0e578d3b18a973c7e469722cfe1428744","unresolved":false,"context_lines":[{"line_number":11927,"context_line":""},{"line_number":11928,"context_line":"        self.assertEqual(1, mock_domain.ID.call_count)"},{"line_number":11929,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11930,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11931,"context_line":"        mock_domain.hasManagedSaveImage.assert_has_calls([mock.call(0)])"},{"line_number":11932,"context_line":"        mock_domain.managedSaveRemove.assert_called_once()"},{"line_number":11933,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11934,"context_line":"        mock_save.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_52c3ec56","line":11931,"range":{"start_line":11930,"start_character":0,"end_line":11931,"end_character":72},"in_reply_to":"ba5201f7_5215ace2","updated":"2017-01-06 09:50:33.000000000","message":"Wait - ignore this. These are expected calls (I read them as indexing. Oops)","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab94da3a192edca6d49923eb0b4db9a788516317","unresolved":false,"context_lines":[{"line_number":11929,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11930,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11931,"context_line":"        mock_domain.hasManagedSaveImage.assert_has_calls([mock.call(0)])"},{"line_number":11932,"context_line":"        mock_domain.managedSaveRemove.assert_called_once()"},{"line_number":11933,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11934,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":11935,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a3c09a3_beee1089","line":11932,"range":{"start_line":11932,"start_character":38,"end_line":11932,"end_character":58},"updated":"2017-01-16 06:44:36.000000000","message":"It should be \u0027assert_called_once_with(0)\u0027.","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab94da3a192edca6d49923eb0b4db9a788516317","unresolved":false,"context_lines":[{"line_number":11930,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11931,"context_line":"        mock_domain.hasManagedSaveImage.assert_has_calls([mock.call(0)])"},{"line_number":11932,"context_line":"        mock_domain.managedSaveRemove.assert_called_once()"},{"line_number":11933,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11934,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":11935,"context_line":""},{"line_number":11936,"context_line":"    @mock.patch.object(objects.Instance, \u0027save\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a3c09a3_7e4f48bd","line":11933,"range":{"start_line":11933,"start_character":29,"end_line":11933,"end_character":49},"updated":"2017-01-16 06:44:36.000000000","message":"It should be \u0027assert_called_once_with()\u0027.","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab94da3a192edca6d49923eb0b4db9a788516317","unresolved":false,"context_lines":[{"line_number":11951,"context_line":"        drvr.destroy(self.context, instance, [])"},{"line_number":11952,"context_line":""},{"line_number":11953,"context_line":"        self.assertEqual(1, mock_domain.ID.call_count)"},{"line_number":11954,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11955,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11956,"context_line":"        mock_domain.hasManagedSaveImage.assert_has_calls([mock.call(0)])"},{"line_number":11957,"context_line":"        mock_domain.undefine.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a3c09a3_5efe0c39","line":11954,"range":{"start_line":11954,"start_character":28,"end_line":11954,"end_character":48},"updated":"2017-01-16 06:44:36.000000000","message":"ditto","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab94da3a192edca6d49923eb0b4db9a788516317","unresolved":false,"context_lines":[{"line_number":11954,"context_line":"        mock_domain.destroy.assert_called_once()"},{"line_number":11955,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11956,"context_line":"        mock_domain.hasManagedSaveImage.assert_has_calls([mock.call(0)])"},{"line_number":11957,"context_line":"        mock_domain.undefine.assert_called_once()"},{"line_number":11958,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":11959,"context_line":""},{"line_number":11960,"context_line":"    def test_destroy_timed_out(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a3c09a3_3e55c04f","line":11957,"range":{"start_line":11957,"start_character":29,"end_line":11957,"end_character":49},"updated":"2017-01-16 06:44:36.000000000","message":"ditto","commit_id":"d6c50213ea92fdc3e80da1d7d1fb745b29b511cc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"39a11d40c8c70f3ffb96afc06797cd4a6dac9a98","unresolved":false,"context_lines":[{"line_number":11905,"context_line":""},{"line_number":11906,"context_line":"        self.assertEqual(2, mock_domain.ID.call_count)"},{"line_number":11907,"context_line":"        mock_domain.destroy.assert_called_once_with()"},{"line_number":11908,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11909,"context_line":"        mock_domain.undefine.assert_called_once_with()"},{"line_number":11910,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":11911,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_c03195a3","line":11908,"range":{"start_line":11908,"start_character":34,"end_line":11908,"end_character":50},"updated":"2017-02-01 11:19:42.000000000","message":"Nit: assert_called_once_with(1) would be fine I think.","commit_id":"68456f49e2cdd84ef7a3624222fde4d3e878a7d1"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"39a11d40c8c70f3ffb96afc06797cd4a6dac9a98","unresolved":false,"context_lines":[{"line_number":11927,"context_line":""},{"line_number":11928,"context_line":"        self.assertEqual(1, mock_domain.ID.call_count)"},{"line_number":11929,"context_line":"        mock_domain.destroy.assert_called_once_with()"},{"line_number":11930,"context_line":"        mock_domain.undefineFlags.assert_has_calls([mock.call(1)])"},{"line_number":11931,"context_line":"        mock_domain.hasManagedSaveImage.assert_has_calls([mock.call(0)])"},{"line_number":11932,"context_line":"        mock_domain.managedSaveRemove.assert_called_once_with(0)"},{"line_number":11933,"context_line":"        mock_domain.undefine.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_80eb0ddb","line":11930,"updated":"2017-02-01 11:19:42.000000000","message":"As above, assert_called_once_with can take the expected arguments.","commit_id":"68456f49e2cdd84ef7a3624222fde4d3e878a7d1"}]}
