)]}'
{"nova/tests/unit/virt/xenapi/plugins/test_bandwidth.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"0dc45be4fe159d12e1620ed87dc0204bddd147cc","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027xenbr1: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0\\n\u0027\\"},{"line_number":31,"context_line":"        \u0027vif2.0: 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0\\n\u0027\\"},{"line_number":32,"context_line":"        \u0027vif2.1: 3 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0\\n\u0027"},{"line_number":33,"context_line":"        expect_devmap \u003d {\u00272\u0027: {\u00271\u0027: {\u0027bw_in\u0027: 3, \u0027bw_out\u0027: 3},"},{"line_number":34,"context_line":"                               \u00270\u0027: {\u0027bw_in\u0027: 2, \u0027bw_out\u0027: 2}"},{"line_number":35,"context_line":"                              }"},{"line_number":36,"context_line":"                        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_9572487b","line":33,"updated":"2016-03-01 15:29:54.000000000","message":"Please use different numbers for bw_in and bw_out so the test verifies that the two are not swapped.","commit_id":"15fe530e889bb2353027a6479b0f19dee27a91b5"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"c9c2deff1e27d0a4b518032f93b4a60b8d5902b8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027xenbr1: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0\\n\u0027\\"},{"line_number":31,"context_line":"        \u0027vif2.0: 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0\\n\u0027\\"},{"line_number":32,"context_line":"        \u0027vif2.1: 3 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0\\n\u0027"},{"line_number":33,"context_line":"        expect_devmap \u003d {\u00272\u0027: {\u00271\u0027: {\u0027bw_in\u0027: 3, \u0027bw_out\u0027: 3},"},{"line_number":34,"context_line":"                               \u00270\u0027: {\u0027bw_in\u0027: 2, \u0027bw_out\u0027: 2}"},{"line_number":35,"context_line":"                              }"},{"line_number":36,"context_line":"                        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_07836e05","line":33,"in_reply_to":"7af24918_9572487b","updated":"2016-03-02 11:10:54.000000000","message":"Done","commit_id":"15fe530e889bb2353027a6479b0f19dee27a91b5"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"0dc45be4fe159d12e1620ed87dc0204bddd147cc","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        def open_side_effect(*args):"},{"line_number":39,"context_line":"            return StringIO(fake_data)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        with mock.patch(\u0027__builtin__.open\u0027) as mock_open:"},{"line_number":42,"context_line":"            mock_open.side_effect \u003d open_side_effect"},{"line_number":43,"context_line":"            devmap \u003d self.bandwidth._read_proc_net()"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_60c7f845","line":41,"updated":"2016-03-01 15:29:54.000000000","message":"I think a better approach would be to have a simple function that reads all lines from /proc/net/dev which we can mock, so we don\u0027t have to mock open.  I also note that there is a bug (I think) because open is inline - so the file is never closed?\n\nCan you change the plugin as well as add this unit test so we have:\ndef _read_proc_net():\n    f \u003d open(\u0027/proc/net/dev\u0027)\n    try:\n        return f.readlines()\n    finally:\n        f.close()\n\ndef _parse_proc_net():\n    devs \u003d [l.strip() for l in _read_proc_net()]\n    ....\n\nThen the UT only needs to test _parse_proc_net and can mock out _read_proc_net.","commit_id":"15fe530e889bb2353027a6479b0f19dee27a91b5"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"c9c2deff1e27d0a4b518032f93b4a60b8d5902b8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        def open_side_effect(*args):"},{"line_number":39,"context_line":"            return StringIO(fake_data)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        with mock.patch(\u0027__builtin__.open\u0027) as mock_open:"},{"line_number":42,"context_line":"            mock_open.side_effect \u003d open_side_effect"},{"line_number":43,"context_line":"            devmap \u003d self.bandwidth._read_proc_net()"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_e785a207","line":41,"in_reply_to":"7af24918_60c7f845","updated":"2016-03-02 11:10:54.000000000","message":"Done","commit_id":"15fe530e889bb2353027a6479b0f19dee27a91b5"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"0dc45be4fe159d12e1620ed87dc0204bddd147cc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            self.assertTrue(mock_open.called)"},{"line_number":46,"context_line":"            self.assertEqual(devmap, expect_devmap)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_fetch_all_bandwidth(self):"},{"line_number":49,"context_line":"        mock_read_proc_net \u003d self.mock_patch_object("},{"line_number":50,"context_line":"            self.bandwidth, \u0027_read_proc_net\u0027)"},{"line_number":51,"context_line":"        self.bandwidth.fetch_all_bandwidth(\u0027fake_session\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_b51784ec","line":48,"updated":"2016-03-01 15:29:54.000000000","message":"I don\u0027t think this is required since it\u0027s just a stub function; I\u0027d say remove this test.","commit_id":"15fe530e889bb2353027a6479b0f19dee27a91b5"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"c9c2deff1e27d0a4b518032f93b4a60b8d5902b8","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            self.assertTrue(mock_open.called)"},{"line_number":46,"context_line":"            self.assertEqual(devmap, expect_devmap)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_fetch_all_bandwidth(self):"},{"line_number":49,"context_line":"        mock_read_proc_net \u003d self.mock_patch_object("},{"line_number":50,"context_line":"            self.bandwidth, \u0027_read_proc_net\u0027)"},{"line_number":51,"context_line":"        self.bandwidth.fetch_all_bandwidth(\u0027fake_session\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_477d761b","line":48,"in_reply_to":"7af24918_b51784ec","updated":"2016-03-02 11:10:54.000000000","message":"Done","commit_id":"15fe530e889bb2353027a6479b0f19dee27a91b5"}],"plugins/xenserver/xenapi/etc/xapi.d/plugins/bandwidth":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c1467e6bc2f103152769b5c9aeea294ce61e64d5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    try:"},{"line_number":34,"context_line":"        return f.readlines()"},{"line_number":35,"context_line":"    finally:"},{"line_number":36,"context_line":"        f.close()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def _get_bandwitdth_from_proc():"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"7a8ec9b2_2a0db437","line":36,"updated":"2016-09-19 15:40:20.000000000","message":"I guess this is an add here, but thats all good.","commit_id":"ab5e67f8ea9bb1a09a70e94ff2695731ba6a1ad3"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"ae8530a8ec812c1ade05d7cb9439128f6d21ffe1","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    try:"},{"line_number":34,"context_line":"        return f.readlines()"},{"line_number":35,"context_line":"    finally:"},{"line_number":36,"context_line":"        f.close()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def _get_bandwitdth_from_proc():"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"7a8ec9b2_ec168957","line":36,"in_reply_to":"7a8ec9b2_2a0db437","updated":"2016-09-19 16:10:36.000000000","message":"Yeah - it\u0027s not actually \"leaked\" for long without this, because the plugin is a short-lived isolated process - so Python will close when the process exited.\n\nBut of course, we really should be closing it here :)","commit_id":"ab5e67f8ea9bb1a09a70e94ff2695731ba6a1ad3"}]}
