)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f80464e87a340c0b7668a2265a86ce43d8236d09","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Adds a repoducer for post_live_migration_at_destination failures"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a repoducer for post_live_migration_at_destination"},{"line_number":10,"context_line":"failure if the rpc client has an error example keystone service is"},{"line_number":11,"context_line":"not responding."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related-Bug: #2000069"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"bcf5e843_af11b31c","line":10,"updated":"2022-12-20 20:31:57.000000000","message":"nit: your new and improved reproducer doesn\u0027t affect RPC, only Keystone (or I guess Neutron more generally).","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"43c436fd34737960085d88132b38a84341e5b6ea","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adds a repoducer for post_live_migration_at_destination failures"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a repoducer for post_live_migration_at_destination"},{"line_number":10,"context_line":"failure if the rpc client has an error example keystone service is"},{"line_number":11,"context_line":"not responding."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related-Bug: #2000069"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"17fabbd3_e5022b3a","line":10,"in_reply_to":"44261b01_2f272606","updated":"2022-12-21 14:15:37.000000000","message":"Done","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"01d1cfc99dd43c0411b51cd5aebe6f304bdee5f9","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Adds a repoducer for post_live_migration_at_destination failures"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a repoducer for post_live_migration_at_destination"},{"line_number":10,"context_line":"failure if the rpc client has an error example keystone service is"},{"line_number":11,"context_line":"not responding."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related-Bug: #2000069"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"44261b01_2f272606","line":10,"in_reply_to":"bcf5e843_af11b31c","updated":"2022-12-21 10:32:34.000000000","message":"Indeed","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca199309457a3b31279fc027ea174a5f1ab02f25","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"448529ff_ed7c0dd9","updated":"2022-12-19 14:50:07.000000000","message":"one more thing","commit_id":"2cfbe99f2664d6fede678fd8cc34f9d3cc9feb50"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"682eff2a1ddc2c3fe7c54bded5e4f4ed23f8c545","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4c417e08_bae41ec0","updated":"2022-12-19 15:17:42.000000000","message":"Well, I\u0027m a bit torn about using an existing regression file. If you want to backport the above bugfix to, say, Train, then you need to make sure that the file you use here is also in the Train branch. That\u0027s why in general we say no to do it as maybe some folks couldn\u0027t think about it.","commit_id":"6a6a4a62d0b8dcf7b3dd25cefa0075eff61a2ce7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29eaeac445369c004480a2627b44cb819057651f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"96f61f26_ff14ef4d","updated":"2022-12-19 15:01:01.000000000","message":"looks good. thanks!","commit_id":"6a6a4a62d0b8dcf7b3dd25cefa0075eff61a2ce7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f80464e87a340c0b7668a2265a86ce43d8236d09","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"7ea472a1_6c2c5968","updated":"2022-12-20 20:31:57.000000000","message":"Nice, thanks! Left some nits in comments in case you need to respin for other reasons.","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"01d1cfc99dd43c0411b51cd5aebe6f304bdee5f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ea15f9da_1726d4e0","updated":"2022-12-21 10:32:34.000000000","message":"Sorry but given side_effect can use a specific iterable or a function, I wonder why you don\u0027t use it.","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"80fae5f78f6842492a41f02f375847fc104a278d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9f292bed_af0a334a","updated":"2022-12-21 17:34:55.000000000","message":"I\u0027m eventually OK with this.","commit_id":"9584d0ad11f03e0ef30b70ee1cd2b085ed963346"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b90cf4503690310b31f855ebf678f6564162b411","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9a98b6b6_65b4cc2f","updated":"2023-12-20 01:47:35.000000000","message":"the fix will likely need a rebase but the repoducer should be ok","commit_id":"9584d0ad11f03e0ef30b70ee1cd2b085ed963346"}],"nova/tests/functional/regressions/test_bug_2143972.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f80464e87a340c0b7668a2265a86ce43d8236d09","unresolved":true,"context_lines":[{"line_number":55,"context_line":"        # Fist setup_networks_on_host call is in the pre_live_migration method"},{"line_number":56,"context_line":"        # Second setup_networks_on_host call is in the post_live_migration"},{"line_number":57,"context_line":"        # method"},{"line_number":58,"context_line":"        iterations \u003d iter([True] * 1)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        def fake_setup_networks_on_hosts(*args, **kwargs):"},{"line_number":61,"context_line":"            \"\"\"Call the original function until the iterator is over, then"}],"source_content_type":"text/x-python","patch_set":6,"id":"666ab856_dc7d6cc2","line":58,"updated":"2022-12-20 20:31:57.000000000","message":"nit: just iter([True]) is enough, not?","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"0a09a293063ad1de19039ff9f81573253fd3248a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # Fist setup_networks_on_host call is in the pre_live_migration method"},{"line_number":56,"context_line":"        # Second setup_networks_on_host call is in the post_live_migration"},{"line_number":57,"context_line":"        # method"},{"line_number":58,"context_line":"        iterations \u003d iter([True] * 1)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        def fake_setup_networks_on_hosts(*args, **kwargs):"},{"line_number":61,"context_line":"            \"\"\"Call the original function until the iterator is over, then"}],"source_content_type":"text/x-python","patch_set":6,"id":"425ee29b_647d51e2","line":58,"in_reply_to":"666ab856_dc7d6cc2","updated":"2022-12-21 14:15:49.000000000","message":"Done","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f80464e87a340c0b7668a2265a86ce43d8236d09","unresolved":true,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                next(iterations)"},{"line_number":66,"context_line":"                return orig_function(*args, **kwargs)"},{"line_number":67,"context_line":"            except StopIteration:"},{"line_number":68,"context_line":"                raise messaging.RemoteError("},{"line_number":69,"context_line":"                    exc_type\u003d\"Remote Error\","},{"line_number":70,"context_line":"                    value\u003d\"ServiceUnavailable The server is currently \""}],"source_content_type":"text/x-python","patch_set":6,"id":"f1a14ad9_7ef67a4b","line":67,"updated":"2022-12-20 20:31:57.000000000","message":"I can\u0027t help but feel that there\u0027s a more elegant way of achieving this? Eh, it works.","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"43c436fd34737960085d88132b38a84341e5b6ea","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                next(iterations)"},{"line_number":66,"context_line":"                return orig_function(*args, **kwargs)"},{"line_number":67,"context_line":"            except StopIteration:"},{"line_number":68,"context_line":"                raise messaging.RemoteError("},{"line_number":69,"context_line":"                    exc_type\u003d\"Remote Error\","},{"line_number":70,"context_line":"                    value\u003d\"ServiceUnavailable The server is currently \""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6f9404_c196ed2b","line":67,"in_reply_to":"ac704597_8c9979bb","updated":"2022-12-21 14:15:37.000000000","message":"Done","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"01d1cfc99dd43c0411b51cd5aebe6f304bdee5f9","unresolved":true,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                next(iterations)"},{"line_number":66,"context_line":"                return orig_function(*args, **kwargs)"},{"line_number":67,"context_line":"            except StopIteration:"},{"line_number":68,"context_line":"                raise messaging.RemoteError("},{"line_number":69,"context_line":"                    exc_type\u003d\"Remote Error\","},{"line_number":70,"context_line":"                    value\u003d\"ServiceUnavailable The server is currently \""}],"source_content_type":"text/x-python","patch_set":6,"id":"ac704597_8c9979bb","line":67,"in_reply_to":"f1a14ad9_7ef67a4b","updated":"2022-12-21 10:32:34.000000000","message":"You can just mock with side_effect indeed :\n\n  with mock.patch(\u0027setup...\u0027, side_effect\u003d(orig_function, messaging.RemoteError))\n     that()\n   \nor please just do :\n\n  with mock.patch(\u0027setup...\u0027, side_effect\u003dmy_fake_meth)\n    that()\n  \nwhere you define an inside my_fake_meth method like\n\n  count_call \u003d 0\n  def my_fake_meth(*args, **kwargs):\n     count_call +\u003d 1\n     if count_call \u003e\u003d 2:\n        raise messaging.RemoteError()\n\n\nSee what side_effect can do here https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.side_effect\n\nA third alternative is just the fact that given side_effect can use an iterable, you can directly create an iterable class.","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f80464e87a340c0b7668a2265a86ce43d8236d09","unresolved":true,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            server \u003d self._live_migrate("},{"line_number":80,"context_line":"                server, migration_expected_state\u003d\u0027completed\u0027,"},{"line_number":81,"context_line":"                server_expected_state\u003d\u0027MIGRATING\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            self.assertEqual(self.src.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"989f9a60_f3fb57fd","line":81,"updated":"2022-12-20 20:31:57.000000000","message":"nit: a #FIXME here explaining why this is MIGRATING and not ERROR would be nice.","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"01d1cfc99dd43c0411b51cd5aebe6f304bdee5f9","unresolved":true,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            server \u003d self._live_migrate("},{"line_number":80,"context_line":"                server, migration_expected_state\u003d\u0027completed\u0027,"},{"line_number":81,"context_line":"                server_expected_state\u003d\u0027MIGRATING\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            self.assertEqual(self.src.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"a195f578_ccdc41cc","line":81,"in_reply_to":"989f9a60_f3fb57fd","updated":"2022-12-21 10:32:34.000000000","message":"Agreed.","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"43c436fd34737960085d88132b38a84341e5b6ea","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            server \u003d self._live_migrate("},{"line_number":80,"context_line":"                server, migration_expected_state\u003d\u0027completed\u0027,"},{"line_number":81,"context_line":"                server_expected_state\u003d\u0027MIGRATING\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            self.assertEqual(self.src.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3af8fe_26c57447","line":81,"in_reply_to":"a195f578_ccdc41cc","updated":"2022-12-21 14:15:37.000000000","message":"Done","commit_id":"89cca2da3bf975a2354132368cec91c87b2e6634"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1cc46f36ef5a19f619790d174cc8f3dfb2b52946","unresolved":true,"context_lines":[{"line_number":62,"context_line":"        # method."},{"line_number":63,"context_line":"        with mock.patch("},{"line_number":64,"context_line":"            \u0027nova.network.neutron.API.setup_networks_on_host\u0027,"},{"line_number":65,"context_line":"            side_effect\u003d[orig_function, service_exception]"},{"line_number":66,"context_line":"        ):"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"            # FIXME(Uggla) A failure with post_live_migration_at_destination"}],"source_content_type":"text/x-python","patch_set":7,"id":"092ad38b_47c2a158","line":65,"updated":"2022-12-21 14:50:13.000000000","message":"This mock will not call origin_function it will return the function object instead. If you need to call a function as side_effect then you have to set side_effect to that function. The list syntax only work for returning values or raising exceptions.\n\n  import unittest\n  from unittest import mock\n\n\n  def f1():\n      return \u0027f1 called\u0027\n\n\n  class Test(unittest.TestCase):\n      def test(self):\n          m \u003d mock.Mock(side_effect\u003d[f1, ValueError(\u0027foo\u0027)])\n          res \u003d m()\n          print(\u0027first mock call returned\u0027, res)\n          m()\n          print(\u0027end\u0027)\n\n\n  unittest.main()\n\n# prints\n\n  first mock call returned \u003cfunction f1 at 0x7f9ae1563e20\u003e\n  E\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  ERROR: test (__main__.Test)\n  ----------------------------------------------------------------------\n  Traceback (most recent call last):\n    File \"/home/gibi/.config/JetBrains/PyCharm2022.2/scratches/scratch_1.py\", line     14, in test  \n      m()\n    File \"/usr/lib/python3.10/unittest/mock.py\", line 1114, in __call__\n      return self._mock_call(*args, **kwargs)\n    File \"/usr/lib/python3.10/unittest/mock.py\", line 1118, in _mock_call\n      return self._execute_mock_call(*args, **kwargs)\n    File \"/usr/lib/python3.10/unittest/mock.py\", line 1177, in _execute_mock_call\n      raise result\n  ValueError: foo\n  ----------------------------------------------------------------------\n  Ran 1 test in 0.000s\n  FAILED (errors\u003d1)","commit_id":"c8f9ba2728319f5e963292f8ea2090f0a03f4e37"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"23a50f3670a48581ef719322a5f956b0c279378b","unresolved":true,"context_lines":[{"line_number":62,"context_line":"        # method."},{"line_number":63,"context_line":"        with mock.patch("},{"line_number":64,"context_line":"            \u0027nova.network.neutron.API.setup_networks_on_host\u0027,"},{"line_number":65,"context_line":"            side_effect\u003d[orig_function, service_exception]"},{"line_number":66,"context_line":"        ):"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"            # FIXME(Uggla) A failure with post_live_migration_at_destination"}],"source_content_type":"text/x-python","patch_set":7,"id":"a49b3908_904e0d50","line":65,"in_reply_to":"092ad38b_47c2a158","updated":"2022-12-21 16:45:28.000000000","message":"Indeed, or you call out directly the method() in the list.","commit_id":"c8f9ba2728319f5e963292f8ea2090f0a03f4e37"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"f571a86d2f5bd4d703fcc55ad77a3d38308d2b86","unresolved":true,"context_lines":[{"line_number":53,"context_line":"            exc_type\u003d\"Remote Error\","},{"line_number":54,"context_line":"            value\u003d\"ServiceUnavailable The server is currently \""},{"line_number":55,"context_line":"            \"unavailable.\")"},{"line_number":56,"context_line":"        self.count_call \u003d 0"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Fist setup_networks_on_host call is in the pre_live_migration method."},{"line_number":59,"context_line":"        # Second setup_networks_on_host call is in the post_live_migration"}],"source_content_type":"text/x-python","patch_set":8,"id":"0bfed599_bd43de81","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":27},"updated":"2022-12-21 17:44:00.000000000","message":"Honestly, I don\u0027t understand why I need to use an instance attribute here.\nBut without it, count_call is not captured by the closure below, even if I use global count_call in the closure.","commit_id":"9584d0ad11f03e0ef30b70ee1cd2b085ed963346"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"80fae5f78f6842492a41f02f375847fc104a278d","unresolved":true,"context_lines":[{"line_number":53,"context_line":"            exc_type\u003d\"Remote Error\","},{"line_number":54,"context_line":"            value\u003d\"ServiceUnavailable The server is currently \""},{"line_number":55,"context_line":"            \"unavailable.\")"},{"line_number":56,"context_line":"        self.count_call \u003d 0"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Fist setup_networks_on_host call is in the pre_live_migration method."},{"line_number":59,"context_line":"        # Second setup_networks_on_host call is in the post_live_migration"}],"source_content_type":"text/x-python","patch_set":8,"id":"522bd538_6f7af2b3","line":56,"updated":"2022-12-21 17:34:55.000000000","message":"nit: this could have been an attribute of the mocked method (here fake_setup_networks_on_host) but meh.\n\n  fake_setup_networks_on_host.call_count \u003d 0","commit_id":"9584d0ad11f03e0ef30b70ee1cd2b085ed963346"}],"nova/tests/functional/regressions/test_post_migration_bugs.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f479719d44ed8e4b2df01ea9e25894169ab36c06","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.assertEqual(self.dest.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch("},{"line_number":64,"context_line":"            \u0027nova.compute.rpcapi.ComputeAPI.\u0027"},{"line_number":65,"context_line":"            \u0027post_live_migration_at_destination\u0027,"},{"line_number":66,"context_line":"            side_effect\u003dmessaging.RemoteError(exc_type\u003d\"Remote Error\","},{"line_number":67,"context_line":"                    value\u003d\"ServiceUnavailable The server is currently \""},{"line_number":68,"context_line":"                    \"unavailable.\"))"},{"line_number":69,"context_line":"    def test_post_live_migration_keystone_fails(self, mock_keystone):"},{"line_number":70,"context_line":"        \"\"\"Test for bug 2143972. A failure with"},{"line_number":71,"context_line":"        post_live_migration_at_destination leave the instance in MIGRATING"},{"line_number":72,"context_line":"        status and migration_expected_state to completed."}],"source_content_type":"text/x-python","patch_set":1,"id":"4f81df99_c4e8ab0a","line":69,"range":{"start_line":63,"start_character":0,"end_line":69,"end_character":69},"updated":"2022-12-19 14:19:19.000000000","message":"this feels a better wrapping to me:\n\n    @mock.patch(\n        \"nova.compute.rpcapi.ComputeAPI.post_live_migration_at_destination\",\n        side_effect\u003dmessaging.RemoteError(\n            exc_type\u003d\"Remote Error\",\n            value\u003d\"ServiceUnavailable The server is currently unavailable.\",\n        ),\n    )\n    def test_post_live_migration_keystone_fails(self, mock_keystone):","commit_id":"c0578e20d1f73bef5900830a3d03610ddfce3802"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"afa552e02c639dbb21c67dc9705bb001cf825f16","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.assertEqual(self.dest.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch("},{"line_number":64,"context_line":"            \u0027nova.compute.rpcapi.ComputeAPI.\u0027"},{"line_number":65,"context_line":"            \u0027post_live_migration_at_destination\u0027,"},{"line_number":66,"context_line":"            side_effect\u003dmessaging.RemoteError(exc_type\u003d\"Remote Error\","},{"line_number":67,"context_line":"                    value\u003d\"ServiceUnavailable The server is currently \""},{"line_number":68,"context_line":"                    \"unavailable.\"))"},{"line_number":69,"context_line":"    def test_post_live_migration_keystone_fails(self, mock_keystone):"},{"line_number":70,"context_line":"        \"\"\"Test for bug 2143972. A failure with"},{"line_number":71,"context_line":"        post_live_migration_at_destination leave the instance in MIGRATING"},{"line_number":72,"context_line":"        status and migration_expected_state to completed."}],"source_content_type":"text/x-python","patch_set":1,"id":"8f6a5927_0d6891bb","line":69,"range":{"start_line":63,"start_character":0,"end_line":69,"end_character":69},"in_reply_to":"4f81df99_c4e8ab0a","updated":"2022-12-19 14:57:05.000000000","message":"Done","commit_id":"c0578e20d1f73bef5900830a3d03610ddfce3802"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f479719d44ed8e4b2df01ea9e25894169ab36c06","unresolved":true,"context_lines":[{"line_number":75,"context_line":"        self.assertEqual(self.src.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        server \u003d self._live_migrate("},{"line_number":78,"context_line":"            server, migration_expected_state\u003d\u0027error\u0027,"},{"line_number":79,"context_line":"            server_expected_state\u003d\u0027ERROR\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        mock_keystone.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":1,"id":"f8e189bc_37018c45","line":78,"range":{"start_line":78,"start_character":46,"end_line":78,"end_character":51},"updated":"2022-12-19 14:19:19.000000000","message":"completed","commit_id":"c0578e20d1f73bef5900830a3d03610ddfce3802"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"afa552e02c639dbb21c67dc9705bb001cf825f16","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.assertEqual(self.src.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        server \u003d self._live_migrate("},{"line_number":78,"context_line":"            server, migration_expected_state\u003d\u0027error\u0027,"},{"line_number":79,"context_line":"            server_expected_state\u003d\u0027ERROR\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        mock_keystone.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":1,"id":"49be1155_d07f32c2","line":78,"range":{"start_line":78,"start_character":46,"end_line":78,"end_character":51},"in_reply_to":"f8e189bc_37018c45","updated":"2022-12-19 14:57:05.000000000","message":"Done","commit_id":"c0578e20d1f73bef5900830a3d03610ddfce3802"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f479719d44ed8e4b2df01ea9e25894169ab36c06","unresolved":true,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        server \u003d self._live_migrate("},{"line_number":78,"context_line":"            server, migration_expected_state\u003d\u0027error\u0027,"},{"line_number":79,"context_line":"            server_expected_state\u003d\u0027ERROR\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        mock_keystone.assert_called_once()"},{"line_number":82,"context_line":"        self.assertEqual(self.dest.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"95729343_35a4244e","line":79,"range":{"start_line":79,"start_character":35,"end_line":79,"end_character":40},"updated":"2022-12-19 14:19:19.000000000","message":"MIGRATING","commit_id":"c0578e20d1f73bef5900830a3d03610ddfce3802"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"afa552e02c639dbb21c67dc9705bb001cf825f16","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        server \u003d self._live_migrate("},{"line_number":78,"context_line":"            server, migration_expected_state\u003d\u0027error\u0027,"},{"line_number":79,"context_line":"            server_expected_state\u003d\u0027ERROR\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        mock_keystone.assert_called_once()"},{"line_number":82,"context_line":"        self.assertEqual(self.dest.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"618ab05f_790415f6","line":79,"range":{"start_line":79,"start_character":35,"end_line":79,"end_character":40},"in_reply_to":"95729343_35a4244e","updated":"2022-12-19 14:57:05.000000000","message":"Done","commit_id":"c0578e20d1f73bef5900830a3d03610ddfce3802"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f479719d44ed8e4b2df01ea9e25894169ab36c06","unresolved":true,"context_lines":[{"line_number":79,"context_line":"            server_expected_state\u003d\u0027ERROR\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        mock_keystone.assert_called_once()"},{"line_number":82,"context_line":"        self.assertEqual(self.dest.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"80409385_cc606fb9","line":82,"range":{"start_line":82,"start_character":30,"end_line":82,"end_character":34},"updated":"2022-12-19 14:19:19.000000000","message":"src","commit_id":"c0578e20d1f73bef5900830a3d03610ddfce3802"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"afa552e02c639dbb21c67dc9705bb001cf825f16","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            server_expected_state\u003d\u0027ERROR\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        mock_keystone.assert_called_once()"},{"line_number":82,"context_line":"        self.assertEqual(self.dest.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"2ce6eb98_1fd56c65","line":82,"range":{"start_line":82,"start_character":30,"end_line":82,"end_character":34},"in_reply_to":"80409385_cc606fb9","updated":"2022-12-19 14:57:05.000000000","message":"Done","commit_id":"c0578e20d1f73bef5900830a3d03610ddfce3802"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ca199309457a3b31279fc027ea174a5f1ab02f25","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        \u0027nova.compute.rpcapi.ComputeAPI.post_live_migration_at_destination\u0027,"},{"line_number":65,"context_line":"        side_effect\u003dmessaging.RemoteError("},{"line_number":66,"context_line":"            exc_type\u003d\"Remote Error\","},{"line_number":67,"context_line":"            value\u003d\"ServiceUnavailable The server is currently \" \"unavailable.\")"},{"line_number":68,"context_line":"    )"},{"line_number":69,"context_line":"    def test_post_live_migration_keystone_fails(self, mock_keystone):"},{"line_number":70,"context_line":"        \"\"\"Test for bug 2143972. A failure with"}],"source_content_type":"text/x-python","patch_set":3,"id":"8854529f_110d5766","line":67,"range":{"start_line":67,"start_character":62,"end_line":67,"end_character":65},"updated":"2022-12-19 14:50:07.000000000","message":"you can drop this as well","commit_id":"2cfbe99f2664d6fede678fd8cc34f9d3cc9feb50"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"afa552e02c639dbb21c67dc9705bb001cf825f16","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \u0027nova.compute.rpcapi.ComputeAPI.post_live_migration_at_destination\u0027,"},{"line_number":65,"context_line":"        side_effect\u003dmessaging.RemoteError("},{"line_number":66,"context_line":"            exc_type\u003d\"Remote Error\","},{"line_number":67,"context_line":"            value\u003d\"ServiceUnavailable The server is currently \" \"unavailable.\")"},{"line_number":68,"context_line":"    )"},{"line_number":69,"context_line":"    def test_post_live_migration_keystone_fails(self, mock_keystone):"},{"line_number":70,"context_line":"        \"\"\"Test for bug 2143972. A failure with"}],"source_content_type":"text/x-python","patch_set":3,"id":"37bad717_63a26d9b","line":67,"range":{"start_line":67,"start_character":62,"end_line":67,"end_character":65},"in_reply_to":"8854529f_110d5766","updated":"2022-12-19 14:57:05.000000000","message":"Done","commit_id":"2cfbe99f2664d6fede678fd8cc34f9d3cc9feb50"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"682eff2a1ddc2c3fe7c54bded5e4f4ed23f8c545","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"11d421c7_c61e6698","updated":"2022-12-19 15:17:42.000000000","message":"in general, we tend to not modify the existing regression tests and just add a specific functional test. See my main comment why.","commit_id":"6a6a4a62d0b8dcf7b3dd25cefa0075eff61a2ce7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ebbff7342c94fade3d19e5d9a56fdb185d2d0bf6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"04cbb207_ddf1b514","in_reply_to":"11d421c7_c61e6698","updated":"2022-12-20 17:57:56.000000000","message":"Separated in a new file.","commit_id":"6a6a4a62d0b8dcf7b3dd25cefa0075eff61a2ce7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8e62544b56b33fe278a87636d0c7453b73320d8c","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        self.assertEqual(self.dest.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch("},{"line_number":64,"context_line":"        \u0027nova.compute.rpcapi.ComputeAPI.post_live_migration_at_destination\u0027,"},{"line_number":65,"context_line":"        side_effect\u003dmessaging.RemoteError("},{"line_number":66,"context_line":"            exc_type\u003d\"Remote Error\","},{"line_number":67,"context_line":"            value\u003d\"ServiceUnavailable The server is currently unavailable.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"37c9ef73_a3260942","line":64,"updated":"2022-12-19 15:12:50.000000000","message":"I\u0027m not a fan of this kind of wholesale patching. I think we can be more specific and mock out the specific call to keystone that fails. IIRC it was one of the calls to Neutron in the implementation of `post_live_migration_at_destination()`","commit_id":"6a6a4a62d0b8dcf7b3dd25cefa0075eff61a2ce7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ebbff7342c94fade3d19e5d9a56fdb185d2d0bf6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.assertEqual(self.dest.host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @mock.patch("},{"line_number":64,"context_line":"        \u0027nova.compute.rpcapi.ComputeAPI.post_live_migration_at_destination\u0027,"},{"line_number":65,"context_line":"        side_effect\u003dmessaging.RemoteError("},{"line_number":66,"context_line":"            exc_type\u003d\"Remote Error\","},{"line_number":67,"context_line":"            value\u003d\"ServiceUnavailable The server is currently unavailable.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"e64c3a1f_39b48d8b","line":64,"in_reply_to":"37c9ef73_a3260942","updated":"2022-12-20 17:57:56.000000000","message":"I have patched one step lower, the setup_networks_on_host method, which is the first one that requires a call to keystone.\nI appreciate your help in mocking the calls to this method. The iterator is maybe a bit too much, but I kept this pattern. Please review it and let me know what you think about it.","commit_id":"6a6a4a62d0b8dcf7b3dd25cefa0075eff61a2ce7"}]}
