Skip to content

PMM2 Integration Tests #1138

PMM2 Integration Tests

PMM2 Integration Tests #1138

name: pmm2 integration tests pipeline
on:
# run with default inputs
workflow_dispatch:
inputs:
server_image:
description: "pmm-server docker image, default perconalab/pmm-server:dev-latest"
required: false
type: string
client_version:
description: "pmm2-client version Tarball or Dev-latest, default is dev-latest"
required: false
type: string
client_image:
description: "pmm2-client docker image, default perconalab/pmm-client:dev-latest"
required: false
type: string
pmm_qa_branch:
description: "Branch for PMM-QA to checkout"
required: false
type: string
pmm_ui_branch:
description: "Branch for PMM-UI(CLI) tests to checkout"
required: false
type: string
sha:
description: "SHA (leave empty if running manually, default - 'null')"
required: false
type: string
workflow_call:
inputs:
server_image:
description: "pmm-server docker image, default perconalab/pmm-server:dev-latest"
required: false
type: string
client_version:
description: "pmm2-client version Tarball or Dev-latest, default is dev-latest"
required: false
type: string
client_image:
description: "pmm2-client docker image, default perconalab/pmm-client:dev-latest"
required: false
type: string
pmm_qa_branch:
description: "Branch for PMM-QA to checkout"
required: false
type: string
pmm_ui_branch:
description: "Branch for PMM-UI(CLI) tests to checkout"
required: false
type: string
sha:
description: "SHA (leave empty if running manually, default - 'null')"
required: false
type: string
jobs:
cli-tests:
runs-on: ubuntu-latest
timeout-minutes: 40
env:
SERVER_IMAGE: ${{ github.event.inputs.server_image || inputs.server_image || 'perconalab/pmm-server:dev-latest' }}
CLIENT_IMAGE: ${{ github.event.inputs.client_image || inputs.client_image || 'perconalab/pmm-client:dev-latest' }}
CLIENT_VERSION: ${{ github.event.inputs.client_version || inputs.client_version || 'dev-latest' }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PMM_QA_BRANCH: ${{ github.event.inputs.pmm_qa_branch || inputs.pmm_qa_branch || 'main' }}
PMM_UI_BRANCH: ${{ github.event.inputs.pmm_ui_branch || inputs.pmm_ui_branch || 'main' }}
DOCKER_VERSION: ${{ github.event.inputs.server_image || inputs.server_image || 'perconalab/pmm-server:dev-latest' }}
CLIENT_DOCKER_VERSION: ${{ github.event.inputs.client_image || inputs.client_image || 'perconalab/pmm-client:dev-latest' }}
SHA: ${{ github.event.inputs.sha || inputs.sha || github.event.pull_request.head.sha || github.event.pull_request.head.sha || github.sha || 'null' }}
strategy:
fail-fast: false
matrix:
db-type: [ps5.7, ps8, ms8.0, pdpgsql13, pdpgsql14, pdpgsql15, modb4.4, modb5, modb6, help, generic, clientContainer, haproxy, proxysql, remove]
steps:
- name: Create status check
if: ${{ env.SHA != 'null' }}
uses: percona-platform/github-status-action@update-node
continue-on-error: true
with:
authToken: ${{ secrets.GITHUB_TOKEN }}
context: "${{ matrix.db-type }} CLI tests"
description: "Test execution ${{ job.status }}"
state: "pending"
repository: ${{ github.repository }}
target_url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
sha: ${{ env.SHA }}
- name: Checkout PMM-QA tests ${{ env.PMM_QA_BRANCH }} branch
uses: actions/checkout@v3
with:
ref: ${{ env.PMM_QA_BRANCH }}
repository: percona/pmm-qa
path: ./
- name: Checkout PMM UI tests
uses: actions/checkout@v3
with:
ref: ${{ env.PMM_UI_BRANCH }}
repository: percona/pmm-ui-tests
path: ./pmm-ui-tests
- name: Install playwright
working-directory: ./pmm-ui-tests/cli
run: |
npm install
npx playwright install
- name: Setup tools
run: |
npm install -g bats
sudo apt-get install -y apt-transport-https ca-certificates dirmngr ansible libaio1 libaio-dev libnuma-dev libncurses5 socat sysbench
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754
echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \
/etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-client
sudo curl -s https://raw.githubusercontent.com/datacharmer/dbdeployer/master/scripts/dbdeployer-install.sh | bash
wget https://raw.githubusercontent.com/Percona-QA/percona-qa/master/get_download_link.sh
chmod +x get_download_link.sh
- name: Setup PMM2-Server
run: |
docker create -v /srv --name pmm-server-data ${{ env.SERVER_IMAGE }}
docker run -d -p 80:80 -p 443:443 -p 9000:9000 -e PERCONA_TEST_PLATFORM_ADDRESS=https://check-dev.percona.com:443 -e PERCONA_TEST_PLATFORM_PUBLIC_KEY=RWTg+ZmCCjt7O8eWeAmTLAqW+1ozUbpRSKSwNTmO+exlS5KEIPYWuYdX --volumes-from pmm-server-data --name pmm-server --restart always ${{ env.SERVER_IMAGE }}
sleep 30
- name: healthcheck PMM2-server
run: timeout 100 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost/ping)" != "200" ]]; do sleep 5; done' || false
- name: Setup PMM2-Client
run: sudo -E bash -x ./pmm-tests/pmm2-client-setup.sh --pmm_server_ip 127.0.0.1 --client_version ${{ env.CLIENT_VERSION }} --admin_password admin --use_metrics_mode no
- name: Setup npm modules for the integration setup
working-directory: pmm-integration
run: npm ci
- name: Run CLI '--help' tests
if: ${{ matrix.db-type == 'help' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test pmm-ui-tests/cli/tests/help.spec.ts
- name: Run CLI remove tests
if: ${{ matrix.db-type == 'remove' }}
working-directory: ./pmm-ui-tests
run: npx playwright test pmm-ui-tests/cli/tests/remove.spec.ts
- name: Run Setup for ps5.7
working-directory: pmm-integration
if: ${{ matrix.db-type == 'ps5.7' }}
run: |
sudo npx ts-node ./integration-setup.ts --ps-version=5.7 --ci --addclient=ps,1
- name: Run Setup for ps8.0
working-directory: pmm-integration
if: ${{ matrix.db-type == 'ps8' }}
run: |
sudo npx ts-node ./integration-setup.ts --ps-version=8 --ci --addclient=ps,1
- name: Run bats tests for PS
if: ${{ matrix.db-type == 'ps5.7' || matrix.db-type == 'ps8' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test pmm-ui-tests/cli/tests/perconaMySqlServer.spec.ts
- name: Run Setup for pdpgsql 13
working-directory: pmm-integration
if: ${{ matrix.db-type == 'pdpgsql13' }}
run: |
sudo npx ts-node ./integration-setup.ts --ci --addclient=pdpgsql,1 --pdpgsql-version=13
- name: Run Setup for pdpgsql 14
working-directory: pmm-integration
if: ${{ matrix.db-type == 'pdpgsql14' }}
run: |
sudo npx ts-node ./integration-setup.ts --ci --addclient=pdpgsql,1 --pdpgsql-version=14
- name: Run Setup for pdpgsql 15.0
working-directory: pmm-integration
if: ${{ matrix.db-type == 'pdpgsql15' }}
run: |
sudo npx ts-node ./integration-setup.ts --ci --addclient=pdpgsql,1 --pdpgsql-version=15.0
- name: Run CLI tests for PDPGSQL
if: ${{ matrix.db-type == 'pdpgsql13' || matrix.db-type == 'pdpgsql14' || matrix.db-type == 'pdpgsql15' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test postgreSql
- name: Run Setup for PSMDB 4.4
working-directory: pmm-integration
if: ${{ matrix.db-type == 'modb4.4' }}
run: sudo npx ts-node ./integration-setup.ts --ci --addclient=modb,1 --mo-version=4.4
- name: Run Setup for PSMDB 5
working-directory: pmm-integration
if: ${{ matrix.db-type == 'modb5' }}
run: sudo npx ts-node ./integration-setup.ts --ci --addclient=modb,1 --mo-version=5
- name: Run Setup for PSMDB 6
working-directory: pmm-integration
if: ${{ matrix.db-type == 'modb6' }}
run: sudo npx ts-node ./integration-setup.ts --ci --addclient=modb,1 --mo-version=6
- name: Run CLI tests for PSMDB
if: ${{ matrix.db-type == 'modb6' || matrix.db-type == 'modb5' || matrix.db-type == 'modb4.4' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test pmm-ui-tests/cli/tests/mongoDb-psmdb.spec.ts
# TODO: Add setup for the official MongoDB and run "npx playwright test pmm-ui-tests/cli/tests/mongoDb.spec.ts"
- name: Run Client Container Setup
if: ${{ matrix.db-type == 'clientContainer' }}
run: |
sudo -E bash -x ./pmm-tests/pmm-framework.sh --setup-pmm-client-docker --pmm2
- name: Run CLI tests for Generic Scenarios
if: ${{ matrix.db-type == 'generic' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test generic unregister
- name: Run bats tests for generic Scenarios
if: ${{ matrix.db-type == 'generic' }}
run: |
sudo bats ./pmm-tests/pmm-2-0-bats-tests/generic-tests.bats
- name: Run CLI tests for PMM Client Docker Container
if: ${{ matrix.db-type == 'clientContainer' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test pmm-client-docker
- name: Run Setup for HAPROXY
if: ${{ matrix.db-type == 'haproxy' }}
run: |
export CLIENT_VERSION=${{ env.CLIENT_VERSION }}
export CLIENT_DOCKER_VERSION=${{ env.CLIENT_DOCKER_VERSION }}
sudo -E bash -x ./pmm-tests/pmm-framework.sh --addclient=haproxy,1 --pmm2
- name: Run CLI tests for Client Container Scenarios
if: ${{ matrix.db-type == 'haproxy' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test haproxy
- name: Run Setup for ProxySQL
if: ${{ matrix.db-type == 'proxysql' }}
run: sudo -E bash -x ./pmm-tests/pmm-framework.sh --addclient=pxc,1 --pmm2 --pxc-version=5.7
- name: Run CLI tests for ProxySQL
if: ${{ matrix.db-type == 'proxysql' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test proxySql
- name: Run Setup for MySQL 8.0
if: ${{ matrix.db-type == 'ms8.0' }}
run: sudo -E bash -x ./pmm-tests/pmm-framework.sh --addclient=ms,1 --pmm2 --ms-version=8.0
- name: Run MySQL specific CLI tests
if: ${{ matrix.db-type == 'ms8.0' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test pmm-ui-tests/cli/tests/mysql.spec.ts
- name: Run CLI tests for MySQL Tests
if: ${{ matrix.db-type == 'ms8.0' }}
working-directory: ./pmm-ui-tests/cli
run: npx playwright test pmm-ui-tests/cli/tests/mysql-conf-file.spec.ts
- name: Generate and Attach the report
if: ${{ always() }}
uses: actions/upload-artifact@v3
with:
name: "report-${{ matrix.db-type }}"
path: ./pmm-ui-tests/cli/test-report
- name: Create status check
if: ${{ always() }}
uses: percona-platform/github-status-action@update-node
continue-on-error: true
with:
authToken: ${{ secrets.GITHUB_TOKEN }}
context: "${{ matrix.db-type }} CLI tests"
description: "Test execution ${{ job.status }}"
state: ${{ job.status }}
repository: ${{ github.repository }}
target_url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
sha: ${{ env.SHA }}