cloudflared-mirror/component-tests
Sudarsan Reddy 5e212a6bf3 TUN-7360: Add Get Host Details handler in management service
With the management tunnels work, we allow calls to our edge service
   using an access JWT provided by Tunnelstore. Given a connector ID,
   this request is then proxied to the appropriate Cloudflare Tunnel.

   This PR takes advantage of this flow and adds a new host_details
   endpoint. Calls to this endpoint will result in cloudflared gathering
   some details about the host: hostname (os.hostname()) and ip address
   (localAddr in a dial).

   Note that the mini spec lists 4 alternatives and this picks alternative
   3 because:

   1. Ease of implementation: This is quick and non-intrusive to any of our
      code path. We expect to change how connection tracking works and
      regardless of the direction we take, it may be easy to keep, morph
      or throw this away.

   2. The cloudflared part of this round trip takes some time with a
      hostname call and a dial. But note that this is off the critical path
      and not an API that will be exercised often.
2023-04-18 09:54:54 +00:00
..
.gitignore TUN-4055: Skeleton for component tests 2021-03-08 11:08:34 +00:00
README.md TUN-9999: Remove classic tunnel component tests 2023-03-30 15:07:14 +00:00
cli.py TUN-7360: Add Get Host Details handler in management service 2023-04-18 09:54:54 +00:00
config.py TUN-7259: Add warning for missing ingress rules 2023-03-10 01:49:54 +00:00
config.yaml TUN-7360: Add Get Host Details handler in management service 2023-04-18 09:54:54 +00:00
conftest.py TUN-7259: Add warning for missing ingress rules 2023-03-10 01:49:54 +00:00
constants.py TUN-7360: Add Get Host Details handler in management service 2023-04-18 09:54:54 +00:00
requirements.txt TUN-4125: Change component tests to run in CI with its own dedicated resources 2021-03-26 11:41:56 +00:00
setup.py TUN-9999: Remove classic tunnel component tests 2023-03-30 15:07:14 +00:00
test_config.py TUN-4050: Add component tests to assert reconnect behavior 2021-03-12 09:29:29 +00:00
test_edge_discovery.py TUN-6010: Add component tests for --edge-ip-version 2022-06-23 16:55:03 +00:00
test_logging.py TUN-6741: ICMP proxy tries to listen on specific IPv4 & IPv6 when possible 2022-09-26 11:37:08 +01:00
test_pq.py TUN-6810: Add component test for post-quantum 2022-09-29 09:22:43 -07:00
test_proxy_dns.py TUN-7065: Remove classic tunnel creation 2023-02-06 18:19:22 +00:00
test_quicktunnels.py TUN-7275: Make QuickTunnels only use a single connection to the edge 2023-03-13 15:32:46 +00:00
test_reconnect.py TUN-7065: Remove classic tunnel creation 2023-02-06 18:19:22 +00:00
test_service.py TUN-6010: Add component tests for --edge-ip-version 2022-06-23 16:55:03 +00:00
test_termination.py TUN-5600: Add coverage to component tests for various transports 2022-01-06 10:09:17 +00:00
test_token.py TUN-5915: New cloudflared command to allow to retrieve the token credentials for a Tunnel 2022-03-23 10:35:16 +00:00
test_tunnel.py TUN-7360: Add Get Host Details handler in management service 2023-04-18 09:54:54 +00:00
util.py TUN-7360: Add Get Host Details handler in management service 2023-04-18 09:54:54 +00:00

README.md

Requirements

  1. Python 3.7 or later with packages in the given requirements.txt

    • E.g. with conda:
    • conda create -n component-tests python=3.7
    • conda activate component-tests
    • pip3 install -r requirements.txt
  2. Create a config yaml file, for example:

cloudflared_binary: "cloudflared"
tunnel: "3d539f97-cd3a-4d8e-c33b-65e9099c7a8d"
credentials_file: "/Users/tunnel/.cloudflared/3d539f97-cd3a-4d8e-c33b-65e9099c7a8d.json"
origincert: "/Users/tunnel/.cloudflared/cert.pem"
ingress:
- hostname: named-tunnel-component-tests.example.com
  service: hello_world
- service: http_status:404
  1. Route hostname to the tunnel. For the example config above, we can do that via
   cloudflared tunnel route dns 3d539f97-cd3a-4d8e-c33b-65e9099c7a8d named-tunnel-component-tests.example.com
  1. Turn on linter If you are using Visual Studio, follow https://code.visualstudio.com/docs/python/linting to turn on linter.

  2. Turn on formatter If you are using Visual Studio, follow https://code.visualstudio.com/docs/python/editing#_formatting to turn on formatter and https://marketplace.visualstudio.com/items?itemName=cbrevik.toggle-format-on-save to turn on format on save.

  3. If you have cloudflared running as a service on your machine, you can either stop the service or ignore the service tests via --ignore test_service.py

How to run

Specify path to config file via env var COMPONENT_TESTS_CONFIG. This is required.

All tests

Run pytest inside this(component-tests) folder

Specific files

Run pytest <file 1 name>.py <file 2 name>.py

Specific tests

Run pytest file.py -k <test 1 name> -k <test 2 name>

Live Logging

Running with -o log_cli=true outputs logging to CLI as the tests are. By default the log level is WARN. --log-cli-level control logging level. For example, to log at info level, run pytest -o log_cli=true --log-cli-level=INFO. See https://docs.pytest.org/en/latest/logging.html#live-logs for more documentation on logging.