Skip to content

Add regression test action; add test data #6

Add regression test action; add test data

Add regression test action; add test data #6

Workflow file for this run

---
name: regression-test
on:
pull_request:
jobs:
test-regression:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# build local test image
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker
- name: Build test image
uses: docker/build-push-action@v5
with:
push: false
tags: pdok/mapserver:local
- name: Build test image (NL target)
uses: docker/build-push-action@v5
with:
push: false
target: NL
tags: pdok/mapserver:local-nl
- name: Regression test => rectObj wrong projection (WMS)
run: |
# start WMS mapserver
docker run -e MAPSERVER_CONFIG_FILE=/srv/data/rectobj.conf -e MS_MAPFILE=/srv/data/rectobj.map -e SERVICE_TYPE=WMS --rm -d \
-p 8181:80 --name mapserver-rectobj-wms -v `pwd`/testdata/rectobj:/srv/data pdok/mapserver:local
# execute request
mkdir -p `pwd`/testdata/rectobj/actual
curl "http://localhost:8181/mapserver?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&BBOX=545287.2873572960962,6867556.049125162885,545689.3385149866808,6868025.580225903541&CRS=EPSG:3857&WIDTH=995&HEIGHT=1162&LAYERS=pand&STYLES=&FORMAT=image/png&TRANSPARENT=TRUE" -sLo `pwd`/testdata/rectobj/actual/rectobj.png
# assert results are as expected
exit_code=0
# diff WMS png files, if binary diff exists, check for 'perceptual diff' using compiled binary of https://github.com/myint/perceptualdiff
wms_diff=$(diff -q `pwd`/testdata/rectobj/expected/wms.png `pwd`/testdata/rectobj/actual/rectobj.png)
if [ -n "$wms_diff" ]
then
echo "binary diff between images, checking for perceptual diff"
wms_pdiff=$(`pwd`/testdata/perceptualdiff `pwd`/testdata/rectobj/expected/wms.png `pwd`/testdata/rectobj/actual/rectobj.png)
if [ -n "$wms_pdiff" ]
then
echo "$wms_pdiff"
exit_code=1
fi
fi
# cleanup
rm -rf `pwd`/testdata/rectobj/actual
# stop mapserver
docker stop mapserver-rectobj-wms
exit $exit_code
- name: Regression test => rectObj wrong projection (WFS)
run: |
# start WFS mapserver
docker run -e MAPSERVER_CONFIG_FILE=/srv/data/rectobj.conf -e MS_MAPFILE=/srv/data/rectobj.map -e SERVICE_TYPE=WFS --rm -d \
-p 8182:80 --name mapserver-rectobj-wfs -v `pwd`/testdata/rectobj:/srv/data pdok/mapserver:local
# execute request
mkdir -p `pwd`/testdata/rectobj/actual
curl "http://localhost:8182/mapserver?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=bag:pand&STARTINDEX=0&COUNT=1000&SRSNAME=urn:ogc:def:crs:EPSG::3857&BBOX=545287.2873572960962,6867556.049125162885,545689.3385149866808,6868025.580225903541,urn:ogc:def:crs:EPSG::3857" -sLo `pwd`/testdata/rectobj/actual/rectobj.xml
# assert results are as expected
exit_code=0
# diff WFS xml files, ignore timestamp but match numberMatched and numberReturned
wfs_diff=$(diff -q `pwd`/testdata/rectobj/expected/wfs.xml `pwd`/testdata/rectobj/actual/rectobj.xml -I 'timeStamp="[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}"\snumberMatched="5"\snumberReturned="5"')
if [ -n "$wfs_diff" ]
then
echo "$wfs_diff"
exit_code=1
fi
# cleanup
rm -rf `pwd`/testdata/rectobj/actual
# stop mapserver
docker stop mapserver-rectobj-wfs
exit $exit_code
- name: Regression test => RDNAPTRANS (RD->ETRS89)
run: |
# start mapserver
docker run --rm -d -p 8181:80 --name mapserver-rdnap-wfs -v `pwd`/testdata/ETRS89andRDNAP:/srv/data -e MAPSERVER_CONFIG_FILE=/srv/data/rd.conf -e SERVICE_TYPE=wfs -e MS_MAPFILE=/srv/data/rd.map pdok/mapserver:local
# execute request
mkdir -p `pwd`/testdata/ETRS89andRDNAP/actual
curl "http://localhost:8181/mapserver?service=WFS&version=2.0.0&request=GetFeature&typeName=rd&outputFormat=geojson&srsName=EPSG:4258" -sL | \
jq --arg crs "etrs89" '.features | .[] | { id, x_dev: (.geometry.coordinates[0] - (.properties[$crs+"_x"]|tonumber)), y_dev: (.geometry.coordinates[1] - (.properties[$crs+"_y"]|tonumber)) } | {error: ((.x_dev|fabs) > 0.001 or (.y_dev|fabs) > 0.001 )} + .' | \
jq -s 'group_by (.error)[] | {error: .[0].error, count: length}' > `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json
# assert results are as expected
exit_code=0
results=($(cat `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json | jq -r '.error'))
for err in "${results[@]}"
do
if [ "$err" == "true" ]
then
echo "found errors in RDNAPTRANS from RD to ETRS89:"
cat `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json
exit_code=1
fi
done
# cleanup
rm -rf `pwd`/testdata/ETRS89andRDNAP/actual
# stop mapserver
docker stop mapserver-rdnap-wfs
exit $exit_code
- name: Regression test => RDNAPTRANS (ETRS89->RD)
run: |
# start mapserver
docker run --rm -d -p 8181:80 --name mapserver-rdnap-wfs -v `pwd`/testdata/ETRS89andRDNAP:/srv/data -e MAPSERVER_CONFIG_FILE=/srv/data/etrs89.conf -e SERVICE_TYPE=wfs -e MS_MAPFILE=/srv/data/etrs89.map pdok/mapserver:local-nl
# execute request
mkdir -p `pwd`/testdata/ETRS89andRDNAP/actual
curl "http://localhost:8181/mapserver?service=WFS&version=2.0.0&request=GetFeature&typeName=etrs89&outputFormat=geojson&srsName=EPSG:28992" -sL | \
jq --arg crs "rd" '.features | .[] | { id, x_dev: (.geometry.coordinates[0] - (.properties[$crs+"_x"]|tonumber)), y_dev: (.geometry.coordinates[1] - (.properties[$crs+"_y"]|tonumber)) } | {error: ((.x_dev|fabs) > 0.001 or (.y_dev|fabs) > 0.001 )} + .' | \
jq -s 'group_by (.error)[] | {error: .[0].error, count: length}' > `pwd`/testdata/ETRS89andRDNAP/actual/rd.json
# assert results are as expected
exit_code=0
results=($(cat `pwd`/testdata/ETRS89andRDNAP/actual/rd.json | jq -r '.error'))
for err in "${results[@]}"
do
if [ "$err" == "true" ]
then
echo "found errors in RDNAPTRANS from ETRS89 to RD:"
cat `pwd`/testdata/ETRS89andRDNAP/actual/rd.json
exit_code=1
fi
done
# cleanup
rm -rf `pwd`/testdata/ETRS89andRDNAP/actual
# stop mapserver
docker stop mapserver-rdnap-wfs
exit $exit_code