)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"bacf09fb500cd6d036c121bf6af542622c8abdbf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"546bdd5b_88dc2e9d","updated":"2026-06-26 15:50:36.000000000","message":"Hello, Claudiu,\n\nThank you for providing these merge requests. I understand the motivation behind this approach. However, I would prefer to keep Trove\u0027s unit test codebase aligned with the mainstream OpenStack practices and codebase whenever possible. Before considering the introduction of a new approach, I would like to see how other major OpenStack projects evaluate and adopt similar changes.\n\nIn addition, I believe that changes of this scope, which potentially affect multiple OpenStack projects, would benefit from broader discussion and coordination, possibly initiated through the Technical Committee. In such cases, creating a multi-project Launchpad bug or tracking item would likely be the most effective approach, as it would provide a centralized place for discussion and make it easier to track adoption and progress across projects.\n\nThank you for your contribution and understanding.","commit_id":"3327830d6484c7bd759f8856b4b9e56e4a1dfe2f"}],"trove/tests/unittests/cluster/test_cassandra_cluster.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        test_instances \u003d [mock.MagicMock(), mock.MagicMock()]"},{"line_number":53,"context_line":"        num_instances \u003d len(test_instances)"},{"line_number":54,"context_line":"        datastore \u003d mock.Mock(autospec\u003ddatastore_models.Datastore)"},{"line_number":55,"context_line":"        datastore_version \u003d mock.Mock(autospec\u003ddatastore_models.DatastoreVersion)"},{"line_number":56,"context_line":"        datastore_version.manager \u003d \u0027cassandra\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        with patch.object(CassandraClusterTasks, \u0027find_cluster_node_ids\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"407b09fa_9698d1a0","line":55,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"094fa52edd82526c0a38a1b67df6ee262bb9ab51","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        test_instances \u003d [mock.MagicMock(), mock.MagicMock()]"},{"line_number":53,"context_line":"        num_instances \u003d len(test_instances)"},{"line_number":54,"context_line":"        datastore \u003d mock.Mock(autospec\u003ddatastore_models.Datastore)"},{"line_number":55,"context_line":"        datastore_version \u003d mock.Mock(autospec\u003ddatastore_models.DatastoreVersion)"},{"line_number":56,"context_line":"        datastore_version.manager \u003d \u0027cassandra\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        with patch.object(CassandraClusterTasks, \u0027find_cluster_node_ids\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"c9b0492c_bd8334b8","line":55,"updated":"2026-06-24 17:57:21.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"ec8f5023be78fa829fade17c037b108d4957fb16"}],"trove/tests/unittests/cluster/test_cluster.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from trove.common import cfg"},{"line_number":24,"context_line":"from trove.common import clients"},{"line_number":25,"context_line":"from trove.common import context as trove_context"},{"line_number":26,"context_line":"import novaclient.v2.flavors"},{"line_number":27,"context_line":"from trove.common import exception"},{"line_number":28,"context_line":"from trove.common.strategies.cluster.experimental.mongodb import ("},{"line_number":29,"context_line":"    api as mongodb_api)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a9dc55d4_65f4f05e","line":26,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: H306: imports not in alphabetical order (trove.common.context, novaclient.v2.flavors)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"094fa52edd82526c0a38a1b67df6ee262bb9ab51","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from trove.common import cfg"},{"line_number":24,"context_line":"from trove.common import clients"},{"line_number":25,"context_line":"from trove.common import context as trove_context"},{"line_number":26,"context_line":"import novaclient.v2.flavors"},{"line_number":27,"context_line":"from trove.common import exception"},{"line_number":28,"context_line":"from trove.common.strategies.cluster.experimental.mongodb import ("},{"line_number":29,"context_line":"    api as mongodb_api)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bb147c45_55edb3c8","line":26,"updated":"2026-06-24 17:57:21.000000000","message":"pep8: H306: imports not in alphabetical order (trove.common.context, novaclient.v2.flavors)","commit_id":"ec8f5023be78fa829fade17c037b108d4957fb16"}],"trove/tests/unittests/quota/test_quota.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from unittest import mock"},{"line_number":16,"context_line":"from unittest.mock import patch"},{"line_number":17,"context_line":"from testtools import skipIf"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from trove.common import cfg"},{"line_number":20,"context_line":"from trove.common import exception"}],"source_content_type":"text/x-python","patch_set":1,"id":"b17d3151_aad8950b","line":17,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: H306: imports not in alphabetical order (unittest.mock.patch, testtools.skipif)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"}],"trove/tests/unittests/taskmanager/test_models.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                              group\u003d\u0027mysql\u0027)"},{"line_number":606,"context_line":"        mock_cinderclient \u003d mock_create_cinderclient.return_value"},{"line_number":607,"context_line":"        mock_volume \u003d mock.Mock(name\u003d\u0027fake-vol\u0027, id\u003d\u0027fake-vol-id\u0027,"},{"line_number":608,"context_line":"                           size\u003d2, status\u003d\u0027available\u0027)"},{"line_number":609,"context_line":"        mock_cinderclient.volumes.create.return_value \u003d mock_volume"},{"line_number":610,"context_line":"        mock_cinderclient.volumes.get.return_value \u003d mock_volume"},{"line_number":611,"context_line":"        volume_info \u003d self.freshinstancetasks._build_volume_info("}],"source_content_type":"text/x-python","patch_set":1,"id":"458827da_e0be3f88","line":608,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":799,"context_line":"        return answers"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def _stub_volume_client(self):"},{"line_number":802,"context_line":"        self.instance_task._volume_client \u003d mock.MagicMock(autospec\u003dcinderclient.Client)"},{"line_number":803,"context_line":"        stub_volume_mgr \u003d mock.MagicMock(autospec\u003dcinderclient.volumes.VolumeManager)"},{"line_number":804,"context_line":"        self.instance_task.volume_client.volumes \u003d stub_volume_mgr"},{"line_number":805,"context_line":"        stub_volume_mgr.extend \u003d mock.MagicMock(return_value\u003dNone)"}],"source_content_type":"text/x-python","patch_set":1,"id":"60feaac3_d9daf9c3","line":802,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: E501 line too long (88 \u003e 79 characters)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def _stub_volume_client(self):"},{"line_number":802,"context_line":"        self.instance_task._volume_client \u003d mock.MagicMock(autospec\u003dcinderclient.Client)"},{"line_number":803,"context_line":"        stub_volume_mgr \u003d mock.MagicMock(autospec\u003dcinderclient.volumes.VolumeManager)"},{"line_number":804,"context_line":"        self.instance_task.volume_client.volumes \u003d stub_volume_mgr"},{"line_number":805,"context_line":"        stub_volume_mgr.extend \u003d mock.MagicMock(return_value\u003dNone)"},{"line_number":806,"context_line":"        stub_new_volume \u003d cinderclient.volumes.Volume("}],"source_content_type":"text/x-python","patch_set":1,"id":"756d3eee_be6be94b","line":803,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":809,"context_line":"        stub_volume_mgr.attach \u003d mock.MagicMock(return_value\u003dNone)"},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    def _stub_neutron_client(self):"},{"line_number":812,"context_line":"        stub_neutron_client \u003d self.instance_task._neutron_client \u003d mock.MagicMock("},{"line_number":813,"context_line":"            autospec\u003dneutronclient.Client)"},{"line_number":814,"context_line":"        stub_neutron_client.list_floatingips \u003d mock.MagicMock("},{"line_number":815,"context_line":"            return_value\u003d{\u0027floatingips\u0027: [{"}],"source_content_type":"text/x-python","patch_set":1,"id":"772990f6_818bf9e7","line":812,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":876,"context_line":"            InstanceServiceStatus(ServiceStatuses.RUNNING,"},{"line_number":877,"context_line":"                                  id\u003d\u0027inst-stat-id-0\u0027))"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"        self.instance_task._guest \u003d mock.MagicMock(autospec\u003dtrove.guestagent.api.API)"},{"line_number":880,"context_line":"        self.instance_task._nova_client \u003d mock.MagicMock("},{"line_number":881,"context_line":"            autospec\u003dnovaclient.client)"},{"line_number":882,"context_line":"        self.stub_server_mgr \u003d mock.MagicMock("}],"source_content_type":"text/x-python","patch_set":1,"id":"b8b3c73a_c813a4df","line":879,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":901,"context_line":"                                                   True)"},{"line_number":902,"context_line":"        stub_flavor_manager.get \u003d mock.MagicMock(return_value\u003dnova_flavor)"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"        self.instance_task._volume_client \u003d mock.MagicMock(autospec\u003dcinderclient)"},{"line_number":905,"context_line":"        self.instance_task._volume_client.volumes \u003d mock.Mock("},{"line_number":906,"context_line":"            autospec\u003dcinderclient_volumes.VolumeManager)"},{"line_number":907,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"708d1f35_4aa63ae5","line":904,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        master \u003d mock.MagicMock()"},{"line_number":1047,"context_line":"        replica_context \u003d trove_testtools.TroveTestContext(self)"},{"line_number":1048,"context_line":"        mock_guest \u003d mock.MagicMock()"},{"line_number":1049,"context_line":"        mock_guest.get_replica_context \u003d mock.Mock(return_value\u003dreplica_context)"},{"line_number":1050,"context_line":"        type(master).guest \u003d PropertyMock(return_value\u003dmock_guest)"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        config_content \u003d {\u0027config_contents\u0027: \u0027some junk\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"4b936b2e_2333658d","line":1049,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cc922179a5398e7c8fb5f45cb44854fd14ccd954","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"    @patch(\u0027trove.taskmanager.models.BuiltInstanceTasks.is_service_healthy\u0027)"},{"line_number":1112,"context_line":"    @patch(\u0027trove.taskmanager.models.BuiltInstanceTasks.reset_task_status\u0027)"},{"line_number":1113,"context_line":"    def test_upgrade(self, mock_resetstatus, mock_check, mock_setstatus):"},{"line_number":1114,"context_line":"        dsv \u003d MagicMock()"},{"line_number":1115,"context_line":"        dsv \u003d mock.MagicMock()"},{"line_number":1116,"context_line":"        attrs \u003d {\u0027name\u0027: \u0027new_name\u0027, \u0027version\u0027: \u0027new_version\u0027}"},{"line_number":1117,"context_line":"        dsv.configure_mock(**attrs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ed03699c_f1427cf8","line":1114,"updated":"2026-06-24 14:46:54.000000000","message":"pep8: F821 undefined name \u0027MagicMock\u0027","commit_id":"05c4d5551899145f23345cbb51b1757ff3b964b8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"094fa52edd82526c0a38a1b67df6ee262bb9ab51","unresolved":false,"context_lines":[{"line_number":906,"context_line":"                                                   True)"},{"line_number":907,"context_line":"        stub_flavor_manager.get \u003d mock.MagicMock(return_value\u003dnova_flavor)"},{"line_number":908,"context_line":""},{"line_number":909,"context_line":"        self.instance_task._volume_client \u003d mock.MagicMock(autospec\u003dcinderclient)"},{"line_number":910,"context_line":"        self.instance_task._volume_client.volumes \u003d mock.Mock("},{"line_number":911,"context_line":"            autospec\u003dcinderclient_volumes.VolumeManager)"},{"line_number":912,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"d2bda7af_33c798df","line":909,"updated":"2026-06-24 17:57:21.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"ec8f5023be78fa829fade17c037b108d4957fb16"}]}
