)]}'
{"neutron_tempest_plugin/api/base.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"051d47880d2f8b98a063133e66266eaa8f454e2f","unresolved":false,"context_lines":[{"line_number":685,"context_line":"        forwarding."},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        :param client: network client to be used for creating and cleaning up"},{"line_number":688,"context_line":"        the floating IP."},{"line_number":689,"context_line":"        \"\"\""},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"        client \u003d client or cls.client"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_9a0b99d4","line":688,"range":{"start_line":688,"start_character":12,"end_line":688,"end_character":23},"updated":"2019-05-27 17:55:18.000000000","message":"floating IP port forwarding","commit_id":"aeea75dfb3e46f67290dfc70e55823ce32240aad"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"acdfec477b4350998aac4c4605e87feae03474a3","unresolved":false,"context_lines":[{"line_number":685,"context_line":"        forwarding."},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        :param client: network client to be used for creating and cleaning up"},{"line_number":688,"context_line":"        the floating IP."},{"line_number":689,"context_line":"        \"\"\""},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"        client \u003d client or cls.client"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_5d599b32","line":688,"range":{"start_line":688,"start_character":12,"end_line":688,"end_character":23},"in_reply_to":"bfb3d3c7_9a0b99d4","updated":"2019-05-27 19:48:14.000000000","message":"Done","commit_id":"aeea75dfb3e46f67290dfc70e55823ce32240aad"}],"neutron_tempest_plugin/api/test_port_forwardings.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"051d47880d2f8b98a063133e66266eaa8f454e2f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            internal_port\u003d1111, external_port\u003d2222, protocol\u003d\"tcp\")"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        fip \u003d self.client.show_floatingip(fip[\u0027id\u0027])[\u0027floatingip\u0027]"},{"line_number":98,"context_line":"        self.assertEqual(1, len(fip[\u0027port_forwardings\u0027]))"},{"line_number":99,"context_line":"        self.assertEqual(1111, fip[\u0027port_forwardings\u0027][0][\u0027internal_port\u0027])"},{"line_number":100,"context_line":"        self.assertEqual(2222, fip[\u0027port_forwardings\u0027][0][\u0027external_port\u0027])"},{"line_number":101,"context_line":"        self.assertEqual(\u0027tcp\u0027, fip[\u0027port_forwardings\u0027][0][\u0027protocol\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_1ae56909","line":98,"range":{"start_line":98,"start_character":37,"end_line":98,"end_character":53},"updated":"2019-05-27 17:55:18.000000000","message":"Two things:\n\n* You could add an assertion before creating the port forwarding, and assure that this attribute doesn\u0027t exist in before.\n* You could delete the port forwarding after, and assure that this attribute disappear.","commit_id":"aeea75dfb3e46f67290dfc70e55823ce32240aad"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"acdfec477b4350998aac4c4605e87feae03474a3","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            internal_port\u003d1111, external_port\u003d2222, protocol\u003d\"tcp\")"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        fip \u003d self.client.show_floatingip(fip[\u0027id\u0027])[\u0027floatingip\u0027]"},{"line_number":98,"context_line":"        self.assertEqual(1, len(fip[\u0027port_forwardings\u0027]))"},{"line_number":99,"context_line":"        self.assertEqual(1111, fip[\u0027port_forwardings\u0027][0][\u0027internal_port\u0027])"},{"line_number":100,"context_line":"        self.assertEqual(2222, fip[\u0027port_forwardings\u0027][0][\u0027external_port\u0027])"},{"line_number":101,"context_line":"        self.assertEqual(\u0027tcp\u0027, fip[\u0027port_forwardings\u0027][0][\u0027protocol\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_1d3fa3b4","line":98,"range":{"start_line":98,"start_character":37,"end_line":98,"end_character":53},"in_reply_to":"bfb3d3c7_1ae56909","updated":"2019-05-27 19:48:14.000000000","message":"Done","commit_id":"aeea75dfb3e46f67290dfc70e55823ce32240aad"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a1f630f7729f7c6b6d11ec447969fa81204268e8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"CONF \u003d config.CONF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class PortForwardingTestJSON(base.BaseNetworkTest):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    required_extensions \u003d [\u0027router\u0027, \u0027floating-ip-port-forwarding\u0027]"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_863ed888","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":28},"updated":"2019-05-28 15:12:08.000000000","message":"Seems most of these cases are duplicated to functional testing:\nhttps://github.com/openstack/neutron/blob/master/neutron/tests/functional/services/portforwarding/test_port_forwarding.py\n\nAnd you can add more cases for API like:\n1. create floating IP port forwarding to a floating IP which is already bind to a neutron  port\n2. create floating IP port forwarding to a neutron port which has binding floating IP\n3. create FIP PF to a floating IP, and try to delete FIP (will get failed), remove FIP PF, and delete FIP again(succeed).\n\nBut, IMHO, tempest is more like a real functional testing, we can add test case like:\n1. try to add a TCP 22 port for a floating IP and pointing to a internal port 22, and then try to ssh, to verify the networking is reachable. \n2. Or use NC to create a fake HTTP server inside the VM, and create a port forwarding with TCP port 8080 port to VM port 80, and then try to CURL such HTTP.","commit_id":"003fcae7f971685bc9a490cb3e1ea5001f6ff550"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"addcaf58ff4372582c59a8adbe7d6afcc0757233","unresolved":false,"context_lines":[{"line_number":24,"context_line":"CONF \u003d config.CONF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class PortForwardingTestJSON(base.BaseNetworkTest):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    required_extensions \u003d [\u0027router\u0027, \u0027floating-ip-port-forwarding\u0027]"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_663de429","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":28},"in_reply_to":"bfb3d3c7_863ed888","updated":"2019-05-28 15:14:40.000000000","message":"Yes, we can add more test cases later of course :)\n\nAbout second part of Your comments, this what You described is more like scenario test and I plan to add it in next commit \"on top of this one\".","commit_id":"003fcae7f971685bc9a490cb3e1ea5001f6ff550"}],"neutron_tempest_plugin/services/network/json/network_client.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"051d47880d2f8b98a063133e66266eaa8f454e2f","unresolved":false,"context_lines":[{"line_number":985,"context_line":"                                                         fip_id, pf_id)"},{"line_number":986,"context_line":"        resp, body \u003d self.delete(uri)"},{"line_number":987,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":988,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def create_network_keystone_v3(self, name, project_id, tenant_id\u003dNone):"},{"line_number":991,"context_line":"        uri \u003d \u0027%s/networks\u0027 % self.uri_prefix"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_dac35156","line":988,"range":{"start_line":988,"start_character":8,"end_line":988,"end_character":54},"updated":"2019-05-27 17:55:18.000000000","message":"Perhaps this is not needed since \u0027delete\u0027 doesn\u0027t have any response body.","commit_id":"aeea75dfb3e46f67290dfc70e55823ce32240aad"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"acdfec477b4350998aac4c4605e87feae03474a3","unresolved":false,"context_lines":[{"line_number":985,"context_line":"                                                         fip_id, pf_id)"},{"line_number":986,"context_line":"        resp, body \u003d self.delete(uri)"},{"line_number":987,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":988,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def create_network_keystone_v3(self, name, project_id, tenant_id\u003dNone):"},{"line_number":991,"context_line":"        uri \u003d \u0027%s/networks\u0027 % self.uri_prefix"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_bd47774c","line":988,"range":{"start_line":988,"start_character":8,"end_line":988,"end_character":54},"in_reply_to":"bfb3d3c7_dac35156","updated":"2019-05-27 19:48:14.000000000","message":"Done","commit_id":"aeea75dfb3e46f67290dfc70e55823ce32240aad"}]}
