Run providers tests in different CI jobs

This commit is contained in:
Julien Cabieces 2021-03-17 13:20:14 +01:00
parent a6644f4b75
commit 1821d7af47
15 changed files with 412 additions and 214 deletions

View File

@ -46,11 +46,6 @@ IF(NOT WIN32)
SET(BoldWhite "${Esc}[1;37m")
ENDIF(NOT WIN32)
# Requires a track on the CDash server
#ctest_start(Experimental TRACK Travis)
ctest_start(Experimental)
ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE BUILDRES NUMBER_WARNINGS NUMWARN NUMBER_ERRORS NUMERR)
# Create link to test results
# CDash on OTB requires the date to be set for the search to work (used to be UTC-6, seems to be UTC now)
SET(ENV{TZ} "UTC")
@ -58,42 +53,3 @@ EXECUTE_PROCESS(COMMAND date +%Y-%m-%d OUTPUT_VARIABLE CDASH_DATE)
SET(RESULT_LINK "http://cdash.orfeo-toolbox.org/index.php?project=QGIS&filtercount=1&showfilters=1&field1=buildname/string&compare1=63&value1=$ENV{CTEST_BUILD_NAME}&date=${CDASH_DATE}")
EXECUTE_PROCESS(COMMAND curl --data-urlencode "url=${RESULT_LINK}" -s http://tinyurl.com/api-create.php
OUTPUT_VARIABLE SHORTURL)
SET(IGNORE_BUILD_FAILURES $ENV{IGNORE_BUILD_FAILURES})
IF(NOT IGNORE_BUILD_FAILURES)
IF(NOT ${BUILDRES} EQUAL 0 OR NOT ${NUMERR} EQUAL 0)
ctest_submit (RETRY_COUNT 3 RETRY_DELAY 30)
MESSAGE("")
MESSAGE(" ${Yellow}Test results submitted to:${ColorReset} ${SHORTURL}")
MESSAGE("")
MESSAGE( FATAL_ERROR " ${Red}Build failed. Not running tests.${ColorReset}" )
MESSAGE("")
ENDIF(NOT ${BUILDRES} EQUAL 0 OR NOT ${NUMERR} EQUAL 0)
ENDIF(NOT IGNORE_BUILD_FAILURES)
ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" PARALLEL_LEVEL ${PARALLEL_LEVEL} RETURN_VALUE TESTRES)
IF(NOT ${NUMWARN} EQUAL 0 OR NOT ${TESTRES} EQUAL 0)
ctest_submit (RETRY_COUNT 3 RETRY_DELAY 30)
MESSAGE("")
MESSAGE(" ${Yellow}Test results submitted to:${ColorReset} ${SHORTURL}" )
MESSAGE("")
SET(LEVEL "")
IF(NOT ${TESTRES} EQUAL 0)
SET(TESTRES_MESSAGE " Tests failed.")
SET(LEVEL FATAL_ERROR)
ENDIF(NOT ${TESTRES} EQUAL 0)
IF(NOT ${NUMWARN} EQUAL 0)
SET(WARNING_MESSAGE " Build warnings found.")
IF(NOT IGNORE_BUILD_FAILURES)
SET(LEVEL FATAL_ERROR)
ENDIF(NOT IGNORE_BUILD_FAILURES)
ENDIF(NOT ${NUMWARN} EQUAL 0)
MESSAGE( ${LEVEL} " ${Red}${TESTRES_MESSAGE} ${WARNING_MESSAGE}${ColorReset}" )
ENDIF(NOT ${NUMWARN} EQUAL 0 OR NOT ${TESTRES} EQUAL 0)
IF(NOT ${TESTRES} EQUAL 0)
MESSAGE("")
MESSAGE(" ${BoldGreen}Success${ColorReset}")
MESSAGE(" ${Green}All tests passed successfully.${ColorReset}")
MESSAGE("")
MESSAGE("")
ENDIF(NOT ${TESTRES} EQUAL 0)

27
.ci/config_build.ctest Normal file
View File

@ -0,0 +1,27 @@
include(${CMAKE_CURRENT_LIST_DIR}/config.ctest)
# Requires a track on the CDash server
ctest_start(Experimental)
ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE BUILDRES NUMBER_WARNINGS NUMWARN NUMBER_ERRORS NUMERR)
SET(IGNORE_BUILD_FAILURES $ENV{IGNORE_BUILD_FAILURES})
IF(NOT IGNORE_BUILD_FAILURES)
IF(NOT ${BUILDRES} EQUAL 0 OR NOT ${NUMERR} EQUAL 0)
ctest_submit (RETRY_COUNT 3 RETRY_DELAY 30)
MESSAGE("")
MESSAGE(" ${Yellow}Test results submitted to:${ColorReset} ${SHORTURL}")
MESSAGE("")
MESSAGE( FATAL_ERROR " ${Red}Build failed. Not running tests.${ColorReset}" )
MESSAGE("")
ENDIF(NOT ${BUILDRES} EQUAL 0 OR NOT ${NUMERR} EQUAL 0)
ENDIF(NOT IGNORE_BUILD_FAILURES)
IF(${BUILDRES} EQUAL 0 OR ${NUMERR} EQUAL 0)
MESSAGE("")
MESSAGE(" ${BoldGreen}Success${ColorReset}")
MESSAGE(" ${Green}Build passed successfully.${ColorReset}")
MESSAGE("")
MESSAGE("")
ENDIF(${BUILDRES} EQUAL 0 OR ${NUMERR} EQUAL 0)

26
.ci/config_test.ctest Normal file
View File

@ -0,0 +1,26 @@
include(${CMAKE_CURRENT_LIST_DIR}/config.ctest)
# Requires a track on the CDash server
ctest_start(Experimental)
ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" PARALLEL_LEVEL ${PARALLEL_LEVEL} RETURN_VALUE TESTRES)
IF(NOT ${TESTRES} EQUAL 0)
ctest_submit (RETRY_COUNT 3 RETRY_DELAY 30)
MESSAGE("")
MESSAGE(" ${Yellow}Test results submitted to:${ColorReset} ${SHORTURL}" )
MESSAGE("")
SET(LEVEL "")
IF(NOT ${TESTRES} EQUAL 0)
SET(TESTRES_MESSAGE " Tests failed.")
SET(LEVEL FATAL_ERROR)
ENDIF(NOT ${TESTRES} EQUAL 0)
MESSAGE( ${LEVEL} " ${Red}${TESTRES_MESSAGE} ${ColorReset}" )
ENDIF(NOT ${TESTRES} EQUAL 0)
IF(NOT ${TESTRES} EQUAL 0)
MESSAGE("")
MESSAGE(" ${BoldGreen}Success${ColorReset}")
MESSAGE(" ${Green}All tests passed successfully.${ColorReset}")
MESSAGE("")
MESSAGE("")
ENDIF(NOT ${TESTRES} EQUAL 0)

View File

@ -0,0 +1,22 @@
version: '3'
services:
oracle:
image: oslandia/oracle-slim-for-qgis:18.4.0-xe
environment:
- ORACLE_SID=XE
- ORACLE_PWD=adminpass
- ORACLE_PDB=ORCLPDBTEST
- ORACLE_CHARACTERSET=AL32UTF8
ports:
- 1521:1521
qgis-deps:
tty: true
image: qgis/qgis3-build-deps-bin-only:${DOCKER_TAG}
volumes:
- ${GH_WORKSPACE}:/root/QGIS
links:
- oracle
env_file:
- docker-variables.env

View File

@ -0,0 +1,22 @@
version: '3'
services:
postgres:
build:
dockerfile: Dockerfile-postgis
context: ../tests/testdata
environment:
- ALLOW_IP_RANGE="172.18.0.0/16"
# The following files are added in Dockerfile-postgis
- SSL_CERT_FILE=/etc/ssl/certs/postgres.crt
- SSL_KEY_FILE=/etc/ssl/private/postgres.key
- SSL_CA_FILE=/etc/ssl/certs/qgis_ca.crt
qgis-deps:
tty: true
image: qgis/qgis3-build-deps-bin-only:${DOCKER_TAG}
volumes:
- ${GH_WORKSPACE}:/root/QGIS
links:
- postgres
env_file:
- docker-variables.env

View File

@ -1,26 +1,5 @@
version: '3'
services:
postgres:
build:
dockerfile: Dockerfile-postgis
context: ../tests/testdata
environment:
- ALLOW_IP_RANGE="172.18.0.0/16"
# The following files are added in Dockerfile-postgis
- SSL_CERT_FILE=/etc/ssl/certs/postgres.crt
- SSL_KEY_FILE=/etc/ssl/private/postgres.key
- SSL_CA_FILE=/etc/ssl/certs/qgis_ca.crt
# oracle:
# image: oslandia/oracle-for-qgis-tests-configured:18.4.0-xe
# environment:
# - ORACLE_SID=XE
# - ORACLE_PWD=adminpass
# - ORACLE_PDB=ORCLPDBTEST
# - ORACLE_CHARACTERSET=AL32UTF8
# ports:
# - 1521:1521
# Proving very fragile!
# mssql:
@ -31,12 +10,10 @@ services:
qgis-deps:
tty: true
image: qgis_image
image: qgis/qgis3-build-deps-bin-only:${DOCKER_TAG}
volumes:
- ${GH_WORKSPACE}:/root/QGIS
links:
- postgres
# - oracle
# links:
# - mssql
env_file:
- docker-variables.env

View File

@ -5,11 +5,52 @@ set -e
# Temporarily uncomment to debug ccache issues
# cat /tmp/cache.debug
##################################
# Prepare HANA database connection
##################################
if [ $# -eq 1 ] && [ $1 = "HANA" ]; then
LABELS_TO_RUN="HANA"
RUN_HANA=YES
elif [ $# -eq 1 ] && [ $1 = "POSTGRES" ]; then
LABELS_TO_RUN="POSTGRES"
RUN_POSTGRES=YES
elif [ $# -eq 1 ] && [ $1 = "ORACLE" ]; then
LABELS_TO_RUN="ORACLE"
RUN_ORACLE=YES
elif [ $# -eq 1 ] && [ $1 = "SQLSERVER" ]; then
LABELS_TO_RUN="SQLSERVER"
RUN_SQLSERVER=YES
elif [ $# -eq 1 ] && [ $1 = "ALL_BUT_PROVIDERS" ]; then
LABELS_TO_EXCLUDE="HANA|POSTGRES|ORACLE|SQLSERVER"
elif [ $# -gt 0 ] && [ $1 != "ALL" ]; then
echo "Invalid argument, expected values: ALL, ALL_BUT_PROVIDERS, POSTGRES, HANA, ORACLE, SQLSERVER"
exit 1
else
RUN_HANA=YES
RUN_POSTGRES=YES
RUN_ORACLE=YES
RUN_SQLSERVER=YES
fi
if [ -n "$LABELS_TO_RUN" ]; then
echo "Only following test labels will be run: $LABELS_TO_RUN"
CTEST_OPTIONS="-L $LABELS_TO_RUN"
fi
if [ -n "$LABELS_TO_EXCLUDE" ]; then
echo "Following test labels will be excluded: $LABELS_TO_EXCLUDE"
CTEST_OPTIONS="$CTEST_OPTIONS -LE $LABELS_TO_EXCLUDE"
fi
if [ ${RUN_HANA:-"NO"} == "YES" ]; then
##################################
# Prepare HANA database connection
##################################
if [ ${HANA_TESTS_ENABLED:-"OFF"} == "ON" ] ; then
echo "::group::hana"
echo "${bold}Load HANA database...${endbold}"
@ -32,90 +73,104 @@ if [ ${HANA_TESTS_ENABLED:-"OFF"} == "ON" ] ; then
echo "::endgroup::"
fi
############################
# Restore postgres test data
############################
echo "${bold}Load Postgres database...🐘${endbold}"
if [ ${RUN_POSTGRES:-"NO"} == "YES" ]; then
printf "[qgis_test]\nhost=postgres\nport=5432\ndbname=qgis_test\nuser=docker\npassword=docker" > ~/.pg_service.conf
export PGUSER=docker
export PGHOST=postgres
export PGPASSWORD=docker
export PGDATABASE=qgis_test
############################
# Restore postgres test data
############################
echo "${bold}Load Postgres database...🐘${endbold}"
# wait for the DB to be available
echo "Wait a moment while loading PostGreSQL database."
while ! PGPASSWORD='docker' psql -h postgres -U docker -p 5432 -l &> /dev/null
do
printf "🐘"
sleep 1
done
echo " done 🥩"
printf "[qgis_test]\nhost=postgres\nport=5432\ndbname=qgis_test\nuser=docker\npassword=docker" > ~/.pg_service.conf
export PGUSER=docker
export PGHOST=postgres
export PGPASSWORD=docker
export PGDATABASE=qgis_test
pushd /root/QGIS > /dev/null
echo "Restoring postgres test data ..."
/root/QGIS/tests/testdata/provider/testdata_pg.sh
echo "Postgres test data restored ..."
popd > /dev/null # /root/QGIS
# wait for the DB to be available
echo "Wait a moment while loading PostGreSQL database."
while ! PGPASSWORD='docker' psql -h postgres -U docker -p 5432 -l &> /dev/null
do
printf "🐘"
sleep 1
done
echo " done 🥩"
##############################
# Restore Oracle test data
##############################
echo "${bold}Load Oracle database...🙏${endbold}"
export ORACLE_HOST="oracle"
export QGIS_ORACLETEST_DBNAME="${ORACLE_HOST}/XEPDB1"
export QGIS_ORACLETEST_DB="host=${QGIS_ORACLETEST_DBNAME} port=1521 user='QGIS' password='qgis'"
echo "Wait a moment while loading Oracle database."
COUNT=0
while ! echo exit | sqlplus -L SYSTEM/adminpass@$QGIS_ORACLETEST_DBNAME &> /dev/null
do
printf "🙏"
sleep 5
if [[ $(( COUNT++ )) -eq 200 ]]; then
break
fi
done
if [[ ${COUNT} -eq 201 ]]; then
echo "timeout, no oracle, no 🙏"
else
echo " done 👀"
pushd /root/QGIS > /dev/null
/root/QGIS/tests/testdata/provider/testdata_oracle.sh $ORACLE_HOST
echo "Restoring postgres test data ..."
/root/QGIS/tests/testdata/provider/testdata_pg.sh
echo "Postgres test data restored ..."
popd > /dev/null # /root/QGIS
fi
##############################
# Restore SQL Server test data
##############################
if [ ${RUN_ORACLE:-"NO"} == "YES" ]; then
# echo "Importing SQL Server test data..."
##############################
# Restore Oracle test data
##############################
# export SQLUSER=sa
# export SQLHOST=mssql
# export SQLPORT=1433
# export SQLPASSWORD='<YourStrong!Passw0rd>'
# export SQLDATABASE=qgis_test
echo "${bold}Load Oracle database...🙏${endbold}"
# export PATH=$PATH:/opt/mssql-tools/bin
export ORACLE_HOST="oracle"
export QGIS_ORACLETEST_DBNAME="${ORACLE_HOST}/XEPDB1"
export QGIS_ORACLETEST_DB="host=${QGIS_ORACLETEST_DBNAME} port=1521 user='QGIS' password='qgis'"
# pushd /root/QGIS > /dev/null
# /root/QGIS/tests/testdata/provider/testdata_mssql.sh
# popd > /dev/null # /root/QGIS
echo "Wait a moment while loading Oracle database."
COUNT=0
while ! echo exit | sqlplus -L SYSTEM/adminpass@$QGIS_ORACLETEST_DBNAME &> /dev/null
do
printf "🙏"
sleep 5
if [[ $(( COUNT++ )) -eq 40 ]]; then
break
fi
done
if [[ ${COUNT} -eq 41 ]]; then
echo "timeout, no oracle, no 🙏"
else
echo " done 👀"
pushd /root/QGIS > /dev/null
/root/QGIS/tests/testdata/provider/testdata_oracle.sh $ORACLE_HOST
popd > /dev/null # /root/QGIS
fi
# echo "Setting up DSN for test SQL Server"
fi
if [ ${RUN_SQLSERVER:-"NO"} == "YES" ]; then
##############################
# Restore SQL Server test data
##############################
echo "Importing SQL Server test data..."
export SQLUSER=sa
export SQLHOST=mssql
export SQLPORT=1433
export SQLPASSWORD='<YourStrong!Passw0rd>'
export SQLDATABASE=qgis_test
export PATH=$PATH:/opt/mssql-tools/bin
pushd /root/QGIS > /dev/null
/root/QGIS/tests/testdata/provider/testdata_mssql.sh
popd > /dev/null # /root/QGIS
echo "Setting up DSN for test SQL Server"
cat <<EOT > /etc/odbc.ini
[ODBC Data Sources]
testsqlserver = ODBC Driver 17 for SQL Server
[testsqlserver]
Driver = ODBC Driver 17 for SQL Server
Description = Test SQL Server
Server = mssql
EOT
fi
# cat <<EOT > /etc/odbc.ini
# [ODBC Data Sources]
# testsqlserver = ODBC Driver 17 for SQL Server
# [testsqlserver]
# Driver = ODBC Driver 17 for SQL Server
# Description = Test SQL Server
# Server = mssql
# EOT
###########
# Run tests
@ -128,5 +183,5 @@ else
echo "Flaky tests are run!"
fi
echo "List of skipped tests: $EXCLUDE_TESTS"
python3 /root/QGIS/.ci/ctest2ci.py xvfb-run ctest -V -E "${EXCLUDE_TESTS}" -S /root/QGIS/.ci/config.ctest --output-on-failure
python3 /root/QGIS/.ci/ctest2ci.py xvfb-run ctest -V $CTEST_OPTIONS -E "${EXCLUDE_TESTS}" -S /root/QGIS/.ci/config_test.ctest --output-on-failure

View File

@ -1,7 +1,7 @@
ARG UBUNTU_BASE=20.04
FROM ubuntu:${UBUNTU_BASE}
FROM ubuntu:${UBUNTU_BASE} as binary-only
MAINTAINER Denis Rouzaud <denis@opengis.ch>
LABEL Description="Docker container with QGIS dependencies" Vendor="QGIS.org" Version="1.0"
@ -10,72 +10,47 @@ LABEL Description="Docker container with QGIS dependencies" Vendor="QGIS.org" Ve
# && echo "deb-src http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu xenial main" >> /etc/apt/sources.list \
# && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 314DF160 \
RUN apt-get update \
&& apt-get install -y software-properties-common \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
apt-transport-https \
bison \
ca-certificates \
ccache \
clang \
cmake \
curl \
dh-python \
flex \
gdal-bin \
git \
graphviz \
grass-dev \
grass \
libaio1 \
libexiv2-dev \
libexpat1-dev \
libfcgi-dev \
libgdal-dev \
libgeos-dev \
libgsl-dev \
libpdal-dev \
libpq-dev \
libproj-dev \
libprotobuf-dev \
libqca-qt5-2-dev \
libexiv2-27 \
libfcgi0ldbl \
'libgsl23|libgsl23' \
'libprotobuf-lite17|libprotobuf-lite23' \
libqca-qt5-2-plugins \
libqt53dextras5 \
libqt53drender5 \
libqt5concurrent5 \
libqt5opengl5-dev \
libqt5keychain1 \
libqt5positioning5 \
libqt5qml5 \
libqt5quick5 \
libqt5quickcontrols2-5 \
libqt5scintilla2-dev \
libqt5quickwidgets5 \
libqt5serialport5 \
libqt5sql5-odbc \
libqt5sql5-sqlite \
libqt5svg5-dev \
libqt5webkit5-dev \
libqt5xml5 \
libqt5serialport5-dev \
libqwt-qt5-dev \
libspatialindex-dev \
libspatialite-dev \
libsqlite3-dev \
libqt5webkit5 \
libqwt-qt5-6 \
libspatialindex6 \
libsqlite3-mod-spatialite \
libzip-dev \
libzstd-dev \
libzip5 \
lighttpd \
locales \
ninja-build \
pdal \
pkg-config \
poppler-utils \
postgresql-client \
protobuf-compiler \
pyqt5-dev \
pyqt5-dev-tools \
pyqt5.qsci-dev \
python3-all-dev \
python3-dev \
python3-future \
python3-gdal \
python3-mock \
@ -90,22 +65,13 @@ RUN apt-get update \
python3-pyqt5.qtsvg \
python3-pyqt5.qtwebkit \
python3-sip \
python3-sip-dev \
python3-termcolor \
python3-yaml \
qt3d5-dev \
qt3d-assimpsceneimport-plugin \
qt3d-defaultgeometryloader-plugin \
qt3d-gltfsceneio-plugin \
qt3d-scene2d-plugin \
qt5-image-formats-plugins \
qt5keychain-dev \
qtbase5-dev \
qtdeclarative5-dev-tools \
qtpositioning5-dev \
qttools5-dev \
qttools5-dev-tools \
qtbase5-private-dev \
saga \
spawn-fcgi \
supervisor \
@ -116,9 +82,7 @@ RUN apt-get update \
xfonts-base \
xfonts-scalable \
xvfb \
opencl-headers \
ocl-icd-libopencl1 \
ocl-icd-opencl-dev \
&& pip3 install \
psycopg2 \
numpy \
@ -177,6 +141,60 @@ RUN echo "alias python=python3" >> ~/.bash_aliases
RUN curl -k https://www.orfeo-toolbox.org/packages/archives/OTB/OTB-7.1.0-Linux64.run -o /tmp/OTB-Linux64.run && sh /tmp/OTB-Linux64.run --target /opt/otb
ENV OTB_INSTALL_DIR=/opt/otb
FROM binary-only
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
bison \
ccache \
clang \
cmake \
flex \
git \
grass-dev \
libexiv2-dev \
libexpat1-dev \
libfcgi-dev \
libgdal-dev \
libgeos-dev \
libgsl-dev \
libpdal-dev \
libpq-dev \
libproj-dev \
libprotobuf-dev \
libqca-qt5-2-dev \
libqt5opengl5-dev \
libqt5scintilla2-dev \
libqt5svg5-dev \
libqt5webkit5-dev \
libqt5serialport5-dev \
libqwt-qt5-dev \
libspatialindex-dev \
libspatialite-dev \
libsqlite3-dev \
libsqlite3-mod-spatialite \
libzip-dev \
libzstd-dev \
ninja-build \
protobuf-compiler \
pyqt5-dev \
pyqt5-dev-tools \
pyqt5.qsci-dev \
python3-all-dev \
python3-dev \
python3-sip-dev \
qt3d5-dev \
qt5keychain-dev \
qtbase5-dev \
qtdeclarative5-dev-tools \
qtpositioning5-dev \
qttools5-dev \
qttools5-dev-tools \
qtbase5-private-dev \
opencl-headers \
ocl-icd-opencl-dev \
&& apt-get clean
# Clazy
RUN curl -k https://downloads.kdab.com/clazy/1.6/Clazy-x86_64-1.6.AppImage -o /tmp/Clazy.AppImage \
&& chmod +x /tmp/Clazy.AppImage \

View File

@ -122,22 +122,19 @@ jobs:
--env PUSH_TO_CDASH=true \
--env WITH_3D=${WITH_3D} \
qgis/qgis3-build-deps:${DOCKER_TAG} \
/root/QGIS/.docker/docker-qgis-build.sh
docker commit qgis_container qgis_image
/bin/bash -c "/root/QGIS/.docker/docker-qgis-build.sh; ctest -V -S /root/QGIS/.ci/config_build.ctest"
- name: Push image
if: github.event_name == 'pull_request' && contains( github.event.pull_request.labels.*.name, 'Push Docker Image')
env:
GITHUB_PR_NUMBER: ${{github.event.number}}
run: |
docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}"
docker commit qgis_container qgis/qgis-pr-build:PR${GITHUB_PR_NUMBER}
docker push qgis/qgis-pr-build:PR${GITHUB_PR_NUMBER}
- name: Run unit tests
id: tests
- name: Push artifact
id: push_artifact
if: ${{ matrix.ubuntu-base == env.DEFAULT_UBUNTU_BASE }}
run: docker-compose -f .docker/docker-compose-testing.yml run qgis-deps /root/QGIS/.docker/docker-qgis-test.sh
run: tar --exclude='*.o' -cvzf build.tgz build
- uses: actions/upload-artifact@v2
if: ${{ matrix.ubuntu-base == env.DEFAULT_UBUNTU_BASE }}
with:
name: build.tgz
path: ./build.tgz
retention-days: 1
# - name: Test QGIS runners
# id: runners
@ -231,3 +228,77 @@ jobs:
# comment-id: ${{ steps.process-vars.outputs.COMMENT_ID }}
# edit-mode: append
# body: ${{ steps.process-vars.outputs.COMMENT_BODY }}
run-tests:
name: Run tests
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
GH_WORKSPACE: ${{ github.workspace }} # used in docker compose
DEFAULT_UBUNTU_BASE: '20.04'
runs-on: ubuntu-latest
strategy:
matrix:
# tests run on 20.04 (Qt 5.12), compile test on 20.10 (Qt 5.14)
ubuntu-base: [20.04]
test-batch: [ALL_BUT_PROVIDERS, POSTGRES, ORACLE, HANA]
fail-fast: false
needs: build
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set vars
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_REF: ${{ github.ref }}
GITHUB_PR_NUMBER: ${{github.event.number}}
UBUNTU_BASE: ${{ matrix.ubuntu-base }}
TEST_BATCH: ${{ matrix.test-batch }}
run: |
DOCKER_TAG=$(echo $( [[ ${GITHUB_EVENT_NAME} =~ ^pull_request$ ]] && echo ${GITHUB_BASE_REF} || echo ${GITHUB_REF##*/} ) | sed 's/^master$/latest/')$( [[ ${UBUNTU_BASE} != ${DEFAULT_UBUNTU_BASE} ]] && echo "_${UBUNTU_BASE}" || echo "" )
CTEST_BUILD_NAME=$( [[ ${GITHUB_EVENT_NAME} =~ ^pull_request$ ]] && echo "PR${GITHUB_PR_NUMBER}" || echo ${GITHUB_REF##*/} )"_${GITHUB_SHA}_${TEST_BATCH}"
[[ ${UBUNTU_BASE} == "20.04" ]] && PATCH_QT_3D=true || PATCH_QT_3D=false
echo "DOCKER_TAG=${DOCKER_TAG}" >> $GITHUB_ENV
echo "CTEST_BUILD_NAME=${CTEST_BUILD_NAME}" >> $GITHUB_ENV
echo "PATCH_QT_3D=${PATCH_QT_3D}" >> $GITHUB_ENV
- name: Print vars
run: |
echo DOCKER_TAG: ${DOCKER_TAG}
echo CTEST_BUILD_NAME: ${CTEST_BUILD_NAME}
echo PATCH_QT_3D: ${PATCH_QT_3D}
- name: Build deps
env:
UBUNTU_BASE: ${{ matrix.ubuntu-base }}
run: |
pushd .docker
docker build --target binary-only --build-arg UBUNTU_BASE=${UBUNTU_BASE} --cache-from qgis/qgis3-build-deps:${DOCKER_TAG} -t qgis/qgis3-build-deps-bin-only:${DOCKER_TAG} -f qgis3-build-deps.dockerfile .
popd
- name: Download build artifact
uses: actions/download-artifact@v2
with:
name: build.tgz
path: .
- name: Extract build artifact
run: tar xvzf build.tgz
- name: Run tests
id: tests
env:
TEST_BATCH: ${{matrix.test-batch}}
run: |
DOCKERFILE=$( ( [[ ${TEST_BATCH} == "ORACLE" ]] && echo "docker-compose-testing-oracle.yml" ) \
|| ( [[ ${TEST_BATCH} == "POSTGRES" ]] && echo "docker-compose-testing-postgres.yml" ) \
|| echo "docker-compose-testing.yml" )
echo "TEST_BATCH=$TEST_BATCH"
echo "DOCKERFILE=$DOCKERFILE"
docker-compose -f .docker/$DOCKERFILE run qgis-deps /root/QGIS/.docker/docker-qgis-test.sh $TEST_BATCH

View File

@ -10,5 +10,6 @@ if(ENABLE_TESTS)
if (ENABLE_PGTEST)
ADD_PYTHON_TEST(dbmanager-postgis-connector connector_test.py)
ADD_PYTHON_TEST(dbmanager-postgis-plugin plugin_test.py)
SET_TESTS_PROPERTIES(dbmanager-postgis-connector dbmanager-postgis-plugin PROPERTIES LABELS "POSTGRES")
endif()
endif()

View File

@ -3,9 +3,7 @@
# This runs shellcheck on all sh files
srcdir=$(dirname $0)/../../
DIR=$(git -C ${srcdir} rev-parse --show-toplevel)
DIR=$(realpath $(dirname $0)/../../)
pushd ${DIR} > /dev/null || exit
result=$(shellcheck -e SC2016,SC2015,SC2086,SC2002,SC1117,SC2154,SC2076,SC2046,SC1090,SC2038,SC2031,SC2030,SC2162,SC2044,SC2119,SC1001,SC2120,SC2059,SC2128,SC2005,SC2013,SC2027,SC2090,SC2089,SC2124,SC2001,SC2010,SC1072,SC1073,SC1009,SC2166,SC2045,SC2028,SC1091,SC1083,SC2021 $(find . -name '*.sh'))

View File

@ -67,3 +67,6 @@ set(TESTS
foreach(TESTSRC ${TESTS})
ADD_QGIS_TEST(${TESTSRC})
endforeach(TESTSRC)
SET_TESTS_PROPERTIES(qgis_processingtest
PROPERTIES LABELS "POSTGRES")

View File

@ -243,4 +243,8 @@ foreach(TESTSRC ${TESTS})
ADD_QGIS_TEST(${TESTSRC})
endforeach(TESTSRC)
if (ENABLE_PGTEST)
SET_TESTS_PROPERTIES(qgis_vectorlayerjoinbuffertest PROPERTIES LABELS "POSTGRES")
endif()
add_dependencies(qgis_coordinatereferencesystemtest synccrsdb)

View File

@ -127,3 +127,10 @@ ADD_QGIS_TEST(singlebandpseudocolorrendererwidget testqgssinglebandpseudocolorre
ADD_QGIS_TEST(doublevalidator testqgsdoublevalidator.cpp)
ADD_QGIS_TEST(meshlayerpropertiesdialog testqgsmeshlayerpropertiesdialog.cpp)
ADD_QGIS_TEST(externalresourcewidgetwrapper testqgsexternalresourcewidgetwrapper.cpp)
SET_TESTS_PROPERTIES(qgis_listwidgettest PROPERTIES LABELS "POSTGRES")
if (ENABLE_PGTEST)
SET_TESTS_PROPERTIES(qgis_processingguitest qgis_valuerelationwidgetwrapper qgis_texteditwrapper
qgis_newdatabasetablewidget
PROPERTIES LABELS "POSTGRES")
endif()

View File

@ -231,7 +231,6 @@ ADD_PYTHON_TEST(PyQgsProcessingInPlace test_qgsprocessinginplace.py)
ADD_PYTHON_TEST(PyQgsProcessingAlgRunner test_qgsprocessingalgrunner.py)
ADD_PYTHON_TEST(PyQgsProcessingAlgDecorator test_processing_alg_decorator.py)
ADD_PYTHON_TEST(PyQgsProcessingParameters test_qgsprocessingparameters.py)
ADD_PYTHON_TEST(PyQgsImportIntoPostGIS test_processing_importintopostgis.py)
ADD_PYTHON_TEST(PyQgsProjectionSelectionWidgets test_qgsprojectionselectionwidgets.py)
ADD_PYTHON_TEST(PyQgsProjectMetadata test_qgsprojectmetadata.py)
ADD_PYTHON_TEST(PyQgsProjectServerValidator test_qgsprojectservervalidator.py)
@ -243,7 +242,6 @@ ADD_PYTHON_TEST(PyQgsProviderConnectionSpatialite test_qgsproviderconnection_spa
ADD_PYTHON_TEST(PyQgsProviderRegistry test_qgsproviderregistry.py)
ADD_PYTHON_TEST(PyQgsProviderSourceWidgetProviderRegistry test_qgssourcewidgetproviderregistry.py)
ADD_PYTHON_TEST(TestQgsRandomMarkerSymbolLayer test_qgsrandommarkersymbollayer.py)
ADD_PYTHON_TEST(PyQgsQueryResultModel test_qgsqueryresultmodel.py)
ADD_PYTHON_TEST(PyQgsRange test_qgsrange.py)
ADD_PYTHON_TEST(PyQgsRangeSlider test_qgsrangeslider.py)
ADD_PYTHON_TEST(PyQgsRangeWidgets test_qgsrangewidgets.py)
@ -314,7 +312,6 @@ ADD_PYTHON_TEST(PyQgsUnitTypes test_qgsunittypes.py)
ADD_PYTHON_TEST(PyQgsValidityChecks test_qgsvaliditychecks.py)
ADD_PYTHON_TEST(PyQgsValidityResultsWidget test_qgsvalidityresultswidget.py)
ADD_PYTHON_TEST(PyQgsVectorFieldMarkerSymbolLayer test_qgsvectorfieldmarkersymbollayer.py)
ADD_PYTHON_TEST(PyQgsVectorFileWriter test_qgsvectorfilewriter.py)
ADD_PYTHON_TEST(PyQgsVectorFileWriterTask test_qgsvectorfilewritertask.py)
ADD_PYTHON_TEST(PyQgsVectorLayer test_qgsvectorlayer.py)
ADD_PYTHON_TEST(PyQgsVectorLayerFeatureCounter test_qgsvectorlayerfeaturecounter.py)
@ -325,7 +322,6 @@ ADD_PYTHON_TEST(PyQgsVectorLayerRenderer test_qgsvectorlayerrenderer.py)
ADD_PYTHON_TEST(PyQgsVectorLayerSelectedFeatureSource test_qgsvectorlayerselectedfeaturesource.py)
ADD_PYTHON_TEST(PyQgsVectorLayerShapefile test_qgsvectorlayershapefile.py)
ADD_PYTHON_TEST(PyQgsVectorLayerTemporalProperties test_qgsvectorlayertemporalproperties.py)
ADD_PYTHON_TEST(PyQgsVectorLayerUtils test_qgsvectorlayerutils.py)
ADD_PYTHON_TEST(PyQgsZonalStatistics test_qgszonalstatistics.py)
ADD_PYTHON_TEST(PyQgsVirtualLayerProvider test_provider_virtual.py)
ADD_PYTHON_TEST(PyQgsVirtualLayerTask test_qgsvirtuallayertask.py)
@ -367,6 +363,10 @@ if (WITH_DESKTOP)
endif()
if (ENABLE_PGTEST)
ADD_PYTHON_TEST(PyQgsImportIntoPostGIS test_processing_importintopostgis.py)
ADD_PYTHON_TEST(PyQgsQueryResultModel test_qgsqueryresultmodel.py)
ADD_PYTHON_TEST(PyQgsVectorFileWriter test_qgsvectorfilewriter.py)
ADD_PYTHON_TEST(PyQgsVectorLayerUtils test_qgsvectorlayerutils.py)
ADD_PYTHON_TEST(PyQgsPostgresProvider test_provider_postgres.py)
ADD_PYTHON_TEST(PyQgsPostgresRasterProvider test_provider_postgresraster.py)
ADD_PYTHON_TEST(PyQgsPostgresDomain test_qgspostgresdomain.py)
@ -386,23 +386,35 @@ if (ENABLE_PGTEST)
ADD_PYTHON_TEST(PyQgsProviderConnectionPostgres test_qgsproviderconnection_postgres.py)
if (WITH_SERVER)
ADD_PYTHON_TEST(PyQgsServerWMSGetFeatureInfoPG test_qgsserver_wms_getfeatureinfo_postgres.py)
# project contains connection to Postgres database
ADD_PYTHON_TEST(PyQgsServerWMSGetFeatureInfo test_qgsserver_wms_getfeatureinfo.py)
ADD_PYTHON_TEST(PyQgsServerAccessControlWMSGetPrintPG test_qgsserver_accesscontrol_wms_getprint_postgres.py)
endif()
SET_TESTS_PROPERTIES(PyQgsImportIntoPostGIS PyQgsQueryResultModel PyQgsVectorFileWriter PyQgsPostgresProvider
PyQgsVectorLayerUtils PyQgsPostgresRasterProvider PyQgsPostgresDomain PyQgsPostgresTransaction
PyQgsRelationEditWidget PyQgsRelationPostgres PyQgsVectorLayerTools PyQgsProjectStoragePostgres
PyQgsAuthManagerPKIPostgresTest PyQgsAuthManagerPasswordPostgresTest PyQgsAuthManagerOgrPostgresTest
PyQgsDbManagerPostgis PyQgsDatabaseSchemaModel PyQgsDatabaseTableModel PyQgsDatabaseSchemaComboBox PyQgsDatabaseTableComboBox
PyQgsProviderConnectionPostgres PyQgsServerWMSGetFeatureInfoPG PyQgsServerAccessControlWMSGetPrintPG PyQgsServerWMSGetFeatureInfo
PROPERTIES LABELS "POSTGRES")
endif()
if (ENABLE_MSSQLTEST)
ADD_PYTHON_TEST(PyQgsMssqlProvider test_provider_mssql.py)
ADD_PYTHON_TEST(PyQgsProviderConnectionMssql test_qgsproviderconnection_mssql.py)
SET_TESTS_PROPERTIES(PyQgsMssqlProvider PyQgsProviderConnectionMssql PROPERTIES LABELS "MSSQL")
endif()
if (ENABLE_ORACLETEST)
ADD_PYTHON_TEST(PyQgsOracleProvider test_provider_oracle.py)
ADD_PYTHON_TEST(PyQgsProviderConnectionOracle test_qgsproviderconnection_oracle.py)
SET_TESTS_PROPERTIES(PyQgsOracleProvider PyQgsProviderConnectionOracle PROPERTIES LABELS "ORACLE")
endif()
if (ENABLE_HANATEST)
ADD_PYTHON_TEST(PyQgsHanaProvider test_provider_hana.py TEST_TIMEOUT=600)
ADD_PYTHON_TEST(PyQgsProviderConnectionHana test_qgsproviderconnection_hana.py TEST_TIMEOUT=120)
SET_TESTS_PROPERTIES(PyQgsHanaProvider PyQgsProviderConnectionHana PROPERTIES LABELS "HANA")
endif (ENABLE_HANATEST)
if (WITH_SERVER)
@ -418,7 +430,6 @@ if (WITH_SERVER)
ADD_PYTHON_TEST(PyQgsServerWMSGetMapSizeProject test_qgsserver_wms_getmap_size_project.py)
ADD_PYTHON_TEST(PyQgsServerWMSGetMapSizeServer test_qgsserver_wms_getmap_size_server.py)
ADD_PYTHON_TEST(PyQgsServerWMSGetMapIgnoreBadLayers test_qgsserver_wms_getmap_ignore_bad_layers.py)
ADD_PYTHON_TEST(PyQgsServerWMSGetFeatureInfo test_qgsserver_wms_getfeatureinfo.py)
ADD_PYTHON_TEST(PyQgsServerWMSGetLegendGraphic test_qgsserver_wms_getlegendgraphic.py)
ADD_PYTHON_TEST(PyQgsServerWMSGetPrint test_qgsserver_wms_getprint.py)
ADD_PYTHON_TEST(PyQgsServerWMSGetPrintExtra test_qgsserver_wms_getprint_extra.py)