)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"972e3feb36c47382e01e2622cfef47eda917e67d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Changed filter field to router_id"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Or the query will return all the ports in RouterPort table."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ib78ca766f91783ad2ecca5b728c31602b4ed15d8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa1b9901_50750930","line":10,"updated":"2015-08-21 20:55:29.000000000","message":"Add a bug so this can be backported to stable branches.  If you have seen dramatic improvements at scale with this fix, include those details (in the bug and/or commit message).","commit_id":"f3d7dec71205d0b28c76a03ecebdff0849dca4d7"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b013e32c62f8a923d5e3bba2e96144d52e3286ac","unresolved":false,"context_lines":[{"line_number":12,"context_line":"number of route ports in place, this would lag the response time"},{"line_number":13,"context_line":"for adding router interface and router L3 agent binding."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Stop approving stuff that isn\u0027t targeted for a milestone."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1489671"},{"line_number":18,"context_line":"Change-Id: Ib78ca766f91783ad2ecca5b728c31602b4ed15d8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da20952f_a1eff91c","line":15,"updated":"2015-09-04 00:06:20.000000000","message":"remove this from the commit message. Armando added it to take it out of the gate","commit_id":"2998283ecb65438f3ea1bcef6fdfbce45a8ea1a8"}],"neutron/tests/unit/extensions/test_l3.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ba766803252d2f94947bd5ce05426b30fecc0b67","unresolved":false,"context_lines":[{"line_number":2499,"context_line":""},{"line_number":2500,"context_line":"    \"\"\"Unit tests for methods called by the L3 agent.\"\"\""},{"line_number":2501,"context_line":""},{"line_number":2502,"context_line":"    def test_l3_agent_routers_query_interfaces(self):"},{"line_number":2503,"context_line":"        with self.router() as r, self.router() as b:"},{"line_number":2504,"context_line":"            with self.port() as p, self.port() as c:"},{"line_number":2505,"context_line":"                self._router_interface_action(\u0027add\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_80c28f51","line":2502,"updated":"2015-09-01 08:03:20.000000000","message":"it\u0027s worth adding a docstring and comments to undersatnd what is tested here","commit_id":"307be5d51be30318f710f5efaf37af6b39bcc2ba"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ba766803252d2f94947bd5ce05426b30fecc0b67","unresolved":false,"context_lines":[{"line_number":2500,"context_line":"    \"\"\"Unit tests for methods called by the L3 agent.\"\"\""},{"line_number":2501,"context_line":""},{"line_number":2502,"context_line":"    def test_l3_agent_routers_query_interfaces(self):"},{"line_number":2503,"context_line":"        with self.router() as r, self.router() as b:"},{"line_number":2504,"context_line":"            with self.port() as p, self.port() as c:"},{"line_number":2505,"context_line":"                self._router_interface_action(\u0027add\u0027,"},{"line_number":2506,"context_line":"                                              r[\u0027router\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_403237a8","line":2503,"updated":"2015-09-01 08:03:20.000000000","message":"better to use router1 router2 and port1 port2  for readability","commit_id":"307be5d51be30318f710f5efaf37af6b39bcc2ba"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b247024b98feffbf1ae417650ee71c999ac2e219","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"                    router \u003d routers_dict.get(interfaces[0][\u0027device_id\u0027])"},{"line_number":2510,"context_line":"                    router_iface \u003d router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":2511,"context_line":"                    router_iface.append(interfaces[0])"},{"line_number":2512,"context_line":"                    router[l3_constants.INTERFACE_KEY] \u003d router_iface"},{"line_number":2513,"context_line":""},{"line_number":2514,"context_line":"                with mock.patch.object(self.plugin,"},{"line_number":2515,"context_line":"                                       \u0027_process_interfaces\u0027) as fakes:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_11879713","line":2512,"updated":"2015-09-01 17:43:34.000000000","message":"You\u0027re trying real hard to not call _get_sync_interfaces() directly, but in the process have to recreate an entire method as a side-effect.  Is it not better to just make a test to call _get_sync_interfaces() and verify it works as expected?","commit_id":"d1e6ad0633e19f33f3a2181c50046ed548487186"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"22bed5136ba02c06ea6f61c456d6d28f26bf548d","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"                    router \u003d routers_dict.get(interfaces[0][\u0027device_id\u0027])"},{"line_number":2510,"context_line":"                    router_iface \u003d router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":2511,"context_line":"                    router_iface.append(interfaces[0])"},{"line_number":2512,"context_line":"                    router[l3_constants.INTERFACE_KEY] \u003d router_iface"},{"line_number":2513,"context_line":""},{"line_number":2514,"context_line":"                with mock.patch.object(self.plugin,"},{"line_number":2515,"context_line":"                                       \u0027_process_interfaces\u0027) as fakes:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_8c538a6c","line":2512,"in_reply_to":"da20952f_11879713","updated":"2015-09-01 18:04:58.000000000","message":"I agree with Brian. The test before this patch was great - It set up data, called get_sync_data and verified the result set. You just need the same test but with two routers. No need to mock anything.","commit_id":"d1e6ad0633e19f33f3a2181c50046ed548487186"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"94403e6194619d7bfa6c2a18d09f7b5f1520456e","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"                    router \u003d routers_dict.get(interfaces[0][\u0027device_id\u0027])"},{"line_number":2510,"context_line":"                    router_iface \u003d router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":2511,"context_line":"                    router_iface.append(interfaces[0])"},{"line_number":2512,"context_line":"                    router[l3_constants.INTERFACE_KEY] \u003d router_iface"},{"line_number":2513,"context_line":""},{"line_number":2514,"context_line":"                with mock.patch.object(self.plugin,"},{"line_number":2515,"context_line":"                                       \u0027_process_interfaces\u0027) as fakes:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_7bf8294a","line":2512,"in_reply_to":"da20952f_709288f8","updated":"2015-09-01 20:06:43.000000000","message":"Why would testing _get_sync_interfaces directly be discouraged? If the issue is it has a leading underscore in it\u0027s name I would be happy to remove it :)","commit_id":"d1e6ad0633e19f33f3a2181c50046ed548487186"},{"author":{"_account_id":7148,"name":"Zhu Zhu","email":"bjzzu.zz@gmail.com","username":"zhuzhubj"},"change_message_id":"abf3316ac416122412aea363a0e73a3bcf98948f","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"                    router \u003d routers_dict.get(interfaces[0][\u0027device_id\u0027])"},{"line_number":2510,"context_line":"                    router_iface \u003d router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":2511,"context_line":"                    router_iface.append(interfaces[0])"},{"line_number":2512,"context_line":"                    router[l3_constants.INTERFACE_KEY] \u003d router_iface"},{"line_number":2513,"context_line":""},{"line_number":2514,"context_line":"                with mock.patch.object(self.plugin,"},{"line_number":2515,"context_line":"                                       \u0027_process_interfaces\u0027) as fakes:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_18f56582","line":2512,"in_reply_to":"da20952f_7bf8294a","updated":"2015-09-02 03:41:05.000000000","message":"Brain, Assaf, thanks for your comments.  Will change to test only sync interfaces method. Though it was the \"internal\" method, it seems to be no matter to do that.","commit_id":"d1e6ad0633e19f33f3a2181c50046ed548487186"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0b98a6d8ba838976b428e9f07922f5cc680c1026","unresolved":false,"context_lines":[{"line_number":2509,"context_line":"                    router \u003d routers_dict.get(interfaces[0][\u0027device_id\u0027])"},{"line_number":2510,"context_line":"                    router_iface \u003d router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":2511,"context_line":"                    router_iface.append(interfaces[0])"},{"line_number":2512,"context_line":"                    router[l3_constants.INTERFACE_KEY] \u003d router_iface"},{"line_number":2513,"context_line":""},{"line_number":2514,"context_line":"                with mock.patch.object(self.plugin,"},{"line_number":2515,"context_line":"                                       \u0027_process_interfaces\u0027) as fakes:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_709288f8","line":2512,"in_reply_to":"da20952f_8c538a6c","updated":"2015-09-01 19:44:40.000000000","message":"Assaf - what do you think of a direct call to _get_sync_interfaces() as a test ?  From reading the bug part of the problem is that the code works as-is but is inefficient in its query.  I guess I was thinking that was discouraged but now see lots of such tests.","commit_id":"d1e6ad0633e19f33f3a2181c50046ed548487186"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b247024b98feffbf1ae417650ee71c999ac2e219","unresolved":false,"context_lines":[{"line_number":2516,"context_line":"                    fakes.side_effect \u003d fake_process_interfaces"},{"line_number":2517,"context_line":"                    routers \u003d self.plugin.get_sync_data("},{"line_number":2518,"context_line":"                                          context.get_admin_context(),"},{"line_number":2519,"context_line":"                                          [router1[\u0027router\u0027][\u0027id\u0027]])"},{"line_number":2520,"context_line":"                    self.assertEqual(1, len(routers))"},{"line_number":2521,"context_line":"                    interfaces \u003d routers[0][l3_constants.INTERFACE_KEY]"},{"line_number":2522,"context_line":"                    self.assertEqual(1, len(interfaces))"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_f1ea23ac","line":2519,"updated":"2015-09-01 17:43:34.000000000","message":"If you\u0027re going to change this test to return just one router of two, then I think you should also have a test that specifies None and verifies both routers were returned.  Or just make both calls in this test and verify the return values.","commit_id":"d1e6ad0633e19f33f3a2181c50046ed548487186"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"22bed5136ba02c06ea6f61c456d6d28f26bf548d","unresolved":false,"context_lines":[{"line_number":2516,"context_line":"                    fakes.side_effect \u003d fake_process_interfaces"},{"line_number":2517,"context_line":"                    routers \u003d self.plugin.get_sync_data("},{"line_number":2518,"context_line":"                                          context.get_admin_context(),"},{"line_number":2519,"context_line":"                                          [router1[\u0027router\u0027][\u0027id\u0027]])"},{"line_number":2520,"context_line":"                    self.assertEqual(1, len(routers))"},{"line_number":2521,"context_line":"                    interfaces \u003d routers[0][l3_constants.INTERFACE_KEY]"},{"line_number":2522,"context_line":"                    self.assertEqual(1, len(interfaces))"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_8cf70a8c","line":2519,"in_reply_to":"da20952f_f1ea23ac","updated":"2015-09-01 18:04:58.000000000","message":"+1","commit_id":"d1e6ad0633e19f33f3a2181c50046ed548487186"},{"author":{"_account_id":7148,"name":"Zhu Zhu","email":"bjzzu.zz@gmail.com","username":"zhuzhubj"},"change_message_id":"abf3316ac416122412aea363a0e73a3bcf98948f","unresolved":false,"context_lines":[{"line_number":2516,"context_line":"                    fakes.side_effect \u003d fake_process_interfaces"},{"line_number":2517,"context_line":"                    routers \u003d self.plugin.get_sync_data("},{"line_number":2518,"context_line":"                                          context.get_admin_context(),"},{"line_number":2519,"context_line":"                                          [router1[\u0027router\u0027][\u0027id\u0027]])"},{"line_number":2520,"context_line":"                    self.assertEqual(1, len(routers))"},{"line_number":2521,"context_line":"                    interfaces \u003d routers[0][l3_constants.INTERFACE_KEY]"},{"line_number":2522,"context_line":"                    self.assertEqual(1, len(interfaces))"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_78a021a6","line":2519,"in_reply_to":"da20952f_f1ea23ac","updated":"2015-09-02 03:41:05.000000000","message":"Ok. would add tests for the if specifies router_ids is None, verifies no interfaces were returned and when all router id passed, return all interfaces.","commit_id":"d1e6ad0633e19f33f3a2181c50046ed548487186"}]}
