1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import os
- from enum import Enum, auto
- from time import sleep
- import pytest
- import yaml
- from config import NamedTunnelConfig, ProxyDnsConfig, QuickTunnelConfig
- from constants import BACKOFF_SECS, PROXY_DNS_PORT
- from util import LOGGER
- class CfdModes(Enum):
- NAMED = auto()
- QUICK = auto()
- PROXY_DNS = auto()
- @pytest.fixture(scope="session")
- def component_tests_config():
- config_file = os.getenv("COMPONENT_TESTS_CONFIG")
- if config_file is None:
- raise Exception(
- "Need to provide path to config file in COMPONENT_TESTS_CONFIG")
- with open(config_file, 'r') as stream:
- config = yaml.safe_load(stream)
- LOGGER.info(f"component tests base config {config}")
- def _component_tests_config(additional_config={}, cfd_mode=CfdModes.NAMED, run_proxy_dns=True, provide_ingress=True):
- if run_proxy_dns:
- # Regression test for TUN-4177, running with proxy-dns should not prevent tunnels from running.
- # So we run all tests with it.
- additional_config["proxy-dns"] = True
- additional_config["proxy-dns-port"] = PROXY_DNS_PORT
- else:
- additional_config.pop("proxy-dns", None)
- additional_config.pop("proxy-dns-port", None)
- # Allows the ingress rules to be omitted from the provided config
- ingress = []
- if provide_ingress:
- ingress = config['ingress']
- # Provide the hostname to allow routing to the tunnel even if the ingress rule isn't defined in the config
- hostname = config['ingress'][0]['hostname']
- if cfd_mode is CfdModes.NAMED:
- return NamedTunnelConfig(additional_config=additional_config,
- cloudflared_binary=config['cloudflared_binary'],
- tunnel=config['tunnel'],
- credentials_file=config['credentials_file'],
- ingress=ingress,
- hostname=hostname)
- elif cfd_mode is CfdModes.PROXY_DNS:
- return ProxyDnsConfig(cloudflared_binary=config['cloudflared_binary'])
- elif cfd_mode is CfdModes.QUICK:
- return QuickTunnelConfig(additional_config=additional_config, cloudflared_binary=config['cloudflared_binary'])
- else:
- raise Exception(f"Unknown cloudflared mode {cfd_mode}")
- return _component_tests_config
- # This fixture is automatically called before each tests to make sure the previous cloudflared has been shutdown
- @pytest.fixture(autouse=True)
- def wait_previous_cloudflared():
- sleep(BACKOFF_SECS)
|