)]}'
{"dragonflow/controller/sg_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"7a78864f467695093f1cdd81f99949722ce7ac28","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        new_cidr_list \u003d new_cidr_set.iter_cidrs()"},{"line_number":88,"context_line":"        old_cidr_list \u003d cidr_set.iter_cidrs()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        added_cidr \u003d [item for item in new_cidr_list"},{"line_number":91,"context_line":"                      if item not in old_cidr_list]"},{"line_number":92,"context_line":"        removed_cidr \u003d [item for item in old_cidr_list"},{"line_number":93,"context_line":"                        if item not in new_cidr_list]"},{"line_number":94,"context_line":"        return new_cidr_set, added_cidr, removed_cidr"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_a547c575","line":93,"range":{"start_line":90,"start_character":0,"end_line":93,"end_character":53},"updated":"2016-10-13 12:54:38.000000000","message":"Why not get intersection of set here?\n\nadded_cidr \u003d set(new_cidr_list) - set(old_cidr_list)\n\nremoved_cidr \u003d set(old_cidr_list) - set(new_cidr_list)","commit_id":"ee96f8b02d0280c085e8e29a6c2570f0917bc2af"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"cfea77003bc67d387a5cea2701501dca7575f05a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        new_cidr_list \u003d new_cidr_set.iter_cidrs()"},{"line_number":88,"context_line":"        old_cidr_list \u003d cidr_set.iter_cidrs()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        added_cidr \u003d [item for item in new_cidr_list"},{"line_number":91,"context_line":"                      if item not in old_cidr_list]"},{"line_number":92,"context_line":"        removed_cidr \u003d [item for item in old_cidr_list"},{"line_number":93,"context_line":"                        if item not in new_cidr_list]"},{"line_number":94,"context_line":"        return new_cidr_set, added_cidr, removed_cidr"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_fb3240f1","line":93,"range":{"start_line":90,"start_character":0,"end_line":93,"end_character":53},"in_reply_to":"fa6399be_a547c575","updated":"2016-10-13 13:20:45.000000000","message":"ok, that is a good idea","commit_id":"ee96f8b02d0280c085e8e29a6c2570f0917bc2af"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d73f3ac19f3f834352df57706d434a4557d7f8e7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            netaddr.IPSet"},{"line_number":83,"context_line":"        )"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @staticmethod"},{"line_number":86,"context_line":"    def _get_cidr_difference(cidr_set, new_cidr_set):"},{"line_number":87,"context_line":"        new_cidr_list \u003d new_cidr_set.iter_cidrs()"},{"line_number":88,"context_line":"        old_cidr_list \u003d cidr_set.iter_cidrs()"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_6af44e5a","line":85,"range":{"start_line":85,"start_character":4,"end_line":85,"end_character":17},"updated":"2016-10-15 02:23:25.000000000","message":"I prefer to make a new Util class and other apps can reuse it in the future.","commit_id":"191da3152f699137c936769546b923e6d0648eb0"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"1b2ea1aca95c93f01b6f7577755e4f4646bd5f8e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            netaddr.IPSet"},{"line_number":83,"context_line":"        )"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @staticmethod"},{"line_number":86,"context_line":"    def _get_cidr_difference(cidr_set, new_cidr_set):"},{"line_number":87,"context_line":"        new_cidr_list \u003d new_cidr_set.iter_cidrs()"},{"line_number":88,"context_line":"        old_cidr_list \u003d cidr_set.iter_cidrs()"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_dceef320","line":85,"range":{"start_line":85,"start_character":4,"end_line":85,"end_character":17},"in_reply_to":"fa6399be_6af44e5a","updated":"2016-10-17 08:01:37.000000000","message":"yes, that will be better, but I don\u0027t think that should be done in this patch because this method was static before and to move it to another class is not concerned about the bug.","commit_id":"191da3152f699137c936769546b923e6d0648eb0"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d73f3ac19f3f834352df57706d434a4557d7f8e7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"           address - IPAddress or string"},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        new_cidr_set \u003d cidr_set - netaddr.IPSet((address,))"},{"line_number":100,"context_line":"        added_cidr, removed_cidr \u003d SGApp._get_cidr_difference(cidr_set,"},{"line_number":101,"context_line":"                                                              new_cidr_set)"},{"line_number":102,"context_line":"        return new_cidr_set, added_cidr, removed_cidr"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @staticmethod"},{"line_number":105,"context_line":"    def _add_one_address(cidr_set, address):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_0ae592a6","line":102,"range":{"start_line":100,"start_character":0,"end_line":102,"end_character":53},"updated":"2016-10-15 02:23:25.000000000","message":"I don\u0027t think it belongs to *_remove_one_address*","commit_id":"191da3152f699137c936769546b923e6d0648eb0"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"1b2ea1aca95c93f01b6f7577755e4f4646bd5f8e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"           address - IPAddress or string"},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        new_cidr_set \u003d cidr_set - netaddr.IPSet((address,))"},{"line_number":100,"context_line":"        added_cidr, removed_cidr \u003d SGApp._get_cidr_difference(cidr_set,"},{"line_number":101,"context_line":"                                                              new_cidr_set)"},{"line_number":102,"context_line":"        return new_cidr_set, added_cidr, removed_cidr"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @staticmethod"},{"line_number":105,"context_line":"    def _add_one_address(cidr_set, address):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_3ce0cf28","line":102,"range":{"start_line":100,"start_character":0,"end_line":102,"end_character":53},"in_reply_to":"fa6399be_0ae592a6","updated":"2016-10-17 08:01:37.000000000","message":"ok, I already change the name of this method.","commit_id":"191da3152f699137c936769546b923e6d0648eb0"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"d73f3ac19f3f834352df57706d434a4557d7f8e7","unresolved":false,"context_lines":[{"line_number":107,"context_line":"           address - IPAddress or string"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        new_cidr_set \u003d cidr_set | (netaddr.IPAddress(address),)"},{"line_number":110,"context_line":"        added_cidr, removed_cidr \u003d SGApp._get_cidr_difference(cidr_set,"},{"line_number":111,"context_line":"                                                              new_cidr_set)"},{"line_number":112,"context_line":"        return new_cidr_set, added_cidr, removed_cidr"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @staticmethod"},{"line_number":115,"context_line":"    def _get_network_and_mask(cidr):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_aa5ca67d","line":112,"range":{"start_line":110,"start_character":0,"end_line":112,"end_character":53},"updated":"2016-10-15 02:23:25.000000000","message":"It is wired to do this in *_add_one_address*, does it have anything to do with _add_one_address","commit_id":"191da3152f699137c936769546b923e6d0648eb0"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"1b2ea1aca95c93f01b6f7577755e4f4646bd5f8e","unresolved":false,"context_lines":[{"line_number":107,"context_line":"           address - IPAddress or string"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        new_cidr_set \u003d cidr_set | (netaddr.IPAddress(address),)"},{"line_number":110,"context_line":"        added_cidr, removed_cidr \u003d SGApp._get_cidr_difference(cidr_set,"},{"line_number":111,"context_line":"                                                              new_cidr_set)"},{"line_number":112,"context_line":"        return new_cidr_set, added_cidr, removed_cidr"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @staticmethod"},{"line_number":115,"context_line":"    def _get_network_and_mask(cidr):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_bc605fa6","line":112,"range":{"start_line":110,"start_character":0,"end_line":112,"end_character":53},"in_reply_to":"fa6399be_aa5ca67d","updated":"2016-10-17 08:01:37.000000000","message":"\"add one address\" are really be done in above code line. And like \"_remove_one_address\", I changed the name of this method to make it more readable.","commit_id":"191da3152f699137c936769546b923e6d0648eb0"}],"dragonflow/tests/unit/test_app_base.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                  \u0027ofport\u0027: 2,"},{"line_number":150,"context_line":"                                  \u0027network_type\u0027: \u0027vxlan\u0027,"},{"line_number":151,"context_line":"                                  \u0027local_network_id\u0027: 1}"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"fake_remote_port1 \u003d api_nb.LogicalPort(\"{}\")"},{"line_number":154,"context_line":"fake_remote_port1.lport \u003d {"},{"line_number":155,"context_line":"    \u0027subnets\u0027: [\u0027fake_subnet1\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_4257ff01","line":152,"updated":"2016-10-19 04:08:58.000000000","message":"global variable prefers 2 empty lines.","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                  \u0027ofport\u0027: 2,"},{"line_number":150,"context_line":"                                  \u0027network_type\u0027: \u0027vxlan\u0027,"},{"line_number":151,"context_line":"                                  \u0027local_network_id\u0027: 1}"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"fake_remote_port1 \u003d api_nb.LogicalPort(\"{}\")"},{"line_number":154,"context_line":"fake_remote_port1.lport \u003d {"},{"line_number":155,"context_line":"    \u0027subnets\u0027: [\u0027fake_subnet1\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_93e08898","line":152,"in_reply_to":"fa6399be_4257ff01","updated":"2016-10-20 03:11:18.000000000","message":"Done","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u0027tunnel_key\u0027: 5,"},{"line_number":168,"context_line":"    \u0027port_security_enabled\u0027: True,"},{"line_number":169,"context_line":"    \u0027binding_vnic_type\u0027: \u0027normal\u0027,"},{"line_number":170,"context_line":"    \u0027id\u0027: \u0027fake_port2\u0027,"},{"line_number":171,"context_line":"    \u0027security_groups\u0027: [\u0027fake_security_group_id1\u0027],"},{"line_number":172,"context_line":"    \u0027device_id\u0027: \u0027fake_device_id\u0027}"},{"line_number":173,"context_line":"fake_remote_port1.external_dict \u003d {\u0027is_local\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_a277fb39","line":170,"range":{"start_line":170,"start_character":11,"end_line":170,"end_character":21},"updated":"2016-10-19 04:08:58.000000000","message":"it would be better to name it fake_remote_port_1","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u0027tunnel_key\u0027: 5,"},{"line_number":168,"context_line":"    \u0027port_security_enabled\u0027: True,"},{"line_number":169,"context_line":"    \u0027binding_vnic_type\u0027: \u0027normal\u0027,"},{"line_number":170,"context_line":"    \u0027id\u0027: \u0027fake_port2\u0027,"},{"line_number":171,"context_line":"    \u0027security_groups\u0027: [\u0027fake_security_group_id1\u0027],"},{"line_number":172,"context_line":"    \u0027device_id\u0027: \u0027fake_device_id\u0027}"},{"line_number":173,"context_line":"fake_remote_port1.external_dict \u003d {\u0027is_local\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_b3c66c14","line":170,"range":{"start_line":170,"start_character":11,"end_line":170,"end_character":21},"in_reply_to":"fa6399be_a277fb39","updated":"2016-10-20 03:11:18.000000000","message":"ok, I changed it to fake_remote_port","commit_id":"a57302d011f89116cf410b35923db518879cb95e"}],"dragonflow/tests/unit/test_sg_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):\r"},{"line_number":26,"context_line":"        super(TestSGApp, self).setUp()\r"},{"line_number":27,"context_line":"        self.app \u003d self.open_flow_app.dispatcher.apps[0]\r"},{"line_number":28,"context_line":"        self.mock_mod_flow \u003d mock.Mock(name\u003d\u0027mod_flow\u0027)\r"},{"line_number":29,"context_line":"        self.app.mod_flow \u003d self.mock_mod_flow\r"},{"line_number":30,"context_line":"        self.security_group \u003d test_app_base.fake_security_group\r"},{"line_number":31,"context_line":"        self.fake_local_lport \u003d test_app_base.fake_local_port1\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_020507c1","line":28,"range":{"start_line":28,"start_character":8,"end_line":28,"end_character":55},"updated":"2016-10-19 04:08:58.000000000","message":"This mock has been done at test_app_base. maybe you can just use self.app.mod_flow","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):\r"},{"line_number":26,"context_line":"        super(TestSGApp, self).setUp()\r"},{"line_number":27,"context_line":"        self.app \u003d self.open_flow_app.dispatcher.apps[0]\r"},{"line_number":28,"context_line":"        self.mock_mod_flow \u003d mock.Mock(name\u003d\u0027mod_flow\u0027)\r"},{"line_number":29,"context_line":"        self.app.mod_flow \u003d self.mock_mod_flow\r"},{"line_number":30,"context_line":"        self.security_group \u003d test_app_base.fake_security_group\r"},{"line_number":31,"context_line":"        self.fake_local_lport \u003d test_app_base.fake_local_port1\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_f3e704aa","line":28,"range":{"start_line":28,"start_character":8,"end_line":28,"end_character":55},"in_reply_to":"fa6399be_020507c1","updated":"2016-10-20 03:11:18.000000000","message":"Done","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.mock_mod_flow.assert_not_called()\r"},{"line_number":101,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":102,"context_line":"\r"},{"line_number":103,"context_line":"        # add remote port before adding any local port\r"},{"line_number":104,"context_line":"        self.controller.logical_port_deleted(\u0027fake_port2\u0027)\r"},{"line_number":105,"context_line":"        self.mock_mod_flow.assert_not_called()\r"},{"line_number":106,"context_line":"        self.mock_mod_flow.reset_mock()\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_222f6b3f","line":103,"range":{"start_line":103,"start_character":10,"end_line":103,"end_character":13},"updated":"2016-10-19 04:08:58.000000000","message":"delete?","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.mock_mod_flow.assert_not_called()\r"},{"line_number":101,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":102,"context_line":"\r"},{"line_number":103,"context_line":"        # add remote port before adding any local port\r"},{"line_number":104,"context_line":"        self.controller.logical_port_deleted(\u0027fake_port2\u0027)\r"},{"line_number":105,"context_line":"        self.mock_mod_flow.assert_not_called()\r"},{"line_number":106,"context_line":"        self.mock_mod_flow.reset_mock()\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_13eb9879","line":103,"range":{"start_line":103,"start_character":10,"end_line":103,"end_character":13},"in_reply_to":"fa6399be_222f6b3f","updated":"2016-10-20 03:11:18.000000000","message":"Done","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # delete fake security group\r"},{"line_number":180,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"},{"line_number":181,"context_line":"        self.mock_mod_flow.assert_not_called()\r"},{"line_number":182,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":183,"context_line":"\r"},{"line_number":184,"context_line":"    def test_update_lport(self):\r"},{"line_number":185,"context_line":"        # create fake security group\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_c2c4ef41","line":182,"range":{"start_line":182,"start_character":0,"end_line":182,"end_character":39},"updated":"2016-10-19 04:08:58.000000000","message":"This is not necessary","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # delete fake security group\r"},{"line_number":180,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"},{"line_number":181,"context_line":"        self.mock_mod_flow.assert_not_called()\r"},{"line_number":182,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":183,"context_line":"\r"},{"line_number":184,"context_line":"    def test_update_lport(self):\r"},{"line_number":185,"context_line":"        # create fake security group\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_1370f8db","line":182,"range":{"start_line":182,"start_character":0,"end_line":182,"end_character":39},"in_reply_to":"fa6399be_c2c4ef41","updated":"2016-10-20 03:11:18.000000000","message":"Done","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        # 5. egress rules deleted by cookie in egress secgroup table\r"},{"line_number":216,"context_line":"        # 6. the permit flow in ingress secgroup table\r"},{"line_number":217,"context_line":"        # 7. the permit flow in egress secgroup table\r"},{"line_number":218,"context_line":"        self.assertEqual(13, self.mock_mod_flow.call_count)\r"},{"line_number":219,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":220,"context_line":"\r"},{"line_number":221,"context_line":"        # update the association of the lport to no security group\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_e272d310","line":218,"range":{"start_line":218,"start_character":0,"end_line":218,"end_character":59},"updated":"2016-10-19 04:08:58.000000000","message":"This assert contains too many information. Can you divided them into (at least) 2 asserts, one is for add flow, the other for remove flows.","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        # 5. egress rules deleted by cookie in egress secgroup table\r"},{"line_number":216,"context_line":"        # 6. the permit flow in ingress secgroup table\r"},{"line_number":217,"context_line":"        # 7. the permit flow in egress secgroup table\r"},{"line_number":218,"context_line":"        self.assertEqual(13, self.mock_mod_flow.call_count)\r"},{"line_number":219,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":220,"context_line":"\r"},{"line_number":221,"context_line":"        # update the association of the lport to no security group\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_26a84ddb","line":218,"range":{"start_line":218,"start_character":0,"end_line":218,"end_character":59},"in_reply_to":"fa6399be_e272d310","updated":"2016-10-20 03:11:18.000000000","message":"Done","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        # delete fake security group\r"},{"line_number":290,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id2\u0027)\r"},{"line_number":291,"context_line":"\r"},{"line_number":292,"context_line":"    def test_aggregating_flows_for_addresses(self):\r"},{"line_number":293,"context_line":"        # create fake security group\r"},{"line_number":294,"context_line":"        self.controller.security_group_updated(self.security_group)\r"},{"line_number":295,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_429fff02","line":292,"range":{"start_line":292,"start_character":8,"end_line":292,"end_character":44},"updated":"2016-10-19 04:08:58.000000000","message":"Actually, you have verified the sg_app behaviors above, maybe you can just test the method _get_cidr_difference, _get_cidr_changes_after_removing_one_address, _get_cidr_changes_after_adding_one_address here. Pass in some possible value, and verify the result is as expected.","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        # delete fake security group\r"},{"line_number":290,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id2\u0027)\r"},{"line_number":291,"context_line":"\r"},{"line_number":292,"context_line":"    def test_aggregating_flows_for_addresses(self):\r"},{"line_number":293,"context_line":"        # create fake security group\r"},{"line_number":294,"context_line":"        self.controller.security_group_updated(self.security_group)\r"},{"line_number":295,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_108383cd","line":292,"range":{"start_line":292,"start_character":8,"end_line":292,"end_character":44},"in_reply_to":"fa6399be_429fff02","updated":"2016-10-20 03:11:18.000000000","message":"OK","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        # 5. a ingress rule flow(nw_src\u003d10.0.0.6/31) in ingress secgroup table\r"},{"line_number":311,"context_line":"        # remove flows:\r"},{"line_number":312,"context_line":"        # 1. a ingress rule flow(nw_src\u003d10.0.0.6/32) in ingress secgroup table\r"},{"line_number":313,"context_line":"        self.assertEqual(6, self.mock_mod_flow.call_count)\r"},{"line_number":314,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":315,"context_line":"\r"},{"line_number":316,"context_line":"        # remove local ports\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_e2ed73b8","line":313,"range":{"start_line":313,"start_character":0,"end_line":313,"end_character":58},"updated":"2016-10-19 04:08:58.000000000","message":"I think it would be better to assert the argument(10.0.0.6/31) of mock calls.","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        # 5. a ingress rule flow(nw_src\u003d10.0.0.6/31) in ingress secgroup table\r"},{"line_number":311,"context_line":"        # remove flows:\r"},{"line_number":312,"context_line":"        # 1. a ingress rule flow(nw_src\u003d10.0.0.6/32) in ingress secgroup table\r"},{"line_number":313,"context_line":"        self.assertEqual(6, self.mock_mod_flow.call_count)\r"},{"line_number":314,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":315,"context_line":"\r"},{"line_number":316,"context_line":"        # remove local ports\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_8215654a","line":313,"range":{"start_line":313,"start_character":0,"end_line":313,"end_character":58},"in_reply_to":"fa6399be_e2ed73b8","updated":"2016-10-20 03:11:18.000000000","message":"This test case has been changed to test static methods alone in latest patch set.","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        # delete fake security group\r"},{"line_number":322,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"},{"line_number":323,"context_line":"\r"},{"line_number":324,"context_line":"    def test_aggregating_flows_for_port_range(self):\r"},{"line_number":325,"context_line":"        # create another fake security group\r"},{"line_number":326,"context_line":"        security_group \u003d self._get_another_security_group()\r"},{"line_number":327,"context_line":"        security_group.secgroup[\u0027rules\u0027] \u003d [\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_c2930ff9","line":324,"range":{"start_line":324,"start_character":0,"end_line":324,"end_character":45},"updated":"2016-10-19 04:08:58.000000000","message":"The same comment at line 292","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        # delete fake security group\r"},{"line_number":322,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"},{"line_number":323,"context_line":"\r"},{"line_number":324,"context_line":"    def test_aggregating_flows_for_port_range(self):\r"},{"line_number":325,"context_line":"        # create another fake security group\r"},{"line_number":326,"context_line":"        security_group \u003d self._get_another_security_group()\r"},{"line_number":327,"context_line":"        security_group.secgroup[\u0027rules\u0027] \u003d [\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_e206211f","line":324,"range":{"start_line":324,"start_character":0,"end_line":324,"end_character":45},"in_reply_to":"fa6399be_c2930ff9","updated":"2016-10-20 03:11:18.000000000","message":"This test case has been changed to test static methods alone in latest patch set.","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3cc379d59d18310d62d578c6a932274076bdd7ab","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        # 6. the permit flow in ingress secgroup table\r"},{"line_number":362,"context_line":"        # 7. a egress rule flow in egress secgroup table\r"},{"line_number":363,"context_line":"        # 8. the permit flow in egress secgroup table\r"},{"line_number":364,"context_line":"        self.assertEqual(8, self.mock_mod_flow.call_count)\r"},{"line_number":365,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":366,"context_line":"\r"},{"line_number":367,"context_line":"        # remove local ports\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_e24493b8","line":364,"updated":"2016-10-19 04:08:58.000000000","message":"I think it would be better to assert port range in the arguments of the mock calls.","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"f146b2b3bac2585c6fbc3de53256f0ab5d060c0a","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        # 6. the permit flow in ingress secgroup table\r"},{"line_number":362,"context_line":"        # 7. a egress rule flow in egress secgroup table\r"},{"line_number":363,"context_line":"        # 8. the permit flow in egress secgroup table\r"},{"line_number":364,"context_line":"        self.assertEqual(8, self.mock_mod_flow.call_count)\r"},{"line_number":365,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":366,"context_line":"\r"},{"line_number":367,"context_line":"        # remove local ports\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_1dfffa01","line":364,"in_reply_to":"fa6399be_e24493b8","updated":"2016-10-20 03:11:18.000000000","message":"Please see the above reply.","commit_id":"a57302d011f89116cf410b35923db518879cb95e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cdbeccc36b04774ad81cc146cf46920c62124e44","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":173,"context_line":"\r"},{"line_number":174,"context_line":"        # remove remote port after adding a local port\r"},{"line_number":175,"context_line":"        self.controller.logical_port_deleted(\u0027fake_remote_port\u0027)\r"},{"line_number":176,"context_line":"        # remove flows:\r"},{"line_number":177,"context_line":"        # 1. a ingress rule flow (caused by IP addresses represent\r"},{"line_number":178,"context_line":"        # remote_group_id changed) in ingress secgroup table\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_de31f5ee","line":175,"range":{"start_line":175,"start_character":45,"end_line":175,"end_character":63},"updated":"2016-10-20 08:07:41.000000000","message":"It could be self.fake_remote_lport.id to avoid hardcode string.","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c96a82ab64398b6a0a97e852506b6944e552e0f1","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":173,"context_line":"\r"},{"line_number":174,"context_line":"        # remove remote port after adding a local port\r"},{"line_number":175,"context_line":"        self.controller.logical_port_deleted(\u0027fake_remote_port\u0027)\r"},{"line_number":176,"context_line":"        # remove flows:\r"},{"line_number":177,"context_line":"        # 1. a ingress rule flow (caused by IP addresses represent\r"},{"line_number":178,"context_line":"        # remote_group_id changed) in ingress secgroup table\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_5ee5e5a1","line":175,"range":{"start_line":175,"start_character":45,"end_line":175,"end_character":63},"in_reply_to":"fa6399be_de31f5ee","updated":"2016-10-20 08:49:55.000000000","message":"Done","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cdbeccc36b04774ad81cc146cf46920c62124e44","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":262,"context_line":"\r"},{"line_number":263,"context_line":"        # remove local port\r"},{"line_number":264,"context_line":"        self.controller.logical_port_deleted(\u0027fake_port2\u0027)\r"},{"line_number":265,"context_line":"\r"},{"line_number":266,"context_line":"        # delete fake security group\r"},{"line_number":267,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_5e6b25b9","line":264,"range":{"start_line":264,"start_character":46,"end_line":264,"end_character":56},"updated":"2016-10-20 08:07:41.000000000","message":"This could be fake_local_lport.id","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c96a82ab64398b6a0a97e852506b6944e552e0f1","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        self.mock_mod_flow.reset_mock()\r"},{"line_number":262,"context_line":"\r"},{"line_number":263,"context_line":"        # remove local port\r"},{"line_number":264,"context_line":"        self.controller.logical_port_deleted(\u0027fake_port2\u0027)\r"},{"line_number":265,"context_line":"\r"},{"line_number":266,"context_line":"        # delete fake security group\r"},{"line_number":267,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_fe7b19bc","line":264,"range":{"start_line":264,"start_character":46,"end_line":264,"end_character":56},"in_reply_to":"fa6399be_5e6b25b9","updated":"2016-10-20 08:49:55.000000000","message":"Done","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cdbeccc36b04774ad81cc146cf46920c62124e44","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.controller.logical_port_deleted(\u0027fake_port2\u0027)\r"},{"line_number":265,"context_line":"\r"},{"line_number":266,"context_line":"        # delete fake security group\r"},{"line_number":267,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"},{"line_number":268,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id2\u0027)\r"},{"line_number":269,"context_line":"\r"},{"line_number":270,"context_line":"    def test_add_del_security_group_rule(self):\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_7e70e9a4","line":267,"range":{"start_line":267,"start_character":48,"end_line":267,"end_character":71},"updated":"2016-10-20 08:07:41.000000000","message":"ditto","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c96a82ab64398b6a0a97e852506b6944e552e0f1","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.controller.logical_port_deleted(\u0027fake_port2\u0027)\r"},{"line_number":265,"context_line":"\r"},{"line_number":266,"context_line":"        # delete fake security group\r"},{"line_number":267,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"},{"line_number":268,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id2\u0027)\r"},{"line_number":269,"context_line":"\r"},{"line_number":270,"context_line":"    def test_add_del_security_group_rule(self):\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_5e416562","line":267,"range":{"start_line":267,"start_character":48,"end_line":267,"end_character":71},"in_reply_to":"fa6399be_7e70e9a4","updated":"2016-10-20 08:49:55.000000000","message":"Done","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cdbeccc36b04774ad81cc146cf46920c62124e44","unresolved":false,"context_lines":[{"line_number":265,"context_line":"\r"},{"line_number":266,"context_line":"        # delete fake security group\r"},{"line_number":267,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"},{"line_number":268,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id2\u0027)\r"},{"line_number":269,"context_line":"\r"},{"line_number":270,"context_line":"    def test_add_del_security_group_rule(self):\r"},{"line_number":271,"context_line":"        # create another fake security group\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_9e693dc1","line":268,"range":{"start_line":268,"start_character":48,"end_line":268,"end_character":71},"updated":"2016-10-20 08:07:41.000000000","message":"ditto","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c96a82ab64398b6a0a97e852506b6944e552e0f1","unresolved":false,"context_lines":[{"line_number":265,"context_line":"\r"},{"line_number":266,"context_line":"        # delete fake security group\r"},{"line_number":267,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id1\u0027)\r"},{"line_number":268,"context_line":"        self.controller.security_group_deleted(\u0027fake_security_group_id2\u0027)\r"},{"line_number":269,"context_line":"\r"},{"line_number":270,"context_line":"    def test_add_del_security_group_rule(self):\r"},{"line_number":271,"context_line":"        # create another fake security group\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_9e5f7d40","line":268,"range":{"start_line":268,"start_character":48,"end_line":268,"end_character":71},"in_reply_to":"fa6399be_9e693dc1","updated":"2016-10-20 08:49:55.000000000","message":"Done","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cdbeccc36b04774ad81cc146cf46920c62124e44","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            self.app._get_cidr_changes_after_removing_one_address(\r"},{"line_number":338,"context_line":"                old_cidr_set, \u0027192.168.10.7\u0027)\r"},{"line_number":339,"context_line":"        expected_new_cidr_set \u003d netaddr.IPSet([\u0027192.168.10.6/32\u0027])\r"},{"line_number":340,"context_line":"        added_cidr \u003d \u0027192.168.10.6/32\u0027\r"},{"line_number":341,"context_line":"        deleted_cidr \u003d \u0027192.168.10.6/31\u0027\r"},{"line_number":342,"context_line":"        self.assertEqual(new_cidr_set, expected_new_cidr_set)\r"},{"line_number":343,"context_line":"        self.assertEqual(added_cidr, added_cidr)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_5ea245fd","line":340,"range":{"start_line":340,"start_character":8,"end_line":340,"end_character":18},"updated":"2016-10-20 08:07:41.000000000","message":"I think you mean expected_added_cidr here, right?","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c96a82ab64398b6a0a97e852506b6944e552e0f1","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            self.app._get_cidr_changes_after_removing_one_address(\r"},{"line_number":338,"context_line":"                old_cidr_set, \u0027192.168.10.7\u0027)\r"},{"line_number":339,"context_line":"        expected_new_cidr_set \u003d netaddr.IPSet([\u0027192.168.10.6/32\u0027])\r"},{"line_number":340,"context_line":"        added_cidr \u003d \u0027192.168.10.6/32\u0027\r"},{"line_number":341,"context_line":"        deleted_cidr \u003d \u0027192.168.10.6/31\u0027\r"},{"line_number":342,"context_line":"        self.assertEqual(new_cidr_set, expected_new_cidr_set)\r"},{"line_number":343,"context_line":"        self.assertEqual(added_cidr, added_cidr)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_be5c414c","line":340,"range":{"start_line":340,"start_character":8,"end_line":340,"end_character":18},"in_reply_to":"fa6399be_5ea245fd","updated":"2016-10-20 08:49:55.000000000","message":"Done","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cdbeccc36b04774ad81cc146cf46920c62124e44","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                old_cidr_set, \u0027192.168.10.7\u0027)\r"},{"line_number":339,"context_line":"        expected_new_cidr_set \u003d netaddr.IPSet([\u0027192.168.10.6/32\u0027])\r"},{"line_number":340,"context_line":"        added_cidr \u003d \u0027192.168.10.6/32\u0027\r"},{"line_number":341,"context_line":"        deleted_cidr \u003d \u0027192.168.10.6/31\u0027\r"},{"line_number":342,"context_line":"        self.assertEqual(new_cidr_set, expected_new_cidr_set)\r"},{"line_number":343,"context_line":"        self.assertEqual(added_cidr, added_cidr)\r"},{"line_number":344,"context_line":"        self.assertEqual(deleted_cidr, deleted_cidr)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_9eb05d45","line":341,"range":{"start_line":341,"start_character":8,"end_line":341,"end_character":20},"updated":"2016-10-20 08:07:41.000000000","message":"ditto","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c96a82ab64398b6a0a97e852506b6944e552e0f1","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                old_cidr_set, \u0027192.168.10.7\u0027)\r"},{"line_number":339,"context_line":"        expected_new_cidr_set \u003d netaddr.IPSet([\u0027192.168.10.6/32\u0027])\r"},{"line_number":340,"context_line":"        added_cidr \u003d \u0027192.168.10.6/32\u0027\r"},{"line_number":341,"context_line":"        deleted_cidr \u003d \u0027192.168.10.6/31\u0027\r"},{"line_number":342,"context_line":"        self.assertEqual(new_cidr_set, expected_new_cidr_set)\r"},{"line_number":343,"context_line":"        self.assertEqual(added_cidr, added_cidr)\r"},{"line_number":344,"context_line":"        self.assertEqual(deleted_cidr, deleted_cidr)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_fe523934","line":341,"range":{"start_line":341,"start_character":8,"end_line":341,"end_character":20},"in_reply_to":"fa6399be_9eb05d45","updated":"2016-10-20 08:49:55.000000000","message":"Done","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cdbeccc36b04774ad81cc146cf46920c62124e44","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        added_cidr \u003d \u0027192.168.10.6/32\u0027\r"},{"line_number":341,"context_line":"        deleted_cidr \u003d \u0027192.168.10.6/31\u0027\r"},{"line_number":342,"context_line":"        self.assertEqual(new_cidr_set, expected_new_cidr_set)\r"},{"line_number":343,"context_line":"        self.assertEqual(added_cidr, added_cidr)\r"},{"line_number":344,"context_line":"        self.assertEqual(deleted_cidr, deleted_cidr)\r"},{"line_number":345,"context_line":"\r"},{"line_number":346,"context_line":"    def test_aggregating_flows_for_port_range(self):\r"},{"line_number":347,"context_line":"        # compute port match list\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_deb6553d","line":344,"range":{"start_line":343,"start_character":0,"end_line":344,"end_character":52},"updated":"2016-10-20 08:07:41.000000000","message":"ditto","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c96a82ab64398b6a0a97e852506b6944e552e0f1","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        added_cidr \u003d \u0027192.168.10.6/32\u0027\r"},{"line_number":341,"context_line":"        deleted_cidr \u003d \u0027192.168.10.6/31\u0027\r"},{"line_number":342,"context_line":"        self.assertEqual(new_cidr_set, expected_new_cidr_set)\r"},{"line_number":343,"context_line":"        self.assertEqual(added_cidr, added_cidr)\r"},{"line_number":344,"context_line":"        self.assertEqual(deleted_cidr, deleted_cidr)\r"},{"line_number":345,"context_line":"\r"},{"line_number":346,"context_line":"    def test_aggregating_flows_for_port_range(self):\r"},{"line_number":347,"context_line":"        # compute port match list\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_1e328d10","line":344,"range":{"start_line":343,"start_character":0,"end_line":344,"end_character":52},"in_reply_to":"fa6399be_deb6553d","updated":"2016-10-20 08:49:55.000000000","message":"Done","commit_id":"71e04098f73e21735e5c84d355e8f57dc8722bba"}]}
