)]}'
{".zuul.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"893021ea5884556f3158a6de0a73ac14ffdd8ca4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"bf659307_e1f7a7d2","updated":"2018-03-29 15:01:05.000000000","message":"Do we need to keep these changes?","commit_id":"14fecb59c1f9ed11749e5bb5af67562f103bc962"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"cfb522ad8ae939938b674347324291b256d0dbac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"bf659307_1f32205f","in_reply_to":"bf659307_e1f7a7d2","updated":"2018-03-30 10:17:44.000000000","message":"We don\u0027t. As you\u0027ve noticed, I\u0027ve sent a patch to oslotest regarding patching mock.MagicMock properly (MagicMock was ignoring the autospec argument). I wanted to make sure that everything passes and that everything is fine when running unit tests including that patch. Everything seems fine to me, so we can remove these changes.","commit_id":"14fecb59c1f9ed11749e5bb5af67562f103bc962"}],"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":7,"context_line":"tests: autospecs all the mock.patch usages"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"By default, mock.patch\u0027s autospec argument is None, meaning that"},{"line_number":10,"context_line":"there\u0027s no signature checking for the patched methods and funtions."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"oslotest.mock_fixture.patch_mock_module fixes a few issues within"},{"line_number":13,"context_line":"mock.patch functions, as well as setting autospec\u003dTrue by default,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"bf659307_40981bbf","line":10,"range":{"start_line":10,"start_character":58,"end_line":10,"end_character":66},"updated":"2018-03-27 09:49:10.000000000","message":"functions","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"tests: autospecs all the mock.patch usages"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"By default, mock.patch\u0027s autospec argument is None, meaning that"},{"line_number":10,"context_line":"there\u0027s no signature checking for the patched methods and funtions."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"oslotest.mock_fixture.patch_mock_module fixes a few issues within"},{"line_number":13,"context_line":"mock.patch functions, as well as setting autospec\u003dTrue by default,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"bf659307_f62ed5f8","line":10,"range":{"start_line":10,"start_character":58,"end_line":10,"end_character":66},"in_reply_to":"bf659307_40981bbf","updated":"2018-03-28 10:42:41.000000000","message":"oups. :)","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"}],"nova/cells/rpcapi.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    def live_migrate_instance(self, ctxt, instance, host_name,"},{"line_number":595,"context_line":"                              block_migration, disk_over_commit,"},{"line_number":596,"context_line":"                              request_spec\u003dNone, async\u003dFalse):"},{"line_number":597,"context_line":"        # NOTE(sbauza): Since Cells v1 is quite feature-freeze, we don\u0027t want"},{"line_number":598,"context_line":"        # to pass down request_spec to the manager and rather keep the"},{"line_number":599,"context_line":"        # cell conductor providing a new RequestSpec like the original"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_e0eccf2a","line":596,"range":{"start_line":596,"start_character":47,"end_line":596,"end_character":60},"updated":"2018-03-27 09:49:10.000000000","message":"Why was this needed?","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"71241e30f586d33f09dd03c22720920d9c625942","unresolved":false,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    def live_migrate_instance(self, ctxt, instance, host_name,"},{"line_number":595,"context_line":"                              block_migration, disk_over_commit,"},{"line_number":596,"context_line":"                              request_spec\u003dNone, async\u003dFalse):"},{"line_number":597,"context_line":"        # NOTE(sbauza): Since Cells v1 is quite feature-freeze, we don\u0027t want"},{"line_number":598,"context_line":"        # to pass down request_spec to the manager and rather keep the"},{"line_number":599,"context_line":"        # cell conductor providing a new RequestSpec like the original"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_778dbc79","line":596,"range":{"start_line":596,"start_character":47,"end_line":596,"end_character":60},"in_reply_to":"bf659307_164909cf","updated":"2018-03-28 11:01:49.000000000","message":"Found it eventually. http://paste.openstack.org/show/716292/\n\nwill let zuul fail though, after which i\u0027ll send another PS.","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    def live_migrate_instance(self, ctxt, instance, host_name,"},{"line_number":595,"context_line":"                              block_migration, disk_over_commit,"},{"line_number":596,"context_line":"                              request_spec\u003dNone, async\u003dFalse):"},{"line_number":597,"context_line":"        # NOTE(sbauza): Since Cells v1 is quite feature-freeze, we don\u0027t want"},{"line_number":598,"context_line":"        # to pass down request_spec to the manager and rather keep the"},{"line_number":599,"context_line":"        # cell conductor providing a new RequestSpec like the original"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_164909cf","line":596,"range":{"start_line":596,"start_character":47,"end_line":596,"end_character":60},"in_reply_to":"bf659307_e0eccf2a","updated":"2018-03-28 10:42:41.000000000","message":"There used to be a failure because of this argument was missing. Don\u0027t remember what unit tests were failing because of this. Will remove for now, but I\u0027m expecting it to fail again.","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"}],"nova/network/manager.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9ffb292c62aa18dcbd495288a9d1d6901de94eb4","unresolved":false,"context_lines":[{"line_number":868,"context_line":"                              instance\u003dinstance)"},{"line_number":869,"context_line":"                    address \u003d str(fip.address)"},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"                cleanup.append(fip.disassociate)"},{"line_number":872,"context_line":""},{"line_number":873,"context_line":"                # NOTE(melwitt): We recheck the quota after creating the object"},{"line_number":874,"context_line":"                # to prevent users from allocating more resources than their"}],"source_content_type":"text/x-python","patch_set":42,"id":"7faddb67_fe65ccaf","line":871,"updated":"2019-08-19 14:42:25.000000000","message":"✔","commit_id":"b4cf6960ad803b63294ee2f6a1dc8517ea0ee26a"}],"nova/objects/quotas.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        pass"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    # TODO(melwitt): Remove this method in version 2.0 of the object."},{"line_number":487,"context_line":"    def commit(self):"},{"line_number":488,"context_line":"        pass"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    # TODO(melwitt): Remove this method in version 2.0 of the object."}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_60d8bf7e","line":487,"range":{"start_line":487,"start_character":19,"end_line":487,"end_character":21},"updated":"2018-03-27 09:49:10.000000000","message":"Doesn\u0027t this break the object\u0027s API?","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        pass"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    # TODO(melwitt): Remove this method in version 2.0 of the object."},{"line_number":487,"context_line":"    def commit(self):"},{"line_number":488,"context_line":"        pass"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    # TODO(melwitt): Remove this method in version 2.0 of the object."}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_f67c95ec","line":487,"range":{"start_line":487,"start_character":19,"end_line":487,"end_character":21},"in_reply_to":"bf659307_60d8bf7e","updated":"2018-03-28 10:42:41.000000000","message":"it should have been with just self. The Quotas class\u0027 commit / rollback only have self as an argument. See above.","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1069db18c9d25f0f4cea461c9a8c1d5e7a20d530","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        pass"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    # TODO(melwitt): Remove this method in version 2.0 of the object."},{"line_number":487,"context_line":"    def commit(self):"},{"line_number":488,"context_line":"        pass"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    # TODO(melwitt): Remove this method in version 2.0 of the object."}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_61a2b7ff","line":487,"range":{"start_line":487,"start_character":19,"end_line":487,"end_character":21},"in_reply_to":"bf659307_f67c95ec","updated":"2018-03-29 14:59:48.000000000","message":"Indeed","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"}],"nova/test.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    mock.Mock.__getattr__ \u003d raise_for_invalid_assert_calls("},{"line_number":170,"context_line":"        mock.Mock.__getattr__)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"# NOTE(gibi): needs to be called only once at import time"},{"line_number":173,"context_line":"# to patch the mock lib"},{"line_number":174,"context_line":"_patch_mock_to_raise_for_invalid_assert_calls()"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"# NOTE(claudiub): this needs to be called before any mock.patch calls are"},{"line_number":177,"context_line":"# being done, and especially before any other test classes load. This fixes"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_a0cfb7ae","line":174,"range":{"start_line":172,"start_character":0,"end_line":174,"end_character":47},"updated":"2018-03-27 09:49:10.000000000","message":"side note: This could probably get dragged into oslo.test too, I\u0027d say?","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    mock.Mock.__getattr__ \u003d raise_for_invalid_assert_calls("},{"line_number":170,"context_line":"        mock.Mock.__getattr__)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"# NOTE(gibi): needs to be called only once at import time"},{"line_number":173,"context_line":"# to patch the mock lib"},{"line_number":174,"context_line":"_patch_mock_to_raise_for_invalid_assert_calls()"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"# NOTE(claudiub): this needs to be called before any mock.patch calls are"},{"line_number":177,"context_line":"# being done, and especially before any other test classes load. This fixes"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_965c397f","line":174,"range":{"start_line":172,"start_character":0,"end_line":174,"end_character":47},"in_reply_to":"bf659307_a0cfb7ae","updated":"2018-03-28 10:42:41.000000000","message":"yeah, makes sense, but that will have to be done in another patch.","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"}],"nova/tests/fixtures.py":[{"author":{"_account_id":19853,"name":"Nguyen Hung Phuong","email":"phuongnh@vn.fujitsu.com","username":"phuongnh"},"change_message_id":"7e8da726ec2463f9e92df00e8e7f425f0c797b98","unresolved":false,"context_lines":[{"line_number":1677,"context_line":"        # By default, autospec is None. We will consider it as True."},{"line_number":1678,"context_line":"        autospec \u003d True if self.autospec is None else self.autospec"},{"line_number":1679,"context_line":""},{"line_number":1680,"context_line":"        #import pdb; pdb.set_trace()"},{"line_number":1681,"context_line":"        # in some cases, autospec cannot be set to True."},{"line_number":1682,"context_line":"        skip_autospec \u003d (getattr(self, attr) for attr in"},{"line_number":1683,"context_line":"                         [\u0027new_callable\u0027, \u0027create\u0027, \u0027spec\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_8d802df7","line":1680,"range":{"start_line":1680,"start_character":8,"end_line":1680,"end_character":36},"updated":"2017-11-28 10:06:21.000000000","message":"should be \"# import\"","commit_id":"0c897f7c165264f6110ab21ced89d6a8bf5cf778"}],"nova/tests/unit/api/openstack/compute/test_virtual_interfaces.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        # the tests need to specifically run against nova-network unless"},{"line_number":78,"context_line":"        # otherwise setup to run with Neutron and expect failure."},{"line_number":79,"context_line":"        self.flags(use_neutron\u003dFalse)"},{"line_number":80,"context_line":"        self.compute_api_get_patcher \u003d mock.patch.object("},{"line_number":81,"context_line":"            compute.api.API, \"get\","},{"line_number":82,"context_line":"            side_effect\u003dcompute_api_get)"},{"line_number":83,"context_line":"        self.get_vifs_by_instance_patcher \u003d mock.patch.object("},{"line_number":84,"context_line":"            network.api.API, \"get_vifs_by_instance\","},{"line_number":85,"context_line":"            side_effect\u003dget_vifs_by_instance)"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_404b3b2a","side":"PARENT","line":82,"range":{"start_line":80,"start_character":0,"end_line":82,"end_character":40},"updated":"2018-03-27 09:49:10.000000000","message":"Here","commit_id":"1dfbb09a862373b8c9920798dd273bf039db3cbd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        limited_response \u003d {name: [self.expected_response[name][1]]}"},{"line_number":106,"context_line":"        self.assertEqual(limited_response, res_dict)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @mock.patch.object(compute_api.API, \u0027get\u0027,"},{"line_number":109,"context_line":"                       side_effect\u003dexception.InstanceNotFound("},{"line_number":110,"context_line":"                           instance_id\u003d\u0027instance-0000\u0027))"},{"line_number":111,"context_line":"    def test_vif_instance_not_found(self, mock_get):"},{"line_number":112,"context_line":"        fake_context \u003d context.RequestContext(\u0027fake\u0027, \u0027fake\u0027)"},{"line_number":113,"context_line":"        fake_req \u003d FakeRequest(fake_context)"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_a044971c","side":"PARENT","line":110,"range":{"start_line":108,"start_character":0,"end_line":110,"end_character":56},"updated":"2018-03-27 09:49:10.000000000","message":"So this wasn\u0027t necessary because of the above?","commit_id":"1dfbb09a862373b8c9920798dd273bf039db3cbd"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        limited_response \u003d {name: [self.expected_response[name][1]]}"},{"line_number":106,"context_line":"        self.assertEqual(limited_response, res_dict)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @mock.patch.object(compute_api.API, \u0027get\u0027,"},{"line_number":109,"context_line":"                       side_effect\u003dexception.InstanceNotFound("},{"line_number":110,"context_line":"                           instance_id\u003d\u0027instance-0000\u0027))"},{"line_number":111,"context_line":"    def test_vif_instance_not_found(self, mock_get):"},{"line_number":112,"context_line":"        fake_context \u003d context.RequestContext(\u0027fake\u0027, \u0027fake\u0027)"},{"line_number":113,"context_line":"        fake_req \u003d FakeRequest(fake_context)"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_5604614a","side":"PARENT","line":110,"range":{"start_line":108,"start_character":0,"end_line":110,"end_character":56},"in_reply_to":"bf659307_a044971c","updated":"2018-03-28 10:42:41.000000000","message":"yeah, pretty much. there\u0027s no point in autospecing the same thing twice. Plus, autospecing a mock used to be funky. Might have solved it in the meanwhile.","commit_id":"1dfbb09a862373b8c9920798dd273bf039db3cbd"}],"nova/tests/unit/cells/test_cells_messaging.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    def _run_compute_api_method(self, method_name, *args, **kwargs):"},{"line_number":715,"context_line":"        instance \u003d fake_instance.fake_instance_obj(self.ctxt)"},{"line_number":716,"context_line":"        method_args \u003d (instance.uuid, ) + args"},{"line_number":717,"context_line":"        method_info \u003d {\u0027method\u0027: method_name,"},{"line_number":718,"context_line":"                       \u0027method_args\u0027: method_args,"},{"line_number":719,"context_line":"                       \u0027method_kwargs\u0027: kwargs}"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_a0125708","line":716,"range":{"start_line":716,"start_character":0,"end_line":716,"end_character":46},"updated":"2018-03-27 09:49:10.000000000","message":"nit: I\u0027d just squash this into the below line, seeing as it fits","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    def _run_compute_api_method(self, method_name, *args, **kwargs):"},{"line_number":715,"context_line":"        instance \u003d fake_instance.fake_instance_obj(self.ctxt)"},{"line_number":716,"context_line":"        method_args \u003d (instance.uuid, ) + args"},{"line_number":717,"context_line":"        method_info \u003d {\u0027method\u0027: method_name,"},{"line_number":718,"context_line":"                       \u0027method_args\u0027: method_args,"},{"line_number":719,"context_line":"                       \u0027method_kwargs\u0027: kwargs}"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_16fee936","line":716,"range":{"start_line":716,"start_character":0,"end_line":716,"end_character":46},"in_reply_to":"bf659307_a0125708","updated":"2018-03-28 10:42:41.000000000","message":"Done","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"}],"nova/tests/unit/cmd/test_baseproxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                   mock_exists):"},{"line_number":64,"context_line":"        baseproxy.proxy(\u00270.0.0.0\u0027, \u00276080\u0027)"},{"line_number":65,"context_line":"        mock_log.assert_called_once_with(baseproxy.CONF, \u0027nova\u0027)"},{"line_number":66,"context_line":"        mock_gmr.mock_assert_called_once_with(version)"},{"line_number":67,"context_line":"        mock_init.assert_called_once_with("},{"line_number":68,"context_line":"            listen_host\u003d\u00270.0.0.0\u0027, listen_port\u003d\u00276080\u0027, source_is_ipv6\u003dFalse,"},{"line_number":69,"context_line":"            cert\u003d\u0027self.pem\u0027, key\u003dNone, ssl_only\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_a02b372e","side":"PARENT","line":66,"range":{"start_line":66,"start_character":17,"end_line":66,"end_character":45},"updated":"2018-03-27 09:49:10.000000000","message":"I\u0027m starting to like this","commit_id":"1dfbb09a862373b8c9920798dd273bf039db3cbd"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":4942,"context_line":"        mock_rec_action.assert_called_once_with(self.context,"},{"line_number":4943,"context_line":"                                    instance,"},{"line_number":4944,"context_line":"                                    instance_actions.LIVE_MIGRATION_CANCEL)"},{"line_number":4945,"context_line":"        # NOTE(claudiub): nova.compute.cells_api.ComputeRPCAPIRedirect does"},{"line_number":4946,"context_line":"        # not support live migration abort, causing this assert to fail."},{"line_number":4947,"context_line":"        # mock_lm_abort.assert_called_once_with(self.context, instance,"},{"line_number":4948,"context_line":"        #                                       migration.id)"},{"line_number":4949,"context_line":""},{"line_number":4950,"context_line":"    @mock.patch.object(objects.Migration, \u0027get_by_id_and_instance\u0027)"},{"line_number":4951,"context_line":"    def test_live_migration_abort_wrong_migration_status(self,"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_40e7bb13","line":4948,"range":{"start_line":4945,"start_character":0,"end_line":4948,"end_character":61},"updated":"2018-03-27 09:49:10.000000000","message":"Wonder if it\u0027s worth updating this to \u0027assert_not_called\u0027 or similar and keeping the NOTE?","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":4942,"context_line":"        mock_rec_action.assert_called_once_with(self.context,"},{"line_number":4943,"context_line":"                                    instance,"},{"line_number":4944,"context_line":"                                    instance_actions.LIVE_MIGRATION_CANCEL)"},{"line_number":4945,"context_line":"        # NOTE(claudiub): nova.compute.cells_api.ComputeRPCAPIRedirect does"},{"line_number":4946,"context_line":"        # not support live migration abort, causing this assert to fail."},{"line_number":4947,"context_line":"        # mock_lm_abort.assert_called_once_with(self.context, instance,"},{"line_number":4948,"context_line":"        #                                       migration.id)"},{"line_number":4949,"context_line":""},{"line_number":4950,"context_line":"    @mock.patch.object(objects.Migration, \u0027get_by_id_and_instance\u0027)"},{"line_number":4951,"context_line":"    def test_live_migration_abort_wrong_migration_status(self,"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_169349fc","line":4948,"range":{"start_line":4945,"start_character":0,"end_line":4948,"end_character":61},"in_reply_to":"bf659307_40e7bb13","updated":"2018-03-28 10:42:41.000000000","message":"Sure. The reason I\u0027ve kept this as it is now is to raise the attention of the cores. I didn\u0027t look too much into why LM is not supported, but I was thinking that it should.\n\nPS: it\u0027s actually a bit more complicated than this. In ComputeAPIAPICellUnitTestCase abort live migration is not called, but in ComputeAPIComputeCellUnitTestCase and ComputeAPIUnitTestCase, it is. I guess I can make a conditional assertion.","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"}],"nova/tests/unit/network/security_group/test_neutron_driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        setattr(self.context,"},{"line_number":35,"context_line":"                \u0027auth_token\u0027,"},{"line_number":36,"context_line":"                \u0027bff4a5a6b9eb4ea2a6efec6eefb77936\u0027)"},{"line_number":37,"context_line":"        self.mocked_client \u003d mock.Mock(spec\u003dclient.Client)"},{"line_number":38,"context_line":"        self.stub_out(\u0027nova.network.neutronv2.api.get_client\u0027,"},{"line_number":39,"context_line":"                      lambda context: self.mocked_client)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_80ab9387","side":"PARENT","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":58},"updated":"2018-03-27 09:49:10.000000000","message":"This?","commit_id":"1dfbb09a862373b8c9920798dd273bf039db3cbd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        security_groups_list \u003d {\u0027security_groups\u0027: []}"},{"line_number":57,"context_line":"        admin_context \u003d context.RequestContext(\u0027user1\u0027, project_id, True)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        with mock.patch.object("},{"line_number":60,"context_line":"                self.mocked_client,"},{"line_number":61,"context_line":"                \u0027list_security_groups\u0027,"},{"line_number":62,"context_line":"                return_value\u003dsecurity_groups_list) as mock_list_secgroup:"},{"line_number":63,"context_line":"            sg_api \u003d neutron_driver.SecurityGroupAPI()"},{"line_number":64,"context_line":"            sg_api.list(admin_context,"},{"line_number":65,"context_line":"                        project\u003dproject_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_00ca236c","side":"PARENT","line":62,"range":{"start_line":59,"start_character":0,"end_line":62,"end_character":73},"updated":"2018-03-27 09:49:10.000000000","message":"This isn\u0027t needed anymore because of the mocking of the client above, right?","commit_id":"1dfbb09a862373b8c9920798dd273bf039db3cbd"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        security_groups_list \u003d {\u0027security_groups\u0027: []}"},{"line_number":57,"context_line":"        admin_context \u003d context.RequestContext(\u0027user1\u0027, project_id, True)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        with mock.patch.object("},{"line_number":60,"context_line":"                self.mocked_client,"},{"line_number":61,"context_line":"                \u0027list_security_groups\u0027,"},{"line_number":62,"context_line":"                return_value\u003dsecurity_groups_list) as mock_list_secgroup:"},{"line_number":63,"context_line":"            sg_api \u003d neutron_driver.SecurityGroupAPI()"},{"line_number":64,"context_line":"            sg_api.list(admin_context,"},{"line_number":65,"context_line":"                        project\u003dproject_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_1196d0f1","side":"PARENT","line":62,"range":{"start_line":59,"start_character":0,"end_line":62,"end_character":73},"in_reply_to":"bf659307_00ca236c","updated":"2018-03-28 10:42:41.000000000","message":"Exactly. There\u0027s no point in mocking the same thing twice. Additionally, there used to be an issue with autospecing a mock. I might have solved it in the meanwhile.","commit_id":"1dfbb09a862373b8c9920798dd273bf039db3cbd"}],"nova/tests/unit/test_json_ref.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9ffb292c62aa18dcbd495288a9d1d6901de94eb4","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        d \u003d copy.deepcopy(input)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @mock.patch(\u0027oslo_serialization.jsonutils.load\u0027)"},{"line_number":58,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027, new_callable\u003dmock.mock_open())"},{"line_number":59,"context_line":"    def test_resolve_ref(self, mock_open, mock_json_load):"},{"line_number":60,"context_line":"        mock_json_load.return_value \u003d {\u0027baz\u0027: 13}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7faddb67_7e00fc66","line":58,"updated":"2019-08-19 14:42:25.000000000","message":"These could be replaced with patch_open [1] (later)\n\n[1] introduced here https://review.opendev.org/#/c/661266/4/nova/test.py@874","commit_id":"b4cf6960ad803b63294ee2f6a1dc8517ea0ee26a"}],"nova/tests/unit/test_mock_sanity.py":[{"author":{"_account_id":19853,"name":"Nguyen Hung Phuong","email":"phuongnh@vn.fujitsu.com","username":"phuongnh"},"change_message_id":"f07d4ecfe28b7aee8a04b3af1540e206516365ef","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        partial \u003d functools.partial(foo)"},{"line_number":80,"context_line":"        anon_obj \u003d type(\u0027anonymous\u0027, (object, ), {\u0027foo\u0027: partial})()"},{"line_number":81,"context_line":"        with mock.patch.object(anon_obj, \u0027foo\u0027, autospec\u003dTrue) as mock_foo:"},{"line_number":82,"context_line":"            import pdb; pdb.set_trace()"},{"line_number":83,"context_line":"            anon_obj.foo(mock.sentinel.lish)"},{"line_number":84,"context_line":"            mock_foo.assert_called_once_with(mock.sentinel.lish)"},{"line_number":85,"context_line":"            self.assertRaises(TypeError, anon_obj.foo)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff82abbf_545e5076","line":82,"updated":"2017-11-27 09:32:46.000000000","message":"should be in 2 lines.","commit_id":"7196be708b708e3fa2e2e19107f900e2bbc03518"}],"nova/tests/unit/virt/hyperv/test_hostops.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1e9e05e36e2a33e3d2ed1bc4e12a772935881091","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        expected \u003d [mock.call(fkey)"},{"line_number":68,"context_line":"                    for fkey in os_win_const.PROCESSOR_FEATURE.keys()]"},{"line_number":69,"context_line":"        self._hostops._hostutils.is_cpu_feature_present.assert_has_calls("},{"line_number":70,"context_line":"            expected, any_order\u003dTrue)"},{"line_number":71,"context_line":"        expected_response \u003d self._get_mock_cpu_info()"},{"line_number":72,"context_line":"        self.assertEqual(expected_response, response)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_e0bb6fc1","line":70,"range":{"start_line":70,"start_character":22,"end_line":70,"end_character":36},"updated":"2018-03-27 09:49:10.000000000","message":"https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.assert_has_calls","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1069db18c9d25f0f4cea461c9a8c1d5e7a20d530","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        expected \u003d [mock.call(fkey)"},{"line_number":68,"context_line":"                    for fkey in os_win_const.PROCESSOR_FEATURE.keys()]"},{"line_number":69,"context_line":"        self._hostops._hostutils.is_cpu_feature_present.assert_has_calls("},{"line_number":70,"context_line":"            expected, any_order\u003dTrue)"},{"line_number":71,"context_line":"        expected_response \u003d self._get_mock_cpu_info()"},{"line_number":72,"context_line":"        self.assertEqual(expected_response, response)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_e149e730","line":70,"range":{"start_line":70,"start_character":22,"end_line":70,"end_character":36},"in_reply_to":"bf659307_91dd0072","updated":"2018-03-29 14:59:48.000000000","message":"\u003e I know.\n\nYup, that review comment was for myself/other reviewers :)","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"e87e3d3194263f4a080981dd4de2616873edbfa7","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        expected \u003d [mock.call(fkey)"},{"line_number":68,"context_line":"                    for fkey in os_win_const.PROCESSOR_FEATURE.keys()]"},{"line_number":69,"context_line":"        self._hostops._hostutils.is_cpu_feature_present.assert_has_calls("},{"line_number":70,"context_line":"            expected, any_order\u003dTrue)"},{"line_number":71,"context_line":"        expected_response \u003d self._get_mock_cpu_info()"},{"line_number":72,"context_line":"        self.assertEqual(expected_response, response)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"bf659307_91dd0072","line":70,"range":{"start_line":70,"start_character":22,"end_line":70,"end_character":36},"in_reply_to":"bf659307_e0bb6fc1","updated":"2018-03-28 10:42:41.000000000","message":"I know. The reason I\u0027ve done this is because it would fail otherwise. The return value is used in an if:\n\n    if self._hostutils.is_cpu_feature_present(fkey):\n\nthat if is basically a __nonzero__ call. The failure looks like this:\n\n    Expected: [call(3),\n     ...\n     call(21)]\n    Actual: [call(3),\n     call().__nonzero__(),\n     ...\n     call(21),\n     call().__nonzero__()]","commit_id":"160129c84b59df681045756eecdbf04a212e15e0"}],"nova/tests/unit/virt/ironic/utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9ffb292c62aa18dcbd495288a9d1d6901de94eb4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"7faddb67_be2f54f4","updated":"2019-08-19 14:42:25.000000000","message":"good stuff here","commit_id":"b4cf6960ad803b63294ee2f6a1dc8517ea0ee26a"}]}
