{"uid":"603713b97ea8fcb6","name":"test_01_create_dnat_basic[TCP-ipv4-30002-30003-30002-30003]","fullName":"testcases.test_openapi.test_vpc.natmaoyan.test_dnat.Test#test_01_create_dnat_basic","historyId":"0ea39c5f98f78ccb2c9d0310e178101e","time":{"start":1752139114908,"stop":1752139187791,"duration":72883},"status":"failed","statusMessage":"AssertionError: check_vip: tcp 36.213.210.79 30002 failed","statusTrace":"self = <test_dnat.Test object at 0x7f7d87ff6550>, protocol = 'TCP', ip_version = 'ipv4', inner_start_port = 30002, inner_end_port = 30003\nouter_start_port = 30002, outer_end_port = 30003\n\n    @MARKER.P1\n    @MARKER.parametrize(\n        (\"protocol, ip_version, inner_start_port, inner_end_port, outer_start_port, outer_end_port\"),\n        [\n            # ('UDP', IPv4, 30000, 30001, 30000, 30001),\n            ('TCP', IPv4, 30002, 30003, 30002, 30003),\n            # ('ANY', IPv4, 30004, 30005, 30004, 30005),\n            # ('UDP', IPv4, 30006, None, 30006, None),\n            # ('TCP', IPv4, 30006, None, 30006, None),\n            # ('ANY', IPv4, 30007, None, 30007, None),\n            # ('ANY', IPv4, 444, None, 444, None),\n        ]\n    )\n    \n    def test_01_create_dnat_basic(self, protocol, ip_version, inner_start_port, inner_end_port,\n                           outer_start_port, outer_end_port):\n        self.fip_id = NETWORK.create_floatingip().fip_id\n        dnat_rule = NETWORK.create_dnat_rule(\n            nat_gateway_id=self.nat_gw.nat_gateway_id,\n            inner_ip=self.client.ports[0].ipv4,\n            port_id=self.client.ports[0].port_id,\n            subnet_id=self.client.ports[0].ipv4_subnet_id,\n            inner_start_port=inner_start_port, inner_end_port=inner_end_port,\n            outer_start_port=outer_start_port, outer_end_port=outer_end_port,\n            protocol=protocol,\n            fip_id=self.fip_id\n        )\n        time.sleep(2)\n>       NATTestCommon.dnat_ping(protocol=protocol, outer_start_port=outer_start_port,\n                                dnat_client=self.server, fip=dnat_rule.fip, tries=5)\n\ntestcases/test_openapi/test_vpc/natmaoyan/test_dnat.py:75: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntestcases/test_openapi/test_nat/nat_test_common.py:118: in dnat_ping\n    check_vip(\ncasado/mytest/check.py:215: in check_vip\n    return _check_vip()\n/usr/local/lib/python3.11/site-packages/decorator.py:235: in fun\n    return caller(func, *(extras + args), **kw)\n/usr/local/lib/python3.11/site-packages/retry/api.py:73: in retry_decorator\n    return __retry_internal(partial(f, *args, **kwargs), exceptions, tries, delay, max_delay, backoff, jitter,\n/usr/local/lib/python3.11/site-packages/retry/api.py:33: in __retry_internal\n    return f()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n    @retry(tries=kwargs.pop(\"tries\", 1),\n           max_delay=kwargs.pop(\"max_delay\", 10),\n           delay=kwargs.pop(\"delay\", 3),\n           backoff=kwargs.pop(\"backoff\", 2),\n           # logger=kwargs.pop(\"logger\", logger)\n           exceptions=(paramiko.SSHException, socket.timeout, AssertionError))\n    def _check_vip():\n        '''\n        总体逻辑:  根据传入的参数构造不同的命令, 并根据命令的返回值和expect_code对比来验证结果\n        :param client:\n        :param vip:         loadbalancer的ip\n        :param port:        listener的port\n        :param expect_code: expect_code的值是对应linux命令的返回值, 如果为0表示命令执行成功, 为1表示命令执行失败\n        :param jump_host:   跳板机\n        :return: 命令执行结果(code, response_text)\n        '''\n        cmd = build_check_vip_cmd(\n            vip=vip, port=port, protocol=protocol,\n            sport=sport, sip=sip,\n            conn_timeout=conn_timeout,\n            client_key=client_key, client_cert=client_cert, ca_cert=ca_cert,\n            http2_enable=http2_enable, verbose=verbose,\n            **kwargs)\n    \n        if re.search(r\"\\bhttp\\b\", protocol, re.I):\n            cmd += \"\"\"| grep '301 Moved'\"\"\" if redirect else \"\"\"| grep -P '200 OK|301 Moved'\"\"\"\n        elif re.search(r\"\\bhttps\\b\", protocol, re.I):\n            if http2_enable:\n                cmd += \"| grep -P 'HTTP/2.*200|301 Moved'\"\n            else:\n                cmd += \"| grep -P '200 OK|301 Moved'\"\n    \n        resp = ssh_exec_cmd(\n            host=client, cmd=cmd,\n            jump_host=jump_host, jump_port=jump_port, ssh_port=ssh_port,\n            timeout=timeout, tries=1\n        )\n    \n        if expect_code == 0:\n>           assert int(resp[0]) == 0, f\"{_check_vip_str} failed\"\nE           AssertionError: check_vip: tcp 36.213.210.79 30002 failed\n\ncasado/mytest/check.py:209: AssertionError","flaky":false,"newFailed":false,"newBroken":false,"newPassed":false,"retriesCount":0,"retriesStatusChange":false,"beforeStages":[{"name":"_xunit_setup_class_fixture_Test","time":{"start":1752139107555,"stop":1752139114906,"duration":7351},"status":"passed","steps":[],"attachments":[],"parameters":[],"stepsCount":0,"shouldDisplayMessage":false,"attachmentsCount":0,"hasContent":false,"attachmentStep":false},{"name":"_xunit_setup_method_fixture_Test","time":{"start":1752139114906,"stop":1752139114906,"duration":0},"status":"passed","steps":[],"attachments":[],"parameters":[],"stepsCount":0,"shouldDisplayMessage":false,"attachmentsCount":0,"hasContent":false,"attachmentStep":false}],"testStage":{"status":"failed","statusMessage":"AssertionError: check_vip: tcp 36.213.210.79 30002 failed","statusTrace":"self = <test_dnat.Test object at 0x7f7d87ff6550>, protocol = 'TCP', ip_version = 'ipv4', inner_start_port = 30002, inner_end_port = 30003\nouter_start_port = 30002, outer_end_port = 30003\n\n    @MARKER.P1\n    @MARKER.parametrize(\n        (\"protocol, ip_version, inner_start_port, inner_end_port, outer_start_port, outer_end_port\"),\n        [\n            # ('UDP', IPv4, 30000, 30001, 30000, 30001),\n            ('TCP', IPv4, 30002, 30003, 30002, 30003),\n            # ('ANY', IPv4, 30004, 30005, 30004, 30005),\n            # ('UDP', IPv4, 30006, None, 30006, None),\n            # ('TCP', IPv4, 30006, None, 30006, None),\n            # ('ANY', IPv4, 30007, None, 30007, None),\n            # ('ANY', IPv4, 444, None, 444, None),\n        ]\n    )\n    \n    def test_01_create_dnat_basic(self, protocol, ip_version, inner_start_port, inner_end_port,\n                           outer_start_port, outer_end_port):\n        self.fip_id = NETWORK.create_floatingip().fip_id\n        dnat_rule = NETWORK.create_dnat_rule(\n            nat_gateway_id=self.nat_gw.nat_gateway_id,\n            inner_ip=self.client.ports[0].ipv4,\n            port_id=self.client.ports[0].port_id,\n            subnet_id=self.client.ports[0].ipv4_subnet_id,\n            inner_start_port=inner_start_port, inner_end_port=inner_end_port,\n            outer_start_port=outer_start_port, outer_end_port=outer_end_port,\n            protocol=protocol,\n            fip_id=self.fip_id\n        )\n        time.sleep(2)\n>       NATTestCommon.dnat_ping(protocol=protocol, outer_start_port=outer_start_port,\n                                dnat_client=self.server, fip=dnat_rule.fip, tries=5)\n\ntestcases/test_openapi/test_vpc/natmaoyan/test_dnat.py:75: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntestcases/test_openapi/test_nat/nat_test_common.py:118: in dnat_ping\n    check_vip(\ncasado/mytest/check.py:215: in check_vip\n    return _check_vip()\n/usr/local/lib/python3.11/site-packages/decorator.py:235: in fun\n    return caller(func, *(extras + args), **kw)\n/usr/local/lib/python3.11/site-packages/retry/api.py:73: in retry_decorator\n    return __retry_internal(partial(f, *args, **kwargs), exceptions, tries, delay, max_delay, backoff, jitter,\n/usr/local/lib/python3.11/site-packages/retry/api.py:33: in __retry_internal\n    return f()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n    @retry(tries=kwargs.pop(\"tries\", 1),\n           max_delay=kwargs.pop(\"max_delay\", 10),\n           delay=kwargs.pop(\"delay\", 3),\n           backoff=kwargs.pop(\"backoff\", 2),\n           # logger=kwargs.pop(\"logger\", logger)\n           exceptions=(paramiko.SSHException, socket.timeout, AssertionError))\n    def _check_vip():\n        '''\n        总体逻辑:  根据传入的参数构造不同的命令, 并根据命令的返回值和expect_code对比来验证结果\n        :param client:\n        :param vip:         loadbalancer的ip\n        :param port:        listener的port\n        :param expect_code: expect_code的值是对应linux命令的返回值, 如果为0表示命令执行成功, 为1表示命令执行失败\n        :param jump_host:   跳板机\n        :return: 命令执行结果(code, response_text)\n        '''\n        cmd = build_check_vip_cmd(\n            vip=vip, port=port, protocol=protocol,\n            sport=sport, sip=sip,\n            conn_timeout=conn_timeout,\n            client_key=client_key, client_cert=client_cert, ca_cert=ca_cert,\n            http2_enable=http2_enable, verbose=verbose,\n            **kwargs)\n    \n        if re.search(r\"\\bhttp\\b\", protocol, re.I):\n            cmd += \"\"\"| grep '301 Moved'\"\"\" if redirect else \"\"\"| grep -P '200 OK|301 Moved'\"\"\"\n        elif re.search(r\"\\bhttps\\b\", protocol, re.I):\n            if http2_enable:\n                cmd += \"| grep -P 'HTTP/2.*200|301 Moved'\"\n            else:\n                cmd += \"| grep -P '200 OK|301 Moved'\"\n    \n        resp = ssh_exec_cmd(\n            host=client, cmd=cmd,\n            jump_host=jump_host, jump_port=jump_port, ssh_port=ssh_port,\n            timeout=timeout, tries=1\n        )\n    \n        if expect_code == 0:\n>           assert int(resp[0]) == 0, f\"{_check_vip_str} failed\"\nE           AssertionError: check_vip: tcp 36.213.210.79 30002 failed\n\ncasado/mytest/check.py:209: AssertionError","steps":[{"name":"ntt from {\"server_name\": \"wangxun-vpc0-subnet0-az0-ipv4-public-client2\", \"server_id\": \"e6699857-a859-487e-95e4-4ff484c74bfb\", \"az\": \"ecloud_compute_c5_zone\", \"image_name\": \"wuhan-botest-ntt-image01\", \"ec_status\": \"active\", \"op_status\": \"OK\", \"server_type\": \"VM\", \"region\": \"S027-HB-WHJX01\", \"visible\": true, \"ports\": [{\"port_name\": \"port233203\", \"port_id\": \"2f17ff8b-5096-47b4-b6b5-f1f23ef92fd7\", \"vpc_id\": \"7f8b19ecdb0144c88a692d094cc966a1\", \"router_id\": \"33412d83-d63c-4728-b19c-5f0bd586d196\", \"network_id\": null, \"mac_addr\": null, \"ipv6\": \"2409:8c85:4c00:a56:7352:ee2:e8e7:4684\", \"ipv6_subnet_id\": \"11759b55-4c2c-4061-8570-a0a8e11801e6\", \"ipv4\": \"192.168.0.8\", \"ipv4_subnet_id\": \"bb6ee8d8-4bfa-448e-973e-641bb1860ce4\", \"fip\": \"36.213.210.76\", \"fip_id\": \"c9bdd9e4-f306-4fa8-9fb4-3af8cc31bbaa\", \"fip_bandwidth_id\": \"0d8977c0-94c6-46e6-a518-29a08a5c3fac\", \"ipv6_bandwidth_id\": \"4255f2d5-7122-4c1c-9f3d-e9a3858e57be\", \"res_type\": null, \"res_id\": null}], \"fip\": \"36.213.210.76\", \"fip_id\": \"c9bdd9e4-f306-4fa8-9fb4-3af8cc31bbaa\", \"ipv4\": \"192.168.0.8\", \"ipv6\": \"2409:8c85:4c00:a56:7352:ee2:e8e7:4684\"} to 36.213.210.79 with protocol TCP","time":{"start":1752139138555,"stop":1752139187790,"duration":49235},"status":"failed","statusMessage":"AssertionError: check_vip: tcp 36.213.210.79 30002 failed\n","statusTrace":"  File \"/root/network_test/testcases/test_openapi/test_nat/nat_test_common.py\", line 118, in dnat_ping\n    check_vip(\n  File \"/root/network_test/casado/mytest/check.py\", line 215, in check_vip\n    return _check_vip()\n           ^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/decorator.py\", line 235, in fun\n    return caller(func, *(extras + args), **kw)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/retry/api.py\", line 73, in retry_decorator\n    return __retry_internal(partial(f, *args, **kwargs), exceptions, tries, delay, max_delay, backoff, jitter,\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/site-packages/retry/api.py\", line 33, in __retry_internal\n    return f()\n           ^^^\n  File \"/root/network_test/casado/mytest/check.py\", line 209, in _check_vip\n    assert int(resp[0]) == 0, f\"{_check_vip_str} failed\"\n           ^^^^^^^^^^^^^^^^^\n","steps":[],"attachments":[],"parameters":[],"stepsCount":0,"shouldDisplayMessage":true,"attachmentsCount":0,"hasContent":true,"attachmentStep":false}],"attachments":[{"uid":"6933ab69a896fd9e","name":"log","source":"6933ab69a896fd9e.txt","type":"text/plain","size":425}],"parameters":[],"stepsCount":1,"shouldDisplayMessage":true,"attachmentsCount":1,"hasContent":true,"attachmentStep":false},"afterStages":[{"name":"_xunit_setup_method_fixture_Test::0","time":{"start":1752139187823,"stop":1752139188131,"duration":308},"status":"passed","steps":[],"attachments":[],"parameters":[],"stepsCount":0,"shouldDisplayMessage":false,"attachmentsCount":0,"hasContent":false,"attachmentStep":false},{"name":"_xunit_setup_class_fixture_Test::0","time":{"start":1752139188131,"stop":1752139188131,"duration":0},"status":"passed","steps":[],"attachments":[],"parameters":[],"stepsCount":0,"shouldDisplayMessage":false,"attachmentsCount":0,"hasContent":false,"attachmentStep":false}],"labels":[{"name":"tag","value":"P1"},{"name":"parentSuite","value":"testcases.test_openapi.test_vpc.natmaoyan"},{"name":"suite","value":"test_dnat"},{"name":"subSuite","value":"Test"},{"name":"host","value":"iZf8z5u2o6lm2ylxlhxq9cZ"},{"name":"thread","value":"299088-MainThread"},{"name":"framework","value":"pytest"},{"name":"language","value":"cpython3"},{"name":"package","value":"testcases.test_openapi.test_vpc.natmaoyan.test_dnat"},{"name":"resultFormat","value":"allure2"}],"parameters":[{"name":"inner_end_port","value":"30003"},{"name":"inner_start_port","value":"30002"},{"name":"ip_version","value":"'ipv4'"},{"name":"outer_end_port","value":"30003"},{"name":"outer_start_port","value":"30002"},{"name":"protocol","value":"'TCP'"}],"links":[],"hidden":false,"retry":false,"extra":{"severity":"normal","retries":[],"categories":[{"name":"Product defects","matchedStatuses":["failed"],"flaky":false}],"tags":["P1"]},"source":"603713b97ea8fcb6.json","parameterValues":["30003","30002","'ipv4'","30003","30002","'TCP'"]}