)]}'
{"nova/tests/unit/virt/disk/test_api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"859fb22ae4bd9b2f51fc93ae197dacaefa99b0f9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # NOTE(mikal): Bug 1094373 saw a regression where we failed to"},{"line_number":46,"context_line":"        # treat a failure to mount as a failure to be able to resize the"},{"line_number":47,"context_line":"        # filesystem"},{"line_number":48,"context_line":"        self.stub_out(\u0027nova.virt.disk.api.get_disk_size\u0027,"},{"line_number":49,"context_line":"                      lambda path: 10)"},{"line_number":50,"context_line":"        self.stub_out(\u0027nova.utils.trycmd\u0027,"},{"line_number":51,"context_line":"                      lambda *a, **kw: (\u0027\u0027, \u0027broken\u0027))"},{"line_number":52,"context_line":"        self.stub_out(\u0027nova.virt.disk.mount.nbd.NbdMount.get_dev\u0027,"},{"line_number":53,"context_line":"                      lambda *a, **kw: True)"},{"line_number":54,"context_line":"        self.stub_out(\u0027nova.virt.disk.mount.nbd.NbdMount.map_dev\u0027,"},{"line_number":55,"context_line":"                      lambda *a, **kw: True)"},{"line_number":56,"context_line":"        self.stub_out(\u0027nova.virt.disk.vfs.localfs.VFSLocalFS.get_image_fs\u0027,"},{"line_number":57,"context_line":"                      lambda *a, **kw: \u0027\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # Force the use of localfs, which is what was used during the failure"},{"line_number":60,"context_line":"        # reported in the bug"},{"line_number":61,"context_line":"        def fake_import_fails(*args, **kwargs):"},{"line_number":62,"context_line":"            raise Exception(\u0027Failed\u0027)"},{"line_number":63,"context_line":"        self.stub_out(\u0027oslo_utils.import_module\u0027,"},{"line_number":64,"context_line":"                      fake_import_fails)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":67,"context_line":"        self.addCleanup(imgfile.close)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_91fefe03","line":64,"range":{"start_line":48,"start_character":0,"end_line":64,"end_character":40},"updated":"2017-02-28 14:24:56.000000000","message":"These are all valid but they\u0027re pretty tough to read. Could we use decorators and return_value/side_effect arguments instead?","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"e7781c3edb53c4d0999826220fab08de8d8545cb","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # NOTE(mikal): Bug 1094373 saw a regression where we failed to"},{"line_number":46,"context_line":"        # treat a failure to mount as a failure to be able to resize the"},{"line_number":47,"context_line":"        # filesystem"},{"line_number":48,"context_line":"        self.stub_out(\u0027nova.virt.disk.api.get_disk_size\u0027,"},{"line_number":49,"context_line":"                      lambda path: 10)"},{"line_number":50,"context_line":"        self.stub_out(\u0027nova.utils.trycmd\u0027,"},{"line_number":51,"context_line":"                      lambda *a, **kw: (\u0027\u0027, \u0027broken\u0027))"},{"line_number":52,"context_line":"        self.stub_out(\u0027nova.virt.disk.mount.nbd.NbdMount.get_dev\u0027,"},{"line_number":53,"context_line":"                      lambda *a, **kw: True)"},{"line_number":54,"context_line":"        self.stub_out(\u0027nova.virt.disk.mount.nbd.NbdMount.map_dev\u0027,"},{"line_number":55,"context_line":"                      lambda *a, **kw: True)"},{"line_number":56,"context_line":"        self.stub_out(\u0027nova.virt.disk.vfs.localfs.VFSLocalFS.get_image_fs\u0027,"},{"line_number":57,"context_line":"                      lambda *a, **kw: \u0027\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # Force the use of localfs, which is what was used during the failure"},{"line_number":60,"context_line":"        # reported in the bug"},{"line_number":61,"context_line":"        def fake_import_fails(*args, **kwargs):"},{"line_number":62,"context_line":"            raise Exception(\u0027Failed\u0027)"},{"line_number":63,"context_line":"        self.stub_out(\u0027oslo_utils.import_module\u0027,"},{"line_number":64,"context_line":"                      fake_import_fails)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":67,"context_line":"        self.addCleanup(imgfile.close)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_c219aa23","line":64,"range":{"start_line":48,"start_character":0,"end_line":64,"end_character":40},"in_reply_to":"ba2be162_91fefe03","updated":"2017-03-06 01:48:32.000000000","message":"+1","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"62eb9d933842a6c386097c66ea4de93b068064bf","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # NOTE(mikal): Bug 1094373 saw a regression where we failed to"},{"line_number":46,"context_line":"        # treat a failure to mount as a failure to be able to resize the"},{"line_number":47,"context_line":"        # filesystem"},{"line_number":48,"context_line":"        self.stub_out(\u0027nova.virt.disk.api.get_disk_size\u0027,"},{"line_number":49,"context_line":"                      lambda path: 10)"},{"line_number":50,"context_line":"        self.stub_out(\u0027nova.utils.trycmd\u0027,"},{"line_number":51,"context_line":"                      lambda *a, **kw: (\u0027\u0027, \u0027broken\u0027))"},{"line_number":52,"context_line":"        self.stub_out(\u0027nova.virt.disk.mount.nbd.NbdMount.get_dev\u0027,"},{"line_number":53,"context_line":"                      lambda *a, **kw: True)"},{"line_number":54,"context_line":"        self.stub_out(\u0027nova.virt.disk.mount.nbd.NbdMount.map_dev\u0027,"},{"line_number":55,"context_line":"                      lambda *a, **kw: True)"},{"line_number":56,"context_line":"        self.stub_out(\u0027nova.virt.disk.vfs.localfs.VFSLocalFS.get_image_fs\u0027,"},{"line_number":57,"context_line":"                      lambda *a, **kw: \u0027\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # Force the use of localfs, which is what was used during the failure"},{"line_number":60,"context_line":"        # reported in the bug"},{"line_number":61,"context_line":"        def fake_import_fails(*args, **kwargs):"},{"line_number":62,"context_line":"            raise Exception(\u0027Failed\u0027)"},{"line_number":63,"context_line":"        self.stub_out(\u0027oslo_utils.import_module\u0027,"},{"line_number":64,"context_line":"                      fake_import_fails)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":67,"context_line":"        self.addCleanup(imgfile.close)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_00eddcee","line":64,"range":{"start_line":48,"start_character":0,"end_line":64,"end_character":40},"in_reply_to":"ba2be162_91fefe03","updated":"2017-03-09 13:35:56.000000000","message":"I made these decorators, but it seems this test is obsolete. oslo_utils has no import_module, most of the mocked functions don\u0027t get called.","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"e7781c3edb53c4d0999826220fab08de8d8545cb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        image \u003d imgmodel.LocalFileImage(imgfile.name, imgmodel.FORMAT_QCOW2)"},{"line_number":69,"context_line":"        self.assertFalse(api.is_image_extendable(image))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":72,"context_line":"    def test_is_image_extendable_raw(self, mock_exec):"},{"line_number":73,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":74,"context_line":"        image \u003d imgmodel.LocalFileImage(imgfile, imgmodel.FORMAT_RAW)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_a5dbe07a","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":40},"updated":"2017-03-06 01:48:32.000000000","message":"It would better to consider putting \"autospec\u003dTrue\" at least, or both \"autospec\u003dTrue, spec_set\u003dTrue\" [1] in all of decorators\u0027 argument like:\n\n @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue)\n\n or\n\n @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue, spec_set\u003dTrue)\n\nIf autospec\u003dTrue then methods and functions being mocked will have their arguments checked and will raise a TypeError if they are called with the wrong signature.\n\nIf spec_set\u003dTrue then attempting to set attributes that don\u0027t exist on the spec object will raise an AttributeError.\n\n [1] https://docs.python.org/3.5/library/unittest.mock.html#autospeccing","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"62eb9d933842a6c386097c66ea4de93b068064bf","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        image \u003d imgmodel.LocalFileImage(imgfile.name, imgmodel.FORMAT_QCOW2)"},{"line_number":69,"context_line":"        self.assertFalse(api.is_image_extendable(image))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":72,"context_line":"    def test_is_image_extendable_raw(self, mock_exec):"},{"line_number":73,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":74,"context_line":"        image \u003d imgmodel.LocalFileImage(imgfile, imgmodel.FORMAT_RAW)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_406514b3","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":40},"in_reply_to":"ba2be162_a5dbe07a","updated":"2017-03-09 13:35:56.000000000","message":"I updated with a note that autospec\u003dTrue seems not work on static methods. Reference: https://bugs.python.org/issue23078. So skipped using this at some places.","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"859fb22ae4bd9b2f51fc93ae197dacaefa99b0f9","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":100,"context_line":"        self.addCleanup(imgfile.close)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        mock_exec.side_effect \u003d processutils.ProcessExecutionError(\"fs error\")"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        api.resize2fs(imgfile)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_91251eb0","line":102,"range":{"start_line":102,"start_character":9,"end_line":102,"end_character":78},"updated":"2017-02-28 14:24:56.000000000","message":"This could be an argument to the decorator","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"62eb9d933842a6c386097c66ea4de93b068064bf","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":100,"context_line":"        self.addCleanup(imgfile.close)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        mock_exec.side_effect \u003d processutils.ProcessExecutionError(\"fs error\")"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        api.resize2fs(imgfile)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_5c01cfad","line":102,"range":{"start_line":102,"start_character":9,"end_line":102,"end_character":78},"in_reply_to":"ba2be162_91251eb0","updated":"2017-03-09 13:35:56.000000000","message":"Done","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"859fb22ae4bd9b2f51fc93ae197dacaefa99b0f9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            image, None, None)"},{"line_number":128,"context_line":"        mounter.device \u003d device"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        mock_can_resize.return_value \u003d True"},{"line_number":131,"context_line":"        mock_extendable.return_value \u003d True"},{"line_number":132,"context_line":"        mock_inst.return_value \u003d mounter"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        with test.nested("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_f1249ab0","line":131,"range":{"start_line":130,"start_character":0,"end_line":131,"end_character":43},"updated":"2017-02-28 14:24:56.000000000","message":"These could be decorator arguments","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"62eb9d933842a6c386097c66ea4de93b068064bf","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            image, None, None)"},{"line_number":128,"context_line":"        mounter.device \u003d device"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        mock_can_resize.return_value \u003d True"},{"line_number":131,"context_line":"        mock_extendable.return_value \u003d True"},{"line_number":132,"context_line":"        mock_inst.return_value \u003d mounter"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        with test.nested("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_dc2bff2e","line":131,"range":{"start_line":130,"start_character":0,"end_line":131,"end_character":43},"in_reply_to":"ba2be162_f1249ab0","updated":"2017-03-09 13:35:56.000000000","message":"Done","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"859fb22ae4bd9b2f51fc93ae197dacaefa99b0f9","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        imgsize \u003d 10"},{"line_number":198,"context_line":"        image \u003d imgmodel.LocalFileImage(imgfile, imgmodel.FORMAT_RAW)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        mock_can_resize.return_value \u003d True"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        api.extend(image, imgsize)"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_914c3e78","line":200,"range":{"start_line":200,"start_character":7,"end_line":200,"end_character":43},"updated":"2017-02-28 14:24:56.000000000","message":"decorator argument","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"62eb9d933842a6c386097c66ea4de93b068064bf","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        imgsize \u003d 10"},{"line_number":198,"context_line":"        image \u003d imgmodel.LocalFileImage(imgfile, imgmodel.FORMAT_RAW)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        mock_can_resize.return_value \u003d True"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        api.extend(image, imgsize)"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_7cd3f338","line":200,"range":{"start_line":200,"start_character":7,"end_line":200,"end_character":43},"in_reply_to":"ba2be162_914c3e78","updated":"2017-03-09 13:35:56.000000000","message":"Done","commit_id":"d03c581dff1241395061c98397fe927c3f61c0a4"}]}
