)]}'
{"dragonflow/tests/unit/test_controller.py":[{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"484b6799c601a4b691b8d40a26362177e0317b3b","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from dragonflow.controller import df_local_controller"},{"line_number":20,"context_line":"from dragonflow.controller import topology"},{"line_number":21,"context_line":"import dragonflow.db.db_models as models"},{"line_number":22,"context_line":"from dragonflow.tests import base"},{"line_number":23,"context_line":"from dragonflow.tests.unit import test_app_base"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_a523b304","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":40},"updated":"2016-11-23 12:37:07.000000000","message":"consider uniform the code style","commit_id":"001a6fc7c761d72a89e669d73dbed140f633d419"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7f16b515b657f25abb5d0c40b4237396f4f8381a","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from dragonflow.controller import df_local_controller"},{"line_number":20,"context_line":"from dragonflow.controller import topology"},{"line_number":21,"context_line":"import dragonflow.db.db_models as models"},{"line_number":22,"context_line":"from dragonflow.tests import base"},{"line_number":23,"context_line":"from dragonflow.tests.unit import test_app_base"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_5c2b9582","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":40},"in_reply_to":"5a74a57a_a523b304","updated":"2016-11-23 14:10:57.000000000","message":"removing this file","commit_id":"001a6fc7c761d72a89e669d73dbed140f633d419"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"484b6799c601a4b691b8d40a26362177e0317b3b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    apps_list \u003d \"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        cfg.CONF.set_override(\u0027apps_list\u0027, self.apps_list, group\u003d\u0027df\u0027)"},{"line_number":31,"context_line":"        super(TestController, self).setUp()"},{"line_number":32,"context_line":"        mock.patch(\u0027ryu.base.app_manager.AppManager.get_instance\u0027).start()"},{"line_number":33,"context_line":"        self.controller \u003d df_local_controller.DfLocalController(\u0027fake_host\u0027)"},{"line_number":34,"context_line":"        self.nb_api \u003d self.controller.nb_api \u003d mock.MagicMock()"},{"line_number":35,"context_line":"        self.vswitch_api \u003d self.controller.vswitch_api \u003d mock.MagicMock()"},{"line_number":36,"context_line":"        self.controller.topology \u003d topology.Topology(self.controller, True)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Add basic network topology"},{"line_number":39,"context_line":"        self.controller.logical_switch_updated("},{"line_number":40,"context_line":"            test_app_base.fake_logic_switch1)"},{"line_number":41,"context_line":"        self.controller.logical_switch_updated("},{"line_number":42,"context_line":"            test_app_base.fake_external_switch1)"},{"line_number":43,"context_line":"        self.controller.router_updated(test_app_base.fake_logic_router1)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_floatingip_removedo_only_once(self):"},{"line_number":46,"context_line":"        value1 \u003d mock.Mock(name\u003d\u0027ovs_port\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_e5468bbe","line":43,"range":{"start_line":30,"start_character":8,"end_line":43,"end_character":72},"updated":"2016-11-23 12:37:07.000000000","message":"all the things done here have been done in test_app_base.DFAppTestBase","commit_id":"001a6fc7c761d72a89e669d73dbed140f633d419"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7f16b515b657f25abb5d0c40b4237396f4f8381a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    apps_list \u003d \"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        cfg.CONF.set_override(\u0027apps_list\u0027, self.apps_list, group\u003d\u0027df\u0027)"},{"line_number":31,"context_line":"        super(TestController, self).setUp()"},{"line_number":32,"context_line":"        mock.patch(\u0027ryu.base.app_manager.AppManager.get_instance\u0027).start()"},{"line_number":33,"context_line":"        self.controller \u003d df_local_controller.DfLocalController(\u0027fake_host\u0027)"},{"line_number":34,"context_line":"        self.nb_api \u003d self.controller.nb_api \u003d mock.MagicMock()"},{"line_number":35,"context_line":"        self.vswitch_api \u003d self.controller.vswitch_api \u003d mock.MagicMock()"},{"line_number":36,"context_line":"        self.controller.topology \u003d topology.Topology(self.controller, True)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Add basic network topology"},{"line_number":39,"context_line":"        self.controller.logical_switch_updated("},{"line_number":40,"context_line":"            test_app_base.fake_logic_switch1)"},{"line_number":41,"context_line":"        self.controller.logical_switch_updated("},{"line_number":42,"context_line":"            test_app_base.fake_external_switch1)"},{"line_number":43,"context_line":"        self.controller.router_updated(test_app_base.fake_logic_router1)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_floatingip_removedo_only_once(self):"},{"line_number":46,"context_line":"        value1 \u003d mock.Mock(name\u003d\u0027ovs_port\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_dc108551","line":43,"range":{"start_line":30,"start_character":8,"end_line":43,"end_character":72},"in_reply_to":"5a74a57a_e5468bbe","updated":"2016-11-23 14:10:57.000000000","message":"removing this file","commit_id":"001a6fc7c761d72a89e669d73dbed140f633d419"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"2f5ba21d154f9ecb8599601f646350efb7372f9f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from dragonflow.tests.unit import test_app_base"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TestController(base.BaseTestCase):"},{"line_number":27,"context_line":"    apps_list \u003d \"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        cfg.CONF.set_override(\u0027apps_list\u0027, self.apps_list, group\u003d\u0027df\u0027)"},{"line_number":31,"context_line":"        super(TestController, self).setUp()"},{"line_number":32,"context_line":"        mock.patch(\u0027ryu.base.app_manager.AppManager.get_instance\u0027).start()"},{"line_number":33,"context_line":"        self.controller \u003d df_local_controller.DfLocalController(\u0027fake_host\u0027)"},{"line_number":34,"context_line":"        self.nb_api \u003d self.controller.nb_api \u003d mock.MagicMock()"},{"line_number":35,"context_line":"        self.vswitch_api \u003d self.controller.vswitch_api \u003d mock.MagicMock()"},{"line_number":36,"context_line":"        self.controller.topology \u003d topology.Topology(self.controller, True)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Add basic network topology"},{"line_number":39,"context_line":"        self.controller.logical_switch_updated("},{"line_number":40,"context_line":"            test_app_base.fake_logic_switch1)"},{"line_number":41,"context_line":"        self.controller.logical_switch_updated("},{"line_number":42,"context_line":"            test_app_base.fake_external_switch1)"},{"line_number":43,"context_line":"        self.controller.router_updated(test_app_base.fake_logic_router1)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_floatingip_removedo_only_once(self):"},{"line_number":46,"context_line":"        value1 \u003d mock.Mock(name\u003d\u0027ovs_port\u0027)"},{"line_number":47,"context_line":"        value1.get_id.return_value \u003d \u0027ovs_port1\u0027"},{"line_number":48,"context_line":"        value1.get_ofport.return_value \u003d 1"},{"line_number":49,"context_line":"        value1.get_name.return_value \u003d \u0027\u0027"},{"line_number":50,"context_line":"        value1.get_admin_state.return_value \u003d \u0027True\u0027"},{"line_number":51,"context_line":"        value1.get_type.return_value \u003d \u0027vm\u0027"},{"line_number":52,"context_line":"        value1.get_iface_id.return_value \u003d \u0027fake_port1\u0027"},{"line_number":53,"context_line":"        value1.get_peer.return_value \u003d \u0027\u0027"},{"line_number":54,"context_line":"        value1.get_attached_mac.return_value \u003d \u0027\u0027"},{"line_number":55,"context_line":"        value1.get_remote_ip.return_value \u003d \u0027\u0027"},{"line_number":56,"context_line":"        value1.get_tunnel_type.return_value \u003d \u0027\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        ovs_port1 \u003d models.OvsPort(value1)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.controller.logical_port_created(test_app_base.fake_local_port1)"},{"line_number":61,"context_line":"        self.controller.topology.ovs_port_updated(ovs_port1)"},{"line_number":62,"context_line":"        self.controller.floatingip_updated(test_app_base.fake_floatingip1)"},{"line_number":63,"context_line":"        self.controller.floatingip_deleted("},{"line_number":64,"context_line":"            test_app_base.fake_floatingip1.get_id())"},{"line_number":65,"context_line":"        self.controller.logical_port_deleted("},{"line_number":66,"context_line":"            test_app_base.fake_local_port1.get_id())"},{"line_number":67,"context_line":"        with mock.patch.object("},{"line_number":68,"context_line":"            self.controller,"},{"line_number":69,"context_line":"            \u0027floatingip_deleted\u0027"},{"line_number":70,"context_line":"        ) as mock_func:"},{"line_number":71,"context_line":"            self.controller.topology.ovs_port_deleted(ovs_port1.get_id())"},{"line_number":72,"context_line":"            mock_func.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_2fbf82d1","line":72,"range":{"start_line":26,"start_character":0,"end_line":72,"end_character":41},"updated":"2016-11-23 11:51:05.000000000","message":"Although the code change is in df_local_controller, I think you can test it in test_dnat_app.py.\n\nThis is because,\n[1] the df_local_controller in test_dnat_app is an almost real controller, especially for the db_store. You can test the db_store is cleared there.\n\n[2] There are already a couple of patches to add UT for df_local_controller. I think it is better to avoid the conflict.","commit_id":"001a6fc7c761d72a89e669d73dbed140f633d419"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7f16b515b657f25abb5d0c40b4237396f4f8381a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from dragonflow.tests.unit import test_app_base"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TestController(base.BaseTestCase):"},{"line_number":27,"context_line":"    apps_list \u003d \"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        cfg.CONF.set_override(\u0027apps_list\u0027, self.apps_list, group\u003d\u0027df\u0027)"},{"line_number":31,"context_line":"        super(TestController, self).setUp()"},{"line_number":32,"context_line":"        mock.patch(\u0027ryu.base.app_manager.AppManager.get_instance\u0027).start()"},{"line_number":33,"context_line":"        self.controller \u003d df_local_controller.DfLocalController(\u0027fake_host\u0027)"},{"line_number":34,"context_line":"        self.nb_api \u003d self.controller.nb_api \u003d mock.MagicMock()"},{"line_number":35,"context_line":"        self.vswitch_api \u003d self.controller.vswitch_api \u003d mock.MagicMock()"},{"line_number":36,"context_line":"        self.controller.topology \u003d topology.Topology(self.controller, True)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Add basic network topology"},{"line_number":39,"context_line":"        self.controller.logical_switch_updated("},{"line_number":40,"context_line":"            test_app_base.fake_logic_switch1)"},{"line_number":41,"context_line":"        self.controller.logical_switch_updated("},{"line_number":42,"context_line":"            test_app_base.fake_external_switch1)"},{"line_number":43,"context_line":"        self.controller.router_updated(test_app_base.fake_logic_router1)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_floatingip_removedo_only_once(self):"},{"line_number":46,"context_line":"        value1 \u003d mock.Mock(name\u003d\u0027ovs_port\u0027)"},{"line_number":47,"context_line":"        value1.get_id.return_value \u003d \u0027ovs_port1\u0027"},{"line_number":48,"context_line":"        value1.get_ofport.return_value \u003d 1"},{"line_number":49,"context_line":"        value1.get_name.return_value \u003d \u0027\u0027"},{"line_number":50,"context_line":"        value1.get_admin_state.return_value \u003d \u0027True\u0027"},{"line_number":51,"context_line":"        value1.get_type.return_value \u003d \u0027vm\u0027"},{"line_number":52,"context_line":"        value1.get_iface_id.return_value \u003d \u0027fake_port1\u0027"},{"line_number":53,"context_line":"        value1.get_peer.return_value \u003d \u0027\u0027"},{"line_number":54,"context_line":"        value1.get_attached_mac.return_value \u003d \u0027\u0027"},{"line_number":55,"context_line":"        value1.get_remote_ip.return_value \u003d \u0027\u0027"},{"line_number":56,"context_line":"        value1.get_tunnel_type.return_value \u003d \u0027\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        ovs_port1 \u003d models.OvsPort(value1)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.controller.logical_port_created(test_app_base.fake_local_port1)"},{"line_number":61,"context_line":"        self.controller.topology.ovs_port_updated(ovs_port1)"},{"line_number":62,"context_line":"        self.controller.floatingip_updated(test_app_base.fake_floatingip1)"},{"line_number":63,"context_line":"        self.controller.floatingip_deleted("},{"line_number":64,"context_line":"            test_app_base.fake_floatingip1.get_id())"},{"line_number":65,"context_line":"        self.controller.logical_port_deleted("},{"line_number":66,"context_line":"            test_app_base.fake_local_port1.get_id())"},{"line_number":67,"context_line":"        with mock.patch.object("},{"line_number":68,"context_line":"            self.controller,"},{"line_number":69,"context_line":"            \u0027floatingip_deleted\u0027"},{"line_number":70,"context_line":"        ) as mock_func:"},{"line_number":71,"context_line":"            self.controller.topology.ovs_port_deleted(ovs_port1.get_id())"},{"line_number":72,"context_line":"            mock_func.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_3cffb902","line":72,"range":{"start_line":26,"start_character":0,"end_line":72,"end_character":41},"in_reply_to":"5a74a57a_2fbf82d1","updated":"2016-11-23 14:10:57.000000000","message":"I will move this test to test_dnat_app for now, but I the bug itself has little to do with dnat code. Once controller tests are merged I will try to move this test there","commit_id":"001a6fc7c761d72a89e669d73dbed140f633d419"}],"dragonflow/tests/unit/test_dnat_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"94ae774ec1a59db93a69cccc3aa5d1007b067ebf","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_floatingip_removed_only_once(self):"},{"line_number":112,"context_line":"        self.controller.topology \u003d topology.Topology(self.controller, True)"},{"line_number":113,"context_line":"        value1 \u003d mock.Mock(name\u003d\u0027ovs_port\u0027)"},{"line_number":114,"context_line":"        value1.get_id.return_value \u003d \u0027ovs_port1\u0027"},{"line_number":115,"context_line":"        value1.get_ofport.return_value \u003d 1"},{"line_number":116,"context_line":"        value1.get_name.return_value \u003d \u0027\u0027"},{"line_number":117,"context_line":"        value1.get_admin_state.return_value \u003d \u0027True\u0027"},{"line_number":118,"context_line":"        value1.get_type.return_value \u003d \u0027vm\u0027"},{"line_number":119,"context_line":"        value1.get_iface_id.return_value \u003d \u0027fake_port1\u0027"},{"line_number":120,"context_line":"        value1.get_peer.return_value \u003d \u0027\u0027"},{"line_number":121,"context_line":"        value1.get_attached_mac.return_value \u003d \u0027\u0027"},{"line_number":122,"context_line":"        value1.get_remote_ip.return_value \u003d \u0027\u0027"},{"line_number":123,"context_line":"        value1.get_tunnel_type.return_value \u003d \u0027\u0027"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        ovs_port1 \u003d db_models.OvsPort(value1)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.controller.logical_port_created(test_app_base.fake_local_port1)"},{"line_number":128,"context_line":"        self.controller.topology.ovs_port_updated(ovs_port1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_cd396843","line":125,"range":{"start_line":113,"start_character":0,"end_line":125,"end_character":45},"updated":"2016-11-24 23:53:11.000000000","message":"I would expect this been moved to test_app_base after [1]. \n\n[1] https://review.openstack.org/#/c/385349/9/dragonflow/tests/unit/test_app_base.py","commit_id":"511b86fa5d46b8a8b7db848da542f81182a1b8ea"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"f491a04a1756bdb8514b3877e3f32794d62e9b95","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_floatingip_removed_only_once(self):"},{"line_number":112,"context_line":"        self.controller.topology \u003d topology.Topology(self.controller, True)"},{"line_number":113,"context_line":"        value1 \u003d mock.Mock(name\u003d\u0027ovs_port\u0027)"},{"line_number":114,"context_line":"        value1.get_id.return_value \u003d \u0027ovs_port1\u0027"},{"line_number":115,"context_line":"        value1.get_ofport.return_value \u003d 1"},{"line_number":116,"context_line":"        value1.get_name.return_value \u003d \u0027\u0027"},{"line_number":117,"context_line":"        value1.get_admin_state.return_value \u003d \u0027True\u0027"},{"line_number":118,"context_line":"        value1.get_type.return_value \u003d \u0027vm\u0027"},{"line_number":119,"context_line":"        value1.get_iface_id.return_value \u003d \u0027fake_port1\u0027"},{"line_number":120,"context_line":"        value1.get_peer.return_value \u003d \u0027\u0027"},{"line_number":121,"context_line":"        value1.get_attached_mac.return_value \u003d \u0027\u0027"},{"line_number":122,"context_line":"        value1.get_remote_ip.return_value \u003d \u0027\u0027"},{"line_number":123,"context_line":"        value1.get_tunnel_type.return_value \u003d \u0027\u0027"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        ovs_port1 \u003d db_models.OvsPort(value1)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.controller.logical_port_created(test_app_base.fake_local_port1)"},{"line_number":128,"context_line":"        self.controller.topology.ovs_port_updated(ovs_port1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_56ecb229","line":125,"range":{"start_line":113,"start_character":0,"end_line":125,"end_character":45},"in_reply_to":"5a74a57a_cd396843","updated":"2016-11-28 15:08:40.000000000","message":"will move once the patch merges","commit_id":"511b86fa5d46b8a8b7db848da542f81182a1b8ea"}]}
