123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/usr/bin/env python
- import socket
- from time import sleep
- import constants
- from conftest import CfdModes
- from util import start_cloudflared, wait_tunnel_ready, check_tunnel_not_connected
- # Sanity checks that test that we only run Proxy DNS and Tunnel when we really expect them to be there.
- class TestProxyDns:
- def test_proxy_dns_with_named_tunnel(self, tmp_path, component_tests_config):
- run_test_scenario(tmp_path, component_tests_config, CfdModes.NAMED, run_proxy_dns=True)
- def test_proxy_dns_alone(self, tmp_path, component_tests_config):
- run_test_scenario(tmp_path, component_tests_config, CfdModes.PROXY_DNS, run_proxy_dns=True)
- def test_named_tunnel_alone(self, tmp_path, component_tests_config):
- run_test_scenario(tmp_path, component_tests_config, CfdModes.NAMED, run_proxy_dns=False)
- def run_test_scenario(tmp_path, component_tests_config, cfd_mode, run_proxy_dns):
- expect_proxy_dns = run_proxy_dns
- expect_tunnel = False
- if cfd_mode == CfdModes.NAMED:
- expect_tunnel = True
- pre_args = ["tunnel", "--ha-connections", "1"]
- args = ["run"]
- elif cfd_mode == CfdModes.PROXY_DNS:
- expect_proxy_dns = True
- pre_args = []
- args = ["proxy-dns", "--port", str(constants.PROXY_DNS_PORT)]
- else:
- assert False, f"Unknown cfd_mode {cfd_mode}"
- config = component_tests_config(cfd_mode=cfd_mode, run_proxy_dns=run_proxy_dns)
- with start_cloudflared(tmp_path, config, cfd_pre_args=pre_args, cfd_args=args, new_process=True, capture_output=False):
- if expect_tunnel:
- wait_tunnel_ready()
- else:
- check_tunnel_not_connected()
- verify_proxy_dns(expect_proxy_dns)
- def verify_proxy_dns(should_be_running):
- # Wait for the Proxy DNS listener to come up.
- sleep(constants.BACKOFF_SECS)
- had_failure = False
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- sock.connect(('localhost', constants.PROXY_DNS_PORT))
- sock.send(b"anything")
- except:
- if should_be_running:
- assert False, "Expected Proxy DNS to be running, but it was not."
- had_failure = True
- finally:
- sock.close()
- if not should_be_running and not had_failure:
- assert False, "Proxy DNS should not have been running, but it was."
|