From 4036bc585bfaa25106d78c498d2d422f686bc507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Bedi?= Date: Wed, 19 Mar 2025 14:04:52 +0100 Subject: [PATCH] Add compatibility workflows and integration tests (#1991) Fixes #1986 Fixes #1994 - Updated .gitignore to include SSL certificate files. - Introduced new GitHub Actions workflows for testing compatibility with Zabbix versions 5.0, 6.0, 7.0, and 7.2. - Added integration tests for Zabbix API for each version, ensuring proper authentication and API version handling. - Updated Docker Compose files to support SSL configuration for Zabbix web services. - Removed deprecated default Docker Compose and bootstrap files. - Removed devenv for version 6.2. --- .changeset/purple-lions-join.md | 5 + .github/workflows/compatibility-50.yml | 35 ++ .github/workflows/compatibility-60.yml | 35 ++ .github/workflows/compatibility-70.yml | 35 ++ .github/workflows/compatibility-72.yml | 35 ++ .gitignore | 4 + devenv/default/Dockerfile | 15 - devenv/default/bootstrap/Dockerfile | 17 - devenv/default/bootstrap/bootstrap_config.py | 80 ---- devenv/default/bootstrap/zbx_export_hosts.xml | 432 ------------------ devenv/default/docker-compose.yml | 123 ----- devenv/nginx/.htpasswd | 1 + devenv/nginx/default.conf | 29 ++ devenv/zabbix50/docker-compose.yml | 47 +- devenv/zabbix60/docker-compose.yml | 25 +- devenv/zabbix62/bootstrap/Dockerfile | 17 - devenv/zabbix62/bootstrap/bootstrap_config.py | 80 ---- .../zabbix62/bootstrap/zbx_export_hosts.xml | 432 ------------------ devenv/zabbix62/docker-compose.yml | 119 ----- devenv/zabbix70/docker-compose.yml | 25 +- devenv/zabbix72/docker-compose.yml | 23 +- pkg/datasource/datasource.go | 2 +- pkg/zabbixapi/zabbix_api.go | 13 +- .../zabbix_api_50_integration_test.go | 148 ++++++ .../zabbix_api_60_integration_test.go | 147 ++++++ .../zabbix_api_70_integration_test.go | 149 ++++++ .../zabbix_api_72_integration_test.go | 161 +++++++ 27 files changed, 884 insertions(+), 1350 deletions(-) create mode 100644 .changeset/purple-lions-join.md create mode 100644 .github/workflows/compatibility-50.yml create mode 100644 .github/workflows/compatibility-60.yml create mode 100644 .github/workflows/compatibility-70.yml create mode 100644 .github/workflows/compatibility-72.yml delete mode 100644 devenv/default/Dockerfile delete mode 100644 devenv/default/bootstrap/Dockerfile delete mode 100644 devenv/default/bootstrap/bootstrap_config.py delete mode 100644 devenv/default/bootstrap/zbx_export_hosts.xml delete mode 100644 devenv/default/docker-compose.yml create mode 100644 devenv/nginx/.htpasswd create mode 100644 devenv/nginx/default.conf delete mode 100644 devenv/zabbix62/bootstrap/Dockerfile delete mode 100644 devenv/zabbix62/bootstrap/bootstrap_config.py delete mode 100644 devenv/zabbix62/bootstrap/zbx_export_hosts.xml delete mode 100644 devenv/zabbix62/docker-compose.yml create mode 100644 pkg/zabbixapi/zabbix_api_50_integration_test.go create mode 100644 pkg/zabbixapi/zabbix_api_60_integration_test.go create mode 100644 pkg/zabbixapi/zabbix_api_70_integration_test.go create mode 100644 pkg/zabbixapi/zabbix_api_72_integration_test.go diff --git a/.changeset/purple-lions-join.md b/.changeset/purple-lions-join.md new file mode 100644 index 0000000..2d4e554 --- /dev/null +++ b/.changeset/purple-lions-join.md @@ -0,0 +1,5 @@ +--- +'grafana-zabbix': patch +--- + +Fix: Basic authentication in zabbix <7.2 diff --git a/.github/workflows/compatibility-50.yml b/.github/workflows/compatibility-50.yml new file mode 100644 index 0000000..5268d22 --- /dev/null +++ b/.github/workflows/compatibility-50.yml @@ -0,0 +1,35 @@ +name: zabbix_50 +run-name: Compatibility with Zabbix 5.0 test + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +jobs: + compatibility-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5.3.0 + + - name: Start Zabbix environment + run: | + docker compose -f devenv/zabbix50/docker-compose.yml up -d + # Wait for Zabbix to be ready + sleep 30 + + - name: Run integration tests + env: + INTEGRATION_TEST50: 'true' + ZABBIX_URL: 'https://localhost/api_jsonrpc.php' + ZABBIX_USER: 'Admin' + ZABBIX_PASSWORD: 'zabbix' + run: go test -v ./pkg/zabbixapi/... + + - name: Cleanup + if: always() + run: docker compose -f devenv/zabbix50/docker-compose.yml down -v diff --git a/.github/workflows/compatibility-60.yml b/.github/workflows/compatibility-60.yml new file mode 100644 index 0000000..874a302 --- /dev/null +++ b/.github/workflows/compatibility-60.yml @@ -0,0 +1,35 @@ +name: zabbix_60 +run-name: Compatibility with Zabbix 6.0 test + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +jobs: + compatibility-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5.3.0 + + - name: Start Zabbix environment + run: | + docker compose -f devenv/zabbix60/docker-compose.yml up -d + # Wait for Zabbix to be ready + sleep 30 + + - name: Run integration tests + env: + INTEGRATION_TEST60: 'true' + ZABBIX_URL: 'https://localhost/api_jsonrpc.php' + ZABBIX_USER: 'Admin' + ZABBIX_PASSWORD: 'zabbix' + run: go test -v ./pkg/zabbixapi/... + + - name: Cleanup + if: always() + run: docker compose -f devenv/zabbix60/docker-compose.yml down -v diff --git a/.github/workflows/compatibility-70.yml b/.github/workflows/compatibility-70.yml new file mode 100644 index 0000000..a554d85 --- /dev/null +++ b/.github/workflows/compatibility-70.yml @@ -0,0 +1,35 @@ +name: zabbix_70 +run-name: Compatibility with Zabbix 7.0 test + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +jobs: + compatibility-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5.3.0 + + - name: Start Zabbix environment + run: | + docker compose -f devenv/zabbix70/docker-compose.yml up -d + # Wait for Zabbix to be ready + sleep 30 + + - name: Run integration tests + env: + INTEGRATION_TEST70: 'true' + ZABBIX_URL: 'https://localhost/api_jsonrpc.php' + ZABBIX_USER: 'Admin' + ZABBIX_PASSWORD: 'zabbix' + run: go test -v ./pkg/zabbixapi/... + + - name: Cleanup + if: always() + run: docker compose -f devenv/zabbix70/docker-compose.yml down -v diff --git a/.github/workflows/compatibility-72.yml b/.github/workflows/compatibility-72.yml new file mode 100644 index 0000000..3c4b7d0 --- /dev/null +++ b/.github/workflows/compatibility-72.yml @@ -0,0 +1,35 @@ +name: zabbix_72 +run-name: Compatibility with Zabbix 7.2 test + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +jobs: + compatibility-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5.3.0 + + - name: Start Zabbix environment + run: | + docker compose -f devenv/zabbix72/docker-compose.yml up -d + # Wait for Zabbix to be ready + sleep 30 + + - name: Run integration tests + env: + INTEGRATION_TEST72: 'true' + ZABBIX_URL: 'http://localhost:8188/api_jsonrpc.php' + ZABBIX_USER: 'Admin' + ZABBIX_PASSWORD: 'zabbix' + run: go test -v ./pkg/zabbixapi/... + + - name: Cleanup + if: always() + run: docker compose -f devenv/zabbix72/docker-compose.yml down -v diff --git a/.gitignore b/.gitignore index 3724c0b..a116a3e 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,7 @@ alexanderzobnin-zabbix-app.zip public/css/*.min.css provisioning/ + +# SSL certificates +devenv/nginx/nginx.crt +devenv/nginx/nginx.key diff --git a/devenv/default/Dockerfile b/devenv/default/Dockerfile deleted file mode 100644 index 2441df1..0000000 --- a/devenv/default/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -ARG grafana_version=latest - -FROM grafana/grafana:${grafana_version} - -# Make it as simple as possible to access the grafana instance for development purposes -# Do NOT enable these settings in a public facing / production grafana instance -ENV GF_AUTH_ANONYMOUS_ORG_ROLE "Admin" -ENV GF_AUTH_ANONYMOUS_ENABLED "true" -ENV GF_AUTH_BASIC_ENABLED "false" -# Set development mode so plugins can be loaded without the need to sign -ENV GF_DEFAULT_APP_MODE "development" - -# Inject livereload script into grafana index.html -USER root -RUN sed -i 's/<\/body><\/html>/