)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ceb98e8be99063cd6cd2cbb48341ce1beeb898e6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"to stop an unstarted patcher."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I417471086da42f509ccfab151b6cbcbf4ac7c3b1"},{"line_number":19,"context_line":"Partial-Bug: #1614356"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ac06dbe_f8fd756f","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":21},"updated":"2016-08-19 12:06:49.000000000","message":"This is not a bug. So, you don\u0027t need this (also close the bug in LP).","commit_id":"b2d41fef006efef28ce90c7c5021bf9bbe942956"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"189ccbb46454fd78ea80eacb28aa6d3f42e5861a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Replaced stubs.Set() with mock_object() in some classes in"},{"line_number":13,"context_line":"cinder/tests/unit/api/contrib/*.py."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note: Currently, there is no alternative for stubs.UnsetAll()."},{"line_number":16,"context_line":"This implements an alternative for it. It seems mock provides a"},{"line_number":17,"context_line":"similar function, called mock.patch.stopall(), but it will cause"},{"line_number":18,"context_line":"RuntimeException raised in tearDown() when the test runner tries"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa7ab95a_804d6b9b","line":15,"updated":"2016-09-01 11:56:36.000000000","message":"We don\u0027t need UnsetAll if we use self.mock_object, self.mock, or mock.patch/mock.patch.object as context manager manager or decorator.","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"2a0f2714b0ea56c3f02bf9d513ad7bcc6b9fd3a7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Replaced stubs.Set() with mock_object() in some classes in"},{"line_number":13,"context_line":"cinder/tests/unit/api/contrib/*.py."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note: Currently, there is no alternative for stubs.UnsetAll()."},{"line_number":16,"context_line":"This implements an alternative for it. It seems mock provides a"},{"line_number":17,"context_line":"similar function, called mock.patch.stopall(), but it will cause"},{"line_number":18,"context_line":"RuntimeException raised in tearDown() when the test runner tries"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa7ab95a_1060b734","line":15,"in_reply_to":"fa7ab95a_804d6b9b","updated":"2016-09-01 16:10:45.000000000","message":"Done","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"}],"cinder/tests/unit/api/contrib/test_consistencygroups.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"189ccbb46454fd78ea80eacb28aa6d3f42e5861a","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        name \u003d \u0027mycg\u0027"},{"line_number":575,"context_line":"        description \u003d \u0027consistency group 1\u0027"},{"line_number":576,"context_line":"        fake_type \u003d {\u0027id\u0027: fake.CONSISTENCY_GROUP_ID, \u0027name\u0027: \u0027fake_type\u0027}"},{"line_number":577,"context_line":"        self.mock_object(db, \u0027volume_types_get_by_name_or_id\u0027,"},{"line_number":578,"context_line":"                         lambda ctx, type: [fake_type])"},{"line_number":579,"context_line":"        self.mock_object(self.cg_api, \u0027_cast_create_consistencygroup\u0027)"},{"line_number":580,"context_line":"        self.mock_object(self.cg_api, \u0027update_quota\u0027)"},{"line_number":581,"context_line":"        cg \u003d self.cg_api.create(self.ctxt, name, description,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_53ffbf00","line":578,"range":{"start_line":577,"start_character":0,"end_line":578,"end_character":55},"updated":"2016-09-01 11:56:36.000000000","message":"-1:\n\n self.mock_object(db, \u0027volume_types_get_by_name_or_id\u0027,\n                  return_value\u003d[fake_type])","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"2a0f2714b0ea56c3f02bf9d513ad7bcc6b9fd3a7","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        name \u003d \u0027mycg\u0027"},{"line_number":575,"context_line":"        description \u003d \u0027consistency group 1\u0027"},{"line_number":576,"context_line":"        fake_type \u003d {\u0027id\u0027: fake.CONSISTENCY_GROUP_ID, \u0027name\u0027: \u0027fake_type\u0027}"},{"line_number":577,"context_line":"        self.mock_object(db, \u0027volume_types_get_by_name_or_id\u0027,"},{"line_number":578,"context_line":"                         lambda ctx, type: [fake_type])"},{"line_number":579,"context_line":"        self.mock_object(self.cg_api, \u0027_cast_create_consistencygroup\u0027)"},{"line_number":580,"context_line":"        self.mock_object(self.cg_api, \u0027update_quota\u0027)"},{"line_number":581,"context_line":"        cg \u003d self.cg_api.create(self.ctxt, name, description,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_ff9a466d","line":578,"range":{"start_line":577,"start_character":0,"end_line":578,"end_character":55},"in_reply_to":"fa7ab95a_53ffbf00","updated":"2016-09-01 16:10:45.000000000","message":"Done","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"}],"cinder/tests/unit/api/contrib/test_types_extra_specs.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"189ccbb46454fd78ea80eacb28aa6d3f42e5861a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    return fake_volume_type_extra_specs()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def return_empty_volume_type_extra_specs(context, volume_type_id):"},{"line_number":39,"context_line":"    return {}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def delete_volume_type_extra_specs(context, volume_type_id, key):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_936ea7c7","line":39,"range":{"start_line":38,"start_character":0,"end_line":39,"end_character":13},"updated":"2016-09-01 11:56:36.000000000","message":"nit: We should just remove this and replace it with \"return\u003d{}\" wherever we do the mock_object call","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"2a0f2714b0ea56c3f02bf9d513ad7bcc6b9fd3a7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    return fake_volume_type_extra_specs()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def return_empty_volume_type_extra_specs(context, volume_type_id):"},{"line_number":39,"context_line":"    return {}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def delete_volume_type_extra_specs(context, volume_type_id, key):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_1f636a1b","line":39,"range":{"start_line":38,"start_character":0,"end_line":39,"end_character":13},"in_reply_to":"fa7ab95a_936ea7c7","updated":"2016-09-01 16:10:45.000000000","message":"Done","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"189ccbb46454fd78ea80eacb28aa6d3f42e5861a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    return {}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def delete_volume_type_extra_specs(context, volume_type_id, key):"},{"line_number":43,"context_line":"    pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def delete_volume_type_extra_specs_not_found(context, volume_type_id, key):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_136377dd","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":8},"updated":"2016-09-01 11:56:36.000000000","message":"nit: We should just remove this and replace it with \"return\u003dNone\" wherever we do the mock_object call","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"2a0f2714b0ea56c3f02bf9d513ad7bcc6b9fd3a7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    return {}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def delete_volume_type_extra_specs(context, volume_type_id, key):"},{"line_number":43,"context_line":"    pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def delete_volume_type_extra_specs_not_found(context, volume_type_id, key):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_5f6df202","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":8},"in_reply_to":"fa7ab95a_136377dd","updated":"2016-09-01 16:10:45.000000000","message":"Done","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"}],"cinder/tests/unit/api/contrib/test_volume_actions.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"189ccbb46454fd78ea80eacb28aa6d3f42e5861a","unresolved":false,"context_lines":[{"line_number":784,"context_line":"        self.mock_object(volume_api.API, \u0027get\u0027, fake_volume_get)"},{"line_number":785,"context_line":"        self.context \u003d context.RequestContext(fake.USER_ID, fake.PROJECT_ID,"},{"line_number":786,"context_line":"                                              is_admin\u003dFalse)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def _unset_mocks(self):"},{"line_number":789,"context_line":"        for patcher in self.orig_mocks:"},{"line_number":790,"context_line":"            patcher.start()"},{"line_number":791,"context_line":"            self.addCleanup(patcher.stop)"},{"line_number":792,"context_line":"        self.orig_mocks \u003d []"},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"    def mock_object(self, obj, attr_name, *args, **kwargs):"},{"line_number":795,"context_line":"        \"\"\"Override mock_object() to allow to unset mocks.\"\"\""},{"line_number":796,"context_line":"        orig_attr \u003d getattr(obj, attr_name, None)"},{"line_number":797,"context_line":"        if orig_attr:"},{"line_number":798,"context_line":"            rev_patcher \u003d mock.patch.object(obj, attr_name, orig_attr)"},{"line_number":799,"context_line":"            self.orig_mocks.append(rev_patcher)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        # Call mock_object() of the super class"},{"line_number":802,"context_line":"        super(VolumeImageActionsTest, self).mock_object(obj, attr_name,"},{"line_number":803,"context_line":"                                                        *args, **kwargs)"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    def _get_os_volume_upload_image(self):"},{"line_number":806,"context_line":"        vol \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_f141ab3a","line":803,"range":{"start_line":787,"start_character":0,"end_line":803,"end_character":72},"updated":"2016-09-01 11:56:36.000000000","message":"-1: I understand that you had to figure out a workaround, but I think this is not the right solution.\n\nIf we ignore how things were done with stubs and we think how it should be done with mocks, we see there\u0027s a cleaner solution:\n\n- Don\u0027t mock volume_api.API.get in setUp\n- Remove the UnsetAll from _create_volume_with_type\n- Add mock decorator to tests that need the get method mocked:\n\n @mock.patch.object(volume_api.API, \u0027get\u0027, fake_volume_get)","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"2a0f2714b0ea56c3f02bf9d513ad7bcc6b9fd3a7","unresolved":false,"context_lines":[{"line_number":784,"context_line":"        self.mock_object(volume_api.API, \u0027get\u0027, fake_volume_get)"},{"line_number":785,"context_line":"        self.context \u003d context.RequestContext(fake.USER_ID, fake.PROJECT_ID,"},{"line_number":786,"context_line":"                                              is_admin\u003dFalse)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def _unset_mocks(self):"},{"line_number":789,"context_line":"        for patcher in self.orig_mocks:"},{"line_number":790,"context_line":"            patcher.start()"},{"line_number":791,"context_line":"            self.addCleanup(patcher.stop)"},{"line_number":792,"context_line":"        self.orig_mocks \u003d []"},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"    def mock_object(self, obj, attr_name, *args, **kwargs):"},{"line_number":795,"context_line":"        \"\"\"Override mock_object() to allow to unset mocks.\"\"\""},{"line_number":796,"context_line":"        orig_attr \u003d getattr(obj, attr_name, None)"},{"line_number":797,"context_line":"        if orig_attr:"},{"line_number":798,"context_line":"            rev_patcher \u003d mock.patch.object(obj, attr_name, orig_attr)"},{"line_number":799,"context_line":"            self.orig_mocks.append(rev_patcher)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        # Call mock_object() of the super class"},{"line_number":802,"context_line":"        super(VolumeImageActionsTest, self).mock_object(obj, attr_name,"},{"line_number":803,"context_line":"                                                        *args, **kwargs)"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    def _get_os_volume_upload_image(self):"},{"line_number":806,"context_line":"        vol \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_5a41800a","line":803,"range":{"start_line":787,"start_character":0,"end_line":803,"end_character":72},"in_reply_to":"fa7ab95a_f141ab3a","updated":"2016-09-01 16:10:45.000000000","message":"Done","commit_id":"94d8725196edbca66b8c927a12269b35595e7b94"}]}
