)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3f15820b4d7e2a8860b8fb67cd14197a13297720","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[log]: functional test for logging api"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch performs functional test for logging api."},{"line_number":10,"context_line":"The implementation bases on logging api for security group spec[1]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://review.openstack.org/#/c/203509/"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"9f436f4f_93405ca7","line":10,"range":{"start_line":10,"start_character":19,"end_line":10,"end_character":27},"updated":"2017-08-11 19:25:32.000000000","message":"is based on the","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"521462d872b6ffc2ffffc3d70e44c97545d146f1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[log]: functional test for logging api"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch performs functional test for logging api."},{"line_number":10,"context_line":"The implementation bases on logging api for security group spec[1]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://review.openstack.org/#/c/203509/"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"9f436f4f_496a2eee","line":10,"range":{"start_line":10,"start_character":19,"end_line":10,"end_character":27},"in_reply_to":"9f436f4f_93405ca7","updated":"2017-08-14 08:42:56.000000000","message":"Done","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"}],"neutron/tests/functional/services/logapi/test_logging.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3f15820b4d7e2a8860b8fb67cd14197a13297720","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            \u0027log_extension.LoggingApiStub\u0027).start()"},{"line_number":80,"context_line":"        self.resource_rpc.get_sg_log_info.side_effect \u003d _get_sg_info_mock"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _set_log_ports(self, sg_rules):"},{"line_number":83,"context_line":"        fake_sg_log_info \u003d ["},{"line_number":84,"context_line":"            {"},{"line_number":85,"context_line":"                \u0027id\u0027: FAKE_LOG_ID,"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f436f4f_53f1d494","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":22},"updated":"2017-08-11 19:25:32.000000000","message":"Shouldn\u0027t this be _set_ports_log","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"1e0338ea791b3cb8bea6b1fe444ef4fb2318f870","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            \u0027log_extension.LoggingApiStub\u0027).start()"},{"line_number":80,"context_line":"        self.resource_rpc.get_sg_log_info.side_effect \u003d _get_sg_info_mock"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _set_log_ports(self, sg_rules):"},{"line_number":83,"context_line":"        fake_sg_log_info \u003d ["},{"line_number":84,"context_line":"            {"},{"line_number":85,"context_line":"                \u0027id\u0027: FAKE_LOG_ID,"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f436f4f_499c6e0e","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":22},"in_reply_to":"9f436f4f_53f1d494","updated":"2017-08-14 08:42:14.000000000","message":"Done","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3f15820b4d7e2a8860b8fb67cd14197a13297720","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    ip_cidr \u003d \u0027192.168.0.1/24\u0027"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _log_flows_is_set(self, table, flows):"},{"line_number":100,"context_line":"        flows_list \u003d flows.splitlines()"},{"line_number":101,"context_line":"        pattern \u003d re.compile("},{"line_number":102,"context_line":"            r\"^.* table\u003d%s.* actions\u003dCONTROLLER:65535\" % table"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f436f4f_b302406e","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":25},"updated":"2017-08-11 19:25:32.000000000","message":"we are looking for one flow per table, right? If that\u0027s the case, consider naming this method \u0027_is_log_flow_set\u0027","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"1e0338ea791b3cb8bea6b1fe444ef4fb2318f870","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    ip_cidr \u003d \u0027192.168.0.1/24\u0027"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _log_flows_is_set(self, table, flows):"},{"line_number":100,"context_line":"        flows_list \u003d flows.splitlines()"},{"line_number":101,"context_line":"        pattern \u003d re.compile("},{"line_number":102,"context_line":"            r\"^.* table\u003d%s.* actions\u003dCONTROLLER:65535\" % table"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f436f4f_09a2e64b","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":25},"in_reply_to":"9f436f4f_b302406e","updated":"2017-08-14 08:42:14.000000000","message":"Done.","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3f15820b4d7e2a8860b8fb67cd14197a13297720","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            self.FAKE_SECURITY_GROUP_ID, sg_rules)"},{"line_number":118,"context_line":"        self.firewall.update_port_filter(self.src_port_desc)"},{"line_number":119,"context_line":"        self._set_log_ports(sg_rules)"},{"line_number":120,"context_line":"        self.log_driver.start_logging("},{"line_number":121,"context_line":"            self.context, log_resources\u003d[FAKE_LOG_OBJECT])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(91)"},{"line_number":124,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d91, flows\u003dflows))"},{"line_number":125,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":126,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d92, flows\u003dflows))"},{"line_number":127,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":128,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d93, flows\u003dflows))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @test_firewall.skip_if_firewall(\"iptables\")"},{"line_number":131,"context_line":"    def test_stop_log(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f436f4f_b3b480d2","line":128,"range":{"start_line":120,"start_character":0,"end_line":128,"end_character":70},"updated":"2017-08-11 19:25:32.000000000","message":"Why not move these line to a method named _assert_logging_flows_set and call it from here and from L143 below","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"1e0338ea791b3cb8bea6b1fe444ef4fb2318f870","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            self.FAKE_SECURITY_GROUP_ID, sg_rules)"},{"line_number":118,"context_line":"        self.firewall.update_port_filter(self.src_port_desc)"},{"line_number":119,"context_line":"        self._set_log_ports(sg_rules)"},{"line_number":120,"context_line":"        self.log_driver.start_logging("},{"line_number":121,"context_line":"            self.context, log_resources\u003d[FAKE_LOG_OBJECT])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(91)"},{"line_number":124,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d91, flows\u003dflows))"},{"line_number":125,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":126,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d92, flows\u003dflows))"},{"line_number":127,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":128,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d93, flows\u003dflows))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @test_firewall.skip_if_firewall(\"iptables\")"},{"line_number":131,"context_line":"    def test_stop_log(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f436f4f_a9907aee","line":128,"range":{"start_line":120,"start_character":0,"end_line":128,"end_character":70},"in_reply_to":"9f436f4f_b3b480d2","updated":"2017-08-14 08:42:14.000000000","message":"Done","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3f15820b4d7e2a8860b8fb67cd14197a13297720","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self._set_log_ports(sg_rules)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # start log"},{"line_number":143,"context_line":"        self.log_driver.start_logging("},{"line_number":144,"context_line":"            self.context, log_resources\u003d[FAKE_LOG_OBJECT])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(91)"},{"line_number":147,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d91, flows\u003dflows))"},{"line_number":148,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":149,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d92, flows\u003dflows))"},{"line_number":150,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":151,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d93, flows\u003dflows))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        # stop log"},{"line_number":154,"context_line":"        self.log_driver.stop_logging("}],"source_content_type":"text/x-python","patch_set":28,"id":"9f436f4f_53c31439","line":151,"range":{"start_line":143,"start_character":0,"end_line":151,"end_character":70},"updated":"2017-08-11 19:25:32.000000000","message":"Please see my comment to L120-128","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"1e0338ea791b3cb8bea6b1fe444ef4fb2318f870","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self._set_log_ports(sg_rules)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # start log"},{"line_number":143,"context_line":"        self.log_driver.start_logging("},{"line_number":144,"context_line":"            self.context, log_resources\u003d[FAKE_LOG_OBJECT])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(91)"},{"line_number":147,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d91, flows\u003dflows))"},{"line_number":148,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":149,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d92, flows\u003dflows))"},{"line_number":150,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":151,"context_line":"        self.assertTrue(self._log_flows_is_set(table\u003d93, flows\u003dflows))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        # stop log"},{"line_number":154,"context_line":"        self.log_driver.stop_logging("}],"source_content_type":"text/x-python","patch_set":28,"id":"9f436f4f_898db6d4","line":151,"range":{"start_line":143,"start_character":0,"end_line":151,"end_character":70},"in_reply_to":"9f436f4f_53c31439","updated":"2017-08-14 08:42:14.000000000","message":"Done","commit_id":"2c7c22fed4c6127909b3a2418eae4c941d878d90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.resource_rpc \u003d mock.patch("},{"line_number":78,"context_line":"            \u0027neutron.services.logapi.rpc.agent.LoggingApiStub\u0027).start()"},{"line_number":79,"context_line":"        self.resource_rpc.get_sg_log_info_for_log_resources.side_effect \u003d \\"},{"line_number":80,"context_line":"            _get_sg_info_mock"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _set_ports_log(self, sg_rules):"},{"line_number":83,"context_line":"        fake_sg_log_info \u003d ["}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_36ec49f2","line":80,"range":{"start_line":79,"start_character":0,"end_line":80,"end_character":29},"updated":"2017-12-05 11:52:57.000000000","message":"Nit: To keep consistency with rest of neutron code:\n\n self.resource_rpc.get_sg_log_info_for_log_resources.side_effect \u003d (\n     get_sg_info_mock)","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            r\"^.* table\u003d%s.* actions\u003dCONTROLLER:65535\" % table"},{"line_number":103,"context_line":"        )"},{"line_number":104,"context_line":"        for flow in flows_list:"},{"line_number":105,"context_line":"            if pattern.match(flow):"},{"line_number":106,"context_line":"                return True"},{"line_number":107,"context_line":"        return False"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_369a096e","line":105,"range":{"start_line":105,"start_character":29,"end_line":105,"end_character":33},"updated":"2017-12-05 11:52:57.000000000","message":"Consider using flow.strip() just to be safe here.","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        return False"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _assert_logging_flows_set(self):"},{"line_number":110,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(91)"},{"line_number":111,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d91, flows\u003dflows))"},{"line_number":112,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":113,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d92, flows\u003dflows))"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_36d689f3","line":110,"range":{"start_line":110,"start_character":63,"end_line":110,"end_character":65},"updated":"2017-12-05 11:52:57.000000000","message":"constants.LOG_EGRESS_TABLE","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def _assert_logging_flows_set(self):"},{"line_number":110,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(91)"},{"line_number":111,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d91, flows\u003dflows))"},{"line_number":112,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":113,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d92, flows\u003dflows))"},{"line_number":114,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":115,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d93, flows\u003dflows))"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_9600b569","line":112,"range":{"start_line":112,"start_character":63,"end_line":112,"end_character":65},"updated":"2017-12-05 11:52:57.000000000","message":"constants.LOG_INGRESS_TABLE","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d91, flows\u003dflows))"},{"line_number":112,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":113,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d92, flows\u003dflows))"},{"line_number":114,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":115,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d93, flows\u003dflows))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _assert_logging_flows_not_set(self):"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_56fa2d75","line":114,"range":{"start_line":114,"start_character":63,"end_line":114,"end_character":65},"updated":"2017-12-05 11:52:57.000000000","message":"constants.LOG_DROP_TABLE","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        self.assertTrue(self._is_log_flow_set(table\u003d93, flows\u003dflows))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _assert_logging_flows_not_set(self):"},{"line_number":118,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(91)"},{"line_number":119,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d91, flows\u003dflows))"},{"line_number":120,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":121,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d92, flows\u003dflows))"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_16f4a585","line":118,"range":{"start_line":118,"start_character":63,"end_line":118,"end_character":65},"updated":"2017-12-05 11:52:57.000000000","message":"ditto","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    def _assert_logging_flows_not_set(self):"},{"line_number":118,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(91)"},{"line_number":119,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d91, flows\u003dflows))"},{"line_number":120,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":121,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d92, flows\u003dflows))"},{"line_number":122,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":123,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d93, flows\u003dflows))"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_36ef69b1","line":120,"range":{"start_line":120,"start_character":63,"end_line":120,"end_character":65},"updated":"2017-12-05 11:52:57.000000000","message":"ditto","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d91, flows\u003dflows))"},{"line_number":120,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(92)"},{"line_number":121,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d92, flows\u003dflows))"},{"line_number":122,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":123,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d93, flows\u003dflows))"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @test_firewall.skip_if_firewall(\"iptables\")"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_d62b9de8","line":122,"range":{"start_line":122,"start_character":63,"end_line":122,"end_character":65},"updated":"2017-12-05 11:52:57.000000000","message":"ditto","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2b4be9d54a795dd18ce8db2d5c058abb019ac8a4","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table(93)"},{"line_number":123,"context_line":"        self.assertFalse(self._is_log_flow_set(table\u003d93, flows\u003dflows))"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @test_firewall.skip_if_firewall(\"iptables\")"},{"line_number":126,"context_line":"    def test_start_log(self):"},{"line_number":127,"context_line":"        sg_rules \u003d [{\u0027ethertype\u0027: constants.IPv4,"},{"line_number":128,"context_line":"                     \u0027direction\u0027: firewall.INGRESS_DIRECTION,"}],"source_content_type":"text/x-python","patch_set":41,"id":"df87a7cf_763ad134","line":125,"range":{"start_line":125,"start_character":0,"end_line":125,"end_character":47},"updated":"2017-12-05 11:52:57.000000000","message":"It sounds that all tests here are just for ovs firewall. Consider removing this skip and removing scenarios from this class.","commit_id":"8d86ed6c95fc5a7a7db9297b7bd7bdd4b7ea98ac"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6e60e365640c6e5ce1329595031ba46865a9a2a9","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        pattern \u003d re.compile("},{"line_number":104,"context_line":"            r\"^.* table\u003d%s.* actions\u003dCONTROLLER:65535\" % table"},{"line_number":105,"context_line":"        )"},{"line_number":106,"context_line":"        for flow in flows_list:"},{"line_number":107,"context_line":"            if pattern.match(flow.strip()):"},{"line_number":108,"context_line":"                return True"},{"line_number":109,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f91af0f_c74a2d7f","line":106,"updated":"2018-01-08 14:35:27.000000000","message":"nit: I think that would be enough to call here \"flows.splitlines()\" instead if using additional variable flows_list","commit_id":"a21095f8e4324105916b8107d3e2d36e849b3a56"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ad8f78ffa9c21db3bcd691e2b1e9682249addb92","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        pattern \u003d re.compile("},{"line_number":104,"context_line":"            r\"^.* table\u003d%s.* actions\u003dCONTROLLER:65535\" % table"},{"line_number":105,"context_line":"        )"},{"line_number":106,"context_line":"        for flow in flows_list:"},{"line_number":107,"context_line":"            if pattern.match(flow.strip()):"},{"line_number":108,"context_line":"                return True"},{"line_number":109,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f91af0f_aa988e74","line":106,"in_reply_to":"9f91af0f_c74a2d7f","updated":"2018-01-09 04:12:43.000000000","message":"Done","commit_id":"a21095f8e4324105916b8107d3e2d36e849b3a56"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6e60e365640c6e5ce1329595031ba46865a9a2a9","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.context \u003d neutron_context.get_admin_context_without_session()"},{"line_number":59,"context_line":"        self._set_resource_rpc_mock()"},{"line_number":60,"context_line":"        if self.firewall_name \u003d\u003d \u0027openvswitch\u0027:"},{"line_number":61,"context_line":"            self.log_driver \u003d self.initialize_ovs_fw_log()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def initialize_ovs_fw_log(self):"},{"line_number":64,"context_line":"        int_br \u003d ovs_ext_api.OVSCookieBridge(ovs_bridge.OVSAgentBridge("}],"source_content_type":"text/x-python","patch_set":52,"id":"9f91af0f_b6232cbd","line":61,"updated":"2018-01-08 14:35:27.000000000","message":"shouldn\u0027t it be skipped if firewall_name is different than openvswitch?","commit_id":"3c3c0d77c2c6bd7d7b68407f570ae444f8cbf659"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ad8f78ffa9c21db3bcd691e2b1e9682249addb92","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.context \u003d neutron_context.get_admin_context_without_session()"},{"line_number":59,"context_line":"        self._set_resource_rpc_mock()"},{"line_number":60,"context_line":"        if self.firewall_name \u003d\u003d \u0027openvswitch\u0027:"},{"line_number":61,"context_line":"            self.log_driver \u003d self.initialize_ovs_fw_log()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def initialize_ovs_fw_log(self):"},{"line_number":64,"context_line":"        int_br \u003d ovs_ext_api.OVSCookieBridge(ovs_bridge.OVSAgentBridge("}],"source_content_type":"text/x-python","patch_set":52,"id":"9f91af0f_4a8b021e","line":61,"in_reply_to":"9f91af0f_b6232cbd","updated":"2018-01-09 04:12:43.000000000","message":"Done","commit_id":"3c3c0d77c2c6bd7d7b68407f570ae444f8cbf659"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6e60e365640c6e5ce1329595031ba46865a9a2a9","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table("},{"line_number":113,"context_line":"            ovs_consts.ACCEPTED_EGRESS_TRAFFIC_TABLE)"},{"line_number":114,"context_line":"        self.assertTrue(self._is_log_flow_set("},{"line_number":115,"context_line":"            table\u003dovs_consts.ACCEPTED_EGRESS_TRAFFIC_TABLE, flows\u003dflows))"},{"line_number":116,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table("},{"line_number":117,"context_line":"            ovs_consts.ACCEPTED_INGRESS_TRAFFIC_TABLE)"},{"line_number":118,"context_line":"        self.assertTrue(self._is_log_flow_set("}],"source_content_type":"text/x-python","patch_set":52,"id":"9f91af0f_6a54d8ff","line":115,"updated":"2018-01-08 14:35:27.000000000","message":"can\u0027t You move this \"self.log_driver.int_br.br.dump_flows_for_table()\" call to self._is_log_flow_set() method?\nThen You would need to pass only one argument to this method and in fact it is same argument which You are passing currently to both of those methods.","commit_id":"3c3c0d77c2c6bd7d7b68407f570ae444f8cbf659"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ad8f78ffa9c21db3bcd691e2b1e9682249addb92","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table("},{"line_number":113,"context_line":"            ovs_consts.ACCEPTED_EGRESS_TRAFFIC_TABLE)"},{"line_number":114,"context_line":"        self.assertTrue(self._is_log_flow_set("},{"line_number":115,"context_line":"            table\u003dovs_consts.ACCEPTED_EGRESS_TRAFFIC_TABLE, flows\u003dflows))"},{"line_number":116,"context_line":"        flows \u003d self.log_driver.int_br.br.dump_flows_for_table("},{"line_number":117,"context_line":"            ovs_consts.ACCEPTED_INGRESS_TRAFFIC_TABLE)"},{"line_number":118,"context_line":"        self.assertTrue(self._is_log_flow_set("}],"source_content_type":"text/x-python","patch_set":52,"id":"9f91af0f_6a90464b","line":115,"in_reply_to":"9f91af0f_6a54d8ff","updated":"2018-01-09 04:12:43.000000000","message":"Cool! Done.","commit_id":"3c3c0d77c2c6bd7d7b68407f570ae444f8cbf659"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6e60e365640c6e5ce1329595031ba46865a9a2a9","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self._assert_logging_flows_set()"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_stop_log(self):"},{"line_number":164,"context_line":"        sg_rules \u003d [{\u0027ethertype\u0027: constants.IPv4,"},{"line_number":165,"context_line":"                     \u0027direction\u0027: firewall.INGRESS_DIRECTION,"},{"line_number":166,"context_line":"                     \u0027protocol\u0027: constants.PROTO_NAME_ICMP,"},{"line_number":167,"context_line":"                     \u0027security_group_id\u0027: self.FAKE_SECURITY_GROUP_ID},"},{"line_number":168,"context_line":"                    {\u0027ethertype\u0027: constants.IPv4,"},{"line_number":169,"context_line":"                     \u0027direction\u0027: firewall.EGRESS_DIRECTION,"},{"line_number":170,"context_line":"                     \u0027security_group_id\u0027: self.FAKE_SECURITY_GROUP_ID},"},{"line_number":171,"context_line":"                    {\u0027ethertype\u0027: constants.IPv6,"},{"line_number":172,"context_line":"                     \u0027protocol\u0027: constants.PROTO_NAME_TCP,"},{"line_number":173,"context_line":"                     \u0027port_range_min\u0027: 22,"},{"line_number":174,"context_line":"                     \u0027port_range_max\u0027: 22,"},{"line_number":175,"context_line":"                     \u0027remote_group_id\u0027: 2,"},{"line_number":176,"context_line":"                     \u0027direction\u0027: firewall.EGRESS_DIRECTION,"},{"line_number":177,"context_line":"                     \u0027security_group_id\u0027: self.FAKE_SECURITY_GROUP_ID},"},{"line_number":178,"context_line":"                    ]"},{"line_number":179,"context_line":"        self.firewall.update_security_group_rules("},{"line_number":180,"context_line":"            self.FAKE_SECURITY_GROUP_ID, sg_rules)"},{"line_number":181,"context_line":"        self.firewall.update_port_filter(self.src_port_desc)"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f91af0f_4a9d54ba","line":178,"range":{"start_line":164,"start_character":8,"end_line":178,"end_character":21},"updated":"2018-01-08 14:35:27.000000000","message":"it is the same as in L140, right? Can You maybe move it to some class variable and reuse as self.sg_rules in both places?","commit_id":"3c3c0d77c2c6bd7d7b68407f570ae444f8cbf659"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a0a9e02cc6323aaeb5e78c5f40c63b4c52933e6d","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self._assert_logging_flows_set()"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_stop_log(self):"},{"line_number":164,"context_line":"        sg_rules \u003d [{\u0027ethertype\u0027: constants.IPv4,"},{"line_number":165,"context_line":"                     \u0027direction\u0027: firewall.INGRESS_DIRECTION,"},{"line_number":166,"context_line":"                     \u0027protocol\u0027: constants.PROTO_NAME_ICMP,"},{"line_number":167,"context_line":"                     \u0027security_group_id\u0027: self.FAKE_SECURITY_GROUP_ID},"},{"line_number":168,"context_line":"                    {\u0027ethertype\u0027: constants.IPv4,"},{"line_number":169,"context_line":"                     \u0027direction\u0027: firewall.EGRESS_DIRECTION,"},{"line_number":170,"context_line":"                     \u0027security_group_id\u0027: self.FAKE_SECURITY_GROUP_ID},"},{"line_number":171,"context_line":"                    {\u0027ethertype\u0027: constants.IPv6,"},{"line_number":172,"context_line":"                     \u0027protocol\u0027: constants.PROTO_NAME_TCP,"},{"line_number":173,"context_line":"                     \u0027port_range_min\u0027: 22,"},{"line_number":174,"context_line":"                     \u0027port_range_max\u0027: 22,"},{"line_number":175,"context_line":"                     \u0027remote_group_id\u0027: 2,"},{"line_number":176,"context_line":"                     \u0027direction\u0027: firewall.EGRESS_DIRECTION,"},{"line_number":177,"context_line":"                     \u0027security_group_id\u0027: self.FAKE_SECURITY_GROUP_ID},"},{"line_number":178,"context_line":"                    ]"},{"line_number":179,"context_line":"        self.firewall.update_security_group_rules("},{"line_number":180,"context_line":"            self.FAKE_SECURITY_GROUP_ID, sg_rules)"},{"line_number":181,"context_line":"        self.firewall.update_port_filter(self.src_port_desc)"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f91af0f_0a965a3f","line":178,"range":{"start_line":164,"start_character":8,"end_line":178,"end_character":21},"in_reply_to":"9f91af0f_4a9d54ba","updated":"2018-01-09 04:13:21.000000000","message":"Done","commit_id":"3c3c0d77c2c6bd7d7b68407f570ae444f8cbf659"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6e60e365640c6e5ce1329595031ba46865a9a2a9","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            self.context, log_resources\u003d[FAKE_LOG_OBJECT])"},{"line_number":187,"context_line":"        self._assert_logging_flows_set()"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # stop log"},{"line_number":190,"context_line":"        self.log_driver.stop_logging("},{"line_number":191,"context_line":"            self.context, log_resources\u003d[FAKE_LOG_OBJECT])"},{"line_number":192,"context_line":"        self._assert_logging_flows_not_set()"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f91af0f_ca9964c4","line":192,"range":{"start_line":189,"start_character":8,"end_line":192,"end_character":44},"updated":"2018-01-08 14:35:27.000000000","message":"if I see correct this is only part which is different than test \"test_start_log()\". Maybe You could do one test, like \"test_log_lifecycle\" and test in this test both start and stop logging? So bacically all what You are doing in test_stop_log now :)","commit_id":"3c3c0d77c2c6bd7d7b68407f570ae444f8cbf659"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ad8f78ffa9c21db3bcd691e2b1e9682249addb92","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            self.context, log_resources\u003d[FAKE_LOG_OBJECT])"},{"line_number":187,"context_line":"        self._assert_logging_flows_set()"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # stop log"},{"line_number":190,"context_line":"        self.log_driver.stop_logging("},{"line_number":191,"context_line":"            self.context, log_resources\u003d[FAKE_LOG_OBJECT])"},{"line_number":192,"context_line":"        self._assert_logging_flows_not_set()"}],"source_content_type":"text/x-python","patch_set":52,"id":"9f91af0f_0a817afb","line":192,"range":{"start_line":189,"start_character":8,"end_line":192,"end_character":44},"in_reply_to":"9f91af0f_ca9964c4","updated":"2018-01-09 04:12:43.000000000","message":"Done","commit_id":"3c3c0d77c2c6bd7d7b68407f570ae444f8cbf659"}]}
