diff --git a/framework/helpers/tf_cfg.py b/framework/helpers/tf_cfg.py index cb3aae58d..7c79d0278 100644 --- a/framework/helpers/tf_cfg.py +++ b/framework/helpers/tf_cfg.py @@ -167,6 +167,10 @@ def defaults(self): "log_path": "/tmp/tfw_logger.log", "logger_config": "/tmp/tfw_logger.json", }, + "Proxy": { + "ip": os.getenv("PROXY_IP", None), + "ipv6": os.getenv("PROXY_IPv6", None), + }, } ) diff --git a/framework/test_suite/tester.py b/framework/test_suite/tester.py index ad97c16a6..ffc576e70 100644 --- a/framework/test_suite/tester.py +++ b/framework/test_suite/tester.py @@ -196,13 +196,13 @@ def __create_client_deproxy(self, client: dict, ssl: bool, bind_addr: str): segment_gap=client.get("segment_gap", 0), is_ipv6=client.get("is_ipv6", False), # BaseDeproxyClient - conn_addr=fill_template(client["addr"], client), + conn_addr=self.__get_server_addr(client), is_ssl=ssl, server_hostname=fill_template(client.get("ssl_hostname", None), client), ) def __create_client_wrk(self, client, ssl): - addr = fill_template(client["addr"], client) + addr = self.__get_server_addr(client) wrk = wrk_client.Wrk(id_=client["id"], server_addr=addr, ssl=ssl) wrk.set_script(client["id"] + "_script", content="") return wrk @@ -221,14 +221,25 @@ def __create_client_external(self, client_descr): def __create_client_curl(self, client, interface): # extract arguments that are supported by cURL client kwargs = {k: client[k] for k in curl_client.CurlArguments.get_arg_names() if k in client} - kwargs["addr"] = fill_template( - client.get("addr", "${tempesta_ip}"), client # Address is Tempesta IP by default - ) + kwargs["addr"] = self.__get_server_addr(client) kwargs["cmd_args"] = fill_template(client.get("cmd_args", ""), client) kwargs.setdefault("curl_iface", interface) curl = curl_client.CurlClient(**kwargs) return curl + @staticmethod + def __get_server_addr(client: dict[str, str]) -> str: + is_ipv6 = client.get("is_ipv6", False) + ip_key = "ipv6" if is_ipv6 else "ip" + + proxy_ip = tf_cfg.cfg.get("Proxy", ip_key) + + if proxy_ip: + return proxy_ip + + addr_key = client.get("addr", "${tempesta_ip}") + return fill_template(addr_key, client) + def __create_client(self, client): tf_cfg.populate_properties(client) ssl = client.setdefault("ssl", False)