)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b04e1706a4478243d54a52d8b61aa965e0777363","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Move some service related code from df-local-controller to l3 app."},{"line_number":10,"context_line":"By doing this, we want to make df-local-controller simpler and"},{"line_number":11,"context_line":"unaware of details of serive"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I1e9a9541e6c445611396f5ac7409fd2e4069cbce"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a95cdbc_74d5ca41","line":11,"range":{"start_line":11,"start_character":22,"end_line":11,"end_character":28},"updated":"2016-10-05 09:05:10.000000000","message":"nit: service","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"27e90c956bdb5e7a97c21c5ec833c274fb6c622d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Move some service related code from df-local-controller to l3 app."},{"line_number":10,"context_line":"By doing this, we want to make df-local-controller simpler and"},{"line_number":11,"context_line":"unaware of details of serive"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I1e9a9541e6c445611396f5ac7409fd2e4069cbce"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a95cdbc_a984c10a","line":11,"range":{"start_line":11,"start_character":22,"end_line":11,"end_character":28},"in_reply_to":"1a95cdbc_74d5ca41","updated":"2016-10-08 09:03:45.000000000","message":"Done","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"}],"dragonflow/controller/df_db_notifier.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ad77c04fcbf39a84cead227d59459a7ab3c4a810","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                       compute node, and is removed from db"},{"line_number":66,"context_line":"        \"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def add_new_router_port(self, router, router_port, local_network_id):"},{"line_number":69,"context_line":"        \"\"\"add  new port to router hook callback"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_0a62a3d8","side":"PARENT","line":68,"updated":"2016-09-28 09:39:08.000000000","message":"This file is not well maintained, many new functionality don\u0027t add interface here. On the other side, the mechanism in [1] actually don\u0027t need an interface here. So, this makes me wonder do we still need to maintain this file?\n\n[1] https://github.com/openstack/dragonflow/blob/cf7369d5ce37bcfc9e1d6d5def4771d5ee8be2c4/dragonflow/controller/dispatcher.py#L43-L44","commit_id":"cf7369d5ce37bcfc9e1d6d5def4771d5ee8be2c4"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"7d59c590be9899f5a00d6411f995ffc9027a91eb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                       compute node, and is removed from db"},{"line_number":66,"context_line":"        \"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def add_new_router_port(self, router, router_port, local_network_id):"},{"line_number":69,"context_line":"        \"\"\"add  new port to router hook callback"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_ad5d444a","side":"PARENT","line":68,"in_reply_to":"5a8bc5a2_0a62a3d8","updated":"2016-09-28 13:28:36.000000000","message":"It can help app developer understanding the interfaces apps can make use of. So I think it isn\u0027t absolutely useless. I will also hear others\u0027 suggestions. If we all think we should remove it, we just remove it.","commit_id":"cf7369d5ce37bcfc9e1d6d5def4771d5ee8be2c4"}],"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b04e1706a4478243d54a52d8b61aa965e0777363","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.open_flow_app.notify_update_bridge_port(lport)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def router_updated(self, lrouter):"},{"line_number":355,"context_line":"        self.open_flow_app.notify_update_router(lrouter)"},{"line_number":356,"context_line":"        self.db_store.update_router(lrouter.get_id(), lrouter)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def router_deleted(self, lrouter_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_d4dbfeeb","line":355,"updated":"2016-10-05 09:05:10.000000000","message":"I think router_updated and router_created should be separated. It would make this function look a bit more like router_deleted, and will make the code in L3App (and L3ProactiveApp) more elegant and more L3-centric.\n\nIf the change isn\u0027t too great, maybe even make this differentiation in NbApi, where this call/event is dispatched.","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"27e90c956bdb5e7a97c21c5ec833c274fb6c622d","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.open_flow_app.notify_update_bridge_port(lport)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def router_updated(self, lrouter):"},{"line_number":355,"context_line":"        self.open_flow_app.notify_update_router(lrouter)"},{"line_number":356,"context_line":"        self.db_store.update_router(lrouter.get_id(), lrouter)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def router_deleted(self, lrouter_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_29719144","line":355,"in_reply_to":"1a95cdbc_1311e952","updated":"2016-10-08 09:03:45.000000000","message":"Done","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b5b3146af2515a91a30139d0ad72a21be445b1c2","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.open_flow_app.notify_update_bridge_port(lport)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def router_updated(self, lrouter):"},{"line_number":355,"context_line":"        self.open_flow_app.notify_update_router(lrouter)"},{"line_number":356,"context_line":"        self.db_store.update_router(lrouter.get_id(), lrouter)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def router_deleted(self, lrouter_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_1311e952","line":355,"in_reply_to":"1a95cdbc_d4dbfeeb","updated":"2016-10-05 14:37:15.000000000","message":"+1","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"}],"dragonflow/controller/l3_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"969f8da5800d6169fa119c04daef5ca4e7722e49","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                  const.EGRESS_TABLE)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def router_created(self, router):"},{"line_number":49,"context_line":"        self.router_updated(router)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def router_updated(self, router):"},{"line_number":52,"context_line":"        old_lrouter \u003d self.db_store.get_router(router.get_id())"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_4f717843","line":49,"range":{"start_line":49,"start_character":13,"end_line":49,"end_character":27},"updated":"2016-10-09 02:11:15.000000000","message":"Maybe you can just call self._add_new_lrouter(router) here.","commit_id":"9558ab965548410af632151004997c81ed8c654d"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"432349f204bc38804bf41aa3d8326b94b1b789e6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                  const.EGRESS_TABLE)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def router_created(self, router):"},{"line_number":49,"context_line":"        self.router_updated(router)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def router_updated(self, router):"},{"line_number":52,"context_line":"        old_lrouter \u003d self.db_store.get_router(router.get_id())"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_9618f5d4","line":49,"range":{"start_line":49,"start_character":13,"end_line":49,"end_character":27},"in_reply_to":"1a95cdbc_4f717843","updated":"2016-10-09 12:28:01.000000000","message":"Done","commit_id":"9558ab965548410af632151004997c81ed8c654d"}],"dragonflow/controller/l3_proactive_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"969f8da5800d6169fa119c04daef5ca4e7722e49","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                  const.EGRESS_TABLE)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def router_created(self, router):"},{"line_number":43,"context_line":"        self.router_updated(router)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def router_updated(self, router):"},{"line_number":46,"context_line":"        old_lrouter \u003d self.db_store.get_router(router.get_id())"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_8f954034","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":34},"updated":"2016-10-09 02:11:15.000000000","message":"Maybe you can just call self._add_new_lrouter(router) here.","commit_id":"9558ab965548410af632151004997c81ed8c654d"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"432349f204bc38804bf41aa3d8326b94b1b789e6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                  const.EGRESS_TABLE)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def router_created(self, router):"},{"line_number":43,"context_line":"        self.router_updated(router)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def router_updated(self, router):"},{"line_number":46,"context_line":"        old_lrouter \u003d self.db_store.get_router(router.get_id())"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_b60b317c","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":34},"in_reply_to":"1a95cdbc_8f954034","updated":"2016-10-09 12:28:01.000000000","message":"Done","commit_id":"9558ab965548410af632151004997c81ed8c654d"}],"dragonflow/controller/ryu_base_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ad77c04fcbf39a84cead227d59459a7ab3c4a810","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def notify_update_router(self, router\u003dNone):"},{"line_number":84,"context_line":"        self.dispatcher.dispatch(\u0027router_updated\u0027, router\u003drouter)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def notify_delete_router(self, router_id\u003dNone):"},{"line_number":87,"context_line":"        self.dispatcher.dispatch(\u0027router_deleted\u0027, router_id\u003drouter_id)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def notify_add_local_port(self, lport\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_0a9f0360","line":86,"range":{"start_line":86,"start_character":35,"end_line":86,"end_character":44},"updated":"2016-09-28 09:39:08.000000000","message":"other notify_delete_* uses resource as parameter, is it possible to keep same behavior here?","commit_id":"25f8ce5406d6e2dd9c9a0340d73df6e7bcf2e8c6"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"7d59c590be9899f5a00d6411f995ffc9027a91eb","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def notify_update_router(self, router\u003dNone):"},{"line_number":84,"context_line":"        self.dispatcher.dispatch(\u0027router_updated\u0027, router\u003drouter)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def notify_delete_router(self, router_id\u003dNone):"},{"line_number":87,"context_line":"        self.dispatcher.dispatch(\u0027router_deleted\u0027, router_id\u003drouter_id)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def notify_add_local_port(self, lport\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_cdfe1038","line":86,"range":{"start_line":86,"start_character":35,"end_line":86,"end_character":44},"in_reply_to":"5a8bc5a2_0a9f0360","updated":"2016-09-28 13:28:36.000000000","message":"Done","commit_id":"25f8ce5406d6e2dd9c9a0340d73df6e7bcf2e8c6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"969f8da5800d6169fa119c04daef5ca4e7722e49","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.dispatcher.dispatch(\u0027router_created\u0027, router\u003drouter)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def notify_update_router(self, router\u003dNone):"},{"line_number":87,"context_line":"        self.dispatcher.dispatch(\u0027router_updated\u0027, router\u003drouter)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def notify_delete_router(self, router\u003dNone):"},{"line_number":90,"context_line":"        self.dispatcher.dispatch(\u0027router_deleted\u0027, router\u003drouter)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_2fad0c88","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":65},"updated":"2016-10-09 02:11:15.000000000","message":"If this method is delegated to update router, maybe the original_router can be added to the arguments to make it be consistent with other methods.","commit_id":"9558ab965548410af632151004997c81ed8c654d"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"432349f204bc38804bf41aa3d8326b94b1b789e6","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.dispatcher.dispatch(\u0027router_created\u0027, router\u003drouter)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def notify_update_router(self, router\u003dNone):"},{"line_number":87,"context_line":"        self.dispatcher.dispatch(\u0027router_updated\u0027, router\u003drouter)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def notify_delete_router(self, router\u003dNone):"},{"line_number":90,"context_line":"        self.dispatcher.dispatch(\u0027router_deleted\u0027, router\u003drouter)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_f62939e7","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":65},"in_reply_to":"1a95cdbc_2fad0c88","updated":"2016-10-09 12:28:01.000000000","message":"Done","commit_id":"9558ab965548410af632151004997c81ed8c654d"}],"dragonflow/tests/unit/test_l3_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ad77c04fcbf39a84cead227d59459a7ab3c4a810","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":"from mock import Mock"},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_serialization import jsonutils"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_8afdd370","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":21},"updated":"2016-09-28 09:39:08.000000000","message":"This should be \n\nimport mock\n\naccording to http://docs.openstack.org/developer/hacking/#imports","commit_id":"25f8ce5406d6e2dd9c9a0340d73df6e7bcf2e8c6"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"7d59c590be9899f5a00d6411f995ffc9027a91eb","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":"from mock import Mock"},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_serialization import jsonutils"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_001a7f6e","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":21},"in_reply_to":"5a8bc5a2_8afdd370","updated":"2016-09-28 13:28:36.000000000","message":"Done","commit_id":"25f8ce5406d6e2dd9c9a0340d73df6e7bcf2e8c6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ad77c04fcbf39a84cead227d59459a7ab3c4a810","unresolved":false,"context_lines":[{"line_number":31,"context_line":"logger.addHandler(stream_handler)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestL3App(tests_base.BaseTestCase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def setUp(self):"},{"line_number":37,"context_line":"        super(TestL3App, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_2ac11f2f","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":41},"updated":"2016-09-28 09:39:08.000000000","message":"Maybe you could leverage the newly added base test class\ntest_app_base.DFAppTestBase, it can save lots of mock procedures in the ut.","commit_id":"25f8ce5406d6e2dd9c9a0340d73df6e7bcf2e8c6"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"7d59c590be9899f5a00d6411f995ffc9027a91eb","unresolved":false,"context_lines":[{"line_number":31,"context_line":"logger.addHandler(stream_handler)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestL3App(tests_base.BaseTestCase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def setUp(self):"},{"line_number":37,"context_line":"        super(TestL3App, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_2025bbad","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":41},"in_reply_to":"5a8bc5a2_2ac11f2f","updated":"2016-09-28 13:28:36.000000000","message":"Done","commit_id":"25f8ce5406d6e2dd9c9a0340d73df6e7bcf2e8c6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b04e1706a4478243d54a52d8b61aa965e0777363","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_add_del_router(self):"},{"line_number":32,"context_line":"        self.controller.router_deleted(self.router.get_id())"},{"line_number":33,"context_line":"        #print self.mock_mod_flow.mock_calls"},{"line_number":34,"context_line":"        assert self.mock_mod_flow.call_count \u003d\u003d 3"},{"line_number":35,"context_line":"        self.mock_mod_flow.reset_mock()"},{"line_number":36,"context_line":"        self.controller.router_updated(self.router)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_14f3a69f","line":33,"updated":"2016-10-05 09:05:10.000000000","message":"These comments are unnecessary. Please remove.","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"27e90c956bdb5e7a97c21c5ec833c274fb6c622d","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_add_del_router(self):"},{"line_number":32,"context_line":"        self.controller.router_deleted(self.router.get_id())"},{"line_number":33,"context_line":"        #print self.mock_mod_flow.mock_calls"},{"line_number":34,"context_line":"        assert self.mock_mod_flow.call_count \u003d\u003d 3"},{"line_number":35,"context_line":"        self.mock_mod_flow.reset_mock()"},{"line_number":36,"context_line":"        self.controller.router_updated(self.router)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_49925d4d","line":33,"in_reply_to":"1a95cdbc_14f3a69f","updated":"2016-10-08 09:03:45.000000000","message":"Done","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b04e1706a4478243d54a52d8b61aa965e0777363","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def test_add_del_router(self):"},{"line_number":32,"context_line":"        self.controller.router_deleted(self.router.get_id())"},{"line_number":33,"context_line":"        #print self.mock_mod_flow.mock_calls"},{"line_number":34,"context_line":"        assert self.mock_mod_flow.call_count \u003d\u003d 3"},{"line_number":35,"context_line":"        self.mock_mod_flow.reset_mock()"},{"line_number":36,"context_line":"        self.controller.router_updated(self.router)"},{"line_number":37,"context_line":"        #print self.mock_mod_flow.mock_calls"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_d43f7e23","line":34,"updated":"2016-10-05 09:05:10.000000000","message":"Please use self.assertEqual(3, self.mock_mod_flow.call_count)","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"27e90c956bdb5e7a97c21c5ec833c274fb6c622d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def test_add_del_router(self):"},{"line_number":32,"context_line":"        self.controller.router_deleted(self.router.get_id())"},{"line_number":33,"context_line":"        #print self.mock_mod_flow.mock_calls"},{"line_number":34,"context_line":"        assert self.mock_mod_flow.call_count \u003d\u003d 3"},{"line_number":35,"context_line":"        self.mock_mod_flow.reset_mock()"},{"line_number":36,"context_line":"        self.controller.router_updated(self.router)"},{"line_number":37,"context_line":"        #print self.mock_mod_flow.mock_calls"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_69955931","line":34,"in_reply_to":"1a95cdbc_d43f7e23","updated":"2016-10-08 09:03:45.000000000","message":"Done","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"}],"dragonflow/tests/unit/test_l3_proactive_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ad77c04fcbf39a84cead227d59459a7ab3c4a810","unresolved":false,"context_lines":[{"line_number":32,"context_line":"logger.addHandler(stream_handler)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class TestL3ProactiveApp(tests_base.BaseTestCase):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def setUp(self):"},{"line_number":38,"context_line":"        super(TestL3ProactiveApp, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_0a4e23c1","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":50},"updated":"2016-09-28 09:39:08.000000000","message":"Maybe you could leverage the newly added base test class\ntest_app_base.DFAppTestBase, it can save lots of mock procedures in the ut.","commit_id":"25f8ce5406d6e2dd9c9a0340d73df6e7bcf2e8c6"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"7d59c590be9899f5a00d6411f995ffc9027a91eb","unresolved":false,"context_lines":[{"line_number":32,"context_line":"logger.addHandler(stream_handler)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class TestL3ProactiveApp(tests_base.BaseTestCase):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def setUp(self):"},{"line_number":38,"context_line":"        super(TestL3ProactiveApp, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a8bc5a2_6056e307","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":50},"in_reply_to":"5a8bc5a2_0a4e23c1","updated":"2016-09-28 13:28:36.000000000","message":"Done","commit_id":"25f8ce5406d6e2dd9c9a0340d73df6e7bcf2e8c6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b04e1706a4478243d54a52d8b61aa965e0777363","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        router_with_route.lrouter[\u0027routes\u0027] \u003d [route]"},{"line_number":51,"context_line":"        self.controller.logical_port_created(test_app_base.fake_local_port1)"},{"line_number":52,"context_line":"        self.controller.router_updated(router_with_route)"},{"line_number":53,"context_line":"        assert self.mock_mod_flow.call_count \u003d\u003d 2"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # delete route"},{"line_number":56,"context_line":"        self.mock_mod_flow.reset_mock()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_b48832e9","line":53,"updated":"2016-10-05 09:05:10.000000000","message":"Same here re: assert -\u003e self.assertEqual","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"27e90c956bdb5e7a97c21c5ec833c274fb6c622d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        router_with_route.lrouter[\u0027routes\u0027] \u003d [route]"},{"line_number":51,"context_line":"        self.controller.logical_port_created(test_app_base.fake_local_port1)"},{"line_number":52,"context_line":"        self.controller.router_updated(router_with_route)"},{"line_number":53,"context_line":"        assert self.mock_mod_flow.call_count \u003d\u003d 2"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # delete route"},{"line_number":56,"context_line":"        self.mock_mod_flow.reset_mock()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_a99be164","line":53,"in_reply_to":"1a95cdbc_b48832e9","updated":"2016-10-08 09:03:45.000000000","message":"Done","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b04e1706a4478243d54a52d8b61aa965e0777363","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.mock_mod_flow.reset_mock()"},{"line_number":57,"context_line":"        self.router.lrouter[\u0027routes\u0027] \u003d []"},{"line_number":58,"context_line":"        self.controller.router_updated(self.router)"},{"line_number":59,"context_line":"        assert self.mock_mod_flow.call_count \u003d\u003d 1"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_f46aba19","line":59,"updated":"2016-10-05 09:05:10.000000000","message":"and here.","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"27e90c956bdb5e7a97c21c5ec833c274fb6c622d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.mock_mod_flow.reset_mock()"},{"line_number":57,"context_line":"        self.router.lrouter[\u0027routes\u0027] \u003d []"},{"line_number":58,"context_line":"        self.controller.router_updated(self.router)"},{"line_number":59,"context_line":"        assert self.mock_mod_flow.call_count \u003d\u003d 1"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_c9a66dad","line":59,"in_reply_to":"1a95cdbc_f46aba19","updated":"2016-10-08 09:03:45.000000000","message":"Done","commit_id":"9b027cbeec443bc8f3be9db64fb12c7e00a9a076"}]}
