Test scripts, Github actions, and workflows for the EdgeX Foundry snaps.
The following diagram shows the Snap Testing workflow for building and testing snaps from upstream source code:
---
title: Snap Testing Workflow
---
flowchart LR
subgraph build [Build Job]
builda[[Build Action]] --> Source
--> Build[Build Snap]
--> Snap[/Artifact<br>Snap/]
end
subgraph test [Test Job]
Snap -.-> testa[[Test Action]]
--> gotests[Go Test Suites]
--> Logs[/Artifact<br>Logs/]
end
The Github Workflow configurations (triggers, jobs, etc) are maintained in respective upstream source codes.
The Github Actions and testing suites are maintained in this repository.
For example, this is the workflow of the tests that run on the edgex-go project. The Github Actions used in the workflow are versioned using a major semantic versioning tag. This tag is automatically moved to the latest minor and patch releases of the tests (this repository).
This project has additional workflows such as for running the tests weekly and on local PRs.
This section includes example command to run tests.
Useful go test flags are:
-vis to enable verbose output-failfastmakes the test stop after first failure-timeout 60mextends the timeout to longer than the default 10m-count 1is to avoid Go test caching for example when testing a rebuilt snap
go test -v -failfast -count 1 ./test/suites/device-mqttgo test -p 1 -timeout 60m -failfast -count 1 ./test/suites/...The environment variables are defined in test/utils/env.go
Full config test:
FULL_CONFIG_TEST=true go test -v -failfast -count 1 ./test/suites/device-mqttTesting with a local platform snap:
LOCAL_PLATFORM_SNAP="edgexfoundry_3.1.0-dev.3_amd64.snap" \
go test -v -failfast -count 1 ./test/suites/edgexfoundryTesting with a local service snap:
LOCAL_SERVICE_SNAP="edgex-device-mqtt_2.0.1-dev.15_amd64.snap" \
go test -v -failfast -count 1 ./test/suites/device-mqttTesting with local platform and service snaps:
LOCAL_PLATFORM_SNAP="edgexfoundry_3.1.0-dev.3_amd64.snap" \
LOCAL_SERVICE_SNAP="edgex-device-mqtt_2.0.1-dev.15_amd64.snap" \
go test -v -failfast -count 1 ./test/suites/device-mqttTest with skipping the removal of snaps during teardown:
SKIP_TEARDOWN_REMOVAL=true go test -v -failfast -count 1 ./test/suites/Test by revision:
PLATFORM_CHANNEL=4259 go test -v -failfast -count 1 ./test/suites/edgex-no-sec
This requires developer access; see snap install -h for details.
go test -v ./test/suites/edgexfoundry --run=TestCommon
go test -v ./test/suites/edgex-config-provider -run=TestConfigProvider/device-virtual
go test ./test/utils -count=10Refer to edgex-ubuntu-core-testing
This project includes two Github Actions that can be used in workflows to test snaps:
- build: Checkout code, build the snap, and upload snap as build artifact
- test: Download the snap from build artifacts (optional) and run smoke tests
A workflow that uses both the actions from v2 branch may look as follows:
.github/workflows/snap.yml
name: Snap Testing
on:
pull_request:
branches: [ main ]
# allow manual trigger
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Build and upload snap
id: build
uses: canonical/edgex-snap-testing/build@v2
outputs:
snap: ${{steps.build.outputs.snap}}
test:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download and test snap
uses: canonical/edgex-snap-testing/test@v2
with:
name: device-mqtt
snap: ${{needs.build.outputs.snap}}The testing scripts can be located in the ./test/scripts directory.
To create a token for example user:
./test/scripts/login-test-user.shTo create a self-signed TLS certificate and replace the defaults:
./test/scripts/create-tls-certificates.sh