)]}'
{"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c3006a983e346d60683183384f24856c62a1d419","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            server[\u0027id\u0027],"},{"line_number":443,"context_line":"            {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027 if hard else \u0027SOFT\u0027}},"},{"line_number":444,"context_line":"        )"},{"line_number":445,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027ACTIVE\u0027)"},{"line_number":446,"context_line":"        return server"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_0662bf16","line":445,"updated":"2020-07-23 11:37:46.000000000","message":"This is racy. The compute.api only set the task state to REBOOTING before the API request returns. So if this test util is used to reboot an ACTIVE server then this wait statement might still see the server being ACTIVE before reboot request even reaches the compute service.","commit_id":"c67d6bd56c1168ffbe89579e562ddcd354db9e67"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"36db91149540b2fa589cc9522240ab39db0c9f40","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            server[\u0027id\u0027],"},{"line_number":443,"context_line":"            {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027 if hard else \u0027SOFT\u0027}},"},{"line_number":444,"context_line":"        )"},{"line_number":445,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027ACTIVE\u0027)"},{"line_number":446,"context_line":"        return server"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_192a202b","line":445,"in_reply_to":"bf51134e_0662bf16","updated":"2020-07-23 12:11:10.000000000","message":"Oh, that\u0027s a very good point. I assume I should watch for versioned notifications too?","commit_id":"c67d6bd56c1168ffbe89579e562ddcd354db9e67"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        # Ignore the create flavor notification"},{"line_number":981,"context_line":"        fake_notifier.reset()"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        post \u003d {"},{"line_number":984,"context_line":"            \u0027resize\u0027: {"},{"line_number":985,"context_line":"                \u0027flavorRef\u0027: other_flavor_id"},{"line_number":986,"context_line":"            }"},{"line_number":987,"context_line":"        }"},{"line_number":988,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":989,"context_line":"        self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"        self._pop_and_verify_dest_select_notification(server[\u0027id\u0027],"},{"line_number":992,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_a8bbcbe2","line":989,"range":{"start_line":983,"start_character":0,"end_line":989,"end_character":60},"updated":"2020-07-24 15:46:23.000000000","message":"This could be the new resize helper?","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0cfde6eb6670985c11b64e99743721a3e763e157","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        # Ignore the create flavor notification"},{"line_number":981,"context_line":"        fake_notifier.reset()"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        post \u003d {"},{"line_number":984,"context_line":"            \u0027resize\u0027: {"},{"line_number":985,"context_line":"                \u0027flavorRef\u0027: other_flavor_id"},{"line_number":986,"context_line":"            }"},{"line_number":987,"context_line":"        }"},{"line_number":988,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":989,"context_line":"        self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"        self._pop_and_verify_dest_select_notification(server[\u0027id\u0027],"},{"line_number":992,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_728e2c2f","line":989,"range":{"start_line":983,"start_character":0,"end_line":989,"end_character":60},"in_reply_to":"9f560f44_8fef5b86","updated":"2020-07-27 10:42:13.000000000","message":"I can understand not wanting to add extra logic and only keep the helper for the happy-path case - ie, server gets to VERIFY_RESIZE successfully, but I can\u0027t say that I grok how being explicit helps in this case.","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c4bf838a6a9797006c2d9c2c742f18c640e45488","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        # Ignore the create flavor notification"},{"line_number":981,"context_line":"        fake_notifier.reset()"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        post \u003d {"},{"line_number":984,"context_line":"            \u0027resize\u0027: {"},{"line_number":985,"context_line":"                \u0027flavorRef\u0027: other_flavor_id"},{"line_number":986,"context_line":"            }"},{"line_number":987,"context_line":"        }"},{"line_number":988,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":989,"context_line":"        self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"        self._pop_and_verify_dest_select_notification(server[\u0027id\u0027],"},{"line_number":992,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_8fef5b86","line":989,"range":{"start_line":983,"start_character":0,"end_line":989,"end_character":60},"in_reply_to":"bf51134e_a8bbcbe2","updated":"2020-07-27 10:09:11.000000000","message":"I purposefully avoided translating anything in this file because the tests were for specific operations and it seemed good to be explicit? Don\u0027t know if that makes sense","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"                                    \u0027resize_instance\u0027)"},{"line_number":1082,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":1083,"context_line":"        patcher.start()"},{"line_number":1084,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":1085,"context_line":"        self._wait_for_notification(\u0027instance.resize.error\u0027)"},{"line_number":1086,"context_line":"        self._pop_and_verify_dest_select_notification(server[\u0027id\u0027],"},{"line_number":1087,"context_line":"            replacements\u003d{"},{"line_number":1088,"context_line":"                \u0027ignore_hosts\u0027: [],"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_a8b74bd8","line":1085,"range":{"start_line":1084,"start_character":0,"end_line":1085,"end_character":60},"updated":"2020-07-24 15:46:23.000000000","message":"This too could be the new resize helper, though I guess you\u0027d have to accept `expected_notification` and `expected_state` arguments?","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0cfde6eb6670985c11b64e99743721a3e763e157","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"                                    \u0027resize_instance\u0027)"},{"line_number":1082,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":1083,"context_line":"        patcher.start()"},{"line_number":1084,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":1085,"context_line":"        self._wait_for_notification(\u0027instance.resize.error\u0027)"},{"line_number":1086,"context_line":"        self._pop_and_verify_dest_select_notification(server[\u0027id\u0027],"},{"line_number":1087,"context_line":"            replacements\u003d{"},{"line_number":1088,"context_line":"                \u0027ignore_hosts\u0027: [],"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_f2799c2f","line":1085,"range":{"start_line":1084,"start_character":0,"end_line":1085,"end_character":60},"in_reply_to":"9f560f44_afee9f85","updated":"2020-07-27 10:42:13.000000000","message":"Yeah, fair point. Making the helper happy-path-only works for me (but then maybe add a docstring or something? Otherwise I suspect with time others will come and clobber your beautiful restrained scope and add all kinds of kwargs for funky cases)","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c4bf838a6a9797006c2d9c2c742f18c640e45488","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"                                    \u0027resize_instance\u0027)"},{"line_number":1082,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":1083,"context_line":"        patcher.start()"},{"line_number":1084,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":1085,"context_line":"        self._wait_for_notification(\u0027instance.resize.error\u0027)"},{"line_number":1086,"context_line":"        self._pop_and_verify_dest_select_notification(server[\u0027id\u0027],"},{"line_number":1087,"context_line":"            replacements\u003d{"},{"line_number":1088,"context_line":"                \u0027ignore_hosts\u0027: [],"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_afee9f85","line":1085,"range":{"start_line":1084,"start_character":0,"end_line":1085,"end_character":60},"in_reply_to":"bf51134e_a8b74bd8","updated":"2020-07-27 10:09:11.000000000","message":"...and it doesn\u0027t really make sense to add additional parameters to a generic helper when there\u0027s only a single user?","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":1158,"context_line":"                                    side_effect\u003d_build_resources)"},{"line_number":1159,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":1160,"context_line":"        patcher.start()"},{"line_number":1161,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":1162,"context_line":"        self._wait_for_state_change(server, expected_status\u003d\u0027ERROR\u0027)"},{"line_number":1163,"context_line":"        self._wait_for_notification(\u0027compute.exception\u0027)"},{"line_number":1164,"context_line":"        # There should be the following notifications after scheduler\u0027s"},{"line_number":1165,"context_line":"        # select_destination notifications:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_a8a0eba6","line":1162,"range":{"start_line":1161,"start_character":0,"end_line":1162,"end_character":68},"updated":"2020-07-24 15:46:23.000000000","message":"Resize helper?","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"}],"nova/tests/functional/regressions/test_bug_1790204.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        # fails because DISK_GB inventory allocation ratio is 1.0 and when"},{"line_number":70,"context_line":"        # resizing to the same host we\u0027ll be trying to claim 2048 but the"},{"line_number":71,"context_line":"        # provider only has a total of 1024."},{"line_number":72,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], resize_req,"},{"line_number":73,"context_line":"                                    check_response_status\u003d[202])"},{"line_number":74,"context_line":"        # The instance action should have failed with details."},{"line_number":75,"context_line":"        self._assert_resize_migrate_action_fail("},{"line_number":76,"context_line":"            server, instance_actions.RESIZE, \u0027NoValidHost\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_d750dcd7","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":64},"updated":"2020-07-24 15:46:23.000000000","message":"Could be the resize helper","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8e588b96a8c2a5e712b7a22e0993f43afcb88933","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        # fails because DISK_GB inventory allocation ratio is 1.0 and when"},{"line_number":70,"context_line":"        # resizing to the same host we\u0027ll be trying to claim 2048 but the"},{"line_number":71,"context_line":"        # provider only has a total of 1024."},{"line_number":72,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], resize_req,"},{"line_number":73,"context_line":"                                    check_response_status\u003d[202])"},{"line_number":74,"context_line":"        # The instance action should have failed with details."},{"line_number":75,"context_line":"        self._assert_resize_migrate_action_fail("},{"line_number":76,"context_line":"            server, instance_actions.RESIZE, \u0027NoValidHost\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_521b281a","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":64},"in_reply_to":"9f560f44_d750dcd7","updated":"2020-07-27 12:07:40.000000000","message":"This doesn\u0027t wait for server to change state so there\u0027s nothing really to gain from the helper here","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"}],"nova/tests/functional/test_availability_zones.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        original_az \u003d \u0027zone1\u0027 if original_host \u003d\u003d \u0027host1\u0027 else \u0027zone2\u0027"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # Resize the server which should move it to the other zone."},{"line_number":152,"context_line":"        self.api.post_server_action("},{"line_number":153,"context_line":"            server[\u0027id\u0027], {\u0027resize\u0027: {\u0027flavorRef\u0027: self.flavor2}})"},{"line_number":154,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Now the server should be in the other AZ."},{"line_number":157,"context_line":"        new_zone \u003d \u0027zone2\u0027 if original_host \u003d\u003d \u0027host1\u0027 else \u0027zone1\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_575e8ce6","line":154,"range":{"start_line":152,"start_character":0,"end_line":154,"end_character":69},"updated":"2020-07-24 15:46:23.000000000","message":"Resize helper","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8e588b96a8c2a5e712b7a22e0993f43afcb88933","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        original_az \u003d \u0027zone1\u0027 if original_host \u003d\u003d \u0027host1\u0027 else \u0027zone2\u0027"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # Resize the server which should move it to the other zone."},{"line_number":152,"context_line":"        self.api.post_server_action("},{"line_number":153,"context_line":"            server[\u0027id\u0027], {\u0027resize\u0027: {\u0027flavorRef\u0027: self.flavor2}})"},{"line_number":154,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Now the server should be in the other AZ."},{"line_number":157,"context_line":"        new_zone \u003d \u0027zone2\u0027 if original_host \u003d\u003d \u0027host1\u0027 else \u0027zone1\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_52f048ca","line":154,"range":{"start_line":152,"start_character":0,"end_line":154,"end_character":69},"in_reply_to":"9f560f44_575e8ce6","updated":"2020-07-27 12:07:40.000000000","message":"Done","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"}],"nova/tests/functional/test_cross_cell_migrate.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.stub_image_create()"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], body)"},{"line_number":258,"context_line":"        # Wait for the server to be resized and then verify the host has"},{"line_number":259,"context_line":"        # changed to be the host in the other cell."},{"line_number":260,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":261,"context_line":"        self.assertEqual(expected_host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":262,"context_line":"        # Assert that the instance is only listed one time from the API (to"},{"line_number":263,"context_line":"        # make sure it\u0027s not listed out of both cells)."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_d7fe1cad","line":260,"range":{"start_line":257,"start_character":0,"end_line":260,"end_character":69},"updated":"2020-07-24 15:46:23.000000000","message":"Resize helper","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c4bf838a6a9797006c2d9c2c742f18c640e45488","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.stub_image_create()"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], body)"},{"line_number":258,"context_line":"        # Wait for the server to be resized and then verify the host has"},{"line_number":259,"context_line":"        # changed to be the host in the other cell."},{"line_number":260,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":261,"context_line":"        self.assertEqual(expected_host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":262,"context_line":"        # Assert that the instance is only listed one time from the API (to"},{"line_number":263,"context_line":"        # make sure it\u0027s not listed out of both cells)."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_ef8417b4","line":260,"range":{"start_line":257,"start_character":0,"end_line":260,"end_character":69},"in_reply_to":"9f560f44_d7fe1cad","updated":"2020-07-27 10:09:11.000000000","message":"hmm, not sure how I missed this one","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8e588b96a8c2a5e712b7a22e0993f43afcb88933","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.stub_image_create()"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], body)"},{"line_number":258,"context_line":"        # Wait for the server to be resized and then verify the host has"},{"line_number":259,"context_line":"        # changed to be the host in the other cell."},{"line_number":260,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":261,"context_line":"        self.assertEqual(expected_host, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":262,"context_line":"        # Assert that the instance is only listed one time from the API (to"},{"line_number":263,"context_line":"        # make sure it\u0027s not listed out of both cells)."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_d2b578f0","line":260,"range":{"start_line":257,"start_character":0,"end_line":260,"end_character":69},"in_reply_to":"9f560f44_ef8417b4","updated":"2020-07-27 12:07:40.000000000","message":"Actually, can\u0027t do this one easily. The function handles both cold migrate and resize so the generic wrapper isn\u0027t really helpful","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":883,"context_line":"            self.scheduler_service.stop()"},{"line_number":884,"context_line":"            self.scheduler_service \u003d self.start_service(\u0027scheduler\u0027)"},{"line_number":885,"context_line":"        # Now resize to the new flavor and it should go to host2 in cell2."},{"line_number":886,"context_line":"        self.admin_api.post_server_action("},{"line_number":887,"context_line":"            server[\u0027id\u0027], {\u0027resize\u0027: {\u0027flavorRef\u0027: new_flavor[\u0027id\u0027]}})"},{"line_number":888,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":889,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    # TODO(mriedem): Test a bunch of rollback scenarios."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_971dc411","line":888,"range":{"start_line":886,"start_character":0,"end_line":888,"end_character":69},"updated":"2020-07-24 15:46:23.000000000","message":"Resize helper","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8e588b96a8c2a5e712b7a22e0993f43afcb88933","unresolved":false,"context_lines":[{"line_number":883,"context_line":"            self.scheduler_service.stop()"},{"line_number":884,"context_line":"            self.scheduler_service \u003d self.start_service(\u0027scheduler\u0027)"},{"line_number":885,"context_line":"        # Now resize to the new flavor and it should go to host2 in cell2."},{"line_number":886,"context_line":"        self.admin_api.post_server_action("},{"line_number":887,"context_line":"            server[\u0027id\u0027], {\u0027resize\u0027: {\u0027flavorRef\u0027: new_flavor[\u0027id\u0027]}})"},{"line_number":888,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027VERIFY_RESIZE\u0027)"},{"line_number":889,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    # TODO(mriedem): Test a bunch of rollback scenarios."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_b2b604d9","line":888,"range":{"start_line":886,"start_character":0,"end_line":888,"end_character":69},"in_reply_to":"9f560f44_971dc411","updated":"2020-07-27 12:07:40.000000000","message":"Done","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"        with mock.patch.object(self.computes[\u0027host2\u0027].driver, \u0027spawn\u0027,"},{"line_number":1090,"context_line":"                               side_effect\u003derror):"},{"line_number":1091,"context_line":"            flavor2 \u003d flavors[1][\u0027id\u0027]"},{"line_number":1092,"context_line":"            body \u003d {\u0027resize\u0027: {\u0027flavorRef\u0027: flavor2}}"},{"line_number":1093,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], body)"},{"line_number":1094,"context_line":"            # The server should go to ERROR state with a fault record and"},{"line_number":1095,"context_line":"            # the API should still be showing the server from the source cell"},{"line_number":1096,"context_line":"            # because the instance mapping was not updated."},{"line_number":1097,"context_line":"            server \u003d self._wait_for_server_parameter(server,"},{"line_number":1098,"context_line":"                {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None})"},{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":"        # The migration should be in \u0027error\u0027 status."},{"line_number":1101,"context_line":"        self._wait_for_migration_status(server, [\u0027error\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_37d2f835","line":1098,"range":{"start_line":1092,"start_character":0,"end_line":1098,"end_character":67},"updated":"2020-07-24 15:46:23.000000000","message":"Resize helper, if you\u0027re willing to extend it to \"support\" errors","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0cfde6eb6670985c11b64e99743721a3e763e157","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"        with mock.patch.object(self.computes[\u0027host2\u0027].driver, \u0027spawn\u0027,"},{"line_number":1090,"context_line":"                               side_effect\u003derror):"},{"line_number":1091,"context_line":"            flavor2 \u003d flavors[1][\u0027id\u0027]"},{"line_number":1092,"context_line":"            body \u003d {\u0027resize\u0027: {\u0027flavorRef\u0027: flavor2}}"},{"line_number":1093,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], body)"},{"line_number":1094,"context_line":"            # The server should go to ERROR state with a fault record and"},{"line_number":1095,"context_line":"            # the API should still be showing the server from the source cell"},{"line_number":1096,"context_line":"            # because the instance mapping was not updated."},{"line_number":1097,"context_line":"            server \u003d self._wait_for_server_parameter(server,"},{"line_number":1098,"context_line":"                {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None})"},{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":"        # The migration should be in \u0027error\u0027 status."},{"line_number":1101,"context_line":"        self._wait_for_migration_status(server, [\u0027error\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_7293cc50","line":1098,"range":{"start_line":1092,"start_character":0,"end_line":1098,"end_character":67},"in_reply_to":"9f560f44_2ffa8f41","updated":"2020-07-27 10:42:13.000000000","message":"Ack, see previous reply.","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c4bf838a6a9797006c2d9c2c742f18c640e45488","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"        with mock.patch.object(self.computes[\u0027host2\u0027].driver, \u0027spawn\u0027,"},{"line_number":1090,"context_line":"                               side_effect\u003derror):"},{"line_number":1091,"context_line":"            flavor2 \u003d flavors[1][\u0027id\u0027]"},{"line_number":1092,"context_line":"            body \u003d {\u0027resize\u0027: {\u0027flavorRef\u0027: flavor2}}"},{"line_number":1093,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], body)"},{"line_number":1094,"context_line":"            # The server should go to ERROR state with a fault record and"},{"line_number":1095,"context_line":"            # the API should still be showing the server from the source cell"},{"line_number":1096,"context_line":"            # because the instance mapping was not updated."},{"line_number":1097,"context_line":"            server \u003d self._wait_for_server_parameter(server,"},{"line_number":1098,"context_line":"                {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None})"},{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":"        # The migration should be in \u0027error\u0027 status."},{"line_number":1101,"context_line":"        self._wait_for_migration_status(server, [\u0027error\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_2ffa8f41","line":1098,"range":{"start_line":1092,"start_character":0,"end_line":1098,"end_character":67},"in_reply_to":"9f560f44_37d2f835","updated":"2020-07-27 10:09:11.000000000","message":"Nah, I\u0027d like to avoid adding too much logic to the helpers unless there are multiple users of said logic","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"}],"nova/tests/functional/test_instance_actions.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        with mock.patch.object("},{"line_number":122,"context_line":"                self.compute.manager.driver, \u0027reboot\u0027,"},{"line_number":123,"context_line":"                side_effect\u003dHypervisorError(error_msg)) as mock_reboot:"},{"line_number":124,"context_line":"            reboot_request \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":125,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], reboot_request)"},{"line_number":126,"context_line":"            # In this case we wait for the status to change to ERROR using"},{"line_number":127,"context_line":"            # the non-admin user so we can assert the fault details. We also"},{"line_number":128,"context_line":"            # wait for the task_state to be None since the wrap_instance_fault"},{"line_number":129,"context_line":"            # decorator runs before the reverts_task_state decorator so we will"},{"line_number":130,"context_line":"            # be sure the fault is set on the server."},{"line_number":131,"context_line":"            server \u003d self._wait_for_server_parameter("},{"line_number":132,"context_line":"                server, {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None},"},{"line_number":133,"context_line":"                api\u003dself.api)"},{"line_number":134,"context_line":"            mock_reboot.assert_called_once()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self._set_policy_rules(overwrite\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_48fb0fbd","line":133,"range":{"start_line":124,"start_character":0,"end_line":133,"end_character":29},"updated":"2020-07-24 15:46:23.000000000","message":"This could also be the reboot helper?","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c4bf838a6a9797006c2d9c2c742f18c640e45488","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        with mock.patch.object("},{"line_number":122,"context_line":"                self.compute.manager.driver, \u0027reboot\u0027,"},{"line_number":123,"context_line":"                side_effect\u003dHypervisorError(error_msg)) as mock_reboot:"},{"line_number":124,"context_line":"            reboot_request \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":125,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], reboot_request)"},{"line_number":126,"context_line":"            # In this case we wait for the status to change to ERROR using"},{"line_number":127,"context_line":"            # the non-admin user so we can assert the fault details. We also"},{"line_number":128,"context_line":"            # wait for the task_state to be None since the wrap_instance_fault"},{"line_number":129,"context_line":"            # decorator runs before the reverts_task_state decorator so we will"},{"line_number":130,"context_line":"            # be sure the fault is set on the server."},{"line_number":131,"context_line":"            server \u003d self._wait_for_server_parameter("},{"line_number":132,"context_line":"                server, {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None},"},{"line_number":133,"context_line":"                api\u003dself.api)"},{"line_number":134,"context_line":"            mock_reboot.assert_called_once()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self._set_policy_rules(overwrite\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_afbcdf69","line":133,"range":{"start_line":124,"start_character":0,"end_line":133,"end_character":29},"in_reply_to":"bf51134e_48fb0fbd","updated":"2020-07-27 10:09:11.000000000","message":"I don\u0027t want to add this task_state logic to the helper","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                self.compute.manager.driver, \u0027reboot\u0027,"},{"line_number":212,"context_line":"                side_effect\u003dexception.InstanceRebootFailure(reason\u003dexc_reason)"},{"line_number":213,"context_line":"            ) as mock_reboot:"},{"line_number":214,"context_line":"            reboot_request \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":215,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], reboot_request)"},{"line_number":216,"context_line":"            # In this case we wait for the status to change to ERROR using"},{"line_number":217,"context_line":"            # the non-admin user so we can assert the fault details. We also"},{"line_number":218,"context_line":"            # wait for the task_state to be None since the wrap_instance_fault"},{"line_number":219,"context_line":"            # decorator runs before the reverts_task_state decorator so we will"},{"line_number":220,"context_line":"            # be sure the fault is set on the server."},{"line_number":221,"context_line":"            server \u003d self._wait_for_server_parameter("},{"line_number":222,"context_line":"                server, {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None},"},{"line_number":223,"context_line":"                api\u003dself.api)"},{"line_number":224,"context_line":"            mock_reboot.assert_called_once()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self._set_policy_rules(overwrite\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_883247a6","line":223,"range":{"start_line":214,"start_character":0,"end_line":223,"end_character":29},"updated":"2020-07-24 15:46:23.000000000","message":"This could be the new reboot helper?","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0cfde6eb6670985c11b64e99743721a3e763e157","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                self.compute.manager.driver, \u0027reboot\u0027,"},{"line_number":212,"context_line":"                side_effect\u003dexception.InstanceRebootFailure(reason\u003dexc_reason)"},{"line_number":213,"context_line":"            ) as mock_reboot:"},{"line_number":214,"context_line":"            reboot_request \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":215,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], reboot_request)"},{"line_number":216,"context_line":"            # In this case we wait for the status to change to ERROR using"},{"line_number":217,"context_line":"            # the non-admin user so we can assert the fault details. We also"},{"line_number":218,"context_line":"            # wait for the task_state to be None since the wrap_instance_fault"},{"line_number":219,"context_line":"            # decorator runs before the reverts_task_state decorator so we will"},{"line_number":220,"context_line":"            # be sure the fault is set on the server."},{"line_number":221,"context_line":"            server \u003d self._wait_for_server_parameter("},{"line_number":222,"context_line":"                server, {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None},"},{"line_number":223,"context_line":"                api\u003dself.api)"},{"line_number":224,"context_line":"            mock_reboot.assert_called_once()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self._set_policy_rules(overwrite\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_12a2509b","line":223,"range":{"start_line":214,"start_character":0,"end_line":223,"end_character":29},"in_reply_to":"9f560f44_6fc2c7eb","updated":"2020-07-27 10:42:13.000000000","message":"Well, you said you didn\u0027t want to do it if there wasn\u0027t more than 1 user. There\u0027s more than 1 user here ;)","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c4bf838a6a9797006c2d9c2c742f18c640e45488","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                self.compute.manager.driver, \u0027reboot\u0027,"},{"line_number":212,"context_line":"                side_effect\u003dexception.InstanceRebootFailure(reason\u003dexc_reason)"},{"line_number":213,"context_line":"            ) as mock_reboot:"},{"line_number":214,"context_line":"            reboot_request \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":215,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], reboot_request)"},{"line_number":216,"context_line":"            # In this case we wait for the status to change to ERROR using"},{"line_number":217,"context_line":"            # the non-admin user so we can assert the fault details. We also"},{"line_number":218,"context_line":"            # wait for the task_state to be None since the wrap_instance_fault"},{"line_number":219,"context_line":"            # decorator runs before the reverts_task_state decorator so we will"},{"line_number":220,"context_line":"            # be sure the fault is set on the server."},{"line_number":221,"context_line":"            server \u003d self._wait_for_server_parameter("},{"line_number":222,"context_line":"                server, {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None},"},{"line_number":223,"context_line":"                api\u003dself.api)"},{"line_number":224,"context_line":"            mock_reboot.assert_called_once()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self._set_policy_rules(overwrite\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_6fc2c7eb","line":223,"range":{"start_line":214,"start_character":0,"end_line":223,"end_character":29},"in_reply_to":"bf51134e_883247a6","updated":"2020-07-27 10:09:11.000000000","message":"Same","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"}],"nova/tests/functional/test_server_faults.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"701438eb3294b3a37d9686f873028fa11819d1e9","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        with mock.patch.object("},{"line_number":74,"context_line":"                self.compute.manager.driver, \u0027reboot\u0027,"},{"line_number":75,"context_line":"                side_effect\u003dHypervisorError(error_msg)) as mock_reboot:"},{"line_number":76,"context_line":"            reboot_request \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":77,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], reboot_request)"},{"line_number":78,"context_line":"            # In this case we wait for the status to change to ERROR using"},{"line_number":79,"context_line":"            # the non-admin user so we can assert the fault details. We also"},{"line_number":80,"context_line":"            # wait for the task_state to be None since the wrap_instance_fault"},{"line_number":81,"context_line":"            # decorator runs before the reverts_task_state decorator so we will"},{"line_number":82,"context_line":"            # be sure the fault is set on the server."},{"line_number":83,"context_line":"            server \u003d self._wait_for_server_parameter("},{"line_number":84,"context_line":"                server, {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None},"},{"line_number":85,"context_line":"                api\u003dself.api)"},{"line_number":86,"context_line":"            mock_reboot.assert_called_once()"},{"line_number":87,"context_line":"        # The server fault from the non-admin user API response should not"},{"line_number":88,"context_line":"        # have details in it."}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_48666fbd","line":85,"range":{"start_line":76,"start_character":12,"end_line":85,"end_character":29},"updated":"2020-07-24 15:46:23.000000000","message":"This could be the reboot helper, no?","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c4bf838a6a9797006c2d9c2c742f18c640e45488","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        with mock.patch.object("},{"line_number":74,"context_line":"                self.compute.manager.driver, \u0027reboot\u0027,"},{"line_number":75,"context_line":"                side_effect\u003dHypervisorError(error_msg)) as mock_reboot:"},{"line_number":76,"context_line":"            reboot_request \u003d {\u0027reboot\u0027: {\u0027type\u0027: \u0027HARD\u0027}}"},{"line_number":77,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], reboot_request)"},{"line_number":78,"context_line":"            # In this case we wait for the status to change to ERROR using"},{"line_number":79,"context_line":"            # the non-admin user so we can assert the fault details. We also"},{"line_number":80,"context_line":"            # wait for the task_state to be None since the wrap_instance_fault"},{"line_number":81,"context_line":"            # decorator runs before the reverts_task_state decorator so we will"},{"line_number":82,"context_line":"            # be sure the fault is set on the server."},{"line_number":83,"context_line":"            server \u003d self._wait_for_server_parameter("},{"line_number":84,"context_line":"                server, {\u0027status\u0027: \u0027ERROR\u0027, \u0027OS-EXT-STS:task_state\u0027: None},"},{"line_number":85,"context_line":"                api\u003dself.api)"},{"line_number":86,"context_line":"            mock_reboot.assert_called_once()"},{"line_number":87,"context_line":"        # The server fault from the non-admin user API response should not"},{"line_number":88,"context_line":"        # have details in it."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_efad3732","line":85,"range":{"start_line":76,"start_character":12,"end_line":85,"end_character":29},"in_reply_to":"bf51134e_48666fbd","updated":"2020-07-27 10:09:11.000000000","message":"Same comment around not adding the task_state logic to the helper","commit_id":"babf24eb1e0a10cb9c8809e097f8011988ae47f1"}],"nova/tests/functional/wsgi/test_interfaces.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"da786b53d312d5af115b0a3fa42be3c2a291f9cd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.assertEqual(409, ex.response.status_code)"},{"line_number":57,"context_line":"        self.assertEqual(\u0027SUSPENDED\u0027, found_server[\u0027status\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # Cleanup"},{"line_number":60,"context_line":"        self._delete_server(found_server)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_6c85d106","side":"PARENT","line":60,"range":{"start_line":59,"start_character":0,"end_line":60,"end_character":41},"updated":"2020-08-10 14:45:54.000000000","message":"Wasn\u0027t this pointless before anyway?","commit_id":"5d26fda5ea1efd14dd7b5bd9ea3f8debfb32b4c6"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"da786b53d312d5af115b0a3fa42be3c2a291f9cd","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        # Create server with network"},{"line_number":32,"context_line":"        server \u003d self._create_server("},{"line_number":33,"context_line":"            networks\u003d[{\u0027uuid\u0027: \u00273cb9bc59-5699-4588-a4b1-b87f96708bc6\u0027}])"},{"line_number":34,"context_line":"        self.addCleanup(self._delete_server, server)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        post \u003d {"},{"line_number":37,"context_line":"            \u0027interfaceAttachment\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_0c9d3565","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":52},"updated":"2020-08-10 14:45:54.000000000","message":"Why do we even need this here, wouldn\u0027t the end of the test destroy everything anyway?","commit_id":"0c65b00e8e7b21d887ab451c958c543066d07be6"}]}
