)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9cdfa1b1e31b9855b92c887e2f3d5e6e22980303","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The Hyper-V driver oldest tests (test_hypervapi.py) are proving hard to"},{"line_number":10,"context_line":"maintain."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The tests in test_hypervapi.py in particular can also be refactored and"},{"line_number":13,"context_line":"split in separate TestCases, one of each *ops module."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit refactors the second part of the VMOps test cases."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"9a80dd14_aa059915","line":12,"updated":"2015-03-11 13:52:13.000000000","message":"In reviewing this, it\u0027s hard for me to tell what makes a test a good candidate to move to the new test module, can that be clarified here?  What\u0027s the process?","commit_id":"8fca5ee301f13f95f2810d8713f3f215ce72c053"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"78add47b7e3fa66e42adcd13606d5798113c62db","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The Hyper-V driver oldest tests (test_hypervapi.py) are proving hard to"},{"line_number":10,"context_line":"maintain."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The tests in test_hypervapi.py in particular can also be refactored and"},{"line_number":13,"context_line":"split in separate TestCases, one of each *ops module."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This commit refactors the second part of the VMOps test cases."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"9a80dd14_e7e095fc","line":12,"in_reply_to":"9a80dd14_aa059915","updated":"2015-03-11 20:40:54.000000000","message":"Hello.\n\nBasically, we\u0027re going for 100% test coverage, or as close to it as possible. Meaning that all / every method in the *Ops classes are covered.\n\nPreviously, the only unit tests were the ones in test_hypervapi, which used mox and it was testing at the Hyper-V Driver level and were supposed to test and cover everything. As time went on, we started using mock and creating separate unit tests with it, and as new features rolled in, no tests or almost no tests were included in test_hypervapi, which meant that its coverage was lower and lower, simply because it was quite difficult, while there was a much simpler, cleaner way.\n\nNow, test_hypervapi is just a ball \u0026 chain we\u0027re just dragging around and we wish to free ourselves of this. :)","commit_id":"8fca5ee301f13f95f2810d8713f3f215ce72c053"}],"nova/tests/unit/virt/hyperv/test_hypervapi.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"15e548e8b8bfe1e158b95f301f64d17137a1190c","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        instances \u003d self._conn.list_instances()"},{"line_number":258,"context_line":"        self._mox.VerifyAll()"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        self.assertEqual(instances, fake_instances)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def test_get_info(self):"},{"line_number":263,"context_line":"        self._instance_data \u003d self._get_instance_data()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_f6b8e913","side":"PARENT","line":260,"updated":"2015-01-15 13:09:18.000000000","message":"Unless I\u0027m mistaken, removing this means there is now no coverage of the driver.py list_instances method.\n\nNow admittedly that method is a boring pass through to vmops.list_instances, but I think we still need to have a test coverage of it - to ensure there\u0027s no typos made in the parameter list of the vmops.list_instances call for example.\n\neg\n\n   @mock.patch.object(vmops, \"list_instances\")\n   def test_list_instances(self, mock_list)\n      mock_list.return_value \u003d \"....\"\n\n      self.assertEqual(..., self.conn._list_instances)\n\n      mock_list.assert_called_once_with(...some args...)\n\nSame applies to more or less all these tests you are removing I think","commit_id":"cde7355e3f61035caabd30b54a31d679823e4d4f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"96ae7037a2d9b8501dc1f2e36c73be90275613ef","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        instances \u003d self._conn.list_instances()"},{"line_number":258,"context_line":"        self._mox.VerifyAll()"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        self.assertEqual(instances, fake_instances)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def test_get_info(self):"},{"line_number":263,"context_line":"        self._instance_data \u003d self._get_instance_data()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_15a5f852","side":"PARENT","line":260,"in_reply_to":"3a961159_f6b8e913","updated":"2015-01-21 16:33:18.000000000","message":"Yeah, that\u0027s true. HyperVDriver just passes all the calls to the Ops classes and nothing else. We can add the unit tests in another commit: https://review.openstack.org/#/c/148980/\n\nThe commit linked is before the last one in this blueprint\u0027s series of commits. It is WIP now, since it is low-hanging fruit and there are other commit more urgent at the moment. It will be done before the blueprint is completed. :)\n\nIs this Ok with you?","commit_id":"cde7355e3f61035caabd30b54a31d679823e4d4f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        self._test_vm_state_change(self._conn.pause, None,"},{"line_number":358,"context_line":"                                   constants.HYPERV_VM_STATE_PAUSED)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def test_pause_already_paused(self):"},{"line_number":361,"context_line":"        self._test_vm_state_change(self._conn.pause,"},{"line_number":362,"context_line":"                                   constants.HYPERV_VM_STATE_PAUSED,"},{"line_number":363,"context_line":"                                   constants.HYPERV_VM_STATE_PAUSED)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_cba7e5bb","side":"PARENT","line":360,"updated":"2015-03-12 20:10:13.000000000","message":"I don\u0027t see this tested in test_vmops.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        self._test_vm_state_change(self._conn.pause, None,"},{"line_number":358,"context_line":"                                   constants.HYPERV_VM_STATE_PAUSED)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def test_pause_already_paused(self):"},{"line_number":361,"context_line":"        self._test_vm_state_change(self._conn.pause,"},{"line_number":362,"context_line":"                                   constants.HYPERV_VM_STATE_PAUSED,"},{"line_number":363,"context_line":"                                   constants.HYPERV_VM_STATE_PAUSED)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_299100f1","side":"PARENT","line":360,"in_reply_to":"9a80dd14_cba7e5bb","updated":"2015-03-16 14:09:16.000000000","message":"Adding this test in test_vmops would be useless, as the tested method (named \u0027pause\u0027 [1]) only logs a message and calls \u0027_set_vm_state\u0027, which is tested individually in test_vmops as \u0027test_set_vm_state\u0027 or something like that.\n\n[1] https://github.com/openstack/nova/blob/master/nova/virt/hyperv/vmops.py#L509\n\nAlso, this test and other tests with ..._already_\u003cstate\u003e are useless and should not have existed in the first place. as you can see, in the method above, in \u0027_test_vm_state_change\u0027, the argument \u0027from_state\u0027 is not even used.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                                   constants.HYPERV_VM_STATE_PAUSED,"},{"line_number":368,"context_line":"                                   constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def test_unpause_already_running(self):"},{"line_number":371,"context_line":"        self._test_vm_state_change(self._conn.unpause, None,"},{"line_number":372,"context_line":"                                   constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_4b93f55a","side":"PARENT","line":370,"updated":"2015-03-12 20:10:13.000000000","message":"Don\u0027t see this in the other module.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                                   constants.HYPERV_VM_STATE_PAUSED,"},{"line_number":368,"context_line":"                                   constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def test_unpause_already_running(self):"},{"line_number":371,"context_line":"        self._test_vm_state_change(self._conn.unpause, None,"},{"line_number":372,"context_line":"                                   constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_212d948f","side":"PARENT","line":370,"in_reply_to":"9a80dd14_4b93f55a","updated":"2015-03-16 14:09:16.000000000","message":"ditto.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                                   None,"},{"line_number":378,"context_line":"                                   constants.HYPERV_VM_STATE_SUSPENDED)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_suspend_already_suspended(self):"},{"line_number":381,"context_line":"        self._test_vm_state_change(lambda i: self._conn.suspend(self._context,"},{"line_number":382,"context_line":"                                                                i),"},{"line_number":383,"context_line":"                                   constants.HYPERV_VM_STATE_SUSPENDED,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_0b857d06","side":"PARENT","line":380,"updated":"2015-03-12 20:10:13.000000000","message":"Don\u0027t see this in the other module.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                                   None,"},{"line_number":378,"context_line":"                                   constants.HYPERV_VM_STATE_SUSPENDED)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_suspend_already_suspended(self):"},{"line_number":381,"context_line":"        self._test_vm_state_change(lambda i: self._conn.suspend(self._context,"},{"line_number":382,"context_line":"                                                                i),"},{"line_number":383,"context_line":"                                   constants.HYPERV_VM_STATE_SUSPENDED,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_61522c14","side":"PARENT","line":380,"in_reply_to":"9a80dd14_0b857d06","updated":"2015-03-16 14:09:16.000000000","message":"ditto.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                                   constants.HYPERV_VM_STATE_SUSPENDED,"},{"line_number":390,"context_line":"                                   constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    def test_resume_already_running(self):"},{"line_number":393,"context_line":"        self._test_vm_state_change(lambda i: self._conn.resume(self._context,"},{"line_number":394,"context_line":"                                                               i, None), None,"},{"line_number":395,"context_line":"                                   constants.HYPERV_VM_STATE_ENABLED)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_4b7a1525","side":"PARENT","line":392,"updated":"2015-03-12 20:10:13.000000000","message":"Don\u0027t see this in the other module.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                                   constants.HYPERV_VM_STATE_SUSPENDED,"},{"line_number":390,"context_line":"                                   constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    def test_resume_already_running(self):"},{"line_number":393,"context_line":"        self._test_vm_state_change(lambda i: self._conn.resume(self._context,"},{"line_number":394,"context_line":"                                                               i, None), None,"},{"line_number":395,"context_line":"                                   constants.HYPERV_VM_STATE_ENABLED)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_a158a431","side":"PARENT","line":392,"in_reply_to":"9a80dd14_4b7a1525","updated":"2015-03-16 14:09:16.000000000","message":"ditto.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        self._test_vm_state_change(self._conn.power_off, None,"},{"line_number":399,"context_line":"                                   constants.HYPERV_VM_STATE_DISABLED)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def test_power_off_already_powered_off(self):"},{"line_number":402,"context_line":"        self._test_vm_state_change(self._conn.power_off,"},{"line_number":403,"context_line":"                                   constants.HYPERV_VM_STATE_DISABLED,"},{"line_number":404,"context_line":"                                   constants.HYPERV_VM_STATE_DISABLED)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_6baa7972","side":"PARENT","line":401,"updated":"2015-03-12 20:10:13.000000000","message":"Don\u0027t see this in the other module.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        self._test_vm_state_change(self._conn.power_off, None,"},{"line_number":399,"context_line":"                                   constants.HYPERV_VM_STATE_DISABLED)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def test_power_off_already_powered_off(self):"},{"line_number":402,"context_line":"        self._test_vm_state_change(self._conn.power_off,"},{"line_number":403,"context_line":"                                   constants.HYPERV_VM_STATE_DISABLED,"},{"line_number":404,"context_line":"                                   constants.HYPERV_VM_STATE_DISABLED)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_e13d3cbc","side":"PARENT","line":401,"in_reply_to":"9a80dd14_6baa7972","updated":"2015-03-16 14:09:16.000000000","message":"ditto.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                            block_device_info\u003dblock_device_info)"},{"line_number":423,"context_line":"        self._mox.VerifyAll()"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def test_power_on_having_block_devices(self):"},{"line_number":426,"context_line":"        block_device_info \u003d db_fakes.get_fake_block_device_info("},{"line_number":427,"context_line":"            self._volume_target_portal, self._volume_id)"},{"line_number":428,"context_line":"        self._test_power_on(block_device_info\u003dblock_device_info)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_2bcb2154","side":"PARENT","line":425,"updated":"2015-03-12 20:10:13.000000000","message":"Don\u0027t see this tested in the other module.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                            block_device_info\u003dblock_device_info)"},{"line_number":423,"context_line":"        self._mox.VerifyAll()"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def test_power_on_having_block_devices(self):"},{"line_number":426,"context_line":"        block_device_info \u003d db_fakes.get_fake_block_device_info("},{"line_number":427,"context_line":"            self._volume_target_portal, self._volume_id)"},{"line_number":428,"context_line":"        self._test_power_on(block_device_info\u003dblock_device_info)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_c1b03845","side":"PARENT","line":425,"in_reply_to":"9a80dd14_2bcb2154","updated":"2015-03-16 14:09:16.000000000","message":"Done","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def test_power_on_without_block_devices(self):"},{"line_number":431,"context_line":"        self._test_power_on(block_device_info\u003dNone)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def test_power_on_already_running(self):"},{"line_number":434,"context_line":"        self._instance \u003d self._get_instance()"},{"line_number":435,"context_line":"        network_info \u003d fake_network.fake_get_instance_nw_info(self.stubs)"},{"line_number":436,"context_line":"        vmutils.VMUtils.set_vm_state(mox.Func(self._check_instance_name),"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_0beaddab","side":"PARENT","line":433,"updated":"2015-03-12 20:10:13.000000000","message":"Don\u0027t see this in the other module.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def test_power_on_without_block_devices(self):"},{"line_number":431,"context_line":"        self._test_power_on(block_device_info\u003dNone)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def test_power_on_already_running(self):"},{"line_number":434,"context_line":"        self._instance \u003d self._get_instance()"},{"line_number":435,"context_line":"        network_info \u003d fake_network.fake_get_instance_nw_info(self.stubs)"},{"line_number":436,"context_line":"        vmutils.VMUtils.set_vm_state(mox.Func(self._check_instance_name),"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_89682cf6","side":"PARENT","line":433,"in_reply_to":"9a80dd14_0beaddab","updated":"2015-03-16 14:09:16.000000000","message":"ditto.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":1313,"context_line":"        self._test_finish_revert_migration(False, config_drive\u003dTrue,"},{"line_number":1314,"context_line":"            config_drive_format\u003dconstants.DISK_FORMAT.lower())"},{"line_number":1315,"context_line":""},{"line_number":1316,"context_line":"    def test_plug_vifs(self):"},{"line_number":1317,"context_line":"        # Check to make sure the method raises NotImplementedError."},{"line_number":1318,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":1319,"context_line":"                          self._conn.plug_vifs,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_8b716d0e","side":"PARENT","line":1316,"updated":"2015-03-12 20:10:13.000000000","message":"This should be left in since it\u0027s in the driver module, not vmops.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":1313,"context_line":"        self._test_finish_revert_migration(False, config_drive\u003dTrue,"},{"line_number":1314,"context_line":"            config_drive_format\u003dconstants.DISK_FORMAT.lower())"},{"line_number":1315,"context_line":""},{"line_number":1316,"context_line":"    def test_plug_vifs(self):"},{"line_number":1317,"context_line":"        # Check to make sure the method raises NotImplementedError."},{"line_number":1318,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":1319,"context_line":"                          self._conn.plug_vifs,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_8df11703","side":"PARENT","line":1316,"in_reply_to":"9a80dd14_8b716d0e","updated":"2015-03-16 14:09:16.000000000","message":"Done","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"        # Check to make sure the method raises NotImplementedError."},{"line_number":1318,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":1319,"context_line":"                          self._conn.plug_vifs,"},{"line_number":1320,"context_line":"                          instance\u003dself._test_spawn_instance,"},{"line_number":1321,"context_line":"                          network_info\u003dNone)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"    def test_unplug_vifs(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_8bdfadd5","side":"PARENT","line":1320,"updated":"2015-03-12 20:10:13.000000000","message":"Not sure why this was needed, seems we could just mock the call, unless this is needed for test_virt_drivers.py to work?","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"        # Check to make sure the method raises NotImplementedError."},{"line_number":1318,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":1319,"context_line":"                          self._conn.plug_vifs,"},{"line_number":1320,"context_line":"                          instance\u003dself._test_spawn_instance,"},{"line_number":1321,"context_line":"                          network_info\u003dNone)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"    def test_unplug_vifs(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_73792292","side":"PARENT","line":1320,"in_reply_to":"9a80dd14_8bdfadd5","updated":"2015-03-16 14:09:16.000000000","message":"Done","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":1320,"context_line":"                          instance\u003dself._test_spawn_instance,"},{"line_number":1321,"context_line":"                          network_info\u003dNone)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"    def test_unplug_vifs(self):"},{"line_number":1324,"context_line":"        # Check to make sure the method raises NotImplementedError."},{"line_number":1325,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":1326,"context_line":"                          self._conn.unplug_vifs,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_ab61d13a","side":"PARENT","line":1323,"updated":"2015-03-12 20:10:13.000000000","message":"This should be left in.","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":1320,"context_line":"                          instance\u003dself._test_spawn_instance,"},{"line_number":1321,"context_line":"                          network_info\u003dNone)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"    def test_unplug_vifs(self):"},{"line_number":1324,"context_line":"        # Check to make sure the method raises NotImplementedError."},{"line_number":1325,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":1326,"context_line":"                          self._conn.unplug_vifs,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_adf41bf1","side":"PARENT","line":1323,"in_reply_to":"9a80dd14_ab61d13a","updated":"2015-03-16 14:09:16.000000000","message":"Done","commit_id":"6b3ebfd9ddecc8cca323d6828dee0b2179c613e7"}],"nova/tests/unit/virt/hyperv/test_vmops.py":[{"author":{"_account_id":9550,"name":"Eugeniya Kudryashova","email":"ekudryashova@mirantis.com","username":"ekudryashova"},"change_message_id":"9d0a616a44df5fe56854b812ba673c38ddbfbd2c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                    ret_val):"},{"line_number":63,"context_line":"        mock_import_object.side_effect \u003d [ret_val]"},{"line_number":64,"context_line":"        if ret_val is KeyError:"},{"line_number":65,"context_line":"            self.assertRaises(TypeError, self._vmops._load_vif_driver_class)"},{"line_number":66,"context_line":"        else:"},{"line_number":67,"context_line":"            self._vmops._load_vif_driver_class()"},{"line_number":68,"context_line":"            mock_import_object.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_cef31807","line":65,"updated":"2015-01-08 19:47:44.000000000","message":"Not sure that here is reasonable to make this method separate. Except one line behaviour for two tests which use it differs a all, so it would be more readable code if you split this functionality to tests and remove this method","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ea29f015ee9f397117d58d2cb54ffc9b74b52adf","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                    ret_val):"},{"line_number":63,"context_line":"        mock_import_object.side_effect \u003d [ret_val]"},{"line_number":64,"context_line":"        if ret_val is KeyError:"},{"line_number":65,"context_line":"            self.assertRaises(TypeError, self._vmops._load_vif_driver_class)"},{"line_number":66,"context_line":"        else:"},{"line_number":67,"context_line":"            self._vmops._load_vif_driver_class()"},{"line_number":68,"context_line":"            mock_import_object.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_f7f499f2","line":65,"in_reply_to":"3a961159_cef31807","updated":"2015-01-14 10:43:29.000000000","message":"Done","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":9550,"name":"Eugeniya Kudryashova","email":"ekudryashova@mirantis.com","username":"ekudryashova"},"change_message_id":"9d0a616a44df5fe56854b812ba673c38ddbfbd2c","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        self.assertFalse(self._vmops._vmutils.destroy_vm.called)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def test_destroy_exception(self):"},{"line_number":548,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":549,"context_line":"        self._vmops._vmutils.destroy_vm.side_effect \u003d vmutils.HyperVException"},{"line_number":550,"context_line":"        self._vmops._vmutils.vm_exists.return_value \u003d True"},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_aeb16c02","line":548,"updated":"2015-01-08 19:47:44.000000000","message":"Can we also mock here power_off method? Seems like call it here unnesesary","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ea29f015ee9f397117d58d2cb54ffc9b74b52adf","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        self.assertFalse(self._vmops._vmutils.destroy_vm.called)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def test_destroy_exception(self):"},{"line_number":548,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":549,"context_line":"        self._vmops._vmutils.destroy_vm.side_effect \u003d vmutils.HyperVException"},{"line_number":550,"context_line":"        self._vmops._vmutils.vm_exists.return_value \u003d True"},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_17dbe57d","line":548,"in_reply_to":"3a961159_aeb16c02","updated":"2015-01-14 10:43:29.000000000","message":"Done","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":9550,"name":"Eugeniya Kudryashova","email":"ekudryashova@mirantis.com","username":"ekudryashova"},"change_message_id":"9d0a616a44df5fe56854b812ba673c38ddbfbd2c","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        fake_iothread.assert_called_once_with("},{"line_number":782,"context_line":"            pipe_path, mock.sentinel.FAKE_PATH,"},{"line_number":783,"context_line":"            self._vmops._MAX_CONSOLE_LOG_FILE_SIZE)"},{"line_number":784,"context_line":"        fake_iothread.return_value.start.assert_called_once_with()"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    @mock.patch(\"os.path.exists\")"},{"line_number":787,"context_line":"    def test_get_console_output(self, fake_path_exists):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_cefeb869","line":784,"updated":"2015-01-08 19:47:44.000000000","message":"Looks like something wrong with this line.. Could you explain which behaviour you expect from it?","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":9550,"name":"Eugeniya Kudryashova","email":"ekudryashova@mirantis.com","username":"ekudryashova"},"change_message_id":"60276c070a1b0b86b0cdb349beaa5b1ed564cd98","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        fake_iothread.assert_called_once_with("},{"line_number":782,"context_line":"            pipe_path, mock.sentinel.FAKE_PATH,"},{"line_number":783,"context_line":"            self._vmops._MAX_CONSOLE_LOG_FILE_SIZE)"},{"line_number":784,"context_line":"        fake_iothread.return_value.start.assert_called_once_with()"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    @mock.patch(\"os.path.exists\")"},{"line_number":787,"context_line":"    def test_get_console_output(self, fake_path_exists):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_eb13d462","line":784,"in_reply_to":"3a961159_576acd81","updated":"2015-01-14 13:06:20.000000000","message":"Agreed, thanks","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ea29f015ee9f397117d58d2cb54ffc9b74b52adf","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        fake_iothread.assert_called_once_with("},{"line_number":782,"context_line":"            pipe_path, mock.sentinel.FAKE_PATH,"},{"line_number":783,"context_line":"            self._vmops._MAX_CONSOLE_LOG_FILE_SIZE)"},{"line_number":784,"context_line":"        fake_iothread.return_value.start.assert_called_once_with()"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    @mock.patch(\"os.path.exists\")"},{"line_number":787,"context_line":"    def test_get_console_output(self, fake_path_exists):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_576acd81","line":784,"in_reply_to":"3a961159_cefeb869","updated":"2015-01-14 10:43:29.000000000","message":"I\u0027m expecting that the IOThread is started. (aka, start is called on the IOThread object). start has no args, so...","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":9550,"name":"Eugeniya Kudryashova","email":"ekudryashova@mirantis.com","username":"ekudryashova"},"change_message_id":"9d0a616a44df5fe56854b812ba673c38ddbfbd2c","unresolved":false,"context_lines":[{"line_number":855,"context_line":"                 mock.call(mock.sentinel.FAKE_VM_NAME_OTHER)]"},{"line_number":856,"context_line":"        self._vmops._pathutils.get_instance_dir.assert_has_calls(calls)"},{"line_number":857,"context_line":"        get_vm_serial_port \u003d self._vmops._vmutils.get_vm_serial_port_connection"},{"line_number":858,"context_line":"        get_vm_serial_port.assert_called_once_with(mock.sentinel.FAKE_VM_NAME)"},{"line_number":859,"context_line":"        mock_log_vm_output.assert_called_once_with(mock.sentinel.FAKE_VM_NAME,"},{"line_number":860,"context_line":"                                                   mock_basename.return_value)"},{"line_number":861,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_ced158cd","line":858,"updated":"2015-01-08 19:47:44.000000000","message":"Does this check related to this testcase?","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ea29f015ee9f397117d58d2cb54ffc9b74b52adf","unresolved":false,"context_lines":[{"line_number":855,"context_line":"                 mock.call(mock.sentinel.FAKE_VM_NAME_OTHER)]"},{"line_number":856,"context_line":"        self._vmops._pathutils.get_instance_dir.assert_has_calls(calls)"},{"line_number":857,"context_line":"        get_vm_serial_port \u003d self._vmops._vmutils.get_vm_serial_port_connection"},{"line_number":858,"context_line":"        get_vm_serial_port.assert_called_once_with(mock.sentinel.FAKE_VM_NAME)"},{"line_number":859,"context_line":"        mock_log_vm_output.assert_called_once_with(mock.sentinel.FAKE_VM_NAME,"},{"line_number":860,"context_line":"                                                   mock_basename.return_value)"},{"line_number":861,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_f7de593d","line":858,"in_reply_to":"3a961159_ced158cd","updated":"2015-01-14 10:43:29.000000000","message":"Yes, it is related to the test. The method iterates over the active instances (see L848), but only the first instance has a path that exists. So, I\u0027m making sure this method and the one below is called only once.","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":9550,"name":"Eugeniya Kudryashova","email":"ekudryashova@mirantis.com","username":"ekudryashova"},"change_message_id":"60276c070a1b0b86b0cdb349beaa5b1ed564cd98","unresolved":false,"context_lines":[{"line_number":855,"context_line":"                 mock.call(mock.sentinel.FAKE_VM_NAME_OTHER)]"},{"line_number":856,"context_line":"        self._vmops._pathutils.get_instance_dir.assert_has_calls(calls)"},{"line_number":857,"context_line":"        get_vm_serial_port \u003d self._vmops._vmutils.get_vm_serial_port_connection"},{"line_number":858,"context_line":"        get_vm_serial_port.assert_called_once_with(mock.sentinel.FAKE_VM_NAME)"},{"line_number":859,"context_line":"        mock_log_vm_output.assert_called_once_with(mock.sentinel.FAKE_VM_NAME,"},{"line_number":860,"context_line":"                                                   mock_basename.return_value)"},{"line_number":861,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_ab138cb5","line":858,"in_reply_to":"3a961159_f7de593d","updated":"2015-01-14 13:06:20.000000000","message":"Agreed, thanks","commit_id":"dd6cc1bf2cef34ae16b30608f952319a16f616ab"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"5b893e8e4d6a155441e8830cbcf86af8d06f71f7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    FAKE_CONFIG_DRIVE_ISO \u003d \u0027configdrive.iso\u0027"},{"line_number":42,"context_line":"    FAKE_CONFIG_DRIVE_VHD \u003d \u0027configdrive.vhd\u0027"},{"line_number":43,"context_line":"    FAKE_UUID \u003d \u00274f54fb69-d3a2-45b7-bb9b-b6e6b3d893b3\u0027"},{"line_number":44,"context_line":"    FAKE_LOG \u003d \u0027fake_log\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    ISO9660 \u003d \u0027iso9660\u0027"},{"line_number":47,"context_line":"    _FAKE_CONFIGDRIVE_PATH \u003d \u0027C:/fake_instance_dir/configdrive.vhd\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_05bc6a05","line":44,"updated":"2015-01-26 10:09:02.000000000","message":"Should FAKE_LOG be here? Because it\u0027s only used once.","commit_id":"6bd26ab3fd00cea30b8353f37cadb9b1e4899f8e"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"5b893e8e4d6a155441e8830cbcf86af8d06f71f7","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        def getitem(key):"},{"line_number":88,"context_line":"            return fake_info[key]"},{"line_number":89,"context_line":"        mock_info.__getitem__.side_effect \u003d getitem"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        expected \u003d hardware.InstanceInfo(state\u003dconstants.HYPERV_POWER_STATE[2],"},{"line_number":92,"context_line":"                                         max_mem_kb\u003dmock.sentinel.FAKE_MEM_KB,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_a571d6a9","line":89,"updated":"2015-01-26 10:09:02.000000000","message":"Why is this needed? Why not simply set \u0027get_vm_summary_info\u0027 to return \u0027fake_info\u0027 instead of attempting to make a mock behave like a dict?","commit_id":"6bd26ab3fd00cea30b8353f37cadb9b1e4899f8e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"8cd5b21019f5fd4b99ff46147e56c81fa7e9adaf","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        self._vmops._pathutils.get_vm_console_log_paths.return_value \u003d ("},{"line_number":924,"context_line":"            mock.sentinel.FAKE_PATH, )"},{"line_number":925,"context_line":"        mock_log_writer \u003d mock.MagicMock()"},{"line_number":926,"context_line":"        self._vmops._vm_log_writers[mock_instance[\u0027uuid\u0027]] \u003d mock_log_writer"},{"line_number":927,"context_line":""},{"line_number":928,"context_line":"        self._vmops._delete_vm_console_log(mock_instance)"},{"line_number":929,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_07060e1d","line":926,"updated":"2015-01-26 23:27:29.000000000","message":"mock_instance.uuid","commit_id":"6bd26ab3fd00cea30b8353f37cadb9b1e4899f8e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"8cd5b21019f5fd4b99ff46147e56c81fa7e9adaf","unresolved":false,"context_lines":[{"line_number":932,"context_line":""},{"line_number":933,"context_line":"    def test_create_vm_com_port_pipe(self):"},{"line_number":934,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":935,"context_line":"        pipe_path \u003d r\u0027\\\\.\\pipe\\%s\u0027 % mock_instance[\u0027uuid\u0027]"},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        self._vmops._create_vm_com_port_pipe(mock_instance)"},{"line_number":938,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_6744324a","line":935,"updated":"2015-01-26 23:27:29.000000000","message":"ditto","commit_id":"6bd26ab3fd00cea30b8353f37cadb9b1e4899f8e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"8cd5b21019f5fd4b99ff46147e56c81fa7e9adaf","unresolved":false,"context_lines":[{"line_number":937,"context_line":"        self._vmops._create_vm_com_port_pipe(mock_instance)"},{"line_number":938,"context_line":""},{"line_number":939,"context_line":"        get_vm_serial_port \u003d self._vmops._vmutils.get_vm_serial_port_connection"},{"line_number":940,"context_line":"        get_vm_serial_port.assert_called_once_with(mock_instance[\u0027name\u0027],"},{"line_number":941,"context_line":"                                                   update_connection\u003dpipe_path)"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"    @mock.patch.object(vmops.VMOps, \"log_vm_serial_output\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_e777429e","line":940,"updated":"2015-01-26 23:27:29.000000000","message":"ditto","commit_id":"6bd26ab3fd00cea30b8353f37cadb9b1e4899f8e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39c52c360e3c8ed0d060061537c02d3d0860bd91","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        mock_delete_disk_files.assert_called_once_with("},{"line_number":642,"context_line":"            mock_instance.name)"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"    def test_destroy_inexistent_instance(self):"},{"line_number":645,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":646,"context_line":"        self._vmops._vmutils.vm_exists.return_value \u003d False"},{"line_number":647,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_0b01fd69","line":644,"updated":"2015-03-12 20:10:13.000000000","message":"nit: s/inexistent/nonexistent/","commit_id":"8fca5ee301f13f95f2810d8713f3f215ce72c053"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"022bf07bd8ac1c1967710a3bc65c339e70d6154d","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        mock_delete_disk_files.assert_called_once_with("},{"line_number":642,"context_line":"            mock_instance.name)"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"    def test_destroy_inexistent_instance(self):"},{"line_number":645,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":646,"context_line":"        self._vmops._vmutils.vm_exists.return_value \u003d False"},{"line_number":647,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_a99df00b","line":644,"in_reply_to":"9a80dd14_0b01fd69","updated":"2015-03-16 14:09:16.000000000","message":"Done","commit_id":"8fca5ee301f13f95f2810d8713f3f215ce72c053"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a749189873864d0f7767b20ede358a7378140b5f","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        mock_delete_disk_files.assert_called_once_with("},{"line_number":642,"context_line":"            mock_instance.name)"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"    def test_destroy_inexistent_instance(self):"},{"line_number":645,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":646,"context_line":"        self._vmops._vmutils.vm_exists.return_value \u003d False"},{"line_number":647,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a80dd14_d8d9b9f5","line":644,"updated":"2015-03-17 19:32:03.000000000","message":"nit: s/inexistent/nonexistent/","commit_id":"a300b3ae83f2acfbb3eed3c2bc1b7c28f2725063"}]}
