)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"00758043d571a30854155d249aa336f0d68eca3d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix typo in ceilometer datasource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fix typo in ceilometer datasource"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Idfd099f718873d9056fdc35a97954771c9ae5762"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bfb3d3c7_f902783e","line":9,"updated":"2019-05-17 13:48:15.000000000","message":"This isn\u0027t very useful since it\u0027s the commit title.\n\nIt would be nice to know what regressed this, and it looks like it was I25b4cb0e1b85379ff0c4da9d0c1474380d75ce3a which goes back to Queens? Is that right? How could this be broken for so long and no one notice?\n\nRegardless, why don\u0027t we have a bug for this so we can do backports to stable branches?\n\nhttps://bugs.launchpad.net/watcher","commit_id":"ab5ca31c0d25a437f2a3f149a5412399120afa05"}],"watcher/tests/datasources/test_ceilometer_helper.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc86bb073ea1c1cdcda5d24e9b9a56a4b43b24d8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        val \u003d cm.statistic_list(meter_name\u003d\"cpu_util\")"},{"line_number":96,"context_line":"        self.assertEqual(expected_value, val)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @mock.patch.object(ceilometer_helper.CeilometerHelper,"},{"line_number":99,"context_line":"                       \u0027statistic_aggregation\u0027)"},{"line_number":100,"context_line":"    def test_get_host_cpu_usage(self, mock_aggregation, mock_ceilometer):"},{"line_number":101,"context_line":"        helper \u003d ceilometer_helper.CeilometerHelper()"},{"line_number":102,"context_line":"        helper.get_host_cpu_usage(\u0027compute1\u0027, 600, \u0027mean\u0027)"},{"line_number":103,"context_line":"        mock_aggregation.assert_called_once_with("},{"line_number":104,"context_line":"            \u0027compute1\u0027, helper.METRIC_MAP[\u0027host_cpu_usage\u0027], 600, None,"},{"line_number":105,"context_line":"            aggregation\u003d\u0027mean\u0027)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @mock.patch.object(ceilometer_helper.CeilometerHelper,"},{"line_number":108,"context_line":"                       \u0027statistic_aggregation\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_34081527","line":105,"range":{"start_line":98,"start_character":4,"end_line":105,"end_character":31},"updated":"2019-05-17 13:54:27.000000000","message":"So clearly these tests are worthless, they are just repeating what the code does, which was wrong. These tests would be better if the statistic_aggregation mock was backed by a spec/autospec so that passing kwargs to the mocked method which aren\u0027t on the real spec of the method would fail.","commit_id":"ab5ca31c0d25a437f2a3f149a5412399120afa05"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5080259f8549242bcaf615ac71462e5864504388","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        val \u003d cm.statistic_list(meter_name\u003d\"cpu_util\")"},{"line_number":96,"context_line":"        self.assertEqual(expected_value, val)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @mock.patch.object(ceilometer_helper.CeilometerHelper,"},{"line_number":99,"context_line":"                       \u0027statistic_aggregation\u0027)"},{"line_number":100,"context_line":"    def test_get_host_cpu_usage(self, mock_aggregation, mock_ceilometer):"},{"line_number":101,"context_line":"        helper \u003d ceilometer_helper.CeilometerHelper()"},{"line_number":102,"context_line":"        helper.get_host_cpu_usage(\u0027compute1\u0027, 600, \u0027mean\u0027)"},{"line_number":103,"context_line":"        mock_aggregation.assert_called_once_with("},{"line_number":104,"context_line":"            \u0027compute1\u0027, helper.METRIC_MAP[\u0027host_cpu_usage\u0027], 600, None,"},{"line_number":105,"context_line":"            aggregation\u003d\u0027mean\u0027)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @mock.patch.object(ceilometer_helper.CeilometerHelper,"},{"line_number":108,"context_line":"                       \u0027statistic_aggregation\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_f454bd56","line":105,"range":{"start_line":98,"start_character":4,"end_line":105,"end_character":31},"in_reply_to":"bfb3d3c7_34081527","updated":"2019-05-17 14:16:49.000000000","message":"Looks like this exposes the issue:\n\nosboxes@osboxes:~/git/watcher$ git diff\ndiff --git a/watcher/tests/datasources/test_ceilometer_helper.py b/watcher/tests/datasources/test_ceilometer_helper.py\nindex f0732180..b8f8184f 100644\n--- a/watcher/tests/datasources/test_ceilometer_helper.py\n+++ b/watcher/tests/datasources/test_ceilometer_helper.py\n@@ -96,7 +96,7 @@ class TestCeilometerHelper(base.BaseTestCase):\n         self.assertEqual(expected_value, val)\n \n     @mock.patch.object(ceilometer_helper.CeilometerHelper,\n-                       \u0027statistic_aggregation\u0027)\n+                       \u0027statistic_aggregation\u0027, autospec\u003dTrue)\n     def test_get_host_cpu_usage(self, mock_aggregation, mock_ceilometer):\n         helper \u003d ceilometer_helper.CeilometerHelper()\n         helper.get_host_cpu_usage(\u0027compute1\u0027, 600, \u0027mean\u0027)\n\n\nJust using autospec\u003dTrue on the mock makes the test fail w/o the fix:\n\nwatcher.tests.datasources.test_ceilometer_helper.TestCeilometerHelper.test_get_host_cpu_usage\n---------------------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    b\u0027Traceback (most recent call last):\u0027\n    b\u0027  File \"/home/osboxes/git/watcher/.tox/py36/lib/python3.6/site-packages/mock/mock.py\", line 1329, in patched\u0027\n    b\u0027    return func(*args, **keywargs)\u0027\n    b\u0027  File \"/home/osboxes/git/watcher/watcher/tests/datasources/test_ceilometer_helper.py\", line 102, in test_get_host_cpu_usage\u0027\n    b\"    helper.get_host_cpu_usage(\u0027compute1\u0027, 600, \u0027mean\u0027)\"\n    b\u0027  File \"/home/osboxes/git/watcher/watcher/datasources/ceilometer.py\", line 235, in get_host_cpu_usage\u0027\n    b\u0027    granularity, aggregate\u003daggregate)\u0027\n    b\u0027  File \"\u003cstring\u003e\", line 2, in statistic_aggregation\u0027\n    b\u0027  File \"/home/osboxes/git/watcher/.tox/py36/lib/python3.6/site-packages/mock/mock.py\", line 269, in checksig\u0027\n    b\u0027    sig.bind(*args, **kwargs)\u0027\n    b\u0027  File \"/usr/lib/python3.6/inspect.py\", line 2989, in bind\u0027\n    b\u0027    return args[0]._bind(args[1:], kwargs)\u0027\n    b\u0027  File \"/usr/lib/python3.6/inspect.py\", line 2980, in _bind\u0027\n    b\u0027    arg\u003dnext(iter(kwargs))))\u0027\n    b\"TypeError: got an unexpected keyword argument \u0027aggregate\u0027\"\n    b\u0027\u0027","commit_id":"ab5ca31c0d25a437f2a3f149a5412399120afa05"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"80194177fa1ae8efdb67c2a4fad384a78522cf64","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        val \u003d cm.statistic_list(meter_name\u003d\"cpu_util\")"},{"line_number":96,"context_line":"        self.assertEqual(expected_value, val)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @mock.patch.object(ceilometer_helper.CeilometerHelper,"},{"line_number":99,"context_line":"                       \u0027statistic_aggregation\u0027)"},{"line_number":100,"context_line":"    def test_get_host_cpu_usage(self, mock_aggregation, mock_ceilometer):"},{"line_number":101,"context_line":"        helper \u003d ceilometer_helper.CeilometerHelper()"},{"line_number":102,"context_line":"        helper.get_host_cpu_usage(\u0027compute1\u0027, 600, \u0027mean\u0027)"},{"line_number":103,"context_line":"        mock_aggregation.assert_called_once_with("},{"line_number":104,"context_line":"            \u0027compute1\u0027, helper.METRIC_MAP[\u0027host_cpu_usage\u0027], 600, None,"},{"line_number":105,"context_line":"            aggregation\u003d\u0027mean\u0027)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @mock.patch.object(ceilometer_helper.CeilometerHelper,"},{"line_number":108,"context_line":"                       \u0027statistic_aggregation\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_1d409535","line":105,"range":{"start_line":98,"start_character":4,"end_line":105,"end_character":31},"in_reply_to":"bfb3d3c7_f454bd56","updated":"2019-05-17 15:19:03.000000000","message":"I\u0027m having some issues with autospec and spec actually, still trying to figure it out locally.","commit_id":"ab5ca31c0d25a437f2a3f149a5412399120afa05"}]}
