1+ ---
2+ name : regression-test
3+ on :
4+ pull_request :
5+ jobs :
6+ test-regression :
7+ runs-on : ubuntu-latest
8+ steps :
9+ - uses : actions/checkout@v4
10+
11+ # build local test image
12+ - name : Set up Docker Buildx
13+ uses : docker/setup-buildx-action@v3
14+ with :
15+ driver : docker
16+ - name : Build test image
17+ uses : docker/build-push-action@v5
18+ with :
19+ push : false
20+ tags : pdok/mapserver:local
21+ - name : Build test image (NL target)
22+ uses : docker/build-push-action@v5
23+ with :
24+ push : false
25+ target : NL
26+ tags : pdok/mapserver:local-nl
27+
28+ - name : Regression test => rectObj wrong projection (WMS)
29+ run : |
30+ # start WMS mapserver
31+ docker run -e MAPSERVER_CONFIG_FILE=/srv/data/rectobj.conf -e MS_MAPFILE=/srv/data/rectobj.map -e SERVICE_TYPE=WMS --rm -d \
32+ -p 8181:80 --name mapserver-rectobj-wms -v `pwd`/testdata/rectobj:/srv/data pdok/mapserver:local
33+
34+ # execute request
35+ mkdir -p `pwd`/testdata/rectobj/actual
36+ 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
37+
38+ # assert results are as expected
39+ exit_code=0
40+
41+ # diff WMS png files, if binary diff exists, check for 'perceptual diff' using compiled binary of https://github.com/myint/perceptualdiff
42+ wms_diff=$(diff -q `pwd`/testdata/rectobj/expected/wms.png `pwd`/testdata/rectobj/actual/rectobj.png)
43+ if [ -n "$wms_diff" ]
44+ then
45+ echo "binary diff between images, checking for perceptual diff"
46+ wms_pdiff=$(`pwd`/testdata/perceptualdiff `pwd`/testdata/rectobj/expected/wms.png `pwd`/testdata/rectobj/actual/rectobj.png)
47+ if [ -n "$wms_pdiff" ]
48+ then
49+ echo "$wms_pdiff"
50+ exit_code=1
51+ fi
52+ fi
53+
54+ # cleanup
55+ rm -rf `pwd`/testdata/rectobj/actual
56+
57+ # stop mapserver
58+ docker stop mapserver-rectobj-wms
59+
60+ exit $exit_code
61+
62+ - name : Regression test => rectObj wrong projection (WFS)
63+ run : |
64+ # start WFS mapserver
65+ docker run -e MAPSERVER_CONFIG_FILE=/srv/data/rectobj.conf -e MS_MAPFILE=/srv/data/rectobj.map -e SERVICE_TYPE=WFS --rm -d \
66+ -p 8182:80 --name mapserver-rectobj-wfs -v `pwd`/testdata/rectobj:/srv/data pdok/mapserver:local
67+
68+ # execute request
69+ mkdir -p `pwd`/testdata/rectobj/actual
70+ 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
71+
72+ # assert results are as expected
73+ exit_code=0
74+
75+ # diff WFS xml files, ignore timestamp but match numberMatched and numberReturned
76+ 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"')
77+ if [ -n "$wfs_diff" ]
78+ then
79+ echo "$wfs_diff"
80+ exit_code=1
81+ fi
82+
83+ # cleanup
84+ rm -rf `pwd`/testdata/rectobj/actual
85+
86+ # stop mapserver
87+ docker stop mapserver-rectobj-wfs
88+
89+ exit $exit_code
90+
91+ - name : Regression test => RDNAPTRANS (RD->ETRS89)
92+ run : |
93+ # start mapserver
94+ 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
95+
96+ # execute request
97+ mkdir -p `pwd`/testdata/ETRS89andRDNAP/actual
98+ curl "http://localhost:8181/mapserver?service=WFS&version=2.0.0&request=GetFeature&typeName=rd&outputFormat=geojson&srsName=EPSG:4258" -sL | \
99+ 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 )} + .' | \
100+ jq -s 'group_by (.error)[] | {error: .[0].error, count: length}' > `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json
101+
102+ # assert results are as expected
103+ exit_code=0
104+ results=($(cat `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json | jq -r '.error'))
105+ for err in "${results[@]}"
106+ do
107+ if [ "$err" == "true" ]
108+ then
109+ echo "found errors in RDNAPTRANS from RD to ETRS89:"
110+ cat `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json
111+ exit_code=1
112+ fi
113+ done
114+
115+ # cleanup
116+ rm -rf `pwd`/testdata/ETRS89andRDNAP/actual
117+
118+ # stop mapserver
119+ docker stop mapserver-rdnap-wfs
120+
121+ exit $exit_code
122+
123+ - name : Regression test => RDNAPTRANS (ETRS89->RD)
124+ run : |
125+ # start mapserver
126+ 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
127+
128+ # execute request
129+ mkdir -p `pwd`/testdata/ETRS89andRDNAP/actual
130+ curl "http://localhost:8181/mapserver?service=WFS&version=2.0.0&request=GetFeature&typeName=etrs89&outputFormat=geojson&srsName=EPSG:28992" -sL | \
131+ 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 )} + .' | \
132+ jq -s 'group_by (.error)[] | {error: .[0].error, count: length}' > `pwd`/testdata/ETRS89andRDNAP/actual/rd.json
133+
134+ # assert results are as expected
135+ exit_code=0
136+ results=($(cat `pwd`/testdata/ETRS89andRDNAP/actual/rd.json | jq -r '.error'))
137+ for err in "${results[@]}"
138+ do
139+ if [ "$err" == "true" ]
140+ then
141+ echo "found errors in RDNAPTRANS from ETRS89 to RD:"
142+ cat `pwd`/testdata/ETRS89andRDNAP/actual/rd.json
143+ exit_code=1
144+ fi
145+ done
146+
147+ # cleanup
148+ rm -rf `pwd`/testdata/ETRS89andRDNAP/actual
149+
150+ # stop mapserver
151+ docker stop mapserver-rdnap-wfs
152+
153+ exit $exit_code
154+ - name : Regression test => Different CRS (RDNAPTRANS -> EPSG:4258)
155+ run : |
156+ # start mapserver
157+ docker run --rm -d -p 8181:80 --name mapserver-crs -v `pwd`/testdata/crs:/srv/data -e MAPSERVER_CONFIG_FILE=/srv/data/natpark.conf -e SERVICE_TYPE=wfs -e MS_MAPFILE=/srv/data/natpark.map pdok/mapserver:local-nl
158+
159+ # execute request
160+ mkdir -p `pwd`/testdata/crs/actual
161+ curl "http://localhost:8181/mapserver?service=WFS&request=GetFeature&count=1&version=2.0.0&outputFormat=application/json&typeName=nationaleparken&srsName=EPSG:4258" -sL > `pwd`/testdata/crs/actual/output.json
162+
163+ # assert results are as expected
164+ exit_code=0
165+ [ $(cat `pwd`/testdata/crs/actual/output.json | jq -r '.crs.properties.name') == "urn:ogc:def:crs:EPSG::4258" ] || exit_code=1;
166+ [ $(cat `pwd`/testdata/crs/actual/output.json | jq -r '.bbox[0]' | xargs -I '{}' echo "scale=5;" "({}-4.3646379084)/1 == 0" | bc) ] || exit_code=1;
167+ [ $(cat `pwd`/testdata/crs/actual/output.json | jq -r '.bbox[1]' | xargs -I '{}' echo "scale=5;" "({}-51.3620482342678)/1 == 0" | bc) ] || exit_code=1;
168+ [ $(cat `pwd`/testdata/crs/actual/output.json | jq -r '.bbox[2]' | xargs -I '{}' echo "scale=5;" "({}-4.46528581228022)/1 == 0" | bc) ] || exit_code=1;
169+ [ $(cat `pwd`/testdata/crs/actual/output.json | jq -r '.bbox[3]' | xargs -I '{}' echo "scale=5;" "({}-51.4268875774673)/1 == 0" | bc) ] || exit_code=1;
170+
171+ # cleanup
172+ rm -rf `pwd`/testdata/crs/actual
173+
174+ # stop mapserver
175+ docker stop mapserver-crs
176+
177+ exit $exit_code
0 commit comments