mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-03-22 05:41:54 +00:00
This adds an integration test that downloads a 10MB file from a server and simulates the client roaming to another network while the download is active. We use a DNS resource for this to ensure it also doesn't take too long in that case. DNS resources are what most users will be using and we clear some internal DNS caches on connection failures. Hence, using a DNS resource here is a somewhat roundabout way to test that we aren't failing and re-establishing the connection but migrate it to a new network path.
142 lines
4.5 KiB
YAML
142 lines
4.5 KiB
YAML
name: Integration Tests
|
|
run-name: Triggered from ${{ github.event_name }} by ${{ github.actor }}
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
domain_image:
|
|
required: false
|
|
type: string
|
|
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/domain'
|
|
domain_tag:
|
|
required: false
|
|
type: string
|
|
default: ${{ github.sha }}
|
|
api_image:
|
|
required: false
|
|
type: string
|
|
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/api'
|
|
api_tag:
|
|
required: false
|
|
type: string
|
|
default: ${{ github.sha }}
|
|
web_image:
|
|
required: false
|
|
type: string
|
|
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/web'
|
|
web_tag:
|
|
required: false
|
|
type: string
|
|
default: ${{ github.sha }}
|
|
elixir_image:
|
|
required: false
|
|
type: string
|
|
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/elixir'
|
|
elixir_tag:
|
|
required: false
|
|
type: string
|
|
default: ${{ github.sha }}
|
|
relay_image:
|
|
required: false
|
|
type: string
|
|
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/debug/relay'
|
|
relay_tag:
|
|
required: false
|
|
type: string
|
|
default: ${{ github.sha }}
|
|
gateway_image:
|
|
required: false
|
|
type: string
|
|
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/debug/gateway'
|
|
gateway_tag:
|
|
required: false
|
|
type: string
|
|
default: ${{ github.sha }}
|
|
client_image:
|
|
required: false
|
|
type: string
|
|
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/debug/client'
|
|
client_tag:
|
|
required: false
|
|
type: string
|
|
default: ${{ github.sha }}
|
|
http_test_server_image:
|
|
required: false
|
|
type: string
|
|
default: 'us-east1-docker.pkg.dev/firezone-staging/firezone/debug/http-test-server'
|
|
http_test_server_tag:
|
|
required: false
|
|
type: string
|
|
default: ${{ github.sha }}
|
|
|
|
jobs:
|
|
integration-tests:
|
|
name: integration-tests-${{ matrix.test }}
|
|
runs-on: ubuntu-22.04
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|
|
pull-requests: write
|
|
env:
|
|
DOMAIN_IMAGE: ${{ inputs.domain_image }}
|
|
DOMAIN_TAG: ${{ inputs.domain_tag }}
|
|
API_IMAGE: ${{ inputs.api_image }}
|
|
API_TAG: ${{ inputs.api_tag }}
|
|
WEB_IMAGE: ${{ inputs.web_image }}
|
|
WEB_TAG: ${{ inputs.web_tag }}
|
|
RELAY_IMAGE: ${{ inputs.relay_image }}
|
|
RELAY_TAG: ${{ inputs.relay_tag }}
|
|
GATEWAY_IMAGE: ${{ inputs.gateway_image }}
|
|
GATEWAY_TAG: ${{ inputs.gateway_tag }}
|
|
CLIENT_IMAGE: ${{ inputs.client_image }}
|
|
CLIENT_TAG: ${{ inputs.client_tag }}
|
|
ELIXIR_IMAGE: ${{ inputs.elixir_image }}
|
|
ELIXIR_TAG: ${{ inputs.elixir_tag }}
|
|
HTTP_TEST_SERVER_IMAGE: ${{ inputs.http_test_server_image }}
|
|
HTTP_TEST_SERVER_TAG: ${{ inputs.http_test_server_tag }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
test: [
|
|
direct-curl-portal-restart,
|
|
relayed-curl-portal-restart,
|
|
relayed-curl-relay-restart,
|
|
direct-curl-portal-down,
|
|
relayed-curl-portal-down,
|
|
direct-curl-portal-relay-down,
|
|
direct-download-roaming-network,
|
|
dns-etc-resolvconf,
|
|
dns-nm,
|
|
systemd/dns-systemd-resolved,
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: ./.github/actions/gcp-docker-login
|
|
id: login
|
|
with:
|
|
project: firezone-staging
|
|
- name: Seed database
|
|
run: docker compose run elixir /bin/sh -c 'cd apps/domain && mix ecto.seed'
|
|
- name: Start docker compose in the background
|
|
run: |
|
|
# Start one-by-one to avoid variability in service startup order
|
|
docker compose up -d dns.httpbin httpbin download.httpbin
|
|
docker compose up -d api web domain --no-build
|
|
docker compose up -d relay --no-build
|
|
docker compose up -d gateway --no-build
|
|
docker compose up -d client --no-build
|
|
|
|
- run: ./scripts/tests/${{ matrix.test }}.sh
|
|
|
|
- name: Show Client logs
|
|
if: "!cancelled()"
|
|
run: docker compose logs client
|
|
- name: Show Relay logs
|
|
if: "!cancelled()"
|
|
run: docker compose logs relay
|
|
- name: Show Gateway logs
|
|
if: "!cancelled()"
|
|
run: docker compose logs gateway
|
|
- name: Show API logs
|
|
if: "!cancelled()"
|
|
run: docker compose logs api
|